// $Revision:   2.0  $

// Popup Calendar
// Version: 1.1
// Copyright 2001 Lunn Poly

// Identify Browser type IE4, IE5+, NS4, NS6
var ie4=(document.all)? true:false;
var ns4=(document.layers)? true:false;
//var ns6=(document.getElementById) ? true : false;
var ns6=false;
var ie5=(ie4 && ns6)?true:false;
var ie5=(document.getElementById) ? true : false;
if (ie5) { ns6 = false }

// Declare Global Variables
var HTMLMonths;
var Calendar = new Date();
var TodaysDate = new Date();
var MaxDate = new Date();
var SelectedDate = new Date();
var FieldObjChange = new Object();

// Calendar icon image height & width settings
// *** This would be better obtained dynamically
var icoHeight = 22;
var icoWidth = 29;


// Error Trapping IE
//if (ie4 || ie5) { window.onerror = catchError; }
function catchError() {
 return true;
}

// Path to Images
var Image_Path = 'img/';

// 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 += 1900 };  

// Write Layer onto Page
if (ns4) { 
 document.write('<layer left="0" z-index="100" top="0" width="140" height="160" visibility="hide" id="nslayer1"></layer>');
 } else {
 document.write('<div id="iediv1" style="visibility:hidden;position:absolute;left:30px;width:140px; z-index: 100; height: 160px; top:100px; margin-left:-15px;"></div>');
 }

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 border="0" cellspacing="0" cellpadding="0" width="136" height="1"><tr><td width="3"></td><td width="130" class="seperator" height="1"><p class="spacer">&nbsp;</td><td width="3"></td></tr></table>';
cal += '<table border="0" align="center" cellspacing="0" cellpadding="1" width="130"><tr><td rowspan="10" width="1"></td><td></td><tr rowspan="10" width="1"></td></tr><tr>';

// Netscape Fix - Event Trigger
//window.status = 'Calculating (60%)';

// Create row for days of week
for(index=0; index < 7; index++)
{
 cal += '<td width="18" align="center" class="daycell"><p class="daysofweek">' + day_of_week[index] + '</td>';
}
cal += '</td></tr><tr>';

day1 = Calendar.getDay();

// Use empty cells to add gaps until today
for(index=0; index < day1; index++) { 
	 cal += '<td class="daycell">&nbsp;</td>'; 
	 }

// Loop round all days in month
for(index=0; index < 31; index++)
{
  // Netscape Fix - Event Trigger
  PercentCompleted = 69 + index;
  //window.status = 'Calculating (' + PercentCompleted + '%)';

 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.getFullYear() == TodaysDate.getFullYear())) || ((day > MaxDate.getDate()) && (Calendar.getMonth() == MaxDate.getMonth()) && (Calendar.getFullYear() == MaxDate.getFullYear()))) {
	  HTMLtd = '<td class="daycell">';
    // 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.getFullYear() == TodaysDate.getFullYear())) { 
	    // Highlight Todays Date
	    cal += HTMLtd + '<span class="calendardayshighlight">' + day + '</td>';	    
	  } else {
	    // Disabled
	    cal += HTMLtd + '<span class="calendardaysdisabled">' + day + '</td>';
	  } 
	} else {
	   // Normal Day	
	  HTMLtd = '<td valign="middle" class="daycell">';
	  if ((week_day == 0) || (week_day == 6)) { HTMLtd = '<td valign="middle" class="daycellweekend">' }
	  // Highlight Selected Date
	  if ((day == SelectedDate.getDate()) && (Calendar.getMonth() == SelectedDate.getMonth()) && (Calendar.getFullYear() == SelectedDate.getFullYear())) { 
	    cal += '<td valign="middle" class="daycellhighlight"><a class="dayselected" 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 += '</td></tr></table>';
return cal;
}

// Set the value in the date field specified
function setFieldDate(DayNo) {
DisplayedMonth = Calendar.getMonth();
DisplayedYear = Calendar.getFullYear();
// Identify which month is selected
if (DisplayedMonth == 0) {
 DisplayedMonth = 12;
 DisplayedYear -= 1;
 }
if (DisplayedMonth < 10) { DisplayedMonth = '0' + DisplayedMonth }
if (DayNo < 10) { DayNo = '0' + DayNo }
if (ns4 || ns6) { DisplayedYear += 1900 };	    		// Netscape Fix on Y2K

// mod to only display 2-digit year **********************MF
DisplayedYear = DisplayedYear.toString();
DisplayedYear = DisplayedYear.substring(DisplayedYear.length-2, DisplayedYear.length);


// Set field value
FieldObjChange.value = DayNo + '/' + DisplayedMonth  + '/' + DisplayedYear;  
// Hdie the Layer
HideLayer();
}

// Display new date when Month selector is used 
function DispNewDate() {
// Get value of select field
if (ns4) { 
  obj1 = document.layers['nslayer1'].document.forms[0].elements[0];
  NewDisplayDate = obj1.options[obj1.selectedIndex].value; 
 } else {
  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.getFullYear();
if (ns4 || ns6) { NewYear += 1900 };	    		// Netscape Fix on Y2K
// If January then need to move to Decemeber 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 GetHTMLMonths() {
HTMLStr = '';
// Identify how many months are required
MaxMonthsDisp = (MaxDate.getFullYear() - TodaysDate.getFullYear()) * 12;
MaxMonthsDisp += (MaxDate.getMonth() - TodaysDate.getMonth())  + 1;
for(index=0; index < MaxMonthsDisp; index++) { 

   // Netscape Fix - Event Trigger
   PercentCompleted = (20 + index);
   //window.status = 'Calculating (' + PercentCompleted + '%)';

	 // Add months to current date and identify new month and year
   ShowMonth = TodaysDate.getMonth() + index;
   ShowYear = TodaysDate.getFullYear();

   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.getFullYear();
   
   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() {
// Netscape Fix - Event Trigger
//window.status = 'Calculating (10%)';
window.status = '';

// Show Calculating message in Netscape
if (ns4) {
   outHTML = '<table class="calendarcolour" cellpadding="0" cellspacing="0" border="2" width="140" height="160"><tr><td align="center" valign="top">';
   outHTML += '<table cellpadding="0" cellspacing="0" border="0" width="136" height="156"><tr><td align="center" valign="middle">';
   outHTML += '<span class="daysofweek">Calculating...</span>';
   outHTML += '</td></tr></table></td></tr></table>';
   document.layers['nslayer1'].document.open();
   document.layers['nslayer1'].document.write(unescape(outHTML));
   document.layers['nslayer1'].document.close();
   }

// Generate HTML for Previous Month Link
if ((Calendar.getMonth() == TodaysDate.getMonth()) && (Calendar.getFullYear() == TodaysDate.getFullYear())) {
 PrevMonthHTML = '<p class="spacer">&nbsp;';
 } else {
 PrevMonthHTML = '<a href="javascript:PrevMonth_Click()"><img src="'+Image_Path+'calendar_prev.gif" border="0" alt="previous month"></a>' } 

// Generate HTML for Next Month Link
if ((Calendar.getMonth() == MaxDate.getMonth()) && (Calendar.getFullYear() == MaxDate.getFullYear())) {
 NextMonthHTML = '<p class="spacer">&nbsp;';
  } else {
 NextMonthHTML = '<a href="javascript:NextMonth_Click()"><img src="'+Image_Path+'calendar_next.gif" border="0" alt="next month"></a>' }

// Start to generate HTML for Page
outHTML = '';

// Form tag required for Netscape but IE does not allow
if (ns4) { outHTML += '<form name="CalendarFormPopup" method="post">' }
// start outer div
outHTML += '<div id="outline">';
outHTML += '<table cellpadding="0" cellspacing="0" border="0" width="136" height="156"><tr><td align="center" valign="top">';
outHTML += '<table cellpadding="1" cellspacing="0" border="0" width="136"><tr>';
outHTML += '<td height="30" width="18" valign="middle" align="right">' + PrevMonthHTML + '</td>';

// Netscape Fix - Event Trigger
//window.status = 'Calculating (50%)';

// Add Months
outHTML += '<td width="100" align="center"><select class="text" id="MonthSelection" onchange="DispNewDate()" name="MonthSel">' + GetHTMLMonths() + '</select></td>';
outHTML += '<td width="18" valign="middle" align="left">' + NextMonthHTML + '</td>';

// Form tag required for Netscape but IE does not allow
if (ns4) { outHTML += '</form>' }
// end outer div
outHTML += '</div>';

// Add Calendar HTML Table
outHTML += generatetable(); 

// End HTML 
outHTML += '</td></tr><tr><td height="2" valign="top" align="center">';
outHTML += '<table border="0" cellspacing="0" cellpadding="0" width="136" height="1"><tr><td width="3"></td><td width="130" class="seperator" height="1"><p class="spacer">&nbsp;</td><td width="3"></td></tr></table>';
outHTML += '</td></tr><tr><td height="20" valign="middle" align="center"><a class="closelayer" href="javascript:HideLayer()">Close</a></td></tr></table>';
outHTML += '</td></tr></table>';

// Output HTML to Layer
if (ns4) {
   document.layers['nslayer1'].document.open();
   document.layers['nslayer1'].document.write(unescape(outHTML));
   document.layers['nslayer1'].document.close();
 } else {
    try{ 
       IDRef = getRef('iediv1');
	     IDRef.innerHTML = unescape(outHTML);
	    }
	catch(e){}
 }
}

// Main Function
function PopupDate(imgobjname,fieldobj,datemax,putItWhere) {
var xpos,ypos,myX,myY;
FieldObjChange = fieldobj;

MM_showHideLayers('divCalendarPopupObj0','','hide');
MM_showHideLayers('divCalendarPopupObj1', '', 'hide');
if (bLoadThomsonPanel==true) {
    $('divCalendarPopupObj21').hide();
}
else {
    //MM_showHideLayers('divCalendarPopupObj2', '', 'hide');
    $('divCalendarPopupObj2').hide();

}
MM_showHideLayers('divCalendarPopupObj3', '', 'hide');
MM_showHideLayers('divCalendarPopupObj4','','hide');
MM_showHideLayers('divCalendarPopupObj5', '', 'hide');
MM_showHideLayers('divCalendarPopupObj6', '', 'hide');
MM_showHideLayers('divCalendarPopupObj7', '', 'hide');
MM_showHideLayers('divCalendarPopupObj8', '', 'hide');

//determine positon of calendar layer relative to image
switch (putItWhere) {
			 case 'above': //not yet implemented
			 			  myX=0
						  myY=0
						  break
			case 'below':
						 myX=-109
						 myY=0
						 break
		 case "left": 
						 myX=-129
						 myY=0
						 break
		case 'right':
		      myX=29
						myY=-22
						break
		default:
		      myX=0
						myY=0
}		

// Format date when clicking on Calendar icon
FormatDate(fieldobj);

// Set Maximum Date
var NewDateMax = datemax.split("/");
MaxDay = NewDateMax[0];
MaxMonth = NewDateMax[1]; 
MaxYear = NewDateMax[2]; 
MaxDate.setDate(MaxDay);
MaxDate.setMonth(MaxMonth-1);
MaxDate.setYear(MaxYear);

// Set current selected Date
DateSel = FieldObjChange.value;
var DatePat = /^(\d{2})(\x2F{1})(\d{2})(\x2F{1})(\d{4})$/i; // Match Date
if (DatePat.test(DateSel) == true) {
 var NewSelDate = DateSel.split("/");
 SelDay = NewSelDate[0];
 SelMonth = NewSelDate[1]-1;
 SelYear = NewSelDate[2];

 // Check that Entered date is below Maximum allowable
 MaxMonth = MaxDate.getMonth();
 MaxYear = MaxDate.getFullYear(); 
 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.getFullYear();
 if (ns4 || ns6) { MinYear += 1900 };	    		// Netscape Fix on Y2K
 if (((SelMonth < MinMonth) && (SelYear == MinYear)) || (SelYear < MinYear)) {
   SelDay = 1;
   SelMonth = 1;
   SelYear = 2000;
 }  
// Default to date before today
} else {
 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.getFullYear(); 
 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 Layer to correct position under image

    if (ns4) {
       xpos = (eval('xpos = document.' + imgobjname + '.x')) + myX;
       ypos = (eval('ypos = document.' + imgobjname + '.y + 23')) + myY;
       document.layers['nslayer1'].moveTo(xpos,ypos);
       document.layers['nslayer1'].visibility = 'show';
     } else {
       IDRef = getRef(imgobjname);
       xpos = IDRef.offsetLeft + myX;
       ypos = IDRef.offsetTop + myY;
       IDRef = getRef('iediv1');
       try{
       // Netscape 6 fix for moving a layer
	     if (false) {
  	     IDRef.style.marginLeft = xpos+7; 
  	     IDRef.style.marginTop = ypos + 28;
	     } else {
  	     IDRef.style.pixelLeft = xpos;	 
  	     IDRef.style.pixelTop = ypos + 23;
	     }
	     IDRef.style.visibility="visible";
	    }
	    catch(e){}
     }


// Uppdate HTML and layer
UpdateDisplay();

// Netscape Fix - Event Trigger
//window.status = '';
}

// Formats date field to dd/mm/yyyy
function FormatDate(obj) {
var enteredDate = obj.value;
var DatePat = /^(\d{1,2})(\x2F{1})(\d{1,2})(\x2F{1})(\d{4})$/i; // Match Date dd/mm/yyyy or d/m/yyyy
if (DatePat.test(enteredDate) == true) {
 var DateArrayVals = DatePat.exec(enteredDate);
 // Identify respective parts
 var mDay = DateArrayVals[1];
 var mMonth = DateArrayVals[3];
 var mYear = DateArrayVals[5];
 // Add leading zeros to day and month if required
 if (mDay.length < 2) { mDay = '0' + mDay }
 if (mMonth.length < 2) { mMonth = '0' + mMonth }
 // Format new date and Replace entered value
 obj.value = mDay + '/' + mMonth + '/' + mYear;
 }
}

// Hide the Layer
function HideLayer() {

if (ns4) {
   document.layers['nslayer1'].visibility = 'hide';
 } else {
   IDRef = getRef('iediv1');
   // Netscape 6 fix for moving a layer
	 if (ns6) {
  	 IDRef.style.marginLeft = -200; 
  	 IDRef.style.marginTop = -100;
   }
   IDRef.style.visibility = 'hidden';
 }

if ( document.searchForm.DepartureDate0.value != '' ) {

	var dd ='';
	var mm ='';
	var yy ='';

	dd = document.searchForm.DepartureDate0.value.substring(0,2);
	mm = document.searchForm.DepartureDate0.value.substring(5,3);
	yy = document.searchForm.DepartureDate0.value.substring(6,8);

	document.searchForm.uxDay.selectedIndex = dd -1;
	document.searchForm.uxMonth.selectedIndex = mm -1;

	for (i=0; i<( document.searchForm.uxYear.options.length ); i++) {
		if ( yy == document.searchForm.uxYear[i].value.substring(2,4) ) {
			document.searchForm.uxYear.selectedIndex = i;						
		}
	}

	SetDays(document.searchForm.uxMonth.options[document.searchForm.uxMonth.options.selectedIndex].value,document.searchForm.uxYear.options[document.searchForm.uxYear.options.selectedIndex].value,document.searchForm.uxDay,0,'dd','d');
}

MM_showHideLayers('divCalendarPopupObj0','','show');
MM_showHideLayers('divCalendarPopupObj1', '', 'show');
if (bLoadThomsonPanel == true) {
    $('divCalendarPopupObj21').show();
}
else {
    $('divCalendarPopupObj2').show();
    //MM_showHideLayers('divCalendarPopupObj2', '', 'show');
}
MM_showHideLayers('divCalendarPopupObj3', '', 'show');
MM_showHideLayers('divCalendarPopupObj4','','show');
MM_showHideLayers('divCalendarPopupObj5', '', 'show');
MM_showHideLayers('divCalendarPopupObj6', '', 'show');
MM_showHideLayers('divCalendarPopupObj7', '', 'show');
MM_showHideLayers('divCalendarPopupObj8', '', 'show');

}

// Main calling function from HTML Page
function CalendarLayer(FormName,DateFieldName,MaxDateAllowed,myWhere) {
// Output HTML to show icon
if (ns4) { 
  document.write('<a tabindex=-1 href="javascript:PopupDate('+String.fromCharCode(39)+DateFieldName+'_Image'+String.fromCharCode(39)+',document.'+FormName+'.'+DateFieldName+','+String.fromCharCode(39)+MaxDateAllowed+String.fromCharCode(39)+','+String.fromCharCode(39)+myWhere+String.fromCharCode(39)+')"><img align="absmiddle" border="0" width="44" height="12" tabindex="-1" src="'+Image_Path+'calendardrop.gif" id="' + DateFieldName+'_Image" name="'+DateFieldName+'_Image" alt="calendar"></a>');
 } else {
 document.write('<a tabindex=-1 href="javascript:PopupDate('+String.fromCharCode(39)+DateFieldName+'_Image'+String.fromCharCode(39)+',document.'+FormName+'.'+DateFieldName+','+String.fromCharCode(39)+MaxDateAllowed+String.fromCharCode(39)+','+String.fromCharCode(39)+myWhere+String.fromCharCode(39)+')"><img align="absmiddle" border="0" width="44" height="12" tabindex="-1" src="'+Image_Path+'calendardrop.gif" id="' + DateFieldName+'_Image" name="'+DateFieldName+'_Image"  alt="calendar" style="position:relative"></a>');
 //document.write('<a tabindex=-1 href="javascript:PopupDate('+String.fromCharCode(39)+DateFieldName+'_Image'+String.fromCharCode(39)+',document.'+FormName+'.'+DateFieldName+','+String.fromCharCode(39)+MaxDateAllowed+String.fromCharCode(39)+','+String.fromCharCode(39)+myWhere+String.fromCharCode(39)+')"><img align=absmiddle border="0" tabindex=-1 src="'+Image_Path+'calendardrop.gif" id="' + DateFieldName+'_Image" name="'+DateFieldName+'_Image" width=29 height=22 alt="" style="position:relative"></a>');


 }
}