var autoSuggestElementObj;
var autoSuggestRows;
var autoListMouseOut;
var autoSuggestXMLTagName;
var servletDataListName;
var servletRootPath;
var autoListContainer = 'auto_suggest_list';
var dummyContainer = 'dummy_auto_suggest_list';
var autoListClassName = 'suggest_list';
var autoListLinkClassName = 'suggest_link';
var autoListLinkOverClassName = 'suggest_link_over';
//var autoListContextPath = getContextPath();

function fillAutoSuggest(obj){
	var key = keygetter();
	switch(key){
		case 9: setAutoSuggestValue(obj); break; /* tab key */
	}
}

function autoSuggestFocus(obj){
	obj.select();
	autoListMouseOut = false;
	autoSuggestElementObj = obj;
	if(obj$(dummyContainer)!=null)
		hide$(dummyContainer);
		hideFRM();
	
	if(obj$(autoListContainer)!=null)
		hide$(autoListContainer);
		hideFRM();
}


function searchAutoSuggest(obj,dataList,tagName,keyLen,idLen,rows,width,root){
	servletDataListName = dataList ? dataList : 'airportList';
	autoSuggestXMLTagName = tagName ? tagName : 'response';
	servletRootPath = root ? root : null;
	autoListMouseOut = false;
	autoSuggestElementObj = obj;
	autoSuggestRows = rows || 10;
	autoSuggestListWidth = width || obj.offsetWidth;
	codeWidth = idLen || 3;
	autoKeyLen = keyLen || 3;

	var key = keygetter();
	var objSuggestList = getAutoSuggestListContainer();
	var objDummy = obj$(dummyContainer);

	var oPos = getObjectPos$(obj);

	obj.setAttribute('autocomplete','off');
	obj.onblur = function(){ fireBlur(this);};

	objSuggestList.style.top = oPos.y+obj.offsetHeight+'px';
	objSuggestList.style.left = (oPos.x+1)+'px';
	objSuggestList.style.width = autoSuggestListWidth+"px";

	objDummy.style.top = oPos.y+obj.offsetHeight+'px';
	objDummy.style.left = (oPos.x+1)+'px';
	objDummy.style.width = autoSuggestListWidth+"px";
	objDummy.style.border = 'none';

	
	objSuggestList.onmouseout = function(){autoListMouseOut = false; };
	objSuggestList.onmouseover = function(){autoListMouseOut = true; };
	objSuggestList.onblur = function() {fireBlur(obj);};
	objSuggestList.onkeyup = function() { keyHandler(this); };
	
	if (obj.value.length < autoKeyLen || key == 27){
		hide$(objSuggestList);
		hide$(dummyContainer);
		hideFRM();

		if ( key == 27){
			obj.value="";
		}
		return false;
	}
	switch(key){
		case 37: break; /* left arrow */
		case 39: break; /* right arrow */
		case 33: break; /* page up  */
		case 34: break; /* page down  */
		case 36: break; /* home  */
		case 35: break; /* end     */             
		case 9:  break; /* tab  */
		case 27: break; /* esc  */
		case 16: break; /* shift  */
		case 17: break; /* ctrl  */
		case 18: break; /* alt  */
		case 20: break; /* caps lock */
		case 38: doScrollUp(objSuggestList); break; /* up arrow */
		case 40: doScrollDown(objSuggestList); break; /* down arrow */
		case 13: setAutoSuggestValue(obj); break; /* Enter key */
		default: getDataByAjax(obj);	break;
	}
}

function getDataByAjax(object){
	var value = object.value;
	var temp = value.split(',');	
	if(temp.length>3){
			alert("You can select maximum of three.");
			object.value = object.value.substring(0,(object.value.length-1));
			return;
	}

	var root ="/candidate/faces/LocationAutoSuggestServlet";
	var url = root;
	var params="";
	//if(servletDataListName !="hotelList" && servletDataListName !="stationList"){

//Nasir Commented out this line to get the last key from comma seperated keys
	//	params = "name="+servletDataListName+"&key="+value;
	params = "name="+servletDataListName+"&key="+temp[temp.length-1];

	//}else{
	//	params = "name="+servletDataListName+"&cityCode="+cityCOdeForGtaServlet+"&key="+value;
	//}

		var suggestAjax = new myAjax(url, 'get', 'xml', {'params':params,'callBack':'autoSuggestData'});
}

function autoSuggestData(xmlResponse){	
	var xmlDataList = xmlResponse.getElementsByTagName("timesascent");
	createAutoSuggestList(xmlDataList);
}

function createAutoSuggestList(xmlList){
	var objSuggestList = obj$(autoListContainer);
	var objDummy = obj$(dummyContainer);
	var listLength = xmlList.length;
	var ifHeight = 0;
	if ( listLength > autoSuggestRows){
		objSuggestList.style.height = (autoSuggestRows * 18)+"px";
		ifHeight = autoSuggestRows * 18;
	}else{
		objSuggestList.style.height = "auto";
		ifHeight = listLength * 18;
	}
	objDummy.innerHTML='<iframe FRAMEBORDER=0 style=";z-index:-1;position:absolute;border:1px solid #000; left:0px;top:0px;margin:0; padding:0;height:'+ifHeight+'px;width:600px;" id="_iframe_'+autoListContainer+'"></iframe>';
	objSuggestList.innerHTML='';

	hide$(objDummy);
	hide$(objSuggestList);
	if (xmlList.length > 0){
		for (var x=0;x<xmlList[0].childNodes.length ;x++ ){
			var listItem = document.createElement('div');
			listItem.id = x;
			listItem.className = autoListLinkClassName;
			listItem.onmouseover = function() { autoListMouseOut = true; autoSuggestOver(objSuggestList);this.className = autoListLinkOverClassName};
			listItem.onclick = function() { setAutoSuggestValue(autoSuggestElementObj);};
			listItem.onmouseout = function(){autoListMouseOut = false;};
			listItem.innerHTML = xmlList[0].childNodes[x].getAttribute('value');

			objSuggestList.appendChild(listItem);
		}
		objSuggestList.scrollTop = 0;
		objSuggestList.firstChild.className = autoListLinkOverClassName;
		show$(objDummy);
		show$(objSuggestList);
		showFRM();
			

	}
}

function autoSuggestOver(listObj){
	var obj = listObj.childNodes;
	for (var x =0; x < obj.length ;x++ ){
		if (obj[x].className == autoListLinkOverClassName){
			obj[x].className = autoListLinkClassName;
		}
	}
}

function setAutoSuggestValue(obj){
	var objList = obj$(autoListContainer).childNodes;
	var temp;
	if (objList && objList.length > 0){
		var elNo = getCurrentElement(objList);
		temp = obj.value.substring(0,obj.value.lastIndexOf(',')+1);
		temp+=objList[elNo].innerHTML;
		obj.value =temp;
	}
	hide$(dummyContainer);
	hide$(autoListContainer);
	hideFRM();
	//setAutoSuggestValueCommon(servletDataListName,obj);
}

function doScrollUp(objList){
	var obj = objList.childNodes;
	var elNo = getCurrentElement(obj);
	if (elNo > 0){
		obj[elNo].className = autoListLinkClassName;
		obj[elNo-1].className = autoListLinkOverClassName;

		if (elNo+1 > autoSuggestRows -1 ){
			objList.scrollTop -= 18;
		}
	}
}

function doScrollDown(objList){
	var obj = objList.childNodes;
	var elNo = getCurrentElement(obj);
	if (elNo < obj.length -1){
		obj[elNo].className = autoListLinkClassName;
		obj[elNo+1].className = autoListLinkOverClassName;
		if (elNo+1 >= autoSuggestRows - 1 ){
			objList.scrollTop += 18;
		}
	}
}

function getCurrentElement(objList){
	var elNo=0;
	for (var x= 0;x < objList.length ;x++ ){
		if (objList[x].className==autoListLinkOverClassName){
			elNo = x;
			break;
		}
	}
	return elNo;
}

function keygetter(){
	var key=27;
	var evt;
	if(window.Event ) 
		evt = window.Event;
	if (window.event){
		evt = window.event;
	}
	key = evt.keyCode ? evt.keyCode : evt.which;
	return key;
}


function fireBlur(obj){
	if (!autoListMouseOut){
		hide$(dummyContainer);
		hide$(autoListContainer);
		hideFRM();
		if (obj.value=="" )	{
			// set your function
		}
	}
}

function keyHandler(obj){
	var key = keygetter(); 
	switch (key){
		case 38: doScrollUp(obj);break; // up arrow
		case 40: doScrollDown(obj);break; // down arrow
		case 13: setAutoSuggestValue(autoSuggestElementObj); break; /* Enter key */
	}
}

function getAutoSuggestListContainer(){		
	var objSuggestList = obj$(autoListContainer);
	if (!objSuggestList){
		var objDummy = document.createElement('div');
		objDummy.style.display='none';
		objDummy.id = dummyContainer;
		objDummy.className = autoListClassName;

		objSuggestList = document.createElement('div');
		objSuggestList.style.display='none';
		objSuggestList.id = autoListContainer;
		objSuggestList.className = autoListClassName;

		document.body.appendChild(objDummy);
		document.body.appendChild(objSuggestList);
	}
	return objSuggestList;
}

function showFRM(){
	var objfrm = document.getElementById('locationfrm');
	objfrm.style.display = 'block';
	objfrm.style.height = (autoSuggestRows)+"px";
}
function hideFRM(){
	var objfrm = document.getElementById('locationfrm');
	objfrm.style.display = 'none';
	objfrm.style.height = (autoSuggestRows)+"px";
}