/*

Panel + subPanel constructors

----------------------------------------------*/

var allPanels = [];

var counter = 0;

var pairIndex = 0;



function panel(pair) {

  if(document.getElementById && document.getElementsByTagName) {

    this.subPanels = [];

    for(var i=0; i<pair.length; i++) {

      allPanels[allPanels.length] = new SubPanel(pair[i][0], pair[i][1], pair[i][2], pair[i][3], pairIndex, counter);

      this.subPanels[this.subPanels.length] = allPanels[allPanels.length - 1];

      counter += 1;

    }

    pairIndex += 1;

  }

}



function SubPanel(targetId, title, hiddenId, type, pIndex, theCount) {

  this.target = document.getElementById(targetId);

  this.title = (title.length == 3 && typeof(eval("s" + title)) == "string") ? eval("s" + title) + " (" + title + ")" : title;

  this.titleTemp = this.title;

  this.anchorId = targetId + "_anchor";

  this.hiddenId = hiddenId;

  this.inputName = "panInput_" + theCount;

  this.panelId = targetId + "_panel";

  this.type = type;

  this.cFlag = false;

  this.pIndex = pIndex;

  this.kbIndex = -1;

  this.pos = theCount; var holder = theCount;

 try
 {
  this.target.onmouseover = function() { allPanels[holder].cFlag = true; };
}
catch(err)
{
	
}
try
  {
  this.target.onmouseout = function() { allPanels[holder].cFlag = false; };
}
catch(err)
{
 	
}
  this.set = Dests;

  this.searchSet = Dests;

  this.selectedItem = null;

  this.render = render;

  var self = this;



  var pWrapper = document.createElement("div");

  pWrapper.className = (type == 0) ? "panelWrapper panelWrapperZ" : "panelWrapper";



  var anchor = document.createElement("a");

  anchor.id = self.anchorId;

  anchor.onclick = function(e) {

    if(!e) e = window.event;

    e.cancelBubble = true;

    showPanel(self);

    document.getElementById(self.inputName).focus();

  };



  var jsInput = document.createElement("div");

  jsInput.className = "jsInput";



  var input = document.createElement("input");

  input.type = "text";

  input.id = self.inputName;

  input.name = self.inputName;

  input.value = self.title;

  input.setAttribute("autocomplete", "off");

  input.onfocus = function() {

    if(this.setSelectionRange)

      this.setSelectionRange(0, this.value.length);

    else

      this.select();



    showPanel(self);

  };

  input.onkeypress = function(e) {

    if(!e) e = window.event;

    if(e.keyCode==13)

      return false;

  };

  input.onkeyup = function(e) {

    autoComplete(this, self, e);

  }

  input.onkeydown = function(e) {

    self.titleTemp = document.getElementById(self.inputName).value;

    kbListener(self, e);

  };



  jsInput.appendChild(input);

  anchor.appendChild(jsInput);

  pWrapper.appendChild(anchor);



  var p = document.createElement("div");

  p.id = self.panelId;

  p.className = "panel";

  p.onclick = function(e) {

    if(!e) e = window.event;

    var target = e.target ? e.target.nodeName.toLowerCase() : e.srcElement.nodeName.toLowerCase();

    if(target == "li" || target == "div" || target == "ul" || target == "h5")

      document.getElementById(self.inputName).focus();

  };



  var pbody = document.createElement("div");

  pbody.className = "panelBody";



  var pfoot = document.createElement("div");

  pfoot.className = "panelFoot";
  


  var pfootInnerDiv = document.createElement("div");
  

  var closeAnchor = document.createElement("a");

  closeAnchor.href = "javascript:void(0)";



  closeAnchor.onclick = function() {

    hidePanel(self);

  };



  var closeBtn = document.createElement("img");

  closeBtn.src = "../images/SB/button_close.jpg";
  
  closeBtn.alt="Close" ;
  closeBtn.name="Image7"; 
  closeBtn.width="53" ;
  closeBtn.height="21" ;
  closeBtn.hspace="0" ;
  closeBtn.vspace="4" ;
  closeBtn.border="0" ;
  closeBtn.id="Image7";
  
  
  closeBtn.setAttribute('style','margin-bottom: 0px')

   closeAnchor.onmouseout = function() 
   {
   	closeBtn.src = "../images/SB/button_close.jpg";
  };
  
  closeAnchor.onmouseover = function() 
  {
   closeBtn.src = '../images/SB/button_close_f2.jpg';

  };





  closeAnchor.appendChild(closeBtn);

  pfootInnerDiv.appendChild(closeAnchor);

  pfoot.appendChild(pfootInnerDiv);

  p.appendChild(pbody);

  p.appendChild(pfoot);

  pWrapper.appendChild(p);

  
  try{
  
  this.target.appendChild(pWrapper);
  }
  catch(err)
  {}


  this.render();

}





/*

Panel methods

----------------------------------*/

function render() {

  var o = this;

  o.kbIndex = -1;

  var area ;
  try
  {
   area = document.getElementById(o.panelId).firstChild;
   area.innerHTML = "";
   }
   catch(err)
   {}
  
  //area.innerHTML = "";


  var total = o.searchSet.length - 1;

  var numCols = Math.ceil(total / 8);

  var start = 0;

  var width = 0;

  var startTemp, end, ul, li, a, text, textNode;

  

  while(start < total) {

    ul = document.createElement("ul");



    startTemp = start;

    end = Math.ceil((total - start) / numCols);

    for(var i=start; i<startTemp+end; i++) {

      a = document.createElement("a");

      a.id = o.pos + "_" + o.searchSet[i];

      a.href = "javascript:void(0)";

      a.className = (o.selectedItem && (o.selectedItem.id == a.id)) ? "selected" : "";

      a.onclick = function() {

        onclickWrap(o, this);

      };

      text = eval("s" + o.searchSet[i]) + " (" + o.searchSet[i] + ")";

      textNode = document.createTextNode(text);

      a.appendChild(textNode);

      li = document.createElement("li");

      li.appendChild(a);

      ul.appendChild(li);

      start++;

    }

    numCols--;

     try
	 {
    area.appendChild(ul);
	}
	catch(err)
	{}

  }

  setWidth(o);

}



function autoComplete(self, obj, e) {

  if(obj.titleTemp == self.value)

    return;

  

  if(!e) e = window.event;

  var results = new Array();

  var list = obj.set;

  var value = self.value.toLowerCase();



  var text;

  var code;

  var parts = new Array();

  for(var i=0; i<list.length-1; i++) {

    text = eval("s" + list[i]) + " (" + list[i] + ")";

    text = text.toLowerCase();

    code = text.slice(text.lastIndexOf("(")+1, text.lastIndexOf(")"));

    if(code.indexOf(value) == 0) {

      results[results.length] = list[i];

      continue;

    }

    text = text.slice(0, text.lastIndexOf("(")-1);

    parts = text.split(", ");

    for(var n=0; n<parts.length; n++) {

      if(parts[n].indexOf(value) == 0) {

        results[results.length] = list[i];

        break;

      }

    }

  }

  results[results.length] = 0;



  var pbody = document.getElementById(obj.panelId).getElementsByTagName("div")[0];

  if(results.length > 1) {

    obj.searchSet = results;

    obj.render();

    if(results.length == 2)

      pbody.getElementsByTagName("a")[0].className = "selected";

  }

  else {

    pbody.innerHTML = "<ul><li><h5>Oops! Please try again or delete your<br />entry to see everywhere we fly.</h5></li></ul>";

    setWidth(obj);

  }

}



function kbListener(obj, e) {

  var list = document.getElementById(obj.panelId).getElementsByTagName("div")[0].getElementsByTagName("a");

  var input = document.getElementById(obj.inputName);

  if(!e) e = window.event;



  var prev;

  if(e.keyCode==13) {

    e.target ? e.preventDefault() : e.returnValue = false;

    if(list.length == 1) obj.kbIndex = 0;

    if(obj.kbIndex == -1 || list.length == 0) hidePanel(obj);

    else onclickWrap(obj, list[obj.kbIndex]);

    input.blur();

  }

  else if((e.shiftKey && e.keyCode==9) || e.keyCode==38) {

    if(list.length == 0) return;

    e.target ? e.preventDefault() : e.returnValue = false;

    obj.kbIndex = (obj.kbIndex==0 || obj.kbIndex==-1) ? list.length-1 : obj.kbIndex-1;

    list[obj.kbIndex].className = "selected";

    prev = (obj.kbIndex == list.length-1) ? 0 : obj.kbIndex+1;

    list[prev].className = ((obj.selectedItem && (obj.selectedItem.id == list[prev].id)) || obj.kbIndex==prev) ? "selected" : "";

  }

  else if(e.keyCode==9 || e.keyCode==40) {

    if(list.length == 0) return;

    e.target ? e.preventDefault() : e.returnValue = false;

    obj.kbIndex = (obj.kbIndex == list.length-1) ? 0 : obj.kbIndex+1;

    list[obj.kbIndex].className = "selected";

    prev = (obj.kbIndex == 0) ? list.length-1 : obj.kbIndex-1;

    list[prev].className = ((obj.selectedItem && (obj.selectedItem.id == list[prev].id)) || obj.kbIndex==prev) ? "selected" : "";

  }

  else if(e.keyCode==27) {

    e.target ? e.preventDefault() : e.returnValue = false;

    hidePanel(obj);

    input.blur();

  }

}



function onclickWrap(p, a) {

  highlight(p, a);

  setField(p.inputName, a.innerHTML);

 filter(p, a.id.split("_")[1]);

  hidePanel(p);

}



function highlight(obj, a) {

  if(obj.selectedItem)

    obj.selectedItem.className = "";



  obj.selectedItem = a;

  document.getElementById(obj.selectedItem.id).className = "selected";

}



function hideAll() {

  for(var i=0; i<allPanels.length; i++) {

    if(document.getElementById(allPanels[i].panelId).style.display == "block")

      hidePanel(allPanels[i]);

  }

}



function setWidth(obj) {

 

  var p = document.getElementById(obj.panelId);
   
   if (p ==null)  return ; 

  if(   p.style.display != "block")

    return;

  

  p.style.width = "700px";

  var width = 20;

  var uls = p.getElementsByTagName("ul");

  for(var i=0; i<uls.length; i++) {

    width += (uls[i].offsetWidth + 10);

  }

  p.style.width = width + "px";

}



function showPanel(p) {
  try{
  hideAll();
  }
  catch(err)
  {
  	
  }
  var obj = document.getElementById(p.panelId);

  

  if(obj.style.display == "block")

    return;



  p.searchSet = p.set;

  p.render();

  obj.style.display = "block";

  setWidth(p);

}



function hidePanel(p) {

  var obj = document.getElementById(p.panelId);

  if(obj == null) return ;

  if(obj.style.display != "block")

    return;



  obj.style.display = "none";

  p.cFlag = false;



  var input = document.getElementById(p.inputName);

  input.value = p.selectedItem ? eval("s" + p.selectedItem.id.split("_")[1]) + " (" + p.selectedItem.id.split("_")[1] + ")" : p.title;

}



function setField(inputName, text) {

  document.getElementById(inputName).value = text;

}



function filter(obj, code) {

  if(allPanels[obj.pos + 1] && allPanels[obj.pos + 1].type !=0) {

    var reselect = false;

    var next = allPanels[obj.pos + 1];



    var newCodes = eval("a" + code);



    if(next.selectedItem) {

      var toMatch = next.selectedItem.id.split("_")[1];

      for(var i=0; i<newCodes.length; i++) {

        if(toMatch == newCodes[i]) {

          reselect = true;

          break;

        }

      }

    }



    next.set = newCodes;

    next.searchSet = newCodes;

    next.render();



    if(reselect) {

      highlight(next, next.selectedItem);

    }

    else {

      setField(next.inputName, "Where to?");

//      var next_hidden_id = next.hiddenId;
      //document.getElementById(next.hiddenId).value = "";

      next.selectedItem = null;

    }

  }

//  var next_hidden_id = obj.hiddenId;

//  document.getElementById(obj.hiddenId).value = code;

}



function panOffClick() {

  for(var j=0; j<allPanels.length; j++) {

    if(!allPanels[j].cFlag)

      hidePanel(allPanels[j]);

  }

}



function initPanEvents() {

  YAHOO.util.Event.addListener(document.body, "click", panOffClick);

}



function retCityAnchor(pid, code) {

  var links = document.getElementById(pid).getElementsByTagName("a");

  for(var i=0; i<links.length; i++) {

    if(links[i].id.indexOf(code) != -1)

      return links[i];

  }

  return false;

}



YAHOO.util.Event.addListener(window, "load", initPanEvents);
