function print_err(f, err)
{
        if ( f != null && f.type && f.type == "text") {
	    f.focus();
	    f.select();
        }
	alert(err);
	return false;
}
function isNotNull(f, errstr)
{
	trim(f);
	return ( (f.value=="") ? print_err(f, errstr) : true);
}

function isNumber(f, errstr) 
{
	if ( parseInt(f.value, 10) != f.value) 
		return print_err(f, errstr);
	// If decimal strip
	if ( f.value.indexOf(".") != -1)
		f.value = parseInt(f.value, 10);
	return true;
}

function trim(f)
{
	var val = f.value;
	var start = 0, end=0, i=0;
	for ( ; i< val.length; i++) 
		if ( val.charAt(i) != ' ') {
			start = i;
			break;
		}
	for (i=val.length -1; i>= 0; i--) 
		if ( val.charAt(i) != ' ') {
			end = i+1;
			break;
		}
	f.value = (start==end) ? "" : val.substring(start, end);
}


function checkAddr(addr1, addr2, errstr, nullOkay)
{
	trim(addr1);
	trim(addr2);
	if ( addr1.value == "" ) {
		if (addr2.value == "") {
			return (nullOkay) ? true : print_err(addr1, errstr);
		}
		addr1.value = addr2.value;
		addr2.value = "";
	}
	if ( !checkValue(addr1,
	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,#&0123456789 /",
			"Address") ) 
		return false;
	if ( addr2.value != "" )
		return checkValue(addr2,
	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,#&0123456789 /",
			"Address"); 
	return true;
}
// Function to check that a field is ascii and contains the given characters
function checkValue(f, verify, fieldname)
{
	trim(f);
	var val = f.value;
	for (var i=0; i< val.length; i++) {
		var c = val.charAt(i);
		var found = false;
		for ( var j=0; j< verify.length; j++) {
			if ( c == verify.charAt(j) )  {
				found = true;
				break;
			}
		}
		if (! found)
			return print_err(f, fieldname + " cannot contain '" + c + "'");
	}
	return true;
}

function verifyCity(nm, nullOkay)
{
	trim(nm);
	if ( nm.value == "") {
		if ( nullOkay) 	return true;
		else return print_err(nm, "Please enter City");
	}
	return checkValue(nm,
	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,& ","City"); 
}

function verifyEmail(f, nullOkay, errstr)
{
        trim(f);
	if (f.value == "") {
		if ( nullOkay ) {
                    return true;
                }
		return print_err(f, "Email not entered\n" + errstr);
	}
        var re = new RegExp("^.+@.+\..{2,}$", "gi");
        if (!re.test(f.value)) {
            return print_err(f, "Email is invalid\n" + errstr);
        }
	return checkValue(f,
	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789!@#$%^-_~<>",
			"Email");
}

function verifyAlphaNum(nm, fieldName, nullOkay)
{
	trim(nm);
	if ( nm.value == "") {
		if ( nullOkay) 	return true;
		else return print_err(nm, "Please enter " + fieldName);
	}
	return checkValue(nm,
	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,& ","City"); 
}

var States = new Array(
"AL","AK","AR","AZ","CA","CO","CT", "DC","DE","FL",
"GA","HI","IA","ID","IL","IN","KS","KY","LA", "MA",
"MD","ME","MI","MN","MO","MS","MT","NC","ND","NE",
"NH","NJ","NM","NV","NY","OH","OK","OR","PA","PR",
"RI","SC","SD","TN","TX","UT","VA","VT","WA","WI",
"WV","WY", "XX", "GU");
var ALZip = new Array(350,369);
var AKZip = new Array(995,999);
var ARZip = new Array(716,729);
var AZZip = new Array(850,865);
var CAZip = new Array(900,966);
var COZip = new Array(800,816);
var CTZip = new Array(60,69);
var DEZip = new Array(197,199);
var DCZip = new Array(200,205);
var FLZip = new Array(320,349);
var GAZip = new Array(300,319);
var HIZip = new Array(967,968);
var IAZip = new Array(500,528);
var IDZip = new Array(832,838);
var ILZip = new Array(600,629);
var INZip = new Array(460,479);
var KSZip = new Array(660,679);
var KYZip = new Array(400,427);
var LAZip = new Array(700,714);
var MAZip = new Array(10,27);
var MDZip = new Array(206,219);
var MEZip = new Array(39,49);
var MIZip = new Array(480,499);
var MNZip = new Array(550,567);
var MOZip = new Array(630,658);
var MSZip = new Array(386,397);
var MTZip = new Array(590,599);
var NCZip = new Array(270,289);
var NDZip = new Array(580,588);
var NEZip = new Array(680,693);
var NHZip = new Array(30,38);
var NJZip = new Array(70,89);
var NMZip = new Array(870,884);
var NVZip = new Array(889,898);
var NYZip = new Array(4,4,90,149);
var OHZip = new Array(430,458);
var OKZip = new Array(730,749);
var ORZip = new Array(970,979);
var PAZip = new Array(150,196);
var PRZip = new Array(6,9);
var RIZip = new Array(28,29);
var SCZip = new Array(290,299);
var SDZip = new Array(570,577);
var TNZip = new Array(370,385);
var TXZip = new Array(750,799);
var UTZip = new Array(840,847);
var VAZip = new Array(201,201,220,246);
var VTZip = new Array(50,59);
var WAZip = new Array(980,994);
var WIZip = new Array(530,549);
var WVZip = new Array(247,268);
var WYZip = new Array(820,831);
var GUZip = new Array(969,969);


function verifyState(s, nullOkay)
{
	s.value = s.value.toUpperCase();
	if ( s.value == "" ) {
		if (nullOkay) return true;
		else return print_err(s, "Please enter State");
	}
	for (var i=0; i< States.length; i++) {
		if ( s.value == States[i])
			return true;
	}
	return print_err(s, "Invalid State");
}

function verifyTel(f, nullOkay, str)
{
	if ( str == null) str = "telephone"; 
	trim(f); 
	if ( f.value != "" )
		nullOkay = false;
	if ( nullOkay && f.value == "" )
		return true;
	if ( f.value == "" )
		return print_err(f, "Please enter " + str + " number");
	var exp = new RegExp(
	  "^[(]{0,1}([0-9]{3})[)]{0,1} {0,1}[-]{0,1}([0-9]{3})[-]{0,1} {0,1}([0-9]{4})$");
	var arr = null;
	if ( (arr = exp.exec(f.value)) == null) 
		return print_err(f, "Invalid " + str + " number");
	else
		f.value = "(" + arr[1] + ")" + arr[2] + "-" + arr[3];
	return true;
}


function verifyZip(one, two, nullOkay) {
	trim(one); trim(two);
        var oneVal = one.value;
        var twoVal = two.value;
	if ( one.value == "") {
		if ( nullOkay)
			return true;
		else
			return print_err(one, "Please enter Zip Code."); 
	}
	if ( one.value.length < 5) 
		return print_err(one, "Invalid Zip Code. Zip Code should be "
			+ "at least 5 numbers.");
	if ( !isNumber(one, "Invalid Zip Code.") ) 
		return false;
        one.value = oneVal;
	if ( two.value != "") {
          if (!isNumber(two, "Invalid Zip Code.")) {
            return false;
          }
          else if (two.value.length < 4) {
            return print_err(two, "Invalid Zip Code. ");
          }
          else {
            return true;
          }

	}
        two.value = twoVal;
	return true;
}
function verifySZip(one, two, state, nullOkay)
{
	if ( !verifyZip(one, two, nullOkay) )
		return;
	if ( one.value != "") {
		var pre = parseInt(one.value.substr(0, 3), 10);
		var arr = eval(state + "Zip");
		for (var i =0; i < arr.length; i++) {
			if ( pre >= arr[i] && pre <= arr[++i])
				return true;
		}
		return print_err(one, "Zip code is invalid for " + state ); 
	}
	return true;
}

