// 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 = "We can see that you have selected 1st class post as your delivery method.\n\nPlease remember 1st class post is not a guaranteed next day service and your\norder will be despatched 2 days prior to your requested delivery date if possible.\n\nYour order may take anywhere between 1 and 4 days to arrive so please if\nthis is unacceptable click the cancel button and select from one of our guaranteed\ndelivery options.";

var first_question  = 'Please remember 1st class post is not a guaranteed next day service and your\n';
    first_question += 'order will be despatched 2 days prior to your requested delivery date if possible.\n\n';
    first_question += 'If this is for Valentine\'s Day then please note that you order will be despatched on\n';
    first_question += 'Saturday 11th February and may arrive on Monday 13th February so please if this\n';
    first_question += 'is unacceptable then click the cancel button and select from one of our guaranteed delivery options.';

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.bouquet_cost.value = "" + parseInt(bouquet_object.cost);
	form.commission_group.value = bouquet_object.commissiongroup;

	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.bouquet_cost.value = "" + Math.round((1 - (parseInt(offer_object.percent) / 100)) * parseInt(form.bouquet_cost.value));
			form.special_offer.value = offer_object.orderinfo;
		}
	}
	form.other_cost.value = "" + Math.round(parseInt(form.amount.value) - parseInt(form.bouquet_cost.value));
	form.bouquet_cost.value = "" + (parseInt(form.bouquet_cost.value) / 100);
	form.other_cost.value = "" + (parseInt(form.other_cost.value) / 100);
	form.total_cost.value = "" + (parseInt(form.amount.value) / 100);
// 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>');
						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>');
			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() {
	writeout('special_offer_text', "");
	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) {
					writeout('special_offer_text', offer_object.orderinfo);
					cost = Math.round((1 - (parseInt(offer_object.percent) / 100)) * cost);
				}
			}
		}
	}
	document.orderform.display_price.value = formatPenceAs(cost, "£");
}

