function getDayDOBOptions(mySelect, d, m, y)
{
	var nDay = new Number(d);
	var nMonth = new Number(m);
	var nYear = new Number(y);
	var lSelected = 0;
	
	var daysinmonth = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	
	if (((nYear%4 == 0) && (nYear%100 != 0)) || (nYear%400 == 0)) 
		daysinmonth[2] = 29;

	if (mySelect.length == (daysinmonth[nMonth]))
	{
		mySelect.value = d;
	}
	else
	{	
		resetSelect(mySelect);
		
		addSelectOption(mySelect, ' ', 'X');
				
		for (var i = 1;i <= daysinmonth[nMonth];i++)
		{
			var sValue = i;
			var sName = i;
			var sOut = "";			
			
			if (sValue <= 9)						
				sValue = "0" + sValue;
						
			switch(sName)
			{
				case 1:
					sName = sName + "st";
					break;
					
				case 2:
					sName = sName + "nd";
					break;
					
				case 3:
					sName = sName + "rd";
					break;
					
				case 21:
					sName = sName + "st";
					break;
					
				case 22:
					sName = sName + "nd";
					break;																
					
				case 23:
					sName = sName + "rd";
					break;
					
				case 31:
					sName = sName + "st";
					break;								
					
				default:
					sName = sName + "th";
					break;
			}
					
			if (i == nDay)
				lSelected = mySelect.length;								
			
			addSelectOption(mySelect, sName, sValue, '');
		}		
		
	}		
    
    return;
}

function getDayOptions(mySelect, d, m, y)
{
	var nDay = new Number(d);
	var nMonth = new Number(m);
	var nYear = new Number(y);
	var lSelected = 99;
	
	var daysinmonth = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	
	if (((nYear%4 == 0) && (nYear%100 != 0)) || (nYear%400 == 0)) 
		daysinmonth[2] = 29;

	if (mySelect.length == (daysinmonth[nMonth]))
	{
		//mySelect.value = d;
		lSelected = nDay - 1;
    mySelect.SelectedIndex = lSelected;
    mySelect.options[lSelected].selected = true;				
	}
	else
	{	
		resetSelect(mySelect);	
	
		for (var i = 1;i <= daysinmonth[nMonth];i++)
		{
			var sValue = i;
			var sName = i;
			var sOut = "";			
			
			if (sValue <= 9)						
				sValue = "0" + sValue;
						
			switch(sName)
			{
				case 1:
					sName = sName + "st";
					break;
					
				case 2:
					sName = sName + "nd";
					break;
					
				case 3:
					sName = sName + "rd";
					break;
					
				case 21:
					sName = sName + "st";
					break;
					
				case 22:
					sName = sName + "nd";
					break;																
					
				case 23:
					sName = sName + "rd";
					break;
					
				case 31:
					sName = sName + "st";
					break;								
					
				default:
					sName = sName + "th";
					break;
			}			
			if (i == nDay)
				lSelected = mySelect.length;
			
			addSelectOption(mySelect, sName, sValue, '');
		}		
				
		if (lSelected == 99)
		{			
			lSelected = daysinmonth[nMonth] - 1;
		}
						
    mySelect.SelectedIndex = lSelected;
    mySelect.options[lSelected].selected = true;		
					
	}
		
	return;
}

function getDynamicDate(sDynamic, sModifier, sYear, sMonth, sDay)
{
	var d = new Date(sYear, sMonth, sDay, 0, 0, 0, 0);
	var lrequiredDay = 0;
	var lcurrentDay = d.getDay();
	var lDays = 0;
	
	switch(sDynamic)
	{
		case "SUN":
			lrequiredDay = 0;
			break;
		case "MON":
			lrequiredDay = 1;
			break;
		case "TUE":
			lrequiredDay = 2;
			break;
		case "WED":
			lrequiredDay = 3;
			break;
		case "THU":
			lrequiredDay = 4;
			break;
		case "FRI":
			lrequiredDay = 5;
			break;
		case "SAT":
			lrequiredDay = 6;
			break;
		default:
			break;
	}
	
	if (sDynamic != "SYS")
	{
		do
		{											
			lDays++;
			lcurrentDay++;
			
			if (lcurrentDay > 6)
				lcurrentDay = 0;
					
		} while(lcurrentDay != lrequiredDay);
				
		d.setDate(d.getDate() + lDays);
	}
										
	d.setDate(d.getDate() + sModifier);
	
	return d;
}

function getDynamicOptions(mySelect, sDynamic, sModifier, sName, oCal)
{
	
	var d = getDynamicDate(sDynamic, sModifier);
	var dDisableDate = new Date();
	var sDisableMe = "";
								
	dDisableDate.setDate(d.getDate());
	dDisableDate.setMonth(d.getMonth());
	dDisableDate.setFullYear(d.getFullYear());
	dDisableDate.setDate(dDisableDate.getDate() - 1);
	
	sDisableMe = (dDisableDate.getMonth() + 1) + "/" + (dDisableDate.getDate() ) + "/" + dDisableDate.getFullYear();
	oCal.addDisabledDates(null, sDisableMe);
				
	switch(sName)								
	{
		case "Day":
			getDayOptions(mySelect, d.getDate(), (d.getMonth() + 1), d.getFullYear());
			break;
		case "Month":
			getMonthOptions(mySelect, (d.getMonth() + 1));
			break;
		case "Year":
			getYearOptions(mySelect, d.getFullYear());
			break;
	}
		
	return;
}

function setDynamicDisabledDate(sDynamic, sModifier, oCal, sYear, sMonth, sDay)
{
	
	var d = getDynamicDate(sDynamic, sModifier, sYear, sMonth, sDay);
	var dDisableDate = new Date();
	var sDisableMe = "";
								
	dDisableDate.setDate(d.getDate());
	dDisableDate.setMonth(d.getMonth());
	dDisableDate.setFullYear(d.getFullYear());
	dDisableDate.setDate(dDisableDate.getDate() - 1);
	
	sDisableMe = (dDisableDate.getMonth() + 1) + "/" + (dDisableDate.getDate() ) + "/" + dDisableDate.getFullYear();
	oCal.addDisabledDates(null, sDisableMe);				
    
	return d;
}

function getMonthOptions(mySelect, m)
{
	var monthsinyear = new Array('','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	var lSelected = 0;
	resetSelect(mySelect);
	
	for (var i = 1;i <= 12;i++)
	{
		var sValue = i;
		var sOut = '';
				
		if (sValue <= 9)						
			sValue = "0" + sValue;
								
		if (i == m)
			lSelected = mySelect.length;
			
		addSelectOption(mySelect, monthsinyear[i], sValue);
	}
	
	mySelect.SelectedIndex = lSelected;
	mySelect.options[lSelected].selected = true;
		
	return;
}

function getMonthDOBOptions(mySelect, m)
{
	var monthsinyear = new Array('','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	var lSelected = 0;
	resetSelect(mySelect);
	
	addSelectOption(mySelect, ' ', 'X');
	
	for (var i = 1;i <= 12;i++)
	{
		var sValue = i;
		var sOut = '';
				
		if (sValue <= 9)						
			sValue = "0" + sValue;
								
		if (i == m)
			lSelected = mySelect.length;
			
		addSelectOption(mySelect, monthsinyear[i], sValue);
	}
		
	return;
}

function getYearOptions(mySelect, y)
{					
	var dToday = new Date();
	var sYear = dToday.getFullYear();
	var lSelected = 0;
	
	resetSelect(mySelect);
	
	for (var i = 0; i <= 1; i++)
	{
		var sName = sYear + i;
		var sValue = sYear + i;
		
		if (sValue == y)
			lSelected = mySelect.length;
			
		addSelectOption(mySelect, sName, sValue);
	}
	
	mySelect.SelectedIndex = lSelected;
	mySelect.options[lSelected].selected = true;	
	
	return;
}

function getDOBYearOptions(mySelect, y, x)
{
	var dToday = new Date();
	var sYear = dToday.getFullYear();
	var lSelected = 0;
	
	resetSelect(mySelect);
	addSelectOption(mySelect, ' ', 'X');
	
	for (var i = 0; i <= x; i++)
	{
		var sName = sYear - i;
		var sValue = sYear - i;
		
		if (sValue == y)
			lSelected = mySelect.length;
			
		addSelectOption(mySelect, sName, sValue);
	}
	
	return;
}

function getExpandOptions()
{												
	document.write('<option value="0">Exact Date Only</option>');
	document.write('<option value="1">+/- 1 day</option>');         		
	document.write('<option value="2">+/- 2 days</option>');         		
	document.write('<option value="3" selected="selected">+/- 3 days</option>');	
	return;
}

function LZ(x) 
{
	return (x<0||x>9?"":"0") + x;
}

function syncValues(myForm, oCal)
{
	var sDisabledDates;
	var sDay1 = myForm.dateOneD.value;
	var sMonth1 = myForm.dateOneM.value;
	var sYear1 = myForm.dateOneY.value;
	var dOne = new Date(sYear1, sMonth1, sDay1);

	sDisabledDates = oCal.disabledDatesExpression;

	if (sDisabledDates != "") 
	{
		var ds = "" + sYear1 + sMonth1 + sDay1;
		var lInvalid = 0;		
		
		eval("if (" + sDisabledDates + "){lInvalid = 1;}");
		
		if (lInvalid == 1)
		{	
									
			var dFirst = new Date();
			
			if (oCal.firstDateDay!='')
			{											
				dFirst.setDate(oCal.firstDateDay);
				dFirst.setMonth(oCal.firstDateMonth);
				dFirst.setFullYear(oCal.firstDateYear);
				
				sDay1 = oCal.firstDateDay;
				sMonth1 = oCal.firstDateMonth;
				sYear1 = oCal.firstDateYear;	
				alert("For bookings before " + oCal.firstDateDay + "/" + oCal.firstDateMonth + "/" + oCal.firstDateYear + " please contact our call center.");
				
			}
			else
			{				
					
				sDay1 = dFirst.getDate() + 1;
				sMonth1 = dFirst.getMonth();
				sYear1 = dFirst.getFullYear();			
			}
			
			dOne = dFirst;
		}
		
	}

	if (myForm.dateTwoD)
	{	
		var sDay2 = myForm.dateTwoD.value;
		var sMonth2 = myForm.dateTwoM.value;
		var sYear2 = myForm.dateTwoY.value;	
		var dTwo = new Date(sYear2, sMonth2, sDay2);

		if (dOne > dTwo)
		{
			getDayOptions(myForm.dateTwoD, sDay1, sMonth1, sYear1)
			myForm.dateTwoM.value = sMonth1;
			myForm.dateTwoY.value = sYear1;
		}
	}	
	
	getDayOptions(myForm.dateOneD, sDay1, sMonth1, sYear1)	
	
	var lx = new String(sMonth1);
		
	if (lx.length == 1)
		lx = LZ(sMonth1 + 1);
				
	myForm.dateOneM.value = lx;		
	myForm.dateOneY.value = sYear1;	
		
	return false;		
}


function resetSelect(mySelect)
{
	var lLength = mySelect.length;
	
	for (i = lLength; i >= 0; i--) {
		mySelect.options[i]=null;
	}	

	return;
}

function setSelectedOption(mySelect, aValue)
{
	var llength = mySelect.length;
		
	for(var i = 0;i <= llength;i++)
	{	
		if(mySelect.options[i])
		{
			if (mySelect.options[i].value == aValue)
			{		
				mySelect.SelectedIndex = i;
				mySelect.options[i].selected = true;		
				break;
			}
		}
	}
	return;
}

function addBlankSelectOption(mySelect)
{
	var lSelected = 0;
	addSelectOption(mySelect, '', 'X');		
	setSelectedOption(mySelect, 'X');
	
	return;
}

function removeDefaults(mySelectDay, mySelectMonth, mySelectYear, aCount)
{

	for (var i = 0; i < aCount; i++)
	{
		if (aCount == 1)
		{
			mySelectDay.value = '';
			mySelectMonth.value = '';
			mySelectYear.value = '';
		}
		else
		{
			mySelectDay[i].value = '';
			mySelectMonth[i].value = '';
			mySelectYear[i].value = '';
		}
	}
	
	return;

}

function addSelectOption(mySelect, sName, sValue)
{
	var lLength = mySelect.length;
	var lPos;
	var newOption;
	
	lPos = lLength;
	
	newOption = new Option(sName, sValue);	
	mySelect.options[lPos] = newOption;
	
	return;
}

function checkPassengerAge(aReturnDate, aDOB, aPaxtype, aMaxChildAge)
{

	var dChild = new Date(aReturnDate);
	var dInfant = new Date(aReturnDate);
	var lError = 0;
	
   
	dChild.setFullYear(dChild.getFullYear() - (aMaxChildAge + 1));
	dChild.setHours(0 , 0, 0, 0);
	
	dInfant.setFullYear(dInfant.getFullYear() - 2);
	dInfant.setHours(0 , 0, 0, 0);
	
	aDOB.setHours(0, 0, 0, 0);
	
	switch(aPaxtype){	
		case "A":
			if(aDOB.valueOf() > dChild.valueOf()){
				alert("Adult date of birth of " + formatDate(aDOB, 'dd/MM/yyyy') + " is invalid.\nPassengers with a date of birth after " + formatDate(dChild, 'dd/MM/yyyy') + " are categorized as a child for this product.");				
				lError = 1;
			}			
			break;
			
		case "C":
			if(aDOB.valueOf() <= dChild.valueOf()){
				alert("Child date of birth of " + formatDate(aDOB, 'dd/MM/yyyy') + " is invalid.\nPassengers with a date of birth on or before " + formatDate(dChild, 'dd/MM/yyyy') + " are categorized as an adult for this product.");
				lError = 1;
			}
			else if (aDOB.valueOf() > dInfant.valueOf()){	
				alert("Child date of birth of " + formatDate(aDOB, 'dd/MM/yyyy') + " is invalid.\nPassengers with a date of birth after " + formatDate(dInfant, 'dd/MM/yyyy') + " are categorized as an infant for this product.");				
				lError = 1;			
			}									
			break;					
			
		case "I":							
			if(aDOB.valueOf() <= dInfant.valueOf()){
				alert("Infant date of birth of " + formatDate(aDOB, 'dd/MM/yyyy') + " is invalid.\nPassengers with a date of birth on or before " + formatDate(dInfant, 'dd/MM/yyyy') + " are categorized as a child for this product.");				
				lError = 1;
			}		
			break;									
	}
	
	if (lError == 0)
		return true;
	
	return false;
}

function validatePassengerDetails(f, aCount, aMaxChildAge, aReturnDate)
{

	var lcount = 0;
	
	var dReturnDate = new Date(getDateFromFormat(aReturnDate, 'yyyyMMdd'));
	var dDOB = new Date();
  														
	for (var i = 0; i < aCount; i++)
	{
		lcount ++;
		if (aCount == 1)
		{						
			
			if(f.title_.value == ''){
				alert("Please enter a title for passenger 1.");
				return false;
			}
			
			if(f.firstname_.value == ''){
				alert("Please enter a firstname for passenger 1.");
				f.firstname_.select();
				return false;
			}
			
			if(f.surname_.value == ''){
				alert("Please enter a surname for passenger 1.");
				f.surname_.select();
				return false;
			}
			
      	var dDOB = new Date(getDateFromFormat(f.dobfull_.value, 'dd/MM/yyyy'));
      			
			if (checkPassengerAge(dReturnDate, dDOB, f.paxtype_.value, aMaxChildAge) == false)
				return false;
			
		}
		else
		{

			if(f.title_[i].value == ''){
				alert("Please enter a title for passenger " + lcount + ".");
				return false;
			}
			
			if(f.firstname_[i].value == ''){
				alert("Please enter a firstname for passenger " + lcount + ".");
				f.firstname_[i].select();
				return false;
			}
			
			if(f.surname_[i].value == ''){
				alert("Please enter a surname for passenger " + lcount + ".");
				f.surname_[i].select();
				return false;
			}
			
      	var dDOB = new Date(getDateFromFormat(f.dobfull_[i].value, 'dd/MM/yyyy'));
			
			if (checkPassengerAge(dReturnDate, dDOB, f.paxtype_[i].value, aMaxChildAge) == false)
				return false;
			
		}
	}

	return true;									
}

function checkEnteredDOB(myform, aCount)
{
	  
	for (var i = 0; i < aCount; i++)
	{
		if (aCount == 1)
		{  
			if (isDate(myform.dobfull_.value, 'dd/MM/yyyy') == false)
			{
				return false;
			} 
      
         var dDOB = new Date(getDateFromFormat(myform.dobfull_.value, 'dd/MM/yyyy'));
         myform.dobday_.value = LZ(dDOB.getDate());
         myform.dobmonth_.value = LZ(dDOB.getMonth() + 1);
         myform.dobyear_.value = LZ(dDOB.getFullYear());
         
		}
		else
		{
			if (isDate(myform.dobfull_[i].value, 'dd/MM/yyyy') == false)
			{
				return false;
			}
      
         var dDOB = new Date(getDateFromFormat(myform.dobfull_[i].value, 'dd/MM/yyyy'));      
         myform.dobday_[i].value = LZ(dDOB.getDate());
         myform.dobmonth_[i].value = LZ(dDOB.getMonth() + 1);
         myform.dobyear_[i].value = LZ(dDOB.getFullYear());
		}
            
	}

	return true;
}


function checkEnteredFOIDIssue(myform, aCount)
{
	  
	for (var i = 0; i < aCount; i++)
	{
		if (aCount == 1)
		{  
			if (isDate(myform.foidissue_.value, 'dd/MM/yyyy') == false)
			{
				return false;
			} 
             
         var dFOID = new Date(getDateFromFormat(myform.foidissue_.value, 'dd/MM/yyyy'));
         myform.foidissueday_.value = LZ(dFOID.getDate());
         myform.foidissuemonth_.value = LZ(dFOID.getMonth() + 1);
         myform.foidissueyear_.value = LZ(dFOID.getFullYear());             
             
		}
		else
		{
			if (isDate(myform.foidissue_[i].value, 'dd/MM/yyyy') == false)
			{
				return false;
			}
      
         var dFOID = new Date(getDateFromFormat(myform.foidissue_[i].value, 'dd/MM/yyyy'));      
         myform.foidissueday_[i].value = LZ(dFOID.getDate());
         myform.foidissuemonth_[i].value = LZ(dFOID.getMonth() + 1);
         myform.foidissueyear_[i].value = LZ(dFOID.getFullYear());      
      
		}
            
	}

	return true;
}

function checkEnteredFOIDExpire(myform, aCount)
{
	  
	for (var i = 0; i < aCount; i++)
	{
		if (aCount == 1)
		{  
			if (isDate(myform.foidexpiry_.value, 'dd/MM/yyyy') == false)
			{
				return false;
			} 
               
         var dFOID = new Date(getDateFromFormat(myform.foidexpiry_.value, 'dd/MM/yyyy'));
         myform.foidexpireday_.value = LZ(dFOID.getDate());
         myform.foidexpiremonth_.value = LZ(dFOID.getMonth() + 1);
         myform.foidexpireyear_.value = LZ(dFOID.getFullYear());               
               
		}
		else
		{
			if (isDate(myform.foidexpiry_[i].value, 'dd/MM/yyyy') == false)
			{
				return false;
			}
      
         var dFOID = new Date(getDateFromFormat(myform.foidexpiry_[i].value, 'dd/MM/yyyy'));      
         myform.foidexpireday_[i].value = LZ(dFOID.getDate());
         myform.foidexpiremonth_[i].value = LZ(dFOID.getMonth() + 1);
         myform.foidexpireyear_[i].value = LZ(dFOID.getFullYear());      
      
		}
            
	}

	return true;
}

function enteredDOB(mySelectDay, mySelectMonth, mySelectYear, aCount)
{
	
	for (var i = 0; i < aCount; i++)
	{
		if (aCount == 1)
		{
			if ((mySelectDay.value == 'X') ||	(mySelectMonth.value == 'X') || (mySelectYear.value == 'X'))
			{
				return false;
			}
		}
		else
		{
			if ((mySelectDay[i].value == 'X') ||	(mySelectMonth[i].value == 'X') || (mySelectYear[i].value == 'X'))
			{
				return false;
			}
		}
	}

	return true;
}

function showPleaseWait(mySelect)
{
	resetSelect(mySelect);
	addSelectOption(mySelect, "Please Wait Refreshing List!","", "true");
	return;
}
