	/************************************************************************************************************
	(C) www.dhtmlgoodies.com, April 2006
	
	This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	
	
	Terms of use:
	You are free to use this script as long as the copyright message is kept intact. However, you may not
	redistribute, sell or repost it without our permission.
	
	Thank you!
	
	www.dhtmlgoodies.com
	Alf Magne Kalleland
	
	************************************************************************************************************/	

	var ajaxBox_offsetX = 0;
	var ajaxBox_offsetY = 0;
	var ajax_list_externalFile = '';	// Path to external file
	var minimumLettersBeforeLookup = 3;	// 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_inputObjHidden = '';
	var ajax_list_MSIE = false;
	if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)ajax_list_MSIE=true;
	
	var currentListIndex = 0;
	
	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;
		var tmpValue = inputObj.innerHTML;
		if(ajax_list_MSIE)tmpValue = inputObj.innerText;else tmpValue = inputObj.textContent;
		if(!tmpValue)tmpValue = inputObj.innerHTML;
		var items = tmpValue.split('-');
		ajax_list_activeInput.value = items[0];//tmpValue;
		if(document.getElementById(ajax_inputObjHidden))document.getElementById(ajax_inputObjHidden).value = inputObj.id; 
		ajax_options_hide();
	}
	
	function ajax_options_hide()
	{
		if(ajax_optionDiv)ajax_optionDiv.style.display='none';	
		if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='none';
	}

	function ajax_options_rollOverActiveItem(item,fromKeyBoard)
	{
		if(ajax_list_activeItem)ajax_list_activeItem.className='optionDiv';
		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 ajax_option_list_buildList(letters,paramToExternalFile,inputObj)
	{
		
		ajax_optionDiv.innerHTML = '';
		ajax_list_activeItem = false;
		if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length<=1){
			ajax_options_hide();
			return;			
		}
		
		
		
		ajax_list_optionDivFirstItem = false;
		var optionsAdded = false;
		for(var no=0;no<ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length;no++){
			if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].length==0)continue;
			var items = ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].split(/###/gi);
            //nuevo 2007-08-21 se agrego un if para agregar solo los
            //items que coinciden con las letras tipeadas en el input 
            //var comp = items[1].substring(0,inputObj.value.length)
			//if (comp.toLowerCase()== inputObj.value.toLowerCase())
			//alert(replaceCharacter('á'));
			//var comp = items[1].toLowerCase();
			var fil = inputObj.value.toLowerCase();
			var comp = normalizeString(items[1].toLowerCase());
			var filn = normalizeString(inputObj.value.toLowerCase());
			if (comp.indexOf(filn)!=-1)
			{
			    optionsAdded = true;
			    var div = document.createElement('DIV');
			    if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length==1 && ajax_list_activeInput.value == items[0]){
				    ajax_options_hide();
				    return;						
			    }
			
			
			    //div.innerHTML = items[1] + '<b>'+ items[2] + '</b>';
			    div.innerHTML = boldLetters(items[1],fil);
			    div.id = items[0];
			    div.className='optionDiv';
			    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='';
			ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
		}
					
	}
	
	function ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,whichIndex,letters)
	{
		if(whichIndex!=currentListIndex)return;
		//var letters = inputObj.value;
		var content = ajax_list_objects[ajaxIndex].response;
		var elements = content.split('|');
		ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()] = elements;
		ajax_option_list_buildList(letters,paramToExternalFile,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(input,inputHidden,paramToExternalFile,e)
	{
		var inputObj = document.getElementById(input);
		ajax_inputObjHidden = inputHidden;
		if(e.keyCode==13 || e.keyCode==9)return;
		if(ajax_list_currentLetters[inputObj.name]==inputObj.value)return;
		if(!ajax_list_cachedLists[paramToExternalFile])ajax_list_cachedLists[paramToExternalFile] = new Array();
		ajax_list_currentLetters[inputObj.name] = inputObj.value;
		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 = ajax_optionDiv.clientWidth + 'px';
				ajax_optionDiv_iframe.style.height = ajax_optionDiv.clientHeight + 'px';
				ajax_optionDiv_iframe.id = 'ajax_listOfOptions_iframe';
				
				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) ;}
			}
				
		}
		
		if(inputObj.value.length<minimumLettersBeforeLookup){
			ajax_options_hide();
			return;
		}
				

		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_list_activeInput = inputObj;
		ajax_optionDiv.onselectstart =  ajax_list_cancelEvent;
		currentListIndex++;
		//nuevo 2007-08-21
		var letters; 
		if(inputObj.value.length>minimumLettersBeforeLookup)
		    letters = inputObj.value.substring(0,minimumLettersBeforeLookup);
		else
		    letters = inputObj.value;
		//fin nuevo 2007-08-21
		//nuevo 2007-09-04
		//letters = normalizeString(letters);
		//fin nuevo 2007-09-04
		//cambie las dos lineas de abajo inputObj.value por letters 2007-08-21
		//Solo busca en la base si se tipean tantas letras como indique 
		//minimumLettersBeforeLookup, si se tipean mas letras 
		//se busca en el array cache el array de las primeras minimumLettersBeforeLookup
		//letras y en la funcion ajax_option_list_buildList solo se agregar
		//los items que coincidan con las letras tipeadas en el input 
		if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()]){
			ajax_option_list_buildList(letters,paramToExternalFile,inputObj);
				
		}else{
			var tmpIndex=currentListIndex/1;
			ajax_optionDiv.innerHTML = '';
			//test 2007-09-27
			ajax_option_list_buildListWait(inputObj);
			//fin test 2007-09-27
			var ajaxIndex = ajax_list_objects.length;
			ajax_list_objects[ajaxIndex] = new sack();
			var url = paramToExternalFile;
			ajax_list_objects[ajaxIndex].requestFile = url;	// Specifying which file to get
			ajax_list_objects[ajaxIndex].onCompletion = function(){ ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,tmpIndex,letters); };	// 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();			
		}
	}
	
	
	document.documentElement.onclick = autoHideList;
	
	function autoHideList(e)
	{
		if(document.all)e = event;
		
		if (e.target) source = e.target;
			else if (e.srcElement) source = e.srcElement;
			if (source.nodeType == 3) // defeat Safari bug
				source = source.parentNode;		
		if(source.tagName.toLowerCase()!='input' && source.tagName.toLowerCase()!='textarea')ajax_options_hide();
		
	}
	
	/*
	Funcion para poner en negrita las letras que coinciden
	con las tipeadas en el textbox, le paso el item
	original, el item en minuscula, y los caracteres
	*/
	function boldLetters(strOriginal,strToBold)
	{
	    var str = strOriginal.toLowerCase()
	    var result = '';
	    var i;
	    var startAt = str.indexOf(strToBold);
	    //si no encuentro coincidencia devuelvo el string sin poner 
	    //en bold
	    if (startAt == -1)
	        return strOriginal;
	    var endAt = startAt + strToBold.length - 1;
	    for(i=0;i<str.length;i++)
	    {
	        if (i>=startAt && i<=endAt)
	            result = result + '<b>' + strOriginal.charAt(i) + '</b>';     
	        else
	            result = result + strOriginal.charAt(i)         
	    }
	    return result;
	}
	
	function normalizeString(str)
    {
        var i;  
        var result = '';
        for(i=0;i<str.length;i++)
        {
            result = result + replaceCharacter(str.charCodeAt(i),str.charAt(i));
            //alert(str.charAt(i) + ' code ' + str.charCodeAt(i));
        }
        return result;       
    }
        
    function replaceCharacter(charCode,aChar)
    {
        
        if ( charCode == 225)
            return "a";
        
        if ( charCode == 233)
            return "e";
       
        if ( charCode == 237)
            return "i";        
        
        if ( charCode == 243)
            return "o";
       
        if ( charCode == 250)
            return "u";
        
        if ( charCode == 193)
            return "A";
       
        if ( charCode == 201)
            return "E";
        
        if ( charCode == 205)
            return "I";        
        
        if ( charCode == 211)
            return "O";
        
        if ( charCode == 218)
            return "U";        
      
        if ( charCode == 227)
               return "a";
        
        if ( charCode == 245)
               return "o";
        
        if ( charCode == 226)
               return "a";
        
        if ( charCode == 234)
               return "e";
               
        if ( charCode == 238)
               return "i";              
        
        if ( charCode == 244)
               return "o";            
        
        if ( charCode == 251)
               return "u";               
                    
        return aChar;                    
                    
    }
    
    function strCmp (str1, str2)
    {
        if ( str1 < str2 ) {
            return false;
        }
        else if ( str1 > str2 ) {
            return false;
        }
        else {
            return true;
        }
    }
    
    //test
    function ajax_option_list_buildListWait(inputObj)
	{
		
		ajax_optionDiv.innerHTML = '';
		ajax_list_activeItem = false;
		
		ajax_list_optionDivFirstItem = false;
		var optionsAdded = false;
					
	    optionsAdded = true;
	    var div = document.createElement('DIV');
	    div.innerHTML = 'Buscando Destinos...';
	    div.id = '';
	    div.className='optionDiv';
	    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='';
			ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
		}
					
	}