// calendar.js v0.3 - heathrow-car-rental.co.uk
var CalendarMsg='';
var CalendarCell='<td class="%C% %M%" onclick="calendar_select(\'%TA%\',\'%DA%\')">%DT%</td>';
var CalendarRow="<tr class=\"c\">%V%</tr>";
var CalendarNext=' class="next" onclick="calendar_redraw(\'%NX%\',%DNUM%)"'
var CalendarHtml='<div class="month"><div%PREV%>&nbsp;</div><div class="m">%MTH% %YR%</div><div%NEXT%>&nbsp;</div></div><table class="inner" cellspacing="1" cellpadding="0"><tr class="d">%DAYS%</tr>%DATA%</table>'
///////////////////////////////////////////////
var Cinit=0,Clast='',Cpopup=false,updating=false,CAL=null,TF1,TF2,CTXT,CMSG,CCOOKIES='pickup-location,dropoff-location,dropoff-same,date1,date2,time1,time2,days'.split(',')
var Weekstart=0,Days='Su,Mo,Tu,We,Th,Fr,Sa'.split(','),Months='January,February,March,April,May,June,July,August,September,October,November,December'.split(','),ShortMonths=[],RevMonths=[];for(var i in Months) {i=parseInt(i);ShortMonths[i]=Months[i].substr(0,3);RevMonths[ShortMonths[i]]=i;}
function Calendar(mode) {if (mode>0||!Cinit) {n=mode>0?mode:1;calendar_init();calendar_draw(n==1?TF1:TF2?TF2:TF1,n);if (mode<1) calendar_update()}}
function calendar_blank() {var x,y,d,r='';for(x=1;x<=5;x++) {d='';for(y=1;y<=7;y++) d+='<td class="workday">&nbsp;</td>';r+=CalendarRow.replace('%V%',d)};ById('calendar').innerHTML=CalendarHtml.replace(/%DATA%/,r).replace(/%DAYS%/,d.replace(/weekday/g,'day')).replace(/%[a-z]+%/ig,'')}
function calendar_days(D1,D2) {var d=Math.round((D2-D1)/86400000)+(parseFloat(TIM2)>parseFloat(TIM1)+2?1:0);return d>30?30:(d<1?1:d)}
function calendar_update() {
	if (!updating&&siteinit) {
	    updating=true

		calendar_init()
		var cd1=readCookie('date1'),cd2=readCookie('date2')
		var D1=str2dt(cd1),D2=str2dt(cd2),days=calendar_days(D1,D2);
		var p=CCOOKIES[0],d=CCOOKIES[1],s=readCookie(CCOOKIES[2]),c1=ByIdVal(p),c2=ByIdVal(s?p:d)
		var s="Use the calendar above to select your hire period, then use other options to select times, vehicles, locations and extras."
		
		days=writeCookie('days',days);

	//	writeCookie(p,c1);extrasChange('delivery',c1=='other'?1:'')
	//	writeCookie(d,c2);extrasChange('collection',c2=='other'?1:'');

		if (cd1&&cd2) {
		    s='Hiring for '+days.B()+' day'+(days==1?' only':'s');
			var d1=c1=='other'?'your location':'the airport'
			var d2=c2=='other'?'another location':'the same airport'
			s+=', picking-up on '+strdt2fld(dt2str(D1)).B()+' from '+d1+' and dropping-off on '+strdt2fld(dt2str(D2)).B()+' at '+d2;
			CTXT.innerHTML=s
		}
		var i,ap,a='STN,LTN,LHR,LCY,LGW'.split(','),p=readCookie('pickup-location'),d=readCookie('dropoff-location')
		for(i in a) {
			ap=ById(a[i]);
			if (ap) add_eclass(ap,(a[i]==p?'':'-')+'active')
		}
		if (d=='') writeCookie('dropoff-location',p)

		show_dropoff()
		updating=false
		fireslider(days)
		Calendar(1)
	}
}
function calendar_init() {
	if (!Cinit) {
	    Cinit=1
		CAL=ById('calendar');
		CTXT=ById('hire-summary')
		TIM1=readCookie('time1');TIM1=writeCookie('time1',TIM1?TIM1:'9.30')
		TIM2=readCookie('time2');TIM2=writeCookie('time2',TIM2?TIM2:'9.30')
		TF1=readCookie('date1');TF1=writeCookie('date1',makeValidStrDate(TF1?TF1:dt2str(calendar_tomorrow())),1);
		TF2=readCookie('date2');TF2=writeCookie('date2',makeValidStrDate(TF2?TF2:dt2str(calendar_nextday(calendar_tomorrow()))),2);
	};
	TF1=readCookie('date1');
	TF2=readCookie('date2');
	TIM1=readCookie('time1');
	TIM2=readCookie('time2');

}
function calendar_tomorrow() {return calendar_nextday(new Date())}
function calendar_nextday(D) {return (new Date(D.getTime()+86400000))}
function calendar_redraw(D,e) {calendar_draw(D,e)}
function calendar_close() {if (Cpopup) CAL.style.display='none'}
function calendar_clear() {var x,c=CCOOKIES;for(x in c) killCookie(c[x]);Cinit=0;calendar_setfromdays(1);}//calendar_setup();calendar_update();}
function calendar_setup() {var x,c=CCOOKIES;for(x in c) {v=readCookie(c[x]);if (ById(c[x])) ById(c[x]).value=v?v:''};calendar_update()}
function calendar_make(D,V,n) {
	var x,s='',mx=new Date(),px=new Date(D),nx=new Date(D);
	px.setMonth(D.getMonth()-1);
	nx.setMonth(D.getMonth()+1);

	var m1=new Date(new Date().setMonth(mx.getMonth()-1))
	var m2=new Date(new Date().setMonth(mx.getMonth()+2))
	var P=(px<m1?'':CalendarNext.replace(/%NX%/,dt2str(px)).replace('next','prev')).replace(/%DNUM%/g,n)
	var N=(nx>m2?'':CalendarNext.replace(/%NX%/,dt2str(nx))).replace(/%DNUM%/g,n)

	for (x=0;x<7;x++) s+='<td>'+Days[(Weekstart+x)%7]+"</td>";
	CAL.innerHTML=CalendarHtml.replace('%PREV%',P).replace('%NEXT%',N).replace('%YR%',D.getFullYear()).replace('%MTH%',Months[D.getMonth()]).replace('%DAYS%',s).replace(/%DNUM%/g,n).replace(/%DWORD%/g,(n==1?'PICK-UP':'DROP-OFF')).replace('%DATA%',V)
}

var drawing=false
function calendar_draw(D,n) {
	if (!drawing) {
		var days=readCookie('days')
		D=makeValidStrDate(D,n);
		if (Clast==(days+D+n)) return;
		drawing=true
		Clast=days+D+n
		var V='',C='',x,TODAY=new Date(),NOW=D?str2dt(D):TODAY;
		var DF=new Date(NOW);DF.setDate(1);DF.setDate(1-(7+DF.getDay()-Weekstart)%7);
		var DAY=new Date(DF),DD=NOW.getDate(),DM=NOW.getMonth();
		var D1=str2dt(readCookie('date1'));D1=D1?D1:TODAY;
		var D2=str2dt(readCookie('date2'));D2=D2?D2:D1;
		while (DAY.getMonth()==DM||DAY.getMonth()==DF.getMonth()) {
			C='';
			for (x=0;x<7;x++) {
				var cd=DAY.getDate(),cm=DAY.getMonth(),dy=DAY.getDay();
				C+=CalendarCell.replace('%C%',DAY<TODAY?'past':DAY>=D1&&DAY<=D2?'today':dy==0||dy==6?'weekend':'workday').replace('%M%',cm==DM?'black':'gray').replace('%TA%',n).replace('%DA%',dt2str(DAY)).replace('%DT%',cd);
				DAY.setDate(DAY.getDate()+1)
			};
			V+=CalendarRow.replace('%V%',C)
		};
		writeCookie('days',	calendar_days(D1,D2));
		calendar_make(NOW,V,n);
		calendar_update()
		drawing=false
	}
}
function calendar_setfromdays(d) {
	var C=readCookie('date1');if (!C) C=writeCookie('date1',dt2str(calendar_tomorrow()))
	var D=str2dt(C),N=new Date(D.getTime()+(86400000*d));
	writeCookie('days',d)
	writeCookie('date2',strdt2fld((dt2str(N))))
	calendar_update()
}
var Tlast=0
function calendar_select(T,D) {
	var DX=str2dt(D),TD=calendar_tomorrow(),D1=str2dt(readCookie('date1')),D2=str2dt(readCookie('date2')),O=T;
	if (DX<TD) return false;
	if (DX<D1) T=1
	if (DX>D2) T=2
	if (DX>D1&&Tlast==1) T=2
	if (DX>D1&&Tlast==2) T=1
	Tlast=T
	if (T==1) {
		D1=DX;
		if (D1<TD) return false;
		D1=D1>TD?D1:calendar_nextday(TD);
		D=writeCookie('date1',strdt2fld(dt2str(D1)))
	} else {
		D2=DX;
	}
	D2=D1>=D2?calendar_nextday(D1):D2;
	writeCookie('date2',strdt2fld(dt2str(D2)));
	calendar_redraw(D,O==1?2:1);
	calendar_close()
}
function strdt2fld(v) {if (v) {var p=v.split('-');if (p[1].match(/\d+/)) p[1]=parseInt(p[1]);v=pad_num(p[0])+'-'+((typeof p[1])=='number'?ShortMonths[p[1]-1]:p[1])+'-'+p[2]};return !v?'':v}
function str2dt(v) {var d=/^(\d+)\-(\d+)\-(\d+)/;v=makeValidNumDate(v);return !v?'':!d.exec(v)?'':(new Date (RegExp.$3,RegExp.$2-1,RegExp.$1))}
function dt2str(v) {return !v?'':(new String (v.getDate()+"-"+(v.getMonth()+1)+"-"+v.getFullYear()+" "))}
function makeValidStrDate(D,n) {var a=D.match(/(\d{1,2})\-([a-z]{3}|\d{1,2})\-(\d{4})/i);return a?pad_num(a[1])+'-'+a[2]+'-'+a[3]:dt2str(n==1?calendar_tomorrow():calendar_nextday(calendar_tomorrow()))}
function makeValidNumDate(D) {var r=D,a=null;if ((typeof D)==='object') D=dt2str(D);if (D) a=D.match(/(\d{1,2})\-([a-z]{3}|\d{1,2})\-(\d{4})/i);if (!a) return '';if (a[2].match(/[a-z]+/i)) r=a[1]+'-'+(RevMonths[a[2]]+1)+'-'+a[3];return r}

