// Copyright 2011-3011 MrSupplement.com.au. All rights reserved.
function cart_emptycart()
{
	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "cart", method: "empty" },
		async: true,
		success: function (data)
		{
			$('#cartContents').html (data);
			cart_displaycartelements ('');
		}
	});
}

function cart_displaycartelements (step)
{
	if (step == '') { step = 'cart'; }
	cart_displaycartstep (step);
	cart_displaycarttab ();
}

function cart_displaycarttab ()
{
	var cartTab = $('#cartDialog');
	if (cartTab != undefined)
	{
		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "cart", method: "getCartTab" },
			async: false,
			success: function (data)
			{
				cartTab.html (data);
			}
		});
	}
}

function cart_displaycartstep (step)
{
	displayJQMDialog ($('#waitdialog'), {modal:true});
	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "cart", method: "getCart", cartStep: step, params: $('#cartForm').serializeArray () },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));

			details = cart_switchstep (data);
			if (details.step == '' && details.msg == '')
			{
				$('#cartStep').html (data);
			}
			else
			{
				if (details.msg != '') { cart_displayAlertDialog ('alertdialog', '', details.msg, {}); }
				if (details.step != '') { cart_displaycartstep (details.step); }
			}
		}
	});
}

function cart_switchstep (data)
{
	var details = {'step':'', 'msg':''};
	if (data != '')
	{
		var re = new RegExp ('^CART\_SWITCHSTEP\_(.*)$');
		var m = re.exec (data);
		if (m != null)
		{
			var newstep = m[1];
			var re = new RegExp ('^(.*?)\_(.*)$');
			var m = re.exec (newstep);
			if (m != null)
			{
				details.step = m[1];
				details.msg = m[2];
			}
			else
			{
				details.step = newstep;
			}
		}
	}

	return details;
}

function cart_addtocart (pid, vid, qty)
{
	if (vid == '') { vid = 0; }
	if (pid != '' && vid !== '' && qty >= 0)
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "cart", method: "add", productId: pid, variationId: vid, qty: qty },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				cart_displaycartelements ('');
				cart_displaycheckouttab_popup (5000, 1000);
			}
		});
	}
}

function cart_addtocart_element (el)
{
	var element = $('#' + el).attr ('id');
	if (element != undefined && element != '')
	{
		element = element.split ("_");
		cart_addtocart (element[1], $("#variation" + element[1]).val(), 1);
	}
}

function cart_removefromcart (pid, vid)
{
	if (pid != '' && vid != '')
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		var parentTable = $('#cartitem_' + pid + '_' + vid).parents ("table:first");
		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "cart", method: "remove", productId: pid, variationId: vid },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));
				cart_displaycartelements ('');
			}
		});
	}
}

function cart_updatecart ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "cart", method: "updateCart", params: $('#cartForm').serializeArray () },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));
			cart_displaycartelements ('');
		}
	});
}

function cart_getitemcount ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "cart", method: "getCartCount" },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));

			var plural = '';
			if (data != '1') { plural = 's'; }
			$('.cart_num_items').html (data + ' item' + plural);
		}
	});
}

function cart_getsidemenu ()
{
	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "site", method: "getSideMenu" },
		async: true,
		success: function (data)
		{
			$('#sidebar-sidemenu').html (data);
		}
	});
}

function cart_logincustomer (emailel, passel, step, redirect, merge)
{
	$.colorbox.close ();

	var loggedin = 0;
	trimElements (['#' + emailel, '#' + passel]);
	emailel = $('#' + emailel);
	passel = $('#' + passel);
	if (isValidEmailAddress (emailel.val ()) && passel.val () != '')
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		var domerge = (merge == 1) ? 1 : 0;
		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "cart", method: "login", email: emailel.val (), password: passel.val (), dologin: 1, merge: domerge },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				if (data == 'TRUE' || data == 'TRUE_MERGED')
				{
					loggedin = 1;

					if (data == 'TRUE_MERGED') { alert ('You have been logged in.\n\nAny items that were in your cart when you were last logged in have been added to your current cart.'); }

					if (redirect == true) { redirectToURL (sitebaseurl + 'account', true); }
					else
					{
						cart_getsidemenu ();
						if (step != '') { cart_displaycartelements (step); }
					}
				}

				if (loggedin == 0)
				{
					cart_displayAlertDialog ('alertdialog', '', 'Login failed', {});
				}
			}
		});
	}
	else
	{
		cart_displayAlertDialog ('alertdialog', '', 'Please enter valid details and try again', {});
	}

	return false;
}

function cart_displaylogintab ()
{
	$.colorbox ({html:$('#logintab').html ()});
	return false;
}

function cart_updatedetails ()
{
	trimElements (['#params_password', '#params_email', '#params_firstname', '#params_lastname', '#params_contactnumber', '#params_cnewpassword', '#params_newpassword']);
	var standardDetails = ($("#params_password").val () != "" && isValidEmailAddress ($("#params_email").val ()) && $("#params_firstname").val () != "" && $("#params_lastname").val () != "" && $("#params_contactnumber").val () != "");
	var passwordDetails = ($("#params_cnewpassword").val () == $("#params_newpassword").val ());
	if (standardDetails == true && passwordDetails == true)
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "cart", method: "registerCustomer", params: $('#cartUpdateProfileForm').serializeArray () },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				if (data === "TRUE")
				{
					cart_displayAlertDialog ('alertdialog', '', 'Your details have been updated', {});
				}
				else
				{
					cart_displayAlertDialog ('alertdialog', '', data, {});
				}
			}
		});
	}
	else
	{
		var msg = "Please enter all required details";
		if (passwordDetails == false) { msg += " and ensure the new password matches the confirmation password"; }
		cart_displayAlertDialog ('alertdialog', '', msg, {});
	}
}


function cart_resetpassword ()
{
	trimElements (['#resetPasswordEmail']);
	if (isValidEmailAddress ($('#resetPasswordEmail').val ()))
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "cart", method: "resetPassword", email: $('#resetPasswordEmail').val () },
			async: false,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				var msg = '';
				if (data === "BADEMAILERROR") { msg = 'Please enter a valid e-mail address'; }
				else if (data == "EMAILNOTFOUNDERROR") { msg = 'E-mail address not found'; }
				else if (data == "SYSTEMERROR") { msg = 'An error occurred.\n\nPlease try again later'; }
				else if (data == "SUCCESS") { msg = 'An e-mail has been sent to ' + $('#resetPasswordEmail').val () + ' with details on how to reset your password'; }
				else { msg = 'Failed to send the reset password e-mail.\n\nPlease try again later'; }

				cart_displayAlertDialog ('alertdialog', '', msg, {});

				if (data == "SUCCESS") { $.colorbox.close (); }
			}
		});
	}
	else
	{
		cart_displayAlertDialog ('alertdialog', '', 'Please enter a valid e-mail address', {});
	}
}

function cart_displayresetpassword ()
{
	$.colorbox ({html:$('#resetpasswordtab').html ()});
	return false;
}

function cart_displaysubmitreviewform ()
{
	displayJQMDialog ($('#submitreviewdialog'), {});
	return false;
}

function cart_submitreview ()
{
	trimElements (['#review_type', '#review_name', '#review_email', '#review_location', '#review_content', '#review_item']);
	if ($('#review_type').val () != '' && $('#review_name').val () != '' && isValidEmailAddress ($('#review_email').val ()) && $('#review_location').val () != '' && $('#review_content').val () != '' && $('#review_item').val () != '')
	{
		hideJQMDialog ($('#submitreviewdialog'));
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "product", method: "submitReview", name: $('#review_name').val (), email: $('#review_email').val (), location: $('#review_location').val (), review: $('#review_content').val (), item: $('#review_item').val (), type: $('#review_type') },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				var msg = '';
				if (data === "BADDETAILSERROR") { msg = 'Every field must be filled in'; }
				else if (data == "REVIEWSENDERROR") { msg = 'An error occurred.\n\nPlease try again later'; }
				else if (data == "SUCCESS") { msg = 'Your review has been submitted!'; }
				else { msg = 'Failed to submit your review.\n\nPlease try again later'; }

				hideJQMDialog ($('#submitreviewdialog'));
				cart_displayAlertDialog ('alertdialog', '', msg, {});

				if (data != "SUCCESS") { displayJQMDialog ($('#submitreviewdialog'), {}); }
				else { hideJQMDialog ($('#submitreviewdialog')); }
			}
		});
	}
	else
	{
		var msg = 'The following fields need to be fixed:\n\n';
		if ($('#review_type').val () == '') { msg += 'Type\n'; }
		if ($('#review_name').val () == '') { msg += 'Name\n'; }
		if (!isValidEmailAddress ($('#review_email').val ())) { msg += 'Email address\n'; }
		if ($('#review_location').val () == '') { msg += 'Location\n'; }
		if ($('#review_content').val () == '') { msg += 'Review\n'; }
		if ($('#review_item').val () == '') { msg += 'Item\n'; }

		cart_displayAlertDialog ('alertdialog', '', msg, {});
	}
}

function cart_displayproductfaqform ()
{
	displayJQMDialog ($('#productfaqdialog'), {});
	return false;
}

function cart_submitfaq ()
{
	trimElements (['#faq_name', '#faq_email', '#faq_content', '#faq_item', '#faq_type']);
	if ($('#faq_name').val () != '' && isValidEmailAddress ($('#faq_email').val ()) && $('#faq_content').val () != '' && $('#faq_item').val () != '' && $('#faq_type').val () != '')
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "perform", method: "submitFAQ", name: $('#faq_name').val (), email: $('#faq_email').val (), content: $('#faq_content').val (), item: $('#faq_item').val (), type: $('#faq_type').val () },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				var msg = '';
				if (data === "BADDETAILSERROR") { msg = 'Every field must be filled in'; }
				else if (data == "FAQSENDERROR") { msg = 'An error occurred.\n\nPlease try again later'; }
				else if (data == "SUCCESS") { msg = 'Your enquiry has been submitted!'; }
				else { msg = 'Failed to submit your enquiry.\n\nPlease try again later'; }

				cart_displayAlertDialog ('alertdialog', '', msg, {});

				if (data == "SUCCESS") { $('#faq_form_container').toggle (); }
			}
		});
	}
	else
	{
		var msg = 'The following fields need to be fixed:\n\n';
		if ($('#faq_name').val () == '') { msg += 'Name\n'; }
		if (!isValidEmailAddress ($('#faq_email').val ())) { msg += 'Email address\n'; }
		if ($('#faq_content').val () == '') { msg += 'Ask Question\n'; }
		if ($('#faq_item').val () == '') { msg += 'Item\n'; }
		if ($('#faq_type').val () == '') { msg += 'Type\n'; }

		cart_displayAlertDialog ('alertdialog', '', msg, {});
	}
}

function cart_copyregistrationdetails (prefix1, prefix2)
{
	var fields = ['company', 'firstname', 'lastname', 'address1', 'address2', 'suburb', 'postcode', 'state'];
	for (var c = 0; c < fields.length; c++)
	{
		$('#params_' + prefix2 + fields[c]).val ($('#params_' + prefix1 + fields[c]).val ());
	}

	return false;
}

function cart_generateaddresses (list, newelementname, element, prefix)
{
	var el = $('#' + element);
	if (el != undefined)
	{
		if (list.length > 0)
		{
			el.append ($('<span class="cart-form-field"><select name="' + newelementname + '" id="' + newelementname + '" style="width:99%;" onchange="javascript:cart_copyaddresstofields(\'' + newelementname + '\', \'' + prefix + '\');"><option value=""></option></select></span>'));
			for (var c = 0; c < list.length; c++)
			{
				var value = '';
				for (var d = 0; d < list[c].length; d++)
				{
					value += list[c][d] + ' ';
				}

				$('#' + newelementname).append ($('<option value="' + c + '">' + value + '</option>'));
			}
		}
	}
}

function cart_copyaddresstofields (element, prefix)
{
	if (prefix == 's') { list = shipaddresses; }
	else { list = billaddresses; }

	var el = $('#' + element);
	if (el != undefined && list[el.val()].length > 0)
	{
		var selected = el.val ();
		$('#params_address_' + prefix + 'company').val (htmlspecialchars_decode (list[selected][0]));
		$('#params_address_' + prefix + 'firstname').val (htmlspecialchars_decode (list[selected][1]));
		$('#params_address_' + prefix + 'lastname').val (htmlspecialchars_decode (list[selected][2]));
		$('#params_address_' + prefix + 'address1').val (htmlspecialchars_decode (list[selected][3]));
		$('#params_address_' + prefix + 'address2').val (htmlspecialchars_decode (list[selected][4]));
		$('#params_address_' + prefix + 'suburb').val (htmlspecialchars_decode (list[selected][5]));
		$('#params_address_' + prefix + 'postcode').val (htmlspecialchars_decode (list[selected][7]));
		$('#params_address_' + prefix + 'state').val (htmlspecialchars_decode (list[selected][6]));
	}

	return false;
}

function cart_applycoupon ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "cart", method: "applyCoupon", params: $('#cartCheckoutForm').serializeArray () },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));
			details = cart_switchstep (data);
			if (details.step != '') { cart_displaycartstep (details.step); }
			else { cart_displayAlertDialog ('alertdialog', '', data, {}); }
		}
	});
	return false;
}

function cart_applyrewardpoints ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "cart", method: "applyRewardPoints", params: $('#cartCheckoutForm').serializeArray () },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));
			details = cart_switchstep (data);
			if (details.step != '') { cart_displaycartstep (details.step); }
			else { cart_displayAlertDialog ('alertdialog', '', data, {}); }
		}
	});
	return false;
}

function cart_placeorder (checkShipping, checkPayment)
{
	$('#btnPlaceOrder').attr ('disabled', true).css ('display', 'none');

	trimElements (['#cartCheckoutForm #params_shippingmethod', '#cartCheckoutForm #params_paymentmethod']);

	var selectedShipping = (checkShipping == true) ? $("#cartCheckoutForm #params_shippingmethod").val() : true;
	var selectedPayment = (checkPayment == true) ? $("#cartCheckoutForm #params_paymentmethod").val () : true;
	if (selectedShipping != '' && selectedPayment != '')
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "cart", method: "placeOrder", params: $('#cartCheckoutForm').serializeArray () },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				details = cart_switchstep (data);
				if (details.msg != '') { cart_displayAlertDialog ('alertdialog', '', details.msg, {}); }
				if (details.step != '') { cart_displaycartstep (details.step); }
				else
				{
					re = new RegExp ('^REDIRECT\_(.*)$');
					m = re.exec (data);
					if (m != null)
					{
						displayJQMDialog ($('#waitdialog'), {modal:true});
						redirectToURL (m[1], true);
					}
					else
					{
						cart_displayAlertDialog ('alertdialog', '', data, {});
						$('#btnPlaceOrder').attr ('disabled', false).css ('display', 'block');
					}
				}
			}
		});
	}
	else
	{
		var msg = 'The following fields need to be filled in:\n\n';
		if ($('#cartCheckoutForm #params_shippingmethod').val () == '') { msg += 'Shipping\n'; }
		if ($('#cartCheckoutForm #params_paymentmethod').val () == '') { msg += 'Payment Method\n'; }

		cart_displayAlertDialog ('alertdialog', '', msg, {});

		$('#btnPlaceOrder').attr ('disabled', false).css ('display', 'block');
	}

	return false;
}

function cart_applyshippingcost ()
{
	var shipcost = 0;
	var shippingvalue = $("#cartCheckoutForm #params_shippingmethod").val();
	if (shippingvalue != '')
	{
		for (var c = 0; c < cart_shippingmethods.length; c++)
		{
			if (cart_shippingmethods[c][0] == shippingvalue)
			{
				shipcost = cart_shippingmethods[c][1];
				break;
			}
		}
	}

	$("#shippingcost").html (shipcost.toFixed (2));
	cart_calculatecartcost ();
	return false;
}

function cart_calculatecartcost ()
{
	var total = 0;
	var subtotalcost = parseFloat ($("#subtotalcost").html());
	var shipcost = parseFloat ($("#shippingcost").html());
	var coupondiscount = parseFloat ($("#coupondiscount").html());
	var rewarddiscount = parseFloat ($("#rewarddiscount").html());

	if (!isNaN (subtotalcost)) { total += subtotalcost; }
	if (!isNaN (shipcost)) { total += shipcost; }
	if (!isNaN (coupondiscount)) { total += coupondiscount; }
	if (!isNaN (rewarddiscount)) { total += rewarddiscount; }

	$("#ordertotalcost").html (total.toFixed (2));

	if (taxrate > 0 && $("#ordertaxtotal").length > 0) { $("#ordertaxtotal").html ((total - (total / (1 + (taxrate)))).toFixed (2)); }
}

function cart_submitProductRequest (pid, pre, app)
{
	trimElements (['#' + pre + 'product-' + pid + '-oosemail' + app]);

	var email = $('#' + pre + 'product-' + pid + '-oosemail' + app).val ();
	var vid = $('#' + pre + 'product-' + pid + '-oosform' + app + ' input[type=checkbox]');
	var checkedvid = $('#' + pre + 'product-' + pid + '-oosform' + app + ' input[type=checkbox]:checked');

	if (pid != '' && isValidEmailAddress (email) && ((vid.length == 0) || (vid.length > 0 && checkedvid.length > 0)))
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "product", method: "submitProductRequest", productId: pid, variationId: checkedvid.serializeArray (), email: email },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				var msg = '';
				if (data === "BADDETAILSERROR") { msg = 'Every field must be filled in'; }
				else if (data == "REQUESTSENDERROR") { msg = 'An error occurred.\n\nPlease try again later'; }
				else if (data == "SUCCESS") { msg = 'Your request has been submitted. You will be notified when the product is in stock.'; }
				else { msg = 'Failed to submit your request.\n\nPlease try again later'; }

				cart_displayAlertDialog ('alertdialog', '', msg, {});
			}
		});
	}
	else
	{
		var msg = 'The following fields need to be fixed:\n\n';
		if (!isValidEmailAddress (email)) { msg += 'Email address\n'; }
		if (vid.length > 0 && checkedvid.length == 0) { msg += 'A product must be selected\n'; }

		cart_displayAlertDialog ('alertdialog', '', msg, {});
	}
}

function cart_alertnotempty (message)
{
	if (message != '') { cart_displayAlertDialog ('alertdialog', '', message, {}); }
	return false;
}

function cart_displayAlertDialog (element, title, message, params)
{
	var isModal = (params['modal'] != undefined) ? params['modal'] : true;		// true or false
	var fadespeed = (params['fadespeed'] != undefined) ? params['fadespeed'] : 350;		// false = no fade
	var opacity = (params['opacity'] != undefined) ? params['opacity'] : 1.00;		// Value from 0 to 1
	var timer = null;

	var openFunc = function (hash)
	{
		hash.w.css ('opacity', opacity);
		if (fadespeed != false) { hash.w.fadeIn (fadespeed, function() { hash.w.show (); }); }
		else { hash.w.show (); }

		$('#' + element + ' #alertdialogokbtn').blur (function() { if ($('#' + element).css('display') != 'none') { $('#' + element + ' #alertdialogokbtn').focus (); } });
		$('#' + element + ' #alertdialogokbtn').focus ();
		$('#' + element + ',#' + element + ' #alertdialogokbtn').keyup (function(event) { if (event.keyCode == 13 || event.keyCode == 32 || event.keyCode == 27) { hideJQMDialog ($('#alertdialog')); } });
	};

	var closeFunc = function (hash)
	{
		hash.w.css ('opacity', opacity);
		if (fadespeed != false) { hash.w.fadeOut (fadespeed, function() { hash.o.remove (); }); }
		else { hash.o.remove (); hash.w.hide (); }
	};

	title = title.replace (/\n/gi, "<br />");
	message = message.replace (/\n/gi, "<br />");

	if (title != '') { $('#' + element + ' #' + element + 'title').html (title); }
	$('#' + element + ' #' + element + 'text').html (message);
	displayJQMDialog ($('#' + element), {modal:isModal, onShow:openFunc, onHide:closeFunc});
}

function cart_displaycheckouttab_popup (delay, fadetime)
{
	var coords = $('#header-checkout').offset ();
	var coordspos = $('#header-checkout').position ();
	var position = $('#header-checkout').css ('position');

	$('#header-checkout').css ({'position':'fixed', 'top':coords.top});

	$('#cart-disp').css ('display', 'block');

	$('#header-checkout').delay (delay).fadeTo (fadetime, 0, function ()
	{
		$(this).css ({'position':position, 'top':coordspos.top, 'left':coordspos.left});
		toggle ('#cart-disp', 'slide', 0);
		$(this).fadeTo (0, 1);
	});
}

function cart_displaypaymentmethod ()
{
	$('.payment_method').css ('display', 'none');

	var currentmethod = $('#params_paymentmethod').val ();
	if (currentmethod != '')
	{
		$('#payment_method_' + currentmethod).css ('display', 'block');
		$('#payment_method_' + currentmethod + '_display').css ('display', 'block');
	}

	return false;
}

function cart_displaycvninfo ()
{
	$.colorbox ({html:$('#cvndetails').html ()});
	return false;
}

function cart_removeorderbtn ()
{
	$('#btnPlaceOrder').css ('disabled', 'disabled');
	$('#btnPlaceOrder').css ('display', 'none');
	displayJQMDialog ($('#waitdialog'), {modal:true});

	return true;
}

function configureBrowserUpgrade ()
{
	return {vs: {i:7,f:3.5,o:10.5,s:2,n:9}, reminder: 6, text: "Your browser (%s) is <b>out of date</b>. It has known <b>security flaws</b> and may <b>not display all features</b> of this and other websites. <a%s>Learn how to update your browser</a>.<br />MrSupplement recommends using the latest version of either <a href=\"http://www.mozilla.com/firefox/\">Firefox</a> or <a href=\"http://www.opera.com/\">Opera</a>.", newwindow: true};
}

function displayJQMDialog (dlg, params)
{
	if (dlg.length > 0 && !dlg.is (":visible"))
	{
		dlg.jqm (params);
		dlg.jqmShow ();
	}
	return false;
}

function hideJQMDialog (dlg)
{
	if (dlg.length > 0 && $.isFunction (dlg.jqmHide) && dlg.is (":visible")) { dlg.jqmHide (); }
	return false;
}

// Sort by Category
function sortCategory ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "category", method: "sort", categoryID: $("#categoryID").val(), categoryParentID: $("#categoryParentID").val(), sortBy: $("#sortBy").val(), orderBy: $("#orderBy").val() },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));
			$('#product-wrapper').html (data);
			ElementsHeight100 ();
			paginatePage (paginationvars.container, paginationvars.itemcontainer, paginationvars.navpanel, paginationvars.infopanel, paginationvars.infomsg, paginationvars.perpage, paginationvars.links, paginationvars.onepagenavdisplay);
		}
	});

	return false;
}

// Sort by Brand
function sortBrand ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "brand", method: "sort", brandID: $("#brandID").val(), sortBy: $("#sortBy").val(), orderBy: $("#orderBy").val() },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));
			$('#product-wrapper').html(data);
			ElementsHeight100 ();
			paginatePage (paginationvars.container, paginationvars.itemcontainer, paginationvars.navpanel, paginationvars.infopanel, paginationvars.infomsg, paginationvars.perpage, paginationvars.links, paginationvars.onepagenavdisplay);
		}
	});

	return false;
}

// Sort content
function sortContent ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "article", method: "sort", categoryContentID: $("#categoryContentID").val(), subcategoryContentID: $("#subcategoryContentID").val(), sortBy: $("#sortBy").val(), orderBy: $("#orderBy").val() },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));
			$('#content-wrapper').html(data);
			ElementsHeight100 ();
			$.fn.pajinate.goto (0);
		}
	});

	return false;
}

function sortVideos ()
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "video", method: "sort", vcID: $("#vcID").val(), sortBy: $("#sortBy").val(), orderBy: $("#orderBy").val() },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));
			$('#content-wrapper').html(data);
			ElementsHeight100 ();
			$.fn.pajinate.goto (0);
		}
	});

	return false;
}

function ElementsHeight100 ()
{
	if ($('.100heightproducts').length > 0) { $('.100heightproducts').equalHeightColumns(); }
	if ($('.100heightarticles').length > 0) { $('.100heightarticles').equalHeightColumns(); }
	if ($('.100heightbrands').length > 0) { $('.100heightbrands').equalHeightColumns(); }
}

$(document).ready(function()
{
	$(".star").live ('click', function ()
	{
		var rating = ($("input[@name='star-rating']:checked").val());
		if ($("#contentID").length > 0)
		{
			var id = $("#contentID").val ();
			var action = "content";
		}
		else if ($("#videoID").length > 0)
		{
			var id = $("#videoID").val ();
			var action = "video";
		}
		else { return false; }

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: action, method: "submitvote", id: id, vote: rating },
			async: true,
			success: function (data)
			{
				if (data != 'ERROR')
				{
					$("#ratingbar").html (data);
					alert ('Thanks for your feedback!');
				}
			}
		});
	});
})

function isValidEmailAddress (email)
{
	email = $.trim (email);
	var reg = /^[^ \t\r\n]+\@[^ \t\r\n]+\.[^ \t\r\n]+$/i;
	return reg.test (email);
}

function toggle (element, effect, duration)
{
	if (effect == 'slide') { $(element).slideToggle (duration); }
	else { $(element).toggle (duration); }
	return false;
}

function hideElement (element)
{
	$(element).css ('display', 'block');
	return false;
}

function openAndHide (element, button)
{
	$(element).css ('display', 'block');
	$(button).css ('display', 'none');
	return false;
}

function displayToggleHeight (button, element, height)
{
	var elementHeight = parseInt ($('#' + element).css ('height').replace (/px/gi, ''));
	var intHeight = parseInt (height.replace (/px/gi, ''));
	if (elementHeight > intHeight)
	{
		$('#' + button).css ('display', 'inline');
		$('#' + element).css ('height', height);
	}
	else
	{
		$('#' + button).css ('display', 'none');
	}
}

function toggleHeight (button, element, height)
{
	$('#' + button).css ('display', 'none');
	if ($('#' + element).css ('height') != 'auto') { height = 'auto'; }
	$('#' + element).css ('height', height);
	return false;
}

function addToFav (type, url)
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "perform", method: "addToFav", op_type: type, op_url: url },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));

			var msg = '';
			if (data == 'ERR_BADDETAILS' || data == 'ERR_BADURL' || data == 'ERR_ADDERROR') { msg = 'There was a problem adding this item to your favourites. Please try again later'; }
			else if (data == 'ERR_NOTLOGGEDIN') { msg = 'You must be logged in to add to your favourites'; }
			else if (data == 'ERR_MAXFAV') { msg = 'You have already reached your favourite limit. Please remove old favourites and try again'; }
			else if (data == 'ERR_ALREADYFAV') { msg = 'This item is already in your favourites'; }
			else if (data == 'MSG_SUCCESS') { msg = 'The item has been added to your favourites'; }
			else { msg = 'An unknown error occurred. Please try again later'; }

			cart_displayAlertDialog ('alertdialog', '', msg, {});
		}
	});
}

function removeFromFav (type, url, element)
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	$.ajax
	({
		type: "POST",
		url: sitebaseurl + "ajax",
		data: { action: "perform", method: "removeFromFav", op_type: type, op_url: url },
		async: true,
		success: function (data)
		{
			hideJQMDialog ($('#waitdialog'));

			var msg = '';
			if (data == 'ERR_BADDETAILS' || data == 'ERR_BADURL' || data == 'ERR_REMOVEERROR') { msg = 'There was a problem removing this item from your favourites. Please try again later'; }
			else if (data == 'ERR_NOTLOGGEDIN') { msg = 'You must be logged in to remove from your favourites'; }
			else if (data == 'MSG_SUCCESS')
			{
				msg = 'The item has been removed from your favourites';
				if (element != '') { $(element).remove (); }
			}
			else { msg = 'An unknown error occurred. Please try again later'; }

			cart_displayAlertDialog ('alertdialog', '', msg, {});
		}
	});
}

function displaySpecialPopup (type, id)
{
	if ($('#content-cache #' + type + '-' + id).length == 0)
	{
		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: type, method: "popup", id: id },
			async: true,
			success: function (data)
			{
				$('<div id="' + type + '-' + id + '"></div>').appendTo ('#content-cache');
				$('#content-cache #' + type + '-' + id).html (data);
			}
		});
	}

	return $('#content-cache #' + type + '-' + id).html ();
}

function redirectToURL (url, replace)
{
	if (url != '')
	{
		if (replace == true) { window.location.replace (url); }
		else { window.location.href = url; }
	}
	return false;
}

function importJS (url)
{
	$('body').append ('<script type="text/javascript" language="Javascript" src="' + url + '"></script>');
}

function executeSearch (min, query, type)
{
	var queryval = query.val ();
	if (queryval.length < parseInt (min))
	{
		cart_displayAlertDialog ('alertdialog', '', 'Your search query must be at least ' + min + ' characters long', {});
		return false;
	}
	else
	{
		return true;
	}
}

function paginatePage (container, itemcontainer, navpanel, infopanel, infomsg, perpage, links, onepagenavdisplay)
{
	$(container).pajinate
	({
		nav_label_first : ' << ',
		nav_label_last : ' >> ',
		nav_label_prev : ' Back ',
		nav_label_next : ' Next ',
		items_per_page : perpage,
		num_page_links_to_display: links,
		item_container_id: itemcontainer,
		nav_panel_id: navpanel,
		one_page_display_nav : onepagenavdisplay,
		hide_label_first_on_page_0 : true,
		hide_label_prev_on_page_0 : true,
		hide_label_next_on_page_last : true,
		hide_label_last_on_page_last : true,
		info_label_id : infopanel,
		info_label : infomsg
	});
}

function displayImagePopup (image)
{
	// Thumbnail image clicked, so instantiate the full size popup
	$.colorbox ({html:'<img src="' + image + '" />'});
	return false;
}

function lazyLoadImages (selector)
{
	$(selector + ":in-viewport").each (function (item)
	{
		$(this).next().attr ('src', $(this).attr ('loadsrc'));
		$(this).remove ();
	});
}

function changeNutritionalPanel (selection)
{
	$('.nutritionwrap').css ('display', 'none');
	$('#nutritionpanel-' + $(selection).val ()).css ('display', 'block');
}

function trimElements (elem)
{
	for (var c = 0; c < elem.length; c++)
	{
		$(elem[c]).val ($.trim ($(elem[c]).val ()));
	}
}

function changeValue (elem, newtxt, oldtxt)
{
	if ($(elem).val () == oldtxt) { $(elem).val (newtxt); }
}

function loadAndDisplayVideo (id)
{
	$.colorbox.close ();
	displayJQMDialog ($('#waitdialog'), {modal:true});

	vidid = encodeURIComponent (id);
	if ($('#video-cache #' + vidid).length == 0)
	{
		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "video", method: "popup", id: id },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));
				if (data != '')
				{
					$('<div id="' + vidid + '"></div>').appendTo ('#video-cache');
					$('#video-cache #' + vidid).html (data);

					$.colorbox ({ html:$('#video-cache #' + vidid).html () });
				}
				else
				{
					cart_displayAlertDialog ('alertdialog', '', 'Video Not Found', {});
				}
			}
		});
	}
	else
	{
		hideJQMDialog ($('#waitdialog'));
		$.colorbox ({html:$('#video-cache #' + vidid).html ()});
	}

	return false;
}

function getProductReviewForm (pid)
{
	displayJQMDialog ($('#waitdialog'), {modal:true});

	if (pid != '')
	{
		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "customer", method: "getProductTestimonialForm", productID: pid },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				if (data == "NOTLOGGEDIN") { window.location.reload (); }
				else if (data == "PRODUCTNOTFOUND") { cart_displayAlertDialog ('alertdialog', '', 'Product not found', {}); }
				else { $.colorbox ({html:data}); }
			}
		});
	}
	else
	{
		cart_displayAlertDialog ('alertdialog', '', 'Please select a valid product to review', {});
	}

	return false;
}

function addProductReview ()
{
	if (confirm ('Are you sure you are ready to send this product review?') == true)
	{
		trimElements (['#params_productid', '#params_reviewmessage']);
		if ($('#params_productid').val () != '' && $('#params_reviewmessage').val () != '')
		{
			displayJQMDialog ($('#waitdialog'), {modal:true});

			$.ajax
			({
				type: "POST",
				url: sitebaseurl + "ajax",
				data: { action: "customer", method: "addProductTestimonial", params: $('#addProductTestimonialForm').serializeArray () },
				async: true,
				success: function (data)
				{
					hideJQMDialog ($('#waitdialog'));

					if (data == "NOTLOGGEDIN") { window.location.reload (); }
					else if (data == "TRUE")
					{
						$.colorbox.close();
						$("#product-review-"+ $("#params_productid").val ()).remove ();
						cart_displayAlertDialog ('alertdialog', '', 'Thank you for your review', {});
					}
					else { cart_displayAlertDialog ('alertdialog', '', data, {}); }
				}
			});
		}
		else
		{
			var msg = 'The following fields need to be filled in:\n\n';
			if ($('#params_productid').val () == '') { msg += 'Product\n'; }
			if ($('#params_reviewmessage').val () == '') { msg += 'Review\n'; }

			cart_displayAlertDialog ('alertdialog', '', msg, {});
		}

		return false;
	}
}

function addSiteTestimonial ()
{
	$("#testimonialTY").toggle (false);

	trimElements (['#params_testimonialrating', '#params_testimonialmessage', '#params_testimoniallocation']);
	if ($('#params_testimonialrating').val () != '' && $('#params_testimonialmessage').val () != '' && $('#params_testimoniallocation').val() != '')
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "customer", method: "addSiteTestimonial", params: $('#addSiteTestimonialForm').serializeArray () },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				if (data == "NOTLOGGEDIN") { window.location.reload (); }
				else if (data == "TRUE")
				{
					$.ajax
					({
						type: "POST",
						url: sitebaseurl + "ajax",
						data: { action: "customer", method: "getSiteTestimonial", params: {} },
						async: true,
						success: function (data)
						{
							if (data == "NOTLOGGEDIN") { window.location.reload (); }
							else { $("#customerSiteTestimonial").html (data); }
						}
					});
				}
				else { cart_displayAlertDialog ('alertdialog', '', data, {}); }
			}
		});
	}
	else
	{
		var msg = 'The following fields need to be filled in:\n\n';
		if ($('#params_testimonialrating').val () == '') { msg += 'Rate our service\n'; }
		if ($('#params_testimoniallocation').val () == '') { msg += 'Provide your location\n'; }
		if ($('#params_testimonialmessage').val () == '') { msg += 'Leave the team a message\n'; }

		cart_displayAlertDialog ('alertdialog', '', msg, {});
	}

	return false;
}

function updateCustomerProfile ()
{
	$("#profileSaveNotice").toggle (false);

	trimElements (['#params_email', '#params_password', '#params_firstname', '#params_lastname', '#params_contactnumber']);
	if ($('#params_email').val () != '' && $('#params_password').val () != '' && $('#params_firstname').val () != '' && $('#params_lastname').val () != '' && $('#params_contactnumber').val () != '')
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "customer", method: "updateCustomer", params: $('#profileFormUpdate').serializeArray () },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				if (data == "NOTLOGGEDIN") { window.location.reload (); }
				else if (data == "TRUE") { $("#profileSaveNotice").slideDown (200).delay (10000).slideUp (200); }
				else { cart_displayAlertDialog ('alertdialog', '', data, {}); }
			}
		});
	}
	else
	{
		var msg = 'The following fields need to be filled in:\n\n';
		if ($('#params_email').val () == '') { msg += 'Email Address\n'; }
		if ($('#params_password').val () == '') { msg += 'Current Password\n'; }
		if ($('#params_firstname').val () == '') { msg += 'First Name\n'; }
		if ($('#params_lastname').val () == '') { msg += 'Last Name\n'; }
		if ($('#params_contactnumber').val () == '') { msg += 'Contact Number\n'; }

		cart_displayAlertDialog ('alertdialog', '', msg, {});
	}

	return false;
}

function updateCustomerPassword ()
{
	$("#profileSaveNotice").toggle (false);

	trimElements (['#params_password', '#params_newpassword', '#params_cnewpassword']);
	if ($('#params_password').val () != '' && $('#params_newpassword').val () != '' && ($('#params_newpassword').val () == $('#params_cnewpassword').val ()))
	{
		displayJQMDialog ($('#waitdialog'), {modal:true});

		$.ajax
		({
			type: "POST",
			url: sitebaseurl + "ajax",
			data: { action: "customer", method: "updateCustomerPassword", params: $('#passwordFormUpdate').serializeArray () },
			async: true,
			success: function (data)
			{
				hideJQMDialog ($('#waitdialog'));

				if (data == "NOTLOGGEDIN") { window.location.reload (); }
				else if (data == "TRUE") { $("#profileSaveNotice").slideDown (200).delay (10000).slideUp (200); }
				else { cart_displayAlertDialog ('alertdialog', '', data, {}); }
			}
		});
	}
	else
	{
		if ($('#params_newpassword').val () != $('#params_cnewpassword').val ())
		{
			var msg = 'The new password and confirmation password do not match\n';
		}
		else
		{
			var msg = 'The following fields need to be filled in:\n\n';
			if ($('#params_password').val () == '') { msg += 'Current Password\n'; }
			if ($('#params_newpassword').val () == '') { msg += 'New Password\n'; }
			if ($('#params_cnewpassword').val () == '') { msg += 'Confirm New Password\n'; }
		}

		cart_displayAlertDialog ('alertdialog', '', msg, {});
	}

	return false;
}

function deleteProductRequest (rid)
{
	if (confirm ('Are you sure you are ready to remove this product request?') == true)
	{
		if (rid != '')
		{
			displayJQMDialog ($('#waitdialog'), {modal:true});

			$.ajax
			({
				type: "POST",
				url: sitebaseurl + "ajax",
				data: { action: "customer", method: "deleteProductRequest", requestID: rid },
				async: true,
				success: function (data)
				{
					hideJQMDialog ($('#waitdialog'));

					if (data == "NOTLOGGEDIN") { window.location.reload (); }
					else if (data == "TRUE")
					{
						$("#rpItem" + rid).remove ();
						cart_displayAlertDialog ('alertdialog', '', 'Your request has been removed', {});
					}
					else { cart_displayAlertDialog ('alertdialog', '', data, {}); }
				}
			});
		}
		else
		{
			cart_displayAlertDialog ('alertdialog', '', 'Bad request', {});
		}
	}

	return false;
}






function htmlspecialchars_decode (string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Mirek Slugen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Mateusz "loonquawl" Zalega
    // +      input by: ReverseSyntax
    // +      input by: Slawomir Kaniecki
    // +      input by: Scott Cariss
    // +      input by: Francois
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Ratheous
    // +      input by: Mailfaker (http://www.weedem.fr/)
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: htmlspecialchars_decode("<p>this -&gt; &quot;</p>", 'ENT_NOQUOTES');
    // *     returns 1: '<p>this -> &quot;</p>'
    // *     example 2: htmlspecialchars_decode("&amp;quot;");
    // *     returns 2: '&quot;'
    var optTemp = 0,
        i = 0,
        noquotes = false;
    if (typeof quote_style === 'undefined') {
        quote_style = 2;
    }
    string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
    var OPTS = {
        'ENT_NOQUOTES': 0,
        'ENT_HTML_QUOTE_SINGLE': 1,
        'ENT_HTML_QUOTE_DOUBLE': 2,
        'ENT_COMPAT': 2,
        'ENT_QUOTES': 3,
        'ENT_IGNORE': 4
    };
    if (quote_style === 0) {
        noquotes = true;
    }
    if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
        quote_style = [].concat(quote_style);
        for (i = 0; i < quote_style.length; i++) {
            // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
            if (OPTS[quote_style[i]] === 0) {
                noquotes = true;
            } else if (OPTS[quote_style[i]]) {
                optTemp = optTemp | OPTS[quote_style[i]];
            }
        }
        quote_style = optTemp;
    }
    if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
        string = string.replace(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
        // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP
    }
    if (!noquotes) {
        string = string.replace(/&quot;/g, '"');
    }
    // Put this in last place to avoid escape being double-decoded
    string = string.replace(/&amp;/g, '&');

    return string;
}

