rendered paste body/* ****** */
/* Textos */
/* ****** */
var texts = new Array("es","pt");
texts["es"] = new Object();
texts["pt"] = new Object();
//textos en español
texts["es"].nowSearching = "Buscando ciudades...<br>(Siga escribiendo, o aguarde ver las opciones)";
texts["es"].moreCharsNeeded1 = "Escriba al menos las ";
texts["es"].moreCharsNeeded2 = " primeras letras de la ciudad,<br>y aguarde a ver los resultados.";
texts["es"].noResults = "No se encontraron ciudades<br>que contengan";
texts["es"].inputDefaultText = "Escriba la ciudad";
//textos en portugues
texts["pt"].nowSearching = "Procurando cidades...<br>(Continue escrevendo, ou agurade as opções)";
texts["pt"].moreCharsNeeded1 = "Digite pelo menos as ";
texts["pt"].moreCharsNeeded2 = " primeiras letras da cidade e aguarde para ver os resultados.";
texts["pt"].noResults = "Não foram encontradas cidades que contenham";
texts["pt"].inputDefaultText = "Digite a cidade";
/* ****************** */
/* Variables Globales */
/* ****************** */
var gDespegarAutCompLastLocatorId = null;
var gDespegarAutCompCompleterResults = {};
var gDespegarAutCompCompleterObjs = {};
var domainPath = "http://www.despegar.com.ar";
var overPopupAC = false;
var locator = new Object();
var globalac = new Object();
globalac.flights = {'fares':new Object(),'airlines':new Object(),'airports':new Object()};
globalac.whitelabel = {localVendors:{},airlineFilter:0};
//seteo el idioma por default en español (portuges = 'pt')
globalac.language = "es";
//configuraciones para el trigger de busqueda de resultado
globalac.initialWaitingTime = 1000;
globalac.minWaitingTime = 250;
globalac.minInputLength = 3;
/* ************************************ */
/* Objeto DespegarAutCompleter (inicio) */
/* ************************************ */
function DespegarAutCompCompleter(inputId, popupFunc, popdownFunc, popupid,
tabToId, callback, hiddenId, defaultText,
defaultValue)
{
this.locCode = null;
this.locDesc = null;
// internal vars
this.inputId = inputId;
this.hiddenId = hiddenId;
this.defaultText = defaultText;
this.defaultValue = defaultValue;
this.currentLocator = null;
this.completerTimeout = 0;
this.currentOption = -1;
this.nrOfOptions = 0;
this.popupFunc = popupFunc;
this.popdownFunc = popdownFunc;
this.popupid = popupid;
this.tabToId = tabToId;
this.callback = callback;
this.locked = false;
this.lockedtext = '';
// constantes
this.MAXOPTIONS = 15;
this.OPTION_FILLER = " ";
this.URL = domainPath + "/paginas/autoComplete/completer.aspx";
this.LOCATORID = "despegarautcomplocator";
gDespegarAutCompCompleterObjs[inputId] = this;
//pongo en blanco los campos, para prevenir F5 con datos basura
document.getElementById(this.inputId).value = "";
document.getElementById(this.hiddenId).value = "";
this.setCode = function(code)
{
this.locCode = code;
}
this.setDesc = function(desc)
{
var inp = document.getElementById(this.inputId);
inp.value = desc;
this.locDesc = new Object();
this.locDesc.y = desc;
this.locDesc.c = '';
this.locDesc.cc = '';
}
this.setLockedText = function(text)
{
this.lockedtext = text;
}
this.removeOptionFiller = function(option)
{
return option.replace(RegExp("^\ \ (.*)","ig"),"$1");
}
this.selectLocatorOption = function(nr, locator)
{
if (locator == null)
locator = document.getElementById(this.LOCATORID);
var inp = document.getElementById(this.inputId);
this.selectOption(locator.childNodes[nr].option, inp);
}
this.selectOption = function(option, inp)
{
inp.value = option?option.n:'';
this.locCode = this.removeOptionFiller(option?option.m:'');
this.locDesc = option;
//agrego tres parametros a la funcion de callback
//gabriel jurgens
if(this.callback)
this.callback(inp, option, hiddenId);
}
this.lowlight = function()
{
var bla = document.getElementById(this.LOCATORID);
if(this.currentOption >= 0 && bla.childNodes[this.currentOption] != "undefined")
bla.childNodes[this.currentOption].className = "locatoroption";
}
this.highlight = function(dir, update, scrollIntoView)
{
var bla = document.getElementById(this.LOCATORID);
if(this.currentOption >= 0 && this.nrOfOptions > 0)
bla.childNodes[this.currentOption].className = "locatoroption";
this.currentOption = this.currentOption + dir;
if(this.currentOption < 0)
this.currentOption = 0;
else if(this.currentOption >= bla.childNodes.length)
this.currentOption = bla.childNodes.length-1;
bla.childNodes[this.currentOption].className = "locatoroptionmo";
if (scrollIntoView)
{
if (scrollIntoView == 1) // down
bla.childNodes[this.currentOption].scrollIntoView(false);
else if (scrollIntoView == -1) // up
//le paso false, para que no salte toda la pagina
//bla.childNodes[this.currentOption].scrollIntoView(true);
bla.childNodes[this.currentOption].scrollIntoView(false);
}
if(update && this.nrOfOptions > 0) {
this.selectLocatorOption(this.currentOption, bla);
}
}
this.adjustLocatorHeight = function(locator,extra)
{
// check the locator height
var nr = (this.nrOfOptions) ? this.nrOfOptions+(extra?extra:0) : 1;
nr = (nr > this.MAXOPTIONS) ? this.MAXOPTIONS : nr;
var h = locator.firstChild.offsetHeight;
var ieExtraSpace = 3;
var pop = document.getElementById(this.popupid);
pop.style.height = h*nr + 3 + "px";
horzPosPopupAC();
setPopupCoverAC();
}
this.selectDefaultAirport = function(locator, shouldTab)
{
var tabToEl = null;
if (this.nrOfOptions && locator.childNodes.length > 0)
{
if (this.currentOption != -1)
{
this.selectLocatorOption(this.currentOption, locator);
}
else
{
this.selectLocatorOption(0, locator);
}
if (this.tabToId && shouldTab)
{
gDespegarAutCompLastLocatorId = null;
tabToEl = document.getElementById(this.tabToId);
}
} else {
if(document.getElementById(this.hiddenId).value.length != 3)
{
document.getElementById(this.inputId).value = texts[globalac.language].inputDefaultText;
document.getElementById(this.inputId).title = texts[globalac.language].inputDefaultText;
}
}
this.removeAllOptions();
this.popdownFunc();
if (tabToEl && tabToEl.select && getMouseOverCtrl() == '')
tabToEl.select();
}
// =============================
// Events handlers for the input
this.locatorkd = function(me, ev)
{
var locator = null;
var bla = document.getElementById(this.popupid);
if(bla.calledby != me)
{
this.popupFunc(me);
locator = document.getElementById(this.LOCATORID);
if (locator.firstChild == null)
{
nothing = document.createElement('DIV');
locator.appendChild(nothing);
nothing.innerHTML = "<span class=\"noresults\">" + texts[globalac.language].nowSearching + "</span>";
//mientras busco, vacio el codigo IATA. No hago nada si es un tab o un enter
ev=ev||event||null;
if (ev)
{
var cc=ev.charCode||ev.keyCode||ev.which;
if(cc != 9 && cc != 13) //tab, enter
{
document.getElementById(this.hiddenId).value = '';
}
}
this.adjustLocatorHeight(locator);
}
}
//catch tab dispense the rest to locator
ev=ev||event||null;
if (ev)
{
var cc=ev.charCode||ev.keyCode||ev.which;
if(cc == 9 || cc == 13) //tab, enter
{
if (locator == null)
locator = document.getElementById(this.LOCATORID);
this.selectDefaultAirport(locator, false);
return false;
}
else if(cc==38||cc==57385) //tecla hacia arriba
{
this.highlight(-1, true, -1);
return false;
}
else if(cc==40||cc==57386) //tecla hacia habajo
{
this.highlight(1, true, 1);
return false;
}
}
return true;
}
this.locatorkp = function(me, ev)
{
ev=ev||event||null;
if (ev)
{
var cc=ev.charCode||ev.keyCode||ev.which;
if (cc==38||cc==57385||cc==40||cc==57386) return false; //up or down
if (cc==13 && this.currentOption > -1)
{
this.selectLocatorOption(this.currentOption);
this.lowlight();
this.removeAllOptions();
popdownac(true);
}
}
return true;
}
this.locatorku = function(me, ev)
{
var bla = document.getElementById(this.popupid);
if(bla.calledby == me)
{
ev=ev||event||null;
if (ev)
{
var cc=ev.charCode||ev.keyCode||ev.which;
if (cc==38||cc==40||cc==57385||cc==57386||cc==13 || cc==27)
return false;
//si no tengo la cantidad minima de caracteres necesarios, salgo de la funcion
if(document.getElementById(this.inputId).value.length < globalac.minInputLength)
{
var locator = document.getElementById(this.LOCATORID);
if(locator.firstChild == null)
{
nothing = document.createElement('DIV');
locator.appendChild(nothing);
nothing.innerHTML = "<span class=\"noresults\">" + texts[globalac.language].moreCharsNeeded1 + globalac.minInputLength + texts[globalac.language].moreCharsNeeded2 + "</span>";
}
else
{
nothing = document.createElement('DIV');
this.removeAllOptions();
locator.appendChild(nothing);
nothing.innerHTML = "<span class=\"noresults\">" + texts[globalac.language].moreCharsNeeded1 + globalac.minInputLength + texts[globalac.language].moreCharsNeeded2 + "</span>";
this.adjustLocatorHeight(locator);
}
return false;
} else {
var locator = document.getElementById(this.LOCATORID);
if (this.nrOfOptions < 1)
if(locator.firstChild == null)
{
nothing = document.createElement('DIV');
locator.appendChild(nothing);
nothing.innerHTML = "<span class=\"noresults\">" + texts[globalac.language].nowSearching + "</span>";
}
else
{
nothing = document.createElement('DIV');
this.removeAllOptions();
locator.appendChild(nothing);
nothing.innerHTML = "<span class=\"noresults\">" + texts[globalac.language].nowSearching + "</span>";
this.adjustLocatorHeight(locator);
}
}
gDespegarAutCompLastLocatorId = me.id;
window.clearTimeout(this.completerTimeout);
if(cc!=8) //el backspace
{
//seteo el tiempo de espera inicial en un segundo.
//este tiempo se va a ir dividiendo por la cantidad de letreas ingresadas
//hasta llegar al minWaitingTime. Es decir que nunca esperara menos de minWaitingTime seg.
var inputLength = document.getElementById(this.inputId).value.length + 1
if (inputLength == 0) inputLength = 1;
var waitingTime = globalac.initialWaitingTime/inputLength;
if (waitingTime < globalac.minWaitingTime) waitingTime = globalac.minWaitingTime;
//waitingTime = 0;
}
else
{
waitingTime = globalac.minWaitingTime;
}
//alert(waitingTime);
//Set a new one
this.completerTimeout = window.setTimeout(despegarautcompCompleterGo, waitingTime);
}
}
return true;
}
this.locatormc = function(me, ev)
{
me.select();
}
this.locatorblur = function(me)
{
if (me.id != this.inputId)
return;
var locator = document.getElementById(this.LOCATORID);
if (locator == null)
{
return;
}
//para Internet Explorer, detecto los click en la barra de scroll en
//forma manual
if(navigator.appName == "Microsoft Internet Explorer")
{
//detecto si hizo click en la barra de scroll
var isScroll = false;
if(locator.childNodes.length > this.MAXOPTIONS)
{
var locatorDiv = document.getElementById(this.popupid);
var mouseX = window.event.clientX;
var mouseY = window.event.clientY;
var scrollBarWidth = 18;
var scrollBarRight = locatorDiv.clientLeft + locatorDiv.offsetLeft + locatorDiv.clientWidth;
var scrollBarLeft = scrollBarRight + scrollBarWidth;
var scrollBarTop = locatorDiv.clientTop + locatorDiv.offsetTop;
var scrollBarBottom = scrollBarTop + locatorDiv.clientHeight;
if(mouseX > scrollBarRight && mouseX < scrollBarLeft
&& mouseY > scrollBarTop && mouseY < scrollBarBottom)
{
isScroll = true;
}
else
{
isScroll = false;
}
}
if(!isScroll)
this.selectDefaultAirport(locator, true);
else
document.getElementById(this.inputId).focus();
}
else
{
//browser distinto de IExplorer
this.selectDefaultAirport(locator, true);
}
}
this.despegarautcompoptionmc = function(me, ev)
{
}
this.despegarautcompoptionmout = function()
{
this.lowlight();
this.className = "locatoroption";
this.currentOption = -1;
}
this.despegarautcompoptionmover = function(option)
{
this.lowlight();
this.currentOption = option.index;
this.highlight(0);
}
this.despegarautcompoptionmwheel = function(ev)
{
return true;
}
this.removeAllOptions = function()
{
var bla = document.getElementById(this.LOCATORID);
if (bla && bla.childNodes)
{
while (bla.childNodes.length)
{
bla.removeChild(bla.firstChild);
}
}
this.nrOfOptions = 0;
this.currentOption = -1;
}
this.loadLocked = function(txt)
{
var matches = [];
var one;
var utxt = txt.toUpperCase();
for(var i = 0; i < this.locked.length-1;i++)
{
one = this.locked[i];
if(one.m.toUpperCase().indexOf(utxt)==0 || one.y.toUpperCase().indexOf(utxt)==0)
matches[matches.length] = one;
}
if(matches.length>0)
despegarautcompShowOptions(txt,matches,this.inputId);
else
{
despegarautcompShowOptions(txt,this.locked,this.inputId);
var input = document.getElementById(this.inputId);
input.value = this.lockedtext;
input.select();
}
}
this.prepareInput = function(inputId)
{
var objInput = document.getElementById(inputId);
//seteo los eventos
objInput.onclick = function(event)
{
despegarautcomplocatormc(this,event);
}
objInput.onkeydown = function(event)
{
despegarautcomplocatorkd(this,event);
}
objInput.onkeyup = function(event)
{
despegarautcomplocatorku(this,event);
}
objInput.onkeypress = function(event)
{
despegarautcomplocatorkp(this,event);
}
objInput.onblur = function(event)
{
despegarautcomplocatorblur(this); popdownac();
}
//seto el texto del imput
if(this.defaultText != undefined && this.defaultValue != undefined
&& this.defaultText != '' && this.defaultValue != '')
{
objInput.value = this.defaultText;
objInput.title = this.defaultText;
document.getElementById(this.hiddenId).value = this.defaultValue;
}
else
{
objInput.value = texts[globalac.language].inputDefaultText;
}
//seto el texto del imput
if(this.defaultText != undefined && this.defaultValue != undefined
&& this.defaultText != '' && this.defaultValue != '')
{
objInput.value = this.defaultText;
objInput.title = this.defaultText;
document.getElementById(this.hiddenId).value = this.defaultValue;
}
else
{
//si solo mando un texto por default, lo seteo
if(this.defaultText != undefined && this.defaultText != '')
{
objInput.value = this.defaultText;
}
else
{
objInput.value = texts[globalac.language].inputDefaultText;
}
}
}
/* agrego el iFrame y Div auxiliar */
//createAuxiliarIframeAndDiv();
/* Seteo los eventos para el input */
this.prepareInput(inputId);
}
/* ********************************* */
/* Objeto DespegarAutCompleter (fin) */
/* ********************************* */
/* **************************************************** */
/* Funcion que prepara el imput para regular expresions */
/* **************************************************** */
function prepareInputForRegExp(input)
{
var tmpInput = "";
for(var i=0;i<input.length;i++)
{
switch(input.charAt(i))
{
case "a":
case "á":
case "A":
case "Á":
case "ã":
case "Ã":
case "â":
case "Â":
tmpInput += "[aáãâ]";
break;
case "e":
case "é":
case "E":
case "É":
case "ê":
case "Ê":
tmpInput += "[eéê]";
break;
case "i":
case "í":
case "I":
case "Í":
tmpInput += "[ií]";
break;
case "o":
case "ó":
case "O":
case "Ó":
case "õ":
case "Õ":
case "ô":
case "Ô":
tmpInput += "[oóõô]";
break;
case "u":
case "ú":
case "U":
case "Ú":
tmpInput += "[uú]";
break;
default:
tmpInput += input.charAt(i);
break;
}
}
return tmpInput;
}
/* **************************** */
/* Funcion de llamada del timer */
/* **************************** */
function despegarautcompCompleterGo()
{
var obj = gDespegarAutCompCompleterObjs[gDespegarAutCompLastLocatorId];
var bla = document.getElementById(gDespegarAutCompLastLocatorId);
if(bla)
{
var txt = bla.value;
//if(txt.length > 0)
if(txt.length >= globalac.minInputLength)
{
if(obj.locked)
obj.loadLocked(txt);
else
{
var cached = gDespegarAutCompCompleterResults[txt];
if(cached)
{
despegarautcompShowOptions(txt,cached, gDespegarAutCompLastLocatorId);
}
else
{
//si la la busqueda textual no se hizo, me fijo si no se hizo ya
//una busqueda mas amplia que contenga a la actual
for(var i = txt.length - 1; i > 0 && !cached; i--)
{
cached = gDespegarAutCompCompleterResults[txt.substr(0, i)];
}
if(cached)
{
//encontro una busqueda mas amplia, filtro el cache para mandar solo
//las conincidencias
var filteredCache = new Array();
var indexFilteredCache = 0;
for(var x = 0; x < cached.length; x++)
{
var tmpInput = "";
tmpInput = prepareInputForRegExp(txt);
//Creo la RegExp AccentInsensitive
var r1 = new RegExp("([(, ]" + tmpInput + ")","ig"); //busca en el comienzo de la palabra
var r2 = new RegExp("^(" + tmpInput + ")","i"); //busca en el principio del string
if(!(cached[x].n.match(r2) == null && cached[x].n.match(r1) == null && cached[x].m.match(r2) == null && cached[x].a.match(r1) == null && cached[x].a.match(r2) == null))
{
filteredCache[indexFilteredCache] = cached[x];
indexFilteredCache++;
}
}
gDespegarAutCompCompleterResults[txt] = filteredCache;
despegarautcompShowOptions(txt,filteredCache, gDespegarAutCompLastLocatorId);
}
else
{
//alert(globalac.language);
loadContentAC(domainPath + "/paginas/autoComplete/completer.aspx?lang=" + globalac.language + "&locator=" + gDespegarAutCompLastLocatorId + "&input=" + txt + '&');
}
}
}
}
}
}
/* ******************* */
/* Handlers de eventos */
/* ******************* */
function despegarautcomplocatorkd(me,ev)
{
var obj = gDespegarAutCompCompleterObjs[me.id];
obj.locatorkd(me, ev);
}
function despegarautcomplocatorkp(me, ev)
{
var obj = gDespegarAutCompCompleterObjs[me.id];
obj.locatorkp(me, ev);
}
function despegarautcomplocatorku(me, ev)
{
var obj = gDespegarAutCompCompleterObjs[me.id];
obj.locatorku(me, ev);
}
function despegarautcomplocatormc(me, ev)
{
var obj = gDespegarAutCompCompleterObjs[me.id];
obj.locatormc(me, ev);
}
function despegarautcomplocatorblur(me)
{
var obj = gDespegarAutCompCompleterObjs[me.id];
obj.locatorblur(me);
}
function despegarautcompoptionmc(ev)
{
//alert(despegarautcompoptionmc);
}
function despegarautcompoptionmout(ev)
{
ev=ev||window.event||null;
var targ = getEvTargetAC(ev);
var option = (targ.inputId) ? targ : targ.parentNode;
var obj = gDespegarAutCompCompleterObjs[option.inputId];
obj.despegarautcompoptionmout();
}
function despegarautcompoptionmover(ev)
{
ev=ev||window.event||null;
var targ = getEvTargetAC(ev);
var option = (targ.inputId) ? targ : targ.parentNode;
var obj = gDespegarAutCompCompleterObjs[option.inputId];
obj.despegarautcompoptionmover(option);
}
function despegarautcompoptionmwheel(ev)
{
ev=ev||window.event||null;
var targ = getEvTargetAC(ev);
var option = (targ.inputId) ? targ : targ.parentNode;
var obj = gDespegarAutCompCompleterObjs[option.inputId];
obj.despegarautcompoptionmwheel(ev);
}
/* *********************** */
/* Constructor de Opciones */
/* *********************** */
function despegarautcompShowOptions(input, matches, inputId)
{
var obj = gDespegarAutCompCompleterObjs[inputId];
// remove older results
obj.removeAllOptions();
var bla = document.getElementById(obj.LOCATORID);
var option,match,name;
if(bla)
{
if(matches.length > 0)
{
//Hago que la RegExp sea AccentInsensitive
//gabriel jurgens
//var r1 = new RegExp("([(, ]" + input + ")","ig"); //busca en el comienzo de la palabra
//var r2 = new RegExp("^(" + input + ")","i"); //busca en el principio del string
var tmpInput = "";
tmpInput = prepareInputForRegExp(input);
//Creo la RegExp AccentInsensitive
var r1 = new RegExp("([(, ]" + tmpInput + ")","ig"); //busca en el comienzo de la palabra
var r2 = new RegExp("^(" + tmpInput + ")","i"); //busca en el principio del string
for (var i=0; i < matches.length; i++ )
{
match = matches[i];
option = document.createElement('DIV');
bla.appendChild(option);
option.onmouseover = despegarautcompoptionmover;
option.onmouseout = despegarautcompoptionmout;
option.onmousewheel = despegarautcompoptionmwheel;
option.onclick = despegarautcompoptionmc;
option.className = "locatoroption";
option.index = i;
option.inputId = inputId;
name = match.n.replace(r1,"<b>$1</b>");
option.innerHTML = obj.OPTION_FILLER + name.replace(r2,"<b>$1</b>");
option.option = match;
}
obj.nrOfOptions = matches.length;
}
else //no results or default results
{
nothing = document.createElement('DIV');
bla.appendChild(nothing);
nothing.innerHTML = "<span class=\"noresults\">" + texts[globalac.language].noResults + " '" + input + "'</span>";
obj.nrOfOptions = 0;
}
obj.adjustLocatorHeight(bla);
}
else
{
//Possible that the user has tabbed out... If we have one match or the input was a three digit code
//with a matching option then we can enter it
if(gDespegarAutCompLastLocatorId)
{
var locinp = document.getElementById(gDespegarAutCompLastLocatorId);
if(locinp)
{
if(matches.length == 1)
{
return obj.selectOption(matches[0],locinp);
}
else if(matches.length > 1)
{
var ui = input.toUpperCase();
for(var i = 0;i < matches.length;i++)
{
if(matches[i].m.toUpperCase() == ui)
return obj.selectOption(matches[i],locinp);
}
}
//if we are here then make sure the user know nothing is selected:
obj.selectOption(null,locinp);
}
}
}
return '';
}
function despegarautcompBuildOptions(input, matches, inputId)
{
gDespegarAutCompCompleterResults[input] = matches;
//verifico el resultado sea valido todavia
if(input == document.getElementById(inputId).value)
despegarautcompShowOptions(input,matches,inputId);
}
/* ****************** */
/* Fuciones de PopUps */
/* ****************** */
function completerPopupWrapAC(inputEl)
{
popupac(inputEl, "locator",0,1);
}
function completerPopdownWrapAC()
{
popdownac(true);
}
function popdownac(force)
{
if(force || !overPopupAC)
{
var bla = document.getElementById("dapopupac");
bla.className = "popup";
bla.style.height = "";
if(bla.firstChild)
bla.removeChild(bla.firstChild);
bla.calledby = null;
currentLocator = null;
currentDateField = null;
currentProgress = null;
var cov = document.getElementById("dapopupcoverac");
cov.style.visibility = "hidden";
cov.style.display = "none";
}
}
function overpopupac()
{
overPopupAC = true;
}
function leavepopupac()
{
overPopupAC = false;
}
function clickpopupac()
{
var bla = document.getElementById("dapopupac");
}
function horzPosPopupAC()
{
var bla = document.getElementById("dapopupac");
var cx = findPosXAC(bla.calledby);
var x = alignac(bla.halign,cx,bla.calledby.offsetWidth, bla.offsetWidth);
if(!bla.fixed)
{
var r = clientRect();
var y = 0;
var c = contained({'l':x,'t':y,'r':x+bla.offsetWidth,'b':y+bla.offsetHeight},r);
if(c.axis == 'x')
{
//flip or nudge
if(bla.valign == 0 || bla.valign == 3)//flip to side
x = alignac(c.diff>0?1:2,cx,bla.calledby.offsetWidth, bla.offsetWidth);
else x += c.diff;
}
}
bla.style.left = x + "px";
}
function positionpopupac(p)
{
var bla = p?p:document.getElementById("dapopupac");
bla.style.visibility = "hidden";
bla.style.position = "absolute";
bla.style.display = "block";
if(bla.calledby)
{
var cx = findPosXAC(bla.calledby);
var cy = findPosYAC(bla.calledby);
var x = alignac(bla.halign,cx,bla.calledby.offsetWidth, bla.offsetWidth);
var y = alignac(bla.valign,cy,bla.calledby.offsetHeight,bla.offsetHeight);
/*
alert(cx + ':' + cy);
alert(x + ':' + y);
*/
//alert(bla.calledby.tagName);
//y = cy + 30
window.status = x + ':' + y + "|" + cx + ':' + cy + ' t:' + bla.valign + ' p:' + cy + ' whc:' + bla.calledby.offsetHeight + ' whp:' + bla.offsetHeight
if(!bla.fixed)
{
if (p.popFrame && p.popFrame != '' && document.getElementById(p.popFrame))
var r = elementRect(document.getElementById(p.popFrame));
else
var r = clientRect();
var c = contained({'l':x,'t':y,'r':x+bla.offsetWidth,'b':y+bla.offsetHeight},r);
if(c.axis == 'y') //x okay
{
//flip or nudge
if(bla.halign == 0 || bla.halign == 3)//flip up/down
y = alignac(c.diff>0?1:2,cy,bla.calledby.offsetHeight, bla.offsetHeight);
else y += c.diff
}
else if(c.axis == 'x') //y okay
{
//flip or nudge
if(bla.valign == 0 || bla.valign == 3)//flip to side
x = alignac(c.diff>0?1:2,cx,bla.calledby.offsetWidth, bla.offsetWidth);
else x += c.diff;
}
}
bla.style.left = x + "px";
bla.style.top = y + "px";
}
bla.style.visibility = "visible";
}
function setPopupCoverAC()
{
if(navigator.appName != "Microsoft Internet Explorer")
return;
var bla = document.getElementById("dapopupac");
var cov = document.getElementById("dapopupcoverac");
cov.style.display = "block";
cov.style.left = bla.style.left;
cov.style.top = bla.style.top;
cov.style.width = bla.offsetWidth;
cov.style.height = bla.offsetHeight;
cov.style.visibility = "visible";
}
function popupac(me, c, halign, valign, popFrame)
{
//p=popup, c=calledby
//halign: null|0-> p.left = c.left , 1-> p.left = c.right, 2->p.right = c.left, 3->p.right =c.right, 4-> p.left = c.middle,
//valign: null|0-> p.top = c.top, 1-> p.top = c.bottom, 2-> p.bottom = c.top, 3-> p.bottom = c.bottom, 4-> p.top = c.bottom
var bla = document.getElementById("dapopupac");
bla.noWrap = true;
if(bla.firstChild)
bla.removeChild(bla.firstChild);
if (c == "locator")
{
bla.appendChild(locator.contents);
currentLocator = me;
}
bla.halign = halign?halign:0;
bla.valign = valign?valign:0;
bla.fixed = (c=="locator"?true:false);
bla.popFrame = popFrame;
bla.calledby = me;
if (bla.className.indexOf(c) == -1)
{
bla.className = "popup "+c;
}
positionpopupac(bla);
setPopupCoverAC();
}
function findPosXAC(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curleft += obj.offsetLeft;
obj = obj.offsetParent;
}
}
else if (obj.x)
curleft += obj.x;
return curleft;
}
function findPosYAC(obj) {
var curtop = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curtop += obj.offsetTop;
obj = obj.offsetParent;
}
}
else if (obj.y)
curtop += obj.y;
return curtop;
}
function alignac(t,p,whc,whp)
{
//window.status = "t:"+ t + " p:" + p + " whc:" + whc + " whp:" + whp
if(t)
{
if(t == 0)
return p+400;
if(t == 1)
return p+whc;
if(t == 2)
return p-whp;
if(t == 3)
return p+whc-whp;
if (t == 4)
return Math.round(p+whc/2);
}
return p;
}
function createLocatorAC()
{
locator.contents = document.createElement("DIV");
locator.contents.id = "despegarautcomplocator";
}
function loadContentAC(file,suffix)
{
var head = document.getElementsByTagName('head').item(0)
var scriptId = 'loadScript'+(suffix?suffix:'');
var scriptTag = document.getElementById(scriptId);
//if(scriptTag) head.removeChild(scriptTag);
var script = document.createElement('script');
script.src = file;
script.name = "contentloader";
script.type = 'text/javascript';
script.id = scriptId;
head.appendChild(script)
return "";
}
function getEvTargetAC(ee)
{
var targ;
var e = ee;
if (!e) e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
return targ;
}
/* ******************** */
/* Fuciones de CallBack */
/* ******************** */
function airlineDestination(code)
{
var destlist = globalac.whitelabel.destinations;
for(var k in destlist)
{
if(code.toUpperCase().indexOf(destlist[k].m.toUpperCase()) >=0)
return true;
}
return false;
}
function forceLoc()
{
// only
if(globalac.whitelabel && globalac.whitelabel.destinations && globalac.whitelabel.destinations.length==0)
return;
var obj;
for(var k in gDespegarAutCompCompleterObjs)
{
obj = gDespegarAutCompCompleterObjs[k];
if(obj != this)
{
if(!airlineDestination(this.locCode)) //we are not local
{
//Need to reset the other picker for safety
if(obj.locCode&&(!airlineDestination(obj.locCode)))
{
obj.setCode(null);
}
obj.locked = globalac.whitelabel.destinations;
obj.setDesc('Select from one of the below');
}
else
obj.locked = null;
}
}
}
function airportSelected(objInput, option, hiddenId) {
if(option != null && option.m && document.getElementById(hiddenId))
{
document.getElementById(hiddenId).value = option.m.toUpperCase();
objInput.title = option.n;
}
else
if(document.getElementById(hiddenId))
{
document.getElementById(hiddenId).value = '';
objInput.value = texts[globalac.language].inputDefaultText;
objInput.title = texts[globalac.language].inputDefaultText;
}
}
/*
una vez que tengo el script cargado, llamo a la funcion de inicializacion
definida en el HTML. Si todavia no se cargo esa seccion del HTML, intento
initTries veces cada 500 milisegundos, hasta que se cargue.
*/
function initAutoComplete()
{
if(initTries > 0) {
try{
loadAutoComplete();
} catch(e) {
window.setTimeout(initAutoComplete, 500);
} finally {
initTries--;
}
} else {
//alert('Ocurrio un error al cargar la pagina\nPor favor, vuelva a intentarlo.\nGracias.');
}
}
function createAuxiliarIframeAndDiv()
{
if(!document.getElementById('dapopupcoverac'))
{
//creo el siguiente iframe en forma dinamica
//<iframe class="popupcover" id="dapopupcoverac" frameBorder="0" scrolling="no" style="display:none;"></iframe>
var objIframe = document.createElement('iframe');
objIframe.id = "dapopupcoverac";
objIframe.className = "popupcover";
objIframe.frameBorder = "0";
objIframe.scrolling = "no";
objIframe.style.display = "none"
document.body.appendChild(objIframe);
}
if(!document.getElementById('dapopupac'))
{
//creo el siguiente div en forma dinamica
//<div class="popup" id="dapopupac" onmouseover="overpopupac();" onmouseout="leavepopupac();" onclick="clickpopupac();" onscroll="clickpopupac();"></div>
var objDiv = document.createElement('div');
objDiv.id = "dapopupac";
objDiv.className = "popup";
//seteo los eventos
objDiv.onmouseover = function(event)
{
overpopupac();
}
objDiv.onmouseout = function(event)
{
leavepopupac();
}
objDiv.onclick = function(event)
{
clickpopupac();
}
objDiv.onscroll = function(event)
{
clickpopupac();
}
document.body.appendChild(objDiv);
}
}
var initTries = 1200;
initAutoComplete();