var urlHttpReq = "/qbxml.cfm";

//----------------------------------------------------------------------

function QuoteBox( sCountry, sRegion, sDomain, sLogo, sSource, sDom, sRef )
{
  if ( sCountry )
    document.getElementById("qbDefaultCountry").value = sCountry;
    
  if ( sRegion )
    document.getElementById("qbDefaultRegion").value = sRegion;

  if ( sDomain )
    document.getElementById("qbSiteDom").value = sDomain;

  if ( sLogo )
    document.getElementById("qbSiteLogo").value = sLogo;

  if ( sSource )
    document.getElementById("qbSource").value = sSource;

  if ( sDom )
    document.getElementById("qbDom").value = sDom;

  if ( sRef )
    document.getElementById("qbRef").value = sRef;

  document.getElementById("qbCountry").onchange = function() {
    getRegionsRemotely( urlHttpReq + "?cid=" + this.value );
  };
  
  if ( document.getElementById("qbDefaultCountry").value != "" )
    setDefaultCountry( document.getElementById("qbDefaultCountry").value );
  
  prepYYYYMD( document.getElementById("qbSMonth"), document.getElementById("qbSDay"), 0, 2 );
  prepYYYYMD( document.getElementById("qbTMonth"), document.getElementById("qbTDay"), 0 );
  advanceTDate();
  
  document.getElementById("qbSMonth").onchange = advanceTDate;
  document.getElementById("qbSDay").onchange = advanceTDate;
  
  document.getElementById("qbNumKids").onchange = function() {
    var obj = null;
    
    for ( var i=1; i<=4; i++ ) {
      obj = document.getElementById("qbKidAge"+i);
      if ( this.value < i ) obj.selectedIndex = 0;
      document.getElementById("qbDivKidAge"+i).style.display = ( this.value >= i )? "block" : "none";
    }
  }

  if ( document.getElementById("qbHotelOnly") )
    document.getElementById("qbHotelOnly").onclick = priceHotelOnly;

  if ( document.getElementById("qbHotelAir") )
    document.getElementById("qbHotelAir").onclick = priceHotelWithAir;
}

//----------------------------------------------------------------------

function setDefaultCountry( sText )
{
  var iCID = matchOptionByText( "qbCountry", sText );

  if ( iCID != "" )
    getRegionsRemotely( urlHttpReq + "?cid=" + iCID );
}

//----------------------------------------------------------------------
// Begin form submission routines
//----------------------------------------------------------------------

function priceHotelOnly()
{
  var obj = document.getElementById("qbSearchType");
  obj.value = "HOTEL";

  validateNumKidsOptions();

  if ( obj.value != "" )
    validateRegionOptions();

  return ( obj.value != "" );
}

//----------------------------------------------------------------------

function priceHotelWithAir()
{
  var obj = document.getElementById("qbSearchType");
  obj.value = "AIR";
  
  validateNumKidsOptions();

  if ( obj.value != "" )
    validateRegionOptions();
  
  if ( obj.value != "" )
    validateGatewayOption();
  
  return ( obj.value != "" );
}

//----------------------------------------------------------------------

function validateNumKidsOptions()
{
  for ( var i=1; i<=parseInt( document.getElementById("qbNumKids").value ); i++ ) {
    if ( !document.getElementById("qbKidAge"+i).selectedIndex ) {
      document.getElementById("qbSearchType").value = "";
      alert( "Please select age for each child." );
      break;
    }
  }
}

//----------------------------------------------------------------------

function validateRegionOptions()
{
  var obj = document.getElementById("qbSearchType");
  
  if ( !parseInt( document.getElementById("qbCountry").value ) )
    obj.value = "";
  
  if ( obj.value != "" ) {
    var objRegion = document.getElementById("qbRegion");
    var objRegText = document.getElementById("qbRegionText");
    
    if ( objRegion.length == 1 || parseInt( objRegion.value ) )
      objRegText.value = objRegion.options[objRegion.selectedIndex].text;
    else {
      obj.value = "";
      objRegText.value = "";
    }
  }

  if ( obj.value == "" ) {
    document.getElementById("qbSearchType").value = "";
    alert( "Please select a destination to continue." );
  }
}

//----------------------------------------------------------------------

function validateGatewayOption()
{
  if ( document.getElementById("qbGateway").value == "" ) {
    document.getElementById("qbSearchType").value = "";
    alert( "Please select an airport to continue." );
  }
}

//----------------------------------------------------------------------
// End form submission routines
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// Begin date-related routines
//----------------------------------------------------------------------

function verifyYYYYMD( objMonth, objDay )
{
  if ( objMonth && objDay ) {
    var iYYYY = parseInt( objMonth.value.substr(0, 4) );
    var iMM = parseInt( objMonth.value.substr(4, objMonth.value.length-4) );
    var iDD = parseInt( objDay.value );
    var dCheck = new Date( iYYYY, iMM-1, iDD );

    if ( dCheck.getDate() != iDD )
      setYYYYMD( objMonth, objDay, dCheck );
  }
}

//----------------------------------------------------------------------

function setYYYYMD( objMonth, objDay, dDate )
{
  if ( objMonth && objDay ) {
    var sYYYYM = dDate.getFullYear() + "" + (dDate.getMonth() + 1);

    if ( matchOptionByValue( objMonth.id, sYYYYM ) != "" )
      matchOptionByValue( objDay.id, dDate.getDate() );
    else
      setYYYYMD( objMonth, objDay, new Date( dDate.getFullYear(), dDate.getMonth(), 1, -1, 0, 0 ) );
  }
}

//----------------------------------------------------------------------

function advanceTDate()
{
  var objSMonth = document.getElementById("qbSMonth");
  var objSDay = document.getElementById("qbSDay");
  verifyYYYYMD( objSMonth, objSDay );

  var iYYYY = parseInt( objSMonth.value.substr(0, 4) );
  var iMM = parseInt( objSMonth.value.substr(4, objSMonth.value.length-4) );
  var iDD = parseInt( objSDay.value );
  var dSDate = new Date( iYYYY, iMM - 1, iDD );
  
  var objTMonth = document.getElementById("qbTMonth");
  var objTDay = document.getElementById("qbTDay");
  verifyYYYYMD( objTMonth, objTDay );

  iYYYY = parseInt( objTMonth.value.substr(0, 4) );
  iMM = parseInt( objTMonth.value.substr(4, objTMonth.value.length-4) );
  iDD = parseInt( objTDay.value );
  dTDate = new Date( iYYYY, iMM - 1, iDD );

  if ( dSDate >= dTDate ) {
    var daysApart = 7;
    setYYYYMD( objTMonth, objTDay, new Date( dSDate.getFullYear(), dSDate.getMonth(), dSDate.getDate() + daysApart ) );
  }
}

//--------------------------------------------------------------------
// Today+2: set iDefault = 0
// Any Day: set iDefault = number
// 1st Option: set iDefault = null
//--------------------------------------------------------------------

function prepYYYYMD( objMonth, objDay, iDefault, iOffset )
{
  if ( iOffset === null )
    iOffset = 0;

  var dCurrMM = new Date();
  var dDayNum = new Date( dCurrMM.getFullYear(), dCurrMM.getMonth(), dCurrMM.getDate() + iOffset );

  var iYYYY = dCurrMM.getFullYear();
  var iMM = dCurrMM.getMonth();
  var iDD = dCurrMM.getDate();
  var sMMM_YY = "";
  var sYYYYM = "";

  for ( var i=0; i<12; i++ ) {
    dCurrMM.setYear(iYYYY);
    dCurrMM.setMonth(iMM);
    dCurrMM.setDate(15);

    sMMM_YY = dCurrMM.toGMTString().substr(8, 3);
    sYYYYM = dCurrMM.getFullYear() + "" + (dCurrMM.getMonth() + 1);
    objMonth.options[objMonth.length] = new Option( sMMM_YY, sYYYYM );

    if ( sYYYYM == dDayNum.getFullYear() + "" + (dDayNum.getMonth() + 1) )
      objMonth.selectedIndex = i;

    iMM++;
    if ( iMM == 12 ) {
      iYYYY++; iMM = 0;
    }
  }
  
  iDD = parseInt( dDayNum.getDate() );

  for ( i=1; i<=31; i++ ) {
    objDay.options[objDay.length] = new Option(i, i);

    if ( iDefault !== null && i == iDD )
      objDay.selectedIndex = i - 1;
  }

  if ( iDefault === null || !(iDefault + iOffset) )
    objDay.selectedIndex = 0;
}

//----------------------------------------------------------------------
// End date-related routines
//----------------------------------------------------------------------

function getRegionsRemotely( sURL ) 
{
  if ( typeof XMLHttpRequest != "undefined" ) {
    objHttpReq = new XMLHttpRequest();
    objHttpReq.onreadystatechange = doRegions;
    objHttpReq.open("GET", sURL, true);
    objHttpReq.send(null);
  }
  else if ( window.ActiveXObject ) {
    try {
      objHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch ( err ) {
      try {
        objHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch ( err ) {}
    }

    if ( objHttpReq ) {
      objHttpReq.onreadystatechange = doRegions;
      objHttpReq.open("GET", sURL, true);
      objHttpReq.send();
    }
  }
}

//----------------------------------------------------------------------

function doRegions()
{
  if ( objHttpReq.readyState == 4 && objHttpReq.status == 200 ) {
    var nodeCountry = objHttpReq.responseXML.getElementsByTagName("Country");
    var obj = document.getElementById("qbRegion");

    if ( nodeCountry.length && obj ) {
      obj.options.length = 1;
      obj.selectedIndex = 0;

      var arrayRegion = objHttpReq.responseXML.getElementsByTagName("Region");

      if ( !arrayRegion.length )
        document.getElementById("qbDivRegion").style.display = "none";
      else {
        obj[0].text = "Select " + ( ( nodeCountry[0].getAttribute("Select").charAt(0) == "I" )? "an " : "a " ) + nodeCountry[0].getAttribute("Select");

        for ( var i=0; i<arrayRegion.length; i++ )
          obj.options[obj.length] = new Option( arrayRegion[i].firstChild.data, arrayRegion[i].getAttribute("CityID") );
        
        if ( document.getElementById("qbDefaultRegion").value != "" )
          matchOptionByText( obj.id, document.getElementById("qbDefaultRegion").value );
        
        document.getElementById("qbDivRegion").style.display = "block";
      }
    }
  }
}
