function notNull(str) {
	if (str.length == 0 )
		return false
	else 
		return true
}

function notBlank(str) {
	for (i = 0; i < str.length; i++) {
		if (str.charAt(i) != " ")
			return true
	}
	return false
}

function isSize(str, size) {
	if (str.length == size) 
		return true
	else
		return false
}

function isDigits(str) {
	var i
	for (i = 0; i < str.length; i++) {
		mychar = str.charAt(i)
		if (mychar < "0" || mychar > "9")
			return false
	}
	return true
}

function isNumber(str) {
	numdecs = 0
	for (i = 0; i < str.length; i++) {
		mychar = str.charAt(i)
		if ((mychar >= "0" && mychar <= "9") || mychar 
			== ".") {
			if (mychar == ".")
				numdecs++
		}
		else 
			return false
	}
	if (numdecs > 1)
		return false	
return true
}

function isInRange(str, num1, num2) {
	var i = parseInt(str)
	return((i >= num1) && (i <= num2))

}

function stripNonDigits(str) {
	var i
	var newstring = ""
	for (i = 0;  i < str.length; i++) {
		mychar = str.charAt(i)
		if (isDigits(mychar)) 
			newstring += mychar
	}
	return newstring
}

function stripChars(str, chars) {
	var i
	var newstring = ""
	for (i = 0;  i < str.length; i++) {
		mychar = str.charAt(i)
		if (chars.indexOf(mychar) == -1)
			newstring += mychar
	}
	return newstring
}

//Global variable set at start of script
var emptyString = " field is blank. Please enter a "

function validateString(myfield, s) {
	if (notNull(myfield.value) && notBlank(myfield.value)) 
		return true
	else {
		myfield.focus()
		alert("The " + s + emptyString + s)
		return false
	}
}

function validateStrings2(field1, field1Name, field2, field2Name) {
	if ((notNull(field1.value) && notBlank(field1.value))
		|| (notNull(field2.value) && notBlank(field2.value)))
		return true;
	else {
		field1.focus()
		alert("Please, enter a value in one of the fields:\n\t" + field1Name + "\n\t" + field2Name)
		return false;
	}
}

function validateMemNum(myfield) {
	if (isDigits(myfield.value) && isInRange(myfield.value,100, 999))
		return true

	else {
		myfield.focus()
		alert("Invalid customer number. Please enter a three digit number between 100 and 999")
		return false
	}
}

function validateNumber(myfield, s, numMin, numMax) {
	if (isDigits(myfield.value) && isInRange(myfield.value,numMin,numMax))
		return true

	else {
		myfield.focus()
		alert("Invalid " + s +". Please enter a number between " + numMin + " and " + numMax + ".")
		return false
	}
}

function validatePledge(myfield) {
	if (notNull(myfield.value)) {
		newstring = stripChars(myfield.value, "$")
		if  (isNumber(newstring))
			return true
		else {
			myfield.focus()
			alert("Invalid pledge amount. Please enter a valid dollar amount.")
		}
	}
	return false
}

var STATECODES = "AL/AK/AZ/AR/CA/CO/CT/DE/DC/FL/GA/HI/ID/IL/IN/IA/KS/LA/ME/MD/MA/MI/MN/MS/MO/MT/NV/NH/NJ/NM/NY/NC/ND/OH/OK/OR/PA/PR/RI/SC/TN/TX/UT/VT/VA/WA/WV/WI/WY";
var CANADIANCODES = "AB/BC/MB/NB/NF/NT/NS/ON/PE/QC/SK/YT";
var AUSTRALIACODES = "ACT/NSW/NT/QLD/SA/TAS/VIC/WA";

function isStateCode (str) {
	var newstring = str.toUpperCase()
	if ((STATECODES.indexOf(newstring) != -1 || CANADIANCODES.indexOf(newstring) != -1 
		|| AUSTRALIACODES.indexOf(newstring) != -1) 
		&& str.indexOf("/") == -1)
		return true
	else 
		return false
}

function validateState(myfield) {
	if (notNull(myfield.value) && isStateCode(myfield.value))
		return true
	else {
		myfield.focus()
		alert("Invalid state code. Please enter state postal abbreviation.")
		return false
	}
}

function validateZip(myfield) {
	if (notNull(myfield.value)) {
		newstring = stripNonDigits(myfield.value)
		if (isSize(newstring,5) || isSize(newstring, 9)) 
			return true
	}
	myfield.focus()
	alert("Invalid zip code. Please enter 5-digit or 9-digit zip code.")
	return false
}

//var DOMAINS = ".ARPA/.COM/.EDU/.GOV/.NET/.ORG/.US/.CA/.RU/.BY";
var DOMAINS =".AD/.AE/.AF/.AG/.AI/.AL/.AM/.AN/.AO/.AQ/.AR/.ARPA/.AS/.AT/.AU/.AW/.AZ/.BA/.BB/.BD/.BE/.BF/.BG/.BH/.BI/.BJ/.BM/.BN/.BO/.BR/.BS/.BT/.BV/.BW/.BY/.BZ/.CA/.CC/.CD/.CF/.CG/.CH/.CI/.CK/.CL/.CM/.CN/.CO/.COM/.CR/.CU/.CV/.CX/.CY/.CZ/.DE/.DJ/.DK/.DM/.DO/.DZ/.EC/.EDU/.EE/.EG/.EH/.ER/.ES/.ET/.FI/.FJ/.FK/.FM/.FO/.FR/.FX/.GA/.GB/.GOV/.GD/.GE/.GF/.GH/.GI/.GL/.GM/.GN/.GP/.GQ/.GR/.GS/.GT/.GU/.GW/.GY/.HK/.HM/.HN/.HR/.HT/.HU/.ID/.IE/.IL/.IN/.INT/.IO/.IQ/.IR/.IS/.IT/.JM/.JO/.JP/.KE/.KG/.KH/.KI/.KM/.KN/.KP/.KR/.KW/.KY/.KZ/.LA/.LB/.LC/.LI/.LK/.LR/.LS/.LT/.LU/.LV/.LY/.MA/.MC/.MD/.MG/.MH/.MIL/.MK/.ML/.MM/.MN/.MO/.MP/.MQ/.MR/.MS/.MT/.MU/.MV/.MW/.MX/.MY/.MZ/.NA/.NATO/.NC/.NE/.NET/.NF/.NG/.NI/.NL/.NO/.NP/.NR/.NU/.NZ/.OM/.ORG/.PA/.PE/.PF/.PG/.PH/.PK/.PL/.PM/.PN/.PR/.PT/.PW/.PY/.QA/.RE/.RO/.RU/.RW/.SA/.SB/.SC/.SD/.SE/.SG/.SH/.SI/.SJ/.SK/.SL/.SM/.SN/.SO/.SR/.ST/.SV/.SY/.SZ/.TC/.TD/.TF/.TG/.TH/.TJ/.TK/.TM/.TN/.TO/.TP/.TR/.TT/.TV/.TW/.TZ/.UA/.UG/.UK/.UM/.US/.UY/.UZ/.VA/.VC/.VE/.VG/.VI/.VN/.VU/.WF/.WS/.YE/.YT/.YU/.ZA/.ZM/ZW";

function isEmail (str) {
	var newstring = str.toUpperCase()
	var ss = newstring.split (".");
	var sDomain = ss [ss.length - 1];
	if (DOMAINS.indexOf(sDomain) != -1 && str.indexOf("@") != -1 && str.indexOf("/") == -1)
		return true
	else 
		return false
}

function validateEmail (myfield) {
	if (notNull(myfield.value) && isEmail(myfield.value))
		return true
	else {
		myfield.focus()
		alert("Invalid e-mail address. Please enter a valid e-mail address.")
		return false
	}
	return false
}
