/*
wherewefly destinations validation and cookie handling
----------------------------------------------*/
var trackingCookie0 = "jbHpSearchTracked";

function trackSearch(form) {
  var theForm = document.forms[form];
  var fromSet = theForm.MARKET1_ORIG_STATION.value != "" ? true : false;
  var toSet = theForm.MARKET1_DEST_STATION.value != "" ? true : false;
  var leaveSet = cal0Hidden.value != "" ? true : false;
  var returnSet = cal1Hidden.value != "" ? true : false;
  var todayDate = new Date(); var tMonth = todayDate.getMonth() + 1; var tDay = todayDate.getDate(); var tYear = todayDate.getFullYear();
  var todayStr = tMonth + "/" + tDay + "/" + tYear;

  var trip_type = "";
  for(var i=0; i<theForm.length; i++) {
    if(theForm[i].name == "TRIP_TYPE" && theForm[i].checked) trip_type = theForm[i].value;
  }
  alert(trip_type);
  alert(theForm.MARKET1_DEST_STATION.value);

  if(trip_type != "RoundTrip" && theForm.MARKET1_DEST_STATION.value == "BOG") {
     alert(bogota_popup);
     return true;
  }
  
  if(!fromSet) {
    alert("Please choose a departure city.");
    return false;
  }
  else if(!toSet) {
    alert("Please choose an arrival city.");
    return false;
  }
  else if(!leaveSet) {
    alert("Please select a date to leave.");
    return false;
  }
  else if(trip_type == "RoundTrip" && !returnSet) {
    alert("Please select a date to return.");
    return false;
  }
  else if(enforceMaxPax(form) && checkPassenger(form)) {
    if(cal0Hidden.value == cal1Hidden.value) {
      if(!confirm("Your return date is the same as your departure date. Is such a short trip intentional?"))
        return false;  
    }

    if(todayStr == cal0Hidden.value) alert("Because you've selected today's date, only flights that leave at least 1 hour and 30 minutes from the current time will be shown on the next page.");

    var from = theForm.MARKET1_ORIG_STATION.value;
    var to = theForm.MARKET1_DEST_STATION.value;
    var leaveVal = cal0Hidden.value;
    var returnVal = cal1Hidden.value;
    var numAdt = theForm.NUM_ADT.value; var numChd = theForm.NUM_CHD.value;

    setTracking(trackingCookie0, trip_type + "," + from + "," + to + "," + leaveVal + "," + returnVal + "," + numAdt + "," + numChd);

    return true;
    
  }
  else return false;
}

function enforceMaxPax(form)
  {		
  var paxTotal = 0 
  paxTotal = eval(paxTotal) + eval(document[form].NUM_CHD.value) 
  paxTotal = eval(paxTotal) + eval(document[form].NUM_ADT.value) 
  if (paxTotal > 9){
    alert("\nYou are allowed a maximum of " + 9 + " passengers\nper booking online. If your party is larger\nthan this, please call our reservation center.\n")
    return false 
  }
  else{
    return true 
    }
  }

function checkPassenger(form){
var adults = document[form].NUM_ADT.value;
var children = document[form].NUM_CHD.value 
if (( adults + children ) <= 0 ) {
  alert("\nYou must enter at least one passenger.\n");
  return false;
  }
return true;
}

function trackInit() {
  var ck0 = getCookie(trackingCookie0); var div0 = $("wwfContentTrackedWrapper");
  
  if(ck0) {
    var controlTop = $("wwfControlTop"); controlTop.className = "tracked";
    div0.style.padding = "0 0 3px 0";
    div0.appendChild(document.createTextNode("Recent searches: "));
    var parts0 = ck0.split("//");
    for(var i=0; i<parts0.length; i++) {
      if(parts0[i] != "") {
        var parts1 = parts0[i].split(",");
        var link = document.createElement("a");
        link.href = "javascript:prepopMB('" + parts1[1] + "','" + parts1[2] + "'," + parts1[0] + "," + parts1[3] + "," + parts1[4] + ")";
        link.appendChild(document.createTextNode(parts1[1] + " to " + parts1[2]));
        div0.appendChild(link);
        if(i != parts0.length-1) div0.appendChild(document.createTextNode(" "));
      }
    }
  }

}

function setTracking(cookieName, track)
  {
  var tracked = getCookie(cookieName);
  var trackedParts = new Array();

  // if a cookie exists, remove the last tracked item and slide the new one onto
  // the front
  if (tracked)
    {
    deleteCookie(cookieName);
    trackedParts = tracked.split("//");
    trackedParts.pop();
    trackedParts.unshift(track);
    newTracked = trackedParts.join("//");
    }
  else 
    {
    newTracked = track + "//";
    }
  
  setCookie(cookieName, newTracked, 720);

  }


/*
wherewefly destinations dual calendar
------------------------------------------------*/
function init() {
  cal0 = new YAHOO.widget.Calendar("cal0", "cal0Container");
  cal0.renderCellDefault = renderDefault;
  cal0.renderCellNotThisMonth = renderNotThisMonth;
  cal0.onChangePage = changePage0;
  cal0.onSelect = dateSelect0;
  cal0.buildShellFooter = buildFooter;
  cal0.customConfig = customize;
  cal0.setupConfig();
  cal0.render();
  
  // skylights compatible variables
  cal0SkyLightsHiddenDay = $("sector_1_d");
  cal0SkyLightsHiddenMonthYear = $("sector_1_m");
  cal0Hidden = $("MARKET1_DATE");

  YAHOO.util.Event.addListener(cal0.oDomContainer.id.replace("Container", "Trigger"), "click", showCalendar0, cal0, true);
  
  cal1 = new YAHOO.widget.Calendar("cal1", "cal1Container");
  cal1.renderCellDefault = renderDefault;
  cal1.renderCellNotThisMonth = renderNotThisMonth;
  cal1.onChangePage = changePage1;
  cal1.onSelect = dateSelect1;
  cal1.buildShellFooter = buildFooter;
  cal1.customConfig = customize;
  cal1.setupConfig();
  cal1.render();
  
  // skylights compatible variables
  cal1SkyLightsHiddenDay = $("sector_2_d");
  cal1SkyLightsHiddenMonthYear = $("sector_2_m");
  cal1Hidden = $("MARKET2_DATE");

  // clear these out
  $("MARKET1_ORIG_STATION").value = "";
  $("MARKET1_DEST_STATION").value = "";
  $("sector1_o").value = "";
  $("sector1_d").value = "";
  $("sector_1_d").value = "";
  $("sector_1_m").value = "";
  $("sector_2_d").value = "";
  $("sector_2_m").value = "";
  $("MARKET2_DATE").value = "";
  $("MARKET1_DATE").value = "";

  YAHOO.util.Event.addListener(cal1.oDomContainer.id.replace("Container", "Trigger"), "click", showCalendar1, cal1, true);

  YAHOO.util.Event.addListener(document.body, "click", offClick);
}

function renderDefault(workingDate, cell) {
  cell.innerHTML = ""; 
  var theDay;

  if (workingDate.getDate() < 10)
    theDay = "0" + this.buildDayLabel(workingDate);
  else
    theDay = this.buildDayLabel(workingDate);

  // if the date is before today, only display text, otherwise display a link
  // normally we'd use renderBodyCellRestricted, but it doesnt seem to facilitate 
  // blocking out a large set of dates

var newdate = Date.parse(minibookerExtensionDate);

	if (  ( Date.parse(today.toString()) - (60*60*24*1000) ) > Date.parse(workingDate.toString()) || (Date.parse(workingDate.toString()) > newdate) ) 
    {
    cell.className = this.Config.Style.CSS_CELL_RESTRICTED;
    cell.appendChild(document.createTextNode(theDay)); 
    }
  else
    {
    var link = document.createElement("a");

    link.href="javascript:void(null);" 
    link.name=this.id+"__"+workingDate.getFullYear()+"_"+(workingDate.getMonth()+1)+"_"+workingDate.getDate(); 

    link.appendChild(document.createTextNode(theDay));
    cell.appendChild(link); 
    }
}



function renderNotThisMonth(workingDate, cell) {
  cell.innerHTML = "";
  return YAHOO.widget.Calendar_Core.STOP_RENDER;
}

function customize() {
  // local
  this.Config.Locale.WEEKDAYS_SHORT = ["S", "M", "T", "W", "T", "F", "S"];

  // styles
  this.Config.Style.CSS_ROW_HEADER = "calendarHeader";
  this.Config.Style.CSS_HEADER  = "calendarHeader";
  this.Config.Style.CSS_HEADER_TEXT  = "calendarHeaderText";
  this.Config.Style.CSS_WEEKDAY_ROW  = "calendarWeekRow";
  this.Config.Style.CSS_CALENDAR  = "calendar";
  this.Config.Style.CSS_CELL_SELECTED = "cellSelected";

  // options
  this.Config.Options.NAV_ARROW_LEFT = "/i/calBack.jpg";
  this.Config.Options.NAV_ARROW_RIGHT = "/i/calForward.jpg";
  this.Config.Options.LOCALE_MONTHS = this.Config.Locale.MONTHS_SHORT;
}

function buildFooter() {
  var obj = this;
  var cid = obj.oDomContainer.id;
  var foot = document.createElement("TFOOT");
  var row = document.createElement("TR");
  var cell = document.createElement("TD"); cell.colSpan = 7;
  var link = document.createElement("a");
  var img = document.createElement("img");

  img.src = "/i/closePop.gif";
  link.href = "javascript:void(null);";
  link.onclick = function() {
    hide(cid);
  };
  link.appendChild(img);


  cell.appendChild(link); row.appendChild(cell); foot.appendChild(row); this.table.appendChild(foot);
}

function showCalendar0(e, obj) {
  var correctDate;
  if(this.getSelectedDates().length == 0 && cal1.getSelectedDates().length !=0) correctDate = cal1.pageDate;

  else if(this.getSelectedDates().length !=0) correctDate = this.getSelectedDates()[0];

  else correctDate = this.today;

  this.setMonth(correctDate.getMonth()); this.setYear(correctDate.getFullYear());

  var diff = Date.parse(correctDate.toString()) - Date.parse(this.today);
  
  if(this.pageDate.getMonth() == this.today.getMonth() && this.pageDate.getYear() == this.today.getYear()) {
    this.Config.Style.CSS_NAV_LEFT = "calnavH"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }
  else if(diff > (1000*60*60*24*maxDaysOut)) {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavH";
  }
  else {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }

  this.render();

  $(this.oDomContainer.id).style.display = "block";
}

function showCalendar1(e, obj) {
  var theInput = $(cal1.oDomContainer.id.replace("Container", "Input"));
  if(theInput.innerHTML == disabledTxt)
    return;
  if(theInput.getElementsByTagName("a")[0] && theInput.getElementsByTagName("a")[0].innerHTML == disabledTxt)
    return;

  var correctDate;
  if(cal0.getSelectedDates().length != 0)
    correctDate = cal0.getSelectedDates()[0];

  else if(cal0.getSelectedDates().length == 0 && this.getSelectedDates().length != 0)
    correctDate = this.getSelectedDates()[0];

  else
    correctDate = this.today;
  
  this.setMonth(correctDate.getMonth()); this.setYear(correctDate.getFullYear());

  var diff = Date.parse(correctDate.toString()) - Date.parse(this.today);
  
  if(this.pageDate.getMonth() == this.today.getMonth() && this.pageDate.getYear() == this.today.getYear()) {
    this.Config.Style.CSS_NAV_LEFT = "calnavH"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }
  else if(diff > (1000*60*60*24*maxDaysOut)) {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavH";
  }
  else {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }
  
  this.render();

  $(this.oDomContainer.id).style.display = "block";
}

function hide(id) {
  $(id).style.display = "none";
}

function changePage0() {
  var currDate = this.today; var nextDate = this.pageDate;
  var diff = Date.parse(nextDate.toString()) - Date.parse(currDate.toString());

  if(diff <= 0) {
    this.Config.Style.CSS_NAV_LEFT = "calnavH"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }

  else if(diff > (1000*60*60*24*maxDaysOut)) {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavH";
  }

  else {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }

  this.render();
}

function changePage1() {
  var currDate = this.today; var nextDate = this.pageDate;
  var diff = Date.parse(nextDate.toString()) - Date.parse(currDate.toString());

  if(diff <= 0) {
    this.Config.Style.CSS_NAV_LEFT = "calnavH"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }

  else if(diff > (1000*60*60*24*maxDaysOut)) {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavH";
  }

  else {
    this.Config.Style.CSS_NAV_LEFT = "calnavleft"; this.Config.Style.CSS_NAV_RIGHT = "calnavright";
  }

  this.render();
}

function dateSelect0(obj) {
  var c = obj ? obj : this;
  var currDate = c.getSelectedDates()[0]; var parsed = Date.parse(currDate.toString());
  var jbDate = c.Config.Locale.WEEKDAYS_MEDIUM[currDate.getDay()] + ", " +
               c.Config.Locale.MONTHS_SHORT[currDate.getMonth()] + " " +
               currDate.getDate() + ", " +
               currDate.getFullYear();
  
  $(c.oDomContainer.id.replace("Container", "Input")).innerHTML = jbDate;

  // format date for skylights
  cal0SkyLightsHiddenDay.value = currDate.getDate() < 10 ? "0" + currDate.getDate() : currDate.getDate();
  var monthVal = (currDate.getMonth() + 1) < 10 ? "0" + (currDate.getMonth() + 1) : currDate.getMonth() + 1;
  cal0SkyLightsHiddenMonthYear.value = monthVal + currDate.getFullYear().toString();

  cal0Hidden.value = (currDate.getMonth() + 1) + "/" + currDate.getDate() + "/" + currDate.getFullYear();

  if( cal1Hidden.value == "" ) {
    cal1.setMonth(currDate.getMonth()); 
    cal1.setYear(currDate.getFullYear()); 
    cal1.render();
    }

  else if( Date.parse( cal1Hidden.value ) < parsed ) {
    $(cal1.oDomContainer.id.replace("Container", "Input")).innerHTML = "Date to return?";
    cal1Hidden.value = "";
    cal1.clear();
    }
  
  cal1.minDate = currDate;
  
  hide(c.oDomContainer.id);
}

function dateSelect1(obj) {
  var c = obj ? obj : this;
  var currDate = c.getSelectedDates()[0];
  var jbDate = c.Config.Locale.WEEKDAYS_MEDIUM[currDate.getDay()] + ", " +
               c.Config.Locale.MONTHS_SHORT[currDate.getMonth()] + " " +
               currDate.getDate() + ", " +
               currDate.getFullYear();
    
  $(c.oDomContainer.id.replace("Container", "Input")).innerHTML = jbDate;
  
  // format date for skylights
  cal1SkyLightsHiddenDay.value = currDate.getDate() < 10 ? "0" + currDate.getDate() : currDate.getDate();

  var monthVal = (currDate.getMonth() + 1) < 10 ? "0" + (currDate.getMonth() + 1) : currDate.getMonth() + 1;
  cal1SkyLightsHiddenMonthYear.value = monthVal + currDate.getFullYear().toString();

  cal1Hidden.value = (currDate.getMonth() + 1) + "/" + currDate.getDate() + "/" + currDate.getFullYear();

  hide(c.oDomContainer.id);
}

function reenableCal(cal) {
  var theInput = $(cal.oDomContainer.id.replace("Container", "Input"));
  if(theInput.innerHTML == disabledTxt || (theInput.getElementsByTagName("a")[0] && theInput.getElementsByTagName("a")[0].innerHTML == disabledTxt)) {
    theInput.style.color = "#4b90cd";
    theInput.innerHTML = "Date to return?";
    if(theInput.firstChild.nodeName.toLowerCase() == "a")
      theInput.firstChild.style.fontSize = "12px";
  }
}

function disableCal(cal, hid) {
  var theInput = $(cal.oDomContainer.id.replace("Container", "Input"));
  theInput.innerHTML = disabledTxt; theInput.style.color = "#cccccc";
  if(theInput.getElementsByTagName("a")[0]) theInput.getElementsByTagName("a")[0].style.color = "#cccccc";
  cal.clear(); $(hid).value = "";
  /* clear out return date if oneway flight - mK - 3/2/2007 */
  

  if(hid == 'MARKET2_DATE') {
  
  document.bBaf.sector_2_d.value = '';
  document.bBaf.sector_2_m.value = '';
  
  }
	var trigger = cal.oDomContainer.id.replace("Container", "Trigger");
}

function offClick(e) {
  if(!e) e = window.event;
  var caller = e.srcElement ? e.srcElement : e.target;
  var chain0 = false;
  var chain1 = false;
  
  while(caller) {
    if(caller.id == cal0.oDomContainer.id.replace("Container", "Root")) {
      chain0 = true;
      break;
    }
    else if(caller.id == cal1.oDomContainer.id.replace("Container", "Root")) {
      chain1 = true;
      break;
    }

    caller = caller.parentNode;
  }

  if(!chain0) hide(cal0.oDomContainer.id);
  if(!chain1) hide(cal1.oDomContainer.id);
}

var today = new Date();
var cal0, cal1;

var cal0Hidden = ""; 
var cal1Hidden = "";

var cal0SkyLightsHiddenMonthYear = ""; 
var cal0SkyLightsHiddenDay = ""; 

var cal1SkyLightsHiddenMonthYear = "";
var cal1SkyLightsHiddenDay = "";

var disabledTxt = "---------------------------------------";
//var maxDaysOut = 190;
var maxDaysOut = maxDaysOut;
/*
Preset Mini-Booker
-----------------------------------------------*/
function usePreset(config, panel, form) {
  var subP, obj, p, dateParts;
  if("from" in config) {
    subP = panel.subPanels[0];
    if(obj = retCityAnchor(subP.panelId, config["from"]))
      onclickWrap(subP, obj);
  }

  if("to" in config) {
    subP = panel.subPanels[1];
    if(obj = retCityAnchor(subP.panelId, config["to"]))
      onclickWrap(subP, obj);
  }

  if("dateLeave" in config) {
    dateParts = config["dateLeave"].split("/");
    cal0.selectedDates[0] = [dateParts[2],dateParts[0],dateParts[1]];
    dateSelect0(cal0);
  }

  if("dateReturn" in config) {
    dateParts = config["dateReturn"].split("/");
    cal1.selectedDates[0] = [dateParts[2],dateParts[0],dateParts[1]];
    dateSelect1(cal1);
  }

  var theForm = document[form];
  if("numAdt" in config) {
    var h4 = document.getElementById("selectObj_0").getElementsByTagName("h4")[0];
    h4.innerHTML = config["numAdt"] + " Adult";
    h4.innerHTML += (config["numAdt"] == 1) ? "" : "s";
    p = theForm.NUM_ADT ? theForm.NUM_ADT : theForm.ADULT;
    p.value = config["numAdt"];
  }

  if("numChd" in config) {
    var h4 = document.getElementById("selectObj_1").getElementsByTagName("h4")[0];
    h4.innerHTML = config["numChd"] + " Kid"; 
    h4.innerHTML += (config["numChd"] == 1) ? "" : "s";
    p = theForm.NUM_CHD ? theForm.NUM_CHD : theForm.CHILD;
    p.value = config["numChd"];
  }

  if(config["tripType"]) {
    theForm.TRIP_TYPE[1].checked = true;
    disableCal(cal1, "MARKET2_DATE");
  } else {
    theForm.TRIP_TYPE[0].checked = true;
	reenableCal(cal1, "MARKET2_DATE");
  }		 
}
/* add helper JS for recent searches */

	function prepopMB(fromCity, toCity, trip, numAdts, numChds) {
		// fire prepopulated minibooker on "Recent Searches"
		 // reset form for Firefox users	
		
		 var preset2 = {"tripType": trip, "from": fromCity, "to": toCity, "numAdt": numAdts, "numChd": numChds };
		 usePreset(preset2, panel0, "bBaf"); 
	}	 
	
