function checkForm(form, type) {
	if (type != 'next') return true;
	
	var ret = (checkDestination(form) &&
		/*checkDates(form) && datesLimits(form) &&*/ 
		!getUnCheckInPassengersCount('message') && 
		checkPassengersCount(form) && 
		checkModule(form));
	
	if(ret) {
		//konvertovani hiddnen polozek
		jQ("#hdn_"+passengerCountNameADULT).val( jQ(":input[@name=\""+passengerCountNameADULT+"\"]").val() );
		jQ("#hdn_"+passengerCountNameCHILD).val( jQ(":input[@name=\""+passengerCountNameCHILD+"\"]").val() );
		jQ("#hdn_"+passengerCountNameINFANT).val( jQ(":input[@name=\""+passengerCountNameINFANT+"\"]").val() );
		
		for (var i = 1; i <= 3; i++) {
			if (i <= lastRoom) {
				jQ("#hdn_room" + i).val(jQ(":input[@name=\"room" + i + "\"]").val());
			} else {
				jQ("#hdn_room" + i).val('');
			}
		}
		// odesilame statistiky
		onSubmitFormGATrackEvent(form);
		
	}
	return ret;
}

jQ(document).ready(function(){

    if (typeof myLytebox == 'undefined') {
        initLytebox();
    }
	setLyteBox();

	uncheckinPassengers[passengerCountNameADULT] = parseInt(jQ(":input[@name=\""+passengerCountNameADULT+"\"]").val());
	uncheckinPassengers[passengerCountNameCHILD] = parseInt(jQ(":input[@name=\""+passengerCountNameCHILD+"\"]").val());
	uncheckinPassengers[passengerCountNameINFANT] = parseInt(jQ(":input[@name=\""+passengerCountNameINFANT+"\"]").val());
	
	//uzivatel jiz ma zvolene pokoje, opetovne setovani
	if (typeof selectedRooms == 'object' ) {
		//prochod vsemi pokoji
		for (var i = 1; i < selectedRooms.length; i++) {
			//pokud je hodnota, provedu za akci vyberu pokoje
			if (selectedRooms[i] != '') {
				var el = {
					name: 'room' + i,
					value: selectedRooms[i]
				};
				
				//zalohuju aktualni nastaveni
				backupPassangers[el.name] = uncheckinPassengers;
				//naplnim select
				generateRoomOffer(jQ(":input[@name=\"" + el.name + "\"]"));
				//provedu vyber
				jQ(":input[@name='"+el.name+"']").selectOptions(el.value, true);
				//odesctu vybrane pasazery
				distributePassengers(el);
				
				//pokud lze, pridam pokoj
				if( i < 3 && getUnCheckInPassengersCount() > 0) {
					addRoom();	
				}
			}
		}
	}
	else {
		backupPassangers['room1'] = uncheckinPassengers;
		showUnCheckInPassengers();
		generateRoomOffer( jQ(":input[@name=\"room1\"]")  );
	}
	
	// zmenime typ pokoje
	changeRoomsType();
	
	addDestinationInputMethods();
});

function copyDestComboData(partId) {
    var el1 = document.getElementById('destSelect_'+partId);
    var el2 = document.getElementById('destInput_'+partId);
    el2.value = el1.options[el1.selectedIndex].text; 
}

function switchDestCombo(partId) {
    var el1 = document.getElementById('destSelect_'+partId);
    var el2 = document.getElementById('destInput_'+partId);
    if (el2.style.display == 'none') {
        copyDestComboData(partId);
        //el1.disabled = true;
        //el2.disabled = false;
        el1.style.display = 'none';
        el2.style.display = '';
    }
}

function checkPassengersCount(form) {
	
	var field, Message, adults, children, infants, youths, seniors;
	
	if (typeof passengerCountNameADULT == 'undefined') adults = 0;
	else adults = parseInt(getCombo(form, passengerCountNameADULT));
	if (typeof passengerCountNameYOUNG == 'undefined') youths = 0;
	else youths = parseInt(getCombo(form, passengerCountNameYOUNG));
	if (typeof passengerCountNameSENIOR == 'undefined') seniors = 0;
	else seniors = parseInt(getCombo(form, passengerCountNameSENIOR));
	
	adults = adults + youths + seniors;
	
	if (typeof passengerCountNameCHILD == 'undefined') children = 0;
	else children = parseInt(getCombo(form, passengerCountNameCHILD));
	if (typeof passengerCountNameINFANT == 'undefined') infants = 0;
	else infants = parseInt(getCombo(form, passengerCountNameINFANT));

  	if (!adults && children) {
  		Message = "Děti nemohou cestovat bez doprovodu!";
		field = getElement(form, passengerCountNameCHILD);
  	} 
  	else if (adults < infants) {
  		Message = "Počet dětí do 2 let nemůže být větší než počet dospělých cestujících!";
		field = getElement(form, passengerCountNameINFANT);
  	} 
  	else if (!adults) {
  		Message = "Vyberte cestující!";
		field = getElement(form, passengerCountNameADULT);
  	}
  	else if (9 < (adults + children)) {
  		Message = "Maximální počet pasažéru byl překročen!";
		field = getElement(form, passengerCountNameADULT);
  	}
  	else {
    	return true;
  	}
	if (Message.length) alert(Message);
	if (field != null) {
		field.focus();
		if (field.type == 'text') field.select();
	}
	return false;
}

function checkPreferences(form) {
	var field, Message;
	var airlines = getElement(form, airlinesName);
	var salePoint = getElement(form, saleLocationName);
	if ((getPricerType(form) == 'SCP') && airlines && (clearContent('', airlines) || !airlines.value.length)) {
		Message = "Zvolte preferovanou leteckou společnost!";
		field = airlines;
	} 
	else if(salePoint.options && !salePoint.options[salePoint.selectedIndex].value.length) {
		Message = "Zvolte místo prodeje!";
		field = salePoint;
	} else {
    	return true;
  	}
	if (Message.length) alert(Message);
	if (field != null) {
		field.focus();
		if (field.type == 'text') field.select();
	}
	return false;
}

function checkModule(form) {
	if (moduleProvider == '') {
		return true; //stav kdy nechceme kontrolovat module provider napr. u klonu nmcczprod
	}
	
	var provider = getElement(form, moduleProvider);
	
	if (provider.options && !provider.options[provider.selectedIndex].value.length) {
		Message = "Zvolte preferovaný způsob platby!";
		field = provider;
	} else {
		return true;
	}
	
	if (Message.length) alert(Message);
	if (field != null) {
		field.focus();
		if (field.type == 'text') field.select();
	}
	return false;
}

function datesLimits(form) {
    var field = null;
    var date1 = getCalValue(0, form);
    var date2 = getCalValue(1, form);
    var param = new Array();
	
	date1.setHours(23,59); //checkin muze byt az na konci dne
	date2.setHours(0,0);   //checkout muze byt uz na zacatkou dne

    if (date1 < depDateResFrom[0]) {
        param[0] = depDateResFrom[0].getVal('d.m.Y');
        Message = sprintf('Datum nástupu do hotelu nesmí být před %0!', param);
        field = getElement(form, depDayName[0]);
    }
    else if (date1 > depDateResTo[0]) {
        param[0] = depDateResTo[0].getVal('d.m.Y');
        Message = sprintf('Datum nástupu do hotelu nesmí být po %0!', param);
        field = getElement(form, depDayName[0]);
    }
    else if (date2 < depDateResFrom[1]) {
        param[0] = depDateResFrom[1].getVal('d.m.Y');
        Message = sprintf('Datum odchodu z hotelu nesmí být před %0!', param);
        field = getElement(form, depDayName[1]);
    }
    else if (date2 > depDateResTo[1]) {
        param[0] = depDateResTo[1].getVal('d.m.Y');
        Message = sprintf('Datum odchodu z hotelu nesmí být po %0!', param);
        field = getElement(form, depDayName[1]);
    }
    else if (date1 > date2) {
        Message = 'Datum odhlášení z hotelu nesmí být před datem nástupu do hotelu!';
        field = getElement(form, depDayName[1]);
    }
    else {
        return true;
    }
  
    if (Message.length) alert(Message);
    if (field != null) {
        field.focus();
        field.select();
    }
    return false;
}

/*function datesLimits(form) {
	var field = null;
	var dnes = getServerNow();
	var posledniDen = getServerNow(); //new Date();
	posledniDen.setTime(Date.UTC(dnes.getFullYear(), dnes.getMonth(), dnes.getDate(), 0, 0, 0) + (331*24*60*60*1000));
	var x;
	var Message = '';
	var leg = new Array();
	for (x=0; x < depMonthNameOptions.length; x++) {
  		leg[x] = getWholeDate(depMonthNameOptions[x][getCombo(form, depMonthSelName[x])], getInput(form, depDayName[x]));
  		if (leg[x] > posledniDen) { 
			field = getElement(form, depDayName[x]); 
			Message = "Datum nástupu do hotelu může být voleno maximálně na 331 dní dopředu!";
			break; 
		}
		if ((x > 0) && (leg[x] < leg[x-1])) { 
  			field = getElement(form, depDayName[x]); 
  			Message = "Datum odhlášení z hotelu nesmí být před datem nástupu do hotelu!";
  			break;
  		}
	}
	if (Message.length) {
		alert(Message);
  		if (field != null) {
    		field.focus();
    		field.select();
  		}
    	return false;
  	} else return true;
}*/

//kontrola datumu odletu a priletu
function checkDates(form) {
    
    var date1 = getCalValue(0, form);
    var date2 = getCalValue(1, form);
    var Message = '';
    var field = null;
    
    if(!date1) {
        Message = "Chybně zadán den odletu!"; 
        field = getElement(form, depDayName[0]);
    }
    else if(!date2) {
        Message = "Chybně zadán den návratu!";  
        field = getElement(form, depDayName[1]);
    }
    else {
        return true;
    }

    if (Message.length) alert(Message);
    if (field != null) {
        field.focus();
        field.select();
    }
    return false;
}

function validDates(form) {
	var field = null;
	var x;
	var Message = '';
	var dayValue = new Array();
	var monthValue = new Array();
	var yearValue = new Array();
	for (x=0;x<depMonthNameOptions.length;x++) {
		dayValue[x] = getInput(form, depDayName[x]);
		monthValue[x] = depMonthNameOptions[x][getCombo(form, depMonthSelName[x])];
		yearValue[x] = guessYear(dayValue[x], monthValue[x]);
		if (!checkDay(monthValue[x]) || (monthValue[x] < 1) || (monthValue[x] > 12)) {
  			field = getElement(form, depMonthSelName[x]); 
  			Message = "Chybně zadán měsíc nástupu do hotelu!"; 
  			break;
  		}
  		if (!checkDay(dayValue[x]) || (dayValue[x] < 1) || (dayValue[x] > DayEnd(monthValue[x], yearValue[x]))) {
  			field = getElement(form, depDayName[x]);
  			Message = "Chybně zadán den nástupu do hotelu!";
  			break;
  		}
	}
	if (Message.length) {
		alert(Message);
  		if (field != null) {
    		field.focus();
    		field.select();
  		}
    	return false;
  	} else return true;
}

//kontrola destinaci
function checkDestination(form) {
	var Message = '';
	var field = null;
	var x, from , to;
	var param = new Array();

    var depDestinationName = new Array();
    depDestinationName[0] = "destination";
	
	for (x = 0; x < depDestinationName.length; x++) {
  		from = getElement(form, depDestinationName[x]);
  		param[0] = x + 1;
  		if (from && from.type == 'text' && from.value.length < 3) {
    		Message = sprintf('Prosím vyplňte správně destinaci!', param);
    		field = from;
    		break;
  		}
	}
	if (Message.length) {
		alert(Message);
  		if (field != null) {
    		field.focus();
    		field.select();
  		}
    	return false;
  	} else return true;
}

function switchHidden(what) {
	if (journeyTypeAction[what] != undefined) {
		return _submitFormButton(getFormByName(formName), journeyTypeAction[what][0], journeyTypeAction[what][1], journeyTypeAction[what][2]);
	}
	switch(what) {
		case 'OW':
			iterateSwitch('depIataRow', 0, 2, 3);
			iterateSwitch('calendarDiv', 0, 1, 2);
			reLabel('from1suffix', '');
			reLabel('to1suffix', '');
			iterateSwitch('returnDate', 0, 1, 2);
			iterateSwitch('returnTime', 0, 1, 2);
			break;
		case 'RT':
			iterateSwitch('depIataRow', 0, 2, 3);
			iterateSwitch('calendarDiv', 1, 1, 2);
			reLabel('from1suffix', '');
			reLabel('to1suffix', '');
			iterateSwitch('returnDate', 1, 1, 2);
			iterateSwitch('returnTime', 1, 1, 2);
			break;
		case 'OJ':
			iterateSwitch('depIataRow', 1, 2, 3);
			iterateSwitch('calendarDiv', 1, 1, 2);
			reLabel('from1suffix', "&nbsp;1");
			reLabel('to1suffix', "&nbsp;1");
			iterateSwitch('returnDate', 1, 1, 2);
			iterateSwitch('returnTime', 1, 1, 2);
			setPreferenceCombo(null, 'ONP|SCP'); //nelze ONP a SCP
			break;
		case 'prefPricer':
			setJourney(); // muze prenastavit vybranou hodnotu v combu ceniku
			setPreferenceCombo(); //resi korektni zafungovani po pripadnem prenastaveni comba 
			break;
	}
}

function reLabel(elName, val) {
	if (!is.dom) return;
	var el = document.getElementById(elName);
	if (el) el.innerHTML = val;
}

function setPreferenceCombo(wanted, unwanted) {
	var test, m, i;
	var uwpole = new Array();
	var combo = document.getElementById('prefPricer');
	if (!combo) return;
	var actual = getPricerType(combo.form);
	actual = actual.substring(0, 3);
	if (!wanted && !unwanted) wanted = actual;
	else if (!wanted && unwanted) {
		uwpole = unwanted.split('|');
		test = true;
		for (i = 0; i < uwpole.length; i++) {
			if (actual == uwpole[i]) {
				test = false;
				break;
			}
		}
		if (test) { //nothing to change
			switchVisibility('depTimes', (actual == 'AVB') ? 1 : 0);
			return;
		}
	}
	
	if (!combo.type || (combo.type != 'select-one')) {
		switchVisibility('depTimes', (actual == 'AVB') ? 1 : 0);
		return;
	}
	var found = '';
	for (m = 0; m < combo.options.length; m++) {
		test = true;
		for (i = 0; i < uwpole.length; i++) {
			if (combo.options[m].value.substring(0, 3) == uwpole[i]) {
				test = false;
				break;
			}
		}
		if (test) {
			if (!wanted || (combo.options[m].value.substring(0, 3) == wanted)) {
				found = combo.options[m].value;
				wanted = combo.options[m].value.substring(0, 3);
				break;				
			}
		}
	}
	if (wanted != actual) {
		if (found != '') combo.value = found;
		else combo.value = combo.options[0].value;
	}
	actual = getPricerType(combo.form);
	actual = actual.substring(0, 3);
	switchVisibility('depTimes', (actual == 'AVB') ? 1 : 0);
}

function setJourney() {
	var combo = document.getElementById('prefPricer');
	if (!combo) return;
	var actual = getPricerType(combo.form);
	var changed = false;
	
	if (actual == 'OFP') {
		iterateSwitch('journeyTypeOJ', 0, 1, 2);
		switchVisibility('depDates', 0);
		switchVisibility('depCalendars', 0);
		switchVisibility('depTimes', 0);
		iterateSwitch('depIataRow', 0, 2, 3);
		reLabel('from1suffix', '');
		reLabel('to1suffix', '');
		iterateSwitch('depAirlines', 0, 1, 4);
		iterateSwitch('depClass', 0, 1, 4);
		iterateSwitch('depPassengers', 0, 1, 8);
		changed = setRadio(journeyTypeName, 'RT', 'OJ'); //set "roundTrip" only if "other" is checked!
	} 
	else if (actual == 'ONP') { //|| actual == 'MSP') {
		iterateSwitch('journeyTypeOJ', 1, 1, 2);
		switchVisibility('depDates', 1);
		switchVisibility('depCalendars', 1);
		iterateSwitch('depAirlines', 1, 1, 4);
		iterateSwitch('depClass', 1, 1, 4);
		iterateSwitch('depPassengers', 1, 1, 8);
		changed = setRadio(journeyTypeName, 'RT', 'OJ'); //set "roundTrip" only if "other" is checked!
	} 
	else if (actual == 'SCP') {
		iterateSwitch('journeyTypeOJ', 1, 1, 2);
		switchVisibility('depDates', 1);
		switchVisibility('depCalendars', 1);
		iterateSwitch('depAirlines', 1, 1, 4);
		iterateSwitch('depClass', 1, 1, 4);
		iterateSwitch('depPassengers', 1, 1, 8);
		changed = setRadio(journeyTypeName, 'RT', 'OJ'); //set "roundTrip" only if "other" is checked!
	} 
	else {
		iterateSwitch('journeyTypeOJ', 1, 1, 2);
		switchVisibility('depDates', 1);
		switchVisibility('depCalendars', 1);
		iterateSwitch('depAirlines', 1, 1, 4);
		iterateSwitch('depClass', 1, 1, 4);
		iterateSwitch('depPassengers', 1, 1, 8);
	}
	
	if (changed) {
		switchHidden('RT');
	}
}

/**
 * logika rozdeleni pasazeru do pokoju
 */

var uncheckinPassengers = new Array();
var backupPassangers = new Array();

var lastRoom = 1;

function printArray( array ) {
	var message = '';
	for (var key in array) { message+= '{'+key +':'+ array[ key ]+'}' };
	
	alert( message );
}

function arrayCopy ( array ) {
	
	var tmp = new Array();
	for (var key in array) { tmp[key] = array[ key ] };
	
	return tmp;
}

function getUnCheckInPassengersCount(message) {
	
	var count = 0;
	for (var key in uncheckinPassengers) {
	    // @FIXME nebrat v potaz "function..."
	    if (typeof(uncheckinPassengers[ key ]) == "function") continue;
	
		//infanti se nepocitaji
		if ( key == passengerCountNameINFANT ) continue;
		 count+= uncheckinPassengers[ key ];
	};
	
	if ( typeof message != "undefined" && count > 0) {
		alert( "Prosím vyberte pokoje pro všechny cestující" );
	}
	
	return count;
}

function setPassengers( el ) {
	
	//zmenou pasazeru se resetuje cele nastaveni posledniho pokoje
	uncheckinPassengers = arrayCopy(backupPassangers[ 'room'+lastRoom]);
	
	//nastavim daneho pasazera
	uncheckinPassengers[ el.name ] = parseInt(el.value);
	
	//zobrazim aktualni stav
	showUnCheckInPassengers();
	
	//podle aktualniho stavu, vygeneruju nabidku
	generateRoomOffer( jQ(":input[@name=\"room"+lastRoom+"\"]")  );
	
	//provedu zalohu aktualniho stavu
	backupPassangers[ 'room'+lastRoom ] = uncheckinPassengers;
	
	if ( getUnCheckInPassengersCount() > 0 ) {
		jQ("#addRoomButton").show();
	}
	
	// zmenim typ pokoje podle nove zvolenych pasazeru
	changeRoomsType();
}

//metoda distribuuje pasazery, podle zvoleneho typu pokoje
//el - zvoleny comboBox
//back - urcuje, zda se budou lidi vracet zpet na neubytovane, nebo se budou ubytovavat
//call - urcuje, zda se bude volat rekurze
function distributePassengers(el) {

	uncheckinPassengers = arrayCopy(backupPassangers[ el.name ]);

	switch ( el.value ) {
		
		case 'SGL': 
					if (uncheckinPassengers[passengerCountNameADULT] > 0) {
						--uncheckinPassengers[passengerCountNameADULT];
						break;
					} 
					
					if (uncheckinPassengers[passengerCountNameCHILD] > 0) {
						--uncheckinPassengers[passengerCountNameCHILD];
						break;
					}
					 
		case 'DBL':
		case 'TWN':
				//vzdy ubytuju dospeleho
				--uncheckinPassengers[passengerCountNameADULT];	
				
				//dite ma prednost, pred dospelim
				if( uncheckinPassengers[passengerCountNameCHILD] > 0) {
					--uncheckinPassengers[passengerCountNameCHILD];						
				} else {
					--uncheckinPassengers[passengerCountNameADULT];
				}		
				
				//ubytovani infanta na spolecnem luzku
				if ( uncheckinPassengers[passengerCountNameINFANT] > 0 ) {
					--uncheckinPassengers[passengerCountNameINFANT]
				}
				break;
		case 'DBL_COT':
		case 'TWN_COT':			
					
					//vzdy ubytuju dospeleho
					--uncheckinPassengers[passengerCountNameADULT];	
					
					//dite ma prednost, pred dospelim
					if( uncheckinPassengers[passengerCountNameCHILD] > 0) {
						--uncheckinPassengers[passengerCountNameCHILD];						
					} else {
						--uncheckinPassengers[passengerCountNameADULT];
					}
					
					//ubytovani infanta v kolebce				
					if ( uncheckinPassengers[passengerCountNameINFANT] > 0 ) {
						--uncheckinPassengers[passengerCountNameINFANT]
					}	
					
					//ubytovani infanta na spolecne posteli
					if ( uncheckinPassengers[passengerCountNameINFANT] > 0 ) {
						--uncheckinPassengers[passengerCountNameINFANT]
					}	
			break;
		case 'TPL':
				//vzdy ubytuju dospeleho
				--uncheckinPassengers[passengerCountNameADULT];
				
				//pokud jsou deti, maji prednost
				if (uncheckinPassengers[passengerCountNameCHILD] > 0 ) {
					uncheckinPassengers[passengerCountNameCHILD]-= 2;
				} else {
					uncheckinPassengers[passengerCountNameADULT]-= 2;
				}
				
				//jedno misto zustalo neobsazene, muze tam jit adult
				if ( uncheckinPassengers[passengerCountNameCHILD] < 0 ) {
					--uncheckinPassengers[passengerCountNameADULT];
				}		
				
				//ubytovani infanta na spolecne posteli
				if ( uncheckinPassengers[passengerCountNameINFANT] > 0 ) {
					--uncheckinPassengers[passengerCountNameINFANT]
				}	
			break;
			
		case 'QDR':
				//vzdy ubytuju dospeleho
				--uncheckinPassengers[passengerCountNameADULT];
				
				//pokud jsou deti, maji prednost
				if (uncheckinPassengers[passengerCountNameCHILD] > 0 ) {
					uncheckinPassengers[passengerCountNameCHILD]-=3;
				} else {
					uncheckinPassengers[passengerCountNameADULT]-=3;
				}
				
				//jedno az dve mista zustaly neobsazene, muze tam jit adult
				if ( uncheckinPassengers[passengerCountNameCHILD] < 0 ) {
					uncheckinPassengers[passengerCountNameADULT]-= (-1)*uncheckinPassengers[passengerCountNameCHILD];
				}	
				
				//ubytovani infanta na spolecne posteli
				if ( uncheckinPassengers[passengerCountNameINFANT] > 0 ) {
					--uncheckinPassengers[passengerCountNameINFANT]
				}
				
				//ubytovani infanta na spolecne posteli
				if ( uncheckinPassengers[passengerCountNameINFANT] > 0 ) {
					--uncheckinPassengers[passengerCountNameINFANT]
				}		
			break;
		default:
						
	}
	
	if ( uncheckinPassengers[passengerCountNameADULT] < 0 ) {
		uncheckinPassengers[passengerCountNameADULT] = 0;
	}
	
	if ( uncheckinPassengers[passengerCountNameCHILD] < 0 ) {
		uncheckinPassengers[passengerCountNameCHILD] = 0;
	}
	
	//overeni, distribuce vsech pasazeru
	if( getUnCheckInPassengersCount() == 0 || lastRoom >= 3 || uncheckinPassengers[passengerCountNameADULT] == 0) {
		//neni treba pridavat dalsi pokoj
		jQ("#addRoomButton").hide();
		
		//uzivatel muze pokracovat v bookingu
	} else {
		jQ("#addRoomButton").show();
	}
	showUnCheckInPassengers();
	
}

//prida dalsi pokoj
function addRoom() {
	
	if( jQ("#room2:visible").size() ) {
		lastRoom = 2;
	}
	
	if( jQ("#room3:visible").size() ) {
		lastRoom = 3;
	}
	
	if( jQ(":input[@name=\"room"+lastRoom+"\"]").selectedValues() == '' ) {
		alert( "Prosím vyberte nějaký typ pokoje!" );	
		return;
	}
	
	//dalsi pokoj jiz nelze pridat
	if ( lastRoom < 3 ) {
		jQ("#room"+(lastRoom+1)).show();
		jQ(":input[@name=\"room"+lastRoom+"\"]").attr("disabled","disabled");
		++lastRoom;
	} 
	
	//zaloha aktualniho stavu pasazeru
	backupPassangers['room'+lastRoom] = uncheckinPassengers;
	
	//schovani linku, pokud jsem si prave zobrazil 3. pokoj, nebo nejsou adulti
	if (lastRoom == 3) {
		jQ("#addRoomButton").hide();
	}
	
	//zobrazeni linku na odstraneni posledniho pokoje
	jQ("#removeRoomLink"+lastRoom).show();	
	jQ("#removeRoomLink"+(lastRoom-1)).hide();	
	
	generateRoomOffer( jQ(":input[@name=\"room"+lastRoom+"\"]")  );
	
	//zakazani pridani dalsich pasazeru
	jQ(":input[@name=\""+passengerCountNameADULT+"\"]").attr("disabled","disabled");
	jQ(":input[@name=\""+passengerCountNameCHILD+"\"]").attr("disabled","disabled");
	jQ(":input[@name=\""+passengerCountNameINFANT+"\"]").attr("disabled","disabled");
	
	if (passDisabled == false) {
		//zobrazeni linku na zmenu pasazeru
		jQ("#divNewPassCount").show();
	}
	
}

function resetAllRooms() {
	
	if(!confirm("'Opravdu chcete zadat nové počty cestujících a typy pkojů?'")) {
		return false;
	}
	
	for ( var i = lastRoom; i >= 1; i-- ) {
		removeLastRoom(false);
	}
	
}

function removeLastRoom( confirmRemove ) {
	
	if(typeof confirmRemove == 'undefined') {
		confirmRemove = true;	
	}	
	
	if(confirmRemove && !confirm("'OPravdu chcete odebrat tento pokoj?'")) {
		return true;
	}
	
	if( jQ("#room2:visible").size() ) {
		lastRoom = 2;
	}
	
	if( jQ("#room3:visible").size() ) {
		lastRoom = 3;
	}
	
	//nelze odebrat prvni pokoj
	if ( lastRoom > 1 ) {
		jQ("#room"+(lastRoom)).hide();
		jQ(":input[@name=\"room"+(lastRoom-1)+"\"]").removeAttr("disabled");
		--lastRoom;
	}
	
	//distribuuj pasazery podle nastaveni posledniho comba
	var el = {
				name: 'room'+lastRoom,
				value: jQ(":input[@name=\"room"+lastRoom+"\"]").selectedValues()
			};
			
	el.value = el.value.toString();		
	
	distributePassengers( el );
	
	showUnCheckInPassengers();
	
	jQ("#addRoomButton").show();
	
	jQ("#removeRoomLink"+lastRoom).show();
	jQ("#removeRoomLink"+(lastRoom+1)).hide();
		
	//zobrazeni linku na odstraneni posledniho pokoje
	if (lastRoom == 1) {
		if (passDisabled == false) {
			//povoleni pridani dalsich pasazeru
			jQ(":input[@name=\"" + passengerCountNameADULT + "\"]").removeAttr("disabled");
			jQ(":input[@name=\"" + passengerCountNameCHILD + "\"]").removeAttr("disabled");
			jQ(":input[@name=\"" + passengerCountNameINFANT + "\"]").removeAttr("disabled");
			
			//schovani linku na zmenu pasazeru
			jQ("#divNewPassCount").hide();
		}
	}	
		
}

//funkce vykresli typy a pocty neubytovanych pasazeru
function showUnCheckInPassengers(  ) {
	
	var html = '';
	var count = 0;
	for (var key in uncheckinPassengers){

		 if( key == passengerCountNameADULT && uncheckinPassengers[ key ] > 0 ) {
		 	html+="Dospělý";
			html+= ": "+uncheckinPassengers[ key ]+"<br />";
			count++;
		 }
		 
		 if( key == passengerCountNameCHILD && uncheckinPassengers[ key ] > 0 ) {
		 	html+="Děti";
			html+= ": "+uncheckinPassengers[ key ]+"<br />";
			count++
		 }
		 
		 if( key == passengerCountNameINFANT && uncheckinPassengers[ key ] > 0 ) {
		 	html+="Děti do 2 let";
			html+= ": "+uncheckinPassengers[ key ]+"<br />";
			count++
		 }
	};
	
	if ( count == 0 ) {
	    jQ("#roomsPassengers").parent().addClass("full");
		html = "Všichni cestující jsou ubytováni";
	} else {
        jQ("#roomsPassengers").parent().removeClass("full");
	}
	
	jQ("#roomsPassengers").html( html );
}

//generuje nabidku pro dany pokoj 
function generateRoomOffer( roomEl ) {
	
 	jQ( roomEl ).removeOption(/./);
	
 	var adultChild  = uncheckinPassengers[ passengerCountNameADULT ] + uncheckinPassengers[ passengerCountNameCHILD ];
 	var adultInfant = uncheckinPassengers[ passengerCountNameADULT ] + uncheckinPassengers[ passengerCountNameCHILD ] + uncheckinPassengers[ passengerCountNameINFANT ];
 	
	//single
	if ((lastRoom < 3 && adultChild >= 0) ||  adultChild == 1) {
			jQ( roomEl ).addOption("SGL","Jednolůžkový");
	}
	
	//double
	if ( (lastRoom < 3 && adultChild >= 0) ||  adultChild <= 2 ) {
		jQ( roomEl ).addOption("DBL","Dvoulůžkový");
	}
	
	if ( ( (lastRoom < 3 && adultInfant >= 0) ||  adultInfant <= 3 ) && uncheckinPassengers[ passengerCountNameINFANT ] > 0) {
		jQ( roomEl ).addOption("DBL_COT","Dvoulůžkový s kolébkou");
	}
	
	//twin
	if ( (lastRoom < 3 && adultChild >= 0) ||  adultChild <= 2 ) {
		jQ( roomEl ).addOption("TWN","Dvoulůžkový (dvoupostel)");
	}
	
	if ( ( (lastRoom < 3 && adultInfant >= 0) ||  adultInfant <= 3 ) && uncheckinPassengers[ passengerCountNameINFANT ] > 0) {
		jQ( roomEl ).addOption("TWN_COT","Dvoulůžkový s kolébkou (dvoupostel)");
	}
	
	//triple
	if ( (lastRoom < 3 && adultChild >= 0) ||  adultChild <= 3  ) {
		jQ( roomEl ).addOption("TPL","Třílůžkový");
	}
	
	//quad
	if ( adultChild > 0 ) {
		jQ( roomEl ).addOption("QDR","Čtyřlůžkový");
	}
	
	jQ( roomEl ).selectOptions("", true);
	
}

function formatCity(val, inList) {
  	var dest = val.toString().split(";");
  	var str = dest[1] + ", " + dest[3] + " (" + dest[0] + ")";
  	return (inList) ? "<img src='images/flags/" + dest[2] + ".gif'/> " + str : str;
}

function appendCityAutoComplete(id) {
    var extQueryStr = parseURL();
    var jsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
    var sUrlPathOffer = jsHost + window.location.hostname + "/" + extQueryStr + "/cityWishper.php?lng=" + language;

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

function changeRoomsType() {
	var passengerCount = parseInt(jQ('select[@name="ADTCount"]').val()) + parseInt(jQ('select[@name="CHDCount"]').val());
	if (passengerCount > 0) {
		var selectedRoomVal = jQ('select[@name="room1"] option:selected').val();
		if (selectedRoomVal == '' || selectedRoomVal == undefined) {
			jQ('select[@name="room1"] option').attr('selected','');
			switch(passengerCount) {
			    case 1:
			        jQ('select[@name="room1"]').val("SGL"); // option[@value="SGL"]').attr('selected', 'selected');
		            break;
		        case 2:
		        	jQ('select[@name="room1"]').val("DBL"); // option[@value="DBL"]').attr('selected', 'selected');
		            break;
		        case 3:
			        jQ('select[@name="room1"]').val("TPL"); // option[@value="TPL"]').attr('selected', 'selected');
		            break;
		        default:
			        jQ('select[@name="room1"]').val("QDR"); // option[@value="QDR"]').attr('selected', 'selected');
			}
			
			jQ('select[@name="room1"]').trigger("change");
			
            var el = {
                name: 'room1',
                value: jQ('select[@name="room1"]').val()
            };
			
			distributePassengers(el);
		}
	}
}


/* ***************************** SPECIALNI NABIDKY ***************** */

function onReadySpecialOffer() {
	urlHalves = actionLink.split('?');
	initLoading('short');
}

function getAllSpecialOffer() {
	urlHalves = actionLink.split('?');
	initLoading('full');
}


/* AJAX funkce pro nacitani letu */

// GLOBALNI PROMENNE

var aTimers = new Array();
var extQueryStr = parseURL();
var urlHalves = '';
var jsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
var sUrlPathOffer = jsHost + window.location.hostname + "/" + extQueryStr + "/ajaxSpecialOfferList.php";
var nTimeoutDelay = 60000;

var takeResultStatus = "";
var takeResultNextPageStatus = "";

// Zpusob trideni PRICE, NAME, RATING;
var sSortingMode = "PRICE";
var sSortingOrder = "ASC";

var nMaxRequestCount = 3;
var nRequestCount = 0;

var errorMessage = "";

// FUNKCE

// Inicializace nacitani.
function initLoading(type) {
  // Inicializace timeru pro prevenci "zatuhnuti" nacitani.
  aTimers["timeoutCheck"] = setTimeout("stopLoading()", nTimeoutDelay);
  requestData(0, type);
}

function stopLoading() {
  // Vypnuti timeru pro prevenci "zatuhnuti" nacitani.
  try {
    clearTimeout(aTimers["timeoutCheck"]);
  } catch(eException) {
  }
  
}

function requestData(takeResultStatus, type) {
  	var sParameters = "";
  	
  	// Reset timeru pro prevenci "zatuhnuti" nacitani.
  	try {
		clearTimeout(aTimers["timeoutCheck"]);
  	} catch(eException) {}
  	
  	aTimers["timeoutCheck"] = setTimeout("stopLoading()", nTimeoutDelay);
	
	sParameters = "specOffType=" + type + "&" + urlHalves[1];
	
	
  	if (takeResultStatus != 0) {
  		sParameters = "getResult=" + takeResultStatus + "&" + sParameters;
  	}
  	
  	callAjaxSpecialOffer(sParameters, type);
  	
}

// nacteni nabidek pres ajax a zapis do daneho containeru
function callAjaxSpecialOffer(sQueryStr, type) {

  	var sReplyData = null;
  	var sDivContainer = "#specialOffersContainer";
  	var sDivRealContainer = "#realSpecialOfferContainer"; // kontainer pro SPO na vrstve
  	var sWaitingContainer = "#specialOfferWaiting";
  	var sAllOffersLink = "#spoAllOffersLink";
  	var error = null;
  	
  	if (type == 'full') {
  	    sDivContainer = "#lbIframe";
  	    sWaitingContainer = "#loadingBox_container";
      }
	
	jQ(sWaitingContainer).show();
	
  	jQ.ajax({
    	type: "GET",
    	async: true,
    	url: sUrlPathOffer,
    	data: sQueryStr,
    	dataType: "xml",
    
    	success: function(replyData) {
    	    
    	    // Pokud je na ajaxove strance chyba
			var error = jQ(replyData).find('/root/error');
			var errorMessage = jQ(error).text();
			
			// pokud vyprsela session a mam provest redirect
			if (errorMessage.length > 0 && errorMessage == 'SESSION_EXPIRED_MAKE_INDEX_REDIRECT') {
			    var jsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
			    var redirectUrl = jsHost + window.location.hostname + '/?error=expired';
			    stopLoading();
			    showLoadingBox(false);
			    window.location.href = redirectUrl;
			    return false;
			}
    	    
         	// vraceni obsahu description
     		sReplyData = jQ(replyData).find('/root/page/description').text();
         	takeResultStatus = jQ(replyData).find('/root/page/takeResults').text();
         	takeResultNextPageStatus = jQ(replyData).find('/root/page/takeResultsNextPage').text();
         	
         	if (sReplyData != "") {
         		if (jQ(sDivRealContainer).size()) {
         		    jQ(sDivRealContainer).append(sReplyData);
         		} else {
         		    jQ(sDivContainer).append(sReplyData);
         	    }
         		jQ(sAllOffersLink).show("blind", { direction: "horizontal" }, 50);
         	}
         	
     		// Pokud je na ajaxove strance chyba, tak ji zobrazim na standardnim miste.
			if (errorMessage.length >= 1) { 
				stopLoading();
			}
			
			if (type == 'full' && takeResultNextPageStatus != "" && takeResultNextPageStatus != null) {
	     	    // pri nextPage hodnote muzeme zobrazit link pro dalsi nacteni
	     	    setTimeout('requestData(' + takeResultNextPageStatus + ', "' + type + '")', takeResultNextPageStatus*400 ); // TODO:vylepsit podminku pro prodluzovani
	     	    
	     	} else if (takeResultStatus != "" && takeResultStatus != null) {
				 setTimeout('requestData(' + takeResultStatus + ', "' + type + '")', takeResultStatus*400 ); // TODO:vylepsit podminku pro prodluzovani
	     	} else {
                jQ(sWaitingContainer).hide();
            }
            
		} ,
	   
	   	error: function(xmlObject, errorMsg, exception) {
			jQ(sWaitingContainer).hide();
	   	} 
	});

}

/** 
 * ziska IATA kod destinace ze stringu, nebo vrati cely string pokud neni
 */
function getDestinationCode (inputName, form) {
	inputVal = form[inputName].value.match(/\((.*)\)$/);
	
	if (inputVal === null) {
		return form[inputName].value;
	}
	return inputVal[1];
}

/**
 * send picked data with Track Event
 */

function onSubmitFormGATrackEvent (form) {
	jQ(form).find('*[@name^="room"]').each(function () {
		if (jQ(this).parent().is(':visible')) {
			aagGaq.callEvent('pick','search_form_room',jQ(this)[0].value);
		}
	});
	aagGaq.callEvent('pick','search_form_departure',form.fullDate0.value);
	aagGaq.callEvent('pick','search_form_return',form.fullDate1.value);
	
	aagGaq.callEvent('pick','most_wanted_destination',getDestinationCode('destination', form)); // Destinace
	aagGaq.callEvent('pick','search_form_ADTCount',form.ADTCount.value);
	total_count = parseInt(form.ADTCount.value);
	// deti, cestujici
	if (typeof(form.CHDCount) !== 'undefined' && form.CHDCount.value > 0) {
		aagGaq.callEvent('pick','search_form_CHDCount',form.CHDCount.value);
		total_count += parseInt(form.CHDCount.value);
	}
	// kojenci
	if (typeof(form.INFCount) !== 'undefined' && form.INFCount.value > 0) {
		aagGaq.callEvent('pick','search_form_INFCount',form.INFCount.value);
		total_count += parseInt(form.INFCount.value);
	}
	aagGaq.callEvent('pick','search_form_total_passengers', total_count+"");
}
