﻿// JScript File

// validateform(form) function
// by Andrew Thompson, Dec 2002
// validates all forms on the page, displays error message and highlights problem inputs
// fields should have an id attribute formatted id="FriendlyName,Required,DataType"
// for example <input type="text" name="txtBlahBlah" id="Text Box,1,txt">
// data types can be {txt,num,eml, dte}
// field names starting with 'num' will be checked that they're numeric
// ############################# MODIFIED FOR T&C CHECKBOX HANDLING TRICK ############################3
function validateform(myform) {
	var elementname;						// name attribute
	var elementvalue						// value attribute
	var valid = true;						// becomes false when any error is encountered
	var errData = "";						// names of bad Data fields
	var errReq = "";						// names of missing required fields
	var id, arrid;							// array with contents of form element's id attribute
	var req;								// temp variable for required field check
	var friendly;							// friendly field name string
	var datatype;							// data type, string, eg txt, num, eml, dte
	var strError = "";
	var iTmp1;
	var sTmp1;
	var sTmp2;
	var sTmp3;
	var arremail;

	for (j = 0; j < myform.elements.length; j++) {
		
		elementname = myform.elements[j].name;
		elementvalue = myform.elements[j].value;
		
		req = false;
		friendly = "";
		datatype = "";
		
		// check for an id attribute, and draw out friendly name, etc.
		if (myform.elements[j].id != "") {
			id = myform.elements[j].id;
			arrid = id.split(",")
			friendly = arrid[0];
			if (parseInt(arrid[1])) req = true;
			datatype = arrid[2];
		}

		// reset background colours in case fields were previously highlighted
		myform.elements[j].style.backgroundColor = "";

		// check for invalid data type if type was specified and field is not blank
		// as this will be handled later.
		// ################ MODIFIED FOR T&C CHECKBOX TRICK ######################
		if (((datatype != "") && !(elementvalue == "")) || (datatype =="chk")) { 
			if (datatype == "pwd") {
				if (myform.elements["cmdPasswordConfirm"].value != "" ) {
					if(myform.elements["cmdPasswordConfirm"].value != elementvalue){
						valid = false;
						errData += " - Your passwords do not match.\n";
						myform.elements[j].style.backgroundColor = "#CCCCFF"; 
						myform.elements["cmdPasswordConfirm"].style.backgroundColor = "#CCCCFF";
					}
				}
			}
			if (datatype == "num") {
				elementvalue = elementvalue.replace("$", "");
				elementvalue = elementvalue.replace(",", "");
				if (isNaN(elementvalue)) {
					valid = false;
					errData += " -  " + friendly + " must be numeric.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
			}

			if (datatype == "num+") {
				elementvalue = elementvalue.replace("$", "");
				elementvalue = elementvalue.replace(",", "");
				if (isNaN(elementvalue)) {
					valid = false;
					errData += " -  " + friendly + " must be numeric.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
				else if (parseFloat(elementvalue) <= 0) {
					valid = false;
					errData += " -  " + friendly + " must be a positive number.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
			}
			if (datatype == "int") {
				elementvalue = elementvalue.replace("$", "");
				elementvalue = elementvalue.replace(",", "");
				if (isNaN(elementvalue) || (parseInt(elementvalue) != parseFloat(elementvalue))) {
					valid = false;
					errData += " -  " + friendly + " must be a whole number.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
			}
			if (datatype == "int+") {
				elementvalue = elementvalue.replace("$", "");
				elementvalue = elementvalue.replace(",", "");
				if (isNaN(elementvalue) || (parseInt(elementvalue) != parseFloat(elementvalue))) {
					valid = false;
					errData += " -  " + friendly + " must be a positive whole number.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
				else if (parseFloat(elementvalue) <= 0) {
					valid = false;
					errData += " -  " + friendly + " must be a positive whole number.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
			}
			if (datatype == "dte") {
				if (isNaN(Date.parse(elementvalue))) {
					valid = false;
					errData += " -  " + friendly + " must be a valid date.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
			}
			if (datatype == "phone") {
				elementvalue = elementvalue.replace("(", "");
				elementvalue = elementvalue.replace(")", "");
				elementvalue = elementvalue.replace(/[\s]+/g, "");
				if (isNaN(elementvalue) || ((elementvalue.length != 10) && (elementvalue.charAt(0) != "1") && (elementvalue.charAt(1) != "3")) || ((elementvalue.charAt(0) == "1") && (elementvalue.charAt(1) == "3") && (elementvalue.length != 6) && (elementvalue.length !=10))) {
					valid = false;
					errData += " -  " + friendly + " (" + elementvalue + ") has an invalid format.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF";  
				}
				
				else if (parseFloat(elementvalue) <= 0) {
					valid = false;
					errData += " -  " + friendly + " must be a positive number.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor ="#CCCCFF"; 
				}
			}
			if (datatype == "eml") {
				// put into an array to enable test for multiple email addresses
				arremail = elementvalue.split(",")
				for (var loop=0; loop < arremail.length; loop++) { 
					// new and improved RegExp
					myRegExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
					if (arremail[loop].search(myRegExp) == -1  && arremail[loop] !='') {
						valid = false;
						errData += " -  " + friendly + " has an invalid e-mail address:'" + arremail[loop] + "'\n";
						if (loop > 0) {
							errData += "    (separate multiple addresses with ',')\n";
						}
						// highlight this problem field
						myform.elements[j].style.backgroundColor = "#CCCCFF"; 
					}
				} 
			}
			if (datatype == "url") {
				// new and improved RegExp
				myRegExp = /^((http:\/\/)?([a-zA-Z0-9_\.\@\-])+\.)+([a-zA-Z0-9_\.\@\-\/])+$/;
				if (elementvalue.search(myRegExp) == -1  && elementvalue !='') {
					valid = false;
					errData += " -  " + friendly + " has an invalid URL format\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
			}
			if (datatype == "tme") {
  				iTmp1 = elementvalue.indexOf(":") 
  				if (iTmp1 == -1) { 
					valid = false;
					errData += " -  " + friendly + " must be a valid time.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}
  				else { 
					sTmp1 = elementvalue.substr(0 , iTmp1) 
					sTmp2 = elementvalue.substr(iTmp1 + 1, 2) 
					sTmp3 = elementvalue.substr(iTmp1 + 4, 2) 
					sTmp4 = elementvalue.substr(iTmp1 + 7)
  				  	if (!((!isNaN(sTmp1)) && (!isNaN(sTmp2)) && (!isNaN(sTmp3)) && (sTmp1>=0) && (sTmp1<24) && (sTmp2>=0) && (sTmp2<60) && (sTmp3>=0) && (sTmp3<60))) {
						valid = false;
						errData += " -  " + friendly + " must be a valid time.\n";
						// highlight this problem field
						myform.elements[j].style.backgroundColor = "#CCCCFF"; 
					}
				} 
			}
			//######################################################
			// TERMS & CONDITIONS checkbox trick
			//datatype for ensuring that a checkbox has been ticked 
			if (datatype == "chk")
			{
				j += 1;
				if (!(myform.elements[j].checked))
				{
					valid = false;
					errData += " -  " + friendly + " must be checked.\n";
					// highlight this problem field
					myform.elements[j].style.backgroundColor = "#CCCCFF"; 
				}

			}
			//######################################################
			if (datatype == "checkboxes")
			{
				if (NoneWithCheck(myform[elementvalue]))
				{
					valid = false;
					errReq += " - At least one of the "+friendly+" has to be selected.\n";
					for(var k = 0; k < myform[elementvalue].length; k++) {
						myform[elementvalue][k].style.backgroundColor = "#CCCCFF"; 
					}
				}
				j +=  myform[elementvalue].length;
			}

		}
		// check for required field being blank
		if (req && (elementvalue == "")) {
			valid = false;
			errReq += " -  " + friendly + " is required.\n";
			// highlight this problem field
			myform.elements[j].style.backgroundColor = "#CCCCFF"; 
		}

	}

	if (!valid) {	// if an error occurred, generate the error report display
	
		strError = "The data in these fields is invalid:\n\n"
		if (errReq != "") strError += errReq;
		if (errData != "") strError += errData;
		strError += "\nThe fields requiring attention have been highlighted.\n";
		
		alert(strError);
	}

	return valid;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function noPostBack(myform,sNewFormAction)
{
    if (validateform(myform))
    {
        if(document.layers) //The browser is Netscape 4
        {
            document.layers['Content'].document.forms[0].__VIEWSTATE.name = 
                                                               'NOVIEWSTATE';
            document.layers['Content'].document.forms[0].action = 
                                                         sNewFormAction;
            document.layers['Content'].document.forms[0].target = 
                                                         "_blank";                                            
        }
        else //It is some other browser that understands the DOM
        {
            document.forms[0].action = sNewFormAction;
            document.forms[0].__VIEWSTATE.name = 'NOVIEWSTATE';
            document.forms[0].target = "_blank";
        }
        
        return true;
    }
    else
        return false;
}