// form_functions.js for InterRose.co.uk
var days = new Array("none","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
var months = new Array("none","January","February","March","April","May","June","July","August","September","October","November","December");
var years = new Array("none");
var monthdays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var timeoffset = 0;
//var millisDay = 24 * 60 * 60 * 1000;
var millisDay = 86400000;

var size_threshold = 4; // roses less than this are classed as 'single'. This used to apply to
			// upgrades and gifts, but now applies just to gifts. roses with a size
			// of 0 are also classed as large so we can include large gifts with e.g. petals
			// and not mess up the total rose count
var time_threshold = 16; // i.e. 1600 or 4pm
var time_threshold_words = "4pm (UK time)";

var sat_time_threshold = 12;
var sat_time_threshold_words = "12pm (UK time)";

var default_colour = 2;
var default_upgrade = 2;
var default_postage = 1;

function year2yearindex(year) {
	for (i=1; i<years.length; i++) {
		if (years[i] == year) {
			return i;
		}
	}
	return 0;
}

function initForm(formtype) {
// FREE
	if (formtype == 'free') {
		parsePresetDate(document.orderform.del_presetdate.selectedIndex);
	} else
// ORDER
	if (formtype == 'order') {
		// This has now moved to IRorder_form_functions.js
	} else
// ORDERQUICK
	if (formtype == 'order-quick') {
	} else
	{
		// Unknown form so do nothing
	}
}

function Validate(form, formtype) {
// CONTACTUS
	if (formtype == 'contactus') {
		if (!isBlank(form.email.value)) {
			if (!isEmail(form.email.value)) {
				return(formError("Please enter a valid E-mail Address", form.email));
			}
		}
	} else
// COMPETITION
	if (formtype == 'competition') {
		if (!checkBlank("your Name", form.name)) return false;
		if (!checkEmail("your E-mail Address", form.email)) return false;
		if (!checkBlank("your Poem", form.poem)) return false;
	} else
// TELLAFRIEND
	if (formtype == 'tellafriend') {
		if (!checkBlank("your Name", form.fromname)) return false;
		if (!checkEmail("your E-mail Address", form.fromemail)) return false;
		if (!checkBlank("your friend's Name", form.toname)) return false;
		if (!checkEmail("your friend's E-mail Address", form.toemail)) return false;
		return true;
	} else
// FREE
	if (formtype == 'free') {
		var freebouquet_index = form.type_rose.selectedIndex;
		if (freebouquets[freebouquet_index].orderinfo == "none") {
			return(formError("Please select a type of Bouquet", form.type_rose));
		}
		var presetdate_index = form.del_presetdate.selectedIndex;
		if (presetdate_index != 0) {
			if (presetdates[presetdate_index].occasion != "none") {
				if ((form.del_day.selectedIndex != parseInt(presetdates[presetdate_index].day))
				|| (form.del_month.selectedIndex != parseInt(presetdates[presetdate_index].month))
				|| (form.del_year.selectedIndex != parseInt(presetdates[presetdate_index].yearindex))) {
					return(formError("You have chosen delivery dates of both " + presetdates[presetdate_index].description + " and " + days[form.del_day.selectedIndex] + " / " + months[form.del_month.selectedIndex] + " / " + years[form.del_year.selectedIndex] + "\nPlease select just one delivery date.", form.del_presetdate));
				}
			}
		} else {
			if (form.del_day.selectedIndex == 0) {
				return(formError("Please enter a Delivery Day", form.del_day));
			}
			if (form.del_month.selectedIndex == 0) {
				return(formError("Please enter a Delivery Month", form.del_month));
			}
			if (form.del_year.selectedIndex == 0) {
				return(formError("Please enter a Delivery Year", form.del_year));
			}
			today = new Date();
			today.setTime(timeoffset + today.getTime());
			todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
			if (form.del_year.selectedIndex == 1) { //this year
				if (form.del_month.selectedIndex < (today.getMonth() + 1)) { //before this month
					return(formError("Invalid delivery date", form.del_month));
				} else if (form.del_month.selectedIndex == (today.getMonth() + 1)) { //this month
					if (form.del_day.selectedIndex <= today.getDate()) { //before this date
						return(formError("Invalid delivery date", form.del_day));
					} else if ((form.del_day.selectedIndex == (today.getDate() + 1)) && (today.getHours() >= time_threshold)) { //tomorrow
						return(formError("Sorry, deliveries for the following day must be ordered before " + time_threshold_words, form.del_day));
					}
				}
			} else if (form.del_year.selectedIndex == 2) { //next year
				if (form.del_month.selectedIndex > (today.getMonth() + 1)) { //after this month
					return(formError("Sorry, deliveries cannot be ordered more than a year in advance", form.del_month));
				} else if (form.del_month.selectedIndex == (today.getMonth() + 1)) { //this month
					if (form.del_day.selectedIndex > today.getDate()) { //after this date
						return(formError("Sorry, deliveries cannot be ordered more than a year in advance", form.del_day));
					}
				}
			}
			if (form.del_day.selectedIndex > getDaysForMonth(form.del_month.selectedIndex, years[form.del_year.selectedIndex])) {
				return(formError("Invalid delivery date", form.del_day));
			}
			deliveryDate = new Date(years[form.del_year.selectedIndex], form.del_month.selectedIndex-1, form.del_day.selectedIndex);
			for (i=0;i<baddates.length;i++) {
				if (deliveryDate.valueOf() == baddates[i].date.valueOf()) {
					return(formError(baddates[i].message, form.del_day));
				}
			}
			if (deliveryDate.getDay() == 0) {
				return(formError("Sorry, Sunday deliveries not available", form.del_day));
			} else if (deliveryDate.getDay() == 1) {
				return(formError("Sorry, Monday deliveries not available", form.del_day));
			}
			//alert("del_date: " + deliveryDate + "\ntoday_date: " + todayDate + "\ndel - today: " + (deliveryDate.getTime() - todayDate.getTime())/millisDay + "\nbn: " + bouquet_notice + " mD: " + millisDay + "\nbn * mD: " + (bouquet_notice * millisDay));
			if ((deliveryDate.getTime() - todayDate.getTime()) < (bouquet_notice * millisDay)) {
				return(formError("Sorry, that bouquet needs to be ordered at least " + bouquet_notice + " whole days in advance", form.del_day));
			}
		}
		if (!checkBlank("the Delivery Name", form.del_name)) return false;
		if (!checkBlank("the Delivery Address", form.del_address)) return false;
		if (!checkEmail("your E-mail Address", form.email)) return false;
		if (!checkBlank("your Password", form.password)) return false;
		form.del_day.disabled = false;
		form.del_month.disabled = false;
		form.del_year.disabled = false;
		escapeField(form.message);
		escapeField(form.signature);
		escapeField(form.del_address);
		return true;
	} else
// WINNER
	if (formtype == 'winner') {
		var freebouquet_index = form.type_rose.selectedIndex;
		if (freebouquets[freebouquet_index].orderinfo == "none") {
			return(formError("Please select a type of Bouquet", form.type_rose));
		}
		var presetdate_index = form.del_presetdate.selectedIndex;
		if (presetdate_index != 0) {
			if (presetdates[presetdate_index].occasion != "none") {
				if ((form.del_day.selectedIndex != parseInt(presetdates[presetdate_index].day))
				|| (form.del_month.selectedIndex != parseInt(presetdates[presetdate_index].month))
				|| (form.del_year.selectedIndex != parseInt(presetdates[presetdate_index].yearindex))) {
					return(formError("You have chosen delivery dates of both " + presetdates[presetdate_index].description + " and " + days[form.del_day.selectedIndex] + " / " + months[form.del_month.selectedIndex] + " / " + years[form.del_year.selectedIndex] + "\nPlease select just one delivery date.", form.del_presetdate));
				}
			}
		} else {
			if (form.del_day.selectedIndex == 0) {
				return(formError("Please enter a Delivery Day", form.del_day));
			}
			if (form.del_month.selectedIndex == 0) {
				return(formError("Please enter a Delivery Month", form.del_month));
			}
			if (form.del_year.selectedIndex == 0) {
				return(formError("Please enter a Delivery Year", form.del_year));
			}
			today = new Date();
			if (form.del_year.selectedIndex == 1) {
				if (form.del_month.selectedIndex < (today.getMonth() + 1)) {
					return(formError("Invalid delivery date", form.del_month));
				} else if (form.del_month.selectedIndex == (today.getMonth() + 1)) {
					if (form.del_day.selectedIndex <= today.getDate()) {
						return(formError("Invalid delivery date", form.del_day));
					} else if ((form.del_day.selectedIndex == (today.getDate() + 1)) && (today.getHours() >= time_threshold)) {
						return(formError("Sorry, deliveries for the following day must be ordered before " + time_threshold_words, form.del_day));
					}
				}
			}
		}
		if (!checkBlank("the Delivery Name", form.del_name)) return false;
		if (!checkBlank("the Delivery Address", form.del_address)) return false;
		if (!checkEmail("your E-mail Address", form.email)) return false;
		if (!checkBlank("your Password", form.password)) return false;
		if (!checkBlank("your Comments", form.comments)) return false;
		form.del_presetdate.disabled = false;
		form.del_day.disabled = false;
		form.del_month.disabled = false;
		form.del_year.disabled = false;
		return true;
	} else
// ORDER
	if (formtype == 'order') {
		// This has now moved to IRorder_form_functions.js
	} else
// ORDERQUICK
	if (formtype == 'order-quick') {
		if (!checkBlank("your Name", form.name)) return false;
		if (!checkEmail("your E-mail Address", form.email)) return false;
		if (!checkBlank("your Reference Number", form.orderref)) return false;
		if (form.orderref.value.length != 7) {
			return(formError("Please enter a valid Reference Number", form.orderref));
		}
		if (!checkBlank("an Amount", form.inputamount)) return false;
		if (isNaN(form.inputamount.value)) {
			form.inputamount.value = "";
			return(formError("Please enter a valid Amount", form.inputamount));
		}
		return true;
	} else
	{
		// Unknown form so do nothing
	}
}

function parsePresetDate(index) {
	if ((presetdates[index].occasion == "none") || (presetdates[index].occasion == "asbelow")) {
		document.orderform.del_day.selectedIndex = 0;
		document.orderform.del_month.selectedIndex = 0;
		document.orderform.del_year.selectedIndex = 0;
		document.orderform.del_day.disabled = false;
		document.orderform.del_month.disabled = false;
		document.orderform.del_year.disabled = false;
	} else {
		document.orderform.del_day.selectedIndex = parseInt(presetdates[index].day);
		document.orderform.del_month.selectedIndex = parseInt(presetdates[index].month);
		document.orderform.del_year.selectedIndex = parseInt(presetdates[index].yearindex);
		document.orderform.del_day.disabled = true;
		document.orderform.del_month.disabled = true;
		document.orderform.del_year.disabled = true;
	}
}

function parseColour(index) {
	var colourcategory = document.orderform.colourlist.value;
	if (colourcategory != 0) {
		if (colour[colourcategory][index].ordercode == "customized") {
			if (document.orderform.combotext.value != "yes") {
				writeout('colourcombospan1', "PLEASE customize your BOUQUET:<BR>");
				writeout('colourcombospan1a', "Tell us what rose colours and varities you would like and the quantities of each to make up your customized bouquet.");
				writeout('colourcombospan2', "*");
				writeout('colourcombospan3', "<INPUT TYPE=HIDDEN NAME='combotext' VALUE='yes'><TEXTAREA NAME='rose_colourcombo' COLS=30 ROWS=4 WRAP='virtual'></TEXTAREA>");
				return;
			}
		}
	}
	if (document.orderform.combotext.value != "no") {
		writeout('colourcombospan1', "");
		writeout('colourcombospan1a', "");
		writeout('colourcombospan2', "");
		writeout('colourcombospan3', "<INPUT TYPE=HIDDEN NAME='combotext' VALUE='no'>");
	}
}

function parseGoodOccasion(goodoccasion) {
	//alert(document.orderform.presetdateslist+", "+goodoccasion);
	if (goodoccasion != "*") {
		for (i=0;i<occasiondates.length;i++) {
			if (occasiondates[i].occasion == goodoccasion) {
				if (document.orderform.presetdateslist.value != goodoccasion) {
					writeout('presetdatesspan1', '<INPUT TYPE=HIDDEN NAME=presetdateslist VALUE="'+goodoccasion+'"><SELECT NAME="del_presetdate" onChange="parseOccasionDate('+i+',this.selectedIndex)">' + occasiondateslist[i] + '</SELECT>');
					parseOccasionDate(i, document.orderform.del_presetdate.selectedIndex);
				}
				break;
			}
		}
	} else {
		if (document.orderform.presetdateslist.value != "default") {
			writeout('presetdatesspan1', '<INPUT TYPE=HIDDEN NAME=presetdateslist VALUE="default"><SELECT NAME="del_presetdate" onChange="parsePresetDate(this.selectedIndex)">'+ presetdateslist +'</SELECT><SPAN CLASS="formtext">&#32;<A HREF="javascript:newWindow(\'/delivery_date.shtml\',370,420)">Click for info.</A> </SPAN>');
			parsePresetDate(document.orderform.del_presetdate.selectedIndex);
		}
	}
}

function parseOccasionDate(occasionindex, dateindex) {
	document.orderform.del_day.disabled = false;
	document.orderform.del_month.disabled = false;
	document.orderform.del_year.disabled = false;
	if (occasiondateslistdates[occasionindex][dateindex].orderinfo != 'none') {
		document.orderform.del_day.selectedIndex = parseInt(occasiondateslistdates[occasionindex][dateindex].day);
		document.orderform.del_month.selectedIndex = parseInt(occasiondateslistdates[occasionindex][dateindex].month);
		document.orderform.del_year.selectedIndex = year2yearindex(parseInt(occasiondateslistdates[occasionindex][dateindex].year));
	} else {
		document.orderform.del_day.selectedIndex = 0;
		document.orderform.del_month.selectedIndex = 0;
		document.orderform.del_year.selectedIndex = 0;
	}
	document.orderform.del_day.disabled = true;
	document.orderform.del_month.disabled = true;
	document.orderform.del_year.disabled = true;
}

function recalculatePrice() {
	cost = 0;
	var bouquetsource_index = document.orderform.bouquetsourcelist.value;
	var bouquet_index = -1;
	if (bouquetsource_index != -1) {
		bouquet_index = bouquetOrderCode2Index(bouquetsourcesitems[bouquetsource_index][document.orderform.type_rose.selectedIndex])
	}
	var bouquet_size = 0;
	var bouquet_upgrade = "Any";
	var bouquet_gifts = "Any";
	var bouquet_postage = "Any";
	var bouquet_colour = "Any";
	if (bouquet_index != -1) {
		bouquet_colour = bouquet[bouquet_index].colour;
		bouquet_size = parseInt(bouquet[bouquet_index].size);
		bouquet_upgrade = bouquet[bouquet_index].upgrade;
		bouquet_gifts = bouquet[bouquet_index].gifts;
		bouquet_postage = bouquet[bouquet_index].postage;
		cost = parseInt(bouquet[bouquet_index].cost);
		if (bouquet_colour == "Any") {
			var colour_index = document.orderform.rose_colour.selectedIndex;
			var colourcategory = document.orderform.colourlist.value;
			if (colour[colourcategory][colour_index].orderinfo != "none") {
				cost += parseInt(colour[colourcategory][colour_index].extracost) * bouquet_size;
			}
		}
		var upgradecategory = document.orderform.upgradelist.value;
		if ((bouquet_upgrade == "Any") && (upgradecategory != 0)) {
			var upgrade_index = document.orderform.upgrade.selectedIndex;
			if (upgrades[upgradecategory][upgrade_index].orderinfo != "none") {
				cost += parseInt(upgrades[upgradecategory][upgrade_index].cost);
			}
		}
		if (bouquet_gifts == "Any") {
			var gift_index = document.orderform.extras.selectedIndex;
			if (document.orderform.giftslist.value == "0") {
				// No action
			} else if (document.orderform.giftslist.value == "1") {
				gift_index = getsmallgiftsIndex(gift_index);
			} else if (document.orderform.giftslist.value == "2") {
				gift_index = getlargegiftsIndex(gift_index);
			}
			if (gifts[gift_index].orderinfo != "none") {
				cost += parseInt(gifts[gift_index].cost);
			}
		}
		var postagecategory = document.orderform.postagelist.value;
		if ((bouquet_postage == "Any") && (postagecategory != 0)) {
			var postage_index = document.orderform.delivery.selectedIndex;
			if (postage[postagecategory][postage_index].orderinfo != "none") {
				cost += parseInt(postage[postagecategory][postage_index].cost);
			}
		}
		if (document.orderform.tickbox1_tick) {
			if (document.orderform.tickbox1_tick.checked) {
				cost += parseInt(tickbox[0].cost);
			}
		}
		if (document.orderform.tickbox2_tick) {
			if (document.orderform.tickbox2_tick.checked) {
				cost += parseInt(tickbox[1].cost);
			}
		}
		if (document.orderform.tickbox3_tick) {
			if (document.orderform.tickbox3_tick.checked) {
				cost += parseInt(tickbox[2].cost);
			}
		}
		if (!isBlank(document.orderform.offer.value)) {
			for (i=0;i<offers.length;i++) {
				if (b64_md5(document.orderform.offer.value.toUpperCase()) == offers[i].hashvalue) {
					cost = Math.round((1 - (parseInt(offers[i].percent) / 100)) * cost);
					break;
				}
			}
		}
	}
	document.orderform.display_price.value = formatPenceAsPounds(cost);
}

function getDaysForMonth(month, year) {
	if ((month == 2) && (year % 4 == 0) && ((year % 400 == 0) || !(year % 100 == 0))) {
		return (monthdays[month-1] + 1);
	} else {
		return (monthdays[month-1]);
	}
}

function formBlankError(message, formfield) {
	if (formfield != null) {
		formfield.value = "";
	}
	return formError(message, formfield);
}

function formError(message, formfield) {
	alert(message);
	if (formfield != null) {
		formfield.focus();
	}
	return false;
}

function isBlank(fieldvalue) {
	if (fieldvalue == null) return true;
	if (fieldvalue.length == 0) return true;
	var blankchars = " \t\n\r";
	for (i=0;i<fieldvalue.length;i++) {
		letter = fieldvalue.charAt(i);
		if (blankchars.indexOf(letter) == -1) return false;
	}
	return true;
}

function hasBlank(fieldvalue) {
	if (fieldvalue.indexOf(' ') != -1) return true;
	if (fieldvalue.indexOf('\t') != -1) return true;
	if (fieldvalue.indexOf('\n') != -1) return true;
	return false;
}

function isEmail(email) {
	if (isBlank(email)) return false;
	if (hasBlank(email)) return false;
	atpos = email.indexOf('@');
	if ((atpos < 1) || (atpos > email.length - 4)) return false;
	if (email.charAt(atpos + 1) == '.') return false;
	dotpos = email.lastIndexOf('.');
	if ((dotpos < atpos + 2) || (dotpos > email.length - 2)) return false;
	return true;
}

function checkBlank(label, formfield) {
	if (isBlank(formfield.value)) {
		return(formBlankError("Please enter " + label, formfield));
	}
	return true;
}

function checkEmail(label, formfield) {
	if (!checkBlank(label, formfield)) return false;
	if (hasBlank(formfield.value)) {
		return(formError("Please check there are no spaces in " + label, formfield));
	}
	if (!isEmail(formfield.value)) {
		return(formError("Please check " + label + " is correct", formfield));
	}
	return true;
}

function formatPenceAsPounds(inputNum) {
	inputNum = parseInt(inputNum);
	sign = ""; pounds = "0"; pence = "00";
	if (isNaN(inputNum)) {
		inputNum = "";
	} else {
		if (inputNum < 0) {
			sign = "-";
			inputNum *= -1;
		}
		inputTxt = "" + inputNum;
		txtLen = inputTxt.length;

		if (txtLen < 3) {
			pounds = "0";
			pence = inputTxt;
			while (pence.length < 2) {
				pence = "0" + pence;
			}
		} else {
			pounds = inputTxt.substr(0, txtLen-2);
			pence = inputTxt.substr(txtLen-2,txtLen);
		}
	}
	return sign+"£"+pounds+"."+pence;
}

function escapeField(formfield) {
	formfield.value = replace(formfield.value,'"',"'");
}