function MyAccountHelper(AjaxRoot, AccountID, WebsiteRoot, SecureWebsiteRoot, RefresherObject)
{
	this.AjaxRoot 			= AjaxRoot;
	this.AccountID 			= AccountID;
	this.WebsiteRoot 		= WebsiteRoot;
	this.SecureWebsiteRoot 	= SecureWebsiteRoot;
	this.RefresherObject	= RefresherObject;
	
	/*** BEGIN methods used across entire Account Center ***/
	this.ShowProcessingMessage = function(TargetID)
	{
		var element = document.getElementById(TargetID);
		element.innerHTML = '<img src="/shared/images/icons/working_16x12.gif" width="16" height="12" border="0" alt="" /> Processing Request ...<br /><br />';
	}
	
	this.ViewOrderReceipt = function(OrderID)
	{
		this.ViewOrder(OrderID, "view_order_details");
	}
	
	this.ViewOrderTracking = function(OrderID)
	{
		this.ViewOrder(OrderID, "view_order_tracking");
	}
	
	this.ViewOrder = function(OrderID, Mode)
	{
		// create the form and add attributes
		var OrderForm = document.createElement("form");
		OrderForm.setAttribute("name", "order_form");
		OrderForm.setAttribute("method", "post");
		OrderForm.setAttribute("action", this.SecureWebsiteRoot+"/myaccount/orders.php");
		// create the 'mode' input add add attributes
		var ModeInput = document.createElement("input");
		ModeInput.setAttribute("name", "mode");
		ModeInput.setAttribute("id", "mode");
		ModeInput.setAttribute("value", Mode);
		// create the 'order_id' input and add attributes
		var OrderInput = document.createElement("input");
		OrderInput.setAttribute("name", "order_id");
		OrderInput.setAttribute("id", "order_id");
		OrderInput.setAttribute("value", OrderID);	
		// add the 2 inputs to the form	
		OrderForm.appendChild(ModeInput);
		OrderForm.appendChild(OrderInput);
		// add the form to the document body
		document.body.appendChild(OrderForm);
		// submit the form
		OrderForm.submit();	
	}
	
	this.AdjustCounter = function(ElementID, CounterID, MaxLength)
	{
		var obj 			= document.getElementById(ElementID);
	    var counter_object 	= document.getElementById(CounterID); 
	       
	    if(MaxLength != undefined) 
	    {
	    	if (obj.value.length > MaxLength)
	        	obj.value = obj.value.substring(0, MaxLength);
	    }
	    counter_object.innerHTML = obj.value.length;
	}
	/*** END methods used across entire Account Center ***/


	/*** BEGIN methods related to account registration ***/
	this.CheckSameAsBilling = function(FieldName) 
	{
	    if(document.getElementById("same_as_billing").checked == true) 
	    {			
	        var billing_id 	= "billing_"+FieldName;
	        var shipping_id = "shipping_"+FieldName;
			if(FieldName=='state_id' || FieldName=='country_id')			
				document.getElementById('shipping_'+FieldName).selectedIndex=document.getElementById('billing_'+FieldName).selectedIndex
			
			else
			{				
		        // change the shipping value to match the billing value
		        document.getElementById(shipping_id).value = document.getElementById(billing_id).value;
			}
	        
	    }
	}
	
	this.PushSameAsBilling = function(FormObject)
	{
	    if(document.getElementById("same_as_billing").checked == true)
	    {
	        FormObject.shipping_company.value           	= FormObject.billing_company.value;        
	        FormObject.shipping_first_name.value         	= FormObject.billing_first_name.value;
	        FormObject.shipping_middle_initial.value      	= FormObject.billing_middle_initial.value;
	        FormObject.shipping_last_name.value          	= FormObject.billing_last_name.value;
	        FormObject.shipping_address.value           	= FormObject.billing_address.value;
	        FormObject.shipping_address2.value          	= FormObject.billing_address2.value;
	        FormObject.shipping_zip.value            		= FormObject.billing_zip.value;
	        FormObject.shipping_phone.value             	= FormObject.billing_phone.value;
	        FormObject.shipping_fax.value             		= FormObject.billing_fax.value;
	        FormObject.shipping_email.value             	= FormObject.billing_email.value;
			// need to set the zipcode for shipping so it matches billing
			// no longer needed. we dont' do ajax refreshes anymore. this.SetZipcode("shipping");
			FormObject.shipping_country_id.selectedIndex	= FormObject.billing_country_id.selectedIndex;
			this.RefreshShippingStateDropdown();
			FormObject.shipping_state_id.selectedIndex		= FormObject.billing_state_id.selectedIndex;
	    }
	}
	
	this.CancelAccountCreation = function()
	{
		window.location = this.WebsiteRoot+"/default.php";	
	}
	
	this.CreateAccount = function()
	{
		document.registration_information.submit();
	}
	
	this.SetZipcode = function(Prefix)
	{
		var ZipcodeElement = Prefix+"_zip"; 
		var Zipcode 	= document.getElementById(ZipcodeElement).value;
		var Parameters	= "action=ActionSetZipcode&prefix="+Prefix+"&zip="+Zipcode;
		var objAjaxv2	= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.SetZipcodeCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.GetPost(true);
	}
	
	this.SetZipcodeCallBack = function(Success, ResponseObject)
	{
		if(Success)
		{
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				// if same as billing is checked, need to be sure that cities are same
				if(document.getElementById("same_as_billing").checked == true)
				{
					//if(document.getElementById("shipping_city_id") != undefined && document.getElementById("billing_city_id") != undefined)
						//document.getElementById("shipping_city_id").value = document.getElementById("billing_city_id").value;
					if(document.getElementById("shipping_city_name") != undefined && document.getElementById("billing_city_name") != undefined)
						document.getElementById("shipping_city_name").value = document.getElementById("billing_city_name").value;
				}
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}
		}
	}
	
	this.RefreshBillingStateDropdown=function()
	{
		var Parameters	= "action=ActionRefreshBillingStateDropdown";
		var container	= document.getElementById('billing_container');
		var objAjaxv2 	= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php",this,this.OnRefreshBillingStateDropdown,"POST",Parameters,GlobalAjaxContextHandler);
		objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);		
		objAjaxv2.GetPost(true);
	}
	
	this.OnRefreshBillingStateDropdown=function(Success,ResponseObject)
	{
		if(!Success)
        {
            //display some kind of warning
            alert('The system was unable to contact the server. Please try again.');
            return;
        }                
        try
        {
			eval("var obj="+ResponseObject.responseText);
			var dropdown = document.getElementById('billing_state_id');
			var state_array=obj.Response;
			dropdown.options.length=0;
			for(var c=0;c<state_array.length;c++)
			{
				dropdown.options[c]=new Option(state_array[c][1],state_array[c][0]);
			}
			//do we need to chain the shipping dropdown?
			if(document.getElementById("same_as_billing").checked == true)	    	
				this.RefreshShippingStateDropdown();
			
			return true; 
		}
		catch(exception)
        {
            alert('A system error occured.('+exception+')');
            return;
        }
	}
	this.RefreshShippingStateDropdown=function()
	{
		var Parameters	= "action=ActionRefreshShippingStateDropdown";
		var container	= document.getElementById('shipping_container');
		var objAjaxv2 	= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php",this,this.OnRefreshShippingStateDropdown,"POST",Parameters,GlobalAjaxContextHandler);
		objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);		
		objAjaxv2.GetPost(true);
	}
	this.OnRefreshShippingStateDropdown=function(Success,ResponseObject)
	{
		if(!Success)
        {
            //display some kind of warning
            alert('The system was unable to contact the server. Please try again.');
            return;
        }                
        try
        {
			eval("var obj="+ResponseObject.responseText);
			var dropdown = document.getElementById('shipping_state_id');
			var state_array=obj.Response;
			dropdown.options.length=0;
			for(var c=0;c<state_array.length;c++)
			{
				dropdown.options[c]=new Option(state_array[c][1],state_array[c][0]);
			}
			//if we push same as billing, on our refresh, match billing
			if(document.getElementById("same_as_billing").checked == true)
				dropdown.selectedIndex=document.getElementById('billing_state_id').selectedIndex;
				
			return true; 
		}
		catch(exception)
        {
            alert('A system error occured.('+exception+')');
            return;
        }
	}
	/*** END methods related to account registration ***/
	
	
	/*** BEGIN methods related to account login/logout ***/
	this.DoLogIn = function()
	{
		var alert_text = "";
		// did they enter a user name and password?
		if(document.getElementById("user_name").value == "")
			alert_text += "You must enter your 'User Name'.\n";
		if(document.getElementById("password").value == "")
			alert_text += "You must enter your 'Password'.";
		// if they didn't enter user name or password, warn and do NOT continue
		if(alert_text != "")
		{
			alert(alert_text);
			return;
		}
		
		document.login_form.submit();
	}
	
	this.DoLogOut = function()
	{
		var ElementID		= "account_logout_message";	
		var Parameters 		= "action=ActionDoAccountLogOut";
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.DoLogOutCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);	
	}
	
	this.CancelLogOut = function()
	{
		window.location = "/myaccount/default.php";
	}
	
	this.SubmitLogInOnEnter = function(myfield, e)
	{
		var keycode;
		if(window.event) 
			keycode = window.event.keyCode;
		else if(e) 
			keycode = e.which;
		else 
			return true;
		
		if(keycode == 13)
	   	{
		   	this.DoLogIn();
		   	return false;
	   	}
		else
		   	return true;	
	}
	/*** END methods related to account login/logout ***/
	
	
	/*** BEGIN methods related to account password retrieval ***/
	this.RetrievePassword = function()
	{
		if(document.retrieve_password_form.email.value == "")
		{
			alert("You must enter an email address in order to retrieve your password.");
			return;
		}
		document.retrieve_password_form.submit();
	}
	
	this.ResetPassword = function()
	{
		document.reset_password_form.submit();
	}
	
	this.CancelResetPassword = function()
	{
		window.location = this.SecureWebsiteRoot+"/myaccount/login.php";
	}	
	/*** END methods related to account password retrieval ***/
	
	
	/*** BEGIN methods related to editing account information ***/
	this.UpdateAccountPassword = function()
	{
		var FormID			= "login_information";
		var ElementID		= "login_info_result";	
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionUpdatePassword&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.GenericCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);	
		this.ShowProcessingMessage(ElementID);	
	}
	
	this.UpdateContactInfo = function()
	{
		var FormID			= "edit_contact_information";
		var ElementID		= "edit_contact_info_result";	
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionUpdateContactInfo&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.GenericCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);	
		this.ShowProcessingMessage(ElementID);	
	}
	
	this.LoadVehicleForm = function()
	{
		var ElementID		= "vehicle_form";
		// clear out results
		document.getElementById("vehicle_result").innerHTML = "";	
		// make sure the form is visible
		document.getElementById(ElementID).style.display = "block";
		var Parameters 		= "action=LoadVehicleForm";
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.LoadVehicleFormCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
	}
	
	this.CancelAddVehicle = function()
	{
		document.getElementById("vehicle_form").style.display = "none";
		document.getElementById("add_vehicle_link").style.display = "block";
		document.getElementById("vehicle_result").innerHTML = "";
	}
	
	this.ChangeVehicleMakes = function(MakeElement)
	{
		var MakeID 			= MakeElement.options[MakeElement.selectedIndex].value;
		var ElementID		= "vehicle_model_select";
		var Parameters 		= "action=RefreshVehicleModels&vehicle_make_id="+MakeID;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.GenericCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
	}
	
	this.AddVehicleToAccount = function()
	{
		// clear out results
		document.getElementById("vehicle_result").innerHTML = "";
		var FormID			= "add_vehicle_form";
		var ElementID		= "vehicle_result";	
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionAddVehicleToAccount&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddRemoveVehicleCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);	
		this.ShowProcessingMessage(ElementID);
	}
	
	this.MakeVehiclePrimary = function(VehicleInfoID)
	{
		var ElementID		= "vehicle_result";
		var Parameters 		= "action=ActionMakeVehiclePrimary&vehicle_info_id="+VehicleInfoID;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.MakeVehiclePrimaryCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.RemoveVehicle = function(VehicleInfoID)
	{
		var ElementID		= "vehicle_result";
		var Parameters 		= "action=ActionDeleteVehicle&vehicle_info_id="+VehicleInfoID;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddRemoveVehicleCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	/*** END methods related to editing account information ***/
	
	
	/*** BEGIN methods related to contact us page ***/
	this.SendEmailToDepartment = function()
	{
		var FormID			= "contact_us_form";
		var ElementID		= "contact_result";	
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionSendEmailToDepartment&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.SendEmailToDepartmentCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);	
		this.ShowProcessingMessage(ElementID);	
	}
	/*** END methods related to contact us page ***/
	
	
	/*** BEGIN methods related to wish list/price watch ***/
	this.AddToWishList = function(ApplicationID, Index)
	{
		if(Index == undefined)
			var ElementID = "add_to_list_result";
		else
			var ElementID = "add_to_list_result"+Index;
		
		var Parameters 		= "action=ActionAddToWishList&product_application_id="+ApplicationID;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddToWishListPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.AddToPriceWatch = function(ApplicationID, Index)
	{
		if(Index == undefined)
			var ElementID = "add_to_list_result";
		else
			var ElementID = "add_to_list_result"+Index;
			
		var Parameters 		= "action=ActionAddToPriceWatch&product_application_id="+ApplicationID;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddToWishListPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	// this is used with the Colored Ordering Control
	this.AddToWishListFromCOC = function()
	{
		var FormID			= "order_control_container";
		var ElementID		= "add_to_list_result";	
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionAddToWishListFromCOC&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddToWishListPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);	
		this.ShowProcessingMessage(ElementID);	
	}
	
	// this is used with the Colored Ordering Control
	this.AddToPriceWatchFromCOC = function()
	{
		var FormID			= "order_control_container";
		var ElementID		= "add_to_list_result";	
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionAddToPriceWatchFromCOC&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddToWishListPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);	
		this.ShowProcessingMessage(ElementID);
	}
	
	// this is used with the Standard (Tabbed) Ordering Control
	this.AddToWishListFromSOC = function(RenderID)
	{
		var tab          = document.getElementById("parent_div_" + RenderID);
		var lastselectid = tab.getAttribute("LastSelect");
		var form         = document.getElementById("tabbed_order_form_" + RenderID);
        
		if(lastselectid != "")
		{
			var select 				= document.getElementById(lastselectid);
            var ApplicationID   	= select.options[select.selectedIndex].value;
			if(ApplicationID > 0)
			{
				var ElementID 		= "add_to_list_result";
				var Parameters 		= "action=ActionAddToWishList&product_application_id="+ApplicationID;
				var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddToWishListPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
				objAjaxv2.EventData	= ElementID;
				objAjaxv2.GetPost(true);
				this.ShowProcessingMessage(ElementID);
			}
		}
	}
	
	// this is used with the Standard (Tabbed) Ordering Control
	this.AddToPriceWatchFromSOC = function(RenderID)
	{
		var tab          = document.getElementById("parent_div_" + RenderID);
		var lastselectid = tab.getAttribute("LastSelect");
		var form         = document.getElementById("tabbed_order_form_" + RenderID);
        
		if(lastselectid != "")
		{
			var select 				= document.getElementById(lastselectid);
            var ApplicationID   	= select.options[select.selectedIndex].value;
			if(ApplicationID > 0)
			{
				var ElementID 		= "add_to_list_result";
				var Parameters 		= "action=ActionAddToPriceWatch&product_application_id="+ApplicationID;
				var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddToWishListPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
				objAjaxv2.EventData	= ElementID;
				objAjaxv2.GetPost(true);
				this.ShowProcessingMessage(ElementID);
			}
		}
	}
	
	this.RemoveItemFromWishList = function(SKU)
	{
		var ElementID		= "item_result";
		var Parameters 		= "action=ActionRemoveItemFromWishList&sku="+SKU;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.RemoveItemFromWishListCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.RemoveItemFromPriceWatch = function(SKU)
	{
		var ElementID		= "item_result";
		var Parameters 		= "action=ActionRemoveItemFromPriceWatch&sku="+SKU;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.RemoveItemFromPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.AddToCart = function(ProductApplicationID)
	{
		document.add_to_cart_form.product_application_id.value = ProductApplicationID;
		document.add_to_cart_form.submit();
	}
	
	this.LoadWishListEmailInterface = function()
	{
		var ElementID		= "send_wish_list";
		var ResultElementID = "send_wish_list_result";
		document.getElementById(ElementID).style.display = "block";
		document.getElementById(ResultElementID).style.display = "none";
		var Parameters 		= "action=LoadWishListEmailInterface";
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.GenericCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.LoadPriceWatchEmailInterface = function()
	{
		var ElementID		= "send_price_watch";
		var ResultElementID = "send_price_watch_result";
		document.getElementById(ElementID).style.display = "block";
		document.getElementById(ResultElementID).style.display = "none";
		var Parameters 		= "action=LoadPriceWatchEmailInterface";
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.GenericCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.CancelSendWishList = function()
	{
		var ElementID 		= "send_wish_list";
		var ResultElementID = "send_wish_list_result";
		document.getElementById(ElementID).style.display = "none";
		document.getElementById(ResultElementID).style.display = "none";
	}
	
	this.CancelSendPriceWatch = function()
	{
		var ElementID 		= "send_price_watch";
		var ResultElementID = "send_price_watch_result";
		document.getElementById(ElementID).style.display = "none";
		document.getElementById(ResultElementID).style.display = "none";
	}
	
	this.SendWishList = function()
	{
		var FormID			= "wish_list_email_form";
		var ElementID		= "send_wish_list_result";
		document.getElementById(ElementID).style.display = "block";
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionSendWishList&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.SendWishListCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.SendPriceWatch = function()
	{
		var FormID			= "price_watch_email_form";
		var ElementID		= "send_price_watch_result";
		document.getElementById(ElementID).style.display = "block";
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionSendPriceWatch&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.SendPriceWatchCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	/*** END methods related to wish list/price watch ***/
	
	
	/*** BEGIN methods related to order listing interface ***/
	this.SelectOrderForViewing = function(OrderID)
	{
		// set the selected OrderID for the (hidden) form
		document.order_list.SelectedOrderID.value = OrderID;
		// unhighlight all rows
		var order_list = document.getElementById("order_table");
		var rows = order_list.getElementsByTagName("tr");
		var i = 0;
		while(i<rows.length)
		{
			rows[i].className = "normalRow";
			i++;
		}
		// highlight the selected row
		var RowID = "order_row"+OrderID;
		document.getElementById(RowID).className = "selectedRow";
	}
	
	this.ViewSelectedOrder = function()
	{
		var OrderID = document.order_list.SelectedOrderID.value;
		if(OrderID == "")
		{
			alert("You must select an Order to view.");
			return;
		}
		this.ViewOrderReceipt(OrderID);
	}
	
	this.TrackSelectedOrder = function()
	{
		var OrderID = document.order_list.SelectedOrderID.value;
		if(OrderID == "")
		{
			alert("You must select an Order to track.");
			return;
		}
		this.ViewOrderTracking(OrderID);
	}
	
	this.ReturnSelectedOrder = function()
	{
		var OrderID = document.order_list.SelectedOrderID.value;
		if(OrderID == "")
		{
			alert("You must select an Order to return.");
			return;
		}
		// set up the action and mode for the form and then submit it
		document.order_list.action = this.WebsiteRoot+"/forms/merchandise_returns.php";
		document.order_list.mode.value = "show_order";
		document.order_list.submit();
	}	
	/*** END methods related to order listing interface ***/
	
	
	/*** BEGIN methods related to return listing interface ***/
	this.SelectReturnForViewing = function(ReturnID)
	{
		// set the selected OrderID for the (hidden) form
		document.return_list.SelectedReturnID.value = ReturnID;
		// unhighlight all rows
		var return_list = document.getElementById("return_table");
		var rows = return_list.getElementsByTagName("tr");
		var i = 0;
		while(i<rows.length)
		{
			rows[i].className = "normalRow";
			i++;
		}
		// highlight the selected row
		var RowID = "return_row"+ReturnID;
		document.getElementById(RowID).className = "selectedRow";
	}
	
	this.ViewSelectedReturn = function()
	{
		var ReturnID = document.return_list.SelectedReturnID.value;
		if(ReturnID == "")
		{
			alert("You must select a Return to view.");
			return;
		}
		// create the form and add attributes
		var ReturnForm = document.createElement("form");
		ReturnForm.setAttribute("name", "return_form");
		ReturnForm.setAttribute("method", "post");
		ReturnForm.setAttribute("action", this.SecureWebsiteRoot+"/myaccount/returns.php");
		// create the 'mode' input add add attributes
		var ModeInput = document.createElement("input");
		ModeInput.setAttribute("name", "mode");
		ModeInput.setAttribute("id", "mode");
		ModeInput.setAttribute("value", "DisplayDetails");
		// create the 'order_id' input and add attributes
		var ReturnInput = document.createElement("input");
		ReturnInput.setAttribute("name", "return_id");
		ReturnInput.setAttribute("id", "return_id");
		ReturnInput.setAttribute("value", ReturnID);	
		// add the 2 inputs to the form	
		ReturnForm.appendChild(ModeInput);
		ReturnForm.appendChild(ReturnInput);
		// add the form to the document body
		document.body.appendChild(ReturnForm);
		// submit the form
		ReturnForm.submit();
	}
	
	this.OpenReturnItemDetails = function(ReturnItemID)
	{
		// show the details div
		var detail_div = "return_item_details"+ReturnItemID;
		document.getElementById(detail_div).style.display = "block";
		// hide the 'view' link
		var view_link = "view_item_details_link"+ReturnItemID;
		document.getElementById(view_link).style.display = "none";
		// show the 'hide' link
		var hide_link = "hide_item_details_link"+ReturnItemID;
		document.getElementById(hide_link).style.display = "block";
	}
	
	this.HideReturnItemDetails = function(ReturnItemID)
	{
		// hide the details div
		var detail_div = "return_item_details"+ReturnItemID;
		document.getElementById(detail_div).style.display = "none";
		// show the 'view' link
		var view_link = "view_item_details_link"+ReturnItemID;
		document.getElementById(view_link).style.display = "block";
		// hide the 'hide' link
		var hide_link = "hide_item_details_link"+ReturnItemID;
		document.getElementById(hide_link).style.display = "none";
	}
	/*** END methods related to return listing interface ***/
	
	
	/*** BEGIN methods related to gift card redemption ***/
	this.LoadAddGiftCardInterface = function()
	{
		var ElementID		= "add_giftcard_interface";
		var ResultElementID = "add_giftcard_result";
		document.getElementById(ElementID).style.display = "block";
		document.getElementById(ResultElementID).style.display = "none";
		var Parameters 		= "action=LoadAddGiftCardInterface";
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.GenericCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.CancelAddGiftCard = function()
	{
		var ElementID 		= "add_giftcard_interface";
		var ResultElementID = "add_giftcard_result";
		document.getElementById(ElementID).style.display = "none";
		document.getElementById(ResultElementID).style.display = "none";
	}
	
	this.AddGiftCard = function()
	{
		var FormID			= "add_giftcard_form";
		var ElementID		= "add_giftcard_result";
		document.getElementById(ElementID).style.display = "block";
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionAddGiftCard&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddGiftCardCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.OpenGiftCardHistory = function(GiftCardID)
	{
		// show the details div
		var history_div = "history"+GiftCardID;
		document.getElementById(history_div).style.display = "block";
		// hide the 'view' link
		var view_link = "view_history_link"+GiftCardID;
		document.getElementById(view_link).style.display = "none";
		// show the 'hide' link
		var hide_link = "hide_history_link"+GiftCardID;
		document.getElementById(hide_link).style.display = "block";
	}
	
	this.HideGiftCardHistory = function(GiftCardID)
	{
		// hide the details div
		var history_div = "history"+GiftCardID;
		document.getElementById(history_div).style.display = "none";
		// show the 'view' link
		var view_link = "view_history_link"+GiftCardID;
		document.getElementById(view_link).style.display = "block";
		// hide the 'hide' link
		var hide_link = "hide_history_link"+GiftCardID;
		document.getElementById(hide_link).style.display = "none";
	}
	/*** END methods related to gift card redemption ***/
	
	
	/*** BEGIN methods related to product reviews ***/
	this.LoadAddProductReviewInterface = function()
	{
		var ElementID		= "add_review_interface";
		var ResultElementID = "add_review_result";
		document.getElementById(ElementID).style.display = "block";
		document.getElementById(ResultElementID).style.display = "none";
		var Parameters 		= "action=LoadAddProductReviewInterface";
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.GenericCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	
	this.CancelAddProductReview = function()
	{
		var ElementID 		= "add_review_interface";
		var ResultElementID = "add_review_result";
		document.getElementById(ElementID).style.display = "none";
		document.getElementById(ResultElementID).style.display = "none";
	}
	
	this.SelectProductForReview = function(OrderDetailID, ProductID)
	{
		// set the selected OrderDetailID and ProductID for the form
		document.add_review_form.product_id.value 		= ProductID;
		document.add_review_form.order_detail_id.value 	= OrderDetailID;
		// unhighlight all rows
		var product_list = document.getElementById("product_table");
		var rows = product_list.getElementsByTagName("tr");
		var i = 0;
		while(i<rows.length)
		{
			rows[i].className = "normalRow";
			i++;
		}
		// highlight the selected row
		var RowID = "product_row"+ProductID;
		document.getElementById(RowID).className = "selectedRow";
	}
	
	this.SubmitProductReview = function()
	{
		var FormID			= "add_review_form";
		var ElementID		= "add_review_result";
		document.getElementById(ElementID).style.display = "block";
		var ajaxv2 			= new Ajaxv2();
		var container 		= document.getElementById(FormID);	
		var FormValues		= ajaxv2.GetFormValues(container);
		var Parameters 		= "action=ActionSubmitProductReview&"+FormValues;
		var objAjaxv2 		= new Ajaxv2(this.AjaxRoot+"/myaccount_helper.php", this, this.AddProductReviewCallBack, "POST", Parameters, GlobalAjaxContextHandler);
		objAjaxv2.EventData	= ElementID;
		objAjaxv2.GetPost(true);
		this.ShowProcessingMessage(ElementID);
	}
	/*** END methods related to product reviews ***/
	
	
	/*** BEGIN CallBack Methods ***/
	this.DoLogOutCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);			
				
				if(obj.RetVal > 0)
					window.location = "/myaccount/login.php";
				else
				{
					if(EventData.constructor != Array)
						event_array.push(EventData);
					else
						event_array = EventData;
						
					for(var c=0; c<event_array.length; c++)
					{
						element = document.getElementById(event_array[c]);
						element.innerHTML = obj.Response;
					}
				}
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.LoadVehicleFormCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}	
				
				if(obj.RetVal > 0)
					document.getElementById("add_vehicle_link").style.display = "none";
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.AddRemoveVehicleCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.RetVal > 0)
				{
					this.RefresherObject.RefreshVehicleListing();
					// hide the form
					document.getElementById("vehicle_form").style.display = "none";
					// show the link
					document.getElementById("add_vehicle_link").style.display = "block";
				}
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.MakeVehiclePrimaryCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.RetVal > 0)
					this.RefresherObject.RefreshVehicleListing();
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.SendEmailToDepartmentCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				if(obj.RetVal > 0)
					document.getElementById("contact_form").style.display = "none";
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.AddToWishListPriceWatchCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}	
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.RemoveItemFromWishListCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				if(obj.RetVal > 0)
				{
					this.RefresherObject.RefreshWishList();
					this.RefresherObject.RefreshWishListCountMessage();	
				}
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.RemoveItemFromPriceWatchCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				if(obj.RetVal > 0)
				{
					this.RefresherObject.RefreshPriceWatch();
					this.RefresherObject.RefreshPriceWatchCountMessage();	
				}
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.SendWishListCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				if(obj.RetVal > 0)
					document.getElementById("send_wish_list").style.display = "none";
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.SendPriceWatchCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				if(obj.RetVal > 0)
					document.getElementById("send_price_watch").style.display = "none";
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.AddGiftCardCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				if(obj.RetVal > 0)
				{
					// hide the form
					document.getElementById("add_giftcard_interface").style.display = "none";
					// refresh the listing
					this.RefresherObject.RefreshGiftCards();	
				}
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	
	this.AddProductReviewCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
				
				if(obj.RetVal > 0)
				{
					// refresh the form
					this.RefresherObject.RefreshProductReviewSubmissionForm();
					// refresh the listing
					this.RefresherObject.RefreshProductReviews();	
				}
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}
	

		
	this.GenericCallBack = function(Success, ResponseObject, EventData)
	{
		if(Success)
		{
			var element;
			var event_array = Array();
			try
			{
				eval("var obj= "+ResponseObject.responseText);
				
				if(EventData.constructor != Array)
					event_array.push(EventData);
				else
					event_array = EventData;
					
				for(var c=0; c<event_array.length; c++)
				{
					element = document.getElementById(event_array[c]);
					element.innerHTML = obj.Response;
				}				
				
				if(obj.Javascript != null)			
					window.eval(obj.Javascript);
			}
			catch(ex)
			{
				alert('Exception caught in MyAccountHelper: '+ex.toString());	
			}				
		}
	}	
	/*** END CallBack Methods ***/
}