// This file is created as part of temporary fix for SPROCKET search panel related calendar implementation.
// Once the main issue is resolved, this file needs to be deleted.

//Declare Global Variables
var ie4=(document.all)? true:false;
var ns4=(document.layers)? true:false;
var ns6=(document.getElementById) ? true : false;
var ie5=(ie4 && ns6)?true:false;
if (ie5) { ns6 = false }

// Path to Images
var Image_Path = '../images/'

var HTMLMonths
var Calendar = new Date();
var TodaysDate = new Date();
var MaxDate = new Date();
var SelectedDate = new Date();
var FieldObjDay1 = new Object();
var FieldObjMonthYear1 = new Object();
var FieldObjYear1 = new Object();

var HomePage = true;
var hideHolidayType = false;

// Define Day Names and Month Names
var day_of_week = new Array('S','M','T','W','T','F','S');
var MonthName = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

// Netscape Fix on Y2K
//if ((ns4 || ns6) && year) { year += 1900 };

// Write Layer onto Page
//document.write('<div id="divcalendar_home"></div>');

function calendarDisplay(){
  var container = document.createElement("div");
  container.setAttribute("id","divcalendar_home");
  
  var searchPanels = document.getElementById("search_panel");
  var parentDiv = searchPanels.parentNode;

  parentDiv.insertBefore(container,searchPanels);
}

function getRef(id) {
  if (ie5 || ns6) { return document.getElementById(id); }
  if (ie4) { return document.all[id]; }
  if (ns4) { return document.layers[id]; }
}

function generatetable() {
  // Create HTML
 cal = '<table class="calendartable" border="0" cellspacing="0" cellpadding="1">'
 cal += '<tr>';

  // Create row for days of week
  for(index=0; index < 7; index++) {
   cal += '<th>' + day_of_week[index] + '</th>';
  }
  cal += '</tr>';
  day1 = Calendar.getDay()

  // Use empty cells to add gaps until today
  for(index=0; index < day1; index++) {
   cal += '<td>&nbsp;</td>';
  }

  // Loop round all days in month
  for(index=0; index < 31; index++) {
   var day  = Calendar.getDate();
   if( day > index ) {
    //Get the Day No.
    week_day =Calendar.getDay();
    //Start new table row if Sunday
    if(week_day == 0) { cal += '<tr>'; }
    if(week_day != 7) {
     if (((day <= TodaysDate.getDate()) && (Calendar.getMonth() == TodaysDate.getMonth()) && (Calendar.getYear() == TodaysDate.getYear())) || ((day > MaxDate.getDate()) && (Calendar.getMonth() == MaxDate.getMonth()) && (Calendar.getYear() == MaxDate.getYear()))) {
      HTMLtd = '<td>'
      // Use different style for weekend
      if ((week_day == 0) || (week_day == 6)) { HTMLtd = '<td class="daycellweekend">' }
      if ((Calendar.getDate()==TodaysDate.getDate() ) && (Calendar.getMonth() == TodaysDate.getMonth()) && (Calendar.getYear() == TodaysDate.getYear())) {
       // Highlight Todays Date
       cal += HTMLtd + '<span class="calendardayshighlight">' + day + '</span></td>';
      } else {
       // Disabled
       cal += HTMLtd + '<span class="calendardaysdisabled">' + day + '</span></td>';
      }
     } else {
      // Normal Day
      HTMLtd = '<td>'
      if ((week_day == 0) || (week_day == 6)) { HTMLtd = '<td class="daycellweekend">' }
      // Highlight Selected Date
      if ((day == SelectedDate.getDate()) && (Calendar.getMonth() == SelectedDate.getMonth()) && (Calendar.getYear() == SelectedDate.getYear())) {
       cal += '<td class="daycellhighlight"><a href="javascript:setFieldDate(' + day + ')">' + day + '</a></td>'
      } else {
       cal += HTMLtd + '<a class="calendardays" href="javascript:setFieldDate(' + day + ')">' + day + '</a></td>';
      }
     }
    }
    // End Row if Saturday
    if (week_day == 7) {  cal += '</tr>'; }
    // Move to next Day in month
    Calendar.setDate(day+1);
  }
 }
  cal += '</table>';
  return cal;
}


// Set the value in the date field specified
function setFieldDate(DayNo) {
  DisplayedMonth = Calendar.getMonth()
  DisplayedYear = Calendar.getYear();
  // Identify which month is selected
  if (DisplayedMonth == 0) {
   DisplayedMonth = 12
   DisplayedYear -= 1
  }
  if (DayNo < 10) { DayNo = '0' + DayNo }
  if (ns4 || ns6) { DisplayedYear += 1900 };       // Netscape Fix on Y2K
  // Set field value
  FieldObjDay1.options[DayNo-1].selected = true
  for (i=0;i<FieldObjMonthYear1.options.length;i++) {
  if (FieldObjMonthYear1.options[i].value == (DisplayedMonth + '/' + DisplayedYear)) {
   FieldObjMonthYear1.options[i].selected = true
  }
  }

  // Hide the Layer
  HideLayer()
  DynamicUpdate('date','change',1);
}


// Display new date when Month selector is used
function DispNewDate() {
  // Get value of select field
  IDRef = getRef('MonthSelection');
  NewDisplayDate = IDRef.value

  // Split Month and Year
  var NewDisplaySplit = NewDisplayDate.split(",")
  NewMonth = NewDisplaySplit[0]
  NewYear = NewDisplaySplit[1]
  // Set Calendar to show new month and year
  Calendar.setDate(1);
  Calendar.setMonth(NewMonth-1);
  Calendar.setYear(NewYear);
  // Update HTML
  UpdateDisplay()
}


// Move onto the next month
function NextMonth_Click() {
 Calendar.setDate(1);
 UpdateDisplay()
}


// Move to the previous month
function PrevMonth_Click() {
  NewMonth = Calendar.getMonth() - 1
  NewYear = Calendar.getYear()
  if (ns4 || ns6) { NewYear += 1900 };       // Netscape Fix on Y2K
  // If January then need to move to December and previous year
  if (NewMonth < 1) {
   NewMonth = 12 + NewMonth
   NewYear -= 1
  }
  // Set Calendar to new Month and Year
  Calendar.setMonth(NewMonth-1);
  Calendar.setYear(NewYear);
  Calendar.setDate(1);
  // Update HTML
  UpdateDisplay()
}


// Generate Months as HTML options
function HTMLMonths() {
  HTMLStr = ''
  TodaysDate = new Date();
  // Identify how many months are required
  MaxMonthsDisp = (MaxDate.getYear() - TodaysDate.getYear()) * 12
  MaxMonthsDisp += (MaxDate.getMonth() - TodaysDate.getMonth())  + 1

  for(index=0; index < MaxMonthsDisp; index++) {
   // Add months to current date and identify new month and year
   ShowMonth = TodaysDate.getMonth() + index
   ShowYear = TodaysDate.getYear()
   if (ns4 || ns6) { ShowYear += 1900 };
   ShowYear += Math.floor(ShowMonth / 12)
   ShowMonth = (ShowMonth % 12) + 1

   // Get the selected month and Year
   SelMonth = Calendar.getMonth() + 1
   SelYear = Calendar.getYear()
   if (ns4 || ns6) { SelYear += 1900 };       // Netscape Fix on Y2K
   SelectedOption = ''

  // Show current selection in select field
   if ((SelMonth == ShowMonth) && (SelYear == ShowYear)) { SelectedOption = ' selected ' }
   HTMLStr += '<option ' + SelectedOption + ' value="' + ShowMonth + ',' + ShowYear + '">' + MonthName[ShowMonth-1] + ' ' + ShowYear + '</option>';
  } // for
  return HTMLStr
}


// Update the HTML and show on Layer
function UpdateDisplay() {
 PrevMonthHTML = '&nbsp;'
 NextMonthHTML = '&nbsp;'
 TodaysDate = new Date();
  // Generate HTML for Previous Month Link
 if ((Calendar.getMonth() != TodaysDate.getMonth()) || (Calendar.getYear() != TodaysDate.getYear())) {
   var calendar_prev="/wp-content/themes/revolution_city-10/thomson_files/calendar_prev.gif";
   PrevMonthHTML = '<a href="javascript:PrevMonth_Click()"><img src="'+calendar_prev+'" border="0"></a>'
  }
  // Generate HTML for Next Month Link
  if ((Calendar.getMonth() != MaxDate.getMonth()) || (Calendar.getYear() != MaxDate.getYear())) {
  // var calendar_next="$cms.getAssetUrl('searchpanel.article', 'calendar_next')";
  var calendar_next="/wp-content/themes/revolution_city-10/thomson_files/calendar_next.gif";
     NextMonthHTML = '<a href="javascript:NextMonth_Click()"><img src="'+calendar_next+'" border="0"></a>'
  }
  // Start to generate HTML for Page
  outHTML = '<div class="calendarmain">'

  // Add Month Navigation
  outHTML += '<div class="monthnav">' + PrevMonthHTML + '</div>'
  outHTML += '<select id="MonthSelection" onkeyup="DispNewDate()" onchange="DispNewDate()" name="MonthSel">' + HTMLMonths() + '</select>'
  outHTML += '<div class="monthnav">' + NextMonthHTML + '</div>'

  // Add Calendar Table
  outHTML += generatetable();

  // Add Close link
  outHTML += '<a class="actionclose" href="javascript:HideLayer()">Close</a></div>'

  // Output HTML to Layer
  IDRef = getRef('divcalendar_home');
  IDRef.innerHTML = unescape(outHTML);
}

function getCoordinates(e) {
 var posx = 0;
 var posy = 0;
 if (!e) var e = window.event;
 if (e.pageX || e.pageY)  {
  posx = e.pageX;
  posy = e.pageY;
 }
 else if (e.clientX || e.clientY)  {
  posx = e.clientX + document.body.scrollLeft
   + document.documentElement.scrollLeft;
  posy = e.clientY + document.body.scrollTop
   + document.documentElement.scrollTop;
 }
 var posarr = new Array();
 posarr[posarr.length] = posx;
 posarr[posarr.length] = posy
 return posarr;;
}

// Main Function
function PopupDate(imgobjname,datemin,datemax,frompage,event) {
  if (!PageLoad)
  {
      // if(getElem('type').value== '0')
      // {
       // alert("Please select your holiday type from the first drop down box before you start your search");
       // return;
      // }
  }
  var xpos,ypos
  FieldObjDay1 = getElem('calendar_day')
  FieldObjMonthYear1 = getElem('calendar_month_year')
  // Set Minimum Date
  var NewDateMin = datemin.split("/")
  TodaysDate.setDate(NewDateMin[1]-1); // Date passed in is day after today
  TodaysDate.setMonth(NewDateMin[0]-1);
  TodaysDate.setFullYear(NewDateMin[2]);
  // Set Maximum Date
  var NewDateMax = datemax.split("/")
  MaxDay = NewDateMax[1]
  MaxMonth = (NewDateMax[0])-1
  MaxYear = NewDateMax[2]

  MaxDate.setFullYear(MaxYear);
  MaxDate.setMonth(MaxMonth);
  MaxDate.setDate(MaxDay);

  // Set current selected Date
  SelDay = FieldObjDay1.options[FieldObjDay1.selectedIndex].value
  var arrDateSplit = FieldObjMonthYear1.value.split('/')
  SelMonth = arrDateSplit[0]-1
  SelYear = arrDateSplit[1]
  // Check that Entered date is below Maximum allowable
  if (ns4 || ns6) { MaxYear += 1900 };       // Netscape Fix on Y2K
  if (((SelMonth > MaxMonth) && (SelYear == MaxYear)) || (SelYear > MaxYear)) {
   SelDay = 1
     SelMonth = 1
   SelYear = 2000
  }
  // Check that Entered date is after today
  MinMonth = TodaysDate.getMonth()
  MinYear = TodaysDate.getYear()
  if (ns4 || ns6) { MinYear += 1900 };       // Netscape Fix on Y2K
  if (((SelMonth < MinMonth) && (SelYear == MinYear)) || (SelYear < MinYear)) {
    SelDay = 1
    SelMonth = 1
    SelYear = 2000
  }
  // Set current selection
  SelectedDate.setDate(SelDay);
  SelectedDate.setMonth(SelMonth);
  SelectedDate.setYear(SelYear);

  // If no selection then start with this month and year
  if (SelYear == 2000) {
    SelMonth = TodaysDate.getMonth()
    SelYear = TodaysDate.getYear()
    if (ns4 || ns6) { SelYear += 1900 };       // Netscape Fix on Y2K
  }
  // Set to curent selection
  Calendar.setDate(1);
  Calendar.setMonth(SelMonth);  // Start the calendar month at now
  Calendar.setYear(SelYear);    // Start the calendar month at now

  //Move DIV

  IDRef = getRef('divcalendar_home');
  IDRef.style.display="block"

 if (screen.width==800)
   {
      if (typeof(frompage)!="undefined" && frompage=="results")
      {

         var posArray = getCoordinates(event);
         IDRef.style.top = (posArray[1] - 275) +"px";
         IDRef.style.left = (posArray[0] - 5)+"px";
         }
         else if (typeof(frompage)!="undefined" && frompage=="alternatesearch")
         {
         ShowDropDown(0, "altsearch");
         IDRef.style.top = '35px'
         IDRef.style.left = (((document.body.clientWidth - 780)/2) + 265) + 'px'
         }
         else if (typeof(frompage)!="undefined" && frompage=="lightpanel")
         {
         ShowDropDown(0, "lightpanel");
         IDRef.style.top = document.getElementById('lightbox').offsetTop+42+'px';
         IDRef.style.left = document.getElementById('lightbox').offsetLeft+150+ 'px';
         IDRef.style.zIndex='1000';
         }
         else if(typeof(frompage=="mainsearch"))
         {
         IDRef.style.top = '70px'
         IDRef.style.left = (((document.body.clientWidth - 780)/2) + 230) + 'px'
         }
   }
   else
      {
        // Identify if in a frameset
        if (document.body.clientWidth > 300)
        {
          if (typeof(frompage)!="undefined" && frompage=="results")
          {
             ShowDropDown(0, "research");
             var posArray = getCoordinates(event);
             IDRef.style.top = (posArray[1] - 105) +"px";
             IDRef.style.left = (posArray[0] - 300)+"px";
          }
          else if (typeof(frompage)!="undefined" && frompage=="alternatesearch")
          {
             ShowDropDown(0, "altsearch");
             IDRef.style.top = '175px';
             IDRef.style.left = (((document.body.clientWidth - 780)/2) - 40) + 'px';
          }
          else if (typeof(frompage)!="undefined" && frompage=="lightpanel")
          {
        	 ShowDropDown(0, "lightpanel");
             IDRef.style.top = document.getElementById('lightbox').offsetTop+40+'px';
             IDRef.style.left = document.getElementById('lightbox').offsetLeft+251+ 'px';
             IDRef.style.zIndex='1000';
          }
          else if (typeof(frompage)!="undefined" && frompage=="horizontalPanel")
          {
             ShowDropDown(0, "mainsearch");
             IDRef.style.top = document.getElementById('search_panel').offsetTop+0+'px'
             IDRef.style.left = (((document.body.clientWidth - 1080)/2) + 150) + 'px';
          }
          else
          {
             if (typeof(frompage)!="undefined" && frompage=="brochureResults")
	          {
	              ShowDropDown(0, "mainsearch");
             IDRef.style.top = document.getElementById('search_panel').offsetTop+40+'px'
             IDRef.style.left = (((document.body.clientWidth - 780)/2) - 85) + 'px';
	          }
	          else
	          {
	             ShowDropDown(0, "mainsearch");
	             IDRef.style.top = document.getElementById('search_panel').offsetTop+60+'px'
	             IDRef.style.left = (((document.body.clientWidth - 780)/2) - 70) + 'px';
	          }
          }
        }

        else{
             ShowDropDown(0, "mainsearch");
             if (typeof(frompage)!="undefined" && frompage=="deepLinkPanel")
	         {
                IDRef.style.top = 120+'px';
	         }
             else
             {
            	 IDRef.style.top = document.getElementById('search_panel').offsetTop+40+'px';
             }
             IDRef.style.left = '10px';
        }
  }
  // Uppdate HTML and layer
  UpdateDisplay()
}

// Hide the Layer
function HideLayer()
{
  IDRef = getRef('divcalendar_home');
  IDRef.style.display = 'none';
  if (typeof(productType)!="undefined"){
     if (productType!="CRUISE"){
        ShowDropDown(1, "mainsearch");
     }
  }
  ShowDropDown(1, "mainsearch");
  ShowDropDown(1, "altsearch");
  ShowDropDown(1, "research");
  UpdateDayOfWeek();
  updateCheckoutDate();
}

function ShowDropDown(show,search)
{
 if (search == "altsearch")
 {
        select_array=new Array ("calendar_day", "calendar_month_year", "destinationCode", "resortCode", "accommodationCode")
     for (var i=0; i<select_array.length; i++)
     {
            document.getElementById(select_array[i]).style.visibility=(show==0)?"hidden":"visible";
     }
 }
 else if (search == "research")
 {
        select_array=new Array ("calendar_day", "calendar_month_year", "destinationCode")
     for (var i=0; i<select_array.length; i++)
     {
            document.getElementById(select_array[i]).style.visibility=(show==0)?"hidden":"visible";
     }
 }
 else if (search == "mainsearch")
 {
        select_array=new Array ("calendar_day", "calendar_month_year", "duration", "departuremargin" , "departureAirportCode")
     for (var i=0; i<select_array.length; i++)
     {
            document.getElementById(select_array[i]).style.visibility=(show==0)?"hidden":"visible";
     }
 }
 else if (search == "lightpanel")
 {
        select_array=new Array ("calendar_day", "calendar_month_year")
     for (var i=0; i<select_array.length; i++)
     {
            document.getElementById(select_array[i]).style.visibility=(show==0)?"hidden":"visible";
     }
 }
}
