sfHover = function() {
	var sfEls = document.getElementById("nav").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
     anchor.target = "_blank";
 }
}


function popupWindow(url) {
  window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=450,height=280,screenX=150,screenY=150,top=150,left=150')
}

function checkCC() {
	var ccerrormsg = '';
	var ccnum = document.getElementById('cc_number_nh-dns').value;
	ccnum = ccnum.replace(/ /g, '');
	if( (ccnum.length == 15) && (ccnum.substring(0,2) == 34) || (ccnum.substring(0,2) == 37) ) {
		ccerrormsg = "I'm sorry, we do not accept American Express Credit Cards.<br />Please Enter a Visa or Mastercard Credit Card";
	}
	if( (ccnum.length == 16) && (ccnum.substring(0,4) == 6011)) {
		ccerrormsg = "I'm sorry, we do not accept Discover Credit Cards.<br />Please Enter a Visa or Mastercard Credit Card";
	}
	if( (ccnum.length >16) || (ccnum.length == 0) ) {
		ccerrormsg = "Please Enter a Valid Credit Card Number";
	}
	if (ccerrormsg) {
		document.getElementById('ccerror').innerHTML = ccerrormsg;
		return false;
	} else {
		return true;
	}
	
}

function getObject(name) { 
   var ns4 = (document.layers) ? true : false; 
   var w3c = (document.getElementById) ? true : false; 
   var ie4 = (document.all) ? true : false; 

   if (ns4) return eval('document.' + name); 
   if (w3c) return document.getElementById(name); 
   if (ie4) return eval('document.all.' + name); 
   return false; 
}

//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your browser does not support this feature.  Please upgrade or use a different browser. Older (pre-v2.8) versions of Order Editor do not have this restriction.");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var request = getXmlHttpRequestObject();
/***************************************************
 GET STATES FUNCTIONS 
 ***************************************************/
function getStates(countryID, div_element) {
	if (request.readyState == 4 || request.readyState == 0) {
		// indicator make visible here..
		getObject("indicator").style.visibility = 'visible';
		var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
		var fields = "action=getStates&country="+countryID;
					
		request.open("POST", 'create_account.php', true);
		//request.onreadystatechange = getStatesRequest;
		request.onreadystatechange = function() {
			getStatesRequest(request, div_element);
		};
		
		request.setRequestHeader("Content-Type", contentType);		
		request.send(fields);
	}
}										
//Called when the AJAX response is returned.
function getStatesRequest(request, div_element) {
	if (request.readyState == 4) {
		var obj_div = getObject(div_element);
		// make hidden
		getObject('indicator').style.visibility = 'hidden';
	  obj_div.innerHTML = request.responseText;
		
		for (i=0; i<obj_div.childNodes.length; i++){
			if (obj_div.childNodes[i].nodeName=="SELECT")
				obj_div.childNodes[i].focus();
		}
	}
}

// Here to stop oscommerce from throwing errors
function rowOverEffect(){}
function rowOutEffect(){}

var valid;
var warned;

function check_form_optional(form_name) {
ValidZip();
	if(valid == "true") {
		return true;
	} else {
		if(warned != 1) {
			alert("Your entered zip code does not match our records for your state, please make sure it's correct and resubmit the form.");
			warned = 1;
			return false;
		} else {
			return true;
		}
	}
}

function zipCheck(lt, gt) {
	var postcode = (document.checkout_address.postcode.value);	
	if(postcode >= lt && postcode <= gt){
		zipCheckTrue();
	} else {
		zipCheckFalse();
	}
}
		
function zipCheckTrue() { valid = "true"; }
function zipCheckFalse() { valid = "false"; }
		
function ValidZip(){
	var state = (document.checkout_address.zone_id.options[document.checkout_address.zone_id.selectedIndex].value);
	var postcode = (document.checkout_address.postcode.value);
    switch(state){
    	case "1": // AL
    	 	zipCheck(35000, 36999);
    		break;
    	case "2": // AK
    		zipCheck(99500, 99929);
    		break;
    	case "4": // AZ
    		zipCheck(85000, 86599);
    		break;
    	case "5": // AR
    		if((postcode >= 71600 && postcode <= 72999) || (postcode >= 75502 && postcode <= 75505)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "3": // AS
    		if(postcode == 96700) { };
    		break;
    	case "12": // CA
    		zipCheck(90000, 96600);
    		break;
    	case "13": // CO
    		zipCheck(80000, 81699);
    		break;
    	case "14": // CT
    		zipCheck(06000, 06999);
    		break;
    	case "16": // DC
    		zipCheck(20000, 20599);
    		break;
    	case "15": // DE
    		zipCheck(19700, 19999);
    		break;
    	case "18": // FL
    		if((postcode >= 32000 && postcode <= 34999) && (postcode != 34300 && postcode !=34500 && postcode!=34800)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "19": // GA
    		zipCheck(30000, 31999);
    		break;
    	case "20": // GU
    		if(postcode == 96900) { };
    		break;
    	case "21": // HI
    		zipCheck(96700, 96899);
    		break;
    	case "22": // ID
    		zipCheck(83200, 83899);
    		break;
    	case "23": // IL
    		zipCheck(60000, 62999);
    		break;
    	case "24": // IN
    		zipCheck(46000, 47999);
    		break;
    	case "25": // IA
    		zipCheck(50000, 52999);
    		break;
    	case "26": // KS
    		zipCheck(66000, 67999);
    		break;
    	case "27": // KY
    		if((postcode >= 40000 && postcode <= 43799) || (postcode == 45275)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "28": // LA
    		if((postcode >= 70000 && postcode <= 71499) || (postcode == 71749)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "29": // ME
    		if((postcode >= 03900 && postcode <= 04999) || (postcode == 03804) || (postcode == 03801)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "30": // MH
    		if(postcode == 96900) { };
    		break;
    	case "31": // MD
    		if((postcode >= 20600 && postcode <= 21999) || (postcode == 20331)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "32": // MA
    		if((postcode >= 01000 && postcode <= 02700) || (postcode == 05500)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "33": // MI
    		zipCheck(48000, 49999);
    		break;
    	case "34": // MN
    		zipCheck(55000, 56799);
    		break;
    	case "35": // MS
    		zipCheck(38600, 39799);
    		break;
    	case "36": // MO
    		zipCheck(63000, 65899);
    		break;
    	case "37": // MT
    		zipCheck(59000, 59999);
    		break;
    	case "38": // NE
    		zipCheck(68000, 69399);
    		break;
    	case "39": // NV
    		zipCheck(88900, 89899);
    		break;
    	case "40": // NH
    		if((postcode >= 03000 && postcode <= 03803) || (postcode >= 03809 && postcode <= 03899)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "41": // NJ
    		zipCheck(07000, 08999);
    		break;
    	case "42": // NM
    		zipCheck(87000, 88499);
    		break;
    	case "43": // NY
    		if((postcode >= 09000 && postcode <= 14999) || (postcode >= 00400 && postcode <= 00599) || (postcode == 06390)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "44": // NC
    		zipCheck(26900, 28999);
    		break;
    	case "45": // ND
    		zipCheck(58000, 58899);
    		break;
    	case "46": // MP
    		zipCheck(96900, 96900);
    		break;
    	case "47": // OH
    		zipCheck(43000, 45999);
    		break;
    	case "48": // OK
    		zipCheck(73000, 74999);
    		break;
    	case "49": // OR
    		zipCheck(97000, 97999);
    		break;
    	case "51": // PA
    		zipCheck(15000, 19699);
    		break;
    	case "52": // PR
    		zipCheck(00600, 00900);
    		break;
    	case "53": // RI
    		if((postcode >= 02800 && postcode <= 02999) || (postcode == 06379)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "54": // SC
    		zipCheck(29000, 29999);
    		break;
    	case "55": // SD
    		zipCheck(57000, 57799);
    		break;
    	case "56": // TN
    		if((postcode >= 37000 && postcode <= 38599) || (postcode == 72395)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "57": // TX
    		if((postcode >= 75000 && postcode <= 79900) || (postcode >= 88501 && postcode <= 88599) || (postcode >= 73300 && postcode <= 73399)(postcode == 73949)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "58": // UT
    		zipCheck(84000, 84799);
    		break;
    	case "59": // VT
    		zipCheck(05000, 05999);
    		break;
    	case "61": // VA
    		if((postcode >= 20105 && postcode <= 20199) || (postcode >= 22000 && postcode <= 24699) || (postcode == 20301) || (postcode == 20370)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "60": // VI
    		if(postcode == 00800) { };
    		break;
    	case "62": // WA
    		zipCheck(98000, 99499);
    		break;
    	case "64": // WI
    		if((postcode >= 53000 && postcode <= 54999) || (postcode == 49936)) { zipCheckTrue() } else { zipCheckTrue() };
    		break;
    	case "63": // WV
    		zipCheck(24700, 26899);
    		break;
    	case "65": // WY
    		zipCheck(82000, 83199);
    		break;
    	case "6": // AE
    		zipCheck(09000, 09899);
    		break;			
    	case "8": // AE
    		zipCheck(09000, 09899);
    		break;
    	case "9": // AE
    		zipCheck(09000, 09899);
    		break;
    	case "10": // AE
    		zipCheck(09000, 09899);
    		break;
    	case "7": // AA
    		if(postcode == 34000) { };
    		break;
    	case "11": // AP
    		zipCheck(96200, 96699);
    		break;
    }
}

function validate_required(field) {
	with (field) {
		if (value==null||value=="") {
			return false;
  		} else {
			return true;
  		}
	}
}

function isUrl(field) {
	with(document.warrantyform){
		var regexp = '/((ftp|http|https):\/\/)+(www)*/';
		return regexp.test(field);
	}
}

function validateForm(thisform) {
	with (thisform) {
		if ((validate_required(firstname)==false) || (validate_required(lastname)==false) || (validate_required(address1)==false) || (validate_required(city)==false) || (validate_required(state)==false) || (validate_required(zip)==false) || (validate_required(phone)==false) || (validate_required(email)==false) || (validate_required(purchased_from)==false) || (validate_required(modelname)==false) || (validate_required(modelnum)==false) || (validate_required(serial)==false)) { 
			alertUser("required");
			return false;
		} else {
			return true;
		}
	}
}

function alertUser(which) {
	if(which == "required") {
		var mess = "All fields except Address2 are required.  Please ensure you've got all fields filled in and resubmit your info.";
	} 
	if(which == "url") {
		var mess = "Please do not enter any url's into your info.  Please correct this issue and resubmit your info."
	}
	alert(mess);				
}