
 function trim(str)
 {
    return str.replace(/^\s*|\s*$/g,"");
 }


 	function sack(file) {
 		this.xmlhttp = null;

 		this.resetData = function() {
 			this.method = "POST";
 	  		this.queryStringSeparator = "?";
 			this.argumentSeparator = "&";
 			this.URLString = "";
 			this.encodeURIString = true;
 	  		this.execute = false;
 	  		this.element = null;
 			this.elementObj = null;
 			this.requestFile = file;
 			this.vars = new Object();
 			this.responseStatus = new Array(2);
 	  	};

 		this.resetFunctions = function() {
 	  		this.onLoading = function() { };
 	  		this.onLoaded = function() { };
 	  		this.onInteractive = function() { };
 	  		this.onCompletion = function() { };
 	  		this.onError = function() { };
 			this.onFail = function() { };
 		};

 		this.reset = function() {
 			this.resetFunctions();
 			this.resetData();
 		};

 		this.createAJAX = function() {
 			try {
 				this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 			} catch (e1) {
 				try {
 					this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 				} catch (e2) {
 					this.xmlhttp = null;
 				}
 			}

 			if (! this.xmlhttp) {
 				if (typeof XMLHttpRequest != "undefined") {
 					this.xmlhttp = new XMLHttpRequest();
 				} else {
 					this.failed = true;
 				}
 			}
 		};

 		this.setVar = function(name, value){
 			this.vars[name] = Array(value, false);
 		};

 		this.encVar = function(name, value, returnvars) {
 			if (true == returnvars) {
 				return Array(encodeURIComponent(name), encodeURIComponent(value));
 			} else {
 				this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
 			}
 		}

 		this.processURLString = function(string, encode) {
 			encoded = encodeURIComponent(this.argumentSeparator);
 			regexp = new RegExp(this.argumentSeparator + "|" + encoded);
 			varArray = string.split(regexp);
 			for (i = 0; i < varArray.length; i++){
 				urlVars = varArray[i].split("=");
 				if (true == encode){
 					this.encVar(urlVars[0], urlVars[1]);
 				} else {
 					this.setVar(urlVars[0], urlVars[1]);
 				}
 			}
 		}

 		this.createURLString = function(urlstring) {
 			if (this.encodeURIString && this.URLString.length) {
 				this.processURLString(this.URLString, true);
 			}

 			if (urlstring) {
 				if (this.URLString.length) {
 					this.URLString += this.argumentSeparator + urlstring;
 				} else {
 					this.URLString = urlstring;
 				}
 			}

 			// prevents caching of URLString
 			this.setVar("rndval", new Date().getTime());

 			urlstringtemp = new Array();
 			for (key in this.vars) {
 				if (false == this.vars[key][1] && true == this.encodeURIString) {
 					encoded = this.encVar(key, this.vars[key][0], true);
 					delete this.vars[key];
 					this.vars[encoded[0]] = Array(encoded[1], true);
 					key = encoded[0];
 				}

 				urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
 			}
 			if (urlstring){
 				this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
 			} else {
 				this.URLString += urlstringtemp.join(this.argumentSeparator);
 			}
 		}

 		this.runResponse = function() {
 			eval(this.response);
 		}

 		this.runAJAX = function(urlstring) {
 			if (this.failed) {
 				this.onFail();
 			} else {
 				this.createURLString(urlstring);
 				if (this.element) {
 					this.elementObj = document.getElementById(this.element);
 				}
 				if (this.xmlhttp) {
 					var self = this;
 					if (this.method == "GET") {
 						//totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
 						totalurlstring=urlstring;
 						this.xmlhttp.open(this.method, totalurlstring, true);
 					} else {
 						this.xmlhttp.open("GET", this.requestFile, true);

 						try {
 							this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
 						} catch (e) { }
 					}

 					this.xmlhttp.onreadystatechange = function() {
 						switch (self.xmlhttp.readyState) {
 							case 1:
 								self.onLoading();
 								break;
 							case 2:
 								self.onLoaded();
 								break;
 							case 3:
 								self.onInteractive();
 								break;
 							case 4:
 								self.response = self.xmlhttp.responseText;
 								self.responseXML = self.xmlhttp.responseXML;

 								self.responseStatus[0] = self.xmlhttp.status;
 								self.responseStatus[1] = self.xmlhttp.statusText;

 								if (self.execute) {
 									self.runResponse();
 								}

 								if (self.elementObj) {
 									elemNodeName = self.elementObj.nodeName;
 									elemNodeName.toLowerCase();
 									if (elemNodeName == "input"
 									|| elemNodeName == "select"
 									|| elemNodeName == "option"
 									|| elemNodeName == "textarea") {
 										self.elementObj.value = self.response;
 									} else {
 										self.elementObj.innerHTML = self.response;
 									}
 								}
 								if (self.responseStatus[0] == "200") {
 									self.onCompletion();
 								} else {
 									self.onError();
 								}

 								self.URLString = "";
 								break;
 						}
 					};

 					this.xmlhttp.send(this.URLString);
 				}
 			}
 		};

 		this.reset();
 		this.createAJAX();
 	}



	var ajaxBox_offsetX = 0;
	var ajaxBox_offsetY = 0;
	var ajax_list_externalFile = '//'+document.location.host+'/plsqlprod/gtt_webservice.get_country?search_string=';	// Path to external file
	var minimumLettersBeforeLookup = 2;	// Number of letters entered before a lookup is performed.

	var ajax_list_objects = new Array();
	var ajax_list_cachedLists = new Array();
	var ajax_list_activeInput = false;
	var ajax_list_activeItem;
	var ajax_list_optionDivFirstItem = false;
	var ajax_list_currentLetters = new Array();
	var ajax_optionDiv = false;
	var ajax_optionDiv_iframe = false;




	var ajax_list_MSIE = false;
	if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)ajax_list_MSIE=true;



	// for get users lov

	function ajax_getTopPos(inputObj)
	{

	  var returnValue = inputObj.offsetTop;
	  while((inputObj = inputObj.offsetParent) != null){
	  	returnValue += inputObj.offsetTop;
	  }
	  return returnValue;
	}
	function ajax_list_cancelEvent()
	{
		return false;
	}

	function ajax_getLeftPos(inputObj)
	{
	  var returnValue = inputObj.offsetLeft;
	  while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;

	  return returnValue;
	}

	function ajax_option_setValue(e,inputObj)
	{
		if(!inputObj)inputObj=this;
		ajax_list_activeInput.value = inputObj.value;
		if(document.getElementById(ajax_list_activeInput.name + '_hidden'))document.getElementById(ajax_list_activeInput.name + '_hidden').value = inputObj.id;
		if(document.getElementById(ajax_list_activeInput.name + '_disp'))document.getElementById(ajax_list_activeInput.name + '_disp').value = inputObj.value;
		ajax_options_hide();
		try{
			onOptionSelection();
		}catch(e){}
	}

	function ajax_options_hide()
	{
		ajax_optionDiv.style.display='none';
		if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='none';
	}

	function ajax_options_rollOverActiveItem(item,fromKeyBoard)
	{

			var clssname="";
			if (item.className=="optionDiv"){ clssname="optionDivodd"; } else { clssname="optionDiv";}

		if(ajax_list_activeItem)ajax_list_activeItem.className=clssname ;

		item.className='optionDivSelected';
		ajax_list_activeItem = item;

		if(fromKeyBoard){
			if(ajax_list_activeItem.offsetTop>ajax_optionDiv.offsetHeight){
				ajax_optionDiv.scrollTop = ajax_list_activeItem.offsetTop - ajax_optionDiv.offsetHeight + ajax_list_activeItem.offsetHeight + 2 ;
			}
			if(ajax_list_activeItem.offsetTop<ajax_optionDiv.scrollTop)
			{
				ajax_optionDiv.scrollTop = 0;
			}
		}
	}


function build_record(items,no,inputObj){

		var columns=eval(inputObj.name+"_header").split(',');
		var colwidth=eval(inputObj.name+"_header_width").split(',');
//		var colhidden=eval(inputObj.name+"_hidden");
		var coldisplay=eval(inputObj.name+"_display").split(',');
		var html="";


		 for(cnt=0;cnt<columns.length;cnt++){


			  html =html+"<li style=\"width:"+colwidth[cnt]+"px\" >"+items[coldisplay[cnt]] +"</li>" ;

				  }


return html;
}
	function ajax_option_list_buildList(letters,paramToExternalFile,inputObj)
	{


		//ajax_optionDiv.innerHTML = '';
		ajax_list_activeItem = false;

		ajax_list_optionDivFirstItem = false;
		var optionsAdded = false;
		var classnme="";




		for(var no=0;no<paramToExternalFile.length-1;no++){
			  html="";

					optionsAdded = true;
					var div = document.createElement('DIV');
					var record=paramToExternalFile[no];
					var items = record.split(/###/gi);


					div.innerHTML = build_record(items,no,inputObj);
					div.id = items[eval(inputObj.name+"_id")];
					div.value = items[eval(inputObj.name+"_disp_sel")];
					if ((no%2)==1) { classnme="optionDiv"; } else {classnme="optionDivodd"; }
					div.className=classnme;
		            div.onmouseover = function(){ ajax_options_rollOverActiveItem(this,false) }
					div.onclick = ajax_option_setValue;
					if(!ajax_list_optionDivFirstItem)ajax_list_optionDivFirstItem = div;
					ajax_optionDiv.appendChild(div);
					if(optionsAdded){
								ajax_optionDiv.style.display='block';
								if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='';
		}
		}

	}



function build_columns(inputObj) {
		ajax_optionDiv.innerHTML = '';
 		ajax_list_activeItem = false;

 		ajax_list_optionDivFirstItem = false;
 		var optionsAdded = false;

		var columns=eval(inputObj.name+"_header").split(',');
		var colwidth=eval(inputObj.name+"_header_width").split(',');

var div = document.createElement('DIV');
div.id = null;
var html;

			for(var no=0;no<columns.length;no++){
					if (no==0) {
				html ="<li style=\"width:"+colwidth[no]+"px\" >"+columns[no] +"</li>";
				} else
				{  html =html+"<li style=\"width:"+colwidth[no]+"px\" >"+columns[no] +"</li>" ;}
					}
//html="<ul style=\"border: 0.1em solid #ffffff;\">"+html+"</ul>"


					div.innerHTML=html;
					div.id="headerrec"
					ajax_optionDiv.appendChild(div);


}

function buildbox (inputObj) {

if(!ajax_optionDiv){
					ajax_optionDiv = document.createElement('DIV');
					ajax_optionDiv.id = 'ajax_listOfOptions';
					document.body.appendChild(ajax_optionDiv);

					if(ajax_list_MSIE){
						ajax_optionDiv_iframe = document.createElement('IFRAME');
						ajax_optionDiv_iframe.border='0';
						ajax_optionDiv_iframe.style.width = eval(inputObj.name+"_width")+'px';
						ajax_optionDiv_iframe.style.height = ajax_optionDiv.clientHeight + 'px';
						ajax_optionDiv_iframe.id = 'ajax_listOfOptions_iframe';
						ajax_optionDiv_iframe.src= '/empty.html';

						document.body.appendChild(ajax_optionDiv_iframe);
					}

					var allInputs = document.getElementsByTagName('INPUT');
					for(var no=0;no<allInputs.length;no++){
						if(!allInputs[no].onkeyup)allInputs[no].onfocus = ajax_options_hide;
					}
					var allSelects = document.getElementsByTagName('SELECT');
					for(var no=0;no<allSelects.length;no++){
						allSelects[no].onfocus = ajax_options_hide;
					}

					var oldonkeydown=document.body.onkeydown;
					if(typeof oldonkeydown!='function'){
						document.body.onkeydown=ajax_option_keyNavigation;
					}else{
						document.body.onkeydown=function(){
							oldonkeydown();
						ajax_option_keyNavigation() ;}
					}
					var oldonresize=document.body.onresize;
					if(typeof oldonresize!='function'){
						document.body.onresize=function() {ajax_option_resize(inputObj); };
					}else{
						document.body.onresize=function(){oldonresize();
						ajax_option_resize(inputObj) ;}
					}

		}

					    ajax_optionDiv.style.width=eval(inputObj.name+"_width")+'px';
						ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
						ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
						if(ajax_optionDiv_iframe){
							ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
							ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
						}


		ajax_optionDiv.onselectstart =  ajax_list_cancelEvent;
		build_columns(inputObj);

}
	function ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile)

	{
	var letters = inputObj.value;
		var content = ajax_list_objects[ajaxIndex].response;
		var elements = content.split('|');
		buildbox(inputObj);

		ajax_option_list_buildList(letters,elements,inputObj);



	}

	function ajax_option_resize(inputObj)
	{
		ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
		ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
		if(ajax_optionDiv_iframe){
			ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
			ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
		}

	}

	function ajax_showOptions(inputObj,paramToExternalFile)
	{


			if(ajax_list_currentLetters[inputObj.name]==inputObj.value)return;

			if (inputObj.value.length<2){ return;  }
			//if ((document.getElementById(inputObj.name + '_hidden').value.length>0)&&(document.getElementById(inputObj.name + '_hidden').value ==inputObj.value) ){ return; }
			if ((document.getElementById(inputObj.name + '_disp').value.length>0)&&(document.getElementById(inputObj.name + '_disp').value ==inputObj.value) ){ return; }
			if(!ajax_list_cachedLists[paramToExternalFile])ajax_list_cachedLists[paramToExternalFile] = new Array();
			ajax_list_currentLetters[inputObj.name] = inputObj.value;

			  ajax_list_activeInput = inputObj;

			if(inputObj.value.length<minimumLettersBeforeLookup){
				ajax_options_hide();
				return;
			}


			if(ajax_list_cachedLists[paramToExternalFile][inputObj.value]){
				
				ajax_option_list_buildList(inputObj.value,paramToExternalFile);
			}else{
				
				ajax_optionDiv.innerHTML = '';
				var ajaxIndex = ajax_list_objects.length;
				ajax_list_objects[ajaxIndex] = new sack();
				var url = eval(inputObj.name+"_url")+inputObj.value;

				ajax_list_objects[ajaxIndex].requestFile = url;	// Specifying which file to get
				ajax_list_objects[ajaxIndex].onCompletion = function(){ ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile); };	// Specify function that will be executed after file has been found
				ajax_list_objects[ajaxIndex].runAJAX();		// Execute AJAX function
			}




	}

	function ajax_option_keyNavigation(e)
	{
		if(document.all)e = event;

		if(!ajax_optionDiv)return;
		if(ajax_optionDiv.style.display=='none')return;

		if(e.keyCode==38){	// Up arrow
			if(!ajax_list_activeItem)return;
			if(ajax_list_activeItem && !ajax_list_activeItem.previousSibling)return;
			ajax_options_rollOverActiveItem(ajax_list_activeItem.previousSibling,true);
		}

		if(e.keyCode==40){	// Down arrow
			if(!ajax_list_activeItem){
				ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
			}else{
				if(!ajax_list_activeItem.nextSibling)return;
				ajax_options_rollOverActiveItem(ajax_list_activeItem.nextSibling,true);
			}
		}

		if(e.keyCode==13 || e.keyCode==9){	// Enter key or tab key
			if(ajax_list_activeItem && ajax_list_activeItem.className=='optionDivSelected')ajax_option_setValue(false,ajax_list_activeItem);
			if(e.keyCode==13)return false; else return true;
		}
		if(e.keyCode==27){	// Escape key
			ajax_options_hide();
		}
	}