
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);
}

//------------------------------------------------------------------------------------------------------
function processDates(id,day,month,year)
{
	var todaydate=new Date();
	dd = todaydate.getDate();
	mm = todaydate.getMonth();
	yy = todaydate.getFullYear();

	if (((mm==month) && (yy==year) && (day<dd)) || ((yy==year) && (month<mm)))
	{
		alert(document.rForm.sysmsg3.value); 
		return 0;
	}

	rdate = String(year)+String(addZeros(month*1+1))+String(addZeros(day));

	var id0 = calData.ids[0];
	var id1 = calData.ids[1];

	//start date
	if (id == id0) 
	{
		if (calData[id1].days <= rdate) 
		{
			alert(document.rForm.sysmsg1.value); 
			return 0;
		}
		calData[id0].days = rdate;
	}

	// end date
	if (id == id1) 
	{
		if (calData[id0].days*1 >= rdate*1)
		{
			alert(document.rForm.sysmsg2.value); 
			return 0;
		}
		calData[id1].days = rdate;
	}

	return 1;
}

//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);
}

//------------------------------------------------------------------------------------------------------
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 datesCleanUp()
{
	var todaydate=new Date();
	var m = todaydate.getMonth();
	var y = todaydate.getFullYear();

	for (var i in calData.ids)
	{
		var id = calData.ids[i];
		calData[id].selected.month = todaydate.getMonth();
		calData[id].selected.year = todaydate.getFullYear();
		calData[id].selected.day = -1;

		calData[id].days = i?30000000:0;

		calUpdate(id,todaydate.getMonth(),todaydate.getFullYear());
		dd_set(id,'',document.rForm.sysmsg10.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(full)
{
	var sdate = document.rForm[calData.ids[0]].value;
	var edate = document.rForm[calData.ids[1]].value;
	var sts = Math.round(getTS(sdate)/86400000);
	var ets = Math.round(getTS(edate)/86400000);

	if (document.getElementById('sedate') != undefined) full = true; else full = false;

	if (ets-sts>90)
	{
		alert(document.rForm.sysmsg6.value);
		datesCleanUp();

		if (full)
		{
			var sedate = document.getElementById('sedate');
			sedate.style.fontSize = '11px';
			sedate.innerHTML = document.rForm.sysmsg4.value;
			priceCleanUp();
		}
		
		return;
	}

	if ((sts)&&(ets)&&(vehicleId)) 
	{
		if (full)
		{
			var sedate = document.getElementById('sedate');
			sedate.style.fontSize = '13px';
			sedate.innerHTML = sdate+' - '+edate+'<br><a class="std" style="font-size:11px;" href="JavaScript:cleanUp();">'+document.rForm.sysmsg5.value+'</a>';
			priceCleanUp();
		}

		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;
			}
			else
			{
				var ss = seasons[i].sdate.split('/');
				seasons[i].sday = ss[0]*1;
				seasons[i].smonth = ss[1]*1;
				
				var se = seasons[i].edate.split('/');
				seasons[i].eday = se[0]*1;
				seasons[i].emonth = se[1]*1;
			}
			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 car = cars[vehicleId];

		var td = Math.round(ets - sts);
		if (td<=7) 
		{
			var baseprice = Number(car['p'+td+'d']); 
		} 
		else 
		{
			var base = Number(car['p7d']);
			var baseprice = td*(base/7);
		}

		if (full)
		{
			//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));
		}
		else
		{
			var cnt = 0;
			var stepprice = 0;
			var totalprice = 0;
			for (var j in rentalseasons)
			{
				var i = rentalseasons[j];
				var stepprice = (baseprice/(100*td))*(seasons[i].percentage*seasons[i].rentaldays);
				totalprice += stepprice;
				cnt++;
			}

			document.getElementById('totaldays').innerHTML = td;
			document.getElementById('totalprice').innerHTML = decimate(totalprice);
		}
	}

}