function Airport(str) {
	var strpos = str.lastIndexOf(", ");
	var strpos2 = str.lastIndexOf(" [");
	if (strpos!=-1) {
		this.name=str.substring(0,strpos);
		if (strpos2!=-1) this.code=str.substring(strpos2+2,str.length-1);
		else this.code=str.substring(strpos+2);
	}
	else this.name=str;
	this.display = str;
}

if(typeof(completionFields)=="undefined") {
	var completionFields = new Array();
	completionFields["Search"] = new Array("_from","To");
}

if(typeof(iataFields)=="undefined") {
	var iataFields = new Array();
	iataFields["Search"] = new Array("trip"+completionFields["Search"][0],"trip"+completionFields["Search"][1]);
}

var iatacodeF = new Array();
for(var formName in completionFields) {
	for(var i=0; i<completionFields[formName].length; i++) {
		iatacodeF[completionFields[formName][i]] = iataFields[formName][i];
	}
}

for (var formName in completionFields) {
	myForm = document.forms[formName];
	myComplFields = completionFields[formName];
	for (var i=0; i<myComplFields.length; i++) {
		myForm.elements[myComplFields[i]].onblur = function () {
			if (launchmatch) match(this.form,this.name);
		};
	}
}

var launchmatch = true;
function match(form,fieldname) {
	//if (launchmatch) {
		var fieldvalue = trimString(form.elements[fieldname].value).toLowerCase();
		if (fieldvalue=="" || fieldvalue.length < 3) return false;
		var fieldkey = form.name+fieldname+fieldvalue;
		
		if (typeof(airport[fieldkey])=="undefined") {
		
			var xmlhttp = getHTTPObject(form.name,fieldname,fieldvalue); 
			var URL = curURL+escape(fieldvalue);
			xmlhttp.open("GET", URL, true); 
			xmlhttp.send(null);
		
			if (airport[fieldkey].length==0) {
				do {
					fieldvalue = fieldvalue.substring(0,fieldvalue.length-1);
					fieldkey = form.name+fieldname+fieldvalue;
					if (typeof(airport[fieldkey])!="undefined") break;
				}
				while(fieldvalue.length > 2);
			}
			if (typeof(airport[fieldkey])=="undefined") {
				removelist(fieldname);
				return false;
			}
		}
		var indexmatch = -1;
		if(selectedDiv != -1)
			indexmatch = selectedDiv+indexst;
		else if (airport[fieldkey].length > 0)
			indexmatch = 0;

		if (indexmatch!=-1) {
			form.elements[fieldname].value = airport[fieldkey][indexmatch].name;
			if (typeof(form.elements[iatacodeF[fieldname]])!="undefined") {
				var iataCode = airport[fieldkey][indexmatch].code;
				if (typeof(iataCode)=="undefined") iataCode = '';
				form.elements[iatacodeF[fieldname]].value = iataCode;
			}
		}
		else if (typeof(form.elements[iatacodeF[fieldname]])!="undefined")
			form.elements[iatacodeF[fieldname]].value = "";
		removelist(fieldname);
	//}
}

function setVal(form,fieldname,indexclick){
	var fieldvalue = trimString(form.elements[fieldname].value).toLowerCase();
	if (typeof(airport[form.name+fieldname+fieldvalue])!="undefined") {
		form.elements[fieldname].value = airport[form.name+fieldname+fieldvalue][indexclick].name;
		if (typeof(form.elements[iatacodeF[fieldname]])!="undefined") {
			var iataCode = airport[form.name+fieldname+fieldvalue][indexclick].code;
			if (typeof(iataCode)=="undefined") iataCode = '';
			form.elements[iatacodeF[fieldname]].value = iataCode;
		}
		removelist(fieldname);
	}
	else {
		//alert("TOTO");
	}
}

//ANM
/*function trimvalue(trimstr)
{
	if (typeof(trimstr) != "undefined")
	{
		strlen = trimstr.length;
		strstart = 0;
		strend = strlen;
		for (strstart=0;strstart<strlen && trimstr.charAt(strstart)==' ';strstart++);
		for (strend=strlen;strend>strstart && trimstr.charAt((strend-1))==' ';strend--);
		trimstr = trimstr.substring(strstart, strend);
		return trimstr;
	}
	else
		return '';
}*/

function replaceAll(originalstr,str1,str2) {
	newstr = "";
	if (str1.length>0 && str2.length>0) {
		while ((index1 = originalstr.indexOf(str1)) != -1) {
			newstr += originalstr.substring(0,index1) + str2;
			originalstr = originalstr.substring(index1+str1.length);
		}
	}
	newstr += originalstr;
	return newstr;
}

function comparestr(str1,str2) {
	if (str1.length>0 && str1.length==str2.length) {
		for (k=0 ; k<str1.length ; k++) {
			c1 = str1.charAt(k).toLowerCase();
			c2 = str2.charAt(k).toLowerCase();
			if (c1 != c2) return false;
		}
		return true;
	}
	return false;
}

function getboldtext(comparestr,strstart,inputstr) {
	lowerstr = comparestr.toLowerCase();
	lowerinput = inputstr.toLowerCase();
	inputlen = inputstr.length;
	istart = lowerstr.indexOf(strstart+inputstr);
	if(istart != -1) {
		iend = istart+strstart.length+inputlen;
		outputstr = comparestr.substring(istart+strstart.length,iend);
		if (lowerinput == outputstr.toLowerCase())
			return comparestr.replace(outputstr,"<b>"+outputstr+"</b>");
	}
	return comparestr;
}


var selectedDiv = -1;
var lastMatch = 0;
var airportlist = new Array();
var airport = new Array();

var listnb = 0;
//max nb of propositions
var prop_limit=15;
var indexst = 0;

function init(formname,fieldname,fieldvalue) {
	selectedDiv = -1;
	lastMatch = 0;
	airportlist[formname+fieldname+fieldvalue] = new Array();
	airport[formname+fieldname+fieldvalue] = new Array();
	listnb = 0;
	if (typeof(document.forms[formname].elements[iatacodeF[fieldname]])!="undefined")
		document.forms[formname].elements[iatacodeF[fieldname]].value = "";
}

var nextbtnloc = lang["js_next"];
var prevbtnloc = lang["js_prev"];

function filllist(fieldname,strlist) {
	document.getElementById(fieldname+'compl').innerHTML = strlist;
}

function emptylist(fieldname) {
	document.getElementById(fieldname+'compl').innerHTML = '';
	selectedDiv = -1;
	if (isVisible(fieldname+'compl')) {
		setVisible(fieldname+'compl',0);
		setVisible('layer'+fieldname,0);
	}
}

function removelist(fieldname) {
	listnb = 0;
	emptylist(fieldname);
}

function printprevlist(fieldname) {
	listnb-=1;
	selectedDiv = prop_limit;
	indexst = indexst - prop_limit;
	filllist(fieldname,airportlist[formname+fieldname+fieldvalue][listnb]);
}

function printnextlist(formobject,fieldname) {
	listnb+=1;
	selectedDiv = -1;
	if (typeof(airportlist[formobject.name+fieldname+fieldvalue][listnb]) != "undefined") {
		indexst = indexst + prop_limit;
		filllist(fieldname,airportlist[formobject.name+fieldname+fieldvalue][listnb]);
	}
	else
		printlist(lastMatch,formobject,fieldname);
}

function setSelected(divnb,isselected) {
	sprefix = '';
	if (!isselected) sprefix = 'un';
	divitem = document.getElementById('div'+divnb);
	if (divitem!=null) {
		divitem.className = sprefix+'selected';
		return true;
	}
	return false;
}

var fieldvalue;
var formname;
function printlist(indexstart,formobject,fieldname) {
	fieldvalue = trimString(formobject.elements[fieldname].value).toLowerCase();
	formname = formobject.name;
	if (typeof(airport[formname+fieldname+fieldvalue]) == 'undefined') return false;
	//init
	indexst = indexstart;
	emptylist(fieldname);
	matchcount = 0;
	pointi = fieldvalue.lastIndexOf(";");
	if (pointi != -1) fieldvalue = trimString(fieldvalue.substring(pointi+1));
	if (fieldvalue.length>0) {
		for (l=indexstart ; l<airport[formname+fieldname+fieldvalue].length; l++) {
			if (typeof(airport[formname+fieldname+fieldvalue][l]) != 'undefined') {
				var display = airport[formname+fieldname+fieldvalue][l].display;
				display = getboldtext(display,"",fieldvalue);
				display = getboldtext(display," ",fieldvalue);
				display = getboldtext(display,"-",fieldvalue);
				display = getboldtext(display,"(",fieldvalue);
				display = getboldtext(display,"[",fieldvalue);
				contactline = '<div class=\'unselected\' id=\"div'+matchcount+'\" onmouseover=\"launchmatch=false;this.className=\'selected\';\" onmouseout=\"launchmatch=true;this.className=\'unselected\';\" onclick=\"setVal(document.'+formname+',\''+fieldname+'\','+l+');\"><font class="smallertext">'+display+'</font></a>';
				matchcount++;
				if (matchcount==1 && indexstart!=0) {
					prevlistline = '<div class=\'unselected\' id=\"div-1\" onmouseover=\"launchmatch=false;this.className=\'selected\';\" onmouseout=\"launchmatch=true;this.className=\'unselected\';\" onclick=\"document.forms[\''+formname+'\'].elements[\''+fieldname+'\'].focus();printprevlist(\''+fieldname+'\');\" style=\"font-weight:bold;color:#123456\">< '+prevbtnloc+'</a>';
					addline(fieldname,prevlistline);
				}
				addline(fieldname,contactline);
				if (matchcount==prop_limit && matchcount!=airport[formname+fieldname+fieldvalue].length) {
					lastMatch = l+1;
					nextlistline = '<div class=\'unselected\' id=\"div'+matchcount+'\" onmouseover=\"launchmatch=false;this.className=\'selected\';\" onmouseout=\"launchmatch=true;this.className=\'unselected\';\" onclick=\"document.forms[\''+formname+'\'].elements[\''+fieldname+'\'].focus();printnextlist(document.'+formname+',\''+fieldname+'\');\" style=\"font-weight:bold;color:#123456\">> '+nextbtnloc+'</a>';
					addline(fieldname,nextlistline);
					break;
				}
			}
		}
	}
	var layerh = 120;
	var layer = document.getElementById("layer"+fieldname);
	if (matchcount<prop_limit) {
		layerh = matchcount*15;
		layer.style.height = layerh + "px";
	}
	else if (layer.style.height != layerh + "px") {
		layer.style.height = layerh + "px";
	}
	
	if (matchcount>0 && !isVisible(fieldname+'compl')) {
		setVisible(fieldname+'compl',1);
		setVisible('layer'+fieldname,1);
	}
	if (typeof(airportlist[formname+fieldname+fieldvalue]) == 'undefined')	airportlist[formname+fieldname+fieldvalue] = new Array();
	if (typeof(airportlist[formname+fieldname+fieldvalue][airportlist[formname+fieldname+fieldvalue].length]) == 'undefined')	{
		airportlist[formname+fieldname+fieldvalue][airportlist[formname+fieldname+fieldvalue].length] = document.getElementById(fieldname+'compl').innerHTML;
	}
}

function addline(fieldname,sometext) {
	document.getElementById(fieldname+'compl').innerHTML += sometext;
}

function down(formname,fieldname,keyCode) {
}

var curURL = null;
var upTO = null;
var defaultTO = 250;
function up(formname,fieldname,keyCode,URL) {
	if (typeof(URL)=="undefined") curURL = "/getAirportProps.php?airport=";
	else curURL = URL;
	_up(formname,fieldname,keyCode,curURL);
}

function _up(formname,fieldname,keyCode,URL) {
	var fieldvalue = trimString(document.forms[formname].elements[fieldname].value).toLowerCase();
	if (fieldvalue.length<3) {
		removelist(fieldname);
	}
	// 'escape'
	else if (keyCode == 27) {
		removelist(fieldname);
	}
	// 'enter'
	else if (keyCode == 13 && selectedDiv>-1) {
		if (completionFields[formname].length>1) {
			if (fieldname==completionFields[formname][0])
				document.forms[formname].elements[completionFields[formname][1]].focus();
			else if (fieldname==completionFields[formname][1])
				document.forms[formname].elements["date1"].focus();
		}
		else if (typeof(document.forms[formname].elements["dateStart"])!="undefined")
			document.forms[formname].elements["dateStart"].focus();
	}
	// 'down'
	else if (keyCode == 40) {
		selectedDiv += 1;
		if (selectedDiv>=prop_limit) {
			printnextlist(document.forms[formname],fieldname);
			return;
		}
		if (setSelected(selectedDiv,true))
			setSelected(selectedDiv-1,false);
		else
			selectedDiv -= 1;
	}
	// 'up'
	else if (keyCode == 38)	{
		if (selectedDiv > 0) {
			selectedDiv -= 1;
			setSelected(selectedDiv,true);
			setSelected(selectedDiv+1,false);
		} 
		else if (selectedDiv<=0 && listnb!=0) {
			printprevlist(fieldname);
		}
	}
	// not 'enter', not 'up', not 'down'
	// not 'left', not 'right', not 'shift', not 'caps-lock', not 'end', not 'debut', not 'F5', not 'num-lock', not 'print-screen'
	else if(keyCode!=37 && keyCode!=39 && keyCode!=16 && keyCode!=20 && keyCode!=35 && keyCode!=36 && keyCode!=116 && keyCode!=144 && keyCode!=44) {
		removelist(fieldname);
		if (typeof(airport[formname+fieldname+fieldvalue]) != "undefined") {
			printlist(0,document.forms[formname],fieldname);
		}
		else {
			var xmlhttp = getHTTPObject(formname,fieldname,fieldvalue); 
			URL+= escape(fieldvalue);
			
			xmlhttp.open("GET", URL, true); 
			xmlhttp.send(null); 
		}
	}
}

function trimString(trimstr)
{
	if (typeof(trimstr) != "undefined")
	{
		strlen = trimstr.length;
		strstart = 0;
		strend = strlen;
		for (strstart=0;strstart<strlen && trimstr.charAt(strstart)==' ';strstart++);
		for (strend=strlen;strend>strstart && trimstr.charAt((strend-1))==' ';strend--);
		trimstr = trimstr.substring(strstart, strend);
		return trimstr;
	}
	else
		return '';
}

function isVisible( idDiv ) {
	return (document.getElementById(idDiv).style.display=="block"); 
}

function setVisible( idDiv , visible ) {
	if( visible == 0 ) 
		document.getElementById(idDiv).style.display = "none";
	else 	document.getElementById(idDiv).style.display = "block";
}

function getHTTPObject(formname,fieldname,fieldvalue)
	{
	init(formname,fieldname,fieldvalue);
	var xmlhttp = false;
	/* Compilation conditionnelle d'IE */
	/*@cc_on
	@if (@_jscript_version >= 5)
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)	{
			try {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (E) {
				xmlhttp = false;
			}
		}
	@else
		xmlhttp = false;
	@end @*/

	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		}
		catch (e) {
			xmlhttp = false;
		}
	}
  if (xmlhttp) {
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState == 4) {
				if (xmlhttp.status == 200) {
					var strresult = xmlhttp.responseText;
					var result = strresult.split("|");
					if (result.length > 0)
						airport[formname+fieldname+fieldvalue] = new Array();
						for (var i=0; i<result.length-1;i++) {
							airport[formname+fieldname+fieldvalue][i] = new Airport(result[i]);		
						}
					printlist(0,document.forms[formname],fieldname);
				}
			}
		};
	}
	return xmlhttp;
}