// order_form_functions.js for InterRose.co.uk
var years = new Array("0");
var timeoffset = 0;

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 = 17; // i.e. 1700 or 5pm
var time_threshold_words = "5pm (UK time)";

var sat_time_threshold = 12;
var sat_time_threshold_words = "12pm (UK time)";

var default_colour = 54;
var default_upgrade = 45;
var default_postage = 1;

var agreed_to_first = false;
var first_question = "You have selected first class post delivery.\nThis is not a guaranteed next day delivery service and your order will be despatched 2 days prior to your requested delivery date if applicable. We do this because we prefer to deliver early rather than late.\nYou need to Click OK if you are happy with this, or Cancel if you would like to select a different delivery method to continue.";

function initForm() {
	for (var i=1; i<document.orderform.del_year.length; i++) {
		years[years.length] = parseInt(document.orderform.del_year[i].value);
	}
	now = new Date();
	timeoffset = (parseInt(document.orderform.serverdate.value) * 1000) - now.getTime();
	var source_index;
	if (document.orderform.selectsource.value != '') {
		source_index = getBouquetSourceIndex(document.orderform.selectsource.value);
	} else  {
		source_index = getBouquetSourceIndexFromBouquet(document.orderform.selectbouquet.value);
	}
	var bouquet_index = getBouquetItemIndex(source_index, document.orderform.selectbouquet.value);
	if (source_index != -1) {
		document.orderform.bouquet_source[source_index].checked = true;
		parseBouquetSource(source_index);
		if (bouquet_index != -1) {
			document.orderform.type_rose.selectedIndex = bouquet_index;
		}
		parseBouquet(source_index, document.orderform.type_rose.selectedIndex);
	} else {
		for (var i=0; i<document.orderform.bouquet_source.length; i++) {
			if (document.orderform.bouquet_source[i].checked) {
				source_index = i;
				break;
			}
		}
		if (source_index == -1) {
			source_index = parseInt(document.orderform.bouquetsourcelist.value);
		}
		parseBouquetSource(source_index);
	}
	if (parseInt(document.orderform.needs_colour.value) == 1) {
		var colour_index = getColourItemIndex(parseInt(document.orderform.colourlist.value), document.orderform.selectcolour.value);
		if (colour_index != -1) {
			document.orderform.rose_colour.selectedIndex = colour_index;
			parseColour(document.orderform.rose_colour.selectedIndex);
		}
	}
	writeout('hidejsreq', "");
	document.orderform.display_price.disabled = true;
	recalculatePrice();
}

function Validate(form) {
// Initialize the variables
	form.orderinfo.value = "";
	form.order_description.value = "";
	form.amount.value = "";
	form.bouquet.value = "";
	form.colour.value = "";
	form.delivery_method.value = "1st Class Post";
	form.deluxe.value = "Standard";
	form.extra_gifts.value = "None";
	form.tickbox1_description.value = "";
	form.tickbox2_description.value = "";
	form.tickbox3_description.value = "";
	form.tickbox4_description.value = "";
	form.tickbox5_description.value = "";
	form.special_offer.value = "None";
	form.code_bouquet.value = "";
	form.code_colour.value = "";
	form.code_gifts.value = "";
	form.code_deluxe.value = "";
	form.code_postage.value = "";
	form.code_tickbox1.value = "";
	form.code_tickbox2.value = "";
	form.code_tickbox3.value = "";
	form.code_tickbox4.value = "";
	form.code_tickbox5.value = "";
	form.st_tickbox1name.value = "";
	form.st_tickbox2name.value = "";
	form.st_tickbox3name.value = "";
	form.st_tickbox4name.value = "";
	form.st_tickbox5name.value = "";
	form.st_tickbox1value.value = "";
	form.st_tickbox2value.value = "";
	form.st_tickbox3value.value = "";
	form.st_tickbox4value.value = "";
	form.st_tickbox5value.value = "";
	form.st_txttickbox1.value = "";
	form.st_txttickbox2.value = "";
	form.st_txttickbox3.value = "";
	form.st_txttickbox4.value = "";
	form.st_txttickbox5.value = "";
	form.st_gifts_orderinfo.value = "";
	form.st_tickbox1_orderinfo.value = "";
	form.st_tickbox2_orderinfo.value = "";
	form.st_tickbox3_orderinfo.value = "";
	form.st_tickbox4_orderinfo.value = "";
	form.st_tickbox5_orderinfo.value = "";
// Bouquets
	var source_index = parseInt(form.bouquetsourcelist.value);
	if (source_index == -1) {
		return(formError("Please select a type of Order"));
	}
	var bouquet_object = getBouquetObject(source_index, form.type_rose.selectedIndex);
	if (bouquet_object == null) {
		return(formError("Please select a type of Bouquet", form.type_rose));
	}
	form.bouquet.value = bouquet_object.orderinfo;
	form.code_bouquet.value = bouquet_object.ordercode;
	form.bouquet_size.value = parseInt(bouquet_object.size);

	form.amount.value = "" + parseInt(bouquet_object.cost);
	form.orderinfo.value = form.code_bouquet.value;
	form.order_description.value = form.bouquet.value;
// Colours
	if (bouquet_object.colour != "Any") {
		form.colour.value = bouquet_object.colour;
		form.code_colour.value = bouquet_object.colourcode;
	} else {
		var colour_object = getColourObject(form.rose_colour.selectedIndex, parseInt(form.colourlist.value));
		if (colour_object.orderinfo == "none") {
			return(formError("Select your Colour/Variety/Option", form.rose_colour));
		} else {
			if (colour_object.orderinfo == "Customized Colour") {
				if (!checkBlank("your Customized Colour Combination", form.rose_colourcombo)) return false;
				escapeField(form.rose_colourcombo);
				form.colour.value = form.rose_colourcombo.value;
			} else {
				form.colour.value = colour_object.orderinfo;
			}
			form.amount.value = "" + ((parseInt(colour_object.extracost) * parseInt(bouquet_object.size)) + parseInt(form.amount.value));
		}
		form.code_colour.value = colour_object.ordercode;
	}
	form.orderinfo.value = form.code_colour.value + " " + form.orderinfo.value;
	form.order_description.value = form.colour.value + " " + form.order_description.value;
// Deluxe
	if (bouquet_object.upgrade != "Any") {
		form.deluxe.value = bouquet_object.upgrade;
		form.code_deluxe.value = bouquet_object.upgradecode;
	} else {
		var upgrade_object = getUpgradeObject(form.upgrades.selectedIndex, parseInt(form.upgradeslist.value));
		if ((upgrade_object != null) && (upgrade_object.orderinfo != "none")) {
			form.deluxe.value = upgrade_object.orderinfo;
			form.code_deluxe.value = upgrade_object.ordercode;
			form.amount.value = "" + (parseInt(upgrade_object.cost) + parseInt(form.amount.value));
		} else {
			form.upgrades.selectedIndex = 0;
		}
	}
	form.orderinfo.value = form.code_deluxe.value + " " + form.orderinfo.value;
	form.order_description.value = form.deluxe.value + " " + form.order_description.value;
// Gifts
	if (bouquet_object.gifts != "Any") {
		form.extra_gifts.value = bouquet_object.gifts;
		form.st_gifts_orderinfo.value = "***  " + bouquet_object.gifts + "\n";
		form.code_gifts.value = bouquet_object.giftscode;
	} else {
		var gift_object = getGiftObject(form.gifts.selectedIndex, parseInt(form.giftslist.value));
		if (gift_object.orderinfo != "none") {
			form.extra_gifts.value = gift_object.orderinfo;
			form.st_gifts_orderinfo.value = "***  " + gift_object.orderinfo + "\n";
			form.code_gifts.value = gift_object.ordercode;
			form.amount.value = "" + (parseInt(gift_object.cost) + parseInt(form.amount.value));
		} else {
			form.gifts.selectedIndex = 0;
		}
	}
	if (form.code_gifts.value == "") {
		form.code_gifts.value = "none";
	}
	form.orderinfo.value += ", " + form.code_gifts.value;
	if (form.code_gifts.value != "none") {
		form.order_description.value += " with " + form.extra_gifts.value;
	}
// Tickbox1 (if enabled)
	if (form.tickbox1_tick) {
		var tickbox1_object = getTickbox1Object();
		form.st_tickbox1name.value = tickbox1_object.header + ":";
		form.st_tickbox1value.value = "No";
		form.st_txttickbox1.value = tickbox1_object.header + " : ";
		if (form.tickbox1_tick.checked) {
			form.st_tickbox1value.value = "Yes";
			form.code_tickbox1.value = tickbox1_object.ordercode;
			form.tickbox1_description.value = tickbox1_object.orderinfo;
			form.st_tickbox1_orderinfo.value = "***  " + tickbox1_object.orderinfo + "\n";
			form.amount.value = "" + (parseInt(tickbox1_object.cost) + parseInt(form.amount.value));
		}
		form.st_txttickbox1.value += form.st_tickbox1value.value + "\n";
		if (form.code_tickbox1.value == "") {
			form.code_tickbox1.value = "none";
		}
		form.orderinfo.value += ", " + form.code_tickbox1.value;
		if (form.code_tickbox1.value != "none") {
			form.order_description.value += " and " + form.tickbox1_description.value;
		}
	}
// Tickbox2 (if enabled)
	if (form.tickbox2_tick) {
		var tickbox2_object = getTickbox2Object();
		form.st_tickbox2name.value = tickbox2_object.header + ":";
		form.st_tickbox2value.value = "No";
		form.st_txttickbox2.value = tickbox2_object.header + " : ";
		if (form.tickbox2_tick.checked) {
			form.st_tickbox2value.value = "Yes";
			form.code_tickbox2.value = tickbox2_object.ordercode;
			form.tickbox2_description.value = tickbox2_object.orderinfo;
			form.st_tickbox2_orderinfo.value = "***  " + tickbox2_object.orderinfo + "\n";
			form.amount.value = "" + (parseInt(tickbox2_object.cost) + parseInt(form.amount.value));
		}
		form.st_txttickbox2.value += form.st_tickbox2value.value + "\n";
		if (form.code_tickbox2.value == "") {
			form.code_tickbox2.value = "none";
		}
		form.orderinfo.value += ", " + form.code_tickbox2.value;
		if (form.code_tickbox2.value != "none") {
			form.order_description.value += " and " + form.tickbox2_description.value;
		}
	}
// Tickbox3 (if enabled)
	if (form.tickbox3_tick) {
		var tickbox3_object = getTickbox3Object();
		form.st_tickbox3name.value = tickbox3_object.header + ":";
		form.st_tickbox3value.value = "No";
		form.st_txttickbox3.value = tickbox3_object.header + " : ";
		if (form.tickbox3_tick.checked) {
			form.st_tickbox3value.value = "Yes";
			form.code_tickbox3.value = tickbox3_object.ordercode;
			form.tickbox3_description.value = tickbox3_object.orderinfo;
			form.st_tickbox3_orderinfo.value = "***  " + tickbox3_object.orderinfo + "\n";
			form.amount.value = "" + (parseInt(tickbox3_object.cost) + parseInt(form.amount.value));
		}
		form.st_txttickbox3.value += form.st_tickbox3value.value + "\n";
		if (form.code_tickbox3.value == "") {
			form.code_tickbox3.value = "none";
		}
		form.orderinfo.value += ", " + form.code_tickbox3.value;
		if (form.code_tickbox3.value != "none") {
			form.order_description.value += " and " + form.tickbox3_description.value;
		}
	}
// Tickbox4 (if enabled)
	if (form.tickbox4_tick) {
		var tickbox4_object = getTickbox4Object();
		form.st_tickbox4name.value = tickbox4_object.header + ":";
		form.st_tickbox4value.value = "No";
		form.st_txttickbox4.value = tickbox4_object.header + " : ";
		if (form.tickbox4_tick.checked) {
			form.st_tickbox4value.value = "Yes";
			form.code_tickbox4.value = tickbox4_object.ordercode;
			form.tickbox4_description.value = tickbox4_object.orderinfo;
			form.st_tickbox4_orderinfo.value = "***  " + tickbox4_object.orderinfo + "\n";
			form.amount.value = "" + (parseInt(tickbox4_object.cost) + parseInt(form.amount.value));
		}
		form.st_txttickbox4.value += form.st_tickbox4value.value + "\n";
		if (form.code_tickbox4.value == "") {
			form.code_tickbox4.value = "none";
		}
		form.orderinfo.value += ", " + form.code_tickbox4.value;
		if (form.code_tickbox4.value != "none") {
			form.order_description.value += " and " + form.tickbox4_description.value;
		}
	}
// Tickbox5 (if enabled)
	if (form.tickbox5_tick) {
		var tickbox5_object = getTickbox5Object();
		form.st_tickbox5name.value = tickbox5_object.header + ":";
		form.st_tickbox5value.value = "No";
		form.st_txttickbox5.value = tickbox5_object.header + " : ";
		if (form.tickbox5_tick.checked) {
			form.st_tickbox5value.value = "Yes";
			form.code_tickbox5.value = tickbox5_object.ordercode;
			form.tickbox5_description.value = tickbox5_object.orderinfo;
			form.st_tickbox5_orderinfo.value = "***  " + tickbox5_object.orderinfo + "\n";
			form.amount.value = "" + (parseInt(tickbox5_object.cost) + parseInt(form.amount.value));
		}
		form.st_txttickbox5.value += form.st_tickbox5value.value + "\n";
		if (form.code_tickbox5.value == "") {
			form.code_tickbox5.value = "none";
		}
		form.orderinfo.value += ", " + form.code_tickbox5.value;
		if (form.code_tickbox5.value != "none") {
			form.order_description.value += " and " + form.tickbox5_description.value;
		}
	}
// Presetdates
	var presetdatelist = form.presetdateslist.value;
	var presetdate_index = form.del_presetdate.selectedIndex;
	var today = new Date();
	today.setTime(timeoffset + today.getTime());
	var todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	var deliveryDate;
	var is_preset_date = false;
	var is_asap = false;
	if (presetdatelist != "default") { // i.e. GoodOccasion
		is_preset_date = true;
		if (form.goodoccasiondescription.value != "UsePresetDate") {
			var goodoccasion_index = -1;
			for (var i=0; i<goodoccasiondates.length; i++) {
				if (goodoccasiondates[i].goodoccasion == presetdatelist) {
					goodoccasion_index = i;
					break;
				}
			}
			if (goodoccasion_index != -1) {
				if (goodoccasiondateslistdates[goodoccasion_index][presetdate_index].orderinfo == "none") {
					return(formError("Select your "+goodoccasiondates[goodoccasion_index].description+" date", form.del_presetdate));
				} else {
					deliveryDate = goodoccasiondateslistdates[goodoccasion_index][presetdate_index].date;
				}
			}
		} else {
			if (presetdatelist != "asap") {
				var presetdate_object = getPresetDateObjectFromOccasion(presetdatelist);
				if (presetdate_object != null) {
					deliveryDate = presetdate_object.date;
				}
			} else {
				is_asap = true;
			}
		}
	} else {
		var presetdate_object = getPresetDateObject(form.del_presetdate.selectedIndex);
		if (presetdate_object.occasion != "asap") {
			if (presetdate_object.occasion == "asbelow") {
				if (!formDateIsValid("delivery", form.del_day, form.del_month, form.del_year, years)) return false;
				deliveryDate = formfields2date(form.del_day, form.del_month, form.del_year, years);
			} else {
				is_preset_date = true;
				deliveryDate = presetdate_object.date;
			}
		} else {
			is_asap = true;
		}
	}
	if (!is_asap) {
		var selectfield;
		if (is_preset_date) {
			selectfield = form.del_presetdate;
		} else {
			selectfield = form.del_day;
		}
		// Check not before today
		if (!formDateIsAfterToday("delivery", form.del_day, form.del_month, form.del_year, form.del_presetdate, todayDate, deliveryDate, is_preset_date)) return false;
		// Check not today
		if (!formDateIsNotToday("delivery", selectfield, todayDate, deliveryDate)) return false;
		// Check not more than a year ahead
		if (!formDateIsLessThanYearFromToday("delivery", form.del_day, form.del_month, form.del_year, form.del_presetdate, todayDate, deliveryDate, is_preset_date)) return false;
		var days_until_delivery = getDaysBetweenDates(todayDate, deliveryDate);

		var badoccasiondates_object = getBadOccasionDatesObject(bouquet_object.badoccasionarray, deliveryDate);
		if (badoccasiondates_object != null) {
			return(formError("Sorry, that bouquet is not available during our "+badoccasiondates_object.description+" period\n("+badoccasiondates_object.startdatestring+" - "+badoccasiondates_object.enddatestring+")", selectfield));
		}
		if (!is_preset_date) { // don't check day for presetdates e.g. because Mothering Sunday
			var baddate_object = getBaddateObject(deliveryDate);
			if (baddate_object != null) {
				return(formError(baddate_object.message, selectfield));
			}
			if (deliveryDate.getDay() == 0) { // sunday
				return(formError("Sorry, Sunday deliveries not available", selectfield));
			}
		}
		if (deliveryDate.getDay() == 1) { // monday
		//	return(formError("Sorry, Monday deliveries not available", selectfield));
			if (days_until_delivery == 1) {
				return(formError("Sorry, Monday deliveries can't be ordered on Sunday", selectfield));
			} else if (days_until_delivery == 2) {
				if (today.getHours() >= sat_time_threshold) {
					return(formError("Sorry, deliveries for Monday must be ordered before " + sat_time_threshold_words + " on Saturdays", selectfield));
				}
			}
		}
		if ((days_until_delivery == 1) && (today.getHours() >= time_threshold)) { //tomorrow
			return(formError("Sorry, deliveries for the following day must be ordered before " + time_threshold_words, selectfield));
		}
		var bouquet_notice = parseInt(bouquet_object.daysnotice);
		if (bouquet_notice > 0) {
			if (getDaysBetweenDates(deliveryDate, todayDate) < bouquet_notice) {
				return(formError("Sorry, that bouquet needs to be ordered at least " + bouquet_notice + " whole days in advance", selectfield));
			}
		}
	}
// Postage
	if (bouquet_object.postage != "Any") {
		form.delivery_method.value = bouquet_object.postage;
		form.code_postage.value = bouquet_object.postagecode;
	} else {
		var postage_object = getPostageObject(form.postage.selectedIndex, parseInt(form.del_weekday.value), parseInt(form.postagelist.value));
		if (postage_object != null) {
			form.delivery_method.value = getPostageOrderInfo(postage_object.ordercode);
			form.code_postage.value = postage_object.ordercode;
			form.amount.value = "" + (parseInt(postage_object.cost) + parseInt(form.amount.value));
		} else {
			return(formError("Please select a delivery method", form.postage));
		}
	}
// Confirm first class
	if ((form.code_postage.value == 'first') && (!agreed_to_first)) {
		if (confirm(first_question)) {
			agreed_to_first = true;
		} else {
			return false;
		}
	}
// Offers
	if (!isBlank(form.offer.value)) {
		var offer_object = getOfferObject(form.offer.value);
		if (offer_object != null) {
			form.amount.value = "" + Math.round((1 - (parseInt(offer_object.percent) / 100)) * parseInt(form.amount.value));
			form.special_offer.value = offer_object.orderinfo;
		}
	}
// TESTLINE
// Take the two // characters off the start of the next line to test
// alert("bouquet: " + form.bouquet.value + " ("+form.code_bouquet.value+")\ncolour: " + form.colour.value + " ("+form.code_colour.value+")\ndeluxe: " + form.deluxe.value + " ("+form.code_deluxe.value+")\nextra_gifts: " + form.extra_gifts.value + " ("+form.code_gifts.value+")\ntickbox1: " + form.tickbox1_description.value + " ("+form.code_tickbox1.value+")\ntickbox2: " + form.tickbox2_description.value + " ("+form.code_tickbox2.value+")\ntickbox3: " + form.tickbox3_description.value + " ("+form.code_tickbox3.value+")\ndelivery_method: " + form.delivery_method.value + " ("+form.code_postage.value+")\nspecial_offer: " + form.special_offer.value + "\namount: " + form.amount.value + " pence\n\nOrderDescription: " + form.order_description.value + "\norderinfo: " + form.orderinfo.value);
// Preset Messages
	if (!isBlank(form.message.value) && !isBlank(form.presetmessage.value)) {
		return(formError("Select either your own message OR a preset message, not both", form.presetmessage));
	}
	disableDateFields(false);
	escapeField(form.message);
	escapeField(form.signature);
	return true;
}

function parsePresetDate(index) {
	parsePresetDateObject(getPresetDateObject(index));
}

function parsePresetDateObject(presetdate_object) {
	disableDateFields(false);
	var date;
	if ((presetdate_object.occasion != "asbelow") && (presetdate_object.occasion != "asap")) {
		date = presetdate_object.date;
	}
	set_date(date);
	if ((presetdate_object.occasion != "none") && (presetdate_object.occasion != "asbelow")) {
		disableDateFields(true);
	} else {
		disableDateFields(false);
	}
	if (presetdate_object.occasion != "asbelow") {
		var new_day;
		if ((presetdate_object.occasion == "none") || (presetdate_object.saturdaypostage == "both")) {
			new_day = 9;
		} else if (presetdate_object.saturdaypostage == "yes") {
			new_day = 6;
		} else if (presetdate_object.saturdaypostage == "no") {
			new_day = 1;
		}
		updatePostage(new_day, parseInt(document.orderform.postagelist.value));
	}
}

function parseBouquetSource(index) {
	var bouquetsource_object = getBouquetSourceObject(index);
	if (bouquetsource_object != null) {
		if (parseInt(document.orderform.bouquetsourcelist.value) != index) {
			writeout('bouquetsourcespan1', "Select from our "+ bouquetsource_object.description +":");
			writeout('bouquetsourcespan3', "<INPUT TYPE=HIDDEN NAME='bouquetsourcelist' VALUE='"+index+"'><SELECT NAME='type_rose' onChange=\"parseBouquet("+index+", this.selectedIndex);recalculatePrice()\">" + bouquetsourceslist[index] + "</SELECT>");
			parseBouquet(index, document.orderform.type_rose.selectedIndex);
		}
	} else {
		parseBouquet(index, -1);
	}
}

function parseBouquet(source_index, bouquet_index) {
	var bouquet_object = getBouquetObject(source_index, bouquet_index);
	if (bouquet_object != null) {
		// Update image
		update_bouquet_preview(bouquet_object.imageurl, ''); // bouquet_object.ordercode
		// Check bouquet colour
		if (bouquet_object.colour == "Any") {
			showColourCategory(parseInt(bouquet_object.colourcategory));
		} else {
			showColourCategory(0);
		}
		document.orderform.needs_colour.value = bouquet_object.needscolour;
		// Check bouquet goodoccasion
		parseGoodOccasion(bouquet_object.goodoccasion);
		// Check bouquet upgrade
		checkFieldOptions("upgrades", bouquet_object.upgrade, parseInt(bouquet_object.upgradecategory), "orderform", "recalculatePrice()");
		// Check bouquet gifts
		if (bouquet_object.gifts == "Any") {
			var bouquet_size = parseInt(bouquet_object.size);
			if ((bouquet_size > 0) && (bouquet_size < size_threshold)) {
				setList("gifts", 1, smallgiftslist, "orderform", "recalculatePrice()");
			} else {
				setList("gifts", 2, largegiftslist, "orderform", "recalculatePrice()");
			}
		} else {
			setList("gifts", 0, "<OPTION>" + bouquet_object.gifts + "</OPTION>", "orderform");
		}
		// Check bouquet postage
		if (bouquet_object.postage == "Any") {
			showPostageCategory(parseInt(bouquet_object.postagecategory));
		} else {
			setList("postage", 0, "<OPTION>" + bouquet_object.postage + "</OPTION>", "orderform");
		}
	} else {
		// Reset all to defaults
		update_bouquet_preview('', '');
		showColourCategory(default_colour);
		document.orderform.needs_colour.value = 0;
		showCategory("upgrades", default_upgrade, "orderform", "recalculatePrice()");
		setList("gifts", 2, largegiftslist, "orderform", "recalculatePrice()");
		showPostageCategory(default_postage);
		parseGoodOccasion('*');
	}
}

function update_bouquet_preview(product_image, ordercode) {
	var label = "";
	var image = "images/SPACER.gif";
	var clickfunc = null;
	if (product_image != '') {
		label = "Preview your choosen Bouquet:";
		image = product_image;
		if (ordercode != '') {
			clickfunc = function() { newWindow('/cgi-bin/bouquet_popup.pl?bouquet='+ordercode,350,400)};
		}
	}
	writeout('preview_bouquet_label', label);
	document.preview_bouquet.src = image;
	document.preview_bouquet.onclick = clickfunc;
	if (clickfunc != null) {
		document.preview_bouquet.alt = "Click to Enlarge";
		document.preview_bouquet.style.cursor = "pointer";
	} else {
		document.preview_bouquet.alt = "";
		document.preview_bouquet.style.cursor = "default";
	}
}

function parseColour(index) {
	var colour_object = getColourObject(index, parseInt(document.orderform.colourlist.value));
	if (colour_object != null) {
		if (parseInt(document.orderform.needs_colour.value) == 1) {
			var source_index = parseInt(document.orderform.bouquetsourcelist.value);
			if (source_index != -1) { // else type_rose doesn't exist
				var bouquet_object = getBouquetObject(source_index, document.orderform.type_rose.selectedIndex);
				if (bouquet_object != null) {
					var image_updated = false;
					for (var i=0;i<bouquet_object.imagecoloursarray.length;i++) {
						if (bouquet_object.imagecoloursarray[i] == colour_object.ordercode) {
							var dotpos = bouquet_object.imageurl.lastIndexOf('.');
							if (dotpos != -1) {
								var new_image = bouquet_object.imageurl.substr(0, dotpos) + '_' + colour_object.ordercode + bouquet_object.imageurl.substr(dotpos, bouquet_object.imageurl.length);
								image_updated = true;
								update_bouquet_preview(new_image, '');
							}
							break;
						}
					}
					if (!image_updated) {
						update_bouquet_preview(bouquet_object.imageurl, '');
					}
				}
			}
		}
		if (colour_object.ordercode == "customized") {
			showColourCombo(1);
			return;
		}
	}
	showColourCombo(0);
}

function showColourCombo(show) {
	if (parseInt(document.orderform.combotext.value) != show) {
		if (show != 0) {
			writeout('colourcombospan1', "Customize your BOUQUET:<BR>");
			writeout('colourcombospan1a', "Tell us how you would like us to customize your bouquet. Please go into as much detail as you like.");
			writeout('colourcombospan2', "*");
			writeout('colourcombospan3', "<INPUT TYPE=HIDDEN NAME='combotext' VALUE='"+ show +"'><TEXTAREA NAME='rose_colourcombo' COLS=30 ROWS=4 WRAP='virtual'></TEXTAREA>");
		} else {
			writeout('colourcombospan1', "");
			writeout('colourcombospan1a', "");
			writeout('colourcombospan2', "");
			writeout('colourcombospan3', "<INPUT TYPE=HIDDEN NAME='combotext' VALUE='"+ show +"'>");
		}
	}
}

function showColourCategory(category) {
	if (parseInt(document.orderform.colourlist.value) != category) {
		if (category != 0) {
			writeout('colourspan1', "Select your COLOUR/VARIETY/OPTION:");
			writeout('colourspan2', "*");
			writeout('colourspan3', "<INPUT TYPE=HIDDEN NAME='colourlist' VALUE='" + category +"'><SELECT NAME='rose_colour' onChange=\"parseColour(this.selectedIndex);recalculatePrice()\">" + colourlist[category] + "</SELECT>");
		} else {
			writeout('colourspan1', "");
			writeout('colourspan2', "");
			writeout('colourspan3', "<INPUT TYPE=HIDDEN NAME='colourlist' VALUE='" + category +"'>");
		}
		showColourCombo(0);
	}
}

function parseGoodOccasion(goodoccasion) {
	//alert(document.orderform.presetdateslist+", "+goodoccasion);
	if (goodoccasion != "*") {
		for (var i=0;i<goodoccasiondates.length;i++) {
			if (goodoccasiondates[i].goodoccasion == goodoccasion) {
				if (document.orderform.presetdateslist.value != goodoccasion) {
					if (goodoccasiondates[i].description != "UsePresetDate") {
						writeout('presetdatesspan1', '<INPUT TYPE=HIDDEN NAME=goodoccasiondescription VALUE=""><INPUT TYPE=HIDDEN NAME=presetdateslist VALUE="'+goodoccasion+'"><SELECT NAME="del_presetdate" onChange="parseGoodOccasionDate('+i+',this.selectedIndex)">' + goodoccasiondateslist[i] + '</SELECT>');
						parseGoodOccasionDate(i, document.orderform.del_presetdate.selectedIndex);
					} else {
						var presetdate_object = getPresetDateObjectFromOccasion(goodoccasion);
						writeout('presetdatesspan1', '<INPUT TYPE=HIDDEN NAME=goodoccasiondescription VALUE="'+goodoccasiondates[i].description+'"><INPUT TYPE=HIDDEN NAME=presetdateslist VALUE="'+goodoccasion+'"><SELECT NAME="del_presetdate"><OPTION>' + presetdate_object.description + '</OPTION></SELECT><SPAN CLASS="formtext">&#32;<A HREF="javascript:newWindow(\'/delivery_date.shtml\',370,420)">Click for info.</A> </SPAN>');
						parsePresetDateObject(presetdate_object);
					}
				}
				break;
			}
		}
	} else {
		var list = "default";
		if (document.orderform.presetdateslist.value != list) {
			writeout('presetdatesspan1', '<INPUT TYPE=HIDDEN NAME=goodoccasiondescription VALUE=""><INPUT TYPE=HIDDEN NAME=presetdateslist VALUE="' + list + '"><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 set_date(date) {
	date2formfields(date, document.orderform.del_day, document.orderform.del_month, document.orderform.del_year, years);
	calculateWeekday(date);
}

function disableDateFields(disabled) {
	document.orderform.del_day.disabled = disabled;
	document.orderform.del_month.disabled = disabled;
	document.orderform.del_year.disabled = disabled;
}

function parseGoodOccasionDate(goodoccasionindex, dateindex) {
	disableDateFields(false);
	var date;
	if (goodoccasiondateslistdates[goodoccasionindex][dateindex].orderinfo != 'none') {
		date = goodoccasiondateslistdates[goodoccasionindex][dateindex].date;
	}
	set_date(date);
	disableDateFields(true);
}

function updateWeekday() {
	calculateWeekday(formfields2date(document.orderform.del_day, document.orderform.del_month, document.orderform.del_year, years));
}

function calculateWeekday(date) {
	var new_day = 9;
	if (date != null) {
		new_day = date.getDay();
	}
	var old_day = parseInt(document.orderform.del_weekday.value);
	if (old_day != new_day) {
		document.orderform.del_weekday.value = new_day;
		if ((new_day == 6) || (old_day == 6) // saturday
			|| (new_day == 9) || (old_day == 9)) // both
		{
			updatePostage(new_day, parseInt(document.orderform.postagelist.value));
		}
	}
}

function showPostageCategory(category) {
	if (parseInt(document.orderform.postagelist.value) != category) {
		updatePostage(parseInt(document.orderform.del_weekday.value), category);
	}
}

function updatePostage(weekday, postagecategory) {
	setList("postage", postagecategory, getPostageList(weekday, postagecategory), "orderform", "recalculatePrice()");
	recalculatePrice();
}

function recalculatePrice() {
	var cost = 0;
	var source_index = parseInt(document.orderform.bouquetsourcelist.value);
	if (source_index != -1) { // else type_rose doesn't exist
		var bouquet_object = getBouquetObject(source_index, document.orderform.type_rose.selectedIndex);
		if (bouquet_object != null) {
			cost = parseInt(bouquet_object.cost);
			if (bouquet_object.colour == "Any") {
				var colour_object = getColourObject(document.orderform.rose_colour.selectedIndex, parseInt(document.orderform.colourlist.value));
				if ((colour_object != null) && (colour_object.orderinfo != "none")) {
					cost += parseInt(colour_object.extracost) * parseInt(bouquet_object.size);
				}
			}
			if (bouquet_object.upgrade == "Any") {
				var upgrade_object = getUpgradeObject(document.orderform.upgrades.selectedIndex, parseInt(document.orderform.upgradeslist.value));
				if ((upgrade_object != null) && (upgrade_object.orderinfo != "none")) {
					cost += parseInt(upgrade_object.cost);
				}
			}
			if (bouquet_object.gifts == "Any") {
				var gift_object = getGiftObject(document.orderform.gifts.selectedIndex, parseInt(document.orderform.giftslist.value));
				if ((gift_object != null) && (gift_object.orderinfo != "none")) {
					cost += parseInt(gift_object.cost);
				}
			}
			if (bouquet_object.postage == "Any") {
				var postage_object = getPostageObject(document.orderform.postage.selectedIndex, parseInt(document.orderform.del_weekday.value), parseInt(document.orderform.postagelist.value));
				if (postage_object != null) {
					cost += parseInt(postage_object.cost);
				}
			}
			if (document.orderform.tickbox1_tick) {
				if (document.orderform.tickbox1_tick.checked) {
					var tickbox1_object = getTickbox1Object();
					if (tickbox1_object != null) {
						cost += parseInt(tickbox1_object.cost);
					}
				}
			}
			if (document.orderform.tickbox2_tick) {
				if (document.orderform.tickbox2_tick.checked) {
					var tickbox2_object = getTickbox2Object();
					if (tickbox2_object != null) {
						cost += parseInt(tickbox2_object.cost);
					}
				}
			}
			if (document.orderform.tickbox3_tick) {
				if (document.orderform.tickbox3_tick.checked) {
					var tickbox3_object = getTickbox3Object();
					if (tickbox3_object != null) {
						cost += parseInt(tickbox3_object.cost);
					}
				}
			}
			if (document.orderform.tickbox4_tick) {
				if (document.orderform.tickbox4_tick.checked) {
					var tickbox4_object = getTickbox4Object();
					if (tickbox4_object != null) {
						cost += parseInt(tickbox4_object.cost);
					}
				}
			}
			if (document.orderform.tickbox5_tick) {
				if (document.orderform.tickbox5_tick.checked) {
					var tickbox5_object = getTickbox5Object();
					if (tickbox5_object != null) {
						cost += parseInt(tickbox5_object.cost);
					}
				}
			}
			if (!isBlank(document.orderform.offer.value)) {
				var offer_object = getOfferObject(document.orderform.offer.value);
				if (offer_object != null) {
					cost = Math.round((1 - (parseInt(offer_object.percent) / 100)) * cost);
				}
			}
		}
	}
	document.orderform.display_price.value = formatPenceAs(cost, "£");
}
