var lastSelected = new Array();
var form_is_just_submited = false;
if (!_gaq) var _gaq;

var aagGaq = {
    'indexes': Array(),
    'addIndex': function (indexName) {
        this.indexes[this.indexes.length] = indexName;
    },
    'callEvent': function (category, action, label, val) {
        if (_gaq != undefined && category != undefined && action != undefined) {
            for (var i=0;i<this.indexes.length;i++) {
                if (typeof val == 'number') {
                	_gaq.push([this.indexes[i] + '_trackEvent', category, action, label+"", val]);
                } else if (label != undefined && label !== '') {
                	_gaq.push([this.indexes[i] + '_trackEvent', category, action, label+""]);
                } else {
                	_gaq.push([this.indexes[i] + '_trackEvent', category, action]);
                }
            }
        }
    }
};

function _submitFormButton(form, name, value, type) {
	
	var err = false;
	if (!form_is_just_submited) { //odchyceni dvojkliku
		form_is_just_submited = true;
		
		//Symphony 2 - pokud ma stranka definovane nejake ukoncovaci procedury pred presmerovanim
		if( typeof stopStack != 'undefined' ) {
			for(var i = 0; i < stopStack.length; i++) {
				eval( stopStack[i] );
			}
		}
		
		if (checkForm(form, type)) {
			if (!name) err = false;
			else {
				var e;
				e = document.createElement('input');
			    if (e) {
			    	e.name = name;
			    	e.type = 'hidden';
				    form.appendChild(e);
			    	e.value = value;
				} else err = true;
			}
			if (!err) {
			    // Pred odeslanim se provadi google analytics
			    if (typeof _gaq != 'undefined') {
			        var gaqLink = form.action;
			        if (type == 'next' && typeof secureLink != 'undefined') {
			            gaqLink = secureLink;
			        }
			        _gaq.push(['_link', gaqLink]);
			    }
			    form.submit();
			}
		} else {
		     form_is_just_submited = false;
		} 
	} 
}

// prevod hexadecimalniho cisla na dekadicke
function hexdec(hexNumber) {
    return parseInt(hexNumber.toUpperCase(), 16);
}



function Is() {
  var agt=navigator.userAgent.toLowerCase();
  this.ie=((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1))?1:0;
  this.dom=document.getElementById?1:0;
  this.ie4=(document.all && !this.dom)?1:0;
  this.ns4=(document.layers && !this.dom)?1:0;
  return this;
}

var clndr_mnames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var clndr_wnames = new Array('Mo','Tu','We','Th','Fr','Sa','Su');

var is = new Is();

if(is.ns4) {
	var regSurnames = /^[ ]*[a-z]+[ ]*[a-z]+[ a-z]*$/i;
	var regNames = /^[ ]*[a-z]+[ a-z]*$/i;                             
	var regInfSurnames = /^[ ]*[a-z]{2,}[ ]*$/i;
	var regInfNames = /^[ ]*[a-z]{1,}[ ]*$/i;
	var regContact = /^[ ]*[a-z0-9,.:_"\'()&#*+\/-]+[ a-z0-9,.:_"\'()&#*+\/-]*$/i;
	var regPhone = /^[+][0-9]{1,4}[ ][0-9\- ]{6,12}$/i;
	var regNationalIdentification = /^[0-9]{11}$/i;
	var ukraineChars = '';
}
else {
	var charAllowed = ' -ſ';//'Â-ţž';
	var charAllowedInf = '¡-ſ';//'Â-ţž';
	var regSurnames = new RegExp("^[ ]*[a-z" + charAllowed + "]+[ ]*[a-z" + charAllowed + "]+[ a-z" + charAllowed + "]*$", "i");
	var regNames = new RegExp("^[ ]*[a-z" + charAllowed + "]+[ a-z" + charAllowed + "]*$", "i");
	var regInfSurnames = new RegExp("^[ ]*[a-z" + charAllowed + "]{2,}[ ]*$", "i");
	var regInfNames = new RegExp("^[ ]*[a-z" + charAllowedInf + "]{1,}[ ]*$", "i");
	var regContact = new RegExp("^[ ]*[a-z" + charAllowed + "0-9,.:_\"'()&#\/*+-]+[ a-z" + charAllowed + "0-9,.:_\"'()&#\/*+-]*$", "i"); // */
	var regPhone = new RegExp("^[+][0-9]{1,4}[ ][0-9\- ]{6,12}$", "i");
	var regNationalIdentification = new RegExp("^[0-9]{11}$", "i");
	var ukraineChars = 'АаБбВвЗзГгҐґДдЕеЄєЖжИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЮюЯяЬьЁёЪъЫыЭэ';
}
var regFFcard = /^[a-z0-9]+$/i;
var regemail = /^[+]?[_a-z0-9-]+(\.[_a-z0-9-]+)*@([0-9a-z][0-9a-z-]*\.)+[a-z]{2,6}$/i;
var regFoidValue = /^[a-z0-9]+$/i;
var regnum = /^[0-9]{1,2}$/;

//kontrolni regexpy pro creditcards
var regAX = /^((37)|(34))[0-9]{13}$/; //AMERICANEXPRESS
var regDC = /^((30)|(36)|(38))[0-9]{12}$/; //DINNERSCLUB
var regCA = /^5[0-9]{15}$/; //MASTERCARD
var regVI = /^4(([0-9]{15})|([0-9]{12}))$/; //VISA
var regTP = /^[0-9]{15}$/;  //UATP

//general images
var plus = new Image();
plus.src = 'images/box.gif';
var minus = new Image();
minus.src= 'images/min.gif';

function sprintf(rest, p) {
	var part = '';
	var x, n;
	x = rest.search('%');
	if (x == -1) return rest;
	if (x > 0) part = part + rest.substr(0, x);
	n = rest.substr(x+1, 1);
	if (isNaN(n) || (typeof p[n] == 'undefined')) {
		part = part + '%';
		x++;
	} else {
		part = part + p[n];
		x = x + 2;
	}
	rest = rest.substr(x);
	if (rest != '') part = part + sprintf(rest, p);
	return part;
}

function swapImages(el, status) {
	if (el) el.src = (status) ? minus.src : plus.src;
}

function iterateSwitch(id, status, start, end) {
	var k;
	for(k = start; k <= end; k++) switchVisibility(id + k, status);	
}

function switchVisibility(elem, status) {
  var elm;
  if(!is.dom) return;
  elm = document.getElementById(elem);
  if(elm) elm.style.display = (status) ? "" : "none";
}

function switchCvcImage(elem, cardType) {
  	var elm;
  	if(!is.dom) return;
  	elm = document.getElementById(elem);
  	if(elm) {
  		if(cardType != null) elm.style.background = 'url("images/cvc/'+cardType+'.gif") no-repeat';
  		else elm.style.background = '';
	}
}

function getElement(form, elName) {
	var el;
	if (!form || !elName || (elName == '')) return false;
	eval('el = form.'+elName+';');
	if (!el) return false;
	return el;
}

function getFormByName(formName) {
	var el;
	if (is.dom) {
		return document.getElementsByName(formName)[0];
	} else {
		return document.forms[formName];
	}	
}

function getRadio(Ctrl, elName) {
	return getElementValue(Ctrl, elName);
}
function getInput(Ctrl, elName) {
	return getElementValue(Ctrl, elName);
}
function getCombo(Ctrl, elName) {
	return getElementValue(Ctrl, elName);
}

function getElementValue(Ctrl, elName) {
	var el, z;
	if (!Ctrl) return false;
	if (!elName) return false;
	el = Ctrl.elements[elName];
	//eval("el = Ctrl." + elName);
	if (!el) return false;
	if (el.type == 'text') return el.value; //input text
	if (el.type == 'textarea') return el.value; //input text
	if (el.type == 'hidden') return el.value; //input text hidden
	if (el.type == 'password') return el.value; //input text password
	if (el.options) return el.options[el.selectedIndex].value; //combo
	if (!el.length && el.checked == 1) { //radio - jedina volba a je zaskrtnuta
    	return el.value;
	}
	else if (el.length) { //radio - vice voleb
    	for (z=0; z<el.length; z++) {
    		if (el[z].checked) return el[z].value;
    	}
  	}
  	return false;
}

function setCombo(id, val) {
    var	elm = document.getElementById(id);
	if(!elm || !elm.options)
		return false;
    
    for(var m = 0; m < elm.options.length; m++) {
        if(elm.options[m].value == val) {
            elm.selectedIndex = m;
            return m;
        }
    }
}

var prefNames = new Array();
var prefPositions = new Array();

function addOption(id, addVal) {
    var m;
	var	elm = document.getElementById(id);
	if(!elm || !elm.options) return false;
    if(prefPositions[id] == null) return;
    
    for(m = 0; m < elm.options.length; m++) {
        if(elm.options[m] && elm.options[m].value == addVal)
            return false;
    }
    
    var actual = elm.options[elm.selectedIndex].value;
    for(m = elm.options.length - 1; m >= prefPositions[id]; m--) {
        elm.options[m+1] = new Option(elm.options[m].text, elm.options[m].value);
    }
    elm.options[prefPositions[id]] = new Option(prefNames[addVal], addVal);
    setCombo(id, actual);
}

function removeOption(id, removeVal) {
	var	elm = document.getElementById(id);
	if(!elm || !elm.options) return false;
    
    var actual = elm.options[elm.selectedIndex].value;
    for(var m = 0; m < elm.options.length; m++) {
        if(elm.options[m].value == removeVal) {
            prefNames[removeVal] = elm.options[m].text;
            elm.options[m] = null;
            prefPositions[id] = m;
            if(actual == removeVal) {
                elm.selectedIndex = 0;
            }
            else {
                setCombo(id, actual);
            }
            break;
        }
    }
}

function setRadio(name, wanted, unwanted) {
	//alert(name + " " + wanted + " " + unwanted);
	elm = document.getElementsByName(name);
	if(!elm || !elm.length) return;

	if(unwanted && unwanted.length) {
		for(var k = 0; k < elm.length; k++) {
			if(elm[k].value == unwanted && elm[k].checked) {
				return setRadio(name, wanted);
			}
		}
	}
	else {
		for(var k = 0; k < elm.length; k++) {
			if(elm[k].value == wanted) {
				elm[k].checked = true;
				return true;
		    }
		}
	}
	return false;
}

function setCssClass(elem, cssClassName) {
	var elm;
	if(!is.dom) return false;
	elm = document.getElementById(elem);
	if(elm) {
		elm.className = cssClassName;
		return true;
	} else {
		return false;
	}	
}

// nova fce setCssClass2(id, oldClass, newClass) // (el, 'cssClassName', 'odd')
// odtranit puvodni - odd a nastavit novou - append
function setCssClass2(id, newClass, oldClass) {
	if(!is.dom) return false;

    jQ('#' + id).removeClass(oldClass).addClass(newClass);
}


function postSelection(el, status, name, index, cssClassName) {
	
	swapImages(el, status);
    if(status && lastSelected && lastSelected[index]) {	
		//remove selection from previous
    	setCssClass2(lastSelected[index], 'odd', cssClassName);
    	setCssClass2(lastSelected[index]+"ln", 'odd', cssClassName);
    	setCssClass2(lastSelected[index]+"_0", 'odd', cssClassName);
    	setCssClass2(lastSelected[index]+"_1", 'odd', cssClassName);
		var i = 1;
		while(setCssClass2(lastSelected[index]+"_rules_"+i+"_1", 'odd', cssClassName)) {
			setCssClass2(lastSelected[index]+"_rules_"+i+"_2", 'odd', cssClassName);
			i++;
		}
	}
    setCssClass2(name, (status) ? cssClassName : 'odd', ((status) ? 'odd' : cssClassName));	//select new one
    setCssClass2(name+"ln", (status) ? cssClassName : 'odd', ((status) ? 'odd' : cssClassName));
    setCssClass2(name+"_0", (status) ? cssClassName : 'odd', ((status) ? 'odd' : cssClassName));
    setCssClass2(name+"_1", (status) ? cssClassName : 'odd', ((status) ? 'odd' : cssClassName));
	var j = 1;
	while(setCssClass2(name+"_rules_"+j+"_1", (status) ? cssClassName : 'odd', ((status) ? 'odd' : cssClassName))) {
		setCssClass2(name+"_rules_"+j+"_2", (status) ? cssClassName : 'odd', ((status) ? 'odd' : cssClassName));
		j++;
	}
    if(index !== null) {
		lastSelected[index] = name;
	}
}
/*
function daySelected(el, route) {
	var name = el.value + route;
	if(el.checked && lastSelected && lastSelected[route]) {  //remove selection from previous
		setCssClass(lastSelected[route], '');
	}
	setCssClass(name, (el.checked) ? 'active' : '');		 //select new one
	lastSelected[route] = name;
}
*/

function daySelected(el, route)
{
	//butony
	jQ("div.den_active").eq(route).removeClass().addClass("den_normal");
	
	// zpetna konfigurace
	jQ(el).parent().removeClass().addClass("den_active");
	// nove reseni
	jQ(el).parent().parent().removeClass().addClass("den_active");
	
	//schovani chybovych hlasek
	jQ("div.error, div.message, div.msg").css("display","none");
		
}

/**
* funkce vraci cast url, ktera je mezi hostname a samotnym souborem.
* Tedy z napr. http://ibs.ibs.kubat.prg.aag.cz/cs/halffareav.php metoda vrati /cs/
*/
function parseURL() {

    //parsovani queryStringu
    sCallingURL = String(window.location.href);
    queryStr = sCallingURL.substring(sCallingURL.indexOf('?') + 1, sCallingURL.length);
    var urlHalves = String(document.location).split('?');
    
    //vyparsovani dodatecnych URL, ktere nejsou obsazeny v hostname, ale jsou pred samotnym filename	
    var re=/(.*):\/\/(.*)/;
    var result = urlHalves[0].match(re); 
    sExtCallingURL = String(result[2]);   
      
    //vyparsovani rozsireneho querystringu BEZ hostname (jazyk, modul)
    extQueryStr = sExtCallingURL.substring(sExtCallingURL.indexOf('/') + 1, sExtCallingURL.lastIndexOf('/'));
   
    return extQueryStr;
}

function removeSeparator(num) {
    var re = /[^0-9]*/gi;
    if (!num) num = ''; 
    return num.replace(re, '');
}

function notExpired(month, year) {
  var now = getServerNow(); //new Date();
  if(year < now.getFullYear()) {
      return false;
  }
  if(year == now.getFullYear()) 
    if(month < (now.getMonth()+1))
      return false;
  return true;	
}

function IsLeapYear(y) {
   return (0 == y%4 && ((y%100 != 0) || (y%400 == 0)));
}

function DayEnd(mes, rok) {
   mes -= 1;
   var pocet_dni = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
   if ((typeof pocet_dni[mes] == 'undefined') || (pocet_dni[mes] == 'undefined')) return 0; 
   return ((IsLeapYear(rok)) && (mes == 1)) ? 29 : pocet_dni[mes];
}

function checkConfirm(form, message) {
	if (typeof confirmName == 'undefined') return true;
	var val = getRadio(form, confirmName);
	if(!val || !val.length) {
		alert(message);
		return false;
	}
	return true;
}

//vycisti obsah pole - pokud zacina na nedelitelnou mezeru
function clearContent(id, obj) {
    var x;
    if (!id && obj) x = obj;
    else if (id) x = document.getElementById(id);
    if (x) {
        if (x.value) {
            if ((x.value.substring(0,1)=='\u00A0') || (x.value.substring(0,1)==' ')) {
            	x.value = '';
            	return true;
           	}
        }
    }
    return null;
}

function checkBirthDates(day, month, year, min, max) {
  var depDay, depMonth, depYear, i;
  
  if (departureDates && departureDates.length) {
  	for (i=0; i<departureDates.length; i++) {
  		if (!checkBirthDate(day, month, year, min, max, departureDates[i])) return false;
  	}
  	return true;
  } else {
  	return checkBirthDate(day, month, year, min, max, departureDate);
  }
} 
function checkBirthDate(day, month, year, min, max, depDate) {
  var depDay = depDate.substr(0,2);
  var depMonth = depDate.substr(2,2);
  var depYear = depDate.substr(4,2);
  var year1 = parseInt(year,10)+min;
  var year3 = parseInt(year,10)+max;
  var stamp1 = new Date(year3, parseInt(month,10)-1, day);
  var stamp2 = new Date(2000+parseInt(depYear,10), parseInt(depMonth,10)-1, depDay);
  var stamp3 = new Date(year1, parseInt(month,10)-1, day);
  //alert(stamp1 + "\n" + stamp2 + "\n" + stamp3);
  return ((stamp3 <= stamp2) && (stamp2 < stamp1));
}

function fullnameLength(surname, firstname, title) {
    var fullname = "" + surname + "/" + firstname + "" + title;
    return (fullname.length <= 27);
}


function getServerNow() {
    return new Date(serverNow.getFullYear(), serverNow.getMonth(), serverNow.getDate(), 
                    serverNow.getHours(), serverNow.getMinutes(), serverNow.getSeconds());
}

function encodeURIComponentFull(text) { // opravuje nedokonalost fce encodeURIComponent
    var reg;
    text = encodeURIComponent(text);
    reg = new RegExp('\\x2d', 'gm');
    text = text.replace(reg, '%2D'); //-
    reg = new RegExp('\\x5f', 'gm');
    text = text.replace(reg, '%5F'); //_
    reg = new RegExp('\\x2e', 'gm');
    text = text.replace(reg, '%2E'); //.
    reg = new RegExp('\\x21', 'gm');
    text = text.replace(reg, '%21'); //!
    reg = new RegExp('\\x7e', 'gm');
    text = text.replace(reg, '%7E'); //~
    reg = new RegExp('\\x2a', 'gm');
    text = text.replace(reg, '%2A'); //*
    reg = new RegExp('\\x27', 'gm');
    text = text.replace(reg, '%27'); //'
    reg = new RegExp('\\x28', 'gm');
    text = text.replace(reg, '%28'); //(
    reg = new RegExp('\\x29', 'gm');
    text = text.replace(reg, '%29'); //)
    return text;
}

function switchState(countryComboName, elementID) {
	var status; 
	var form = getFormByName(formName);
	if (getCombo(form, countryComboName) == 'US') {
		status = true;
	} else {
		status = false;
	} 
	switchVisibility(elementID, status);
}

/* *************************************************************** */
/* ******************** Symphony 2 ******************************* */
/* *************************************************************** */
function prepareErrorMsg(msg) {
	if (msg.length > 0) {
	
		//pripravit hlasku
	   	var errorMsg = '<div class="messages"><div class="error">'+ msg +'</div></div>';
	   		
	   	jQ("div.messages").remove();	
	   	//vlozit na spravne misto
	   	jQ("div.steps").before(errorMsg);
   	
   	}
}

function prepareErrorMsgTo(msg, idDiv) {
	if (msg.length > 0) {
	   	var errorMsg = '<div class="messages"><div class="error">'+ msg +'</div></div>';
	   	
	   	jQ(idDiv + " div.messages").remove();		
	   	//jQ(idDiv).remove();	
	   	//vlozit na spravne misto
	   	jQ(idDiv).prepend(errorMsg);
   	
   	}
}

// funkce generuje message s CLOSE odkazem
function prepareErrorCloseMsgTo(msg, idDiv) {
	if (msg.length > 0) {
	   	var errorMsg = '<div class="messages_hp" id="warningMessage"><div class="top"></div><div class="middle"><a class="close" href="#" onclick="return closeWarningMessage();" title="'+ 'Hide message' +'"><span>'+ 'Close' +'</span></a><div class="error">' + msg + '</div></div><div class="bottom"></div></div>';
	   	jQ(idDiv).prepend(errorMsg);
   	}
}

/**
 * Funkce spusti framework jAlerts pro zobrazeni informacni zpravy
 * @param msg
 */
function showInformationPopup(msg) {
	if (msg.length > 0) {
		//jQ.alerts.okButton = 'Continue';
    	jQ.alerts.overlayOpacity = 0.5;
    	jQ.alerts.overlayColor = '#85BBDF';
    	jQ.alerts.dialogClass = 'small messageInfo';
    	jAlert(msg, 
    	'Information', function(r) {
        	if (r){
        		//additional actions after success - pushed button Ok
        	} else {
        		//additional actions after unsuccess
        	}
        });
   	}
}
/**
 * Funkce spusti framework jAlerts pro zobrazeni error zpravy
 * @param msg
 */
function showErrorPopup(msg) {
	if (msg.length > 0) {
		//jQ.alerts.okButton = 'Continue';
    	jQ.alerts.overlayOpacity = 0.5;
    	jQ.alerts.overlayColor = '#85BBDF';
    	jQ.alerts.dialogClass = 'small messageError';
    	jAlert(msg, 
    	'Error message', function(r) {
        	if (r){
        		//additional actions after success - pushed button Ok
        	} else {
        		//additional actions after unsuccess
        	}
        });
   	}
}

/**
 * Funkce spusti framework jAlerts pro zobrazeni konfirmacni zpravy
 * TODO - zatim nepouzite
 * @param msg
 */
function showConfirmationPopup(msg) {
	if (msg.length > 0) {
		//jQ.alerts.okButton = 'Continue';
    	jQ.alerts.overlayOpacity = 0.5;
    	jQ.alerts.overlayColor = '#85BBDF';
    	jQ.alerts.dialogClass = 'small messageInfo';
    	jConfirm(msg, 
    	'Information', function(r) {
        	if (r){
        		return true
        		//additional actions after success - pushed button Ok
        	} else {
        		//additional actions after unsuccess
        		return false;
        	}
        });
   	}
}

//funkce generuje message pro globalni popup bez CLOSE - pouziva lite vrstvu
function prepareGlobalErrorMsgTo(msg, idDiv) {
	if (msg.length > 0) {
	   	var errorMsg = '<div class="messages_hp" id="warningMessage"><div class="top"></div><div class="middle"><div class="error">' + msg + '</div></div><div class="bottom"></div></div>';
	   	jQ(idDiv).prepend(errorMsg);
   	}
}

function dummy(){}

// stop bubling napr u href
function stopDefault(e) {
	if(e && e.preventDefault) {
		e.preventDefault();
	} else {
		window.event.returnValue = false;
	}
	alert(e + window.event.returnValue);
	return false;
}

//help function to sort numbers, because array.sort() sort by alpha (50 is less then 4)
function sortNumber(a,b) {
	return a - b;
}

function alertAssoc(aInput) {
	var output = "";
	for (var idx in aInput) {
		output += "["+idx+"]="+aInput[idx]+";"+"\n";
	}
	return output;
}

// Upravuje cenu aby byla jedinecna
var iIndexRand = 1;
function modifyPrice(oInputString) {
	var inputPrice = oInputString.split('.', 1);
	var output = inputPrice + '.' + iIndexRand;
	++iIndexRand;
	return output;
}

//Zastavi vykonavani jakekoliv dalsi akce browseru
function stopDefault(e) {
  	if(e && e.prevendDefault) {
  		e.prevendDefault();
  	} else {
  		window.event.returnValue = false;
  	}
  	
	return false;
}

// url a boolean zda vyuzivame google analytics
function startOverAlert(url, ga) {
	if (confirm("Are you sure to start over? All items in shopping cart will be deleted!")) {
		if (ga == true) {
		    _gaq.push(['_setAllowLinker', true]);
		    _gaq.push(['_link', url]);
		    //top.location.href = url; // zajisti redirect top okna
		} else {
		    top.location.href = url;
	    }
	}
}

function switchVisibilityEfect(elem, status) {
  if(!is.dom) return;
  
  if (status) {
  	jQ("#"+elem).show("blind", { direction: "vertical" }, 50);
  } else {
  	jQ("#"+elem).hide("blind", { direction: "vertical" }, 100);
  }
  
} 

function switchText(id1, id2, status) {
	if (status) {
		jQ("#"+id1).hide();
		jQ("#"+id2).show();
	} else {
		jQ("#"+id1).show();
		jQ("#"+id2).hide();
	}
}

// funkce pro zobrazeni a skryti prvku loading, ktery je pres cely columns container
function showLoadingBox(status) {
	// pri jiz zobrazenem loadingu se nic nedela
	if (status && jQ("#loadingBox_container").is(':visible')) {
		return true;
	}
	if (status) {
		jQ("#loadingBox_container").show();
	} else {
		jQ("#loadingBox_container").hide();
	}

}

function setLoadingBoxDimension() {
    // vyska
	var windowHeight = jQ(window).height();
	var documentHeight = jQ(document).height();
	var containerHeight = (windowHeight > documentHeight ?  windowHeight + 'px' : documentHeight + 'px');
	// sirka
	var windowWidth = jQ(window).width();
	var documentWidth = jQ(document).width();
	var containerWidth = (windowWidth > documentWidth ?  windowWidth + 'px' : documentWidth + 'px');
    // nastaveni css
	jQ("#loadingbox_overlay").css({'width':containerWidth, 'height':containerHeight});
	jQ("#loadingBox_container").css({'width':containerWidth, 'height':containerHeight});
}

// funkce pro zobrazeni a skryti prvku loading, ktery je pres cely columns container
function showLoadingBoxDetail(status) {
	// pri jiz zobrazenem loadingu se nic nedela
	if (status && jQ("#loadingBoxDetail_container").is(':visible')) {
		return true;
	}
	if (status) {
		setLoadingBoxDetailDimension();
		jQ("#loadingboxdetail_overlay").css('opacity','0.2');
		jQ("#loadingBoxDetail_container").fadeIn('slow');
		jQ("#loadingBoxDetail_image").show();
	} else {
		jQ("#loadingBoxDetail_image").hide();
		jQ("#loadingBoxDetail_container").fadeOut('fast');
	}
}

function setLoadingBoxDetailDimension() {
	var containerWidth = jQ("#pricer_detail_wrapper").innerWidth() + 'px';
	var containerHeight = jQ("#pricer_detail_wrapper").innerHeight() + 'px';
	// nastaveni css
	jQ("#loadingboxdetail_overlay").css({'width':containerWidth, 'height':containerHeight});
	jQ("#loadingBoxDetail_container").css({'width':containerWidth, 'height':containerHeight});
}

// odkryva a skryva detail letu
var lastDetailFlightId = '';
function switchDetailFlightInfo(divId, status) {
	if (status) {
		// skryti predchoziho detailu
		if (lastDetailFlightId != divId) {
			if (lastDetailFlightId != '') jQ("#"+lastDetailFlightId).toggle("slide", { direction: "up" }, 500);
			//jQ("#"+divId).show("blind", { direction: "vertical" }, 150);
			jQ("#"+divId).toggle("slide", { direction: "up" }, 500);
			lastDetailFlightId = divId;
			showClosePopup();
		}
	} else {
		//jQ("#"+divId).hide("blind", { direction: "vertical" }, 150);
		jQ("#"+divId).toggle("slide", { direction: "up" }, 500);
		lastDetailFlightId = '';
		hideClosePopup();
	}
} 

// slidding contanineru
function switchContainerInfo(divId) {
    jQ("#"+divId).toggle("slide", { direction: "up" }, 500);
}

function check_startDate_OR_issueNumber(Ctrl, orderId) {
	if (!Ctrl.ccIssueNumber[orderId].value.length && !Ctrl.startDate[orderId].value.length) {
		return 'Please, fill issue number of credit card or start date!';
	} else return '';
} 
function check_startDate_XOR_issueNumber(Ctrl, orderId) {
	if (!Ctrl.ccIssueNumber[orderId].value.length && !Ctrl.startDate[orderId].value.length) {
		return 'Please, fill issue number of credit card or start date!';
	} else if (Ctrl.ccIssueNumber[orderId].value.length && Ctrl.startDate[orderId].value.length) {
		return 'Please, fill issue number of credit card only or start date only!';
	} else return '';
}

function hideClosePopup() {
	jQ("#lightboxClosePopup").hide();
}

function showClosePopup() {
	// vyska
	var windowHeight = jQ(window).height();
	var documentHeight = jQ(document).height();
	var containerHeight = (windowHeight > documentHeight ?  windowHeight + 'px' : documentHeight + 'px');
	// sirka
	var windowWidth = jQ(window).width();
	var documentWidth = jQ(document).width();
	var containerWidth = (windowWidth > documentWidth ?  windowWidth + 'px' : documentWidth + 'px');
	// css
	jQ("#lightboxClosePopup").css({'width':containerWidth, 'height':containerHeight}).show();
}

function closeAllPopup() {
	jQ("#" + lastDetailFlightId).toggle("slide", { direction: "up" }, 500);
	lastDetailFlightId = '';
	hideClosePopup();
}

// skryvani, odkryvani kalendare na index a indexHotel
function showCalendar(index, status) {
    if (status) {
        if ('calendarDiv'+lastShownCalendar == 'calendarDiv'+index) {
            jQ("#calendarDiv"+index).hide("slide", { direction: "up" }, 500);
            lastShownCalendar = null;
        } else if (lastShownCalendar == null) {
            jQ("#calendarDiv"+index).show("slide", { direction: "up" }, 500);
            lastShownCalendar = index;
        } else {
            jQ("#calendarDiv"+lastShownCalendar).hide();
            jQ("#calendarDiv"+index).show("slide", { direction: "up" }, 500);
            lastShownCalendar = index;
        }
    } else {
        jQ("#calendarDiv"+index).hide("slide", { direction: "up" }, 500);
        lastShownCalendar = null;
    }
}

function showTab(id) {
    if (jQ("#" + id + "Title").hasClass('tab_off')) {
        jQ("#tabsContainer div.tab_on").attr('class','tab_off');
        jQ("#" + id + "Title").attr('class', 'tab_on');
        
        jQ("#"+lastSelectedTab).hide();
        jQ("#"+id).show();
        lastSelectedTab = id;
    }
}

function switchMoreLanguage() {
    jQ("#langContainer").toggle("slide", { direction: "right" }, 500);
}

function switchContainer(id, status) {
    if (status) {
        jQ("#"+id).toggle("slide", { direction: "up" }, 500);
    } else {
        jQ("#"+id).hide("slide", { direction: "up" }, 500);
    }
}

function switchContainerExtend(id, status, prefixAnotherContainers) {
	if (status && jQ("#"+id+':visible').size() == 0 ) {
    	//skryti ostatnich containeru
        if( typeof prefixAnotherContainers !== 'undefined' && prefixAnotherContainers != '') {
        	jQ('div[@id ^= '+prefixAnotherContainers+']:visible').hide("slide", { direction: "up" }, 500);
        }
    	jQ("#"+id).toggle("slide", { direction: "up" }, 500);
    } else {
        jQ("#"+id).hide("slide", { direction: "up" }, 500);
    }
}

// Nastavuje parametry LyteBoxu
function setLyteBox() {
    myLytebox.noBorder = true;
    myLytebox.noDetail = true;
    myLytebox.formAction = formAction;
    myLytebox.formName = formNamePopup;
    myLytebox.formMethod = "POST";
    myLytebox.initialize();
}

function replaceSrc(imageElement, url) {
    imageElement.onError = '';
    imageElement.src = url;
    imageElement.title = '';
    imageElement.height = 40;
    imageElement.width = 60;
}

var imageLog = new Array();
function logImage(imageElement, event) {
	imageLog[imageLog.length] = event + ' | ' + imageElement.src;
	//if (imageLog.length % 10 == 0) alert(imageLog);
}

function setJustFromAirport(id, airport) {
    if (!language) return false;
    var extQueryStr = parseURL();
    var jsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
    var sUrlPathOffer = jsHost + window.location.hostname + "/" + extQueryStr + "/airportWishper.php?lng=" + language;

    jQ.get(sUrlPathOffer+'&q='+airport, function(data) {
        formatedData = formatAirport(jQ.trim(data), false);
        jQ("#" + id).val(formatedData);
    });
}

function appendAirportAutoComplete(id) {
    if (!language) return false;
    var extQueryStr = parseURL();
    var jsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
    var sUrlPathOffer = jsHost + window.location.hostname + "/" + extQueryStr + "/airportWishper.php?lng=" + language;

    jQ("#" + id).autocomplete(sUrlPathOffer, {
			  
			  formatItem: function(value, i, n, search) {
			  		return formatAirport(value, true);
			  },
			  formatResult: function(value) {
					return formatAirport(value, false);
			  },
			  //parse: findResult,
			  matchSubset: false,
			  minChars: 3,
			  max: 30,
			  //cacheLength: 1,
			  width: 300
	});
}


function formatDestination(val, inList) {
  	var dest = val.toString().split(";");
  	if(dest[6] == '2') {
  		var str = dest[0] + ", " + dest[1] + ", " + dest[5] + " (" + dest[2] + ")";
  		return (inList) ? "<img src='images/flags/" + dest[4] + ".gif'/> " + str : str;
  	} else if(dest[6] == '1') {
  		var str = dest[0] + ", " + dest[1] + " (" + dest[2] + ")";
  		return (inList) ? "<img src='images/space.gif'/>" + str : str;
  	} else {
  		var str = dest[0] + ", " + dest[5] + " (" + dest[3] + ")";
  		return (inList) ? "<img src='images/flags/" + dest[4] + ".gif'/> " + str : str;
  	}
}
  
function formatAirport(val, inList) {
  	var dest = val.toString().split(";");
  	if(dest[dest.length-1] == '2') {
  		if (dest[2] != '') {
  			var str = dest[1] + ", " + dest[2] + ", " + dest[5] + " (" + dest[0] + ")";
  		} else {
  			var str = dest[1] + ", " + dest[5] + " (" + dest[0] + ")";
  		}
  		return (inList) ? "<img src='images/flags/" + dest[4] + ".gif'/> " + str : str;
  	} else if(dest[dest.length-1] == '1') {
  		if (dest[2] == '') {
	  		var str = dest[1] + " (" + dest[0] + ")";
	  	} else {
	  		var str = dest[1] + ", " + dest[2] + " (" + dest[0] + ")";
		}
  		return (inList) ? "<img src='images/space.gif'/>" + str : str;
  	} else {
  		var str = dest[1] + ", " + dest[5] + " (" + dest[3] + ")";
  		return (inList) ? "<img src='images/flags/" + dest[4] + ".gif'/> " + str : str;
  	}
}
  

// rozparsuje XML vracene pomoci ajax volani
function findResult(data) {
    var result = jQ(data).find('/root/item');
    var resultSize = jQ(result).size();
    var nCounter = 0;
    var returnData = new Array();
    if(resultSize > 0) {
       	for (nCounter = 0; nCounter < resultSize; nCounter++) {
       	    returnData[nCounter] = { 
       	        data: jQ(result[nCounter]).text(),
				value: jQ(result[nCounter]).text(),
				result: formatDestination(jQ(result[nCounter]).text(), false)
       	    };
       	}
    }
    return returnData;
}

//nahradi odletove a priletove letiste inputem a prida inputy poctu pasazeru 
function changeItinerary() {
	//presmerovani cilu formulare  
	if (typeof action0 != 'undefined') {
		jQ("#itineraryForm").attr('action',action1);	//action1 je inline globalni promenna
	}

	jQ("#dep0Text,#arr0Text,#dep1Text,#arr1Text,#changeItineraryLink").hide();
    
	jQ("#subFormPassengers,#dep0Input,#arr0Input,#dep1Input,#arr1Input").show();
}

// funkce pro razeni pole podle klicu
function sortArrayByKeys(dataArray) {
	var newDataArray = new Array();
	var keys = new Array();
	
	// nacteni klicu ze zadaneho pole
	for (var k in dataArray) {
    	if (parseInt(k, 10) > 0) {
    	    keys.push(k);
        }
	}
	
	// serazeni
	keys.sort(sortNumber); //sortNumber
	
	for (var i = 0; i < keys.length; i++) {
    	newDataArray[keys[i]] = dataArray[keys[i]];
	}
	
	return newDataArray;
	
}

// funkce pro refresh IFRAMu (staci dodat parametr ID IFRAMu a pridat volani funkce na event click k nekteremu z ovladacich prvku)
function reloadIframe(id){
	document.getElementById(id).src=document.getElementById(id).src; 
}

function showForm(partId){
    var actualVisibilityStatus = jQ("#tab_" + partId).is(":visible");
    
    jQ('div[@id^="tab_"]').fadeOut("slow");
    
    if (!actualVisibilityStatus){
        jQ("#tab_" + partId).toggle("slide", { direction: "up" }, 500);   
    }
}
/*
// funkce na zobrazeni / skryti formulare rezervaci v hlavicce stranky 
function showReservationForm(){
	jQ("#cmt_tab").toggle("slide", { direction: "up" }, 500);
}

// funkce na zobrazeni / skryti formulare s profilem v hlavicce stranky 
function showProfileLoginForm(){
	jQ("#profile_tab").toggle("slide", { direction: "up" }, 500);
}
*/
// funkce na kontrolu formulare My Profile v hlavicce stranky
function checkProfileLogin(formIndex){	
	// pokud se jedna o samostatny CheckMyTrip form na strance, index formulare bude prazdny,
	// tj. checkMyTripLogin(), jinak muzeme do funkce poslat cislo, ktere je nutne pridat 
	// i k atributu "FOR" tagu <LABEL> a zaroven k atributu "ID" tagu <INPUT> pridaneho formulare
	if (isNaN(formIndex) || formIndex == undefined || formIndex == '') {formIndex = '';}
	var errorMessage = '';
	var cmtNameCharsNeeded = 3; // minimalni delka stringu
	var cmtLocatorCharsNeeded = 3; // minimalni delka stringu
	var cmtName = jQ("#cp_login" + formIndex).val();
	var cmtLocator = jQ("#cp_password" + formIndex).val();
	
	if (cmtName == undefined || cmtName.length < cmtNameCharsNeeded) {
		errorMessage = "Please, fill in login name." + "\n";
	}
	if (cmtLocator == undefined || cmtLocator.length < cmtLocatorCharsNeeded) {
		errorMessage += "Please, fill in password." + "\n";
	}
	if (errorMessage.length > 0) {
		alert(errorMessage);
		if (cmtName == undefined || cmtName.length < cmtNameCharsNeeded) {
			jQ("#cp_login" + formIndex).focus();
		} else {
			jQ("#cp_password" + formIndex).focus();
		}
		return false;
	} else {
		return true;		
	} 
}

// funkce na kontrolu formulare rezervaci v hlavicce stranky
function checkMyTripLogin(formIndex){	
	// pokud se jedna o samostatny CheckMyTrip form na strance, index formulare bude prazdny,
	// tj. checkMyTripLogin(), jinak muzeme do funkce poslat cislo, ktere je nutne pridat 
	// i k atributu "FOR" tagu <LABEL> a zaroven k atributu "ID" tagu <INPUT> pridaneho formulare
	if (isNaN(formIndex) || formIndex == undefined || formIndex == '') {formIndex = '';}
	var errorMessage = '';
	var cmtNameCharsNeeded = 3; // minimalni delka stringu
	var cmtLocatorCharsNeeded = 3; // minimalni delka stringu
	var cmtName = jQ("#cmt_name" + formIndex).val();
	var cmtLocator = jQ("#cmt_locator" + formIndex).val();
	
	if (cmtName == undefined || cmtName.length < cmtNameCharsNeeded) {
		errorMessage = "Please, fill in surname." + "\n";
	}
	if (cmtLocator == undefined || cmtLocator.length < cmtLocatorCharsNeeded) {
		errorMessage += "Please, fill in PNR locator." + "\n";
	}
	if (errorMessage.length > 0) {
		alert(errorMessage);
		if (cmtName == undefined || cmtName.length < cmtNameCharsNeeded) {
			jQ("#cmt_name" + formIndex).focus();
		} else {
			jQ("#cmt_locator" + formIndex).focus();
		}
		return false;
	} else {
		return true;		
	} 
}

// funkce pro skyvani Error hlasek
function closeWarningMessage(){
    jQ('#warningMessage').fadeOut('slow');
    return false;
}

//funkce pro skyvani Error hlasek
function closeRemoveWarningMessage(){
	jQ('#warningMessage').fadeOut('slow',function(){
		jQ('#warningMessage').remove();
	});
    return false;
}

//funkce pro skyvani obecnych Error hlasek
function closeGeneralWarningMessage(){
    jQ('#generalWarningMessage').fadeOut('slow');
    return false;
}

//funkce pro otevreni bloku obecnych Error hlasek
function openGeneralWarningMessage(){
    jQ('#generalWarningMessage').fadeIn('slow');
    return false;
}

//funkce pro nastaveni textu error hlasky
function setGeneralWarningMessage(textMsg){
    jQ('#generalWarningMessageError').append(textMsg);
    return false;
}

/**
 * Funkce vymaze hodnoty z formularovych prvku
 *
 * @param idDomWrapper
 *     - ID (X)HTML elementu, ktery obaluje formularove prvky
 */
function clearFromElements(idDomWrapper) {
    jQ('#'+idDomWrapper+' input[@type = "text"]').val('');
    jQ('#'+idDomWrapper+' input:checked').click().removeAttr('checked');
    
    //odstraneni vsech selected atributu v elementech select
    jQ('#'+idDomWrapper+' select option').removeAttr('selected');
}

/**
 * Funkce pro logout z profilu
 * @param url
 */
function confirmProfileLogout(url) {
	if( confirm('Are you sure to logout?') ) {
		location.href = url;
	}
}

/**
 * Funkce pro nacteni dat z formulare
 * - pouziti pro predani dat pro AJAX volani
 * - simuluje odeslani formulare jednou z metod GET nebo POST
 * 
 * @param string idDOMEle
 * 	- predstavuje DOM obalovaci prvek vsech formularovych prvku 
 *  - muze byt napr. ID form elementu nebo div elemntu atp.
 * @return string
 */
function getFormDataToUrlParams(idDOMEle) {
	var sParameters = '';
	var DOMInput = jQ('#'+idDOMEle+' input:checked, #'+idDOMEle+' input[@type = "text"], #'+idDOMEle+' input[@type = "hidden"]');
	var DOMSelect = jQ('#'+idDOMEle+' select');
	
	DOMInput.each(function(index){
		sParameters += '&'+jQ(this).attr('name')+'='+jQ(this).val();
	});
	
	DOMSelect.each(function(index){
		sParameters += '&'+jQ(this).attr('name')+'='+jQ(this).val();
	});
	
	sParameters = sParameters.substring(1,sParameters.length);
	
	return sParameters; 
}

function addDestinationInputMethods() {
    jQ("#autoCompDest_dep0, #autoCompDest_dep1, #autoCompDest_arr0, #autoCompDest_arr1, #destination, #dep0Input, #arr0Input").click(function(){
        // Select input field contents
        this.select();
    });

}

/* rozsireni Date objektu o metodu setVal (pro symphony analytics) */
Date.prototype.setVal = function classDate_parse(textDT, format) {
    var pole, i, x, y;
    var cas = new Array(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());
    if (!format) format = 'Y-m-d H:i:s';
    var p = new RegExp('[^a-zA-Z]+', 'g');
    format = format.replace(p, '');
    p = new RegExp('[^0-9a-zA-Z]+');
    pole = textDT.split(p);
    for (i=0;((i<format.length) && (i<pole.length));i++) {
        x = format.substr(i,1);
        if (!isNaN(pole[i])) { //ciselne hodnoty
            if (x == 'd') cas[2] = pole[i];
            else if (x == 'j') cas[2] = pole[i];
            else if (x == 'm') cas[1] = pole[i]-1;
            else if (x == 'n') cas[1] = pole[i]-1;
            else if (x == 'Y') cas[0] = pole[i];
            else if (x == 'H') cas[3] = pole[i];
            else if (x == 'G') cas[3] = pole[i];
            else if (x == 'i') cas[4] = pole[i];
            else if (x == 's') cas[5] = pole[i];
            else if (x == 'g') cas[3] = pole[i];
            else if (x == 'h') cas[3] = pole[i];
            else if (x == 'w') {}
            else return(false);
        } else {               //textove hodnoty
            if (x == 'F') {
                for (y=0;y<12;y++) if (this.mnames[y] == pole[i]) cas[1] = y;
            }
            else if (x == 'M') {
                for (y=0;y<12;y++) if (this.msnames[y] == pole[i]) cas[1] = y;
            }
            
            else if (x == 'a') {
                if ((pole[i] == 'pm') && (cas[3] < 12)) cas[3] += 12;
                else if ((pole[i] == 'am') && (cas[3] >= 12)) cas[3] -= 12;
            }
            else if (x == 'A') {
                if ((pole[i] == 'PM') && (cas[3] < 12)) cas[3] += 12;
                else if ((pole[i] == 'AM') && (cas[3] >= 12)) cas[3] -= 12;
            }
            else return(false);
        }
    }
    var xx = this.checkDate(cas);
    if (xx == false) return(false);
    this.setTime(xx);
    return(true);
};
Date.prototype.checkDate = function classDate_checkDate(pole) {
    if (!pole || !(pole instanceof Array)) return(false);
    if ((pole[5] < 0) || (pole[5] > 59)) return(false);
    if ((pole[4] < 0) || (pole[4] > 59)) return(false);
    if ((pole[3] < 0) || (pole[3] > 23)) return(false);
    var xx = new Date(pole[0], pole[1], pole[2], pole[3], pole[4], pole[5]);
    if (xx.getFullYear() != pole[0]) return(false);
    if (xx.getMonth() != pole[1]) return(false);
    if (xx.getDate() != pole[2]) return(false);
    return(xx.getTime());
};

function initMascotBanner() {
    jQ('#mascotBubble').mouseover(function() {
        jQ(this).removeClass('close');
        jQ(this).addClass('open');
        jQ('div.bublina').css('display', 'block');
    }).mouseout(function() {
        jQ(this).removeClass('open');
        jQ(this).addClass('close');
        jQ('div.bublina').css('display', 'none');
    });
    
    jQ('#mascotBanner').stickyfloat({duration: 400, useHeightHack: true});
};

function addAirline(airlineId, formItem, formName) {
    var parentInputField = window.jQuery("form[@name='" + formName + "'] " + "#" + formItem);
    var airline = new Array("'" + airlineId + "'"); // string pro sprintf
    var airlineArray = new Array();
    var airlineTempArray = new Array();
    if (parentInputField != null) {
        var inputValue = parentInputField.attr('value');
        inputValue = inputValue.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); // osekani mezer ze stringu (trim)
        inputValue = (inputValue == 'no preference' ? '' : inputValue); // vyprazdnime default nebo ponechame platnou value
        airlineArray = inputValue.split(', '); // rozsekame string a vlozime do pole
        for (var airlineKey in airlineArray) {
            // projdeme vsechny airlines, co byly pred pridanim te nove v inputu
            // naplnime klice do temp pole a nastavime na true
            airlineTempArray[airlineArray[airlineKey]] = true;
        }
        if (typeof airlineTempArray[airlineId] == 'undefined' && airlineTempArray[airlineId] != true) {
            // pokud nova airlajna v temp poli neexistuje, pridame ji a hlasime uspech
            inputValue = (inputValue != '' ? inputValue + ', ' + airlineId : inputValue + airlineId);
            parentInputField.attr('value', inputValue);
            alert(sprintf('Airline %0 has been added to preference.', airline));
        }
        else {
            // jinak hlasime, ze uz tam je
            alert(sprintf('Airline %0 has already been added! Please select another one.', airline));        
        }
    }
}
function setAirport(airport, formItem, formName) {
    var op = window;
    if(!op.document.forms[formName] || !formItem) return;
    var el = op.document.forms[formName];
    eval('el = el.'+formItem+';'); 
	if (el) {
		el.value = airport;
	}
	aagGaq.callEvent('pick', 'airport_from_list', (op.document.forms[formName][formItem].name == 'arr0' ? 'to' : 'from') + ' / ' + airport);
}

function setCity(city, formItem, formName) {
    var op = window;
    if(!op.document.forms[formName] || !formItem) return;
    var el = op.document.forms[formName];
    eval('el = el.'+formItem+';'); 
	if (el) {
		el.value = city;
	}
}

