// $Id: LSCBooking.js,v 1.1.2.1 2010/03/29 12:58:26 PC417\makas Exp $
// supporting javascript for Center Parcs Web booking

var originalDurations = new Array();

var daysinmonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var weekdays = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat','Sun');

function changeboxes()
{
  var curform = document.getElementById('Form1');
  var currDate = new Date();
  
  currDate.setDate(1);

//  var currYear = currDate.getFullYear();
//  if (currYear < 1000) currYear += 1900;
//  var nextYear =  currYear + 1;

  var currDate1 = new Date();
  curform.dateRangeStart.value = formatDate(currDate1,"yyMMdd");
  currDate1.setYear(currDate1.getFullYear() + 2);
  curform.dateRangeEnd.value = formatDate(currDate1,"yyMMdd");

 var monthyear = curform.monthyear;
  while (monthyear.length > 0) {
    monthyear[monthyear.length-1] = null; 
  }

  var latestDate = new Date();

  var newDate = new Date();
  newDate.setDate(1);

  var counter = 1;
  
  while (newDate.getYear() <= latestDate.getYear()) {
    if (newDate.getYear() == latestDate.getYear() && newDate.getMonth() == latestDate.getMonth()) {
       break;
    }
    newDate.setMonth(newDate.getMonth() + 1);
    counter++;
  }
 
  var startD = new Date(document.getElementById('startD').value); 
  var endD = new Date( document.getElementById('endD').value );

  if(currDate.getTime() < startD.getTime())
  {
    currDate.setMonth (startD.getMonth());
    currDate.setYear (startD.getFullYear());
  }
  latestDate.setMonth (endD.getMonth()); 	
  latestDate.setYear (endD.getFullYear());


  var monthDiff = 0;
  if (endD.getFullYear() > startD.getFullYear()) {
      if((endD.getFullYear() - startD.getFullYear()) > 1) {
          monthDiff = monthDiff + ((endD.getYear() - startD.getYear()) - 1) * 12; 
      }
      monthDiff = monthDiff + (11 - startD.getMonth() + endD.getMonth() + 1);  
  } else if(endD.getMonth() > startD.getMonth()) { 
    monthDiff = endD.getMonth() - startD .getMonth();  
  }
  
//  monthyear.length = 18;
   monthyear.length = counter + 1;
   counter = monthDiff + 1; 
//  for(var i = 0; i < 18; i++) {
  for(var i = 0; i < counter + 1; i++) {
	var optionValue = formatDate(currDate,"NNN yyyy");
	var optionName = formatDate(currDate,"MM/yyyy");
        var month = currDate.getMonth();

	monthyear[i] = new Option(optionValue,optionName);

        normalMonths[i] = "('" + optionValue + "', '" + optionName + "')";

        
        if ((month == 11) && (newyearMonths.length == 0)) {
          newyearMonths[0] = "('" + optionValue + "', '" + optionName + "')";
        }
        if ((month == 0) && (newyearMonths.length > 0)) {
          newyearMonths[1] = "('" + optionValue + "', '" + optionName + "')";
        }

        currDate.setMonth(currDate.getMonth() + 1);
  }


  var durationSelect = curform.durationSelect;
  while (durationSelect.length > 0) {
    durationSelect[durationSelect.length-1] = null; 
  }

  var currDateNY1 = new Date();
  var currDateNY2 = new Date();
  currDateNY2.setYear(currDateNY2.getFullYear() + 1);
  var currDateNY3 = new Date();
  currDateNY3.setYear(currDateNY3.getFullYear() + 2);

  durationSelect.length = 8;
  durationSelect[0] = new Option("Select break", "Select");
  durationSelect[1] = new Option("Midweek (4 nights)", "4");
  durationSelect[2] = new Option("Weekend (3 nights)", "3");
  durationSelect[3] = new Option("Week (7 nights)", "7");
  
  durationSelect[4] = new Option("Pre-Christmas " + formatDate(currDateNY1,"yyyy") + " (2 nights)", "PRXM" + formatDate(currDateNY1,"yy"));
  durationSelect[5] = new Option("Christmas Breaks " + formatDate(currDateNY1,"yyyy"), "XMAS" + formatDate(currDateNY1,"yy"));
  durationSelect[6] = new Option("Pre-New Year " + formatDate(currDateNY1,"yyyy") + " (2 nights)", "PRNY" + formatDate(currDateNY1,"yy"));
  durationSelect[7] = new Option("New Year " + formatDate(currDateNY1,"yyyy")  + "/" + formatDate(currDateNY2,"yyyy"), "NY" + formatDate(currDateNY1,"yy") + formatDate(currDateNY2,"yy"));
  
//  durationSelect[3] = new Option("Christmas Breaks 2010", "XMAS10");
//  durationSelect[4] = new Option("New Year 2010/2011", "NY1011");

}



// removes the unwanted days from the duration drop down
function removeDuration(y,m,d)
{
  var curform = document.getElementById('Form1');
  var startDate = curform.startdate;
  setOriginalDurations();
  var selectElement = curform.durationSelect;
  var theDate = new Date(y,m-1,d,0,0,0);
  var theDoW = theDate.getDay();
  var days;
  
  // set the start date textbox
  startDate.value = formatDate(theDate,window.CP_dateFormat);

  if (theDoW == 1) { days = 3; }
  if (theDoW == 5) { days = 4; }
  
  // alert(days);
  
  for(i=0; i< selectElement.length; i++)
  {
    if (parseInt(selectElement[i].value) == days) { selectElement[i] = null; }
  }

}

function getOriginalDurations()
{
  var curform = document.getElementById('Form1');
  var selectElement = curform.durationSelect;
  for(i=0; i< selectElement.length; i++)
  {
    originalDurations[i] = new Array();
    originalDurations[i][0] = selectElement.options[i].text;
    originalDurations[i][1] = selectElement.options[i].value;
  }

}

function setOriginalDurations()
{
  var curform = document.getElementById('Form1');
  for(i=0; i< curform.durationSelect.length; i++)
  {
    curform.durationSelect[i] = null;
  }

  var selectElement = curform.durationSelect;
  for(i=0; i< originalDurations.length; i++)
  {
    selectElement[i] = new Option(originalDurations[i][0], originalDurations[i][1]);
  }
  
}

function changedates(initFlag) {
  var curform = document.getElementById('Form1');
  if (initFlag == null) initFlag = false;
  var monyr = curform.monthyear.options[curform.monthyear.selectedIndex].value;
  var dur = curform.durationSelect.options[curform.durationSelect.selectedIndex].value;
  var thedate = curform.dayinmonth;
  var amdate = monyr.substring(0,2)+"/01/"+monyr.substring(3,9); // need american date format!
  var tdate = new Date(amdate);
  var yy = tdate.getFullYear();
  var mm = tdate.getMonth();

  var count = 0;

  var minDate = new Date(curform.startD.value);
  var maxDate = new Date(curform.endD.value);

//DKJ 19-Jun-2007 - changed daysinmonth from [2] to [1] as this was setting March to 29 days in a leap year
  if (((yy % 4 == 0) && (yy % 100 != 0)) || (yy % 400 == 0)) daysinmonth[1] = 29;

  var selectedDay = getDropDownValue(thedate);
  
  while (thedate.length > 0) {
    thedate[thedate.length-1] = null; 
  }
  
  for (i=1; i<= daysinmonth[mm]; i++) {
    tdate.setYear(yy);
    tdate.setMonth(mm);
    tdate.setDate(i); 
    		if ((tdate.getTime() >= minDate.getTime()) && (tdate.getTime() <= maxDate.getTime())) {
			if ((tdate.getDay() == 1) && ((dur == 7 || dur == 4))){
				if (overrideDates.isChristmas(tdate) != null) continue;
				if (bolExcludeDate(dur, tdate.getFullYear(), mm, i))
					thedate[count++] = new Option(i+" "+weekdays[tdate.getDay()]+"",i);
			}
		  
			if ((tdate.getDay() == 5) && ((dur == 7 || dur == 3))) {
				if (overrideDates.isChristmas(tdate) == true) continue;
				if (bolExcludeDate(dur, tdate.getFullYear(), mm, i))
					thedate[count++] = new Option(i+" "+weekdays[tdate.getDay()]+"",i);
			}
		      
			if (dur != 7 && dur != 3 && dur != 4) {
				initFlag = true;
				if (overrideDates.isChristmas(tdate) == true) {
				var opts = overrideDates.getOptions(dur, tdate);
				for (var d = 0; d < opts.length; d++) thedate[count++] = opts[d];
				}
			}      
		}
	
  }
  //PHS code to add 'any day' to the bottom of the day select list.
  thedate[count++] = new Option("Any day",0);

  if (thedate.options.length == 1) {
//    if (!initFlag)
      //alert("The month you selected ("+curform.monthyear.options[curform.monthyear.selectedIndex].text+") has no available dates for the selected duration.");
//    var mon = curform.monthyear.selectedIndex;
//    if (mon+1 < curform.monthyear.options.length) {
//      curform.monthyear.options[mon].selected = false;  
//      curform.monthyear.options[mon+1].selected = true;  
//    } else {
//      curform.monthyear.options[mon].selected = false;  
//      curform.monthyear.options[0].selected = true;         
//    }
//    changedates(initFlag);  
  }

  if (selectedDay = "") selectedDay = "0"; 
  setDropDown(thedate, selectedDay);
  if(typeof thedate.onchange == "function")  thedate.onchange();
  grabArrDate(); 
}

function bolExcludeDate(duration, y, m, d) {
//note: Month array is 0 based
	var curform = document.getElementById('Form1');
	var tdate = new Date();

	if (y == tdate.getFullYear()) {
		if (m == tdate.getMonth()) {
			if (d == tdate.getDate()) {
				return false;
			}
		}
	}

	if (duration == "3") {
		//Weekends:
		var excludedWeekendDates = curform.excludedDates2.options;

		for (var i=0; i<excludedWeekendDates.length; i++) 
		{
		  var curDate = new Date(excludedWeekendDates[i].text);
		  if (y == curDate.getFullYear()) {
			if (m == curDate.getMonth()) {
				if (d == curDate.getDate()) {
					return false;
				}
			}
		  }
		}
	}
	else if (duration == "4") {
		//Midweeks:
		var excludedMidweekDates = curform.excludedDates1.options;

		for (var i=0; i<excludedMidweekDates.length; i++) 
		{
		  var curDate = new Date(excludedMidweekDates[i].text);
		  if (y == curDate.getFullYear()) {
			if (m == curDate.getMonth()) {
				if (d == curDate.getDate()) {
					return false;
				}
			}
		  }
		}
	}
	else if (duration == "7") {
		//Full weeks:
		var excludedWeekDates = curform.excludedDates3.options;

		for (var i=0; i<excludedWeekDates.length; i++) 
		{
		  var curDate = new Date(excludedWeekDates[i].text);
		  if (y == curDate.getFullYear()) {
			if (m == curDate.getMonth()) {
				if (d == curDate.getDate()) {
					return false;
				}
			}
		  }
		}
	}

return true;
}

function grabArrDate() {
	var form = document.getElementById('Form1');
	var monyr = getDropDownValue(form.monthyear);
	var day = getDropDownValue(form.dayinmonth);
	if (day == "0")
	{
		//alert(monyr);
		form.arrDate.value = monyr.substring(5,8)+monyr.substring(0,2)+"00";
		//alert('Any Day');
	}
	else
	{
		var d = new Date ( monyr.substring(0,2)+"/"+day+"/"+monyr.substring(3));
		form.arrDate.value = formatFSSDate(d);
		//alert('normal date');
	}
	// alert(form.arrDate.value);
}

function setMultipleValues(y,m,d) 
{
  var curform = document.getElementById('Form1');
  var tempdate;
  if (m<10)
  {
    tempdate = "0" + m+ "/" + y;
  }
  else
  {
    tempdate = m+ "/" + y;
  }

  for (var i=0; i<curform.monthyear.options.length; i++) 
  {
    if (curform.monthyear.options[i].value==tempdate) 
    {
      curform.monthyear.selectedIndex=i;
    }
  }

  changedates();
  
  for (var i=0; i<curform.dayinmonth.options.length; i++) 
  {
    if (curform.dayinmonth.options[i].value==d) 
    {
      curform.dayinmonth.selectedIndex=i;
    }
  }

}


function modifyCalendar(which)
{
  resetCalendar();
  var val;
  val = which.options[which.selectedIndex].value;
  var curform = document.getElementById('Form1');
  var excludedMidweekDates = curform.excludedDates1.options;
  var excludedWeekendDates = curform.excludedDates2.options;
  var excludedWeekDates = curform.excludedDates3.options;
  var endD = new Date(document.getElementById('endD').value);  

  if (val == -1) {
    populateDDBAry(which.form.monthyear, newyearMonths);  
  } else {
    populateDDBAry(which.form.monthyear, normalMonths);      
  }
  which.form.monthyear.options[which.form.monthyear.options.length-1] = null;

  
  if (val==3) {
    cal.setDisabledWeekDays(0,1,2,3,4,6);
    overrideDates.blackoutDates(cal);
    calExcludeDate(excludedWeekendDates);
  } else if (val==4)  {
    cal.setDisabledWeekDays(0,2,3,4,5,6);
    overrideDates.blackoutDates(cal);
    calExcludeDate(excludedMidweekDates);
  } else if (val==7) {
    cal.setDisabledWeekDays(0,2,3,4,6);
    overrideDates.blackoutDates(cal);
    calExcludeDate(excludedWeekDates); 
  } else { // special date range
    var xmasPeriod = overrideDates[val];
    if (xmasPeriod == null) return;
    cal.setDisabledWeekDays();
    var validDates = new Array();
    for (var i = 0; i < xmasPeriod.bookPatterns.length;i++) {
      if (xmasPeriod.getDate(i,"FSS") >= which.form.dateRangeStart.value)
      validDates[validDates.length] = xmasPeriod.getDate(i,"cal");
    }
    cal.enableOnlyDates(validDates);
  }

  startD = new Date(document.getElementById('startD').value);
  currDate = new Date();
  currDate.setDate(1);
  if(currDate.getTime() > startD.getTime())
  {
    startD = currDate;
  }
  cal.addDisabledDates(null, startD.getFullYear() + "-" + (startD.getMonth()+1) + "-" + startD.getDate());
  var month = endD.getMonth()+1;
  cal.addDisabledDates(endD.getFullYear() + "-" + month  + "-" + endD.getDate(),null);
 
}


function calExcludeDate(listToExclude)
{
  for (var i=0; i<listToExclude.length; i++) 
  {
    var curDate = listToExclude[i].text;
    cal.addDisabledDates(curDate,curDate);
  }

}



