﻿/* For dynamic evaluation of submission forms. 
	The Form must have a submit button named "Submit", and any required fields must contain a "req=r" attribute. 
	Just pass the Form's Name as the argument and the script below will Validate for any required fields and check that there is at least one field with data.
	Script will then return to the form and Submit it to it's Action passing all fields as normal.
*/
function validateme(fn) {
	
	var frm = document.getElementById(fn);
	var newFields=[];
		var reqFields=[];
		var fields = document.forms[fn].elements;
		var err = "";
		var defVal1 = "none";
		var defEmail = "EmaiL@pbso.org";
		var defPhone = "(305) xxx-xxxx";
		var defTitles0 = "YOUR NAME";
		var defTitles1 = "TITLE / DEPARTMENT";
		var defTitles2 = "DEPARTMENT / DISTRICT";
		var defZip = "Zip Code";
		var re= new RegExp ("^\\((\\d{3})\\) ?( \\d{3}-)\\d{4} x-\\d{2,6}$|\\((\\d{3})\\) ?( \\d{3}-)\\d{4}$");
		var re2= new RegExp ("^(\\+\\d)*\\s*(\\(\\d{3}\\)\\s*)*\\d{3}(-{0,1}|\\s{0,1})\\d{2}(-{0,1}|\\s{0,1})\\d{2}$");
		var re3=new RegExp ("^[\\_]*([a-zA-Z0-9]+(\\.|\\_*)?)+@([a-zA-Z][a-zA-Z0-9\\-]+(\\.|\\-*\\.))+[a-zA-Z]{2,6}$");
		var re4=new RegExp ("^[\\w\\.\\'\\\\/\\-,]{2,}([\\s][#\\w\\.\\'\\\\/\\-,]{2,})+$");
		var re5=new RegExp ("^(\\d{5}-)\\d{4}$|^(\\d{5})$");
		var re6=new RegExp ("^(\\d{1,2})$");
	
		for(f=0;f<fields.length;f++){ 
			if( ((fields[f].value != "") && (fields[f].value != null)) && ((fields[f].name.toUpperCase() != "SUBMIT") && (fields[f].name.toUpperCase() != "COMMIT") && (fields[f].name.toUpperCase() != "STEP")) ){
				newFields.push(fields[f]);
			}
		}
		n = document.getElementById(fn).elements;
		for(f=0;f<n.length;f++){
			nn = n[f];
			
			if(nn.attributes['req']){
				thisReq = nn.attributes['req'].value.split(",");
				
				if(thisReq[1]){
					if(thisReq[1] == "email"){
						if((nn.value != "") && (nn.value != null)){
							if(!nn.value.match(re3) || nn.value.match("EmaiL")){
								nn.validationmsg = "Your Email address must be valid Email address.";
								reqFields.push(fields[f]);
							}
						}
					}else if(thisReq[1] == "zip"){
						if((nn.value != "") && (nn.value != null)){
							if(!nn.value.match(re5) || nn.value.match("00000")){
								nn.validationmsg = "Zip Code must be either 5 or 5+4 digits.";
								reqFields.push(fields[f]);
							}else if(nn.value == defZip){
								nn.validationmsg = "Please use a valid Zip Code.";
								reqFields.push(fields[f]);
							}
	
						}
					}else if(thisReq[1] == "phone"){
						if((nn.value != "") && (nn.value != null)){
							if(!nn.value.match(re2)){
								nn.validationmsg = "Your Phone Number must be a valid pattern such as:\n (305) 688-3000\n (305) 688-3000 x-108\n 688-3000\n 688-3000 x-108";
								reqFields.push(fields[f]);
							}
							
						}
					}else if(thisReq[1] == "propername"){ 
						if((nn.value == "") || (nn.value == null) || (nn.value == defTitles0) || (!nn.value.match(re4))){
								nn.validationmsg = "The name in "+ fields[f].name +" must be a full, proper name and may include: \n    - Prefix\n    - Suffix\n    - First or Middle initials\n    - may finish with an employment number (#1212) if so desired.";
								reqFields.push(fields[f]);
							
						}
					}else if(thisReq[1] == "num"){ 
						if((nn.value != "") && (nn.value != null)){
							if(!nn.value.match(re6)){
								reqFields.push(fields[f]);
							}
						}
					}
				}
				if( (thisReq[0] == 'r') && (fields[f].name.toUpperCase() != "SUBMIT") ){
					if((nn.value == "") || (nn.value == null)){
						reqFields.push(fields[f]);
					}
				}
	
			}
		}
	
		if(reqFields.length > 0){ 
			if(newFields.length < 1) {
				err += "\nYou must provide at least a Question in this form.";
				alert(err);
			}else if(newFields.length > 0) {
				for(f=0;f<reqFields.length;f++){
					err += "\n - "+reqFields[f].validationmsg+"";
				}
				alert("Oops:\n"+err);
			}
			return false;
		
		} else {
			return true;
		}
		return false;
}
