function emailLogin(e,f,a,q) {
 // e = event, f = form name, a = attributes, q = quantity
 var posx = 0;
 var posy = 0;
 if(!e) {
   var e = window.event;
 }
 var eventCode = (e.keyCode == '0') ? e.charCode : e.keyCode;
 if(eventCode == '13') {
   return false;
 }
 if((e.pageX || e.pageY)) {
   posx = e.pageX;
   posy = e.pageY;
 } else if((e.clientX || e.clientY)) {
   posx = e.clientX + document.body.scrollLeft;
   posy = e.clientY + document.body.scrollTop;
 }

 // posx and posy contain the mouse position relative to the document
 // Do something with this information
 // alert(posx+'x'+posy);
// if(getCookie('emailLogged') != 'true' && getCookie('noThanks') != 'true') {
   if(eventCode < 48 || eventCode > 57 || typeof eventCode == 'undefined') {
     var emailForm = document.getElementById('emailForm');
     var emailFormStyles = document.getElementById('emailForm').style;
     emailFormStyles.display = 'block';
     emailFormStyles.position = 'absolute';
     emailFormStyles.top = (posy - 120) + 'px';
     emailFormStyles.left = (posx - 350) + 'px';
     emailFormStyles.zIndex = '100';
     emailFormStyles.border = '1px solid black';
     emailFormStyles.background = '#FFF';
     document.getElementById('fromForm').value = f;
     if(typeof document.product_form != 'undefined' && f != 'Express Link') { // make sure we're on a product page
       var att1 = (typeof document.product_form.elements['option1'] != 'undefined') ? document.product_form.elements['option1'].value : '';
       var att2 = (typeof document.product_form.elements['option2'] != 'undefined') ? document.product_form.elements['option2'].value : '';
       var att3 = (typeof document.product_form.elements['option3'] != 'undefined') ? document.product_form.elements['option3'].value : '';
       var att4 = (typeof document.product_form.elements['option4'] != 'undefined') ? document.product_form.elements['option4'].value : '';
       var atts = att1 + '|' + att2 + '|' + att3 + '|' + att4;
       document.getElementById('atts').value = atts;
     }
     if(q != 'Express Link') {
       document.getElementById('qty').value = q;
     }
     return false;
   }
// }
}

/* POPMENU.JS */

//array push/pop - IE5Mac
function p2h_push( v )
{
  this[this.length]=v;
}

function p2h_pop()
{
   if(this.length > 0)
   {
  var v = this[this.length -1];
  this.length--;
  return( v );
   }
}

function P2H_ImgSwap(divName, imgPath)
{
  var lyr =document.getElementById(divName);
  if(lyr)
  {
    lyr.style.background = 'url('+imgPath+')';
  }
}

function P2H_GetElementsByClass(className)
{
    var c=0;
    var i=0;
    var tagCollect = new Array();
    var tags = document.getElementsByTagName("*");
if(tags.length == 0){ /*  Safari 1.0 kludge. */ tags=document.getElementsByTagName("div"); }

    for (i=0; i < tags.length; i++)
    {
        if (tags[i].className==className)
        {
        tagCollect[c]=tags[i];
            c++;
        }
    }
    return(tagCollect);
}

function P2H_SetVisibilityByC(className, show)
{
   var arg = 'hidden';
   var i=0;
   if(show){ arg = 'visible';}
   var lyrArray = P2H_GetElementsByClass(className);
   for(i=0; i < lyrArray.length; i++)
   {
     lyrArray[i].style.visibility = arg;
   }
}

function P2H_Menu(menuClassName, delay, level)
{
  P2H_StopClock();
  window.p2h_delay=delay;
  P2H_SetMenu(menuClassName, level);
  P2H_SetVisibilityByC(menuClassName, true);
  P2H_SetVisibilityByC(menuClassName+"hide", false);
  if(level==0){P2H_SetVisibilityByC("hidey", false);}
}

function P2H_MenuItem(level)
{
  P2H_StopClock();
  P2H_ClearMenu(level);
}

function P2H_ClearMenu(level)
{
  if(window.p2h_popmenuarray)
  {
    while(window.p2h_popmenuarray.length > level)
    {
  var cname = p2h_popmenuarray.pop()
      P2H_SetVisibilityByC(cname, false);
  P2H_SetVisibilityByC(cname+"hide", true);
    }
  }
  if(level==0){ P2H_SetVisibilityByC("hidey", true); }
}

function P2H_SetMenu(menuClassName, level)
{
  if(! window.p2h_popmenuarray)
  { 
  window.p2h_popmenuarray = new Array(); 
if(!window.p2h_popmenuarray.push){window.p2h_popmenuarray.push=p2h_push;}
if(!window.p2h_popmenuarray.pop){window.p2h_popmenuarray.pop=p2h_pop;}
  }
  P2H_ClearMenu(level);
  window.p2h_popmenuarray.push(menuClassName);
}

function P2H_StopClock()
{
  if(window.p2h_timeoutid)
  {
    clearTimeout(window.p2h_timeoutid);
    window.p2h_timeoutid = null;
  }
}

function P2H_StartClock()
{
  if(p2h_delay == 0){ P2H_CloseMenu(); return;}
  P2H_StopClock();
  window.p2h_timeoutid = setTimeout('P2H_CloseMenu()', window.p2h_delay);
}

function P2H_CloseMenu()
{
  P2H_StopClock();
  P2H_ClearMenu(0);
}




function PW_GetElementsByTagClass(tagName, className)
{
    var c=0;
    var i=0;
    var tagCollect = new Array();
    var tags = document.getElementsByTagName(tagName);
    for (i=0; i < tags.length; i++)
    {
        if (tags[i].className==className)
        {
    tagCollect[c]=tags[i];
            c++;
        }
    }
    return(tagCollect);
}


function PW_SetDisplay(cName, show)
{
     var arg = 'none';
     var i=0;
     if(show){ arg = 'block';}
     var lyrArray = PW_GetElementsByTagClass('li', cName);
     if(lyrArray != null)
     {  
       for(i=0; i < lyrArray.length; i++)
       {
           lyrArray[i].style.display=arg;
       }
     }
}

/* END POPMENU.JS */

function com_stewartspeak_replacement() {
/*
	Dynamic Heading Generator
    By Stewart Rosenberger
    http://www.stewartspeak.com/headings/

	This script searches through a web page for specific or general elements
	and replaces them with dynamically generated images, in conjunction with
	a server-side script.
*/


// replaceSelector(selector, phpfile, wordwrap, fontfile, size, background, foreground, store)
//replaceSelector("h4","/services/heading.php",false,"font.ttf","12","FFFFFF","999999","build200501");


var testURL = "/images/test.png";
var doNotPrintImages = false;
var printerCSS = "/replacement-print.css";
var hideFlicker = false;
var hideFlickerCSS = "/replacement-screen.css";
var hideFlickerTimeout = 1000;




/* ---------------------------------------------------------------------------
    For basic usage, you should not need to edit anything below this comment.
    If you need to further customize this script's abilities, make sure
	you're familiar with Javascript. And grab a soda or something.
*/

var items;
var imageLoaded = false;
var documentLoaded = false;

function replaceSelector(selector,url,wordwrap,font,size,foreground,background,store)
{
	if(typeof items == "undefined")
		items = new Array();

	items[items.length] = {selector: selector, url: url, wordwrap: wordwrap, font: font, size: size, foreground: foreground, background: background, store: store};
}

if(hideFlicker)
{		
	document.write('<link id="hide-flicker" rel="stylesheet" media="screen" href="' + hideFlickerCSS + '" />');		
	window.flickerCheck = function()
	{
		if(!imageLoaded)
			setStyleSheetState('hide-flicker',false);
	};
	setTimeout('window.flickerCheck();',hideFlickerTimeout)
}

if(doNotPrintImages)
	document.write('<link id="print-text" rel="stylesheet" media="print" href="' + printerCSS + '" />');

var test = new Image();
test.onload = function() { imageLoaded = true; if(documentLoaded) replacement(); };
test.src = testURL + "?date=" + (new Date()).getTime();

addLoadHandler(function(){ documentLoaded = true; if(imageLoaded) replacement(); });


function documentLoad()
{
	documentLoaded = true;
	if(imageLoaded)
		replacement();
}

function replacement()
{
     if (items) {
	for(var i=0;i<items.length;i++)
	{
		var elements = getElementsBySelector(items[i].selector);
		if(elements.length > 0) for(var j=0;j<elements.length;j++)
		{
			if(!elements[j])
				continue ;
		
			var text = extractText(elements[j]);
    		while(elements[j].hasChildNodes())
				elements[j].removeChild(elements[j].firstChild);

			var tokens = items[i].wordwrap ? text.split(' ') : [text] ;
			for(var k=0;k<tokens.length;k++)
			{
				var url = items[i].url + "?text="+ escape(tokens[k]+' ')+ "&selector="+ escape(items[i].selector)+ "&font="+ escape(items[i].font)+ "&size="+ escape(items[i].size)+ "&foreground="+ escape(items[i].foreground)+"&background="+ escape(items[i].background)+ "&store="+escape(items[i].store);
				var image = document.createElement("img");
				image.className = "replacement";
				image.alt = tokens[k] ;
				image.src = url;
				elements[j].appendChild(image);
			}

			if(doNotPrintImages)
			{
				var span = document.createElement("span");
				span.style.display = 'none';
				span.className = "print-text";
				span.appendChild(document.createTextNode(text));
				elements[j].appendChild(span);
			}
		}
	}

	if(hideFlicker)
		setStyleSheetState('hide-flicker',false);
}
}

function addLoadHandler(handler)
{
	if(window.addEventListener)
	{
		window.addEventListener("load",handler,false);
	}
	else if(window.attachEvent)
	{
		window.attachEvent("onload",handler);
	}
	else if(window.onload)
	{
		var oldHandler = window.onload;
		window.onload = function piggyback()
		{
			oldHandler();
			handler();
		};
	}
	else
	{
		window.onload = handler;
	}
}

function setStyleSheetState(id,enabled) 
{
	var sheet = document.getElementById(id);
	if(sheet)
		sheet.disabled = (!enabled);
}

function extractText(element)
{
	if(typeof element == "string")
		return element;
	else if(typeof element == "undefined")
		return element;
	else if(element.innerText)
		return element.innerText;

	var text = "";
	var kids = element.childNodes;
	for(var i=0;i<kids.length;i++)
	{
		if(kids[i].nodeType == 1)
		text += extractText(kids[i]);
		else if(kids[i].nodeType == 3)
		text += kids[i].nodeValue;
	}

	return text;
}

/*
	Finds elements on page that match a given CSS selector rule. Some
	complicated rules are not compatible.
	Based on Simon Willison's excellent "getElementsBySelector" function.
	Original code (with comments and description):
		http://simon.incutio.com/archive/2003/03/25/getElementsBySelector
*/
function getElementsBySelector(selector)
{
	var tokens = selector.split(' ');
	var currentContext = new Array(document);
	for(var i=0;i<tokens.length;i++)
	{
		token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');
		if(token.indexOf('#') > -1)
		{
			var bits = token.split('#');
			var tagName = bits[0];
			var id = bits[1];
			var element = document.getElementById(id);
			if(tagName && element.nodeName.toLowerCase() != tagName)
				return new Array();
			currentContext = new Array(element);
			continue;
		}

		if(token.indexOf('.') > -1)
		{
			var bits = token.split('.');
			var tagName = bits[0];
			var className = bits[1];
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				var elements;
				if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b')))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
	    }

		if(token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/))
		{
			var tagName = RegExp.$1;
			var attrName = RegExp.$2;
			var attrOperator = RegExp.$3;
			var attrValue = RegExp.$4;
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				var elements;
	        	if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			var checkFunction;
			switch(attrOperator)
			{
				case '=':
					checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
					break;
				case '~':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
					break;
				case '|':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
					break;
				case '^':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
					break;
				case '$':
					checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
					break;
				case '*':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
					break;
				default :
					checkFunction = function(e) { return e.getAttribute(attrName); };
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(checkFunction(found[k]))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
		}

		tagName = token;
		var found = new Array;
		var foundCount = 0;
		for(var h=0;h<currentContext.length;h++)
		{
			var elements = currentContext[h].getElementsByTagName(tagName);
			for(var j=0;j<elements.length; j++)
				found[foundCount++] = elements[j];
		}

		currentContext = found;
	}

	return currentContext;
}


}// end of scope, execute code

/*
if(document.createElement && document.getElementsByTagName && !navigator.userAgent.match(/opera\/?6/i))
	com_stewartspeak_replacement();
*/

function go(form) {
   window.location = form.range.options[form.range.selectedIndex].value;

}
   
function preload_images () {
   var d = document;
	 if (!d.imgs) { d.imgs = new Array(); }
	 var j = d.imgs.length, args = preload_images.arguments, i;
	 for (i = 0; i < args.length; i++) {
		  d.imgs[j] = new Image;
			d.imgs[j].src = args[i];
			j++;
	 }
}


 function bookmark(title)
 {

   var urlAddress = location.href;
   var pageName = title;
   var browser = navigator.appName;

  if (browser == 'Microsoft Internet Explorer')
  {
     window.external.AddFavorite(urlAddress,pageName)
  }
  else if (browser == 'Netscape')
  { 
     alert("Your browser does not support this feature.  Use CTRL-D to bookmark this page");
  }
  else
  { 
   alert("Your browser does not support this feature.");
  }
 }

/* The functions below are cookie functions which can be used for anything site-wide but
   are intended (at the moment) to be used for the dynamic cart quantities */

function getCookie(Name) {
  var search = Name + "=";
  var returnvalue = "";
  if (document.cookie.length > 0) {
    offset = document.cookie.indexOf(search)
    // if cookie exists
    if(offset != -1) { 
      offset += search.length;
      // set index of beginning of value
      end = document.cookie.indexOf(";", offset);
      // set index of end of cookie value
      if (end == -1) end = document.cookie.length;
      returnvalue=unescape(document.cookie.substring(offset, end));
    }
  }
  return returnvalue;
}

function setCookie(name,num){
 //set document cookie
 document.cookie=name+"="+num;
}

function isCookied(name,num) {
 if (getCookie(name)!=num) {
  return true;
 } else {
  return false;
 }
}

/* End Cookie Functions */

/* Dynamic Quantities JavaScript Below */

function priceChange(id,oper,num) {
 // Price Change v1.1:
 // id = the id of the product (so we know what qty box and price to update).
 // oper = what operation to use: dynamic:add:sub:dropdown
 // num = the original price of the product
 //
 // --[ Revisions ]--
 // 20050603 - v1 - Original Script Creation ~Michael@ColorMaria
 // 20050620 - v1.1 - Modified Script to Support Drop-Down Quantity Boxes ~Michael@ColorMaria
 /////////////////////////////////////////////////////////////////////////////////////////////

 if(oper == 'dynamic') {
  // Get the qty value:
  var num2 = 0;
  var qty = document.getElementById('qty_' + id).value;
  // Make sure they didn't go below 1:
  if(qty < 1 || qty == '') {
   document.getElementById('price_' + id).value = '$' + num;
  } else {
   // If they're above one or at 1, do the math for the price:
   num2 = num * document.getElementById('qty_' + id).value;
   document.getElementById('price_' + id).value = '$' + num2.toFixed(2);
  }
 }
 if(oper == 'add') {
  // Increment the qty box:
  ++document.getElementById('qty_' + id).value;
  // Set qty equal to the new value:
  var qty = document.getElementById('qty_' + id).value;
  if(qty < 1) {
   // Probably not gonna happen, but just in case:
   document.getElementById('qty_' + id).value = '1';
   document.getElementById('price_' + id).value = '$' + num;
  } else {
   // Do the math for the new price:
   num2 = num * document.getElementById('qty_' + id).value;
   document.getElementById('price_' + id).value = '$' + num2.toFixed(2);
  }
 }
 if(oper == 'sub') {
  // Decrement the value of the qty box:
  --document.getElementById('qty_' + id).value;
  // Set qty = to the new value:
  var qty = document.getElementById('qty_' + id).value;
  if(qty < 1) {
   // Set qty back to 1 if they try to go below 1:
   document.getElementById('qty_' + id).value = '1';
   document.getElementById('price_' + id).value = '$' + num;
  } else {
   // If they're above one or at 1 then do the math for the price:
   num2 = num * document.getElementById('qty_' + id).value;
  }
 }
 if(oper == 'dropdown') {
  // Set qty = to the new value:
  var qty = document.getElementById('qty_' + id).value;
  if(qty < 1) {
   // Not sure how this will happen, but you never know:
   document.getElementById('qty_' + id).value = '1';
   document.getElementById('price_' + id).value = '$' + num;
  } else {
   // If they're above one or at 1 then do the math for the price:
   num2 = num * document.getElementById('qty_' + id).value;
  }
 }
 // Some people like to do weird things, like enter letters for a quantity amount, let's not let them:
 if(num2 != '') {
  if(!isNaN(num2)) {
   // if num wasn't NaN then a letter wasn't entered
   document.getElementById('price_' + id).value = '$' + num2.toFixed(2);
  } else {
   // if num was NaN, fix it.
   document.getElementById('price_' + id).value = '$' + num;
   document.getElementById('qty_' + id).value = '';
  }
 }
}

function cartChange(id,num,qty,total) {
 // Cart Change v1:
 // id = an id to represent the price and qty (so we know what qty box and price to update).
 // num = the original cost of the item(s) (if there were 3x a 10-dollar item, num would = 30.00).
 // qty = the original quantity that existed in the cart before modification
 // total = the original total of the cart items before modification.
 // 
 // --[ Revisions ]--
 // 20050620 - Original Script Creation ~Michael@ColorMaria
 // 20050629 - Added a line to change the color of the update cart message ~Michael@ColorMaria
 // 20050705 - Added code (accompanied by cookies) to check the quantities of items in the cart
 //          - to see whether they match what the user entered for better checking to see if 
 //          - the update cart button needs to be pressed.
 //          - 
 //          - Please note: This update requires the cookie functions above the priceChange
 //          - function. ~Michael@ColorMaria
 // 20050722 - Added error handling for NaN errors.
 ///////////////////////////////////////////////////////////////////////////////////////////////
 // Setup our Variables:
 var num2 = 0;
 var qty2 = document.getElementById('qty_' + id).value;
 if(isNaN(qty2)) { // If qty2 isNaN that means someone's made a typo and hit a letter or other non-number key
  document.getElementById('qty_' + id).value = '';
  qty2 = '';
 }
 var num3 = document.getElementById('price_' + id).value.split("$");
 var num3 = num3[1];
 // Check to see if we're dividing by 0:
 if(qty != '0' || !qty) {
  // If not, get the real price (rPrice):
  var rPrice = num / qty;
 } else {
  // If we are, set the total price for that item to 0:
  document.getElementById('price_' + id).value = '$0.00';
 }
 // Setup our new prices:
 num2 = (rPrice * qty2);
 document.getElementById('price_' + id).value = '$' + num2.toFixed(2);
 // We gotta do this differently depending on if the total we're modifying 
 // is the REAL total or if it's one that was previously modified.
 if(total == document.getElementById('total').value) {
  // If we are modifying the current REAL total, do it this way:
  // Figure out what total would be if the item we're modifying didn't exist.
  total = total - num3;
  // Add the new value to the total:
  total = total + num2;
  document.getElementById('total').value = '$' + total.toFixed(2);
 } else {
  // Setup our fake_total variable so we can essentially do the same 
  // thing we did with the real total
  var fake_total = document.getElementById('total').value.split("$");
  fake_total = fake_total[1];
  // Figure out what the total would be without this product.
  total = fake_total - num3;
  // Readd the new value to the total.
  total = total + num2;
  document.getElementById('total').value = '$' + total.toFixed(2);
 }
 // Just in case they think this will automagically update the real prices for them,
 // setup a fail safe the function below will read and evaluate:
 var nQty = getCookie('quantities');
 arQty = nQty.split('|');
 // Note: the last element of the array will be empty, so ignore it.
 cntQty = arQty.length - 1;
 for(i=0;i<cntQty;i++) {
  arID = arQty[i].split(','); // Hoo Hoo (owl)
  if(document.getElementById('qty_'+arID[0]).value == arID[1]) {
   // It equals the default quantity, yay! No need to update cart.
   document.getElementById('hasUpdated').value = '1';
   // Change the color of the update cart message.
   document.getElementById('update_msg').style.color = '#000';
   continue;
  } else {
   // It doesn't, they need to update.  No need to check further since if one hasn't been updated
   // the whole cart needs to be updated.
   document.getElementById('hasUpdated').value = '0';
   // Change the color of the update cart message so it stands out after a change to the qty is made.
   document.getElementById('update_msg').style.color = '#F00';
   // Break the loop.
   break;
  }
 }
}

function hasUpdated() {
 // Small function to verify that the cart has been updated
 // before checking out or using the continue shopping button.
 ///////////////////////////////////////////////////////////////
 var hUpdated = document.getElementById('hasUpdated').value;
 if(hUpdated != '1') {
  alert('You have not updated your cart since last changing your quantities.\nPlease press the \'Update Cart\' button before continuing.');
  return false;
 }
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


function verifyLogin(theForm) {
  if(theForm.username.value != '' && theForm.password.value != '') {
    return true;
  } else {
    alert('Please enter your email address and password before continuing.');
    return false;
  }
}

function confirmGo(theForm) {
  if(theForm.p.value != '') {
    if(theForm.fromForm.value == 'Express Link') {
      window.location.replace('/ShowView/express_order?p='+theForm.p.value);
      return false;
    }
    return true;
  } else {
    alert('Please select your ship to state so that we can assess the applicable state tax at checkout.');
    return false;
  }
}

function hideForm() {
 var emailForm = document.getElementById('emailForm');
 emailForm.style.display = 'none';
 setCookie('noThanks','true');
 // alert(document.forms[1].name);
 eval('document.'+document.getElementById('fromForm').value+'.submit()');
}

function submitForm(f) {
  eval('document.'+f+'.submit()');
}

function crossCheck(sCode,state) {
  if((sCode.substr(0,2) != state && sCode != 'Retail' && sCode != 'Retail29' && sCode != 'INT') || (sCode == 'INT' && sCode != state)) {
    var message = 'Your shipping state ('+state+') does not match the state you have been browsing with';
    if(sCode != 'Retail' && sCode != 'Retail29') {
      message += ' ('+sCode+')';
    }
    message += '.\nChanging your ship-to state may cause your pricing to change.\n\nDo you wish to continue?'
    return confirm(message);
  }
}

/* ***************************************
   * in_array() function for JS.         *
   * Works the same as the PHP function. *
   *                                     *
   * ~Michael - 20060111                 *
   * ~Michael - Fixed undefined vars     *
   *            20060111                 *
   *************************************** */

function in_array(needle, haystack) {
  if(typeof needle == undefined) {
    // If needle is undefined:
    alert("Needle is undefined.\nError: in_array");
    return false;
  } else if(typeof haystack == undefined) {
    alert("Haystack is undefined.\nError: in_array");
    return false;
  }
  for(i=0,n=haystack.length;i<n;i++) {
    // Loop through the array.
    if(haystack[i] == needle) {
      // If the needle was found:
      return true;
    }
  }
  // If the code reaches this point, needle wasn't found:
  return false;
}

function checkZip(e,fText) {
  if(!e) {
    e = window.event;
  }
  if(typeof document.ship_form.elements['billing_country'] != 'undefined') {
    var country = document.ship_form.elements['billing_country'];
  } else if(typeof document.ship_form.elements['s_country1'] != 'undefined') {
    var country = document.ship_form.elements['s_country1'];
  }
  if(typeof country != 'undefined' && country.value == 'United States') {
    if(typeof fText != 'undefined' && fText.value.length > '5') {
      fText.value = fText.value.substr(0,5);
    }
  }
}

function formHandler(form){
  var URL = document.form.site.options[document.form.site.selectedIndex].value;
  window.location.href = URL;
}

/************************************************************************
 * function ucFields() will capitolize every letter of every first word *
 * in every field except for the email field.                           *
 *                                                                      *
 * ~Michael@CommerceV3                                                  *
 ************************************************************************/
function ucFields(theForm) {
  if(typeof theForm != 'undefined') {
    for(var i=0,n=theForm.elements.length;i<n;i++) {
      if(typeof theForm.elements[i] != 'undefined' && 
         theForm.elements[i].name.substr(0,2) != 'pw' && 
         theForm.elements[i].name.indexOf('email') < 0 &&
         theForm.elements[i].name.indexOf('country') < 0 &&
         theForm.elements[i].name.indexOf('state') < 0 &&
         theForm.elements[i].type != 'hidden' &&
         theForm.elements[i].type != 'submit' &&
         theForm.elements[i].name != 'billing_also') {
        theForm.elements[i].value = ucwords(theForm.elements[i].value);
      }
    }
  } else {
    return false;
  }
  return true;
}

/* Uppercase first letter of every word.
   Works the same as the PHP function   

   ~Michael@CommerceV3 */

function ucwords(str) {
  items = str.split(' ');
  for(var i=0,n=items.length;i<n;i++) {
    var firstLetter = items[i].charAt(0).toUpperCase();
    var wordEnd = items[i].substr(1,items[i].length - 1);
    items[i] = firstLetter + wordEnd;
  }
  return items.join(' ');
}

var arMsgStates = new Array('AR','GA','ID','IN','KY','LA','MS','NM','OK','SC','TN','TX','UT','WV');

function showStateMsg(st) {
  if (in_array(st,arMsgStates)) {
    document.getElementById('state_msg').style.display = 'block';
    document.getElementById('emailForm').style.height = '190px';
    document.getElementById('state_msg').innerHTML = 'You are able to purchase new 2008 workbook and teacher\'s guide editions online.  If you are interested in your state\'s contracted editions for the books, please print and fax/mail your <a href="/downloads/'+st+'.pdf" style="font-size: 12px;">order form</a> or contact customer service at 301-263-2700.';
  } else {
    document.getElementById('state_msg').style.display = 'none';
    document.getElementById('emailForm').style.height = '100px';
    document.getElementById('state_msg').innerHTML = '';
  }
}