/* Copyright Kayak.com 2007
 * Kayak Developer Network
 */


//
// When user cycles through tabs.
//
function kwidOnChangeTab(tabIdx) {

  // hide all other panes and tabs.
  for (var i = 0; i <= 5; i++) {
    var x = 'kykPane' + i;
    if (getObjStyle(x)) {
      hideDivById(x);
    }

    x = 'kykTab' + i;
    if (getObj(x)) {
      setClassById(x, 'kykTabUnsel');
    }    
  }

  // Activate this pane and tab.
  unhideDivById('kykPane' + tabIdx);
  setClassById('kykTab' + tabIdx, 'kykTabSel');
}

//
// User has pushed the submit button.
//
function kwidOnSubmit(tabIdx) {

  if (1 == tabIdx) {
    kwidFlightOnSearch();
  } 

  else if (2 == tabIdx) {
    kwidHotelOnSearch();
  } 

  else if (3 == tabIdx) {
    kwidCarOnSearch();
  } 

  else if (4 == tabIdx) {
    kwidCruiseOnSearch();
  } 

  else {
    alert('not yet ' + tabIdx);
  }
}

//
// Links to the kayak front door.
//
function kwidKayakHome() {
  var kayakUrl = 'http://www.kayak.com/s/search/air?x=y';
  return kwidSubmitGet(kayakUrl);
}

//
// Process the Hotel search form.
//
function kwidHotelOnSearch() {
  var fn = 'kykHotelForm';
  var form = getObj(fn);
  if (!form) {
    alert("Invalid page structure " + fn);
    return false;
  }

  if (!form.ai || !form.ai.value) {
    alert("Missing required affiliate id");
    return false;
  }

  if (!form.crc) {
    alert("Invalid page structure: missing crc");
    return false;       
  }

  var kayakUrl = 'http://kayak.com/s/search/hotel?' + kwUnpackForm(form);

  // Looks for "?&" within qstring and if found, replaces with "?"
  if (kayakUrl.match(/\?\&/g)) {
    kayakUrl = kayakUrl.replace(/\?\&/g,"?");
  }

  return kwidSubmitGet(kayakUrl);
}

//
// Process the Car search form.
//
function kwidCarOnSearch() {
  var fn = 'kykCarForm';
  var form = getObj(fn);
  if (!form) {
    alert("Invalid page structure " + fn);
    return false;
  }

  if (!form.ai || !form.ai.value) {
    alert("Missing required affiliate id");
    return false;
  }

  if (!form.crc) {
    alert("Invalid page structure: missing crc");
    return false;       
  }

  var kayakUrl = 'http://kayak.com/s/search/car?' + kwUnpackForm(form);

  // Looks for "?&" within qstring and if found, replaces with "?"
  if (kayakUrl.match(/\?\&/g)) {
    kayakUrl = kayakUrl.replace(/\?\&/g,"?");
  }

  return kwidSubmitGet(kayakUrl);
}

//
// Process the Cruise search form.
//
function kwidCruiseOnSearch() {
  var fn = 'kykCruiseForm';
  var form = getObj(fn);
  if (!form) {
    alert("Invalid page structure " + fn);
    return false;
  }

  if (!form.ai || !form.ai.value) {
    alert("Missing required affiliate id");
    return false;
  }

  if (!form.dest) {
    alert("Invalid page structure: missing dest");
    return false;       
  }

  var o = getObj('kCruise55');
  form.sr.value = 'n';
  if (o.checked) {
    form.sr.value = 'y';
  }

  form.dt.value = form.d1.value;

  var kayakUrl = 'http://kayak.com/s/search/cruise?' + kwUnpackForm(form);

  // Looks for "?&" within qstring and if found, replaces with "?"
  if (kayakUrl.match(/\?\&/g)) {
    kayakUrl = kayakUrl.replace(/\?\&/g,"?");
  }

  return kwidSubmitGet(kayakUrl);
}


//
// Process the Flight search form.
//
function kwidFlightOnSearch() {
  var fn = 'kykFlightForm';
  var form = getObj(fn);
  if (!form) {
    alert("Invalid page structure " + fn);
    return false;
  }

  if (!form.ai || !form.ai.value) {
    alert("Missing required affiliate id");
    return false;
  }

  if (!form.l1 || !form.l2) {
    alert("Invalid page structure: missing l1 or l2");
    return false;       
  }

  var kayakUrl = 'http://kayak.com/s/search/air?' + kwUnpackForm(form);

  // Looks for "?&" within qstring and if found, replaces with "?"
  if (kayakUrl.match(/\?\&/g)) {
    kayakUrl = kayakUrl.replace(/\?\&/g,"?");
  }

  return kwidSubmitGet(kayakUrl);
}

//
// generic method to grab all the form fields.
//
function kwUnpackForm(form) {
  var s = "";
  for (var i = 0; i < form.elements.length; i++) {
    var nm = form.elements[i].name;
    var vl = form.elements[i].value;
    if (nm && vl) {
      s += "&" + nm + "=" + escape(vl);
    }
  }

  cb = Math.random()*400;
  s += "&cb=" + cb;


  return wgFixDate(s);
}

//
// tidy the date field.
//
function wgFixDate(argList) {
  if (argList.match(/\//g)) {
    argList = argList.replace(/\//g,"%2F");
  }
  return argList;
}

//
// Route all URL redir through here so that the URLs are properly
// converted to linkshare format if we're within a linkshare affiliate's
// page.
//
function kwidSubmitGet(url) {

  if (isLinkShare()){
    url = lsn_click + '&tmpid=2304&RD_PARM1=' + escape(escape(url));
  }   

  window.open(url);
  return true;
}

/* If we're in the linkShare environment, the variable lsn_clk will be
 * defined and this function will respond in the affirmative.
 */
function isLinkShare() {
  try {
    lsn_click;
    return true;
  } catch(err) {
    return false;
  }
}




