
var icaldata = new Array(new Array(),new Array(),new Array());

var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];

function writeCurDate()
{
	var todaydate=new Date();
	var curday=todaydate.getDate();
	var curwday=days[todaydate.getDay()];
	var curmonth=months[todaydate.getMonth()];
	var curyear=todaydate.getFullYear();

	document.write(curwday+' '+curday+'. '+curmonth+' '+curyear);
}

var lastBorderColor;

function onCal(tgt)
{
	if (tgt.className != 'blankday') 
	{
		lastBorderColor = tgt.style.borderColor;
		tgt.style.borderColor = '#B8005C';
	}
}

function offCal(tgt)
{
	if (tgt.className != 'blankday') tgt.style.borderColor = lastBorderColor;
}


function selectCal(tgt,icalnum)
{
	if (tgt.className != 'blankday') 
	{
		day = Number(tgt.innerHTML);
		var msel = document.getElementById('ical'+icalnum+'_msel');
		var ysel = document.getElementById('ical'+icalnum+'_ysel');
		var month = msel[msel.selectedIndex].value;
		var year = ysel[ysel.selectedIndex].value;

		var todaydate=new Date();
		d = todaydate.getDate();
		m = todaydate.getMonth();
		y = todaydate.getFullYear();

		if (((m==month) && (y==year) && (day<d)) || ((y==year) && (month<m)))
		{
			alert(document.rForm.sysmsg3.value); 
			return 0;
		}

		icaldata[icalnum].selmonth = month;
		icaldata[icalnum].selyear = year;
		icaldata[icalnum].selday = day;

		month++;

		if (String(day).length == 1) day = '0'+day;
		if (String(month).length == 1) month = '0'+month;

		rdate = String(year)+String(month)+String(day);

		//start date
		if (icalnum==1) 
		{
			if (document.rForm['rental2'].value <= rdate) 
			{
				alert(document.rForm.sysmsg1.value); 
				return 0;
			}
			document.rForm.db_orders_sdate.value = joinDate(day,month,year);
		}

		// end date
		if (icalnum==2) 
		{
			if (document.rForm['rental1'].value >= rdate)
			{
				alert(document.rForm.sysmsg2.value); 
				return 0;
			}
			document.rForm.db_orders_edate.value = joinDate(day,month,year);
		}

		// update
		document.rForm['rental'+icalnum].value = rdate;

		if (icaldata[icalnum].selected)
		{
			icaldata[icalnum].selected.className = icaldata[icalnum].lastClass;
		}
		icaldata[icalnum].lastClass = tgt.className;
		tgt.className = 'selday';
		icaldata[icalnum].selected = tgt;

		//calculate
		priceCalc();
	}
}

function reloadCal(icalnum)
{
	var msel = document.getElementById('ical'+icalnum+'_msel');
	var ysel = document.getElementById('ical'+icalnum+'_ysel');

	var month = msel[msel.selectedIndex].value;
	var year = ysel[ysel.selectedIndex].value;
	fillCal(icalnum,month,year);
}

function fillCal(icalnum, m, y)
{

	var todaydate=new Date();
	m = (m)?m:todaydate.getMonth();
	y = (y)?y:todaydate.getFullYear();

	var oD = new Date(y, m, 1);
	dayone=oD.getDay()-1;
	if (dayone < 0) dayone = 6;

	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];
	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;

	var todaydate=new Date();
	var scanfortoday = (y==todaydate.getFullYear() && m==todaydate.getMonth())? todaydate.getDate() : -1;
	var scanforsel = (y==icaldata[icalnum].selyear && m==icaldata[icalnum].selmonth)? icaldata[icalnum].selday : -1;

	for(i=1;i<=42;i++)
	{
		var x=((i-dayone>0)&&(i-dayone<=dim[m]))? i-dayone : (icalnum?'&nbsp;':'');
		var d = document.getElementById('ical'+icalnum+'d'+i);
		d.className = (i%7==0)?'sunday':'weekday';
		if (x==scanfortoday) d.className = 'today';
		if (x==scanforsel) d.className = 'selday';
		d.style.cursor = (icalnum?'pointer':'default');
		if (x==(icalnum?'&nbsp;':'')) 
		{
			d.className = 'blankday';
			d.style.cursor = 'default';
		}
		d.innerHTML = x;
	}
}

//season stuff

function season(name,sday,smonth,eday,emonth,holiday,percentage)
{
	this.name = name;
	this.sday = Number(sday);
	this.smonth = Number(smonth);
	this.eday = Number(eday);
	this.emonth = Number(emonth);
	this.holiday = Number(holiday);
	this.percentage = Number(percentage);
}

var seasons;

function setSeasons(s)
{
	seasons = s;
}

function getEaster(year) //Gauss rules!
{
	a = year % 19;
	b = year % 4;
	c = year % 7;

	AA = (19 * a + 24) % 30;
	BB = (2 * b + 4 * c + 6 * AA + 5) % 7;

	eDay = AA + BB + 22;

	if (eDay > 31)
	{
		eDay -= 31;
		eMonth = 4;
	}
	else eMonth = 3;

	sDay = eDay - 9;
	sMonth = eMonth;
	if (sDay < 1)
	{
		sDay = 32 + sDay;
		sMonth -= 1;
	}

	easter = new Object();
	easter['sday'] = sDay;
	easter['smonth'] = sMonth;
	easter['eday'] = eDay;
	easter['emonth'] = eMonth;

	return easter;
}

function cleanUp()
{
	datesCleanUp();
	priceCleanUp();
}

function datesCleanUp()
{
	var todaydate=new Date();
	var m = todaydate.getMonth();
	var y = todaydate.getFullYear();

	for (i=1; i<=2; i++)
	{
		var msel = document.getElementById('ical'+i+'_msel');
		var ysel = document.getElementById('ical'+i+'_ysel');
		msel.selectedIndex = m;
		ysel.selectedIndex = 0;
	}
	
	document.rForm['rental1'].value = 0;
	document.rForm['rental2'].value = 30000000;
	document.rForm.db_orders_sdate.value = '';
	document.rForm.db_orders_edate.value = '';
	icaldata = new Array(new Array(),new Array(),new Array());

	fillCal(1);
	fillCal(2);
	
	var sedate = document.getElementById('sedate');
	sedate.className = 'pmag';
	sedate.style.fontSize = '11px';
	sedate.innerHTML = document.rForm.sysmsg4.value;
}

function priceCleanUp()
{
	//clear price table
	for (var k=0; k<4; k++)
	{
		document.getElementById('season'+k).innerHTML = '&nbsp;';
		document.getElementById('days'+k).innerHTML = '&nbsp;';
		document.getElementById('price'+k).innerHTML = '&nbsp;';
	}

	document.getElementById('totaldays').innerHTML = '0';
	document.getElementById('totalprice').innerHTML = '0';
}

function frac(n)
{
	if (n - Math.floor(n)) return Math.floor(n) + ' &frac12;'; else return n;
}

function priceCalc()
{
	var sdate = document.rForm.db_orders_sdate.value;
	var edate = document.rForm.db_orders_edate.value;
	var sts = Math.round(getTS(sdate)/86400000);
	var ets = Math.round(getTS(edate)/86400000);


	if (ets-sts>90)
	{
		alert(document.rForm.sysmsg6.value);
		cleanUp();
		return;
	}

	if ((sts)&&(ets)) 
	{
		priceCleanUp();

		var sedate = document.getElementById('sedate');
		sedate.className = 'pblue';
		sedate.style.fontSize = '13px';
		sedate.innerHTML = sdate+' - '+edate+'<a style="font-size:10px; margin-left:10px;" href="JavaScript:cleanUp();">'+document.rForm.sysmsg5.value+'</a>';

		var start = splitDate(sdate);
	
		//generate timestamps and easter dates for selected year
		for (var i in seasons)
		{
			if (seasons[i].name == 'Easter')
			{
				var easter = getEaster(start.year);
				seasons[i].sday = easter.sday;
				seasons[i].smonth = easter.smonth;
				seasons[i].eday = easter.eday;
				seasons[i].emonth = easter.emonth;
			}
			var yearswitch1 = 0;
			var yearswitch2 = 0;

			if (start.month<6) yearswitch1 = -1; else yearswitch2 = 1; //compensate for year-spanning seasons

			seasons[i].sts = Math.round(getTS(joinDate(seasons[i].sday,seasons[i].smonth,(seasons[i].emonth>=seasons[i].smonth?start.year:Number(start.year)+yearswitch1)))/86400000);
			seasons[i].ets = Math.round(getTS(joinDate(seasons[i].eday,seasons[i].emonth,(seasons[i].emonth>=seasons[i].smonth?start.year:Number(start.year)+yearswitch2)))/86400000);
			seasons[i].rentaldays = 0;
		}

		//seasons control array
		var rentalseasons = new Array();

		//check rental days against seasons
		var repeatSeason = -1;

		for (var j=sts; j<=ets; j++)
		{
			for (var i in seasons)
			{
				if ((j>=seasons[i].sts) && (j<=seasons[i].ets)) 
				{
					seasons[i].rentaldays++;
					if (rentalseasons[rentalseasons.length-1] != i) 
					{
						var rs = false;
						for (var k in rentalseasons)
						{
							if (rentalseasons[k] == i) 
							{
								rs = true;
								repeatSeason = k;
							}
						}
						if (!rs) rentalseasons.push(i);
					}
					break;
				}
			}
		}

		//adjust rentaldays accross seasons
		if (repeatSeason > -1)
		{
			seasons[rentalseasons[repeatSeason]].rentaldays -= 1;
		}
		else
		{
			seasons[rentalseasons[0]].rentaldays -= 0.5;
			seasons[rentalseasons[rentalseasons.length-1]].rentaldays -= 0.5;
		}

		//get base price
		var td = Math.round(ets - sts);
		if (td<=7) 
		{
			var baseprice = Number(document.cForm['p'+td+'d'].value); 
		} 
		else 
		{
			var base = Number(document.cForm['p7d'].value);
			var baseprice = td*(base/7);
		}

		//get extras
		if (td > 14) var extraDays = 14; else var extraDays = td;
		var extraPrice = 0;
		var extraCnt = document.getElementById('extraCnt').value;
		extraDec = 0;
		extraBin = '';
		for (i=0; i<extraCnt; i++)
		{
			var extra = document.getElementById('extra'+i).checked;
			if (extra)
			{
				extraDec += i+1;
				extraPrice += document.getElementById('extraVal'+i).value * extraDays;
				
				extraBin += '1';
			} else extraBin += '0';
		}

		document.getElementById('extraBin').value = extraBin; //(extraDec).toString(2);

		//fill price table
		var cnt = 0;
		var stepprice = 0;
		var totalprice = 0;
		for (var j in rentalseasons)
		{
			var i = rentalseasons[j];
			document.getElementById('season'+cnt).innerHTML = seasons[i].name;
			document.getElementById('days'+cnt).innerHTML = frac(seasons[i].rentaldays);
			var stepprice = (baseprice/(100*td))*(seasons[i].percentage*seasons[i].rentaldays);
			totalprice += stepprice;
			document.getElementById('price'+cnt).innerHTML = decimate(euroConv(stepprice));
			cnt++;
		}

		if (extraPrice)
		{
			totalprice += extraPrice;
			document.getElementById('season3').innerHTML = 'Extras';
			//if (extraDays == 14) document.getElementById('days3').innerHTML = '<i>max</i>';
			document.getElementById('price3').innerHTML = decimate(euroConv(extraPrice));
		}

		document.getElementById('totaldays').innerHTML = td;
		document.getElementById('totalprice').innerHTML = decimate(euroConv(totalprice));
	}

}