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("span.test1","/services/heading.php",false,"libra_bt.ttf","15","000000","FFFFFF","template1");
replaceSelector("span.test2","/services/heading.php",false,"BernhardModernBoldBT.ttf","13","000000","FFFFFF","template1");


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 verifyRecipients(theForm) {
 var intLength = theForm.length;
 for(var i=0;i<intLength;i++) {
  if(theForm.elements[i].name.substr(0,4) == 'recp' && theForm.elements[i].value == '') {
   alert('You must choose a recipient for each of the products you are purchasing.');
   return false;
  }
 }
 return true;
}

var arMEast = new Array('Bahrain','Iran','Iraq','Israel','Jordan','Kuwait','Lebanon','Oman',
                        'Qatar','Saudi Arabia','Syria','Turkey','United Arab Emirates',
                        'West Bank','Yemen','Afghanistan','Brunei');

var arEAfrica = new Array('Albania','Armenia','Austria','Azerbaijan','Balearic Islands','Belarus',
                          'Belgium','Bosnia','Bosnia (Herzegovina)','British Isles','Bulgaria','Channel Islands',
                          'Chechnya','Croatia','Cyprus','Czech Republic','Denmark','England','Estonia',
                          'Faroe Islands','Finland','France','Germany','Great Britain','Greece',
                          'Greenland','Holland','Hungary','Iceland','Ireland','Isle of Man','Italy',
                          'Latvia','Liechtenstein','Lithuania','Luxembourg','Macedonia','Malta','Monaco',
                          'Netherlands','Northern Ireland','Norway','Poland','Portugal','Romania','Russia',
                          'Scotland','Serbia','Slovakia','Slovenia','Spain','Sweden',
                          'Switzerland','Turkey','Ukraine','United Kingdom','Wales','Yugoslavia','Algeria',
                          'Angola','Benin','Botswana','Burkina Faso','Burundi','Cameroon','Cape Verde',
                          'Central African Republic','Chad','Comoros','Congo-Brazzaville','DR Congo',
                          'Djibouti','Egypt','Equatorial Guinea','Eritrea','Ethiopia','Gabon','Gambia',
                          'Ghana','Guinea','Guinea-Bissau','Ivory Coast','Kenya','Lesotho','Liberia','Libya',
                          'Madagascar','Malawi','Mali','Mauritania','Mauritius','Morocco','Mozambique',
                          'Namibia','Niger','Nigeria','Reunion','Rwanda','Sao Tome & Principe','Senegal',
                          'Seychelles','Sierra Leone','Somalia','South Africa','Sudan','Swaziland','Tanzania',
                          'Togo','Tunisia','Uganda','Western Sahara','Zambia','Zimbabwe', 'Andorra', 
                          'Faeroe Islands','Georgia','Gibraltar','Kazakhstan','Kyrgystan','San Marino', 
                          'Tajikistan','Turkmenistan','Tuvalu','Uzbekistan','Vatican City','Republic of Congo',
                          'Kyrgyzstan');

var arPRAsia = new Array('American Samoa', 'Australia','New Zealand','Chile','China','Peru',
                         'India','Indonesia','Taiwan','Japan','Thailand','Malaysia','Bangladesh','Bhutan',
                         'Cambodia','China','Hong Kong','Japan','Korea, North','Korea, South','Laos','Maldives',
                         'Mongolia','Myanmar','Nepal','Pakistan','Philippines','Singapore',
                         'Sri Lanka','Vietnam','Tonga','Peoples Rep of China','Kiribati','Macau','Norfolk Island',
                         'Papau New Guinea','Tuvalu','Vanuatu','Wallis and Futuna Islands','Cook Islands',
                         'French Polynesia','Papau New Guinea');

var arLSCAmerica = new Array('Belize','Costa Rica','El Salvador','Guatemala','Honduras','Nicaragua',
                             'Panama','Argentina','Bolivia','Brazil','Chile','Colombia','Ecuador',
                             'French Guiana','Guyana','Paraguay','Peru','Suriname','Uruguay','Venezuela',
                             'Antigua','Barbuda','Aruba','Bahamas','Barbados','Cayman Islands','Cuba',
                             'Dominica','Dominican Republic','Grenada','Guadeloupe','Haiti','Jamaica',
                             'Martinique','Puerto Rico','St. Kitts','Nevis','St. Lucia',
                             'St. Vincent and the Grenadines','Trinidad','Tobago','Turks','Caicos Islands',
                             'Virgin Islands','Anguilla','Antigua & Barbuda','Bermuda','British Virgin Islands',
                             'Falkland Islands','Monserrat','Netherlands Antilles','Trinidad and Tobago',
                             'Turks and Caicos Islands','Antigua and Barbuda','Montserrat');

var arEMP = new Array('Burma','China','Faroe Islands','Fiji','Indonesia','Korea, North','Lao People\'s Democratic Re',
                      'Macao','Martinique','Sri Lanka','Australia','Hong Kong','Japan','Korea, South','Malaysia',
                      'New Zealand','Philippines','Singapore','South Korea','Taiwan','Thailand','Vietnam',
                       'Peoples Rep of China', 'Kiribati', 'Macau', 'Norfolk Island',
                       'Papau New Guinea', 'Tuvalu', 'Vanuatu', 'Wallis and Fortuna Islands');

var arEME = new Array('Algeria','Bosnia (Hercgovina)','Botswana','Croatia','Estonia','Greece','Italy','Latvia',
                      'Lithuania','Netherlands Antilies','New Caledonia','Nigeria','Romania','Russia','Slovakia',
                      'Slovakia (slovak Republic)','Slovenia','South Africa','Austria','Belgium','Czech Republic',
                      'Denmark','Finland','France','France, Metropolitan','Germany','Hungary','Ireland (Eire)',
                      'Liechtenstein','Luxembourg','Netherlands','Norway','Poland','Portugal','Scotland','Spain',
                      'Sweden','Switzerland','United Kingdom','Moldova, Republic Of', 'Andorra', 'Faeroe Islands',
                          'Georgia', 'Gibralter', 'Kazakhstan', 'Kyrgystan', 'San Marino', 'Tajikistan', 'Turkmenistan',
                          'Tuvalu', 'Uzbekistan', 'Vatican City');

/* ***************************
   * popShipMethods function *
   * Populates shipping      *
   * dropdown based on       *
   * location.               *
   *                         *
   * ~Michael - 20061103     *
   *************************** */

function popShipMethods(id,country,args) {
  if (args == 'b') {
    return false; // Exit function.  We're on the billing side of the checkout_shipping page.
  }
  var arMeths = new Array(); // Initialize methods array
  sMethBox = document.getElementById(id);
  if(country != '') {
    if(country == 'Mexico') {
      arMeths[0] = 'Air Mail-Canada & Mexico-1 to 2 weeks';
      arMeths[1] = 'Global Priority Mail-Mexico-1 to 4 weeks';
    } else if(country == 'Canada') {
      arMeths[0] = 'Air Mail-Canada & Mexico-1 to 2 weeks';
      arMeths[1] = 'Global Priority Mail-Canada-5 to 14 days';
    } else if(in_array(country,arMEast)) {
      arMeths[0] = 'Air Mail-Middle East-1 to 3 weeks';
      arMeths[1] = 'Global Priority-Middle East-4 to 14 days ';
    } else if(in_array(country,arEAfrica)) {
      arMeths[0] = 'Air Mail-Europe & Africa-1 to 3 weeks';
      if(country != 'Italy') {
        arMeths[1] = 'Global Priority Mail-Europe & Africa-3 to 10 days (Africa up to 6 weeks)';
      }
    } else if(in_array(country,arPRAsia)) {
      arMeths[0] = 'Air Mail-Pacific Rim & Asia-1 to 3 weeks';
      arMeths[1] = 'Global Priority Mail-Pacific Rim-4 to 14 days';
    } else if(in_array(country,arLSCAmerica)) {
      arMeths[0] = 'Air Mail-Latin, South & Central America-1 to 3 weeks';
      arMeths[1] = 'Global Priority-South America-1 to 4 weeks';
    } else if(country == 'United States') {
      arMeths[0] = 'USA Only: USPS First Class Mail-3 to 7 days';
      arMeths[1] = 'USA Only: USPS Priority Mail-3 to 5 Days';
      arMeths[2] = 'USA Only: UPS Ground-3 to 7 days';
      arMeths[3] = 'USA Only: UPS 3-Day Select-3 Business Days';
      arMeths[4] = 'USA Only: UPS 2nd Day Air-2 Business Days';
      arMeths[5] = 'USA Only: UPS Next Day Air-1 Business Day by 3PM';
      arMeths[6] = 'USA Only: UPS Next Day Air Early AM-1 Business Day by 10AM';
    }

    /* New Addition for New Express Shipping Methods ~Patrick - 20080204 */
    if(in_array(country,arEMP)) {
      arMeths[arMeths.length] = 'Express Mail-Pacific Rim & Asia'; 
    } else if(in_array(country,arEME)) {
      arMeths[arMeths.length] = 'Express Mail - Europe & Africa'; 
    }

  } else {
    emptyDropBox(sMethBox);
    return false;
  }
  
  emptyDropBox(sMethBox);

  for(var i=0,n=arMeths.length;i<n;i++) { // Fill the sMethBox with new stuff
    sMethBox.options[i] = new Option(arMeths[i],arMeths[i]);
  }
  delete arMeths;
}


/* ***************************************
   * in_array() function for JS.         *
   * Works the same as the PHP function. *
   *                                     *
   * ~Michael - 20060111                 *
   *************************************** */

function in_array(needle, haystack) {
  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 emptyDropBox(box) {
  if(typeof box != 'undefined' && box.options.length > 0) {
    for(var i=0,n=box.options.length;i<n;i++) { // Empty the box
      box.options[0] = null;
    }
    box.options[0] = new Option('- Select Country -','');
  }
}

/*
   This function will loop through and display all 
   field names and values for a form (selected or not).

   Useful in seeing if a dynamic field has been populated or not.

   ~Michael@ColorMaria
*/

function showFieldValues(form) {
 var cntElements = form.length;
 var strElements = '';
 for(var i = 0;i<cntElements;i++) {
  strElements += form.elements[i].name + ': ' + form.elements[i].value + '<br />';
 }
 document.write(strElements);
}

function grayOut(vis, options) {
  // Pass true to gray out screen, false to ungray
  // options are optional.  This is a JSON object with the following (optional) properties
  // opacity:0-100         // Lower number = less grayout higher = more of a blackout 
  // zindex: #             // HTML elements with a higher zindex appear on top of the gray out
  // bgcolor: (#xxxxxx)    // Standard RGB Hex color code
  // grayOut(true, {'zindex':'50', 'bgcolor':'#0000FF', 'opacity':'70'});
  // Because options is JSON opacity/zindex/bgcolor are all optional and can appear
  // in any order.  Pass only the properties you need to set.
  var options = options || {}; 
  var zindex = options.zindex || 50;
  var opacity = options.opacity || 70;
  var opaque = (opacity / 100);
  var bgcolor = options.bgcolor || '#000000';
  var dark=document.getElementById('darkenScreenObject');
  if (!dark) {
    // The dark layer doesn't exist, it's never been created.  So we'll
    // create it here and apply some basic styles.
    // If you are getting errors in IE see: http://support.microsoft.com/default.aspx/kb/927917
    var tbody = document.getElementsByTagName("body")[0];
    var tnode = document.createElement('div');           // Create the layer.
        tnode.style.position='absolute';                 // Position absolutely
        tnode.style.top='0px';                           // In the top

        tnode.style.left='0px';                          // Left corner of the page
        tnode.style.overflow='hidden';                   // Try to avoid making scroll bars            
        tnode.style.display='none';                      // Start out Hidden
        tnode.id='darkenScreenObject';                   // Name it so we can find it later
    tbody.appendChild(tnode);                            // Add it to the web page
    dark=document.getElementById('darkenScreenObject');  // Get the object.
  }
  if (vis) {
    // Calculate the page width and height 
    if( document.body && ( document.body.scrollWidth || document.body.scrollHeight ) ) {
        var pageWidth = document.body.scrollWidth+'px';
        var pageHeight = document.body.scrollHeight+'px';
    } else if( document.body.offsetWidth ) {
      var pageWidth = document.body.offsetWidth+'px';
      var pageHeight = document.body.offsetHeight+'px';
    } else {
       var pageWidth='100%';
       var pageHeight='100%';
    }   
    //set the shader to cover the entire page and make it visible.
    dark.style.opacity=opaque;                      
    dark.style.MozOpacity=opaque;                   
    dark.style.filter='alpha(opacity='+opacity+')'; 
    dark.style.zIndex=zindex;        
    dark.style.backgroundColor=bgcolor;  
    dark.style.width= pageWidth;
    dark.style.height= pageHeight;
    dark.style.display='block';                          
  } else {
     dark.style.display='none';
  }
}

function getMethods(country) {
  var arMeths = new Array();
  if(country != '') {
    if(country == 'Mexico') {
      arMeths[0] = 'Air Mail-Canada AMPERSAND Mexico-1 to 2 weeks';
      arMeths[1] = 'Global Priority Mail-Mexico-1 to 4 weeks';
    } else if(country == 'Canada') {
      arMeths[0] = 'Air Mail-Canada AMPERSAND Mexico-1 to 2 weeks';
      arMeths[1] = 'Global Priority Mail-Canada-5 to 14 days';
    } else if(in_array(country,arMEast)) {
      arMeths[0] = 'Air Mail-Middle East-1 to 3 weeks';
      arMeths[1] = 'Global Priority-Middle East-4 to 14 days ';
    } else if(in_array(country,arEAfrica)) {
      arMeths[0] = 'Air Mail-Europe AMPERSAND Africa-1 to 3 weeks';
      if(country != 'Italy') {
        arMeths[1] = 'Global Priority Mail-Europe AMPERSAND Africa-3 to 10 days (Africa up to 6 weeks)';
      }
    } else if(in_array(country,arPRAsia)) {
      arMeths[0] = 'Air Mail-Pacific Rim AMPERSAND Asia-1 to 3 weeks';
      arMeths[1] = 'Global Priority Mail-Pacific Rim-4 to 14 days';
    } else if(in_array(country,arLSCAmerica)) {
      arMeths[0] = 'Air Mail-LatinCOMMA South AMPERSAND Central America-1 to 3 weeks';
      arMeths[1] = 'Global Priority-South America-1 to 4 weeks';
    } else if(country == 'United States') {
      arMeths[0] = 'USA Only: USPS First Class Mail-3 to 7 days';
      arMeths[1] = 'USA Only: USPS Priority Mail-3 to 5 Days';
      arMeths[2] = 'USA Only: UPS Ground-3 to 7 days';
      arMeths[3] = 'USA Only: UPS 3-Day Select-3 Business Days';
      arMeths[4] = 'USA Only: UPS 2nd Day Air-2 Business Days';
      arMeths[5] = 'USA Only: UPS Next Day Air-1 Business Day by 3PM';
      // arMeths[6] = 'USA Only: UPS Next Day Air Early AM-1 Business Day by 10AM';
    }

    /* New Addition for New Express Shipping Methods ~Patrick - 20080204 */
    if(in_array(country,arEMP)) {
      arMeths[arMeths.length] = 'Express Mail-Pacific Rim AMPERSAND Asia'; 
    } else if(in_array(country,arEME)) {
      arMeths[arMeths.length] = 'Express Mail - Europe AMPERSAND Africa'; 
    }
  }
  var meths = arMeths.join(',');
  return meths;
}

// Used for redirects by ID
function goID(id) {
   window.location = document.getElementById(id).value;
}
