// LTH.js
var g_req = null;
var g_req_array = new Array(REQ_ARRAY_MAX);
var g_temp = 0;
var g_req_at = 0;
for (g_temp=0; g_temp<REQ_ARRAY_MAX; g_temp++)
{
	g_req_array[g_temp] = null;
}

var g_grand_total=0;
var g_grand_subtotal=0;
var g_order_mode=ORDER_MODE__PRODUCTS;
var g_dcode = 0;
var g_frozen_discount_amt=0;


function fnFillOrderItems()
{
	var i=0;
	var n_prev_cat = -1;
	var str_items = "";
	var str_temp = "";
	var item = null;
	
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		item = ARRAY_ORDER_ITEM[i];
		if (fnIsCatInOrderType(g_order_mode, item.cat))
		{
			// Item that has no category
			if ((ORDER_ITEM_CAT__NONE_PRODUCTS==item.cat) || (ORDER_ITEM_CAT__NONE_CATERING==item.cat))
			{
				if (n_prev_cat!=item.cat)
				{
					str_items += "<div class='style_pad10'></div>";
				}
				str_items += "<div class='style_order_item_row'>";
				str_items += 	"<span class='style_order_form_col1'>";
				str_items += 		"<input id='input_quantity_"+i+"' style='width:40px;' ";
				str_items += 		"onclick='fnOrderItemClick("+i+");' ";
				str_items += 		"onmouseout='fnUpdateRowTotal("+i+");' ";
				str_items += 		"onblur='fnUpdateRowTotal("+i+");'></input>";
				str_items += 	"</span>";
				str_items += 	"<span class='style_order_form_col2'>";
				if ((item.img) && fnIsDef(item.img) && (item.img!=""))
				{
					str_items += 	"<span class='style_product_with_popup_details' ";						
					str_items += 	fnGetMouseInString() +"='fnShowProdImg(\""+item.img+"\","+i+");return false;' ";
					str_items += 	fnGetMouseOutString() +"='fnHideProdImg();return false;' ";
					str_items += 	"><b>" +item.name +"</b></span>";					
				}
				else
				{
					str_items += 		"<b>" +item.name +"</b>";
				}
				str_items += 	"</span>";
				str_items += 	"<span class='style_order_form_col3' id='span_order_item_cost_"+i+"'>"+fnNumToDollarStr(item.price)+"</span>";
				str_items += 	"<span class='style_order_form_col4' id='span_total_price_"+i+"'></span>";
				str_items += "</div>";
			}
			else
			{
				// Category line
				if (n_prev_cat!=item.cat)
				{
					str_items += "<div style='position: relative; padding-bottom: 15px;'></div>";
					str_items += "<div class='style_order_item_row'>";
					str_items += 	"<span class='style_order_form_col2'>";
					if ((ARRAY_ORDER_CAT[item.cat].img) && fnIsDef(ARRAY_ORDER_CAT[item.cat].img) && (ARRAY_ORDER_CAT[item.cat].img!=""))
					{
						str_items += 	"<span class='style_product_with_popup_details' ";						
						str_items += 	fnGetMouseInString() +"='fnShowProdImg(\""+ARRAY_ORDER_CAT[item.cat].img+"\","+i+");return false;' ";
						str_items += 	fnGetMouseOutString() +"='fnHideProdImg();return false;' ";
						str_items += 	"><b>" +ARRAY_ORDER_CAT[item.cat].name +"</b></span>";					
					}
					else
					{
						str_items += 	"<b>" +ARRAY_ORDER_CAT[item.cat].name +"</b>";
					}
					str_items += 	"</span>";
					str_items += "</div>";						
				}
				
				// Items that belong to a category
				str_row = "div_order_item_row_" +i;
				if (fnIsDef(item.height) && item.height)
					str_items += "<div class='style_order_item_row' style='height:" +  item.height +"px;'>";
				else
					str_items += "<div class='style_order_item_row'>";
				str_items += 	"<span class='style_order_form_col1'>";
				str_items += 		"<input id='input_quantity_"+i+"' style='width:40px;' ";
				str_items += 		"onclick='fnOrderItemClick("+i+");' ";
				str_items += 		"onmouseout='fnUpdateRowTotal("+i+");' ";
				str_items += 		"onblur='fnUpdateRowTotal("+i+");'></input>";
				str_items += 	"</span>";
				str_items += 	"<span class='style_order_form_col2b'>";
				if ((item.img) && fnIsDef(item.img) && (item.img!=""))
				{
					str_items += 	"<span class='style_product_with_popup_details' ";						
					str_items += 	fnGetMouseInString() +"='fnShowProdImg(\""+item.img+"\","+i+");return false;' ";
					str_items += 	fnGetMouseOutString() +"='fnHideProdImg();return false;' ";
					str_items += 	">" +item.name +"</span>";					
				}
				else
				{
					str_items += 	item.name;
				}
				
				if (fnIsDef(item.details) && item.details && item.details!="")
				{
					str_items +=  	"<br>";
					str_temp = 		""+item.details;
					str_temp = new String(str_temp.replace(/\~/g, ""+i));
					str_items += 	str_temp;	
				}
				str_items += 	"</span>";
				str_items += 	"<span class='style_order_form_col3' id='span_order_item_cost_"+i+"'>"+fnNumToDollarStr(item.price)+"</span>";
				str_items += 	"<span class='style_order_form_col4' id='span_total_price_"+i+"'></span>";
				str_items += "</div>";
			}
			n_prev_cat=item.cat;
		}
	}
		
	fnSetInnerhtml("div_order_items", str_items);
	
	// Fill in select lists
	var str_elem = "";
	var j = 0;
	var k =0;
	var str_temp ="";
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		item = ARRAY_ORDER_ITEM[i];
		if (fnIsCatInOrderType(g_order_mode, item.cat))
		{
			if (fnIsDef(item.select_tea_count) && item.select_tea_count>0)
			{
				for (j=0; j<item.select_tea_count; j++)
				{
					str_elem = "select_item_" +i +"_tea_" +j;
					str_temp =  "<select id='" +str_elem +"'>";
					str_temp += 	"<option value='-1' selected>Select tea";
					if (item.select_tea_count>1)
						str_temp += " " + (j+1);
					str_temp += 	"</option>";
					for (k=0;k<NUM_SELECT_TEA;k++)
					{
						str_temp += "<option value='"+k+"'>";
						str_temp += 	ARRAY_SELECT_TEA_NAMES[k];
						str_temp +=	"</option>";
					}
					str_temp += "</select>";
					fnSetInnerhtml("span_" +str_elem,str_temp);
				}
			}
			
			if (fnIsDef(item.select_tea_count) && item.select_tea_count>0)
			{
				for (j=0; j<item.select_scone_count; j++)
				{
					str_elem = "select_item_" +i +"_scone_" +j;
					str_temp =  "<select id='" +str_elem +"'>";
					str_temp += 	"<option value='-1' selected>Select flavor";
					if (item.select_scone_count>1)
						str_temp += " " + (j+1);
					str_temp += 	"</option>";
					for (k=0;k<NUM_SELECT_SCONE;k++)
					{
						str_temp += "<option value='"+k+"'>";
						str_temp += 	ARRAY_SELECT_SCONE_NAMES[k];
						str_temp +=	"</option>";
					}
					str_temp += "</select>";
					fnSetInnerhtml("span_" +str_elem,str_temp);
				}
			}			
		}		
	}
}

function fnFillOrderConfItems()
{
	var i=0;
	var n_prev_cat = -1;
	var str_items = "";
	var str_quantity = "";
	var n_quantity = 0;
	var tea_value = 0;
	var scone_value = 0;
	var str_row_price = "";
	var item = null;
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		item = ARRAY_ORDER_ITEM[i];
		str_quantity = fnGetElemValue("input_quantity_"+i);
		n_quantity = fnSafeParseInt(str_quantity,0);
		if (n_quantity>0)
		{
			str_row_price = fnGetInnerhtml("span_total_price_"+i);
			// Item that has no category
			if ((ORDER_ITEM_CAT__NONE_PRODUCTS==item.cat) || (ORDER_ITEM_CAT__NONE_CATERING==item.cat))
			{
				str_items += "<div class='style_order_item_row'>";
				str_items += 	"<span class='style_order_form_col1c' id='span_order_conf_quantity_"+i+"'>"+str_quantity+"</span>";
				str_items += 	"<span class='style_order_form_col2'>";
				str_items += 		"<b>" +item.name +"</b>";
				str_items += 	"</span>";
				str_items += 	"<span class='style_order_form_col3' id='span_order_conf_item_cost_"+i+"'>"+fnNumToDollarStr(item.price)+"</span>";
				str_items += 	"<span class='style_order_form_col4' id='span_order_conf_total_price_"+i+"'>"+str_row_price+"</span>";
				str_items += "</div>";
			}
			else
			{
				if (n_prev_cat!=item.cat)
				{
					str_items += "<div class='style_pad10'></div>";
					str_items += "<div class='style_order_item_row'>";
					str_items += 	"<span class='style_order_form_col2'>";
					str_items += 		"<b>" +ARRAY_ORDER_CAT[item.cat].name +"</b>";
					str_items += 	"</span>";
					str_items += "</div>";						
				}
				
				if (fnIsDef(item.height_conf) && item.height_conf)
					str_items += "<div class='style_order_item_row' style='height:" +  item.height_conf +"px;'>";
				else
					str_items += "<div class='style_order_item_row'>";
				str_items += 	"<span class='style_order_form_col1c' id='span_order_conf_quantity_"+i+"'>"+str_quantity+"</span>";
				str_items += 	"<span class='style_order_form_col2c'>";
				str_items += 		item.name;
				if ( ((fnIsDef(item.select_tea_count)) && (item.select_tea_count>0))
					|| ((fnIsDef(item.select_scone_count)) && (item.select_scone_count>0)))
					str_items +=	"<br>(";
				
				if ((fnIsDef(item.select_tea_count)) && (item.select_tea_count>0))
				{
					str_items +=	"Tea: ";
					for (j=0; j<item.select_tea_count; j++)
					{
						if (j!=0)
							str_items += ",";
						tea_value = fnSafeParseInt(fnGetElemValue("select_item_" +i +"_tea_" +j),0);
						if (tea_value>=0 && tea_value<NUM_SELECT_TEA)
							str_items += ARRAY_SELECT_TEA_NAMES[tea_value];
						else
							str_items += "any";
					}
					if ((fnIsDef(item.select_scone_count)) && (item.select_scone_count>0))
						str_items += "; ";
				}
				if ((fnIsDef(item.select_scone_count)) && (item.select_scone_count>0))
				{
					str_items +=	"Scone: ";
					for (j=0; j<item.select_scone_count; j++)
					{
						if (j!=0)
							str_items += ",";
						scone_value = fnSafeParseInt(fnGetElemValue("select_item_" +i +"_scone_" +j),0);
						if (scone_value>=0 && scone_value<NUM_SELECT_SCONE)
							str_items += ARRAY_SELECT_SCONE_NAMES[scone_value];
						else
							str_items += "any";
					}
				}
				if ( ((fnIsDef(item.select_tea_count)) && (item.select_tea_count>0))
					|| ((fnIsDef(item.select_scone_count)) && (item.select_scone_count>0)))
					str_items +=	")";				
				str_items += 	"</span>";
				str_items += 	"<span class='style_order_form_col3' id='span_order_conf_item_cost_"+i+"'>"+fnNumToDollarStr(item.price)+"</span>";
				str_items += 	"<span class='style_order_form_col4' id='span_order_conf_total_price_"+i+"'>"+str_row_price+"</span>";
				str_items += "</div>";
			}
			n_prev_cat=item.cat;
		}
	}
	fnSetInnerhtml("div_order_conf_items", str_items);
}

function fnOrder_SetDefaults()
{
	var i=0;
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		fnSetElemValue("input_quantity_"+i,"0");
		fnSetInnertext("span_total_price_"+i,fnNumToDollarStr(0));
	}
	fnSetInnertext("span_grand_total",fnNumToDollarStr(0));
	fnUpdateAllTotals();
	fnHide("div_order_success");
	fnHide("div_order_fail");
	fnHide("div_confirm_order");	
	fnHide_PleaseWait();
	fnOrder_HideErr();
	fnOrder_Conf_HideErr();
	fnSetElemValue("input_name","");
	fnSetElemValue("input_email","");
	fnSetElemValue("input_phone","");
	fnSetElemValue("input_address","");
	fnSetElemValue("input_city","");
	fnSetElemValue("input_state","");
	fnSetElemValue("input_zip","");
	fnSetElemValue("input_pickup_date","");
	fnSetElemValue("input_cc_num","");
	fnSetElemValue("input_cc_ccv","");
	fnSetSelectedIndex("select_cc_type",0);
	fnSetElemValue("input_cc_person_name","");
	fnSetSelectedIndex("select_cc_expiration_date_month",0);
	fnSetSelectedIndex("select_cc_expiration_date_year",0);
	fnSetElemValue("dcode","");
	fnSetElemValue("textarea_notes","");
	fnSetChecked("checkbox_join_tea_club");
	fnShow("div_order");	
	fnOrder_SelectMode();
}
function fnUpdateAllTotals()
{
	var i=0;
	for (i=0; i<NUM_ORDER_ITEMS; i++)
		fnUpdateJustRowTotal(i);
	fnUpdateGrandTotal();
}
function fnGetTotalQuantity()
{
	var i=0;
	var str_input_quantity = "";
	var n_quantity = 0;
	var total = 0;
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		str_input_quantity = "input_quantity_"+i;
		n_quantity = fnSafeParseInt(fnGetElemValue(str_input_quantity),0);	
		total += n_quantity;
	}
	return total;
}
function fnUpdateJustRowTotal(field_index)
{
	var str_span_cost = "span_total_price_" + field_index;
	var str_input_quantity = "input_quantity_"+field_index;
	var n_quantity = fnSafeParseInt(fnGetElemValue(str_input_quantity),0);
	if (isNaN(n_quantity) || (n_quantity<=0))
	{
		fnSetElemValue(str_input_quantity,"0");
		fnSetInnertext(str_span_cost, fnNumToDollarStr(0));
		return;
	}
	fnSetElemValue(str_input_quantity,""+n_quantity);
	var n_cost = n_quantity * ARRAY_ORDER_ITEM[field_index].price;
	fnSetInnertext(str_span_cost, fnNumToDollarStr(n_cost));
	
	fnUpdateGrandTotal();
}
function fnUpdateRowTotal(field_index)
{
	fnUpdateJustRowTotal(field_index);
	fnUpdateGrandTotal();
}
function fnOrderItemClick(item_index)
{
	var str_input_quantity = "input_quantity_"+item_index;
	var elem = document.getElementById(str_input_quantity);
	if (elem)			
		elem.select();
}
function fnUpdateGrandTotal()
{
	var i=0;
	var n_grand_total =0;
	var str_span_cost ="";
	var str_input_quantity = "";
	var str_quantity = "";
	var n_quantity = 0;
	var n_discount_amt = 0;
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		str_input_quantity = "input_quantity_"+i;
		str_quantity = fnGetElemValue(str_input_quantity);
		n_quantity = fnSafeParseInt(str_quantity,0);
		if (isNaN(n_quantity) || (n_quantity<=0))
		{
			str_span_cost = "span_total_price_" +i;
			fnSetElemValue(str_input_quantity,"0");
			fnSetInnertext(str_span_cost, fnNumToDollarStr(0));
			n_quantity = 0;
		}
		if (n_quantity)
			n_grand_total += n_quantity * ARRAY_ORDER_ITEM[i].price;
	}	
	
	g_grand_subtotal = n_grand_total;
	fnSetInnertext("span_grand_subtotal",fnNumToDollarStr(g_grand_subtotal));
	
	// Computer Delivery Charge
	var b_delivery = fnGetChecked("radio_delivery");
	if (b_delivery)
		n_grand_total += DELIVERY_CHARGE;
	
	// Compute discount
	/*
	fnSetInnertext("span_order_discount_percentage",""+ORDER_DISCOUNT+"%");
	n_discount_amt = Math.round(n_grand_total * (ORDER_DISCOUNT/100));
	fnSetInnertext("span_order_discount", fnNumToDollarStr(n_discount_amt));
	g_grand_total = n_grand_total - n_discount_amt;
	*/
	var n_cost_frozen=0;
	g_frozen_discount_amt =0;
	if (g_dcode==1 && (g_grand_subtotal>=CLUB_DISCOUNT_THRESHOLD))
	{
		fnSetInnertext("span_confirm_order_discount_percentage", "");
		fnSetInnertext("span_confirm_order_discount", fnNumToDollarStr(CLUB_DISCOUNT_AMT));	
		n_grand_total = n_grand_total - CLUB_DISCOUNT_AMT;
	} else if ((g_dcode==2) && (g_grand_subtotal>=FROZEN_DISCOUNT_THRESHOLD))
	{
		for (i=0; i<NUM_ORDER_ITEMS; i++)
		{
			if (ARRAY_ORDER_ITEM[i].cat == ORDER_ITEM_CAT__FROZEN_SCONES_6)
			{			
				str_input_quantity = "input_quantity_"+i;
				str_quantity = fnGetElemValue(str_input_quantity);
				n_quantity = fnSafeParseInt(str_quantity,0);
				if (n_quantity>0)
					n_cost_frozen += n_quantity * ARRAY_ORDER_ITEM[i].price;
			}
		}	
		g_frozen_discount_amt = Math.floor(n_cost_frozen*0.2);
		
		fnSetInnertext("span_confirm_order_discount_percentage", "");
		fnSetInnertext("span_confirm_order_discount", fnNumToDollarStr(g_frozen_discount_amt));	
		n_grand_total = n_grand_total - g_frozen_discount_amt;
	}	
	g_grand_total = n_grand_total;
	
	fnSetInnertext("span_grand_total",fnNumToDollarStr(g_grand_total));
	return g_grand_total;
}
function fnOrder_ShowErr(str_err)
{
	fnSetInnerhtml("div_order_err", str_err);
	fnShow("div_order_err");
}
function fnOrder_HideErr()
{
	fnHide("div_order_err");
	fnSetInnerhtml("div_order_err", "");
}
function fnOrder_Conf_ShowErr(str_err)
{
	fnSetInnerhtml("div_order_conf_err", str_err);
	fnShow("div_order_conf_err");
}
function fnOrder_Conf_HideErr()
{
	fnHide("div_order_conf_err");
	fnSetInnerhtml("div_order_conf_err", "");
}

function fnValidateCCNum(str_cc_num)
{	
	var cc_num = str_cc_num.replace(/\D/gi,"");
	fnSetElemValue("input_cc_num", cc_num);
	if (cc_num.length!=16)
		return 0;		
	return 1;
}
function fnIsValidEmail(str_email)
{
	// These two lines below are from http://www.quirksmode.org/js/mailcheck.html
	// Permission to use given by this page: http://www.quirksmode.org/about/copyright.html
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(str_email)) 
		return 1;
	return 0;
}

function fnValidateOrder()
{
	fnUpdateAllTotals();
	var n_grand_total = fnUpdateGrandTotal();
	var b_ok=1;
	var str_err="";
	var str_temp = "";
	
	if (fnGetTotalQuantity()<=0)
	{
		b_ok=0;
		str_err +="<br>- At least 1 item must be included in the order.";
	}
	
	if ((!fnGetElemValue("input_name")) || ("" == fnGetElemValue("input_name")))
	{
		b_ok=0;
		str_err +="<br>- Name is required.";
		fnChangeClass("span_order_label_name","style_form_col1_red");
	}				
	else
		fnChangeClass("span_order_label_name","style_form_col1");

	if ((!fnGetElemValue("input_email")) || ("" == fnGetElemValue("input_email")))
	{
		b_ok=0;
		str_err +="<br>- E-mail is required.";
		fnChangeClass("span_order_label_email","style_form_col1_red");
	}				
	else
	{
		if (fnIsValidEmail(fnGetElemValue("input_email")))
		{
			fnChangeClass("span_order_label_email","style_form_col1");
		}
		else
		{
			b_ok=0;
			str_err +="<br>- E-mail address must be a valid format (e.g. john@yahoo.com). ";
			fnChangeClass("span_order_label_email","style_form_col1_red");
		}
	}

	if ((!fnGetElemValue("input_phone")) || ("" == fnGetElemValue("input_phone")))
	{
		b_ok=0;
		str_err +="<br>- Phone Number is required.";
		fnChangeClass("span_order_label_phone","style_form_col1_red");
	}				
	else
		fnChangeClass("span_order_label_phone","style_form_col1");
		
	var b_pickup = fnGetChecked("radio_pickup");
	
	// Validate Date
	if ((!fnGetElemValue("input_pickup_date")) || ("" == fnGetElemValue("input_pickup_date")))
	{
		b_ok=0;
		if (b_pickup)	
			str_err +="<br>- Pickup Date is required.";
		else
			str_err +="<br>- Delivery Date is required.";
		fnChangeClass("span_pickup_date","style_form_col1_red");
	}				
	else
	{
		if (b_pickup)
		{
			var js_pickup_date = fnDisplayDate2JSDate(fnGetElemValue("input_pickup_date"));
			if (!js_pickup_date)
			{
				b_ok=0;
				str_err +="<br>- Pickup Date is invalid. Required format: MM/DD/YYYY (e.g. 6/22/2008 for June 22, 2008).";
				fnChangeClass("span_pickup_date","style_form_col1_red");				
			}
			else
			{
				var js_date_cutoff = new Date();
				js_date_cutoff.setDate(js_date_cutoff.getDate()+1);			
				n_compare = fnCompareJSDates(js_pickup_date, js_date_cutoff);
				
				if ((n_compare<0) || ((0==n_compare) && (js_pickup_date.getHours()>=15)))
				{
					b_ok=0;
					str_err +="<br>- Next day orders made online must be submitted by 3pm. If you need the order earlier, please order by phone at 503.625.4479.";
					fnChangeClass("span_pickup_date","style_form_col1_red");				
				}
				else
				{
					fnChangeClass("span_pickup_date","style_form_col1");
				}
			}
		}
		else	// delivery
		{
			var js_delivery_date = fnDisplayDate2JSDate(fnGetElemValue("input_pickup_date"));
			if (!js_delivery_date)
			{
				b_ok=0;
				str_err +="<br>- Delivery Date is invalid. Required format: MM/DD/YYYY (e.g. 6/22/2008 for June 22, 2008).";
				fnChangeClass("span_pickup_date","style_form_col1_red");				
			}
			else
			{
				var js_date_cutoff = new Date();				
				js_date_cutoff.setDate(js_date_cutoff.getDate()+1);			
				n_compare = fnCompareJSDates(js_delivery_date, js_date_cutoff);
				
				if ((n_compare<0) || ((0==n_compare) && (js_delivery_date.getHours()>=15)))
				{
					b_ok=0;
					str_err +="<br>- Next day orders made online must be submitted by 3pm. If you need the order earlier, please order by phone at 503.625.4479.";
					fnChangeClass("span_pickup_date","style_form_col1_red");				
				}
				else
				{
					fnChangeClass("span_pickup_date","style_form_col1");
				}
			}
		}
	}

	str_temp = fnGetElemValue("input_cc_num");
	if ((!str_temp) || ("" == str_temp))
	{
		b_ok=0;
		str_err +="<br>- Credit Card Number is required.";
		fnChangeClass("span_cc_num","style_form_col1_red");
	}				
	else
	{
		if (fnValidateCCNum(str_temp))		
		{
			fnChangeClass("span_cc_num","style_form_col1");
		}
		else
		{
			b_ok=0;
			str_err +="<br>- Credit Card Number is not valid.  Please recheck to see if you have entered too many or too few digits.";
			fnChangeClass("span_cc_num","style_form_col1_red");
		}
	}
				
	if ((!fnGetElemValue("input_cc_ccv")) || ("" == fnGetElemValue("input_cc_ccv")))
	{
		b_ok=0;
		str_err +="<br>- Credit Card CCV Number is required.";
		fnChangeClass("span_cc_ccv","style_form_col1_red");
	}				
	else
		fnChangeClass("span_cc_ccv","style_form_col1");
		
	if ((!fnGetElemValue("select_cc_type")) || (("0" != fnGetElemValue("select_cc_type")) && ("1" != fnGetElemValue("select_cc_type"))))
	{
		b_ok=0;
		str_err +="<br>- Credit Card Type is required.";
		fnChangeClass("span_cc_type","style_form_col1_red");
	}				
	else
		fnChangeClass("span_cc_type","style_form_col1");

	if ((!fnGetElemValue("input_cc_person_name")) || ("" == fnGetElemValue("input_cc_person_name")))
	{
		b_ok=0;
		str_err +="<br>- Name on Card is required.";
		fnChangeClass("span_cc_person_name","style_form_col1_red");
	}				
	else
		fnChangeClass("span_cc_person_name","style_form_col1");
		
	if ((!fnGetElemValue("select_cc_expiration_date_month")) || ("0" == fnGetElemValue("select_cc_expiration_date_month"))
		|| (!fnGetElemValue("select_cc_expiration_date_year")) || ("0" == fnGetElemValue("select_cc_expiration_date_year")))
	{
		b_ok=0;
		str_err +="<br>- Expiration Date is required.";
		fnChangeClass("span_cc_exp_date","style_form_col1_red");
	}				
	else
		fnChangeClass("span_cc_exp_date","style_form_col1");

	var b_delivery = fnGetChecked("radio_delivery");
	if (b_delivery)
	{
		// Validate Address fields
		str_temp = fnGetElemValue("input_address");
		if ((!str_temp) || ("" == str_temp))
		{
			b_ok=0;
			str_err +="<br>- Address is required for delivery orders.";
			fnChangeClass("span_order_label_address","style_form_col1_red");
		}						
		str_temp = fnGetElemValue("input_city");
		if ((!str_temp) || ("" == str_temp))
		{
			b_ok=0;
			str_err +="<br>- City is required for delivery orders.";
			fnChangeClass("span_order_label_city","style_form_col1_red");
		}				
		else
		{
			var lcase = str_temp.toLowerCase(); 
			lcase.replace(/\s/g, "");

			if (	("beaverton"!=lcase) && ("hillsboro"!=lcase) && ("kingcity" != lcase) 
				&& ("portland"!=lcase) && ("sherwood"!=lcase) && ("tigard"!=lcase)
				&& ("tualatin"!=lcase) && ("wilsonville"!=lcase)
			   )
			{
				b_ok=0;
				str_err +="<br>- Orders can only be delivered to the following cities: Beaverton, Hillsboro, King City, Portland, Sherwood, Tigard, Tualatin, Wilsonville";
				fnChangeClass("span_order_label_city","style_form_col1_red");
			}
		}	
		str_temp = fnGetElemValue("input_state");
		if ((!str_temp) || ("" == str_temp))
		{
			b_ok=0;
			str_err +="<br>- State is required for delivery orders.";
			fnChangeClass("span_order_label_state","style_form_col1_red");
		}			
		else
		{
			var lcase = str_temp.toLowerCase(); 
			if (("or"!=lcase) && ("oregon" != lcase))
			{
				b_ok=0;
				str_err +="<br>- Orders can only be delivered in Oregon.";
				fnChangeClass("span_order_label_state","style_form_col1_red");
			}
		}	
		str_temp = fnGetElemValue("input_zip");
		if ((!str_temp) || ("" == str_temp))
		{
			b_ok=0;
			str_err +="<br>- Zip code is required for delivery orders.";
			fnChangeClass("span_order_label_zip","style_form_col1_red");
		}				
	}
		
		
	// Generate Error Feedback if appropriate
	fnOrder_HideErr();	
	if (!b_ok)
	{
		str_err = "Please correct the following information to continue:<br>" +str_err;
		fnOrder_ShowErr(str_err);
	}
	
	// Return Success or Error
	return b_ok;
}
function fnPlaceOrder()
{
	fnUpdateAllTotals();	

	// Validate the data fields
	if (!fnValidateOrder())
		return;
		
	g_dcode = 0;	
	var str_param = AJAX_PARAM_DCODE +"=" +encodeURIComponent(fnGetElemValue("input_dcode"));
	fnAJAXCall_Post("http://www.quasitime.com/tdt/lTHValidateDCode.do", str_param);

	fnUpdateAllTotals();	
		
	fnFillOrderConfItems();
	fnSetInnertext("span_conf_grand_subtotal",fnNumToDollarStr(g_grand_subtotal));
	/*
	fnSetInnertext("span_conf_grand_subtotal",fnNumToDollarStr(g_grand_subtotal));
	fnSetInnertext("span_confirm_order_discount_percentage",""+ORDER_DISCOUNT+"%");
	var n_discount_amt = Math.round(g_grand_subtotal * (ORDER_DISCOUNT/100));	
	fnSetInnertext("span_confirm_order_discount", fnNumToDollarStr(n_discount_amt));	
	*/
	if (g_dcode==1 && (g_grand_subtotal>=CLUB_DISCOUNT_THRESHOLD))
	{
		fnSetInnertext("span_confirm_order_discount_percentage", "");
		fnSetInnertext("span_confirm_order_discount", fnNumToDollarStr(CLUB_DISCOUNT_AMT));	
		fnShow("div_order_conf_discount_section");
	}
	else if (g_dcode==2 && (g_grand_subtotal>=FROZEN_DISCOUNT_THRESHOLD) && g_frozen_discount_amt)
	{
		fnSetInnertext("span_confirm_order_discount_percentage", "");
		fnSetInnertext("span_confirm_order_discount", fnNumToDollarStr(g_frozen_discount_amt));	
		fnShow("div_order_conf_discount_section");
	}	
	else
		fnHide("div_order_conf_discount_section");
	
	var b_delivery = fnGetChecked("radio_delivery");
	if (b_delivery)
	{
		fnShow("div_order_conf_delivery_section");
		fnSetInnertext("span_confirm_order_delivery_charge", fnNumToDollarStr(DELIVERY_CHARGE));		
	}
	else
	{
		fnHide("div_order_conf_delivery_section");
	}
	fnSetInnertext("span_confirm_order_grand_total", fnNumToDollarStr(g_grand_total));
	fnSetInnertext("span_confirm_order_grand_total2", fnNumToDollarStr(g_grand_total));
	fnSetInnertext("span_confirm_order_name", fnGetElemValue("input_name"));
	fnSetInnertext("span_confirm_order_email", fnGetElemValue("input_email"));
	fnSetInnertext("span_confirm_order_email2", fnGetElemValue("input_email"));
	fnSetInnertext("span_confirm_order_phone", fnGetElemValue("input_phone"));
	fnSetInnertext("span_confirm_order_pickup_date", fnGetElemValue("input_pickup_date"));
	
	fnOrder_Conf_HideErr();
	fnShow("div_confirm_order");
	fnHide("div_order");		
}
function fnBodyOnload()
{
	// Hide dicount sections if there is no discount
	if (ORDER_DISCOUNT)
	{
		fnShow("div_order_discount_section");
		fnShow("div_order_conf_discount_section");
	}
	else
	{
		fnHide("div_order_discount_section");
		fnHide("div_order_conf_discount_section");
	}
	
	fnHide_PleaseWait();
	fnOrder_HideErr();
	fnOrder_Conf_HideErr();
	fnHide("div_order_success");
	fnHide("div_order_fail");
	fnHide("div_confirm_order");
	fnShow("div_order");		
	fnUpdateAllTotals();
	fnHide("div_disabling_backdrop");
	fnEnable("button_confirm_place_order");
	fnOrder_SelectMode();
	fnConfigurePickupMode()
}

function fnShow_PleaseWait()
{
	fnShow("div_disabling_backdrop");
	fnShow("div_popup_please_wait");
	fnCenterElem("div_popup_please_wait");
}
function fnHide_PleaseWait()
{
	fnHide("div_disabling_backdrop");
	fnHide("div_popup_please_wait");
}

// Send the order to the server
function fnConfirmPlaceOrder()
{
	var j=0;
	var i=0;
	
	// Already done w client-side validation, so we will be sending a request.
	
	fnDisable("button_confirm_place_order");
	// Show the please wait dialog
	fnShow_PleaseWait();
	
	// Assemble the post param
	var str_param = AJAX_PARAM_NAME +"=" +encodeURIComponent(fnGetElemValue("input_name"));
	str_param += fnParamToURL(AJAX_PARAM_EMAIL) +encodeURIComponent(fnGetElemValue("input_email"));
	str_param += fnParamToURL(AJAX_PARAM_PHONE) +encodeURIComponent(fnFormatPhone(fnGetElemValue("input_phone")));
	str_param += fnParamToURL(AJAX_PARAM_PICKUP_DATE) +encodeURIComponent(fnGetElemValue("input_pickup_date"));
	//radio_pickup
	var b_pickup = fnGetChecked("radio_pickup");
	if (b_pickup)	
		str_param += fnParamToURL(AJAX_PARAM_PICKUP_DELIVERY) +"0";
	else
		str_param += fnParamToURL(AJAX_PARAM_PICKUP_DELIVERY) +"1";
	str_param += fnParamToURL(AJAX_PARAM_CC_NUM) +encodeURIComponent(fnGetElemValue("input_cc_num"));
	str_param += fnParamToURL(AJAX_PARAM_CC_CCV) +encodeURIComponent(fnGetElemValue("input_cc_ccv"));
	str_param += fnParamToURL(AJAX_PARAM_CC_TYPE) +encodeURIComponent(fnGetElemValue("select_cc_type"));
	str_param += fnParamToURL(AJAX_PARAM_CC_PERSON_NAME) +encodeURIComponent(fnGetElemValue("input_cc_person_name"));
	str_param += fnParamToURL(AJAX_PARAM_CC_EXP) +encodeURIComponent(fnGetElemValue("select_cc_expiration_date_month")+"/"+fnGetElemValue("select_cc_expiration_date_year"));
	
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		str_quantity = fnGetElemValue("input_quantity_"+i);
		n_quantity = fnSafeParseInt(str_quantity,0);
		if (n_quantity>0)
		{
			str_param += fnParamToURL(i) +fnGetElemValue("input_quantity_"+i);		
			if (fnIsDef(ARRAY_ORDER_ITEM[i].select_tea_count) && (ARRAY_ORDER_ITEM[i].select_tea_count))
			{
				for (j=0; j<ARRAY_ORDER_ITEM[i].select_tea_count; j++)
				{
					str_param += ",";
					str_param += AJAX_SUB_PARAM_TEA;
					str_param += ":";
					str_param += fnSafeParseInt(fnGetElemValue("select_item_" +i +"_tea_" +j),0);
				}
			}
			if (fnIsDef(ARRAY_ORDER_ITEM[i].select_scone_count) && (ARRAY_ORDER_ITEM[i].select_scone_count))
			{
				for (j=0; j<ARRAY_ORDER_ITEM[i].select_scone_count; j++)
				{
					str_param += ",";
					str_param += AJAX_SUB_PARAM_SCONE;
					str_param += ":";
					str_param += fnSafeParseInt(fnGetElemValue("select_item_" +i +"_scone_" +j),0);
				}
			}
		}
	}

	str_param += fnParamToURL(AJAX_PARAM_SUBTOTAL) + g_grand_subtotal;
	str_param += fnParamToURL(AJAX_PARAM_TOTAL) + g_grand_total;	// Send the total as an unformatted number so we can validate it easier and more soundly

	var str_temp = "";
	str_temp = fnGetElemValue("input_address");
	if (str_temp.length>0)
		str_param += fnParamToURL(AJAX_PARAM_ADDRESS) +encodeURIComponent(str_temp);
	str_temp = fnGetElemValue("input_city");
	if (str_temp.length>0)
		str_param += fnParamToURL(AJAX_PARAM_CITY) +encodeURIComponent(str_temp);
	str_temp = fnGetElemValue("input_state");
	if (str_temp.length>0)
		str_param += fnParamToURL(AJAX_PARAM_STATE) +encodeURIComponent(str_temp);
	str_temp = fnGetElemValue("input_zip");
	if (str_temp.length>0)
		str_param += fnParamToURL(AJAX_PARAM_ZIP) +encodeURIComponent(str_temp);
	
	str_param += fnParamToURL(AJAX_PARAM_NOTES) +encodeURIComponent(fnGetElemValue("textarea_notes"));
	if (fnGetChecked("checkbox_join_tea_club"))
		str_param += fnParamToURL(AJAX_PARAM_JOIN_TEA_CLUB) +"1";
		
	var dcode = fnGetElemValue("input_dcode")	
	if (dcode!="")
		str_param += fnParamToURL(AJAX_PARAM_DCODE) +encodeURIComponent(dcode);
	
	fnAJAXCall_Post("http://www.quasitime.com/tdt/lavenderProcessOrder.do", str_param);
}

function fnConfirmGoBack()
{
	fnOrder_HideErr();
	fnHide("div_confirm_order");
	fnShow("div_order");			
	fnHide("div_order_success");
	fnHide("div_order_fail");
	fnEnable("button_confirm_place_order");
}

function fnStatusHandler(n_code, str_extra)
{
	switch(n_code)
	{
		case STATUS__ORDER_SUCCESS:
			// Fill in the details
			fnSetInnertext("span_order_complete_email",fnGetElemValue("input_email"));
			fnSetInnertext("span_order_complete_order_num",str_extra);
			fnHide("div_confirm_order");
			fnHide("div_order");			
			fnShow("div_order_success");
			fnHide("div_order_fail");
			fnHide_PleaseWait();
			break;
		case STATUS__ORDER_FAIL:
			fnHide("div_confirm_order");
			fnHide("div_order");			
			fnHide("div_order_success");
			fnShow("div_order_fail");
			fnHide_PleaseWait();
			break;
		case STATUS__CATERING_ORDER_SUCCESS:
			fnHide("div_confirm_order");
			fnHide("div_order");			
			fnShow("div_order_success");
			fnHide("div_order_fail");
			fnHide_PleaseWait();
			break;
		case STATUS__CATERING_ORDER_FAIL:
			fnHide("div_confirm_order");
			fnHide("div_order");			
			fnHide("div_order_success");
			fnShow("div_order_fail");
			fnHide_PleaseWait();
			break;
		case STATUS__DCODE_SUCCESS:
			g_dcode = 1;
			break;
		case STATUS__DCODE_SUCCESS_1:
			g_dcode = 1;
			break;
		case STATUS__DCODE_SUCCESS_2:
			g_dcode = 2;
			break;
		case STATUS__DCODE_FAIL:
			g_dcode = 0;
			break;
	}
}

function fnAdjust_Box_Sizes()
{
	var elem = null;
	var client_width = xClientWidth();
	var client_height = xClientHeight();
	var n_temp=0;

	fnCenterElem("div_popup_please_wait");
}

function fnAJAXError(err_code)
{
	alert("We're sorry, an error has occurred.  The order could not be \n sent to the Lavender Tea House server. Our server \n may be temporarily down, or there may be trouble with an \n internet connection. Please wait a few minutes, then try again. Error code="+err_code);
	fnHide_PleaseWait();
}

function fnOrder_SelectMode()
{
	var str_temp="";
	
	fnFillOrderItems();
	for (i=0; i<NUM_ORDER_ITEMS; i++)
	{
		fnSetElemValue("input_quantity_"+i,"0");
		fnSetInnertext("span_total_price_"+i,fnNumToDollarStr(0));
	}
	fnEnable("button_confirm_place_order");
}

function fnCalcRowYPos(n_row)
{
	var i=0;
	var ypos=360;
	var item;
	for (i=0;i<n_row;i++)
	{
		item = ARRAY_ORDER_ITEM[i];
		if (fnIsCatInOrderType(g_order_mode, item.cat))
		{			
			if ( fnIsDef(item.height) && (item.height) )
			{
				ypos += item.height;
				ypos += 5;
			}
			else
			{
				ypos += 25;
				ypos += 5;
			}
		}
	}
	//ypos += ARRAY_ORDER_ITEM[i].cat*30;
	return ypos;
}

function fnShowProdImg(str_img,n_row)
{
	var str_temp = "";
	str_temp ="<img src='" +str_img +"' alt='Product Image'/>";
	fnSetInnerhtml("div_popup_product_img", str_temp);
	
	var client_width = xClientWidth();
	xLeft("div_popup_product_details",(client_width/2)+10);
	xTop("div_popup_product_details",fnCalcRowYPos(n_row));
	fnShow("div_popup_product_details");
}

function fnHideProdImg()
{
	fnHide("div_popup_product_details");
}

function fnOnPickupDelivery()
{
	var b_pickup = fnGetChecked("radio_pickup");
	if (b_pickup)
		fnConfigurePickupMode();
	else
		fnConfigureDeliveryMode();
}

function fnConfigurePickupMode()
{
	var str_temp = "";
	str_temp += "<div class='style_order_item_row3'>";
	str_temp += 	"<span class='style_form_col1' id='span_pickup_date'>Pickup Date:</span>";
	str_temp += 	"<span class='style_pd_col2'>";
	str_temp += 		"<input type='text' id='input_pickup_date' style='width:100px;'></input>*&nbsp;&nbsp;&nbsp;(MM/DD/YYYY)";
	str_temp += 	"</span>";
	str_temp += "</div>";	
	fnSetInnerhtml("div_pickup_delivery", str_temp);
	
	fnHide("div_order_delivery_section");	
	fnSetInnertext("span_reqd_address","");
	fnSetInnertext("span_reqd_city","");
	fnSetInnertext("span_reqd_state","");
	fnSetInnertext("span_reqd_zip","");
	fnUpdateGrandTotal();
}

function fnConfigureDeliveryMode()
{
	var str_temp = "";
	str_temp += "<div class='style_order_item_row2'>";
	str_temp += 	"<div class='style_subtext'>";
	str_temp +=			"Lavender Tea House orders are available for delivery in the following cities:";
	str_temp += 		"<ul>";
	str_temp += 		"<li>Beaverton";
	str_temp += 		"<li>Hillsboro";
	str_temp += 		"<li>King City";
	str_temp += 		"<li>Portland";
	str_temp += 		"<li>Sherwood";
	str_temp += 		"<li>Tigard";
	str_temp += 		"<li>Tualatin";
	str_temp += 		"<li>Wilsonville";
	str_temp += 		"</ul>";
	
	str_temp += 		"<div class='style_order_item_row2'>";
	str_temp += 			"A delivery fee of $25 will be charged for any delivery orders.";
	str_temp += 		"</div>";
	str_temp +=		"</div>";
	str_temp += "</div>";
	
	str_temp += "<div class='style_order_item_row3'>";
	str_temp += 	"<span class='style_form_col1' id='span_delivery_date'>Delivery Date:</span>";
	str_temp += 	"<span class='style_pd_col2'>";
	str_temp += 		"<input type=text id='input_pickup_date' style='width:100px;'></input>*&nbsp;&nbsp;&nbsp;(MM/DD/YYYY)";
	str_temp += 	"</span>";
	str_temp += "</div>";	
	str_temp += "<div class='style_order_item_row2'>";
	str_temp += 	"<div class='style_subtext'>";
	str_temp += 		"Delivery time is based on availability and will be confirmed to ensure the time will work for your event.";	
	str_temp += 	"</div>";	
	str_temp += "</div>";	
	fnSetInnerhtml("div_pickup_delivery", str_temp);
	
	fnSetInnerhtml("span_order_delivery_charge", fnNumToDollarStr(DELIVERY_CHARGE));
	fnShow("div_order_delivery_section");	
	
	fnSetInnertext("span_reqd_address","*");
	fnSetInnertext("span_reqd_city","*");
	fnSetInnertext("span_reqd_state","*");
	fnSetInnertext("span_reqd_zip","*");
	fnUpdateGrandTotal();
}

