 buscador_actual='hoteles';//current
/** AutoSuggestControlwidth * Un control de caja de texto Autosugerencias.___ * @clase * @alcance público */
function AutoSuggestControl(oTextbox /*:ElementoInputHTML*/, 
                            oProvider /*:ProveedorSugerencias*/) { //string_ingresado
	this.cur /*:int*/ = -1; // Las sugerencias actualmente seleccionadas. @alcance privado
	this.layer = null; // La capa de la lista desplegable. @alcance privado
	this.provider /*:Proveedor de Sugerencias*/ = oProvider; // El proveedro de sugerencias para la característica "autosuggest". @alcance privado.
	this.textbox /*:ElementoInputHTML*/ = oTextbox; // La caja de texto a capturar. @alcance privado
	this.timeoutId /*:int*/ = null; // Timeout ID para escritura rápida. @alcance privado
	this.userText /*:String*/ = oTextbox.value; // El texto que el usuario ha escrito. @alcance privado
	this.id_ciudad = 0;
	this.init(); //inicializa el control
}
/** 
 * Autosugiere una o más sugerencias para lo que el usuario ha escrito.
 * Si no son pasadas sugerencias, entonces la autosugerencia no tiene lugar.
 * @alcance privado
 * @param aSuggestions Un array de strings de sugerencias.
 * @param bTypeAhead Si el control debe proveer una sugerencia "type ahead".
 */
AutoSuggestControl.prototype.autosuggest=function (aSuggestions /*:Array*/, bTypeAhead /*:boolean*/) {
	//re-inicializa el indicador a la sugerencia actual
    this.cur=-1;
	anterior1= null;
	anterior2= null;
	anterior3= null;
	anterior4= null;
	primera=1;
	idColorTeclado= null;
    //se asegura que haya almenos una sugerencia
    if(aSuggestions.length>0){
        if(bTypeAhead){
			array_ciudad_nombre=aSuggestions[0].split("___");
			nombre_ciudad_caja_de_texto=corregir_caracteres(array_ciudad_nombre[0]);
			this.typeAhead(nombre_ciudad_caja_de_texto); // ACA VA EL TEXTO DE LA CAJA DE TEXTO DEL SUGGEST
        }
        this.showSuggestions(aSuggestions);
    }else{
		this.hideSuggestions();
	}
};

/*** Crea la capa desplegable para mostrar múltiples sugerencias. * @alcance privado */
AutoSuggestControl.prototype.createDropDown=function(){
	//crea la capa y le asigna estilos
    this.layer=document.createElement("div");
    this.layer.className="suggestions";
    this.layer.style.visibility="hidden";
	this.layer.setAttribute('id', 'suggestions');
//	this.layer.style.width = this.textbox.offsetWidth; // Ancho de la lista de sugerencias
//	this.layer.style.width = 400;
//	this.layer.style.height = 160;
    document.body.appendChild(this.layer);
    //cuando el usuario pulsa en una sugerencia, obtiene el texto(innerHTML) y lo coloca en la caja de texto
    var oThis=this;
	this.layer.onmouseout =
	this.layer.onmousedown = 
    this.layer.onmouseup = 
    this.layer.onmouseover=function (oEvent){
		a='absolute';h='hidden';r='relative';v='visible';
        oEvent=oEvent || window.event;
        oTarget=oEvent.target || oEvent.srcElement;
		if (oEvent.type == "mousedown") {
			if(oEvent.clientX < (oThis.getLeft() + 380)){ // Calculo donde se presiona en la lista de sugerencias
				if(oTarget.firstChild.nodeValue){
					if(oTarget.parentNode.childNodes.length == 2){ // En el caso de que se clickee con el mouse
						oThis.textbox.value = oTarget.parentNode.childNodes[0].firstChild.nodeValue+oTarget.parentNode.childNodes[1].firstChild.nodeValue;
					}else{
						oThis.textbox.value = oTarget.parentNode.childNodes[0].firstChild.nodeValue+oTarget.parentNode.childNodes[1].firstChild.nodeValue+oTarget.parentNode.childNodes[2].firstChild.nodeValue;
					}
					ciu = oThis.textbox.value;
					ciu_str=ciu.split(","); // array_ciudad_seleccionada
					oThis.hideSuggestions();
					ciu_dat = oTarget.getAttribute('class').split("_"); // array_id_ciudad_fuente
					//alert(ciu_dat[4]);
					//alert(oTarget.getAttribute('class'));
					switch(buscador_actual){
						case 'aereos':
							switch(focus_del_suggest_aereos){
								case 'ciudad_desde':
									if(ciu_dat[5]!="")$('#ciudad_desde_aereos_buscador_principal').attr('value', ciu_dat[5]);
									else $('#ciudad_desde_aereos_buscador_principal').attr('value', ciu_dat[3]);
									$('#pais_desde_aereos_buscador_principal').attr('value', ciu_dat[4]);
									$('#ciudad_OrigenVuelo').attr('value', ciu_dat[3]);
								break;
								case 'ciudad_hasta':
									if(ciu_dat[5]!="")$('#ciudad_hasta_aereos_buscador_principal').attr('value', ciu_dat[5]);
									else $('#ciudad_hasta_aereos_buscador_principal').attr('value', ciu_dat[3]);
									$('#pais_hasta_aereos_buscador_principal').attr('value', ciu_dat[4]);
									$('#id_pais_fuenteVuelos').attr('value', ciu_dat[1]);
									$('#id_ciudad_selVuelos').attr('value', ciu_dat[0]);
									$('#ciudad_selVuelos').attr('value', ciu_dat[3]);
									//alert(ciu_dat[2]);
									$('#id_playa_selVuelos').attr('value', ciu_dat[2]);
								break;
							}
						break;
						case 'hoteles':
							$('#id_ciudad_sel').attr('value', ciu_dat[0]);
							$('#id_pais_fuente').attr('value',ciu_dat[1]);
							ciu=$('#caja_de_texto_pais_ciudad_hoteles_buscador').get(0).value;
							ciu_str=ciu.split(',');
							//alert(ciu_dat[0]);
							$('#ciudad_sel').attr('value',ciu_dat[3]);
							$('#id_playa_sel').attr('value',ciu_dat[2]);
							$('#idPaisBusHot').attr('value',ciu_dat[4]);
							$('#destinoVueloP').attr('value',ciu_dat[5]);
							// Habilitamos el calendario
							//$('#btn_fecha_desde_hoteles_buscador').css({'visibility':v,'position':r});
							//$('#btn_fecha_desde_hoteles_buscador_disable').css({'visibility':h,'position':a});
							//$('#btn_fecha_hasta_hoteles_buscador').css({'visibility':v,'position':r});
							//$('#btn_fecha_hasta_hoteles_buscador_disable').css({'visibility':h,'position':a});
						break;
						case 'destino':
							$('#id_ciudad_sel_destino').attr('value', ciu_dat[0]);
							$('#id_pais_fuente_sel_destino').attr('value', ciu_dat[1]);
							$('#ciudad_sel_destino').attr('value', ciu_str[0]);
							$('#id_playa_sel_destino').attr('value', ciu_dat[2]);
						break;
						case 'paquetes':
							$('#id_ciudad_sel_paquetes').attr('value', ciu_dat[0]);
							$('#id_pais_fuente_sel_paquetes').attr('value', ciu_dat[1]);
							$('#ciudad_sel_paquetes').attr('value', ciu_str[0]);
							$('#id_playa_sel_paquetes').attr('value', ciu_dat[2]);
							$('#destinoPaquetesP').attr('value',ciu_dat[5]);
							// Habilitamos el calendario
							//$('#btn_fecha_desde_paquetes_buscador').css({'visibility':v,'position':r});
							//$('#btn_fecha_desde_paquetes_buscador_disable').css({'visibility':h,'position':a});
							//$('#btn_fecha_hasta_paquetes_buscador').css({'visibility':v,'position':r});
							//$('#btn_fecha_hasta_paquetes_buscador_disable').css({'visibility':h,'position':a});
						break;
						case 'asistencia':
							$('#idCiudadSelAsistencia').attr('value', ciu_dat[0]);
							$('#idPaisFuenteSelAsistencia').attr('value', ciu_dat[1]);
							$('#ciudadSelAsistencia').attr('value', ciu_str[0]);
							$('#idPlayaSelAsistencia').attr('value', ciu_dat[2]);
							// Habilitamos el calendario
							$('#btn_fecha_desde_asistencia_buscador').css({'visibility':v,'position':r});
							$('#btn_fecha_desde_asistencia_buscador_disable').css({'visibility':h,'position':a});
							$('#btn_fecha_hasta_asistencia_buscador').css({'visibility':v,'position':r});
							$('#btn_fecha_hasta_asistencia_buscador_disable').css({'visibility':h,'position':a});
						break;
					}
					startDate=null;
					endDate=null;
				} // En la línea anterior guardo el ID de la ciudad seleccionada
			}
        } else if (oEvent.type == "mouseover") {
			if(oTarget.firstChild.nodeValue != null){
				idDiv1 = oTarget.getAttribute('id');
				idDiv2 = '2'+idDiv1.substring(1,idDiv1.length);
				idDiv3 = oTarget.getAttribute('id');
				idDiv4 = '3'+idDiv1.substring(1,idDiv3.length);
				if(primera == 1 && idColorTeclado != null){
					//alert(idColorTeclado);
					//alert(document.getElementById(idColorTeclado).className);
					document.getElementById(idColorTeclado).className='';
					primera++;
				}
				if(anterior1 != null){
					oThis.highlightSuggestion(idDiv1,idDiv2);
					oThis.highlightSuggestion(idDiv3,idDiv4);
					oThis.turnofflightSuggestion(anterior1,anterior2);
					oThis.turnofflightSuggestion(anterior3,anterior4);
				}
				anterior1= idDiv1;
				anterior2= idDiv2;
				anterior3= idDiv3;
				anterior4= idDiv4;
			}
        }else{oThis.textbox.focus();}
    };
};

/*** Obtiene la coordenada izquierda de la caja de texto. * @alcance privado
 * @devuelve la coordenada izquierda de la caja de texto en píxeles. */
AutoSuggestControl.prototype.getLeft = function () /*:int*/ {
	var oNode = this.textbox;
	var iLeft = 0;
	while(oNode.tagName != "BODY") {
		iLeft += oNode.offsetLeft;
		if(oNode.offsetParent == null){
			break;
		}
		oNode = oNode.offsetParent;
	}
    return iLeft;
};

/*** Obtiene la coordenada top de la caja de texto. * @alcance privado
	 * @devuelve la coordenada Top de la caja de texto en píxeles. */
AutoSuggestControl.prototype.getTop = function () /*:int*/ {
    var oNode = this.textbox;
    var iTop = 0;
    while(oNode.tagName != "BODY") {
        iTop += oNode.offsetTop;
		if(oNode.offsetParent == null){
			break;
		}
        oNode = oNode.offsetParent;
    }
    return iTop;
};

/*** Remarca la sugerencia siguiente o previa en la lista desplegable y coloca la sugerencia en la caja de texto.
	* @param iDiff bien un número positivo o negativo indicando si selecciona la sugerencia siguiente o previa, respectivamente.
	* @alcance privado */
AutoSuggestControl.prototype.goToSuggestion = function (iDiff /*:int*/) {
	var cSuggestionNodes = this.layer.childNodes;
	if(cSuggestionNodes.length > 0){
        var oNode=null;
        if(iDiff > 0){
            if(this.cur < (cSuggestionNodes.length-1)){
				oNode=cSuggestionNodes[++this.cur];
			}
		}else{
            if(this.cur > 0){oNode=cSuggestionNodes[--this.cur];}
        }
        if(oNode){
			this.highlightSuggestion2(oNode);
//            this.textbox.value = oNode.firstChild.nodeValue;
			if(oNode.childNodes.length == 2){ // En el caso de que se clickee con el mouse
				this.textbox.value = oNode.childNodes[0].childNodes[0].nodeValue+oNode.childNodes[1].childNodes[0].nodeValue;
			} else {
				this.textbox.value = oNode.childNodes[0].childNodes[0].nodeValue+oNode.childNodes[1].childNodes[0].nodeValue+oNode.childNodes[2].childNodes[0].nodeValue;
			}
//			alert(oNode.getAttribute('id'));
//			this.id_ciudad = oNode.getAttribute('class');
			this.id_ciudad = oNode.getAttribute('id').substr(1);
			idColorTeclado = '1'+oNode.getAttribute('id').substr(1);
        }
    }
};

/*** Maneja tres eventos de pulsación de teclado. * @alcance privado
	 * @param oEvent el objeto evento para el evento pulsar tecla teclado. */
AutoSuggestControl.prototype.handleKeyDown = function (oEvent /*:Event*/) {
	a='absolute';h='hidden';r='relative';v='visible';
	switch(oEvent.keyCode) {
        case 38:
			this.goToSuggestion(-1);break;//flecha arriba
        case 40:
			this.goToSuggestion(1);break;//flecha abajo
        case 27: //escape
            this.textbox.value = this.userText;
            this.selectRange(this.userText.length, 0);
			this.hideSuggestions();
            oEvent.returnValue = false;
            if (oEvent.preventDefault)oEvent.preventDefault();
			break;
        case 13: //enter
			if(this.id_ciudad != 0){ // En el caso de que no se haya presionado enter en la caja de texto y si en la lista
				ciu_dat = this.id_ciudad.split("_");//array_id_ciudad_fuente
				switch(buscador_actual) {
					case 'aereos':
						switch(focus_del_suggest_aereos){
							case 'ciudad_desde':
								if(ciu_dat[1]!="")$('#ciudad_desde_aereos_buscador_principal').attr('value', ciu_dat[1]);
								else $('#ciudad_desde_aereos_buscador_principal').attr('value', ciu_dat[3]);
								$('#pais_desde_aereos_buscador_principal').attr('value', ciu_dat[4]);
							break;
							case 'ciudad_hasta':
								if(ciu_dat[1]!="")$('#ciudad_hasta_aereos_buscador_principal').attr('value', ciu_dat[1]);
								else $('#ciudad_hasta_aereos_buscador_principal').attr('value', ciu_dat[3]);
								$('#pais_hasta_aereos_buscador_principal').attr('value', ciu_dat[4]);
							break;
						}
					break;
					case 'hoteles':
						$('#id_ciudad_sel').attr('value', ciu_dat[0]);
						$('#id_pais_fuente').attr('value',ciu_dat[1]);
						ciu=$('#caja_de_texto_pais_ciudad_hoteles_buscador').get(0).value;
						ciu_str=ciu.split(',');
						$('#ciudad_sel').attr('value',ciu_dat[3]);
						$('#id_playa_sel').attr('value',ciu_dat[2]);
						$('#idPaisBusHot').attr('value',ciu_dat[4]);
						// Habilitamos el calendario
						//$('#btn_fecha_desde_hoteles_buscador').css({'visibility':v,'position':r});
						//$('#btn_fecha_desde_hoteles_buscador_disable').css({'visibility':h,'position':a});
						//$('#btn_fecha_hasta_hoteles_buscador').css({'visibility':v,'position':r});
						//$('#btn_fecha_hasta_hoteles_buscador_disable').css({'visibility':h,'position':a});
					break;
					case 'destino':
						$('#id_ciudad_sel_destino').attr('value',ciu_dat[0]);
						$('#id_pais_fuente_sel_destino').attr('value',ciu_dat[1]);
						ciu=$('#caja_de_texto_pais_ciudad_hoteles_buscador').get(0).value;
						ciu_str=ciu.split(',');
						$('#ciudad_sel_destino').attr('value',ciu_str[0]);
						$('#id_playa_sel_destino').attr('value',ciu_dat[2]);
					break;
					case 'paquetes':
						$('#id_ciudad_sel_paquetes').attr('value',ciu_dat[0]);
						$('#id_pais_fuente_sel_paquetes').attr('value',ciu_dat[1]);
						ciu=$('#caja_de_texto_pais_ciudad_hoteles_buscador').get(0).value;
						ciu_str=ciu.split(',');
						
						$('#ciudad_sel_paquetes').attr('value',ciu_str[0]);
						$('#id_playa_sel_paquetes').attr('value',ciu_dat[2]);
						// Habilitamos el calendario
						//$('#btn_fecha_desde_paquetes_buscador').css({'visibility':v,'position':r});
						//$('#btn_fecha_desde_paquetes_buscador_disable').css({'visibility':h,'position':a});
						//$('#btn_fecha_hasta_paquetes_buscador').css({'visibility':v,'position':r});
						//$('#btn_fecha_hasta_paquetes_buscador_disable').css({'visibility':h,'position':a});
						// Habilitamos el calendario
					break;
					case 'asistencia':
						$('#idCiudadSelAsistencia').attr('value',ciu_dat[0]);
						$('#idPaisFuenteSelAsistencia').attr('value',ciu_dat[1]);
						ciu=$('#caja_de_texto_pais_ciudad_hoteles_buscador').get(0).value;
						ciu_str=ciu.split(',');
						$('#ciudadSelAsistencia').attr('value',ciu_str[0]);
						$('#idPlayaSelAsistencia').attr('value',ciu_dat[2]);
						// Habilitamos el calendario
						$('#btn_fecha_desde_asistencia_buscador').css({'visibility':v,'position':r});
						$('#btn_fecha_desde_asistencia_buscador_disable').css({'visibility':h,'position':a});
						$('#btn_fecha_hasta_asistencia_buscador').css({'visibility':v,'position':r});
						$('#btn_fecha_hasta_asistencia_buscador_disable').css({'visibility':h,'position':a});
					break;
				}
				startDate=null;
				endDate=null;
				this.hideSuggestions();
				oEvent.returnValue = false;
				if(oEvent.preventDefault){oEvent.preventDefault();}
			}
		break;
    }
};

/*** Maneja eventos Soltar tecla. * @alcance privado * @param oEvent el objeto evento para el evento keyup. */
AutoSuggestControl.prototype.handleKeyUp = function (oEvent /*:Event*/) {
	a='absolute';h='hidden';r='relative';v='visible';
    var iKeyCode = oEvent.keyCode;
    var oThis = this;
    this.userText = this.textbox.value; //obtiene el texto actualmente escrito
	clearTimeout(this.timeoutId);
	//para retroceso (8) and borrar (46), muestra sugerencias sin typeahead
    if (iKeyCode == 8 || iKeyCode == 46) {
		this.timeoutId = setTimeout( function () {
			oThis.provider.requestSuggestions(oThis, false);
		}, 500); //250
		//se asegura que no interfiere con teclas no-carácter
	} else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode < 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
	//ignora
	} else {
		//pide sugerencias al proveedor de sugerencias con typeahead
		this.timeoutId = setTimeout( function () {
			oThis.provider.requestSuggestions(oThis, true);
		}, 500);//250
	}
	if(iKeyCode != 13){ // Si el usuario ingreso texto con el teclado
		strSelNocDes='<div class="estilo_noches_aereos">Noches:</div><select alt="DEBE SELECCIONAR LA FECHA DESDE" title="DEBE SELECCIONAR LA FECHA DESDE" disabled="disabled" class="estilo_caja_texto_noches" ><option>0</option></select>';
		switch(buscador_actual){
			case 'aereos':
				switch(focus_del_suggest_aereos){
					case 'ciudad_desde':
						$('#ciudad_desde_aereos_buscador_principal').attr('value','');
					break;
					case 'ciudad_hasta':
						$('#ciudad_hasta_aereos_buscador_principal').attr('value','');
					break;
				}
			break;
			case 'hoteles':
				$('#id_ciudad_sel').attr('value', 0);
				// Desabilitamos el calendario
				//$('#caja_de_texto_fecha_desde_hoteles_buscador').attr('value', 'dd/mm/aaaa');
				//$('#caja_de_texto_fecha_hasta_hoteles_buscador').attr('value', 'dd/mm/aaaa');
				//$('#btn_fecha_desde_hoteles_buscador').css({'visibility':h,'position':a});
				//$('#btn_fecha_desde_hoteles_buscador_disable').css({'visibility':v,'position':r});
				//$('#btn_fecha_hasta_hoteles_buscador').css({'visibility':h,'position':a});
				//$('#btn_fecha_hasta_hoteles_buscador_disable').css({'visibility':v,'position':r});
				//$('#canNochesBusHot').html(strSelNocDes);
			break;
			case 'destino':
				$('#id_ciudad_sel_destino').attr('value', 0);
			break;
			case 'paquetes':
				//$('#id_ciudad_sel_paquetes').attr('value', 0);
				//$('#caja_de_texto_fecha_desde_paquetes_buscador').attr('value', 'dd/mm/aaaa');
				//$('#caja_de_texto_fecha_hasta_paquetes_buscador').attr('value', 'dd/mm/aaaa');
				//$('#btn_fecha_desde_paquetes_buscador').css({'visibility':h,'position':a});
				//$('#btn_fecha_desde_paquetes_buscador_disable').css({'visibility':h,'position':a});
				//$('#btn_fecha_hasta_hoteles_buscador').css({'visibility':h,'position':a});
				//$('#btn_fecha_hasta_paquetes_buscador_disable').css({'visibility':v,'position':r});
				$('#canNochesBusPaq').html(strSelNocDes);
			break;
			case 'asistencia':
				$('#idCiudadSelAsistencia').attr('value', 0);
				// Desabilitamos el calendario
				$('#caja_de_texto_fecha_desde_asistencia_buscador').attr('value','dd/mm/aaaa');
				$('#caja_de_texto_fecha_hasta_asistencia_buscador').attr('value','dd/mm/aaaa');
				$('#btn_fecha_desde_asistencia_buscador').css({'visibility':h,'position':a});
				$('#btn_fecha_desde_asistencia_buscador_disable').css({'visibility':v,'position':r});
				$('#btn_fecha_hasta_asistencia_buscador').css({'visibility':h,'position':a});
				$('#btn_fecha_hasta_asistencia_buscador_disable').css({'visibility':v,'position':r});
				$('#canNochesBusAsi').html(strSelNocDes);
			break;
		}
	}
};

/*** Oculata la lista desplegable de sugerencias. * @alcance privado */
AutoSuggestControl.prototype.hideSuggestions = function () {
    this.layer.style.visibility = "hidden";
};

/*** Remarca el nodo dado en la lista desplegable de sugerencias. * @scope private
	 * @param oSuggestionNode El nodo representando una sugerencia en la lista desplegable. */
AutoSuggestControl.prototype.highlightSuggestion2 = function (oSuggestionNode) {
    for (var i=0; i < this.layer.childNodes.length; i++) {
        var oNode = this.layer.childNodes[i];
        if (oNode == oSuggestionNode) {
            oNode.className = "current"
        } else if (oNode.className == "current") {
            oNode.className = "";
        }
    }
};

AutoSuggestControl.prototype.highlightSuggestion = function (idParaIluminar1,idParaIluminar2) {
	document.getElementById(idParaIluminar1).style.backgroundColor='#3366cc';
	document.getElementById(idParaIluminar2).style.backgroundColor='#3366cc';
	
};

AutoSuggestControl.prototype.turnofflightSuggestion = function (idParaApagar1,idParaApagar2) {
	document.getElementById(idParaApagar1).style.backgroundColor='#FFFFFF';
	document.getElementById(idParaApagar2).style.backgroundColor='#FFFFFF';
	
};

/*** Inicializa la caja de texto con gestores de evento para la funcionalidad auto sugerencia. * @alcance privado */
AutoSuggestControl.prototype.init = function () {
	var oThis = this; //salva una referencia a este objeto
	this.textbox.onkeyup = function (oEvent) { //asigna el gestor de evento onkeyup
		if (!oEvent) { //comprueba la localización apropiada del objeto evento
			oEvent = window.event;
		}    
		oThis.handleKeyUp(oEvent); //llama al método handleKeyUp() con el objeto evento
	};
	this.textbox.onkeydown = function (oEvent) { //asigna gestor de evento onkeydown
		if (!oEvent) { //comprueba la localización apropiada del objeto evento
			oEvent = window.event;
		}
		oThis.handleKeyDown(oEvent); //llama al método handleKeyDown() con el objeto evento
	};
	this.textbox.onblur = function () { //asigna el gestor de evento onblur (oculta sugerencias)
		if(oTarget.firstChild.nodeValue != null){
			oThis.hideSuggestions();
		}
	};
	this.createDropDown(); //crea la lista desplegable de sugerencias
};

/*** Selecciona un rango de texto en la caja de texto. * @alcance público
	 * @param iStart El índice de inicio (base 0) de la selección. * @param iEnd El índice final de la selección. */
AutoSuggestControl.prototype.selectRange = function (iStart /*:int*/, iEnd /*:int*/) {
    //usar rangos de texto para Internet Explorer
    if (this.textbox.createTextRange) {
        var oRange = this.textbox.createTextRange(); 
        oRange.moveStart("character", iStart); 
        oRange.moveEnd("character", iEnd - this.textbox.value.length);      
        oRange.select();
    } else if (this.textbox.setSelectionRange) { //usar setSelectionRange() for Mozilla
        this.textbox.setSelectionRange(iStart, iEnd);
    }     
    this.textbox.focus(); //configurar focus de vuelta a la caja de texto
}; 

/*** Construye el contenido de la capa de sugerencias, lo coloca correctamente, y muestra la capa. * @alcance privado
	 * @param aSuggestions Un array de sugerencias para el control. */
AutoSuggestControl.prototype.showSuggestions = function (aSuggestions /*:Array*/) {
	var oDiv = null;
    this.layer.innerHTML = "";  //limpiar contenidos de la capa
    for (var i=0; i < aSuggestions.length; i++) {
//		alert(aSuggestions[i]);
		array_ciudad_nombre_id = aSuggestions[i].split("___");
		nombre_ciudad = array_ciudad_nombre_id[0];
		nombre_ciudad = corregir_caracteres(nombre_ciudad);
		id_ciudad = array_ciudad_nombre_id[1];
		id_pais_fuente = array_ciudad_nombre_id[2];
		id_playa = array_ciudad_nombre_id[4];
		nombre_ciudad_sola = array_ciudad_nombre_id[5];
		id_pais= array_ciudad_nombre_id[6];
		oDiv = document.createElement("div");
//		oDiv.style.border = '1px solid #FFFF00';//width.value
		oDiv2 = document.createElement("div");
		oDiv3 = document.createElement("div");
		oDiv4 = document.createElement("div");
		if(array_ciudad_nombre_id.length != 1){
			string_ingresado=array_ciudad_nombre_id[3];
			pos_str_ingresado=nombre_ciudad.indexOf(string_ingresado);
			if(pos_str_ingresado == 0){
				segundo_string=nombre_ciudad.substring(string_ingresado.length);
				oDiv2.appendChild(document.createTextNode(string_ingresado));
				oDiv2.style.float='left';
				oDiv2.style.width='auto';
				oDiv2.style.padding='2px 1px;';
				oDiv2.style.fontWeight='bold';
				oDiv2.style.color='#009933';
				oDiv2.style.borderBottom='#009933 1px solid';
				oDiv2.style.cursor='pointer';
				//oDiv2.style.backgroundColor='#FFFFFF';
				oDiv3.appendChild(document.createTextNode(segundo_string));
				oDiv3.style.width='auto';
				oDiv3.style.padding='2px 1px;';
				oDiv3.style.cursor='pointer';
				//oDiv3.style.backgroundColor='#FFFFFF';
				oDiv.appendChild(oDiv2);
				oDiv.appendChild(oDiv3);
			} else {
				primer_string=nombre_ciudad.substring(0,pos_str_ingresado);
				tercero_string=nombre_ciudad.substring(pos_str_ingresado + string_ingresado.length);
				oDiv2.appendChild(document.createTextNode(primer_string));
				oDiv2.style.float='left';
				oDiv2.style.width='auto';
				oDiv2.style.padding='2px 1px;';
				oDiv2.style.cursor='pointer';
				//oDiv2.style.backgroundColor='#FFFFFF';
				oDiv3.appendChild(document.createTextNode(string_ingresado));
				oDiv3.style.fontWeight='bold';
				oDiv3.style.width='auto';
				oDiv3.style.padding='2px 2px;';
				oDiv3.style.color='#009933';
				oDiv3.style.borderBottom='#009933 1px solid';
				oDiv3.style.cursor='pointer';
				//oDiv3.style.backgroundColor='#FFFFFF';
				oDiv4.appendChild(document.createTextNode(tercero_string));
				oDiv4.style.width='auto';
				oDiv4.style.padding='5px';
				oDiv4.style.cursor='pointer';
				oDiv.appendChild(oDiv2);
				oDiv.appendChild(oDiv3);
				oDiv.appendChild(oDiv4);
			}
		}else{oDiv.appendChild(document.createTextNode(aSuggestions[i]));}
//		oDiv.appendChild(document.createTextNode(aSuggestions[i]));// ACA VA EL TEXTO EN LA LISTA SUGGEST
		/*oDiv.setAttribute('class', 'class1_'+nombre_ciudad_sola+'_'+i); // id_ciudad_seleccionada
		oDiv.setAttribute('id', 'div1_'+nombre_ciudad_sola+'_'+i);
		oDiv2.setAttribute('class', 'class2_'+nombre_ciudad_sola+'_'+i); // id_ciudad_seleccionada
		oDiv2.setAttribute('id', 'div2_'+'div3_'+nombre_ciudad_sola+'_'+i);
		oDiv3.setAttribute('class', 'class3_'+nombre_ciudad_sola+'_'+i); // id_ciudad_seleccionada
		oDiv3.setAttribute('id', 'div3_'+nombre_ciudad_sola+'_'+i);
		oDiv4.setAttribute('class', 'class4_'+nombre_ciudad_sola+'_'+i); // id_ciudad_seleccionada
		oDiv4.setAttribute('id', 'div4_'+nombre_ciudad_sola+'_'+i);
//		oDiv.appendChild(document.createTextNode(nombre_ciudad));*/
//		oDiv.setAttribute('id', id_ciudad+'_'+id_pais_fuente); // id_ciudad_seleccionada
		oDiv.setAttribute('class', id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais); // id_ciudad_seleccionada
		oDiv.setAttribute('id', '1'+id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais);
		oDiv2.setAttribute('class', id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais); // id_ciudad_seleccionada
		oDiv2.setAttribute('id', '2'+id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais);
		oDiv3.setAttribute('class', id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais); // id_ciudad_seleccionada
		oDiv3.setAttribute('id', '3'+id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais);
		oDiv4.setAttribute('class', id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais); // id_ciudad_seleccionada
		oDiv4.setAttribute('id', '4'+id_ciudad+'_'+id_pais_fuente+'_'+id_playa+'_'+nombre_ciudad_sola+'_'+id_pais);

		this.layer.appendChild(oDiv);
    }
    this.layer.style.left = this.getLeft() + "px"; // Posisión izquierda de la lista de sugerencias
    this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
    this.layer.style.visibility = "visible";
	
};

/*** Inserta una sugerencia en la caja de texto, remarcando la parte sugerida del texto. * @alcance privado
	 * @param sSuggestion La sugerencia para la caja de texto. */
AutoSuggestControl.prototype.typeAhead = function (sSuggestion /*:String*/) {
    if (this.textbox.createTextRange || this.textbox.setSelectionRange){ //comprueba soporte para la funcionalidad typeahead
        var iLen = this.textbox.value.length; 
        this.textbox.value = sSuggestion;
        this.selectRange(iLen, sSuggestion.length);
    }
};

/*** Provee sugerencias para nombres de Provincias. * @clase * @alcance público */
function SuggestionProvider(){this.http = zXmlHttp.createRequest();}

/*** Pide sugerencias para el control de autosugerencias dado. * @alcance protegido
	 * @param oAutoSuggestControl El control autosuggest para el que proveer sugerencias. */
SuggestionProvider.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
                                                            bTypeAhead /*:boolean*/) {
	var oHttp = this.http;
    if(oHttp.readyState != 0){oHttp.abort();}//cancela cualquier petición activa
    var oData = { //define los datos
        requesting: "Provincias", 
        text: oAutoSuggestControl.userText,
        limit: 9,
		idpaiselist: document.getElementById('id_pais_seleccionado').value
    };
	if(pagina == 'home'){
		if(buscador_actual=='aereos'){
			oHttp.open("post", "../includes/suggestions.php?aereos=1", true);//abre conexión al servidor
		}else{
			oHttp.open("post", "../includes/suggestions.php", true);//abre conexión al servidor
		}
	}else{oHttp.open("post", "/includes/suggestions.php", true);}
    oHttp.onreadystatechange = function () {
        if (oHttp.readyState == 4) {
            var aSuggestions = JSON.parse(oHttp.responseText); //evalúa el texto JavaScript devuelto(un array)
            oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead); //provee sugerencias al control
        }    
    };
    oHttp.send(JSON.stringify(oData)); //envía la petición
};
