// Set up datepicker for "traveldate"(s)
var today = new Date(); today.setHours(0,0,0,0);
var nextyear = new Date(today.getFullYear()+1, today.getMonth(), today.getDate());
document['date1_default'] = new Date(today.getFullYear(), today.getMonth(), today.getDate()+7);
document['date2_default'] = new Date(today.getFullYear(), today.getMonth(), today.getDate()+14);
document['date1_min'] = document['date1_max'] = document['date2_min'] = document['date2_max'] = today;
document['date1_list'] = document['date2_list'] = function (d) { return true }; // functions will be dynamically replaced
$(function() {
	$('#show_B_DATE_1').datepicker({
		dateFormat: 'dd/mm/yy', changeMonth: true, changeYear: true, showButtonPanel: true, mandatory: true, firstDay: 1, speed: "fast",
		showMonthYear: true,
		minDate: document['date1_min'], maxDate: document['date1_max'],
		selectableDates: function (d) { return document['date1_list'](d) }
	});
	$('#show_B_DATE_2').datepicker({
		dateFormat: 'dd/mm/yy',changeMonth: true, changeYear: true, showButtonPanel: true, mandatory: true, firstDay: 1, speed: "fast",
		showMonthYear: true,
		minDate: document['date2_min'], maxDate: document['date2_max'],
		selectableDates: function(d) { return document['date2_list'](d) }
	});
});

function set_departure() {
	var dept_o = document.getElementById('departure');
	if(!dept_o) return;
	var selected_value = get_selected_value(dept_o);
	var sel_re = new RegExp("^"+selected_value+"-");
	var dir_o = document.getElementById("direct");
	var only_dir = (dir_o && dir_o.checked) ? 1 : 0;
	var opts = [];
	for ( var i in routes ) {
		var r = routes[i];
		if (! r.route.match(sel_re)) continue;
		if (only_dir && r.via && r.via.length>0) continue;

		var rref = [ airports[r.airport].slice(0) ];
		//rref.push(" via ", ["Test1","Test2"]);
		if (r.via.length>0) rref.push(" via ");
		for ( var j in r.via ) rref.push( airports[ r.via[j] ].slice(0), ", ");
		var todo = [ rref ];
		while ( todo.length ) {
			var tod = todo.shift();
			if ( typeof(tod) == "string" ) {
				// console.log("Add opts: ", r.route, " ==> ", tod);
				//opts.push(r.route, tod);
				opts.push([r.route, tod]);
				continue;
			}
			var o1 = tod.shift()
			if ( typeof(o1) == "object" ) {
				for (var o in o1) {
					var newtodo = tod.slice(0);
					newtodo.unshift(o1[o]);
					todo.push(newtodo);
				}
				continue;
			}
			if ( tod.length == 0 ) {
				todo.push(o1);
				continue;
			}
			var o2 = tod.shift()
			if ( typeof(o2) == "object" ) {
				for (var o in o2) {
					var newtodo = tod.slice(0);
					newtodo.unshift(o1, o2[o]);
					todo.push(newtodo);
				}
				continue;
			}
			var newtodo = tod.slice(0);
			newtodo.unshift(""+o1+o2);
			todo.push(newtodo);
		}
	}
	opts.sort(function(a,b){
		if ( a[1] < b[1] ) return -1;
		if ( a[1] > b[1] ) return +1;
		return 0;
	});

	var arrival_opts = [];
	for ( var i in opts ) arrival_opts.push( opts[i][0], opts[i][1] );
	set_options('arrival', arrival_opts );
}

function set_options(option_name,list) {

	var option_o = document.getElementById(option_name);
	if ( ! option_o ) alert("Cannot find '"+option_name+"'");

	var selected_value = get_selected_value(option_o);
	var selected_text  = get_selected_text(option_o);

	while(child = option_o.firstChild) option_o.removeChild(child);

	if (list && list.length) {
		for (var i = 0; i < list.length; i += 2) {
			add_option( option_o, list[ i+1 ], list[ i ], selected_value );
		}
	} else {
		add_option( option_o, '---', '');
	}

	var new_selected_value = get_selected_value(option_o);
	var new_selected_text  = get_selected_text(option_o);

	if ( selected_value && selected_value != new_selected_value ) {
		//alert("<lang id="Bemærk automatisk skift af destination">\n"+
		//    "<lang id="Fra">: "+selected_text+"\n"+
		//    "<lang id="Til">: "+new_selected_text+"\n");
	}
}

function add_option(option_o,txt,val,selected_value) {
	var option = document.createElement("OPTION");
	option.appendChild(document.createTextNode(txt));
	option.setAttribute("value",val);
	if ( val == selected_value ) { option.selected = 1 }
	option_o.appendChild( option );
}

function get_selected_value(option_o) {
	var idx = option_o.selectedIndex;
	if ( idx < 0 ) return "";
	return option_o.options[idx].value;
}

function get_selected_text(option_o) {
	var idx = option_o.selectedIndex;
	if ( idx < 0 ) return "";
	return option_o.options[idx].text;
}

function setType(skip_jq) {
	var way1_o = document.getElementById("ticketoneway");
	var way2_o = document.getElementById("ticketreturn");
	var ret1_o = document.getElementById("return1");
	var ret2_o = document.getElementById("return2");
	if(way1_o && way1_o.checked) {
		if (ret1_o) ret1_o.style.display = "none";
		if (ret2_o) ret2_o.style.display = "none";
	} else {
		if (ret1_o) ret1_o.style.display = "block";
		if (ret2_o) ret2_o.style.display = "block";
		if (way2_o) way2_o.checked = true;
	}
	set_dest(skip_jq);
}

function get_route_info() {
	var arr_o = document.getElementById('arrival');
	if(!arr_o) return;
	var rt = get_selected_value(arr_o);
	if(!rt) return;
	return routes[rt];
}

var prev_rt;
var prev_dir;
function set_dest(skip_jq) {
	var bf = document.forms.bookingform;
	var route = get_route_info();
	if (bf && route) {
		bf.E_LOCATION_1.value = route.airport;
		if (route.site_ff_show) bf.SO_SITE_FF_SHOW_LIST.value = route.site_ff_show+","+route.site_ff_show+","+route.site_ff_show+","+route.site_ff_show+","+route.site_ff_show;
	}

	if ( ! skip_jq ) {
		var arr_o = document.getElementById('arrival');
		var rt = arr_o ? get_selected_value(arr_o) : null;
		var dir_o = document.getElementById("direct");
		var only_dir = (dir_o && dir_o.checked) ? 1 : 0;
		if( rt && ! ( rt == prev_rt && prev_dir == only_dir ) ) {
			jQuery.getScript("/?view=dates&rt="+rt+"&direct="+only_dir) // optionally add parameter function to call after load and run
			prev_rt = rt;
			prev_dir = only_dir;
		}
	}

	set_flight2();
	set_fee();
}

function set_fee() {
	var travellers = 0;
	var adults_o    = document.getElementById("adults");
	var children_o  = document.getElementById("children");
	if (adults_o)   travellers += parseInt(get_selected_value(adults_o),10);
	if (children_o) travellers += parseInt(get_selected_value(children_o),10);
	if (travellers<1) travellers=1;

	var bf = document.forms.bookingform;
	if (!bf) return;
	var route = get_route_info();
	if (!route) return;

	var segments = route.via.length + 1;
	var two_o    = document.getElementById('ticketreturn');
	var twoway   = (two_o && two_o.checked) ? 2 : 1;
	var corp_o   = document.getElementById('corp');
	var corp     = (corp_o) ? corp_o.value : null;
	var nofee_o  = document.getElementById('no:fee:calc');
	var fee = (corp && nofee_o && nofee_o.value) ? 0 : (route.fee * twoway);
	var cpid_o    = document.getElementById('CONTACTPERSONID');
	var name      = cpid_o && cpid_o.value;

	if ( corp ) {
		var cln_fields = [
			"SO_SITE_PROFILE_MAINTENANCE", "SO_SITE_DISP_CATEGORY_PAGE",
			"SO_SITE_PROF_STATUS_SEARCH", "SO_SITE_PROF_STATUS_SEARCH",
			"SO_SITE_ALLOW_PDEL_CAT", "SO_SITE_ALLOW_PPAY_CAT",
			"SO_SITE_ALLOW_PFTRC_CAT", "SO_SITE_ALLOW_PPREF_CAT",
			"SO_SITE_SHOW_MENU"
		];
		for (var i in cln_fields) {
			var inp=bf[cln_fields[i]];
			if (inp) inp.removeAttribute('name'); // Data only sent if name
		}
	}

	//console.log("Processing login/nologin arguments");
	$( corp ? "input[name$=':login']" : "input[name$=':nologin']", bf).each(function(i,e){
		//console.log("Processing rename argument from", e);
		var newname = e.getAttribute('name').replace(/:(no)?login$/,"");
		var old = bf[newname];
		//if ( old ) console.log("Remove old ", old);
		if ( old ) old.removeAttribute('name');
		e.setAttribute('name', newname);
		//console.log("Processing rename argument to", e);
	});
	$( corp ? "input[name$=':nologin']" : "input[name$=':login']", bf).each(function(i,e){
		e.removeAttribute('name');
		//console.log("Processing clean argument", e);
	});

	var dk        = (bf.LANGUAGE && bf.LANGUAGE.value=="DK") ? 1 : 0;
	var se        = (bf.LANGUAGE && bf.LANGUAGE.value=="SE") ? 1 : 0;
	var dom       = (bf.LANGUAGE && bf.LANGUAGE.value.match(/^(DK|SE)$/)) ? bf.LANGUAGE.value : "COM";
	var ruleurl   = 'https://www.cimber.dk/public/dokumenter/'+
			(dk ? 'billetregler' : se ? 'biljetregler' : 'farerules');

	if ( bf.SO_GL ) {
		var so_gl_service_fee =
		'<GLOBAL_LIST><NAME>SITE_SERVICE_FEE</NAME>' +
			'<LIST_ELEMENT><CODE>0</CODE>' +
				'<LIST_VALUE>0</LIST_VALUE>' + // (0=FEE PR.PASSENGER, 1=PR.PNR, 2=PASSENGERS*SEGMENTS)
				'<LIST_VALUE>2</LIST_VALUE>' + // (0=RM, 1=YRTAX, 2=DU TAX)
				'<LIST_VALUE>' + fee + '</LIST_VALUE>' +
				'<LIST_VALUE>' + 'DKK' + '</LIST_VALUE>' +
				'<LIST_VALUE>0</LIST_VALUE>' +
				'<LIST_VALUE>DU</LIST_VALUE>' +
			'</LIST_ELEMENT>' +
		'</GLOBAL_LIST>';

		// Default SO_GL if empty - but hidden input still required in parameter list for this to work
		if (!bf.SO_GL.value) bf.SO_GL.value =
		'<?xml version="1.0" encoding="iso-8859-1"?><SO_GL>' + so_gl_service_fee +
		'<GLOBAL_LIST mode="complete"><NAME>SO_SINGLE_MULTIPLE_COMMAND_BUILDER</NAME>' +
			'<LIST_ELEMENT><CODE>1</CODE><LIST_VALUE><![CDATA[RM QI WEB BOOKING '+dom+']]></LIST_VALUE><LIST_VALUE>S</LIST_VALUE></LIST_ELEMENT>' +
			'<LIST_ELEMENT><CODE>1</CODE><LIST_VALUE><![CDATA[FP NONREF]]></LIST_VALUE><LIST_VALUE> </LIST_VALUE></LIST_ELEMENT>' +
			'<LIST_ELEMENT><CODE>1</CODE><LIST_VALUE><![CDATA[RM *SA ecomm]]></LIST_VALUE><LIST_VALUE>S</LIST_VALUE></LIST_ELEMENT>' +
			'<LIST_ELEMENT><CODE>1</CODE><LIST_VALUE><![CDATA[RM *K xxxxx]]></LIST_VALUE><LIST_VALUE></LIST_VALUE></LIST_ELEMENT>' +
			'<LIST_ELEMENT><CODE>1</CODE><LIST_VALUE><![CDATA[RM *RT IB]]></LIST_VALUE><LIST_VALUE></LIST_VALUE></LIST_ELEMENT>' +
			'<LIST_ELEMENT><CODE>1</CODE><LIST_VALUE><![CDATA[RM *FAK]]></LIST_VALUE><LIST_VALUE></LIST_VALUE></LIST_ELEMENT>' +
			'<LIST_ELEMENT><CODE>1</CODE><LIST_VALUE><![CDATA[RM *A xxxxx]]></LIST_VALUE><LIST_VALUE></LIST_VALUE></LIST_ELEMENT>' +
		'</GLOBAL_LIST>' +

		'<GLOBAL_LIST mode="partial">'+
			'<NAME>SITE_CREDIT_CARD</NAME>'+
			'<LIST_ELEMENT>'+
				'<CODE>VI</CODE>'+
				'<LIST_VALUE>VISA</LIST_VALUE>'+
				'<LIST_VALUE>P</LIST_VALUE>'+
				'<LIST_VALUE>CC%T%I/%E/%C%F/N%A</LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>VI</LIST_VALUE>'+
				'<LIST_VALUE>0</LIST_VALUE>'+
				'<LIST_VALUE>Y</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>CA</CODE>'+
				'<LIST_VALUE>MASTERCARD</LIST_VALUE>'+
				'<LIST_VALUE>P</LIST_VALUE>'+
				'<LIST_VALUE>CC%T%I/%E/%C%F/N%A</LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>CA</LIST_VALUE>'+
				'<LIST_VALUE>0</LIST_VALUE>'+
				'<LIST_VALUE>Y</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>JC</CODE>'+
				'<LIST_VALUE>JCB</LIST_VALUE>'+
				'<LIST_VALUE>P</LIST_VALUE>'+
				'<LIST_VALUE>CC%T%I/%E/%C%F/N%A</LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>JC</LIST_VALUE>'+
				'<LIST_VALUE>0</LIST_VALUE>'+
				'<LIST_VALUE>Y</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>DC</CODE>'+
				'<LIST_VALUE>Diners Club</LIST_VALUE>'+
				'<LIST_VALUE>P</LIST_VALUE>'+
				'<LIST_VALUE>CC%T%I/%E/%C%F/N%A</LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>DC</LIST_VALUE>'+
				'<LIST_VALUE>0</LIST_VALUE>'+
				'<LIST_VALUE>Y</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>AX</CODE>'+
				'<LIST_VALUE>American Express</LIST_VALUE>'+
				'<LIST_VALUE>P</LIST_VALUE>'+
				'<LIST_VALUE>CC%T%I/%E/%C%F/N%A</LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>AX</LIST_VALUE>'+
				'<LIST_VALUE>0</LIST_VALUE>'+
				'<LIST_VALUE>Y</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>DK</CODE>'+
				'<LIST_VALUE>Dankort</LIST_VALUE>'+
				'<LIST_VALUE>P</LIST_VALUE>'+
				'<LIST_VALUE>CC%T%I/%E/N%A</LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>DK</LIST_VALUE>'+
				'<LIST_VALUE>0</LIST_VALUE>'+
				'<LIST_VALUE>Y</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
		'</GLOBAL_LIST>'+
		'<GLOBAL_LIST mode="partial">'+
			'<NAME>SL_FARE_FAMILY_CONDITIONS</NAME>'+
			'<LIST_ELEMENT>'+
				'<CODE>QISAVERDOM</CODE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>'+ruleurl+'_saverflex.htm</LIST_VALUE>'+
				'<LIST_VALUE>'+(dk?'Ændring muligt før udrejse mod betaling. Refundering ikke muligt.':se?'Kan ändras innan utresa mot en avgift. Kan ej avbokas.':'Changes permitted before departure at a fee. Refunds not permitted.')+'</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>QISAVERINT</CODE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>'+ruleurl+'_saverflex.htm</LIST_VALUE>'+
				'<LIST_VALUE>'+(dk?'Ændring muligt før udrejse mod betaling. Refundering ikke muligt.':se?'Kan ändras innan utresa mot en avgift. Kan ej avbokas.':'Changes permitted before departure at a fee. Refunds not permitted.')+'</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>QISEMIDOM</CODE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>'+ruleurl+'_flex.htm</LIST_VALUE>'+
				'<LIST_VALUE>'+(dk?'Ændring og refundering muligt før udrejse mod betaling. Ændring muligt efter udrejse mod betaling.':se?'Kan ändras innan utresa utan kostnad. Kan avbokas innan utresa mot en avgift. Kan ändras efter utresa mot en avgift.':'Changes permitted before and after departure at a fee. Refunds permitted before departure at a fee.')+'</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>QISEMIINT</CODE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>'+ruleurl+'_flex.htm</LIST_VALUE>'+
				'<LIST_VALUE>'+(dk?'Ændring og refundering muligt før udrejse mod betaling. Ændring muligt efter udrejse mod betaling.':se?'Kan ändras innan utresa utan kostnad. Kan avbokas innan utresa mot en avgift. Kan ändras efter utresa mot en avgift.':'Changes permitted permitted before and after departure at a fee. Refunds permitted before departure at a fee.')+'</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>QIFLEXDOM</CODE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>'+ruleurl+'_fullflex.htm</LIST_VALUE>'+
				'<LIST_VALUE>'+(dk?'Ændring og refundering gratis før og efter udrejse.':se?'Kan ändras och avbokas innan og efter utresa utan kostnad.':'Changes and refunds permitted free of charge.')+'</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>QIFLEXINT</CODE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>'+ruleurl+'_fullflex.htm</LIST_VALUE>'+
				'<LIST_VALUE>'+(dk?'Ændring og refundering gratis før og efter udrejse.':se?'Kan ändras och avbokas innan og efter utresa utan kostnad.':'Changes and refunds permitted free of charge.')+'</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
			'<LIST_ELEMENT>'+
				'<CODE>QIFLEXTC</CODE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE></LIST_VALUE>'+
				'<LIST_VALUE>'+ruleurl+'_tc.htm</LIST_VALUE>'+
				'<LIST_VALUE>'+(dk?'Ændring og refundering gratis før og efter udrejse.':se?'Kan ändras och avbokas innan og efter utresa utan kostnad.':'Changes and refunds permitted free of charge before and after departure.')+'</LIST_VALUE>'+
			'</LIST_ELEMENT>'+
		'</GLOBAL_LIST>'+
		'</SO_GL>';

		//bf.SO_GL.value = bf.SO_GL.value.replace(/[\r\n]/g, '');
		bf.SO_GL.value = bf.SO_GL.value.replace(/<GLOBAL_LIST>\s*<NAME>SITE_SERVICE_FEE<[^\0]*?GLOBAL_LIST>/ig, so_gl_service_fee);

		if ( corp ) bf.SO_GL.value = bf.SO_GL.value.replace(/\bRM \*K \w*/, 'RM *K '+corp);
		if ( name ) {
			bf.SO_GL.value = bf.SO_GL.value.replace(/\bRM \*A \w*/i, 'RM *A '+name);
		} else {
			bf.SO_GL.value = bf.SO_GL.value.replace(/<LIST_ELEMENT>\s*<CODE>1<\/CODE>\s*<LIST_VALUE>\s*<!\[CDATA\[RM \*A \w*\]\]><\/LIST_VALUE>\s*<LIST_VALUE>\s*<\/LIST_VALUE>\s*<\/LIST_ELEMENT>/, '');
		}

		//alert("Fee: "+fee+"\nSO_GL:\n"+bf.SO_GL.value);
		//console.log("SO_GL\n"+bf.SO_GL.value);
	}

	if ( bf.PRICING_TYPE ) bf.PRICING_TYPE.value = route.pricing_type || "O";
	if ( bf.SO_SITE_POINT_OF_SALE ) bf.SO_SITE_POINT_OF_SALE.value = route.point_of_sale || "CPH";
	if ( bf.SO_SITE_USER_CURRENCY_CODE ) bf.SO_SITE_USER_CURRENCY_CODE.value = route.currency || "EUR";
	if ( bf.SO_SITE_IS_INSURANCE_ENABLED ) bf.SO_SITE_IS_INSURANCE_ENABLED.value = route.insurance || "FALSE";
}

function set_flight2() {
	var bf = document.forms.bookingform;
	if (!bf) return;
	if(document.getElementById("ticketoneway").checked) {
		bf.B_LOCATION_2.value = "";
		bf.E_LOCATION_2.value = "";
		bf.B_DATE_2.value = "";
		if ( bf.E_DATE ) bf.E_DATE.value="";
	} else {
		bf.B_LOCATION_2.value = bf.E_LOCATION_1.value;
		bf.E_LOCATION_2.value = bf.B_LOCATION_1.value;
	}
}

function set_persons(upd_sel) {

	var form_o      = document.forms.bookingform;

	var adults_o    = document.getElementById("adults");
	var children_o  = document.getElementById("children");
	var infants_o   = document.getElementById("infants");

	var adults   = 0;
	var children = 0;
	var infants  = 0;

	adults   = adults_o ? parseInt(get_selected_value(adults_o),10) : 1;
	if (children_o) children = parseInt(get_selected_value(children_o),10);
	if (infants_o)  infants  = parseInt(get_selected_value(infants_o),10);

	for(var i = 1; i <= 19; i++){
		form_o["TRAVELLER_TYPE_"+i].value =
			( i<=adults )  ? 'ADT' :
			( i<=adults+children )  ? 'CHD' :
					 '';
	}

	for(var i = 1; i <= 10; i++){
		form_o["HAS_INFANT_"+i].value = (infants>=i && adults>=i) ? 'TRUE' : 'FALSE';
	}

	if ( (upd_sel < 1) || (upd_sel == 2) ) {
		var adults_options = new Array();
		for(var i = 1; i <= 9-children; i++){
			adults_options.push(i,i);
		}
		if (adults_o) set_options('adults',adults_options);
	}

	if (upd_sel < 2) {
		var children_options = new Array(0,0);
		for(var i = 1; i <= 9-adults; i++){
			children_options.push(i,i);
		}
		if (children_o) set_options('children',children_options);
	}

	if (upd_sel < 3) {
		var infant_options = new Array(0,0);
		for(var i = 1; i <= adults; i++){
			infant_options.push(i,i);
		}
		if (infants_o) set_options('infants',infant_options);
	}

	set_fee();
}

function set_date(field_chg) {
	var form_o      = document.forms.bookingform;
	for(var i = 1; i <= 2; i++){
		var field = "B_DATE_"+i;
		var o = document.getElementById("show_"+field);
		var v = (o) ? o.value : ""; // dd/mm/yyyy
		var dt = v && new Date( parseInt(v.substr(6,4),10), parseInt(v.substr(3,2),10)-1, parseInt(v.substr(0,2),10) );
		if (dt && field_chg && field_chg==i) document["date"+i+"_default"]=dt;
		var def = document["date"+i+"_default"];
		var min = document["date"+i+"_min"]; if ( !( min && min >= today ) ) min=today;
		var max = document["date"+i+"_max"]; if ( !( max && max <= nextyear ) ) max=nextyear;
		if (def<min) def=new Date(min.getFullYear(), min.getMonth(), min.getDate() + (i==1 ? 0 : 7));
		if (!(dt && dt>=min && dt<=max)) dt = def;
		if (!(dt && dt>=min && dt<=max)) dt = today;
		if (field_chg && field_chg==1 && i==2) {
			var o1 = document.getElementById("show_B_DATE_1");
			var v1 = (o1) ? o1.value : ""; // dd/mm/yyyy
			var dt1 = v1 && new Date( parseInt(v1.substr(6,4),10), parseInt(v1.substr(3,2),10)-1, parseInt(v1.substr(0,2),10) );
			if ( dt1 > dt ) dt = new Date(dt1.getFullYear(), dt1.getMonth(), dt1.getDate()+7);
		}
		if (!(dt && dt>=min)) dt = min;
		if (!(dt && dt<=max)) dt = max;
		var y = dt.getFullYear()+"";
		var m = dt.getMonth()+1; m = (m<10 ? "0" : "")+m;
		var d = dt.getDate();    d = (d<10 ? "0" : "")+d;
		if (form_o) form_o[field].value = y+m+d+"0000"; // yyyymmddHHMM;
		o.value = d+"/"+m+"/"+y;
	}

	// Range check - Make sure date1 <= date2
	if ( form_o.B_DATE_1.value > form_o.B_DATE_2.value ) {
		var src2dst1 = 0;
		if (field_chg && field_chg==2) src2dst1=1;
		var src = (src2dst1) ? "B_DATE_2" : "B_DATE_1";
		var dst = (src2dst1) ? "B_DATE_1" : "B_DATE_2";
		var src_o = document.getElementById( "show_"+src );
		var dst_o = document.getElementById( "show_"+dst );
		dst_o.value = src_o.value;
		form_o[dst].value = form_o[src].value;
	}
}

function set_flexibility() {
	var bf = document.forms.bookingform;
	var flex_o = document.getElementById("flexible");
	if (!(bf && flex_o)) return;
	if(flex_o.checked) {
		bf.DATE_RANGE_VALUE_1.value = "7";
		bf.DATE_RANGE_VALUE_2.value = "7";
	} else {
		bf.DATE_RANGE_VALUE_1.value = "0";
		bf.DATE_RANGE_VALUE_2.value = "0";
	}
}

function set_direct(skip_jq) {
	var bf = document.forms.bookingform;
	var dir_o = document.getElementById("direct");
	if (!(bf && dir_o)) return;
	bf.DIRECT_NON_STOP.value = (dir_o.checked) ? "TRUE" : "FALSE";
	set_departure();
	set_dest(skip_jq);
}

function check_bookingform(f) {
	var bf = document.forms.bookingform;
	if(!bf) return;
	var pausefish = document.getElementById("pausefish");

	var ok = true;

	if ( 0 ) ok = false;

	if (!ok) {
		if (pausefish) pausefish.style.display = "none"; // Clear the please wait message, if one present
		return ok;
	}

	// Save cookie to reset values on return within a short time
	var name = "flight";

	var oneway_o	= document.getElementById("ticketoneway");
	var adults_o    = document.getElementById("adults");
	var children_o  = document.getElementById("children");
	var infants_o   = document.getElementById("infants");
	var depart_o    = bf.B_LOCATION_1;
	var arrival_o   = document.getElementById("arrival");
	var flexible_o  = document.getElementById("flexible");
	var date1_o     = document.getElementById("show_B_DATE_1");
	var date2_o     = document.getElementById("show_B_DATE_2");
	var direct_o    = document.getElementById("direct");

	var oneway   = (oneway_o && oneway_o.checked) ? "O" : "R";
	var adults   = adults_o   ? parseInt(get_selected_value(adults_o),10) : 1;
	var children = children_o ? parseInt(get_selected_value(children_o),10) : 0;
	var infants  = infants_o  ? parseInt(get_selected_value(infants_o),10) : 0;
	var depart   = depart_o   ? depart_o.value : "";
	var arrival  = arrival_o  ? arrival_o.value : "";
	var flexible = (flexible_o && flexible_o.checked) ? "F" : "U";
	var date1    = date1_o    ? date1_o.value : "";
	var date2    = date2_o    ? date2_o.value : "";
	var direct   = (direct_o && direct_o.checked) ? "D" : "I";

	var value = new Array( oneway, depart, arrival, adults, children, infants, flexible, date1, date2, direct ).join(',');

	var exp = new Date();
	exp.setTime(exp.getTime()+3600*1000);
	document.cookie = name+"="+escape(value) + "; path=/; domain="+document.domain + "; expires="+exp.toGMTString();

	// Set page unload function to clear Please wait message
	if (pausefish) window.onunload = function () { pausefish.style.display = "none"; window.onunload=null; };
	return ok;
}

function check_fartplanform(f) {
	var check = true;

	var bf = document.forms.bookingform;
	if(!bf) return;

	bf.B_LOCATION.value = bf.B_LOCATION_1.value;
	bf.E_LOCATION.value = bf.E_LOCATION_1.value;
	if ( bf.B_DATE ) bf.B_DATE.value = bf.B_DATE_1.value;
	if ( bf.E_DATE ) bf.E_DATE.value = bf.B_DATE_2.value;
	if (check == true) {
		var pictureblock = document.getElementById("picture");
		if (pictureblock) pictureblock.style.display = "none";
		var textblock = document.getElementById("txt");
		if (textblock) textblock.style.display = "none";
		var iframe = document.getElementById("iframe");
		if (iframe) iframe.style.display = "block";
	}
	return check;
}

function Get_Cookie_values( check_name ) {
	var bf = document.forms.bookingform;
	if(!bf) return;

	var already_set = 0;

	var set_from_values = function (mval,val) {
		if ( already_set ) return;
		already_set = 1;
		//console.log("Setting route from", unescape(val));
		//alert("Previous search cookie: "+unescape(val));
		var val_list = unescape(val).split(',');

		var oneway_o	= document.getElementById("ticketoneway");
		var return_o	= document.getElementById("ticketreturn");
		var adults_o    = document.getElementById("adults");
		var children_o  = document.getElementById("children");
		var infants_o   = document.getElementById("infants");
		var depart_o    = bf.B_LOCATION_1;
		var arrival_o   = document.getElementById("arrival");
		var flexible_o  = document.getElementById("flexible");
		var date1_o     = document.getElementById("show_B_DATE_1");
		var date2_o     = document.getElementById("show_B_DATE_2");
		var direct_o    = document.getElementById("direct");

		if ( return_o ) return_o.checked = (val_list[0] == "R");
		if ( oneway_o ) oneway_o.checked = (val_list[0] != "R");
		setType();

		if ( depart_o   ) { depart_o.value   = val_list[1]; set_departure(); set_dest(1); }
		if ( arrival_o  ) { arrival_o.value  = val_list[2]; set_dest(1); }
		if ( adults_o   ) { adults_o.value   = val_list[3]; }
		if ( children_o ) { children_o.value = val_list[4]; }
		if ( infants_o  ) { infants_o.value  = val_list[5]; }
		set_persons(0);
		if ( flexible_o ) { flexible_o.checked = (val_list[6] == "F"); set_flexibility(); }

		// At this time ignore date limits - Will be checked when async lookup returns
		document["date1_min"] = null;
		document["date1_max"] = null;
		document["date2_min"] = null;
		document["date2_max"] = null;
		if ( date1_o ) { date1_o.value = val_list[7]; set_date(1); }
		if ( date2_o && val_list[8] ) { date2_o.value = val_list[8]; set_date(2); }
		if ( direct_o && val_list[9] ) { direct_o.checked = (val_list[9] == "D" ); set_direct(1); }
	};

	if(document.cookie) document.cookie.replace(/(?:^|; )flight=(\S+)(?:;|$)/, set_from_values);

	var defr_o = document.getElementById("default:route");
	var defr = defr_o && defr_o.value;
	if ( defr ) set_from_values(defr, defr);

	return null;
}

function waiting(obj) {
	var pausefish = document.getElementById("pausefish");
	if (pausefish) pausefish.style.display = "block";
}

function set_flex(v) {
	var bf = document.forms.bookingform;
	if (!bf) return;
	if ( !v ) v = bf.DATE_RANGE_VALUE_1.value;
	bf.DATE_RANGE_VALUE_1.value = v;
	bf.DATE_RANGE_VALUE_2.value = v;

	var howflex = document.getElementById("howflex");
	var fl = document.getElementById("flexlabel");
	if ( fl && !howflex ) {
		var txt = fl.firstChild.nodeValue;
		var act = function () { alert("Set flex"); };
		var subst_func = function(tot,pre,num,post) {
			var a = document.createElement("A");
			a.setAttribute('id', 'howflex');
			a.setAttribute('onclick', act);
			a.appendChild(document.createTextNode(num));

			fl.removeChild(fl.firstChild);
			fl.appendChild(document.createTextNode(pre));
			fl.appendChild(a);
			fl.appendChild(document.createTextNode(post));
		};
		txt.replace(/^(\D+)(\d+)(\D+)$/, subst_func);
	}
	if ( howflex ) {
		howflex.firstChild.InnerHTML = v;
	}
}

