var saturday_delivery = 0;			// 1 = allow saturday delivery, 0 = do not do allow next day deliver on a saturday
var days_to_deliver = 1;			// how many days does it take to deliver your order
var deltime = new Array(12,00);		// must order before 14:00 hours (2:00pm) weekdays

var holidays= new Array("22/12/2011","23/12/2011","24/12/2011","25/12/2011","26/12/2011","27/12/2011","28/12/2011","29/12/2011","30/12/2011","31/12/2011","01/01/2012","02/01/2012");

var shortmontharray = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var montharray = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var shortdayarray = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
var dayarray = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");

var current_date;
var order_date;
var curr_ekm_date;

var post_date_short = "";
var post_date_long = "";
var post_date_smart_short = "";
var post_date_smart_long = "";

var deliver_date_short = "";
var deliver_date_long = "";
var deliver_time = "";

var next_working_day_holiday = "";

function GetDayTh( day )
{
	var text="";
	
	switch(day) {
		case 1: 
		case 21: 
		case 31: 
			text = "st"; break;
		case 2: 
		case 22: 
			text = "nd"; break;
		case 3: 
		case 23: 
			text = "rd"; break;
		default: 
			text = "th"; break;
	}
	return day+text;
}

function MonthStringToNumber( month )
{
	for ( i=0; i<12; i++) {
		if(month == shortmontharray[i]) {
			return i+1;
		}
	}
	return -1;
}

function DayIsNonDeliveryDay ( date )
{
	var day = date.getDay();


	if(saturday_delivery) {
		return day==0;		// sunday delivery
	}
	else {
		if( day == 6 || day == 0 )	// if saturday (6) or sunday (0)
			return 1;
		else
			return 0;
	}
}

function DayIsWeekend( date )
{
	var day = date.getDay();
	if( day == 6 || day == 0 )	// if saturday (6) or sunday (0)
		return 1;
	else
		return 0;
}

function GetDeliveryDays( date )
{
	var day = date.getDay();

	if(saturday_delivery || day != 5) {	// friday(5)
		return days_to_deliver;
	}
	else {
		return days_to_deliver+2;
	}
}

function DayIsHoliday( date )
{
	day = date.getDate();
	month = date.getMonth()+1;
	year = date.getFullYear();

	var datearray = new Array();

	for( i = 0; i < holidays.length; i++) {
		datearray = holidays[i].split('/');
		if( (day == datearray[0].valueOf()) && (month == datearray[1].valueOf()) && (year == datearray[2].valueOf()) ) {
			return 1;
		}
	}
	return 0;
}

function PrintHolidaysCurrYear()
{
	var datearray = new Array();
	var holdatearray = new Array();
	datearray = curr_ekm_date.split('-');
	var hdate = new Date();
	var currdate = new Date();

	document.write('<table border="0" width="150" padding="4">');

	for( i = 0; i < holidays.length; i++) {
		holdatearray = holidays[i].split('/');
		if( holdatearray[2].valueOf() == datearray[2].valueOf() ) {
			month = shortmontharray[(holdatearray[1] * 1)-1];
			hdate.setFullYear((holdatearray[2].valueOf()*1),(holdatearray[1].valueOf()*1)-1,(holdatearray[0].valueOf()*1));
			if(hdate >= currdate) { 
				document.write('<tr><td>'+shortdayarray[hdate.getDay()]+'</td>');
				document.write('<td>'+holdatearray[0]+'</td><td>'+month+'</td><td>'+holdatearray[2]+'</td><td>Closed</td></tr>');
			}
		}
	}
	
	document.write('</table>');
	
}

function DayIsAfterMaxTime ( curdate, deldate )
{
	return (curdate.getTime() > deldate.getTime());
}

function TestIfHoliday( )
{
	if(DayIsHoliday(current_date) || next_working_day_holiday!="") {
		return 1;
	}
	else {
		return 0;
	}
}

function InitDeliveryTimeAndDate( time, date )
{
	curr_ekm_date = date;

	var timearray = new Array();
	timearray = time.split(':');
	
	// remove the day (eg. Sunday, Monday) from EKM's date string
	datepos = date.search(/;/i);
	if(datepos==-1) {
		return;			// if we did not find day, exit as string format must have changed
	}
	date = date.substring(datepos+1);
	var datearray = new Array();
	datearray = date.split('-');

	// convert EKM date in to javascript date
	datearray[1]=MonthStringToNumber(datearray[1]);
	var ds = datearray[1]+'/'+datearray[0]+'/'+datearray[2];
	current_date = new Date(ds);
	
	// convert EKM time in to javascript time
	current_date.setHours( timearray[0].valueOf(), timearray[1].valueOf(), 0 );

	var timeok = 0;
	var daysadded = 0;
	order_date = new Date(current_date);
	order_date.setHours( deltime[0], deltime[1], 0 );
	
	// find first day that is not a weekend and isn't today after delivery time
	do {
		if(!DayIsWeekend(order_date) && !DayIsAfterMaxTime(current_date, order_date)) {
			timeok = 1;
		}
		else {
			order_date.setDate(order_date.getDate()+1);
			daysadded++;
			if(daysadded > 365) return;			// something went wrong, so exit
		}
	} while(timeok==0);
	
	if(DayIsHoliday(order_date)) {
		next_working_day_holiday = shortdayarray[order_date.getDay()]+' '+GetDayTh(order_date.getDate())+' '+shortmontharray[order_date.getMonth()];
	}
	else {
		next_working_day_holiday = "";
	}

	timeok = 0;
	do {
		if(!DayIsWeekend(order_date) && !DayIsHoliday(order_date) && !DayIsAfterMaxTime(current_date, order_date)) {
			timeok = 1;
		}
		else {
			order_date.setDate(order_date.getDate()+1);
			daysadded++;
			if(daysadded > 365) return;			// something went wrong, so exit
		}
	} while(timeok==0);

	// create our post dispatch dates
	post_date_smart_long = post_date_long = dayarray[order_date.getDay()]+' '+GetDayTh(order_date.getDate())+' '+montharray[order_date.getMonth()];
	post_date_smart_short = post_date_short = shortdayarray[order_date.getDay()]+' '+GetDayTh(order_date.getDate())+' '+shortmontharray[order_date.getMonth()];
	
	if(daysadded==0) {
		post_date_smart_long = post_date_smart_short = "Today";
	}
	else if(daysadded==1) {
		post_date_smart_long = post_date_smart_short = "Tomorrow";
	}

	// calculate the days, hours, minutes before we have to order
	var one_day=1000*60*60*24;
	var one_hour=1000*60*60;
	var one_minute=1000*60;

	days = Math.floor((order_date.getTime()-current_date.getTime())/one_day);
	hours = Math.floor((order_date.getTime()-current_date.getTime())/one_hour)%24;
	minutes = Math.floor((order_date.getTime()-current_date.getTime())/one_minute)%60;

	timeok = 0;
	daysadded = 0;
	deld = new Date(order_date);
	deld.setDate(order_date.getDate()+GetDeliveryDays(order_date));
	
	// when will item be delivered
	do {
		if(!DayIsNonDeliveryDay(deld) && !DayIsHoliday(deld)) {
			timeok = 1;
		}
		else {
			deld.setDate(deld.getDate()+1);
			daysadded++;
			if(daysadded > 365) return;			// something went wrong, so exit
		}
	} while(timeok==0);

	deliver_date_short = shortdayarray[deld.getDay()]+' '+GetDayTh(deld.getDate())+' '+shortmontharray[deld.getMonth()];
	deliver_date_long = dayarray[deld.getDay()]+' '+GetDayTh(deld.getDate())+' '+montharray[deld.getMonth()];
	deliver_time = "";

	if(days == 0 && hours == 0 && minutes == 0) {
		deliver_time = "1 minute ";
	}
	else {
		deliver_time = "";
		if(days > 1) 
			deliver_time += days+' days, ';
		else if (days > 0)
			deliver_time += days+' day, ';
		
		if(hours > 1) 
			deliver_time += hours+' hours, ';
		else if(hours > 0)
			deliver_time += hours+' hour, ';
		
		if(minutes > 1 )
			deliver_time += minutes+' minutes ';
		else if(minutes > 0 )
			deliver_time += minutes+' minute ';
	}
}

function ShowDeliveryMsg( msg )
{
	msg = msg.replace("[post-long-smart]",post_date_smart_long);	
	msg = msg.replace("[post-long]",post_date_long);	
	msg = msg.replace("[post-short-smart]",post_date_smart_short);	
	msg = msg.replace("[post-short]",post_date_short);	
	
	msg = msg.replace("[deliver-long]",deliver_date_long);
	msg = msg.replace("[deliver-short]",deliver_date_short);
	msg = msg.replace("[deliver-time]",deliver_time);

	msg = msg.replace("[open-long]",post_date_long);	
	msg = msg.replace("[open-short]",post_date_short);	

	document.write(msg);
}
