/* ****** */
/* 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 = "Ingrese 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 = "Ingrese 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";

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 = "&nbsp;&nbsp;";
   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("^\&nbsp;\&nbsp;(.*)","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
               {
                  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 + "&nbsp;'" + 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);
   //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();

