/*********************************************************/
/*  Validierungsfunktion für die Startmaske (Standard)   */
/*********************************************************/
/*****************************************************************************
	todo
	- check jugendliche , studenten , erwachsene nicht gleichzeitig
	- datums check
	- ausputzen
*****************************************************************************/

document.observe('dom:loaded',function() { 
	init_page();
	$('btnbox_r').show();
	/*
	if (ns6) {
		document.getElementById('btnbox_r').style.visibility = "hidden";
		document.getElementById('btnbox_r').style.visibility = "visible";
	}
	if (ie) {
		document.all['btnbox_r'].style.visibility = "hidden";
		document.all['btnbox_r'].style.visibility = "visible";
	}
	*/
})

var f; // the  form

/* später auf XSL-Template auslagern, da CSS abhängig oder können wir von hier aus auf das CSS zugreifen? */
var Cfg = {
	input_bg_ok: "#ffffff",
	input_bg_warn: "#00ffff",
	airport_fields: null,
	airport_oj_fields: null,
	error_border_style: '1px solid #ff0000'
}

/*
function init_page () {
	setTimeout('init_page1()',5000);
}
*/

function init_page () {
	/* beserer Zugriff auf die Formelemente - kürzer, Auslesen der verschiedenene Elemente gekapselt  */
	//debugger;
	//alert(10)
	f = document.forms['startform'];
	var inp = Form.serialize(f, true);
	//set_tabIndexes();
		
	var hdate = f.hdate_start.value.split('.');
	var rdate = f.rdate_start.value.split('.');
	//init_calendar(hdate.reverse().join('') , rdate.reverse().join(''), f.mindatum.value, f.maxdatum.value);
	
	/* Maske je nach Vorauswahl der Flugart anzeigen: Normal, Oneway oder Gabelflug */
	change_flugart();
		
	try {$("pause").hide();} catch(e){}
		
	/*****************************************************************************
		Todo: 
			nur wenn es sich um den ersten Aufruf der Seite handelt
	*****************************************************************************/
	if(f.maske.value == 'alpha1') {
		if(ajax_startdate) set_startdate(ajax_startdate, f.freedate.value);
		change_backdate (7);
	}	
		
	init_validator(f, null, Cfg.error_border_style);
	
	/* ie6 Hack (durchscheinende Dropdowns (jetzt durch iframe Hack gelöst */
	
	if (0 && ie6) {
		$("calendars").style.top = '350px';
		$("calendars").style.left = '180px';
		$("teilnehmer_info").style.top = '350px';
		$("teilnehmer_info").style.left = '180px';
	}
	
	change_dob_display();
	
}
	
function startform_valid (theForm) {
	var flugart = getCheckedValue(f.flugart);
	var ret = true; 
	
	if (flugart == "G") {//  Gabelflug
		ret = validator.check_fields_in_array(Cfg.airport_oj_fields);
	}
	/*****************************************************************************
		 sma: todo was wenn einer kein P2P hat? ->  alles für beide Modi 
		 funktionsfähig machen + testen.
		 Problem taucht nur im firefox auf, da dieser auch elemente, die nicht 
		 sichtbar sind (visible:none) an den server weitergibt und das Frontend 
		 dann irrtümlich einen Openjaw annimmt
	*****************************************************************************/
	else {// oneway / return
		ret = validator.check_fields_in_array(Cfg.airport_fields);
	}
	
	if (!ret) return(false);
//  und nun die Datumsbetrachtung // TODO -> überarbeiten


	if (parseInt(theForm.freedate.value) == 1)
	{
		
		hdat = extract_datum (theForm.hdate.value);
		hd3 = parseInt (hdat / 10000);
		hd1 = hdat % 100;
		hd2 = parseInt ((hdat-hd3*10000)/100.);

		theForm.hdate1.value	= hd1;
		theForm.hdate2.value = hd3*100 + hd2;
		var focus_element = theForm.hdate;
	}
	else
	{
		hd1 = parseInt (parseFloat(theForm.hdate1.value));
		hd3 = parseInt (theForm.hdate2.value/100.);
		hd2 = parseInt (theForm.hdate2.value % 100.);

		hdat = hd3*10000 + hd2*100 + hd1;
		focus_element = theForm.hdate1;
	}

	if (! teste_datum (hd1,hd2,hd3))
	{
		alert (Msg['DATE_NOT_EXISTING']);
		focus_element.focus();
		return (false);
	}

	if (hdat < theForm.mindatum.value)
	{
		alert (Msg['EARLIEST_DEPDATE']+" "+formatDate(theForm.mindatum.value));
		focus_element.focus();
		return (false);
	}

	if (flugart != "O")  //  bei onewayFlügen ist Rückflugsdatum irrelevant
	{
		if (parseInt(theForm.freedate.value) == 1)
		{
			rdat = extract_datum (theForm.rdate.value);

			rd3 = parseInt (rdat / 10000);
			rd1 = rdat % 100;
			rd2 = parseInt ((rdat-rd3*10000)/100.);

			theForm.rdate1.value	= rd1;
			theForm.rdate2.value = rd3*100 + rd2;
			focus_element = theForm.rdate;
		}
		else
		{
			rd1 = parseInt (parseFloat(theForm.rdate1.value));
			rd3 = parseInt (theForm.rdate2.value/100.);
			rd2 = parseInt (theForm.rdate2.value % 100.);

			rdat = rd3*10000 + rd2*100 + rd1;
			focus_element = theForm.rdate1;
		}

		if (rdat > theForm.maxdatum.value)
		{
			alert (Msg['LATEST_RETDATE']+" "+theForm.maxdatumt.value);
			focus_element.focus();
			return (false);
		}
		if (! teste_datum (rd1,rd2,rd3))
		{
			alert (Msg['DATE_NOT_EXISTING']);
			focus_element.focus();
			return (false);
		}

		if (rdat < hdat)
		{
			alert (Msg['RET_BEFORE_DEST_DATE']);
			if (parseInt(theForm.freedate.value) == 1)
				theForm.hdate.focus();
			else
				theForm.hdate1.focus();
			return (false);
		}
	}

	var num_adults = parseInt (theForm.adult.options[theForm.adult.selectedIndex].value);
	var num_youths = 0;
	var num_students = 0;
	var num_infants = 0;
	try {
		num_youths = parseInt (theForm.youth.options[theForm.youth.selectedIndex].value);
	} catch (e) {
		num_youths = 0;
	}
	try {
		num_students = parseInt (theForm.student.options[theForm.student.selectedIndex].value);
	} catch (e) {
		num_students = 0;
	}
	
	try {
		num_infants = parseInt (theForm.infant.options[theForm.infant.selectedIndex].value);
	} catch (e) {
		num_infants = 0;
	}
	
	if (num_adults == 0 && num_youths == 0 && num_students == 0) {
		alert (Msg['CHOOSE_PAX']);
		theForm.adult.focus();
		return (false);
	}
	else if (num_adults != 0 && (num_youths != 0 || num_students != 0)) {
		alert (Msg['INVALID_PAX_COMBINATION']);
		theForm.adult.focus();
		return (false);
	}
	else if (num_youths != 0 && num_students != 0) {
		alert (Msg['INVALID_YOUTH_STUDENT_COMBINATION']);
		theForm.student.focus();
		return (false);
	}
	else if ((num_adults + num_youths + num_students) < num_infants) {
		alert (Msg['TO_MANY_INFANTS']);
		theForm.infant.focus();
		return (false);
	}
	
	/*****************************************************************************
		Um Verwirrung durch Doppeltbenennung zu vermeiden wurden inital 
		fromt + destt für Openjaw mit oj_fromt + oj_destt benannt.
		Das Frontend erwartet aber fromt + destt.
	*****************************************************************************/
	
	if (flugart == "G") {//  Gabelflug
		setValue($('fromt'), $('oj_fromt').value);
		setValue($('destt'), $('oj_destt').value);
	}	
	
		
	try {$("pause").show();} catch(e){}

	return (true);
} // validator

/*****************************************************************************
	Diese Funktionen evt. als Klassenfunktionen, um eine bessere Zusammengehörigkeit zu erreichen
*****************************************************************************/

function isValidDestination (input) {
	var ret = true;
	
	if(input == '') {
		ret = false;
	}
	/* weitere checks ... */
	return (ret);
}


function check_datum (typ)
{
	var status, dat, jahr, tag, monat;

	if (typ == 1)
		str = new String(f.hdate.value);
	else
		str = new String(f.rdate.value);

	dat = extract_datum (str);

	jahr = parseInt (dat / 10000);
	tag = dat % 100;
	monat = parseInt ((dat-jahr*10000)/100.);

	status = 0;

	while (true)
	{
		if (dat <= 0)
		{
			alert (Msg['ENTER_VALID_DATE']);
			break;
		}

		if (typ == 1)
		{
			if (dat < parseInt(f.mindatum.value))
			{
				alert (Msg['EARLIEST_DEPDATE']+" "+formatDate(f.mindatum.value));
				break;
			}
			if (dat > parseInt(f.maxdatum.value))
			{
				alert (Msg['LATEST_DEPDATE']+" "+f.maxdatumt.value);
				break;
			}
		}
		status = 1;
		break;
	}

	if (status == 0) 
	{
		if (typ == 1) f.hdate.value = f.hdate_start.value;
		if (typ == 2) f.rdate.value = f.rdate_start.value;
	}	
	else
	{
		if (tag < 10) 
			datstr = "0"+tag;
		else
			datstr = tag;

		datstr += ".";

		if (monat < 10) 
			datstr += "0"+monat;
		else
			datstr += monat;
		datstr += ".";

		datstr += jahr;

		if (typ == 1) f.hdate.value = datstr;
		if (typ == 2) f.rdate.value = datstr;
	}

	if (typ == 1)
	{
		rdate = calc_datum_diff (jahr*10000+monat*100+tag, 7);
		jahr = parseInt (rdate / 10000);
		tag = parseInt(rdate % 100);
		monat = parseInt ((rdate-jahr*10000)/100.);

		if (tag < 10) 
			datstr = "0"+tag;
		else
			datstr = tag;

		datstr += ".";

		if (monat < 10) 
			datstr += "0"+monat;
		else
			datstr += monat;
		datstr += ".";

		datstr += jahr;

		f.rdate.value = datstr;
	}
	
	return (true);
}


function change_backdate (offset) {
	if (f.freedate.value == '1') {
		var d =  f.hdate.value;
		var iDate = d.substring(6,10) +  d.substring(3,5) + d.substring(0,2);
		var rd = calc_datum_diff(parseFloat(iDate), offset);
		f.rdate.value = formatDate(rd);
	}
	else { 
		htag = parseInt (parseFloat(document.startform.hdate1.value));
		hjahr = parseInt (document.startform.hdate2.value / 100.);
		hmonat = parseInt (document.startform.hdate2.value % 100.);		
		rdate = calc_datum_diff (hjahr*10000+hmonat*100+htag,offset);
	
		rtag = parseInt (rdate % 100);
		rmon = parseInt (rdate / 100.);
	
		document.startform.rdate1.selectedIndex =  rtag-1; 
		for (var i=0 ; i<document.startform.rdate2.length ; i++)
		{
			if (parseInt(parseFloat(document.startform.rdate2.options[i].value)) == rmon)
			{
				document.startform.rdate2.selectedIndex = i;
				break;
			}
		}
	}
	return (true);	
}

function change_fromt ()
{
	/* das klappt nicht, wenn man P2P nicht aktiviert hat -> changed sma 8.5.08 */
	//if (document.forms.startform.fromt[0].selectedIndex == document.forms.startform.fromt[0].length-1)
	var sel = document.forms.startform.fromt[0].selectedIndex;
	if (document.forms.startform.fromt[0].options[sel].value == 'other')
	{	
		anzeigen ("input_dropdown", 0);
		anzeigen ("input_texthin", 1);
		dropdown = 0;
		
		document.startform.fromt[0].value = "";
		document.startform.fromt[1].focus();
	}
}

function change_fromt_ojaw ()
{
	if (document.startform.rdestt.value == "") document.startform.rdestt.value = document.startform.fromt[2].value;
}
function change_rfromt_ojaw ()
{
	if (document.startform.rfromt.value == "") document.startform.rfromt.value = document.startform.destt[0].value;
}
	
function change_flugart ()
{
	var flugart = getCheckedValue(f.flugart);
	
	/* Gabelflug */
	if (flugart == "G")  {
		$("row_openjaw").show();
		$("row_returnflight").hide();
		toggle_return_row(true);
	}
	/* Oneway */
	else if (flugart == "O") 	{
		$("row_openjaw").hide();
		$("row_returnflight").show();
		toggle_return_row(false);
	}
	/* Normalflug */
	else  {
		$("row_openjaw").hide();
		$("row_returnflight").show();
		toggle_return_row(true);
	}
}

function calendar_toggler() {
 	
 	/*
 	new Timeframe('calendars', {
 		startField: 'hdate',
        endField: 'rdate',
        earliest: new Date(),
        maxRange: 1,
        resetButton: 'reset' }
      );
      */
}

function Kalender_hin()
{
	posleft = 250;
	postop = 150;

	href = document.startform.cal_url.value + "&mode=14&direction=1" + "&unique_id=" + document.startform.unique_id.value + "&hdate=" + document.startform.hdate.value + "&hdate1=" + document.startform.hdate1.value + "&hdate2=" + document.startform.hdate2.value + "&mindatum=" + document.startform.mindatum.value + "&maxdatum=" + document.startform.maxdatum.value;
	neu = open(href,"Kalender","innerWidth=160,width=175,height=170,menubar=no,resizable=no,scrollbars=no,left=" + posleft + ",top=" + postop);
}

function Kalender_rueck()
{
	posleft = 250;
	postop = 150;

	href = document.startform.cal_url.value + "&mode=14&direction=2" + "&unique_id=" + document.startform.unique_id.value + "&rdate=" + document.startform.rdate.value + "&rdate1=" + document.startform.rdate1.value + "&rdate2=" + document.startform.rdate2.value + "&mindatum=" + document.startform.mindatum.value + "&maxdatum=" + document.startform.maxdatum.value;
	neu = open(href,"Kalender","innerWidth=160,width=175,height=170,menubar=no,resizable=no,scrollbars=no,left=" + posleft + ",top=" + postop);
}	

function RegionOeffnen(typ, dd) 
{
// wenn ein Dropdown beim Abflugsort besteht, dann muss dieses gegen ein Inputfeld getauscht werden	
	var dropdown = 0;
	if (typ == 5 && dropdown == 1)
	{
		$("input_dropdown").hide();
		$("input_texthin").show();
		dropdown = 0;
	
		document.startform.fromt[0].length = 0;
		document.startform.fromt[0].value = "";
		document.startform.fromt[1].focus();
	}
	href = document.startform.cal_url.value + "&mode=10" + "&unique_id=" + document.startform.unique_id.value + "&direction=" + String(typ);
	neu = open (href,"RegionFenster","width=900,height=500,resizable=1,toolbar=0,scrolling=yes,scrollbars=1,location=0");
} 




/*****************************************************************************
	Ermittelt den Index einer dropdown-option, die mit <val> übereinstimmt.
	Optional kann ein Suchstring mitgegeben werden. 
	Dann wird mit dem Substring NACH diesem Suchstring verglichen.
	Bei Bedarf erweitern. 
	
	Bsp. Dropdown <dp> enthält den value "München /MUC" 
		-> getIndexByValue(dp, 'MUC', '/') liefert den Index
*****************************************************************************/
function getIndexByValue(dropdown, val, substringafter) {
	if (dropdown) {
		var substr = substringafter || ""; 
		var r = 0;
		for (var i = 0; i < dropdown.length; i++) {
			var pos;
			if(substr.length > 0) {
				pos = dropdown.options[i].value.search(substr);
				str = dropdown.options[i].value.substr(pos+1);
			}
			else {
				str = dropdown.options[i].value
			}
			if (str == val) {
				r = i;
				break;
			}
		}
	}
	return (r);
}


//Adding a local cache to Ajax.Autocompleter

function init_ac(request, result) {
	var url = "http://" + host + ".onlinetravel.ch/flightx-engine/?mode=23";
	// url += "&unique_id=";
	// url += document.forms['startform'].unique_id.value;
	url += "&agentc=";
	url += document.forms['startform'].agentc.value;
	url += "&language=";
	url += document.forms['startform'].language.value;
	//url += "&date=" + d; // prevent IE from caching

	// $('trace_info').innerHTML = url;
	new Ajax.Autocompleter(request, result, url,  /*airportres.html*/
		{	
			paramName: "s", 
			minChars: 2,
			frequency: 0.5,			//indicator: "indicator1",
			method: 'GET',
			//onFailure: reportFailure,
			//onSuccess: reportComplete,
			onException: reportError,
			onError:  reportError
		}
	);
}

function reportComplete(request)
{
	alert('year.');
}


function reportFailure(request)
{
	alert('Sorry. There was an Failure.');
}

function reportError(request)
{
	//alert('Sorry. There was an error.');
}
function oc_airport() {
	alert('.');

}





function theTest(str)
{
	return(str);	
}
/*
	
*/
function change_airport(opt, fieldname, airport_number, label) {
	
	if(opt.value == 'other') {
		if ($('destt').type == 'text') { // nehmen wir als Template
			var id = 'td_' + fieldname;
			var node = $(id);
			node.innerHTML = $('td_destt').innerHTML; 
			
			var inp = node.getElementsByTagName("input")[0];
			var inp1;
			try { // IE
				inp1 = document.createElement('<input type="text" name="' + fieldname +'"/>');
			}
			catch (e) {
				inp1 = document.createElement('input');
				inp1.name = fieldname;
				inp1.type = 'text';
				
			}
			inp1.id = fieldname;
			node.replaceChild(inp1, inp);
			
			var div = node.getElementsByTagName("div")[0];
			div.setAttribute("id", "result_" + fieldname);
			
			var script  = node.getElementsByTagName("script")[0];
			node.removeChild(script);
								
			var anker  = node.getElementsByTagName("a")[0];
			var oc = 'RegionOeffnen(' + airport_number +'); return (false);';
			anker.setAttribute("onclick", oc);
			anker.setAttribute("href","_self");
			
			$(id).className  = 'inpt_a';
			$(id).innerHTML = label + node.innerHTML; // IE Hack
			var result_div = 'result_' + fieldname;
			init_ac(fieldname, result_div);
		}
		
		/* Default Zuweisung */		
		else {
			var id = 'td_' + fieldname;
			
			var str = '';
			html = str.concat('<input type="text" name="', fieldname, '" id="', fieldname, '"/>'); 
			html +=  '<div class="autocomplete" style="display:none; position:absolute;" id="' +result_div +'"/>'; 
			$(id).innerHTML = html;
			$(id).className = 'inpt_a';
			init_ac(fieldname, result_div);
		}
	}
	return;
}


function set_tabIndexes() {
	var i = 0; 
	/* control array definieren in der Reihenfolge wie die tabIndexe gesetzt werden sollen */
	var ctrl = new Array();
	ctrl[0] = f.fromt;
	ctrl[1] = f.destt;
	ctrl[2] = f.hdate;
	ctrl[3] = f.rdate;
	ctrl[4] = $('search');
	
	while (i < ctrl.length) {
		ctrl[i].tabIndex = i + 1;
//		alert(ctrl[i].name + "=" + ctrl[i].tabIndex); 
		i++;
	}
	ctrl[0].focus();
	return;
}


function init_validator(theForm, cc_checkfunction, error_border_style) {
	Cfg.airport_fields = [{field: 'fromt', type: 'text', msg: Msg['ENTER_MANDITORY_FIELDS'], borderstyle: null}];
	Cfg.airport_fields.push({field: 'destt', type: 'text', msg: Msg['ENTER_MANDITORY_FIELDS']});
	
	Cfg.airport_oj_fields = [{field: 'oj_fromt', type: 'text', msg: Msg['ENTER_MANDITORY_FIELDS'], borderstyle: null}];
	Cfg.airport_oj_fields.push({field: 'oj_destt', type: 'text', msg: Msg['ENTER_MANDITORY_FIELDS']});
	Cfg.airport_oj_fields.push({field: 'rfromt', type: 'text', msg: Msg['ENTER_MANDITORY_FIELDS']});
	Cfg.airport_oj_fields.push({field: 'rdestt', type: 'text', msg: Msg['ENTER_MANDITORY_FIELDS']});
	
	validator = new Validator(theForm, cc_checkfunction, error_border_style);
	validator.get_org_styles(Cfg.airport_fields);
	validator.get_org_styles(Cfg.airport_oj_fields);

	return;
}


/* requires prototype */
function get_earliest_depdate () {
		var d = Date().split(':');
		var agentc = document.forms['startform'].agentc.value;
		var language = document.forms['startform'].language.value;
		var url = "http://" + host + ".onlinetravel.ch/flightx-engine/?mode=24&agentc=" + agentc + "&language=" + language + "&program=flightmore" + "&d=" +d;
		var startdate = null;
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get',
				asynchronous: false,
				onException: reportError,
				onError:  reportError,
				onComplete: function (response) {
					var doc = response.responseXML;
					startdate = doc.getElementsByTagName("startdate")[0].firstChild.data;
				}
			});
	return startdate;
}

function set_startdate(startdate, is_freedate) {
	if(is_freedate == '1') {
		if (parseInt(startdate) > parseInt(f.hdate.value)) {
			f.hdate.value = formatDate(startdate);
		}
	}
	else {
		try {
			if (parseInt(startdate) > parseInt(f.hdate2.value + f.hdate1.value)) {
				f.hdate1.selectedIndex = getIndexByValue($('hdate1'),  parseInt(parseFloat(startdate.substring(6,8))));
				f.hdate2.selectedIndex = getIndexByValue($('hdate2'),  startdate.substring(0,6));
			}
		}
		catch (e) {
			;
		}
	}
}


/* vorerst minimal Version, bei Bedarf erweitern 
	- <date> im Format  yyyymmdd
	- returns dd.mm.yyyy

*/
function formatDate(date) {
	strDate = String(date); // sicher ist sicher
	return strDate.substring(6,8) + '.' + strDate.substring(4,6) + '.' + strDate.substring(0,4);

}

function change_dob_display () {
	if($("gb1") != null) {
		ad = parseInt(f.adult.value);
		yo = parseInt(f.youth.value);
		sd = parseInt(f.student.value);
	
		$("gb1").hide();
		$("gb2").hide();
		$("gb3").hide();
		$("gb4").hide();
		
		for (i=0 ; i<yo+sd ; i++)		
		{
			index = "gb"+String(i+1);
			$(index).show();
		}
	}
}

function toggle_return_row(switch_on) {
	if(ie || ie6) {
		if(switch_on) {
			Form.Element.enable('row_return_date');
		}
		else {
			Form.Element.disable('row_return_date');
		}
	}
	else {
		/* disable row klappt bei ff nicht */
		if(switch_on) {
			if(f.freedate.value == '0') {
				$('rdate1').enable();
				$('rdate2').enable();
			}
			else if(f.freedate.value == '1') {
				$('rdate').enable();
			}
		}
		else {
			if(f.freedate.value == '0') {
				$('rdate1').disable();
				$('rdate2').disable();
			}
			else if(f.freedate.value == '1') {
				$('rdate').disable();
			}
		}
	}
	return;
}