function checkForm(form, type) {
	if (type != 'next') return true;
	return (!checkDestination(form) || !checkDates(form) || !validDates(form) 
			|| !datesLimits(form) || !checkPreferences(form) || !checkPassengersCount(form)) ? false : true;
}

function checkPassengersCount(form) {
	if (getPricerType(form) == 'OFP') return true;
	var field, Message, adults, children, infants, youths, seniors;
	
	if (typeof passengerCountNameADT == 'undefined') adults = 0;
	else adults = parseInt(getCombo(form, passengerCountNameADT));
	if (typeof passengerCountNameYTH == 'undefined') youths = 0;
	else youths = parseInt(getCombo(form, passengerCountNameYTH));
	if (typeof passengerCountNameYCD == 'undefined') seniors = 0;
	else seniors = parseInt(getCombo(form, passengerCountNameYCD));
	
	adults = adults + youths + seniors;
	
	if (typeof passengerCountNameCHD == 'undefined') children = 0;
	else children = parseInt(getCombo(form, passengerCountNameCHD));
	if (typeof passengerCountNameINF == 'undefined') infants = 0;
	else infants = parseInt(getCombo(form, passengerCountNameINF));

  	if (!adults && children) {
  		Message = "Děti nemohou cestovat bez doprovodu!";
		field = getElement(form, passengerCountNameCHD);
  	} 
  	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, passengerCountNameINF);
  	} 
  	else if (!adults) {
  		Message = "Vyberte cestující!";
		field = getElement(form, passengerCountNameADT);
  	}
  	else if (9 < (adults + children)) {
  		Message = "Maximální počet pasažéru byl překročen!";
		field = getElement(form, passengerCountNameADT);
  	}
  	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 getPricerType(form) {
	var data = getCombo(form, pricerName);
	if (data == false) {
		data = getInput(form, pricerName)
	}
	return data.substring(0, 3); 
}

function datesLimits(form) {
  if (getPricerType(form) == 'OFP') return true;
  var field = null;
  var dnes = getServerNow();
  var odlet  = getWholeDate(depMonthNameOptions[0][getCombo(form, depMonthSelName[0])], getInput(form, depDayName[0]));
  var prilet = getWholeDate(depMonthNameOptions[1][getCombo(form, depMonthSelName[1])], getInput(form, depDayName[1]));
  var posledniDen = getServerNow(); //new Date();
  var odletStr, priletStr;
  var journeyType = getRadio(form, journeyTypeName);
  var both = (journeyType == 'RT' || journeyType == 'OJ') ? true : false;

  posledniDen.setTime(Date.UTC(dnes.getFullYear(), dnes.getMonth(), dnes.getDate(), 0, 0, 0) + (331*24*60*60*1000));

  if (odlet > posledniDen) { 
  	field = getElement(form, depDayName[0]); 
  	Message = "Datum odletu může být voleno maximálně na 331 dní dopředu!"; 
  }
  else if (prilet > posledniDen) { 
  	field = getElement(form, depDayName[1]);
  	Message = "Datum návratu může být voleno maximálně na 331 dní dopředu!"; 
  }
  else if (both && (odlet > prilet)) { 
  	field = getElement(form, depDayName[0]); 
  	Message = "Datum příletu nesmí být před datem odletu!"; 
  }
  else {
    return true;
  }
  
  if (Message.length) alert(Message);
  if (field != null) {
    field.focus();
    field.select();
  }
  return false;
}

function validDates(form) {
  if (getCombo(form, pricerName) == 'OFP') return true;
  var Message, field;
  var day1value = getInput(form, depDayName[0]);
  var month1value = depMonthNameOptions[0][getCombo(form, depMonthSelName[0])];
  var day2value = getInput(form, depDayName[1]);
  var month2value = depMonthNameOptions[1][getCombo(form, depMonthSelName[1])]
  var journeyType = getRadio(form, journeyTypeName);
  var both = (journeyType == 'RT' || journeyType == 'OJ') ? true : false;
  
  var year1 = guessYear(day1value, month1value);
  var year2 = guessYear(day2value, month2value);

  if (month1value < 1 || month1value > 12) {
  	field = getElement(form, depMonthSelName[0]); 
  	Message = "Chybně zadán měsíc odletu!"; 
  } else if (both && (month2value < 1 || month2value > 12)) {
  	field = getElement(form, depMonthSelName[1]);
  	Message = "Chybně zadán měsíc návratu!"; 
  } else if (day1value < 1 || day1value > DayEnd(month1value, year1)) {
  	field = getElement(form, depDayName[0]);
  	Message = "Chybně zadán den odletu!"; 
  } else if (both && (day2value < 1 || day2value > DayEnd(month2value, year2))) {
  	field = getElement(form, depDayName[1]);
  	Message = "Chybně zadán den návratu!"; 
  } else return true;

  if (Message.length) alert(Message);
  if (field != null) {
    field.focus();
    field.select();
  }
  return false;
}

//kontrola datumu odletu a priletu
function checkDates(form) {
  if (getPricerType(form) == 'OFP') return true;
  var day1 = getElement(form, depDayName[0]);
  var month1 = getElement(form, depMonthSelName[0]);
  var day2 = getElement(form, depDayName[1]);
  var month2 = getElement(form, depMonthSelName[1]);
  var Message = '';
  var field = null;
  var journeyType = getRadio(form, journeyTypeName);
  var both = (journeyType == 'RT' || journeyType == 'OJ') ? true : false;
  
  if(day1 && !checkDay(day1.value)) {
    Message = "Chybně zadán den odletu!"; 
    field = day1;
  }
  else if(month1 && !checkDay(depMonthNameOptions[0][getCombo(form, depMonthSelName[0])])) {
    Message = "Chybně zadán měsíc odletu!"; 
    field = month1;
  }
  else if(both && day2 && !checkDay(day2.value)) {
    Message = "Chybně zadán den návratu!";  
    field = day2;
  }
  else if(both && month2 && !checkDay(depMonthNameOptions[1][getCombo(form, depMonthSelName[1])])) {
    Message = "Chybně zadán měsíc návratu!";  
    field = month2;
  }
  else return true;
  
  if (Message.length) alert(Message);
  if (field != null) {
    field.focus();
    field.select();
  }
  return false;
}

//kontrola destinaci
function checkDestination(form) {
  var from1 = getElement(form, depDestinationName[0]);
  var to1 = getElement(form, arrDestinationName[0]);
  var from2 = getElement(form, depDestinationName[1]);
  var to2 = getElement(form, arrDestinationName[1]);
  var journeyType = getRadio(form, journeyTypeName);
  var Message = '';
  var field = null;

  if (journeyType == 'RT' || journeyType == 'OW') from2 = to2 = null;
  
  if (from1 && from1.type == 'text' && from1.value.length < 3) {
    Message = "Chybně zadána destinace Odkud!";  
    field = from1;
  }
  else if (to1 && to1.type == 'text' && to1.value.length < 3) {
    Message = "Chybně zadána destinace Kam!";  
    field = to1;
  }
  else if (from2 && from2.type == 'text' && from2.value.length < 3) {
    Message = "Chybně zadána destinace Odkud 2!"; 
    field = from2;
  }
  else if (to2 && to2.type == 'text' && to2.value.length < 3) {
    Message = "Chybně zadána destinace Kam 2!"; 
    field = to2;
  }
  else if (from1 && to1 != null && (from1.value == to1.value) ) {
    Message = "Musí být rozdílná volba odletu Odkud a Kam!"; 
    field = from2;
  }
  else if (from1 && from1.type == 'select-one' && to1 != null && to1.type == 'select-one' && from1.options[from1.selectedIndex].value == to1.options[to1.selectedIndex].value) {
    Message = "Musí být rozdílná volba odletu Odkud a Kam!"; 
    field = from1;
  }
  else if (from2 && to2 && (from2.value == to2.value)) {
    Message = "Musí být rozdílná volba návratu Odkud a Kam!"; 
    field = from2;
  }
  else return true;

  if (Message.length) alert(Message);
  if (field != null) {
    field.focus();
    if (field.type == 'text') field.select();
  }
  return false;
}

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');
	}
}

