

//Various string-checking functions.

//Usage Example
//
//
//<SCRIPT language="JavaScript" src = 
//	"validate.js">
//</SCRIPT>
//
//<SCRIPT>
//function checkform(form) {
//return (validateString(form.firstname, "first name") &&
//	validateString(form.lastname, "last name") &&
//	validateMemNum(form.membernum, "member number") &&
//	validateState(form.state) && 
//	validateZip(form.zip) &&
//	validatePledge(form.pledge))
//}
//</SCRIPT>
//
//<INPUT type = "submit" value = "Submit" 
//	onclick = "return checkform(this.form)">
//


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
}


//Validation functions for numerical data.

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 to strip all non-digits from a string.

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
}



//Code to validate a string.

//Global variable set at start of script

var emptyString = " field is blank. Please enter a ";
var invalidString = " field is blank/invalid. Please enter a ";

function validateString(myfield, s) {
	if (notNull(myfield.value)&& notBlank(myfield.value)) 
		return(true);
	else {
		alert("The " + s + emptyString + s);
		myfield.focus();
		return(false);
	}
}


//Functions for validating numerical input.

function validateNumber(myfield, s) {
	if (isDigits(myfield.value) && isInRange(myfield.value,0, 9999999999))
		return(true);

	else {
		
		alert("The " + s + invalidString + s);
		myfield.focus;
		return(false);
	}
}

function validateAmount(myfield) {
	if (notNull(myfield.value)) {
		newstring = stripChars(myfield.value, "$")
		if  (isNumber(newstring))
			return true
		else {
			myfield.focus()
			alert("Invalid amount. Please enter a valid dollar amount.")
		}
	}
	return false
}

//Code to validate state and ZIP input.

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"

function isStateCode (str) {
	var newstring = str.toUpperCase()
	if (STATECODES.indexOf(newstring) != -1 && str.indexOf("/") == -1)
		return true
	else 
		return false
}

function validateState(myfield) {
	if (notNull(myfield.value) && isSize(myfield.value, 2) && isStateCode(myfield.value))
		return true
	else {
		myfield.focus()
		alert("Invalid state code. Please enter 2-letter 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
}

function validateEmail (myfield, s) {

	if(!validateString(myfield, s))
		return false
	var emailStr = myfield.value
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
		alert("Invalid Email-Id (check @ and .)")
		myfield.focus()
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]
	if (user.match(userPat)==null) {
	    alert("The username of email address doesn't seem to be valid in " + s + ".")
		myfield.focus()
    	return false
	}
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
	    	if (IPArray[i]>255) {
	        	alert("Destination IP address of email address is invalid in " + s + "!")
				myfield.focus()
				return false
	    	}
    	}
    	return true
	}
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		alert("The domain name of email address doesn't seem to be valid in " + s + ".")
		myfield.focus()
    	return false
	}
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
	   	alert("The email address must end in a three-letter domain, or two letter country in " + s + ".")
		myfield.focus()
	   	return false
	}
	if (len<2) {
		alert("The email address is missing a hostname in " + s + ".")
   		return false
	}
	return true;
}
/*
function validateEmail(myfield, s) {
	if(!validateString(myfield, s))
		return false
	var newstring = myfield.value
	if (newstring.indexOf("@") != -1 && newstring.indexOf(".") != -1 && newstring.charAt(0) != "@" && newstring.charAt(newstring.length-1) != ".")
		return true
	else 
	{ 
		myfield.focus()
		alert("Invalid email address. Please enter correct email address.")
		return false
	}
}
*/
function validatePassword (password1, s1, password2, s2) {
	
	if(!validateString(password1, s1))
		return false
		
	if(!validateString(password2, s2))
		return false
	
	if (password1.value == password2.value)
		return true
	else
	{	
		password1.focus()
		alert("Your password does not match. Please enter same password twice")
		return false
	}
}

function validateList (mylist, s) {
	if (mylist.selectedIndex != 0)
		return true
	else
	{	
		mylist.focus()
		  alert("The " + s + " has not been selected. Please select " + s)
		return false
	}
}


var PICTURES = "JPG/JPEG/GIF/"

function getExtension(value) {
  return value.substring(value.lastIndexOf('.') + 1,value.length);
}

function isPicture (str) {
	var newstring = str.toUpperCase()
	if (PICTURES.indexOf(getExtension(newstring)) != -1 && str.indexOf("/") == -1)
		return true;
	else 
		return false;
}




var invalidPicture = " is invalid picture file. Please select jpg or gif file for "
function validatePicture(myfield, s) {
	if (notNull(myfield.value)&& notBlank(myfield.value) && isPicture(myfield.value)) 
		return true
	else {
		myfield.focus()
		alert("The " + s + invalidPicture + s)
		return false
	}
}
