//-- formValidator.js: Core Form validation routines

// GlobalVariables
var errors 			= false;
var formOK			= true; 
var err_msg			= '';
// These are the error messages returned through the alert window
var resp			= 'Please choose your response';
var fname 			= '"First Name" is empty.\n';
var lname 			= '"Last Name" is empty.\n';
var email_dom 		= 'The domain of the e-mail Address appears to be an invalid.\n';
var country 		= '"Country" is not selected.\n';
var address 		= '"Address" is either empty.\"\n';
var city 			= '"City" is either empty or invalid.\n';
var province 		= '"Please select the province/state" \n';
var zip 			= '"Postal/Zip Code" is either empty or invalid.\n';
var country 		= '"Country" is not selected.\n';
var phone 		    = '"Phone Number" is either empty or invalid.\n';
var fax 		    = '"Fax Number" is invalid.\n';
var age 			= '"Age" is not selected.\n';
var gender			= '"Please select your gender"';
var url				= '"The url is either empty or invalid"';
var name			= '"The name is empty"';
var entity_id		= '"The entity_id is empty"';
var category		= '"Please select a category"';
var description		= '"Please type in a description of your company"';
var msgEmail		= '"Please type in your email message"';
var email 			= "You did not enter a value into the email field.\n This is a required field. Please enter it now."
var emailInvalid	= '"The email Address" is invalid.\n Please check it and enter it now';

// Everything below this is used for the actual validation functions
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whitespace = " \t\n\r";
var decimalPointDelimiter = ".";
var phoneNumberDelimiters = "()-+." + whitespace;
var validPhoneChars = digits + phoneNumberDelimiters;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimeter = "-"+ whitespace;;
var validZIPCodeChars = digits+ZIPCodeDelimeter;
var validWWWDomains = "/.com/.net/.org/.edu/.mil/.gov/.int/.tv/.biz/.info/.ws/";
var validCountryDomains = "/.ac/.ad/.ae/.af/.ag/.ai/.al/.am/.an/.ao/.aq/.ar/.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/.cr/.cu/.cv/.cx/.cy/.cz/.de/.dj/.dk/.dm/.do/.dz/.ec/.ee/.eg/.eh/.er/.es/.et/.fi/.fj/.fk/.fm/.fo/.fr/.ga/.gd/.ge/.gf/.gg/.gh/.gi/.gl/.gm/.gn/.gp/.gq/.gr/.gs/.gt/.gu/.gw/.gy/";
validCountryDomains += "/.hk/.hm/.hn/.hr/.ht/.hu/.id/.ie/.il/.im/.in/.io/.iq/.ir/.is/.it/.je/.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/.mk/.ml/.mm/.mn/.mo/.mp/.mq/.mr/.ms/.mt/.mu/.mv/.mw/.mx/.my/.mz/.na/.nc/.ne/.nf/.ng/.ni/.nl/.no/.np/.nr/.nu/.nz/.om/.pa/.pe/.pf/.pg/.ph/.pk/.pl/.pm/.pn/.pr/.ps/.pt/.pw/.py/";
validCountryDomains += "/.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/.zr/.zw/";
var validDomains = validWWWDomains + validCountryDomains;


// Determine browser.
var isNS4 = (navigator.appName.indexOf("Netscape") >= 0 &&
                parseFloat(navigator.appVersion) >= 4) ? 1 : 0;
var isIE4 = (document.all) ? 1 : 0;
var isIE5 = (isIE4 && navigator.appVersion.indexOf("5.")) >= 0 ? 1 : 0;

function setError(msg) {
	err_msg += msg;
	errors = true;
	alert(msg);
	return false;
}


function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}

function warnEmpty (theField, s)
{   theField.focus()
    alert(s)
    return false
}

function isEmpty(s){
	return ((s == null) || (s.length == 0));
}

function isWhitespace(s){
    if (isEmpty(s)) return true;
    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function isDigit(c) {
	return ((c >= "0") && (c <= "9"));
}

function isInteger(s) {  
    if (isEmpty(s)) return true;
    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}

function trimStr(s){
	var lastBlank=s.indexOf(" ");
	var trimed=s.substring(0,lastBlank);
	return 
}


function countWords(content){
	var i=0;
	var numberofwords=1;
	if(content=="" || content.length==0)
		numberofwords=0;
	while(i<=content.length)
	{
		if (content.substring(i,i+1) == " ") {
			numberofwords++;
			i++; 
		}
		if (content.substring(i,i+1) == "\n") {
			numberofwords++;
			i++;
		}
		i++;
	}
	return numberofwords
}

function isMax(content,str){
	
	if(countWords(conntent)>300){
		alert(str);
		return false;
	}
	return true;
}

function checkEmail(theField) {
	if (isWhitespace(theField.value)) 
	{
  		theField.value="";
  		return warnEmpty(theField,email);
	}
	else if (!isEmail(theField.value))
	{
    	theField.value="";
    	return warnInvalid(theField,emailInvalid);
	}
  	return true;
}

function isDomain(s) {
	var domidx = s.lastIndexOf(".");
	var dom = s.substring(domidx);
	var dom_lc = dom.toLowerCase();
	if (validDomains.indexOf("/" + dom_lc + "/") == -1) return false;
	return true;
}

function isEmail(s) {
	var atsign = s.indexOf("@");
	if (atsign == -1)
	   return false;
	
	var user = s.substring(0, atsign);
	var domain = s.substring(atsign+1, s.length);

	if (isWhitespace(user)) 
	   return false;
	if (isWhitespace(domain)) 
	    return false;
	
	var dot = domain.indexOf(".");
	if (dot == -1) 
	   return false;
	return true;
}

function checkString(theField, msg) {
	if (theField.value.indexOf("...") != -1) 
	{
		theField.value="";
		//theField.focus();
		//if (isIE4)
			//changeColor(theField,"FFCC33");
		return setError(msg);
	}
    if (isWhitespace(theField.value)) 
    {
    	theField.value="";
    	//theField.focus();
    	//if (isIE4)
    	//	changeColor(theField,"FFCC33");
		return setError(msg);
    }
	return true;
}

function checkSelect(theField, msg) {
	if (theField.options[theField.selectedIndex].value == -1)
	{
		return setError(msg);
	}
	else
	{
		return true;
	}
}

function checkRadio(theField, msg) {
	var radioChecked = false;
	for (var i=0; i< theField.length; i++) {
		if (theField[i].checked) radioChecked = true;
	}
	if (!radioChecked)
	{
		theField.value="";
		return setError(msg);
		
	}
	return true;
}

function checkCheckGroup(form, prefix, startnum, endnum, msg) {
	var checkChecked = false;
	for (var i=startnum; i=endnum; i++) {
		checkChecked = eval ("form." + prefix + i + ".checked");
	}
	if (!checkChecked) return setError(msg);
	return true;
}

function checkNumbers(theField, msg){
	if (theField.value == null || theField.value == "")
	{
		theField.value="";
		theField.focus();
		if (isIE4)
			changeColor(theField,"FFCC33");
		return setError(msg);
	}
    var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters);
    if (isWhitespace(normalizedPhone))
    {
    	theField.focus();
    	if (isIE4)
    		changeColor(theField,"FFCC33");
    	return setError(msg);
    }
    else 
    {
		if (!isInteger(normalizedPhone)) 
		{
			theField.value="";
			theField.focus();
			if (isIE4)
				changeColor(theField,"FFCC33");
			return setError(msg);
		
		}
		else return true;
	}
}

function checkNumbersOnly(theField, msg){
	
    var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters);
   
		if (!isInteger(normalizedPhone)) 
		{
			theField.value="";
			theField.focus();
			if (isIE4)
				changeColor(theField,"FFCC33");
			return setError(msg);
		
		}
		else 
			return true;
	
}

function stripCharsInBag (s, bag){
    var returnString = "";
    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function changeColor(theField,color)
{
	if (isIE4)
		theField.style.background=color;
}
<!-- Network Performance Monitor Atek Canada SC1-SVR20 - Montreal -->

