checkoutConfirmFormSubmitHandler = genericFormSubmitHandler;
checkoutConfirmFormResponseHandler = genericFormResponseHandler;

checkoutDetailsFormSubmitHandler = genericFormSubmitHandler;
checkoutDetailsFormResponseHandler = genericFormResponseHandler;

cartAddFormSubmitHandler = genericFormSubmitHandler;
function cartAddFormResponseHandler (type, result, evt, request)
{
	switch (type)
	{
		case "load":
			if (result.success)
			{
				sessionCart = result.cart;
				var node = dojo.byId("cartBoxContainer");
				if (!node)
					return;
				dojo.fx.html.fadeHide(node, standardFadeDuration, renderSessionCart);
			}
			break;
	}
	return genericFormResponseHandler(type, result, evt, request);
}

changeEmailFormSubmitHandler = genericFormSubmitHandler;
changeEmailFormResponseHandler = genericFormResponseHandler;

choosePasswordFormSubmitHandler = genericFormSubmitHandler;
choosePasswordFormResponseHandler = genericFormResponseHandler;

updateDetailsFormSubmitHandler = genericFormSubmitHandler;
updateDetailsFormResponseHandler = genericFormResponseHandler;

joinFormSubmitHandler = genericFormSubmitHandler;
joinFormResponseHandler = genericFormResponseHandler;

forgotPasswordFormSubmitHandler = genericFormSubmitHandler;
forgotPasswordFormResponseHandler = genericFormResponseHandler;

contactFormSubmitHandler = genericFormSubmitHandler;
contactFormResponseHandler = genericFormResponseHandler;

function loginFormSubmitHandler (form)
{
	clearMe(form.elements["email"], 'email');
	clearMe(form.elements["password"], 'password');
	return genericFormSubmitHandler(form);
}
loginFormResponseHandler = genericFormResponseHandler;

cartFormSubmitHandler = genericFormSubmitHandler;
function cartFormResponseHandler (type, result, evt, request)
{
	switch (type)
	{
		case "load":
			if (result.deletes && result.deletes.length)
			{
				for (var i = result.deletes.length; i--;)
				{
					var tr = dojo.byId("cartitemrow-"+ result.deletes[i]);
					if (!tr)
						continue;
					dojo.fx.html.fadeHide(tr, standardFadeDuration);
				}
			}

			if (result.cart)
			{
				sessionCart = result.cart;
				var item, node;
				for (var i = sessionCart.items.length; i--;)
				{
					item = sessionCart.items[i];

					if (node = dojo.byId("cartitemqty-"+ item.id))
						node.value = item.qty;

					if (node = dojo.byId("cartitemtotal-"+ item.id))
						node.innerHTML = numberToCurrency(item.total);
				}

				if (node = dojo.byId("cart-subtotal"))
					node.innerHTML = numberToCurrency(sessionCart.subtotal);

				if (node = dojo.byId("cart-incgst"))
					node.innerHTML = numberToCurrency(sessionCart.subtotal/11);

				if (node = dojo.byId("cart-shipping"))
					node.innerHTML = numberToCurrency(sessionCart.shipping);

				if (node = dojo.byId("cart-total"))
					node.innerHTML = numberToCurrency(sessionCart.total);
			}
			break;
	}
	return genericFormResponseHandler(type, result, evt, request);
}

//
//	anonymous init function

(function () {
	var node, x;

	//
	//	prepare dojo-powered forms

	if (node = dojo.byId("contactForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: contactFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = contactFormSubmitHandler;
	}

	if (node = dojo.byId("forgotPasswordForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: forgotPasswordFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = forgotPasswordFormSubmitHandler;
	}

	if (node = dojo.byId("joinForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: joinFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = joinFormSubmitHandler;
	}

	if (node = dojo.byId("cartAddForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: cartAddFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = cartAddFormSubmitHandler;
	}

	if (node = dojo.byId("loginForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: loginFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = loginFormSubmitHandler;
	}

	if (node = dojo.byId("cartForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: cartFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = cartFormSubmitHandler;
	}

	if (node = dojo.byId("checkoutConfirmForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: checkoutConfirmFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = checkoutConfirmFormSubmitHandler;
	}

	if (node = dojo.byId("checkoutDetailsForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: checkoutDetailsFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = checkoutDetailsFormSubmitHandler;
	}

	if (node = dojo.byId("changeEmailForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: changeEmailFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = changeEmailFormSubmitHandler;
	}

	if (node = dojo.byId("choosePasswordForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: choosePasswordFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = choosePasswordFormSubmitHandler;
	}

	if (node = dojo.byId("updateDetailsForm"))
	{
		node.action = "handler.asp";
		x = new dojo.io.FormBind
		({
			formNode: node,
			handle: updateDetailsFormResponseHandler,
			mimetype: "text/json",
			sendTransport: true
		});
		x.onSubmit = updateDetailsFormSubmitHandler;
	}

	//
	//	prepare offscreen-rendered elements

	if (node = dojo.byId("loginBox"))
	{
		node.style.display = "none";
		node.style.top = "4px";
	}

	//
	//	other visuals

	if (node = dojo.byId("topShopImg"))
		dojo.style.setOpacity(node, 0.5);
	if (node = dojo.byId("topMembersImg"))
		dojo.style.setOpacity(node, 0.5);

	if (node = dojo.byId("justinspeaksbanner"))
	{
		//
		//	this replaces a graphic on several pages that were various sizes
		//	source SWF is 180x91 pixels, we can calculate the size of it based on the width of the div we're placing it in
		
		var width = dojo.style.getContentBoxWidth(node);
		var height = width / (180/91);
		
		var so = new SWFObject("justinspeaks_banner.swf", "justinspeaksbanner", Math.floor(width), Math.floor(height), "6", "#F4F4F4");
		so.addParam("wmode", "opaque");
		so.addParam("scale", "noborder");
		so.write("justinspeaksbanner");
	}

	//
	//	render the cart display
	
	dojo.event.connect(window, "onload", renderSessionCart);
	window.setInterval(positionSessionCart, 25);
})();
