
// 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 fnOrder_SetDefaults()
{
	var i=0;
	fnHide("div_order_success");
	fnHide("div_order_fail");
	fnHide("div_confirm_order");	
	fnHide_PleaseWait();
	fnOrder_HideErr();
	fnOrder_Conf_HideErr();
	fnSetElemValue("input_merchant_id","");
	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("textarea_notes","");
	var i=0;
	for (i=0; i<12; i++)
		fnSetElemValue("input_quantity_"+i,"0");	
	fnShow("div_order");	
	fnOrder_SelectMode();
}
function fnOrderItemClick(item_index)
{
	var str_input_quantity = "input_quantity_"+item_index;
	var elem = document.getElementById(str_input_quantity);
	if (elem)			
		elem.select();
}
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 fnGetTotalQuantity()
{
	var i=0;
	var str_input_quantity = "";
	var n_quantity = 0;
	var total = 0;
	for (i=0; i<12; i++)
	{
		str_input_quantity = "input_quantity_"+i;
		n_quantity = fnSafeParseInt(fnGetElemValue(str_input_quantity),0);	
		total += n_quantity;
	}
	return total;
}

function fnHasBaked()
{
	var i=0;
	var str_input_quantity = "";
	var n_quantity = 0;
	var total = 0;
	for (i=0; i<6; i++)
	{
		str_input_quantity = "input_quantity_"+i;
		n_quantity = fnSafeParseInt(fnGetElemValue(str_input_quantity),0);	
		total += n_quantity;
	}
	return total;
}

function fnHasFrozen()
{
	var i=0;
	var str_input_quantity = "";
	var n_quantity = 0;
	var total = 0;
	for (i=6; i<12; i++)
	{
		str_input_quantity = "input_quantity_"+i;
		n_quantity = fnSafeParseInt(fnGetElemValue(str_input_quantity),0);	
		total += n_quantity;
	}
	return total;
}

function fnValidateOrder()
{
	var b_ok=1;
	var str_err="";
	var str_temp = "";
	
	if (fnGetTotalQuantity()<=1)
	{
		b_ok=0;
		str_err +="<br>- The minimum order is 2 dozen scones.";
	}
	
	if ((!fnGetElemValue("input_merchant_id")) || ("" == fnGetElemValue("input_merchant_id")))
	{
		b_ok=0;
		str_err +="<br>- Merchant ID is required.";
		fnChangeClass("span_order_label_merchant_id","style_form_col1_red");
	}				
	else
		fnChangeClass("span_order_label_merchant_id","style_form_col1");

	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");
				}
			}
		}
	}

	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 fnGenOrderConfItem(i, item_name)
{
	var n_quantity = fnSafeParseInt(fnGetElemValue("input_quantity_"+i),0);	
	if (n_quantity<=0)
		return "";
	
	var str_out ="";
	str_out +="<div class='style_order_item_row'>";
	str_out +=	"<span class='style_order_form_col1'>";
	str_out +=		n_quantity;
	str_out +=	"</span>";
	str_out +=	"<span class='style_order_form_col2b'>" +item_name +"</span>";
	str_out +="</div>";
	return str_out;
}

function fnPlaceOrder()
{
	// Validate the data fields
	if (!fnValidateOrder())
		return;
		
	// Fill items
	var str_out ="";
	if (fnHasBaked())
	{
		str_out +="<div class='style_order_item_row'>";
		str_out +=	"<span class='style_order_form_col2'>";
		str_out +=		"<b>Baked Fresh Scones 12 pack</b>";
		str_out +=	"</span>";
		str_out +="</div>";
		str_out += fnGenOrderConfItem(0, "Sweet Cream");
		str_out += fnGenOrderConfItem(1, "Lavender");
		str_out += fnGenOrderConfItem(2, "Chocolate Hazelnut");
		str_out += fnGenOrderConfItem(3, "Cinnamon Apple");
		str_out += fnGenOrderConfItem(4, "Orange Cranberry");
		str_out += fnGenOrderConfItem(5, "Earl Grey");
	}
		
	if (fnHasFrozen())
	{
		str_out +="<div class='style_order_item_row'>";
		str_out +=	"<span class='style_order_form_col2'>";
		str_out +=		"<b>Frozen Scones 12 pack - You Bake</b>";
		str_out +=	"</span>";
		str_out +="</div>";
		str_out += fnGenOrderConfItem(6, "Sweet Cream");
		str_out += fnGenOrderConfItem(7, "Lavender");
		str_out += fnGenOrderConfItem(8, "Chocolate Hazelnut");
		str_out += fnGenOrderConfItem(9, "Cinnamon Apple");
		str_out += fnGenOrderConfItem(10, "Orange Cranberry");
		str_out += fnGenOrderConfItem(11, "Earl Grey");
	}

	fnSetInnerhtml("div_order_conf_items", str_out);
	
	var b_delivery = fnGetChecked("radio_delivery");
	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 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");
}

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");		
	fnHide("div_disabling_backdrop");
	fnEnable("button_confirm_place_order");
	fnOrder_SelectMode();
	fnSetChecked("radio_pickup");
	fnOnPickupDelivery();
}

// 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_MERCHANT_ID) +encodeURIComponent(fnGetElemValue("input_merchant_id"));
	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";
	
	for (i=0; i<12; i++)
	{
		str_quantity = fnGetElemValue("input_quantity_"+i);
		n_quantity = fnSafeParseInt(str_quantity,0);
		if (n_quantity>0)
		{
			str_param += fnParamToURL(i+AJAX_PARAM_ITEM_ZERO) +n_quantity;		
		}
	}

	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"));
		
	fnAJAXCall_Post("http://www.quasitime.com/tdt/processMerchantOrder.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="";
	
	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","");
}

function fnConfigureDeliveryMode()
{
	var str_temp = "";
	str_temp += "<div class='style_order_item_row2'>";
	str_temp += 	"<div class='style_subtext'>";
	str_temp += 		"<div class='style_order_item_row2'>";
	str_temp += 			"A delivery fee of $25 will be apply to delivery orders that are less that $100.";
	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","*");
}

