var SAFERRORHEADING = "Important";
var SAFERRORMSG = "We need you to correct or provide more information. Please see each section marked by an error icon and follow the instructions.";
var SAFREQUIREDMSG = "Please provide ";
var SAFCHECKMSG = "Please check ";
var SAFCHOOSEONEMSG = "Please choose one of the above options";
var SAFPASSMATCHMSG = "Passwords must match.";

var MASKSPACES = /\s/g;
var MASK3DIGITS = /(^\d{3}$)/;
var MASK3DIGITSMSG = "must be 3 digits";
var MASK4DIGITS = /(^\d{4}$)/;
var MASK4DIGITSMSG = "must be 4 digits";
var MASK5DIGITS = /(^\d{5}$)/;
var MASK5DIGITSMSG = "must be 5 digits";
var MASKVALIDEMAIL = /^[\w._%+-]+@[\w.-]+\.(?:[a-z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|edu|int)$/i;
var MASKVALIDEMAILMSG = "is invalid";
var MASKVALIDPHONE = /^\(?[1-9]\d{2}[)-.]?\s?\d{3}[-.\s]?\d{4}$|(^\(?[1-9]\d{2}[)-.]?\s?\d{3}[-.\s]?\d{4}\s?\d{1,5}$)/;
var MASKVALIDPHONEMSG = "is invalid";
var MASKZIPCODE = /(^\d{5}$)/;
var MASKZIPCODEMSG = "must be 5";
var MASKVALIDDATEOFBIRTH = /^[0-1]\d(\-|\/|\.)[0-3]\d\1[1][9]\d{2}$/;
var MASKVALIDDATEOFBIRTHMSG = "is invalid";
var MASKVALIDCCNUM = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}|5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}$/;
var MASKVALIDCCNUMMSG = "is invalid or not an accepted card type";


var timer = setTimeout('',2000);
var lastFieldValidated = "";
var lastFieldFocused = "";
var isValid = 0;
var firstPass = 0;


function validate(vFld) {
	if (document.getElementById && document.createTextNode) {
		var fld = document.getElementById(vFld);
		var e, required, requiredErr, requiredIf, requiredIfErr, masked, maskedErr, multiple, charLimited, charLimitedErr, pass, passErr, checkErr;
		message = fld.title;
		thisRadio = "";
		thisCheckbox = "";
		
		validationRules = fld.className.split(' ');
		if (fld.type == "radio") {
			defList = fld.parentNode.parentNode.parentNode;
			thisRadioId = fld.id.replace(/\d/g,'');
			elemMsg = document.getElementById(thisRadioId + "Msg");
		} else {
			defList = fld.parentNode.parentNode;
			elemMsg = document.getElementById(fld.id + "Msg");
		}
		
		for (var i = validationRules.length; i != 0; i--) {
			var vRule = validationRules[i-1];
			if (vRule == "REQUIRED") {
				required = 1;
			}
			if (vRule.indexOf("REQUIREDIF") != -1) {
				requiredIf = 1;
				requiredIfId = vRule;
			}
			if (vRule.indexOf("MASK") != -1) {
				masked = 1;
				maskMsg = eval(vRule + "MSG");
				maskrule = eval(vRule);
				var maskId = vRule;
			}
			if (vRule.indexOf("CHARLIMIT") != -1) {
				charLimited = 1;
				limit = vRule.replace('CHARLIMIT','');
			}
			if (vRule.indexOf("HAS") != -1) {
				multiple = 1;
				n = vRule.replace('HAS','');
				id = fld.id.replace(/\d/g,'');
			}
			if (vRule.indexOf("PASSMATCH") != -1 ) {
				pass = 1;
			}
		}
		if (fld.type == "radio") {
			thisRadio = eval('fld.form.' + fld.name);
			message = thisRadio[0].title;
			if (required && !isChecked(thisRadio)) {
				requiredErr = 1;
			}
		} else if (fld.type == "checkbox") {
			if (required && (fld.checked == false)) {
				checkErr = 1;
			}
		} else if (fld.type == "text" || fld.type == "select-one" || fld.type == "textarea" || fld.type == "password") {
			if (required && (fld.value == "" || fld.value == null)) {
				requiredErr = 1;
			}
			if (requiredIf) {
				if (!valRequiredIf(fld.form,fld.id,requiredIfId)) {
					requiredIfErr = 1;
				}
			}
			if (charLimited && fld.value != "") {
				if (!withinCharLimit(fld.value, limit)) {
					charLimitedErr = 1;
				}
			}
			
			if (multiple) {
				for (var i = 1; i < n; i++) {
					fld.value += document.getElementById(fld.id + i).value;
				}
			}
			if (pass) {
				var passField = document.getElementById('pass');
				var passconfirmField = document.getElementById('passconfirm');
				if (passField.value != passconfirmField.value) {
						if (firstPass >= 1) { firstPass = 2; } else { firstPass = 1; }
						passErr = 1;
					} 
			}
			if (masked && !requiredErr) {
				if (!maskrule.test(fld.value)) {
					maskedErr = 1;
				} else if (maskId == "MASKZIPCODE") {
					setCookie('zip',fld.value);
				}
			}
		}
		
		if (maskedErr) {
			message = message + " " + maskMsg;
		} else if (charLimitedErr) {
			message = message + " must be less than " + n + " characters";
		} else if (requiredErr) {
			message = SAFREQUIREDMSG + message.toLowerCase();
		} else if (checkErr) {
			message = SAFCHECKMSG + message.toLowerCase();
		} else if (passErr) {
			if (firstPass == 2) { 
				message = SAFPASSMATCHMSG; 
			} else { 
				message = "\u00A0"; }
		} else {
			message = "\u00A0";
		}
		
		if (requiredErr || requiredIfErr || charLimitedErr || maskedErr || passErr || checkErr) {
			elemMsg.parentNode.className += "error";
			elemMsg.firstChild.nodeValue = message;
			e = 1;
		} else {
				elemMsg.parentNode.className = "";
				elemMsg.firstChild.nodeValue = message;
		}
		
		lastFieldValidated = vFld;
		
		if (!e) {
			return true; 
		}
		else {
			return false;
		}
	}
}


function setSAF() {
	if (document.getElementById && document.createTextNode) {
		var fs = document.forms;
		for (var i = fs.length; i != 0; i--) {
			var thisForm = fs[i-1];
			if (thisForm.className == "saf") {
				thisForm.onsubmit = function() { return validateAll(this); }
				
				
				if (document.getElementById('releases')){
				var releasesField = document.getElementById('releases');
				releasesField.onkeypress = numberOnly;}
				
				var safFields = thisForm.elements;
				for (var j = safFields.length; j != 0; j--) {
					var thisField = safFields[j-1];
					
					if (thisField.type != "radio" && thisField.type != "text" && thisField.type != "select-one" && thisField.type !="textarea" && thisField.type != "password" && thisField.type != "checkbox") continue;
						thisField.onblur = function() { setBlur(this); }
					
					if (thisField.type == "select-one") {
						thisField.onchange = function() { setBlur(this); }
					}
					
					if (thisField.type == "radio" || thisField.type == "checkbox") {
						thisField.onfocus = function() { setFocus(this,true); }
						thisField.onclick = function() { setBlur(this); }
					} else {
						thisField.onfocus = function() { setFocus(this,false); }
					}
				}
			}
		}
	}
}

function setFocus(thisField,waitToValidate) {
	if (document.getElementById && document.createTextNode) {
		if (thisField.type == "radio") {
			var parentDL = thisField.parentNode.parentNode.parentNode.parentNode;
		} else {
			var parentDL = thisField.parentNode.parentNode;
		}
		if (parentDL.className.indexOf("focus") == -1 && parentDL.className.indexOf("error") == -1 && parentDL.className.indexOf("valid") == -1) {
			parentDL.className = "focus";
		}
		if ((waitToValidate && thisField.id.lastIndexOf("0") == -1) || (thisField.id == lastFieldValidated) || (thisField.id == lastFieldFocused)) {
			clearTimeout(timer);
		}
		lastFieldFocused = thisField.id;
	}
}

function setBlur(thisField) {
	if (document.getElementById && document.createTextNode) {
		timer = setTimeout("validate('" + thisField.id + "')",200);
	}
}

function validateAll(thisForm) {
	var containsErrors = 0;
	var safFields = thisForm.elements;
	for (var j = safFields.length; j != 0; j--) {
		var thisField = safFields[j-1];
		if (thisField.type != "radio" && thisField.type != "text" && thisField.type != "select-one"  && thisField.type != "textarea" && thisField.type != "password" && thisField.type != "checkbox") continue;
			isValid = validate(thisField.id);
		if (validate(thisField.id) == false) {
			containsErrors = 1;
		}
	}
	if (containsErrors) {
		scrollTo(0,0);
		return false;
	}
	return true;
}

function valRequiredIf(f,fld,reqClassName,fldtype) {
	var filter = reqClassName.split('-');
	var dependantField = eval("f." + filter[1]);
	var dependantValue = filter[2];
	var actualValue;
	if (dependantField.type == "radio" || dependantField.type == "checkbox") {
		if (dependantField.checked) { 
			actualValue = dependantField.value;
		}
	} else {
		actualValue = dependantField.value;
	}
		
	if (actualValue == dependantValue || (dependantValue == "NOTNULL" && actualValue.length != 0) || (dependantValue == "NULL" && actualValue.length == 0)) {
		if (fldtype == "radio") {
    		var thisField = document.getElementById(fld + "0");
    	} else {
    		var thisField = document.getElementById(fld);
   		}
   		if (thisField.value == "" || thisField.value == null) {
			return 0;
		}
	}
	return 1;
}

function withinCharLimit(value, restriction) {
	if (value.length <= restriction) { return 1; }
	return 0;
}

function isChecked(obj) {
	for (var i = obj.length; i != 0; i--) {
		thisObj = obj[i-1];
		if (thisObj.checked) { return 1; }
	}
	return 0;
}

function numberOnly(evt) {
	if (document.getElementById) {
		evt = (evt) ? evt : ((window.event) ? event : null)
		if (evt) {
			var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
			if (elem) {
				var containerEl = elem.parentNode.parentNode;
				elemMsg = document.getElementById(elem.id + "Msg");
				
				var charCode = (evt.charCode) ? evt.charCode : evt.keyCode;
				if ((charCode < 32) || 
					(charCode > 44 && charCode < 47) || 
					(charCode > 47 && charCode < 58)) {
					return true;
				} else {
					containerEl.className = "error";
					elemMsg.firstChild.nodeValue = "Please enter numbers only";
					return false;
					
				}
			}
		}
	}
}

function checkAgree(f) {
	if (f.confirm.checked) return true;
	else {
		alert('Please check the confirm box to delete the user.');
		return false;
		}
}
