function ReturnDateFadeOut(obj){
	if(obj.value=="RO"){
		document.getElementById('ret_dates').style.visibility="hidden";
		document.getElementById('rdd').disabled=true;
		document.getElementById('rdm').disabled=true;
		document.getElementById('rdy').disabled=true;
	}else if(obj.value=="PKG"){
		document.getElementById('ret_dates').style.visibility="visible";
		document.getElementById('rdd').disabled=false;
		document.getElementById('rdm').disabled=false;
		document.getElementById('rdy').disabled=false;
	}
}

function SetDays(days,id,selInd){
	var sel=document.getElementById(id);
	var full=sel.length;
	var diff=full-days;
	if(diff>0){
		for(i=0;i<=diff;i++){
			sel.options[full-i]=null;
		}
	}else{
		diff=diff*-1;
		var max=full+diff;
		var min=(full+1);
		for(i=min;i<=max;i++){
			sel.options[i-1]=new Option(i,i);
		}
	}
	if(typeof(selInd) != "undefined"){
		sel.selectedIndex = selInd;
	}
	return days;
}

function UpdateOptions(){
	if(typeof Initialize=='function'){
		Settings=new Initialize;
		var DepYearId=Settings.depYid;
		var DepMonthId=Settings.depMid;
		var DepDayId=Settings.depDid;
		var RetYearId=Settings.retYid;
		var RetMonthId=Settings.retMid;
		var RetDayId=Settings.retDid;
	}else{
		var DepYearId='ddy';
		var DepMonthId='ddm';
		var DepDayId='ddd';
		var RetYearId='rdy';
		var RetMonthId='rdm';
		var RetDayId='rdd';
	}
	var DepYearValue=document.getElementById(DepYearId).value;
	DepYearValue=DelzeroPad(DepYearValue);
	var DepMonthValue=document.getElementById(DepMonthId).value-1;
	DepMonthValue=DelzeroPad(DepMonthValue);
	var DepNumDays=DaysOfThisMonth(DepYearValue, DepMonthValue);
	SetDays(DepNumDays, DepDayId);
	var RetYearValue=document.getElementById(RetYearId).value;
	RetYearValue=DelzeroPad(RetYearValue);
	var RetMonthValue=document.getElementById(RetMonthId).value-1;
	RetMonthValue=DelzeroPad(RetMonthValue);
	var RetNumDays=DaysOfThisMonth(RetYearValue,RetMonthValue);
	SetDays(RetNumDays,RetDayId);
}

function zeroPad(value){
	var newvalue=value.toString();
	if(newvalue.length==1)
		return"0"+newvalue;
	else 
		return newvalue;
}

function DelzeroPad(value){
	value=value.toString();
	var firstdigit=value.substr(0,1);
	if(value.length>1&&firstdigit=='0')
		value=value.substr(1);
	return value;
}

function DaysOfThisMonth(year,month){
	return (32-new Date(year,month,32).getDate());
}

function Essentials(){
	this.Name=new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	this.ShortName=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
}

function PrintDays(){
	if(typeof Initialize=='function'){
		Settings=new Initialize;
		var dZero=Settings.DayValueFormat;
	}else{
		var dZero='N2'
	}
	var dayValue=null;
	var thisdate=new Date();
	var thisDay=thisdate.getDate();
	var thisMonth=thisdate.getMonth()+1;
	var thisYear=thisdate.getFullYear();
	var offset=1;
	var adjusted=thisdate.getDate()+offset;
	var daysThisMonth=DaysOfThisMonth(thisYear,thisMonth);
	var difference=daysThisMonth-thisDay;
	if(adjusted>daysThisMonth)
		thisDay=offset-difference;
	else
		thisDay=thisDay+offset;
	var returnValue="";
	for(var i=1;i<=daysThisMonth;i++){
		if(dZero=='N2')
			dayValue=zeroPad(i);
		else
			dayValue=i;
		returnValue+='<option value="'+dayValue+'"';
		if(i==thisDay)
			returnValue+=' selected';
		returnValue+='>'+i+'</option>';
	}
	return returnValue;
}

function PrintMonths(mode){
	Month=new Essentials;
	if(typeof Initialize=='function'){
		Settings=new Initialize;
		var value=Settings.MonthValueFormat;
	}else{
		var value='N2';
	}
	var monthvalue=null;
	var thisdate=new Date();
	var thisMonth=thisdate.getMonth();
	var thisYear=thisdate.getFullYear();
	var offset=1;
	var adjusted=thisdate.getDate()+offset;
	var daysThisMonth=DaysOfThisMonth(thisYear,thisMonth);
	if(adjusted>daysThisMonth)
		thisMonth=thisMonth+1;
	var returnValue="";
	for(var i=0;i<12;i++){
		if(value=='N2')
			monthvalue=zeroPad(i+1);
		else if(value=='S3')
			monthvalue=Month.Name[i].substr(0,3);
		else
			monthvalue=i+1;
		returnValue+='<option value="'+monthvalue+'"';
		if(i==thisMonth)
			returnValue+=' selected';
		returnValue+='>';
		if(mode==1)
			returnValue+=Month.ShortName[i];
		else
			returnValue+=Month.Name[i];
		returnValue+='</option>';
	}
	return returnValue;
}

function PrintYears(){
	var yearvalue=null;
	if(typeof Initialize=='function'){
		Settings=new Initialize;
		var value=Settings.YearValueFormat;
	}else{
		var value='N2';
	}
	var thisdate=new Date();
	var thisMonth=thisdate.getMonth();
	var thisYear=thisdate.getFullYear();
	var offset=1;
	var adjusted=thisdate.getDate()+offset;
	var daysThisMonth=DaysOfThisMonth(thisYear,thisMonth);
	if(adjusted>daysThisMonth)
		thisMonth=thisMonth+1;
	if(thisMonth>11)
		thisYear=thisYear+1;
	var nextYear=thisYear+1;
	var returnValue="";
	for(i=thisYear;i<=nextYear;i++){
		if(value=='N2'){
			yearvalue=i.toString();
			yearvalue=yearvalue.substr(2,4);
		}
	returnValue+='<option value="'+yearvalue+'"';
	if(i==thisYear)
		returnValue+=' selected';
	returnValue+='>'+i+'</option>';}i=null;
	return returnValue;
}
//*/
function PrintTime(){
	if(typeof Initialize=='function'){
		Variables=new Initialize;
		var depHrs=Variables.depHrs;
		var depMin=Variables.depMin;
		var retHrs=Variables.retHrs;
		var retMin=Variables.retMin;
		var timeInterval=Variables.timeInterval;
		var selDepHr=Variables.selDepHr;
		var selRetHr=Variables.selRetHr;
		var TimeSep=Variables.TimeSeparator;
	}else{
		var depHrs='dth';
		var depMin='dtm';
		var retHrs='rth';
		var retMin='rtm';
		var timeInterval=30;
		var selDepHr=6;
		var selRetHr=18;
		var TimeSep=':';
	}
	if(selDepHr<1)
		selDepHr=1;
	if(selRetHr<1)
		selDepHr=1;
	var merged=false;
	if(depHrs==depMin){
		merged=true;
	}
	var returnValue="";
	this.Hours=function(which){
		var i=0;
		var hour="";
		for(i=0;i<24;i++){
			hour=zeroPad(i);
			returnValue+='<option value="'+hour+'"';
			if(which=='dep')
				if(i==selDepHr)
					returnValue+=' selected';
			if(which=='ret')
				if(i==selRetHr)
					returnValue+=' selected';
			returnValue+='>'+hour+'</option>';
		}
		return returnValue;
	}
	this.Mins=function(){
		var i=0;
		var min="";
		for(i=0;i<60;i=i+timeInterval){
			min=zeroPad(i);
			returnValue+='<option value="'+min+'">'+min+'</option>';
		}
		return returnValue;
	}
	this.Merged=function(which){
		var i=0;
		var hour="";
		var j=0;
		var min="";
		var sel_set=false;
		for(i=0;i<24;i++){
			hour=zeroPad(i);
			for(j=0;j<60;j=j+timeInterval){
				min=zeroPad(j);
				returnValue+='<option value="'+hour+min+'"';
				if((which=='dep')&&(!sel_set))
					if(i==selDepHr){
						returnValue+=' selected';
						sel_set=true;
					}
				if((which=='ret')&&(!sel_set))
					if(i==selRetHr){
						returnValue+=' selected';
						sel_set=true;
					}
				returnValue+='>'+hour+TimeSep+min+'</option>';
			}
		}
		return returnValue;
	}
}

function GetHours(which){
	var GetTimes=new PrintTime;
	return GetTimes.Hours(which);
}

function GetMins(){
	var GetTimes=new PrintTime;
	return GetTimes.Mins();
}

function GetTimesMerged(which){
	var GetTimes=new PrintTime;
	return GetTimes.Merged(which);
}

function CalculateReturnDate(year,month,day, dur){
	var mod_dur= dur || 7;
	var nextyear=year+1;
	var nextmonth=month+1;
	var retday=0;
	var DateArray={};
	daysofmonth=DaysOfThisMonth(year,month-1);
	retday=day+mod_dur;
	if(retday<=daysofmonth){
		ReturnYear=year;
		ReturnMonth=month;
		ReturnDay=retday;
	}else{
		retday=retday-daysofmonth;
		month=nextmonth;
		if(month<=12){
			ReturnYear=year;
			ReturnMonth=month;
			ReturnDay=retday;
		}else{
			month=month-12;
			ReturnYear=nextyear;
			ReturnMonth=month;
			ReturnDay=retday;
		}
	}
	DateArray['day']=ReturnDay;
	DateArray['month']=ReturnMonth;
	DateArray['year']=ReturnYear;
	return DateArray;
}

function CalculateDate(year,month,day,mod_dur){
	var nextyear=year+1;
	var nextmonth=month+1;
	var retday=0;
	var DateArray={};
	daysofmonth=DaysOfThisMonth(year,month-1);
	retday=day+mod_dur;
	if(retday<=daysofmonth){
		ReturnYear=year;
		ReturnMonth=month;
		ReturnDay=retday;
	}else{
		retday=retday-daysofmonth;
		month=nextmonth;
		if(month<=12){
			ReturnYear=year;
			ReturnMonth=month;
			ReturnDay=retday;
		}else{
			month=month-12;
			ReturnYear=nextyear;
			ReturnMonth=month;
			ReturnDay=retday;
		}
	}
	DateArray['day']=ReturnDay;
	DateArray['month']=ReturnMonth;
	DateArray['year']=ReturnYear;
	return DateArray;
}

function SplitMergedDates(DateField){
	if(typeof Initialize=='function'){
		Variables=new Initialize;
		var format=Variables.DateFormat;
		var dat_sep=Variables.DateSeparator;
	}else{
		var format='GB';
		var dat_sep='/';
	}
	var dateArray=DateField.split(dat_sep);
	if(format=="GB"){
		var year_part=dateArray[2];
		year_part=year_part.toString();
		ydigits=year_part.length;
		day=parseInt(DelzeroPad(dateArray[0]));
		month=parseInt(DelzeroPad(dateArray[1]));
		if(ydigits==2)
			year="20"+dateArray[2];
		else year=dateArray[2];
	}else{
		var year_part=dateArray[0];
		year_part=year_part.toString();
		ydigits=year_part.length;
		day=parseInt(DelzeroPad(dateArray[2]));
		month=parseInt(DelzeroPad(dateArray[1]));
		if(ydigits==2)
			year="20"+dateArray[0];
		else
			year=dateArray[0];
	}
	return dateArray;
}

function SetDates(whichform,mode,strt,end){
	if (typeof(whichform) == "undefined")
		whichform = "frmcmain";
	var formelement=document.getElementById(whichform);
	if(!mode)
		var mode=null;
	if(!strt)
		var strt=0;
	if(!end)
		var end=7;
	if(typeof Initialize=='function'){
		Variables=new Initialize;
		var depYid=Variables.depYid;
		var depMid=Variables.depMid;
		var depDid=Variables.depDid;
		var retYid=Variables.retYid;
		var retMid=Variables.retMid;
		var retDid=Variables.retDid;
		var yearvalue=Variables.YearValueFormat;
		var monthvalue=Variables.MonthValueFormat;
		var dZero=Variables.DayValueFormat;
		var format=Variables.DateFormat;
		var dat_sep=Variables.DateSeparator;
	}else{
		var depYid='ddy';
		var depMid='ddm';
		var depDid='ddd';
		var retYid='rdy';
		var retMid='rdm';
		var retDid='rdd';
		var yearvalue='N2';
		var monthvalue='N2';
		var dZero='N2';
		var format='GB';
		var dat_sep='/';
	}
	var merged=false;
	var retday;
	var daysofmonth;
	var monthArray = (new Essentials).Name;
	var optionvalue;
	var ydigits;
	var ReturnDate;
	var ReturnYear;
	var ReturnMonth;
	var ReturnDay;
	var SelMonth;
	var today=new Date();
	var SetDay=today.getDate();
	var SetMonth=today.getMonth()+1;
	var SetYear=today.getFullYear();
	var CalculatedDate=CalculateDate(SetYear,SetMonth,SetDay,strt);
	var SetDay=CalculatedDate['day'];
	var SetMonth=CalculatedDate['month'];
	var SetYear=CalculatedDate['year'];
	var day = SetDay;
	var month = SetMonth;
	var year = SetYear;
	if(depYid===depMid&&depMid===depDid){
		var dateArray= [];
		var DepDateField=document.getElementById(depYid).value;
		if((!DepDateField)&&(format=="GB")){
			if(monthvalue=='N2')
				SetMonth=zeroPad(SetMonth);
			if(dZero=='N2')
				SetDay=zeroPad(SetDay);
			if(yearvalue=='N2'){
				SetYear=SetYear.toString();
				SetYear=SetYear.substr(2,4);
			}
			DepDateField=SetDay+dat_sep+SetMonth+dat_sep+SetYear;
			document.getElementById(depYid).value=DepDateField;
		}
		datearray=SplitMergedDates(DepDateField);
		var day=parseInt(DelzeroPad(datearray[0]));
		var month=parseInt(DelzeroPad(datearray[1]));
		var year=parseInt(DelzeroPad(datearray[2]));
	}else{
		document.getElementById(depDid).selectedIndex=SetDay-1;
		document.getElementById(depMid).selectedIndex=SetMonth-1;
		document.getElementById(depYid).selectedIndex=SetYear-parseInt("20"+document.getElementById(depYid).value);
	}
	if(mode!="DepOnly"){
		if(retYid==retMid&&retMid==retDid)
			merged=true;
		var RetDateBlock=CalculateReturnDate(year,month,day, end);
		ReturnYear=RetDateBlock['year'];
		ReturnMonth=RetDateBlock['month'];
		ReturnDay=RetDateBlock['day'];
		if(yearvalue=="N2"){
			ReturnYear=ReturnYear.toString();
			ReturnYear=zeroPad(ReturnYear);
		}
		if(monthvalue=="N2"){
			ReturnMonth=zeroPad(ReturnMonth);
		}
		if(dZero='N2')
			ReturnDay=zeroPad(ReturnDay);
		if(merged){
			if(format=="GB")
				ReturnDate=ReturnDay+dat_sep+ReturnMonth+dat_sep+ReturnYear;
			else
				ReturnDate=ReturnYear+dat_sep+ReturnMonth+dat_sep+ReturnDay;
			var dateField=document.getElementById(retYid);
			dateField.value=ReturnDate;
		}else{
			
			var RetDateBlock=CalculateReturnDate(SetYear,SetMonth,SetDay);
			if(end&&end!=7){
				RetDateBlock['day']+=(end-7);
			}
			ReturnYear=RetDateBlock['year'];
			ReturnMonth=RetDateBlock['month'];
			ReturnDay=RetDateBlock['day']; 
			document.getElementById(retDid).selectedIndex=ReturnDay-1;
			document.getElementById(retMid).selectedIndex=ReturnMonth-1;
			document.getElementById(retYid).selectedIndex=ReturnYear-parseInt("20"+document.getElementById(retYid).value);
		}
	}
}

//mon is the calendar month, not 0 based month, Jan = 1, Feb = 2
//yr is 4 digits - 2010
function DaysInMonth(mon, yr) {
    return new Date(yr, mon, 0).getDate();
}

function emptyNode(node){
    while(node.hasChildNodes()){
        node.removeChild(node.firstChild);
    }
}

function SelectViaValue(element, val){
	if(element.nodeName.toUpperCase() != "SELECT"){
		throw "Element must be a <select> node";
	}
	for(var o = 0; o < element.options.length; o++){
		if(element.options[o].value == val){
			element.selectedIndex = o;
			break;
		}
	}
}

function UpdateReturnDate(change) {
	var change = (change == null)? true: change; //empty for update return values
    var dat_sep="/";
    var changeSelInd = false;
    if(typeof Initialize=='function'){
        Variables=new Initialize;
        var depYid=Variables.depYid;
        var depMid=Variables.depMid;
        var depDid=Variables.depDid;
        var retYid=Variables.retYid;
        var retMid=Variables.retMid;
        var retDid=Variables.retDid;
        var yearvalue=Variables.YearValueFormat;
        var monthvalue=Variables.MonthValueFormat;
        var dZero=Variables.DayValueFormat;
        var format=Variables.DateFormat;
    }else{
        var depYid='ddy';
        var depMid='ddm';
        var depDid='ddd';
        var retYid='rdy';
        var retMid='rdm';
        var retDid='rdd';
        var yearvalue='N2';
        var monthvalue='N2';
        var dZero='N2';
        var format='GB';
    }
    if(retYid==retMid&&retMid==retDid)
        var merged=true;
    if(!merged){
        var DepDay = DelzeroPad(document.getElementById(depDid).options[document.getElementById(depDid).selectedIndex].value);
        var DepMon = DelzeroPad(document.getElementById(depMid).options[document.getElementById(depMid).selectedIndex].value);
        var DepYear = DelzeroPad(document.getElementById(depYid).options[document.getElementById(depYid).selectedIndex].value);
        var DaysInDepMonth = DaysInMonth(DepMon, "20"+DepYear);
        if(parseInt(DepDay) > DaysInDepMonth){
        	DepDay = DaysInDepMonth.toString();
        	changeSelInd = true;
        }
        
        var selIndex;
		if ( document.getElementById(retDid).selectedIndex == -1 )
			selIndex = DepDay-1;
		else
			selIndex = document.getElementById(retDid).selectedIndex;
        var RetDay = DelzeroPad(document.getElementById(retDid).options[selIndex].value);
        var RetMon = DelzeroPad(document.getElementById(retMid).options[document.getElementById(retMid).selectedIndex].value);
        var RetYear = DelzeroPad(document.getElementById(retYid).options[document.getElementById(retYid).selectedIndex].value);
        
        //first make departure date is valid (ie 31st feb -> 28th feb)
        if(true === change){ //only needed if trigger comes from departure date
        	RetDate = new Date("20" + DepYear, (parseInt(DepMon) - 1), (parseInt(DepDay) + 7), 0, 0, 0, 0);
        	RetDay = RetDate.getDate();
        	RetMon = RetDate.getMonth();
        	RetYear = RetDate.getFullYear();
        	var origRetYear = document.getElementById(retYid).value;
        	if(true === changeSelInd){
        		SetDays(DaysInDepMonth, depDid, DaysInDepMonth-1);
        	}else{
				SetDays(DaysInDepMonth, depDid);
			} 
	        
	        //update the return date based on dep date
	       	if(RetYear != "20"+origRetYear){ //year changed
	    		SelectViaValue(document.getElementById(retYid), (RetYear - 2000));
	    	}
	    	document.getElementById(retMid).selectedIndex = RetMon;
	    	document.getElementById(retDid).selectedIndex = RetDay - 1;
	    	RetMon++;
        }
		//need to make return date days correct for month
		//SetDays(DaysInMonth(RetMon + 1, "20"+RetYear), retDid);
		SetDays(DaysInMonth((parseInt(RetMon)), "20"+RetYear), retDid);
		if(true === change){
	    	document.getElementById(retDid).selectedIndex = RetDay - 1;
		}
    }else{
        var DepDateField=document.getElementById(depYid).value;
        datearray=SplitMergedDates(DepDateField);
        var day=parseInt(DelzeroPad(datearray[0]));
        var month=parseInt(DelzeroPad(datearray[1]));
        var year=parseInt(DelzeroPad(datearray[2]));
	    day=parseInt(DelzeroPad(day));
	    month=parseInt(DelzeroPad(month));
	    if(year.length==2)
	        year=parseInt("20"+year);
	    ydigits=year.length;
	    var RetDateBlock=CalculateReturnDate(year,month,day);
	    ReturnYear=RetDateBlock['year'];
	    ReturnMonth=RetDateBlock['month'];
	    ReturnDay=RetDateBlock['day'];
	    if(yearvalue=="N2"){
	        ReturnYear=ReturnYear.toString();
	        ReturnYear=zeroPad(ReturnYear);
	    }
	    if(monthvalue=="N2"){
	        ReturnMonth=zeroPad(ReturnMonth);
	    }
	    if(dZero=='N2')
	        ReturnDay=zeroPad(ReturnDay);
        if(format=="GB")
            ReturnDate=ReturnDay+dat_sep+ReturnMonth+dat_sep+ReturnYear;
        else
            ReturnDate=ReturnYear+dat_sep+ReturnMonth+dat_sep+ReturnDay;
    	var dateField=document.getElementById(retYid);
    	dateField.value=ReturnDate;
    }
}

function FormValueConverter(formobj,formtype){
	var formelement=document.getElementById(formobj.id);
	var a1=formelement.ap.value;
	if(a1=="Request"||a1==""){
		alert("Please select an airport.");
		return false;
	}
	if(formtype=='main_parking'){
		var mergedDTvalue=formelement.dtime.value;
		var mergedRTvalue=formelement.rtime.value;
		formelement.dth.value=mergedDTvalue.substr(0,2);
		formelement.dtm.value=mergedDTvalue.substr(2);
		formelement.rth.value=mergedRTvalue.substr(0,2);
		formelement.rtm.value=mergedRTvalue.substr(2);
	}
	if(formtype=='parking'){	
		var mergedDTvalue=formelement.dtime.value;
		var mergedRTvalue=formelement.rtime.value;
		formelement.dth.value=mergedDTvalue.substr(0,2);
		formelement.dtm.value=mergedDTvalue.substr(2);
		formelement.rth.value=mergedRTvalue.substr(0,2);
		formelement.rtm.value=mergedRTvalue.substr(2);
	}
	return true;
}
