// ------------------------------------------------------------------------
// Advanced Form Validation
// 
// for instruction and comments please see psvalidate_comments.js
//
// Philip Snow <phil@magnetic.com> 2001
// ------------------------------------------------------------------------
var submitcount=0;
var alertitem="";
var alerttext="";
var functionreturn=true;
var test = "TRUE";
var FieldName = "";
var FieldLabel = "";
var errtxt = "";

//Main validation function
function validateInput(frm,mask)
   {
	  	alertitem = "";
		errtxt = "";
		alerttext = "";
	 	functionreturn = true;
	
	  	var FrmLen = frm.elements.length;
	  	var maskarr = mask;
	  	for (var i = 0; i < FrmLen; i++)
			{
		  		FieldName = (frm.elements[i].name);
				if (navigator.appName != "Microsoft Internet Explorer") 
					{
						FieldLabel = (frm.elements[i].name);
					}
				else
					{
						FieldLabel = (frm.elements[i].label);
					}
				
				maskarr = mask.substring(i,i+1);
				var valdate = 1;
				var valtext = 1;
				var valnum = 1;
				var valtelenum = 1;
				var valemail = 1;
		  
			  	if (maskarr == "d")
					{
						valdate = validateDate(frm.elements[i].value,FieldName,FieldLabel);
					}
				if (maskarr == "t")
					{
						valtext = validateText(frm.elements[i].value,FieldName,FieldLabel);
					}
				if (maskarr == "n")
					{
						valnum = validateNum(frm.elements[i].value,FieldName,FieldLabel);
					}
				if (maskarr == "p")
					{
						valtelenum = validateTeleNum(frm.elements[i].value,FieldName,FieldLabel);
					}
				if (maskarr == "e")
					{
						valemail = validateEmail(frm.elements[i].value,FieldName,FieldLabel);
					}
			}
						
		if (alerttext != "")
		  	{
				alert (alerttext);
				frm.elements[alertitem].focus();
				return false;
			}
			
		if (submitcount == 0)
		    {
		      	submitcount++;
		     	return true;
		    }
		else
		    {
		      	alert("This information has already been sent. Thanks!");
		      	return false;
		    }
		return true; 
	}

//Date validation function
function validateDate(s,FieldName,FieldLabel)
	{
		if (s.length > 0)
			{
				strarr = new Array ();
				own_split(strarr, s, "/");
				if (strarr.length == 3)
					{
						for (var i = 0; i < strarr.length; i++)
							{
								if ((strarr[0] < 0) || (strarr[0] >12))
									{
										adderror(FieldName,FieldLabel+": The mm part is not valid. (1-12)");
										return false;
									}
								if ((strarr[1] < 0) || (strarr[1] >31))
									{
										adderror(FieldName,FieldLabel+": The dd part is not valid. (1-31)");
										return false;
									}
								if ((strarr[2] <= 0) || (strarr[2] >99))
									{
										adderror(FieldName,FieldLabel+": The yy part is not valid. (1-99)");
										return false;
									}
							}
						return true;
					}
				adderror(FieldName,FieldLabel+": Is not in the correct mm/dd/yy format.");
				return false;
			}
		adderror(FieldName,FieldLabel+": Is blank");
		return false;
	}

//Text validation function
function validateText(s,FieldName,FieldLabel)
	{
		if (!(s.length > 0))
		{
			adderror(FieldName,FieldLabel+": Is blank");
			return false;
		}
		return true;
	}

//Number validation function
function validateNum(s,FieldName,FieldLabel)
	{
		if (s.length > 0)
		{
			if (parseInt(s) > 0)
				{
					for (i = 0;  i < s.length;  i++)
				 		{
						    ch = s.charAt(i);
							if(!(isnumber(ch)))
							{
							adderror(FieldName,FieldLabel+": Has invalid character(s)!");
							i = 1000001;
							return false;
							}
						}
					return true;
				}			
			adderror(FieldName,FieldLabel+": Has invalid character(s)!");
			return false;
		}
		adderror(FieldName,FieldLabel+": Is blank");
		return false;
	}

//Telephone Number validation function
function validateTeleNum(s,FieldName,FieldLabel)
	{
		if (s.length > 0)
		{
			for (i = 0;  i < s.length;  i++)
	 		{
			    ch = s.charAt(i);
				if(!(own_instring(ch)))
					{
					adderror(FieldName,FieldLabel+": There seems to be some invalid characters.");
					i = 1000001;
					return false;
					}
			}
			return true;
		}
		adderror(FieldName,FieldLabel+": Is blank");
		return false;
	}

//E-Mail validation function
function validateEmail(s,FieldName,FieldLabel) //Advanced Email Validation taken from Sandeep V. Tamhankar and modified-->
	{
		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=s.match(emailPat);
		if (matchArray==null) 
			{
				adderror(FieldName,FieldLabel+": Seems incorrect (check @ and .'s)");
				return false;
			}
			
		var user=matchArray[1];
		var domain=matchArray[2];
		if (user.match(userPat)==null) 
			{
			    adderror(FieldName,FieldLabel+": The username doesn't seem to be valid!");
			    return false;
			}
		
		var IPArray=domain.match(ipDomainPat);		
		if (IPArray!=null) 
			{
			    for (var i=1;i<=4;i++) 
				  	{
				    	if (IPArray[i]>255) 
							{
				        	adderror(FieldName,FieldLabel+": Destination IP address is invalid!");
							return false;
				    		}
			    	}
			    return true;
			}
		
		var domainArray=domain.match(domainPat);		
		if (domainArray==null) 
			{
				adderror(FieldName,FieldLabel+": The domain name doesn't seem to be valid!");
				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) 
			{
		   		adderror(FieldName,FieldLabel+": Must end in a three-letter domain, or two letter country.");
				return false;
			}
		
		if (len<2) 
			{
			   adderror(FieldName,FieldLabel+": Make sure there's a host name preceding the domain.");
			   return false;
			}
		
		return true;
	}


//Add to Error Message function
function adderror(FieldName,errtxt)
	{
		if (functionreturn == true)
			{
				alerttext = "The following required data field(s) have errors:\n";
				functionreturn = false;
			}
		alerttext = alerttext + "\n - " + errtxt;		
		if (alertitem == "")
			{
				alertitem = FieldName;
			}
	}

//Isnumber function tests for valid substring of whole integer numbers only, accomodates JavaScripts lack of VBScripts InStr() function
function isnumber(c)
	{
		var checkOK = "0123456789";
		var ret  = false;
	
	  		for (j = 0;  j < checkOK.length;  j++)
			{
	      		if (c != checkOK.charAt(j))
					{
					continue;
					}
					else
					{
					ret = true;
					break;
					}
			}
		return ret;
	}	
	
	
//In string function to test for valid substring, accomodates JavaScripts lack of VBScripts InStr() function
function own_instring(c)
	{
		var checkOK = "0123456789-+-. ()\t\r\n\f";
		var ret  = false;
	
	  		for (j = 0;  j < checkOK.length;  j++)
			{
	      		if (c != checkOK.charAt(j))
					{
					continue;
					}
					else
					{
					ret = true;
					break;
					}
			}
		return ret;
	}

//String split function to accomodate JScripts lack of JavaScripts split function
function own_split(arr, str, delim)
	{
		var pos = 0;
		var num = 0;
		var start = 0;
		
		while (pos < str.length)
			{
				while((str.substring (pos, pos+1) != delim) && (pos < str.length))
					{
						pos++;
					}
				arr[num] = str.substring(start,pos);
				num++;
				start = pos+1;
				pos++;
			}
	}