function perSessionPageAlert(message,numTimesToShow)
{
	var cookieName = calcMD5(message);
	var displayedSoFar = 0;
	if(getCookie(cookieName) != "")
		displayedSoFar = parseInt(getCookie(cookieName));
	if(displayedSoFar < numTimesToShow)
	{
		$("#mainBody").prepend('<div class="pageMessage"><p>'+message+'</p><a href="#" class="noMoreMessage">Don\'t show me this again</a></div>');
		$(".noMoreMessage").click(function(event)
		{
			event.preventDefault();
			setCookie(cookieName,numTimesToShow,365);
			$(".pageMessage").fadeOut();
		});
		setCookie(cookieName,++displayedSoFar);
		$(".pageMessage").fadeIn();
	}
}

function pageAlert(message,numTimesToShow)
{
	var cookieName = calcMD5(message);
	var displayedSoFar = 0;
	if(getCookie(cookieName) != "")
		displayedSoFar = parseInt(getCookie(cookieName));
	if(displayedSoFar < numTimesToShow)
	{
		$("#mainBody").prepend('<div class="pageMessage"><p>'+message+'</p><a href="#" class="noMoreMessage">Don\'t show me this again</a></div>');
		$(".noMoreMessage").click(function(event)
		{
			event.preventDefault();
			setCookie(cookieName,numTimesToShow,182);
			$(".pageMessage").fadeOut();
		});
		setCookie(cookieName,++displayedSoFar,182);
		$(".pageMessage").fadeIn();
	}
	else
		setCookie(cookieName,displayedSoFar,182);
}

function setCookie(name,value,expireDays)
{
	var expDate = new Date();
	expDate.setDate(expDate.getDate()+expireDays);
	document.cookie=name+"="+escape(value)+((expireDays==null) ? "" : ";expires="+expDate.toUTCString());
}

function getCookie(name)
{
	if(document.cookie.length>0)
	{
		start=document.cookie.indexOf(name+"=");
		if(start!=-1)
		{
			start=start+name.length+1;
			end=document.cookie.indexOf(";",start);
			if(end==-1) end=document.cookie.length;
			return unescape(document.cookie.substring(start,end));
		}
	}
	return "";
}

function maskViewport()
{
	$("body").prepend("<div id=\"blocker\" style=\"position: fixed; z-index: 11; left: 0; right: 0; top: 0; bottom: 0; background-color: white; opacity: 0; filter: alpha(opacity=0);\"></div>");
	$("#blocker").fadeTo(500,.65);
}

function trim(string)
{
	return string.replace(/^\s+|\s+$/g,"");
}

function unmaskViewport()
{
	$("#blocker").fadeOut(500, function() {$("#blocker").remove();});
}

function destroyMessage()
{
	$("#messageWindow").remove();
}

function createMessage(message,buttonText,unmask,f)
{
	if(buttonText == null) buttonText = "Close";
	if(unmask == null) unmask = true;
	viewportWidth = $("html").innerWidth();
	if($("#messageWindow").length > 0) destroyMessage();
	leftPos = (viewportWidth/2)-150;
	$("body").append("<div id=\"messageWindow\" style=\"position: fixed; z-index: 101; left: "+leftPos+"px; top: 200px;\"><p>"+message+"</p><p style=\"text-align:left\"><a class=\"button\" id=\"closeMessage\">"+buttonText+"</a></p></div>");
	$("#closeMessage").focus();
	$("#closeMessage").click(function()
	{
		destroyMessage();
		if(unmask) unmaskViewport();
		if(f!=null) f();
	});
}

function createWaitMessage(message)
{
	viewportWidth = $("html").innerWidth();
	if($("#messageWindow").length > 0) destroyMessage();
	leftPos = (viewportWidth/2)-150;
	$("body").append("<div id=\"messageWindow\" style=\"position: fixed; z-index: 101; left: "+leftPos+"px; top: 200px;\"><p>"+message+"</p></div>");
}

function loadLoginModule()
{
	$.ajax({
		url: "/account/loggedin.jsp",
		cache: false,
		success: function(response)
		{
			if(trim(response)=="0")
			{
				destroyMessage();
				maskViewport();
				createWaitMessage("Loading...");
				$.ajax({
					url: "/account/test_webuser_service.jsp",
					cache: false,
					success: function(response)
					{
						destroyMessage();
						if(trim(response)=="0")
						{
							createMessage("The user login system is temporarily unavailable. Please try again in a little while.<br /><br />We apologize for any inconvenience.");
						}
						else
						{
							viewportWidth = $("html").innerWidth();
							leftPos = (viewportWidth/2)-245;
							$("body").append("<div id=\"loginRegister\" style=\"position: absolute; z-index: 100; left: "+leftPos+"px; top: 30px; display: none;\"></div>");
							$.ajax({
								url: "/login-register.jsp",
								cache: false,
								success: function(html)
								{
									$("#loginRegister").append(html);
									$.ajax(
									{
										type: "GET",
										url: "/scripts/login-register.js",
										dataType: "script",
										success: function()
										{
											$("#loginRegister #loginForm").show();
											$("#loginRegister").show();
											$("#loginRegister #fldLoginEmail").focus();
										}
									});
								}
							});
						}
					}
				});
			}
		}
	});
}

function loadRegisterModule(token)
{
	if(token==undefined) token = "";
	destroyMessage();
	maskViewport();
	createWaitMessage("Loading...");
	$.ajax({
		url: "/account/test_reg_services.jsp",
		cache: false,
		success: function(response)
		{
			destroyMessage();
			if(trim(response)=="0")
			{
				createMessage("The registrations system is temporarily unavailable. Please try again in a little while.<br /><br />We apologize for any inconvenience.");
			}
			else
			{
				viewportWidth = $("html").innerWidth();
				leftPos = (viewportWidth/2)-245;
				$("body").append("<div id=\"loginRegister\" style=\"position: absolute; z-index: 100; left: "+leftPos+"px; top: 30px; display: none;\"></div>");
				$.ajax({
					method: "post",
					url: "/login-register.jsp",
					data: "t="+token,
					cache: false,
					success: function(html)
					{
						$("#loginRegister").append(html);
						$.ajax(
						{
							type: "GET",
							url: "/scripts/login-register.js",
							dataType: "script",
							success: function()
							{
								$("#loginRegister #registerForm").show();
								$("#loginRegister").show();
								$("#loginRegister #fldEmail").focus();
							}
						});
					}
				});
			}
		}
	});
}

$(".printLink").live("click", function(event)
{
	event.preventDefault();
	window.print();
});

$(document).ready(function()
{
	$("#goMobile").click(function()
	{
		window.location.pathname = "/mobile";
	});
	$("#stayFull").click(function()
	{
		setCookie("preferFull","true",30);
		window.location.reload(true);
	});
	$("#login, .loginLink").live("click", function(event)
	{
		event.preventDefault();
		var parameters = window.location.search;
		if(parameters.length > 0)
		{
			parameters = "&" + parameters.substr(1);
		}
		if(location.protocol!="https:")
		{
			createWaitMessage("Establishing secure connection...");
			window.location = "https://"+window.location.hostname+window.location.pathname+"?ll"+parameters;
		}
		else
		{
			createWaitMessage("Loading...");
			loadLoginModule();
		}
	});
	
	$("#register, .registerLink").live("click", function(event)
	{
		event.preventDefault();
		var parameters = window.location.search;
		if(parameters.length > 0)
		{
			parameters = "&" + parameters.substr(1);
		}
		if(location.protocol!="https:")
		{
			createWaitMessage("Establishing secure connection...");
			window.location = "https://"+window.location.hostname+window.location.pathname+"?lr"+parameters;
		}
		else
		{
			createWaitMessage("Loading...");
			loadRegisterModule();
		}
	});
	
	$(".logoffLink").live("click", function(event)
	{
		event.preventDefault();
		$.ajax({
			url: "/account/logoff.jsp",
			cache: false,
			success: function()
			{
				window.location = "http://"+window.location.hostname+window.location.pathname + "?" + Math.floor(Math.random()*99999);
			}
		});
	});
	
	
	if(window.location.search.substring(0,3) == "?ll")
	{
		if(window.location.protocol == "https:")
			loadLoginModule();
		else
			window.location = "https://"+window.location.hostname+window.location.pathname+window.location.search;
	}
	if(window.location.search.substring(0,3) == "?lr")
	{
		if(window.location.protocol == "https:")
			loadRegisterModule();
		else
			window.location = "https://"+window.location.hostname+window.location.pathname+window.location.search;
	}
});

function addToCart(id)
{
	$.ajax(
	{
		type: "POST",
		url: "/checkout/add.jsp",
		data: "id="+id,
		success: function()
		{
			$("#cartLink").fadeIn(500);
		}
	});
}

function removeFromCart(id)
{
	$.ajax(
	{
		type: "POST",
		url: "/checkout/remove.jsp",
		data: "id="+id,
		success: function()
		{
			//UPDATE CART ON CURRENT PAGE
		}
	});
}

function emptyCart()
{
	$.ajax(
	{
		type: "GET",
		url: "/checkout/clear.jsp",
		success: function()
		{
			$("#cartLink").fadeOut(500);
		}
	});
}

/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Copyright (C) Paul Johnston 1999 - 2000.
 * Updated by Greg Holt 2000 - 2001.
 * See http://pajhome.org.uk/site/legal.html for details.
 */
 
/*
 * Convert a 32-bit number to a hex string with ls-byte first
 */
var hex_chr = "0123456789abcdef";
function rhex(num)
{
  str = "";
  for(j = 0; j <= 3; j++)
    str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
           hex_chr.charAt((num >> (j * 8)) & 0x0F);
  return str;
}
 
/*
 * Convert a string to a sequence of 16-word blocks, stored as an array.
 * Append padding bits and the length, as described in the MD5 standard.
 */
function str2blks_MD5(str)
{
  nblk = ((str.length + 8) >> 6) + 1;
  blks = new Array(nblk * 16);
  for(i = 0; i < nblk * 16; i++) blks[i] = 0;
  for(i = 0; i < str.length; i++)
    blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
  blks[i >> 2] |= 0x80 << ((i % 4) * 8);
  blks[nblk * 16 - 2] = str.length * 8;
  return blks;
}
 
/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally 
 * to work around bugs in some JS interpreters.
 */
function add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}
 
/*
 * Bitwise rotate a 32-bit number to the left
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}
 
/*
 * These functions implement the basic operation for each round of the
 * algorithm.
 */
function cmn(q, a, b, x, s, t)
{
  return add(rol(add(add(a, q), add(x, t)), s), b);
}
function ff(a, b, c, d, x, s, t)
{
  return cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t)
{
  return cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t)
{
  return cmn(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t)
{
  return cmn(c ^ (b | (~d)), a, b, x, s, t);
}
 
/*
 * Take a string and return the hex representation of its MD5.
 */
function calcMD5(str)
{
  x = str2blks_MD5(str);
  a =  1732584193;
  b = -271733879;
  c = -1732584194;
  d =  271733878;
 
  for(i = 0; i < x.length; i += 16)
  {
    olda = a;
    oldb = b;
    oldc = c;
    oldd = d;
 
    a = ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = ff(c, d, a, b, x[i+10], 17, -42063);
    b = ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = ff(d, a, b, c, x[i+13], 12, -40341101);
    c = ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = ff(b, c, d, a, x[i+15], 22,  1236535329);    
 
    a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = gg(c, d, a, b, x[i+11], 14,  643717713);
    b = gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = gg(c, d, a, b, x[i+15], 14, -660478335);
    b = gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = gg(b, c, d, a, x[i+12], 20, -1926607734);
    
    a = hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = hh(b, c, d, a, x[i+14], 23, -35309556);
    a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = hh(d, a, b, c, x[i+12], 11, -421815835);
    c = hh(c, d, a, b, x[i+15], 16,  530742520);
    b = hh(b, c, d, a, x[i+ 2], 23, -995338651);
 
    a = ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = ii(c, d, a, b, x[i+10], 15, -1051523);
    b = ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = ii(d, a, b, c, x[i+15], 10, -30611744);
    c = ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = ii(b, c, d, a, x[i+ 9], 21, -343485551);
 
    a = add(a, olda);
    b = add(b, oldb);
    c = add(c, oldc);
    d = add(d, oldd);
  }
  return rhex(a) + rhex(b) + rhex(c) + rhex(d);
}

