function addslashes(str) {
    // Escapes single quote, double quotes and backslash characters in a string with backslashes  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/addslashes
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ates Goral (http://magnetiq.com)
    // +   improved by: marrtins
    // +   improved by: Nate
    // +   improved by: Onno Marsman
    // +   input by: Denny Wardhana
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: addslashes("kevin's birthday");
    // *     returns 1: 'kevin\'s birthday'
 
    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\u0000/g, "\\0");
}

// Check if a variable exists or isn't null
function varExists(theVal) {
	switch (theVal) {
		case null:
		case '':
		case 'undefined':
			return false;
			break;
		default:
			return true;
			break;
	}
}

// Verify an email address
function valEmail(theEmail) {
	with (theEmail) {
		apos	= theEmail.indexOf("@");
		dotpos	= theEmail.lastIndexOf(".");
		
		if (apos < 1 || dotpos - apos < 2) {
			return false;
		} else {
			return true;
		}
	}
}

// Verify the form
function verifyForm(form) {
	// Loop through form elements
	var errNum	= 0;
	var errMsg	= "";
	
	for (var i= 0; i < form.elements.length; i++) {
		var formType	= form.elements[i].type;
		var formName	= form.elements[i].name;
		
		if (varExists(form.elements[i].id)) {
			var formId		= form.elements[i].id;
			var formVal		= document.getElementById(formName).value;
			//alert(formName);
		
			switch(formName) {
				case "_name":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your name.\n";
					}
					break;
					
				case "_email":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your email address.\n";
					} else {
						// Not blank, check against pattern
						if (!valEmail(formVal)) {
							errNum++;
							errMsg	+= "Please format your email address properly.\n";
						}
					}
					break;
					
				case "_howfound":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please choose how you found out about us.\n";
					}
					break;
				
				case "_captcha":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please complete the captcha.\n";
					}
					break;
				
				
				
				// ------------------------- /shop/contact-asktheexperts.php
				case "_topic":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please choose a topic.\n";
					}
					break;
				
				case "_questions":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please ask a question.\n";
					}
					break;
				
				// ------------------------- /shop/review.php
				case "zipcode":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your zip code.\n";
					}
					break;
				
				case "shipping_method":
					/*if (formVal == "") {
						errNum++;
						errMsg	+= "Please choose a shipping method.\n";
					}*/
					break;
				
				// ------------------------- /shop/giftcards.php
				case "gc_purchaser_name":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your name.\n";
					}
					break;
				
				case "gc_purchaser_email":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your email address.\n";
					} else {
						// Not blank, check against pattern
						if (!valEmail(formVal)) {
							errNum++;
							errMsg	+= "Please format your email address properly.\n";
						}
					}
					break;
					
				// ------------------------- /shop/checkout.php
				case "x_first_name":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your first name.\n";
					}
					break;
					
				case "x_last_name":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your last name.\n";
					}
					break;
					
				case "x_address":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your address.\n";
					}
					break;
					
				case "x_city":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your city.\n";
					}
					break;
				
				case "x_zip":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your zip code.\n";
					}
					break;
					
				case "x_email":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your email address.\n";
					} else {
						// Not blank, check against pattern
						if (!valEmail(formVal)) {
							errNum++;
							errMsg	+= "Please format your email address properly.\n";
						}
					}
					break;
					
				case "x_card_num":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your credit card number.\n";
					} else {
						// No blank, check against pattern
						if (!Mod10(formVal)) {
							errNum++;
							errMsg	+= "Credit card number invalid, enter it again.\n";
						}
					}
					break;
					
				case "x_card_code":
					if (formVal == "") {
						errNum++;
						errMsg	+= "Please fill out your verification number.\n";
					}
					break;
			}
		}
	}
	
	if (errNum >= 1) {
		alert(errMsg);
		return false;
	} else {
		return true;
	}
}

function copyBillingToShipping(form) {
	// Copy everything from the billing section to the shipping section
	if (form.same.checked) {
		// Name
		form.x_ship_to_first_name.value		= form.x_first_name.value;
		form.x_ship_to_last_name.value		= form.x_last_name.value;

		// Address
		form.x_ship_to_address.value		= form.x_address.value;
		form.x_ship_to_city.value			= form.x_city.value;
		form.x_ship_to_state.selectedIndex	= form.x_state.selectedIndex;
		//form.x_ship_to_zip.value			= form.x_zip.value;
	
	} else {
		// Name
		form.x_ship_to_first_name.value		= '';
		form.x_ship_to_last_name.value		= '';

		// Address
		form.x_ship_to_address.value		= '';
		form.x_ship_to_city.value			= '';
		form.x_ship_to_state.selectedIndex	= 0;
		//form.x_ship_to_zip.value			= '';
	}
}

function makeexpdate(theCCField) {
	if (document.getElementById(theCCField)) {
		document.getElementById("x_exp_date").value = document.getElementById("exp_month").value + document.getElementById("exp_year").value;
	}
}

function Mod10(ccNumb) {  // v2.0
	var valid = "0123456789"  // Valid digits in a credit card number
	var len = ccNumb.length;  // The length of the submitted cc number
	var iCCN = parseInt(ccNumb);  // integer of ccNumb
	var sCCN = ccNumb.toString();  // string of ccNumb
	sCCN = sCCN.replace (/^\s+|\s+$/g,'');  // strip spaces
	var iTotal = 0;  // integer total set at zero
	var bNum = true;  // by default assume it is a number
	var bResult = false;  // by default assume it is NOT a valid cc
	var temp;  // temp variable for parsing string
	var calc;  // used for calculation of each digit

	// Determine if the ccNumb is in fact all numbers
	for (var j=0; j<len; j++) {
		temp = "" + sCCN.substring(j, j+1);
		
		if (valid.indexOf(temp) == "-1"){
			bNum = false;
		}
	}

	// if it is NOT a number, you can either alert to the fact, or just pass a failure
	if(!bNum){
		/*alert("Not a Number");*/
		bResult = false;
	}

	// Determine if it is the proper length 
	if((len == 0)&&(bResult)){  // nothing, field is blank AND passed above # check
		bResult = false;
	
	} else {  // ccNumb is a number and the proper length - let's see if it is a valid card number
		if(len >= 15){  // 15 or 16 for Amex or V/MC
			for(var i=len;i>0;i--){  // LOOP throught the digits of the card
				calc = parseInt(iCCN) % 10;  // right most digit
				calc = parseInt(calc);  // assure it is an integer
				iTotal += calc;  // running total of the card number as we loop - Do Nothing to first digit
				i--;  // decrement the count - move to the next digit in the card
				iCCN = iCCN / 10;                               // subtracts right most digit from ccNumb
				calc = parseInt(iCCN) % 10 ;    // NEXT right most digit
				calc = calc *2;                                 // multiply the digit by two
				
				// Instead of some screwy method of converting 16 to a string and then parsing 1 and 6 and then adding them to make 7,
				// I use a simple switch statement to change the value of calc2 to 7 if 16 is the multiple.
				switch(calc){
					case 10: calc = 1; break;       //5*2=10 & 1+0 = 1
					case 12: calc = 3; break;       //6*2=12 & 1+2 = 3
					case 14: calc = 5; break;       //7*2=14 & 1+4 = 5
					case 16: calc = 7; break;       //8*2=16 & 1+6 = 7
					case 18: calc = 9; break;       //9*2=18 & 1+8 = 9
					default: calc = calc;           //4*2= 8 &   8 = 8  -same for all lower numbers
				}
				
				iCCN = iCCN / 10;  // subtracts right most digit from ccNum
				iTotal += calc;  // running total of the card number as we loop
			}  // END OF LOOP
			
			if ((iTotal%10)==0){  // check to see if the sum Mod 10 is zero
				bResult = true;  // This IS (or could be) a valid credit card number.
			
			} else {
				bResult = false;  // This could NOT be a valid credit card number
			}
		}
	}

	return bResult; // Return the results
}

function isNumberKey(evt) {
	var charCode = (evt.which) ? evt.which : event.keyCode;
	
	if (charCode > 31 && (charCode < 48 || charCode > 57)) {
		return false;
	
	} else {
		return true;
	}
}