// Validate Forms with fields of all types
function validateForm(allControls)
// Example: validateForm("username:username*UserName^grade:number*Grade^emailAddress:empty;email*Email");
  {			
	var controls=new Array();
	controls=allControls.split("^"); 

	
	var num=controls.length;
	var msg="";

	if(num>0){
	 for(var i=0;i<num;i++)
	   {
		
		control=controls[i];
		control = control.split(":");
		checksAndNames = control[1];
		checksAndNames = checksAndNames.split("*");
		msgControlName = checksAndNames[1];
		msgControlName="\n"+" "+"- "+msgControlName+" ";
		controlName = control[0];
		controlChecks = checksAndNames[0];
		controlChecks = controlChecks.split(";");
		checksNum=controlChecks.length;
		controlMsgForElements = "";
		value = document.getElementById(controlName).value
		
		for(var x=0;x<checksNum;x++){
		controlCheck=controlChecks[x];
		controlMsgs = '';
		switch(controlCheck){
			case "empty":
			case "required":
				if(!isNotEmpty(value)){
					controlMsgs+="is required"; 
				} break;
			case "email":
				emailCheck = checkEmail(value);
				switch(emailCheck){
					case "notvalid":
					controlMsgs+="is not valid"; break;
					case "illegalchars":
					controlMsgs+="contains illegal characters"; break;
				} break;
			case "phone":
				if(!checkPhone(value)){
					controlMsgs+="contains illegal characters"	;
				} break;
			case "password":
				passCheck = checkPassword(value);
				switch(passCheck){
					case "shortlength":
						controlMsgs+="should be 6 characters or more"; break;
					case "illegalchars":
						controlMsgs+="contains illegal characters"; break;
					case "weakpass":
						controlMsgs+="should be a stronger password"; break;
				} break;
			case "username":
				userCheck = checkUsername(value);
				switch(userCheck){
					case "shortlength":
						controlMsgs+="should be 6 characters or more"; break;
					case "illegalchars":
						controlMsgs+="contains illegal characters"; break;
				} break;
			case "dropdown":
				if(!checkDropdown(value)){
					controlMsgs+="is required";
				} break;
			case "number":
				if(!isNumber(value)){
					controlMsgs+="is not a number";
				} break;
				
		}
		if(controlMsgs!=""){
		controlMsgForElements+= controlMsgs;
		wholeMsg = msgControlName+controlMsgs;
		msg+=wholeMsg;
		}
		}
		if(controlMsgForElements!=""){
			document.getElementById(controlName).style.border='1px solid #CC0000';
			document.getElementById(controlName).style.backgroundColor='#FFE8E8';
			validationMsgId = "validationMsg_"+controlName;
			if(document.getElementById(validationMsgId)){
			document.getElementById(validationMsgId).innerHTML=" "+controlMsgForElements+" ";}
			else{
				document.getElementById(controlName).parentNode.innerHTML+="<span id='"+validationMsgId+"' style='color:#CC0000; font-size:11px; margin:5px'> "+controlMsgForElements+" </span>";
			}
		
			if(msg==wholeMsg){
				document.getElementById(controlName).focus();
			}
		}

	 }
	}

	if(msg!="")
	
	 {
	//This Alerts about all the messages
	  //alert(msg+"\n");
	  return false;
	 }//end if
  return true;
 }
		 
// Validation Functions:
function checkEmail(strng) {
if(strng){
// test if Valid email
    var emailFilter=/^.+@.+\..{2,3}$/;
    if (!(emailFilter.test(strng))) { 
       return 'notvalid';
    }
    else {
//test email for illegal characters
       var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
         if (strng.match(illegalChars)) {
          return 'illegalchars';
       	 }
    }} 
	return true;
}


// phone number - strip out delimiters

function checkPhone (strng) {
if(strng){
var stripped = strng.replace(/[\(\)\.\-\ ]/g, ''); //strip out acceptable non-numeric characters
    if (isNaN(parseInt(stripped))) {
       return false;
    }}
return true;
}


// password - between 6-8 chars, uppercase, lowercase, and numeral

function checkPassword (strng) {
if(strng){
    var illegalChars = /[\W_]/; // allow only letters and numbers
    
    if ((strng.length < 6)) {
       return "shortlength";
    }
    else if (illegalChars.test(strng)) {
      return "illegalchars";
    } 
    else if (!((strng.search(/(a-z)+/)) && (strng.search(/(A-Z)+/)) && (strng.search(/(0-9)+/)))) {
       return "weakpass";
    }}  
return true;  
}    


// username - 4-10 chars, uc, lc, and underscore only.

function checkUsername (strng) {
if(strng){
    var illegalChars = /\W/; // allow letters, numbers, and underscores
    if (strng.length < 4) {
       return "shortlength";
    }
    else if (illegalChars.test(strng)) {
    error = "illegalchars";
    }}
return true;
}       


// non-empty textbox

function isNotEmpty(strng) {

  if (strng.length == 0) {
     return false;
  }
  return true;	  
}

// Not a number
function isNumber(strng){
	if(strng){
	if(isNaN(parseInt(strng))){
		return false;
	}}
	return true;
	
}


// exactly one radio button is chosen

function checkRadio(checkvalue) {
   if (!(checkvalue)) {
       return false;
    }
return true;
}

// valid selector from dropdown list

function checkDropdown(choice) {
    if (choice == '') {
		return false;
    }    
return true;
}    

