var saturday_delivery = 0;			// 1 = allow saturday delivery, 0 = do not do allow next day deliver on a saturday
var deltime = new Array(14,00);		// must order before 14:00 hours (2:00pm) weekdays

var holidays= new Array(
	"02/04/2010",	// good friday
	"05/04/2010",   // easter monday
	"03/05/2010",   // may day bank holiday
	"31/05/2010",   // spring bank holiday
//	"02/08/2010",   // summer holiday (Scotland)
	"30/08/2010",   // summer holiday (England , Ireland & Wales)
	"27/12/2010",   // christmas day holiday

	"03/01/2011",	// new years day holiday
	"22/04/2011",	// good friday
	"25/04/2011",   // easter monday
	"02/05/2011",   // may day bank holiday
	"30/05/2011",   // spring bank holiday
//	"01/08/2011",   // summer holiday (Scotland)
	"29/08/2011",   // summer holiday (England , Ireland & Wales)
	"27/12/2011"    // christmas day holiday

);

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 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('-');

	for( i = 0; i < holidays.length; i++) {
		holdatearray = holidays[i].split('/');
		if( holdatearray[2].valueOf() == datearray[2].valueOf() ) {
			month = shortmontharray[(holdatearray[1] * 1)-1];
			document.write(holdatearray[0]+' '+month+' '+holdatearray[2]+' Closed<br/>');
		}
	}
}

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()+1);
	
	// 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);
}

