﻿		var fc_RequiredFieldMsg = "This information must be completed";
		var fc_OneRequiredFieldMsg = "Please select at least one item";
		var fc_GroupMinRequiredMsg = "";
		var fc_GroupRangeRequiredMsg = "You should select between {min} and {max} items.";
		var fc_RequiredFieldsMissingMsg = "Error: Required entries have not been completed or may be invalid.";
		var fc_InvalidEmailMsg = "The email address is not valid.";
		var fc_InvalidIntegerMsg = "Only a number with no decimal point is valid for this entry.";
		var fc_InvalidDecimalMsg = "Only a number with a decimal point is valid for this entry.";
		var fc_InvalidDateMsg = "This is not a valid date.";
		var fc_err_PasswordsNotMatched = "The passwords do not match";
		var fc_err_EmailsNotMatched = "The emails do not match";
		var fc_err_MustComplete = "The following entries must be completed";
		var fc_err_ReEnter = "Please re-enter";
		var fc_err_InvalidEmails = "These email addresses are invalid";
		var fc_err_InvalidEmail = "This email address is invalid";
		var fc_err_InvalidFieldName = "The form does not contain a field named";
		

function getElement(id) {
var element;
if (document.getElementById) element = document.getElementById(id);
	else if (document.all) element = document.all[id];
	else if (document.layers)	element = document.layers[id];
	return element;
}

function required(fld, errObj) {
	var attr = fld.getAttribute("required");
	if (attr && attr == "True") {
		switch (fld.type) {
			case "checkbox":
			case "radio":
				if (!countChecks(fld,errObj)) {
					fld.parentNode.className = "ifFieldErr";
					if (fld.type == "checkbox" && document.getElementsByName(fld.name).length > 1) 
						errObj.innerHTML = fc_OneRequiredFieldMsg + "<br />";
					else 
						errObj.innerHTML = fc_RequiredFieldMsg + "<br />";
					return false;
				}
				break;
			case "password":
			case "text":
			case "textarea":
				if (fld.value == "") {
					errObj.innerHTML = fc_RequiredFieldMsg + "<br />";
					return false;
				}
				break;
			case "select":
			case "select-multiple":
			 if (fld.selectedIndex == -1) {
					if (fld.type == "select-multiple") 
						errObj.innerHTML = fc_OneRequiredFieldMsg + "<br />";
					else 
						errObj.innerHTML = fc_RequiredFieldMsg + "<br />";
					fld.className = "ifFieldErr";
					return false;
				}
			break;
		}
 	}
	return true;
}

function range(fld, errObj) {
	attr = fld.getAttribute("isrange");
	if (attr && attr > "") {
		var ranges = attr.split("-");
		var low = parseInt(ranges[0]);
		var hi = parseInt(ranges[1]);
		var val = parseInt(fld.value);
		if ((val < low )|| (val > hi)) {
			errObj.innerHTML = fld.name + " must be in the range " + low + " to " + hi + "<br />";
			return false;
		}
	}
	return true;
}


function isValidEmail(emailAddress) {
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    return re.test(emailAddress);
	}
/*"*/

function validEmail(fld, errObj) {
	var attr = fld.getAttribute("isemail");
	if (attr && attr == "True") {
		if (fld.value > "" && !isValidEmail(fld.value)) {
			errObj.innerHTML = fc_InvalidEmailMsg + "<br />";
			return false;
		}
	}
	attr = fld.getAttribute("email2");
	if (attr && attr == "True") {
		var fld1 = getElement(fld.name.substr(0,fld.name.length-1));
		errObj = getElement("err_" + fld.name.substr(0,fld.name.length - 1));
		if (fld.value.toLowerCase() != fld1.value.toLowerCase()) {
			errObj.innerHTML =  "email entries do not match<br />";
			return false;		
		}
	}
	return true;
}


function countSelections(fld, errObj) {
	var count=0;
	for (var i=0; i<fld.options.length; i++) if (fld.options[i].selected && fld.options[i].value > "") count++;
	return count;
}


function countChecks(fld, errObj) {
	var count=0;
	for (var i = 0; i < fld.form.elements.length; i++) {
		var thisFld = fld.form.elements[i];
		if ( (thisFld.name == fld.name) && (thisFld.checked) )  count++;
	}
	return count;
}


function showSelectionError(fld,low,hi,errObj) {
	var msg = fc_GroupRangeRequiredMsg + "<br />"
	if (low == hi) msg = fc_GroupMinRequiredMsg + "<br />";
	msg = msg.replace("\{min\}",low);
	msg = msg.replace("\{max\}",hi);
	errObj.innerHTML = msg;
	return false;
}


function groupRequired(fld,errObj) {
	var attr = fld.getAttribute("grouprequired");
	if (attr && attr > "") {
		var ranges = attr.split("-");
		var low = parseInt(ranges[0]);
		var hi = parseInt(ranges[1]);
		var val = parseInt(fld.value);
		var nSelections = 0;
		switch(fld.type) {
			case "select-multiple":
				var count = countSelections(fld);
				break;
			case "checkbox":
				var count = countChecks(fld);
				break;
		}
		if ((low > 0) && (count < low) || (count > hi)){
		 showSelectionError(fld,low,hi,errObj);
		 return false;
		}
	}
	return true;
}

function MatchingPasswords(fld,errObj) {
	var bRetval = true;
	if (fld.type == "password") {
		/* if this field is called GetPassword, is there a field called GetPassword2? */
		if (fld.form.elements[fld.name + "2"]) {
			if (fld.value != fld.form.elements[fld.name + "2"].value) {
				errObj.innerHTML = fc_err_PasswordsNotMatched + "<br />";
				bRetval = false;
			}
		}
		
		/* If this field is called GetPassword2, is there a field called GetPassword? */
		var strFieldName = fld.name;
		strFieldName = strFieldName.substring(0, strFieldName.length-1);
		if (fld.form.elements[strFieldName]) {
			bRetval = validateField(fld.form.elements[strFieldName]);
		}
	}
	
	return bRetval;
}

function validateField(fld)
{
	var result = true;
	var errObj = getElement("err_" + fld.name);
	if (!required(fld,errObj)) result = false;
	if (!range(fld,errObj)) result = false;
	if (!validEmail(fld,errObj)) result = false;
	if (!groupRequired(fld,errObj)) result = false;
	if (!MatchingPasswords(fld,errObj)) result = false;
	return result;
}

function inputBlur(fld)
{
	if (!validateField(fld)) {
		switch (fld.type) {
			case "checkbox":
			case "radio":
			fld.parentNode.className = "ifFieldErr";
				break;
			case "text":
			case "textarea":
			case "select":
			case "select-multiple":
			fld.className = "ifFieldErr";
			break;
		}
	}
	else {
		var errObj = getElement("err_" + fld.name);
		if (errObj) errObj.innerHTML = "";	
	}
}


function inputFocus(fld)
{
		var errObj = getElement("err_" + fld.name);
		/* if (errObj) errObj.innerHTML = ""; */
		switch (fld.type) {
			case "checkbox":
			case "radio":
			fld.parentNode.className = "";
				break;
			case "text":
			case "textarea":
			case "select":
			case "select-multiple":
			fld.className = "";
		}
}

/* Add specific form validations here */

function validate_BlogComment(frm) {
	var result = true;
	var errorField = null;
	
	for (var i = 0; i < frm.elements.length; i++) {
		var fld = frm.elements[i];
		var errObj = getElement("err_" + fld.name);
		if (errObj) errObj.innerHTML = "";
	}
	for (i = 0; i < frm.elements.length; i++) {
		var fld = frm.elements[i];
		if (!validateField(fld,true)) {
			result = false;
			errorField = fld;
		}
	}
	if (!result) {
		getElement("validate_BlogComment").innerHTML = fc_RequiredFieldsMissingMsg + "<br /><br />";
		if (errorField.style.visibility != "hidden") errorField.focus();
	}
	return result;
}
