// JavaScript Document

// *** TEST ZIPCODE ****
	function testdbzip(zip) {
		
		url = "/shared/functions/test.zip.asp?id="+zip;
		
		// Internet Explorer
		try { req = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch(e) {
		  try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
		  catch(oc) { req = null; }
		  
		}
		
		// Mozailla/Safari
		if (req == null && typeof XMLHttpRequest != "undefined") {
		  req = new XMLHttpRequest();
		}
		
		if (req != null) {
		  req.onreadystatechange = processtestzip;
		  req.open("GET", url, true);
		  req.send('');
		}
	}
	
	function processtestzip(evt) {
		if (req.readyState == 4) {
			if ((req.status == 200) || (req.status == 0)) {
				if (req.responseText.match('Please Select') == null){
					start = document.Car.OZipCode.value;
					return req.responseText;
				}
			}
		}
	}

	function fullziptest(zip) {
		if(!isZip(zip)){
			return false;
		}else{
			if(!testdbzip(zip)){
				return false;
			}else{
				return true;
			}
		}
	}

var req;
var animation = "<img src=\"/images/framework/loading_animation.gif\" align=\"absmiddle\">";
var domain = "/";
var url = "";
var stateChanged = "processData";
var processSpan;

var strform;
var strzip;
var strfield;
var strct;
var runon = false;

/**** AJAX DYNAMIC SCRIPTING  ****/
	
	function loadpagedata(url) {
		// Internet Explorer
		try { req = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch(e) {
		  try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
		  catch(oc) { req = null; }
		}
		
		// Mozailla/Safari
		if (req == null && typeof XMLHttpRequest != "undefined") {
		  req = new XMLHttpRequest();
		}
		
		// Call the processChange() function when the page has loaded
		if (req != null) {
			
		  req.onreadystatechange = eval(stateChanged);
		  req.open("GET", url, true);
		  req.send('');
		}
	}
	

	function processData(evt) {
		if (req.readyState==4 || req.readyState=="complete") {
			getObject(processSpan).innerHTML = req.responseText;
			
	 	}
	}
	
/**** PROCESS ZIPCODE DATA  ****/
	function processzipdata(evt) {
		if (req.readyState == 4 || req.readyState=="complete") {
			if(req.responseText == "False") {
				if(strct=="CA") {
					PrintZipData (strform, strfield, 'Not a valid Canadian PostalCode', false);
				}else if(strct=="US") {
					PrintZipData (strform, strfield, 'Not a valid US Zipcode', false);
				}else{
					PrintZipData (strform, strfield, 'Not a valid US or Canadian Zipcode', false);
				}
			}else{
				PrintZipData (strform, strfield, req.responseText, true);
				
			}
			if(!runon){
				alert("here"+ runon)
				runon = false;
				runall();
			}
		}
	}
	
	
	function GetZipData(form, zip, field, ct, ret) {
		if(ret){runon = true;}else{runon = false;}
		zip = zip.toUpperCase();
		strform = form;
		strzip = zip;
		strfield = field;
		strct = ct;
		
		eval("document."+form+"."+field+".value = '"+zip+"'");
		
		if(ct=="CA"){
			if(isCAZip(zip)){
				url = domain+"shared/functions/get.zip.asp?id="+zip+"&Act="+ct;
				getObject(strfield+"Span").innerHTML = animation + " Checking";
				stateChanged = "processzipdata"
				loadpagedata(url);
			}else{
				PrintZipData (form, field, 'Not a valid Canadian PostalCode', false)
				if(runon){runon = false;runall();}
			}
		}else{
			if(ct=="US"){
				if(isUSZip(zip)){
					url = domain+"shared/functions/get.zip.asp?id="+zip+"&Act="+ct;
					getObject(strfield+"Span").innerHTML = animation + " Checking";
					stateChanged = "processzipdata"
					loadpagedata(url);
				}else{
					PrintZipData (form, field, 'Not a valid US Zipcode', false)
					if(runon){runon = false;runall();}
				}
			}else{
				if(isUSZip(zip)||isCAZip(zip)){
					url = domain+"shared/functions/get.zip.asp?id="+zip+"&Act="+ct;
					getObject(strfield+"Span").innerHTML = animation + " Checking";
					stateChanged = "processzipdata"
					loadpagedata(url);
				}else{
					PrintZipData (form, field, 'Not a valid US or Canadian Zipcode', false)
					if(runon){runon = false;runall();}
				}
			}
		}
	}
	
	function PrintZipData (form, field, mes, act){
		if(act){
			eval("document."+form+"."+field+".setAttribute('class', 'field')");
			getObject(field+"Span").setAttribute("class", "GoodAddress");
		}else{
			eval("document."+form+"."+field+".setAttribute('class', 'badfield')");
			getObject(field+"Span").setAttribute("class", "BadAddress");
		}
		getObject(field+"Span").innerHTML = mes;
	}
	
	function fullziptest(zip) {
		if(!isZip(zip)){
			return false;
		}else{
			if(!testdbzip(zip)){
				return false;
			}else{
				return true;
			}
		}
	}

	function TestNumb (objname, errormes) {
		if(!IsNumeric(objname.value)){
			objname.value = "";
			alert(errormes);
		}
	}

	function MM_goToURL() { //v3.0
	  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
	  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
	}

	function isZip(s) {
		 reZip = new RegExp(/(^\d{5}$)/);
		 if (!reZip.test(s)) {
			  return false;
		 }
		return true;
	}
	
	

	function isUSZip(s) {reZip = new RegExp(/(^\d{5}$)/);if (!reZip.test(s)) {return false;}return true;}
	function isCAZip(s) {reZip = new RegExp(/(^[A-Z]\d[A-Z] \d[A-Z]\d$)/);if (!reZip.test(s)) {return false;}return true;}
	

	function IsNumeric(sText){
	   var ValidChars = "0123456789.";
	   var IsNumber=true;
	   var Char;
	
	 
	   for (z = 0; z < sText.length && IsNumber == true; z++) 
		  { 
		  Char = sText.charAt(z); 
		  if (ValidChars.indexOf(Char) == -1) 
			 {
			 IsNumber = false;
			 }
		  }
	   return IsNumber;
   }
   
	function echeck(str) {var at="@";var dot=".";var lat=str.indexOf(at);var lstr=str.length;var ldot=str.indexOf(dot);if (str.indexOf(at)==-1){return false}if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){return false}if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){return false}if (str.indexOf(at,(lat+1))!=-1){return false}if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){return false}if (str.indexOf(dot,(lat+2))==-1){return false}if (str.indexOf(" ")!=-1){return false}return true}

	function formatCurrency(num) {
		num = num.toString().replace(/\$|\,/g,'');
		if(isNaN(num))
		num = "0";
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num*100+0.50000000001);
		cents = num%100;
		num = Math.floor(num/100).toString();
		if(cents<10)
		cents = "0" + cents;
		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
		num.substring(num.length-(4*i+3));
		return (((sign)?'':'-') + '$' + num + '.' + cents);
	}

	function formatZero(num) {
		num = num.toString().replace(/\$|\,/g,'');
		if(isNaN(num))
		num = "0";
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num*100+0.50000000001);
		cents = num%100;
		num = Math.floor(num/100).toString();
		if(cents<10)
		cents = "0" + cents;
		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+ num.substring(num.length-(4*i+3));
		return (((sign)?'':'-') + num + '.' + cents);
	}

	function cleanNumber(strNum) {
		if (!strNum) return strNum;
		strNum = replace(strNum, '$', '', 0);
		strNum = replace(strNum, ',', '', 0);
		strNum = replace(strNum, '%', '', 0);	
		return strNum;
	}
	
	function getObject(name) {
		
		if (document.getElementById) {
			//alert('getEelementByID');
			return document.getElementById(name);
		
		} else if (document.all) {
			//alert('all');
			return document.all[name];
		
		} else if (document.layers) {
			//alert('layers');
			return document.layers[name];
		} 
	}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XX SLIDING DIVS
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
	var timerlen = 5;
	var slideAniLen = 250;
	
	var timerID = new Array();
	var startTime = new Array();
	var obj = new Array();
	var endHeight = new Array();
	var moving = new Array();
	var dir = new Array();

	function slidedown(objname){
        if(moving[objname])
                return;

        if(document.getElementById(objname).style.display != "none")
                return; // cannot slide down something that is already visible

        moving[objname] = true;
        dir[objname] = "down";
        startslide(objname);
	}

	function slideup(objname){
        if(moving[objname])
                return;

        if(document.getElementById(objname).style.display == "none")
                return; // cannot slide up something that is already hidden

        moving[objname] = true;
        dir[objname] = "up";
        startslide(objname);
	}

	function startslide(objname){
        obj[objname] = document.getElementById(objname);

        endHeight[objname] = parseInt(obj[objname].style.height);
        startTime[objname] = (new Date()).getTime();

        if(dir[objname] == "down"){
                obj[objname].style.height = "1px";
        }

        obj[objname].style.display = "block";

        timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
	}

	function slidetick(objname){
        var elapsed = (new Date()).getTime() - startTime[objname];

        if (elapsed > slideAniLen)
                endSlide(objname)
        else {
                var d =Math.round(elapsed / slideAniLen * endHeight[objname]);
                if(dir[objname] == "up")
                        d = endHeight[objname] - d;

                obj[objname].style.height = d + "px";
        }

        return;
	}

	function endSlide(objname){
        clearInterval(timerID[objname]);

        if(dir[objname] == "up")
                obj[objname].style.display = "none";

        obj[objname].style.height = endHeight[objname] + "px";

        delete(moving[objname]);
        delete(timerID[objname]);
        delete(startTime[objname]);
        delete(endHeight[objname]);
        delete(obj[objname]);
        delete(dir[objname]);

        return;
	}
