// Generic Form Validation
/**********************************************************************
* MOD   DATE        USER        DESCRIPTION
***********************************************************************
* M001  06/27/2006  JWright     Added validation for ASN & LPB Degrees
* M002  09/05/2006  JWright     Added code to keep users from selecting '100000000' data (HD#6497)
* M003  11/08/2006  JWright     Added check to disallow numbers in name fields. HD#7757
* M004  01/17/2007  JWright     Removed part of the validation for the ASN & LPB degrees from M001 (HD#9861)
* M005	08/17/2007	JAV			Added function that populates a hidden Phone field when a keyup event occurs on any of the
*								3 phone fields for home or work phone number (HD 13893)
* M006	01/23/2009  JWright		Added code to dynamically buid mBox for Omniture tracking
* M007  07/01/2009  JWright     Added code to handle changes to Degree/School field
**********************************************************************/
var checkObjects	= new Array();
var errors		= "";
var returnVal		= false;
var language		= new Array();
language["header"]	= "The following error(s) occured:"
language["start"]	= "->";
language["field"]	= " Field ";
language["require"]	= " is required";
language["min"]		= " and must consist of at least ";
language["max"]		= " and must not contain more than ";
language["minmax"]	= " and no more than ";
language["chars"]	= " characters";
language["numbers"]	= " numbers";	//M005A
language["num"]		= " and must contain only numbers";
language["nonnum"]	= " and cannot contain numbers or special characters";  //M003a
language["email"]	= " must contain a valid e-mail address";
// -----------------------------------------------------------------------------
// define - Call this function in the beginning of the page. I.e. onLoad.
// n = name of the input field (Required)
// type= string, num, email (Required)
// min = the value must have at least [min] characters (Optional)
// max = the value must have maximum [max] characters (Optional)
// d = (Optional)
// -----------------------------------------------------------------------------
function define(n, type, HTMLname, min, max, d) {
	var p;
	var i;
	var x;
	if (!d) d = document;
	if ((p=n.indexOf("?"))>0&&parent.frames.length) {
		d = parent.frames[n.substring(p+1)].document;
		n = n.substring(0,p);
		
	}
	if (!(x = d[n]) && d.all) x = d.all[n];
	for (i = 0; !x && i < d.forms.length; i++) {
	x = d.forms[i][n];
	}
	for (i = 0; !x && d.layers && i < d.layers.length; i++) {
	x = define(n, type, HTMLname, min, max, d.layers[i].document);
return x;       
}
eval("V_"+n+" = new formResult(x, type, HTMLname, min, max);");
checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}

function formResult(form, type, HTMLname, min, max) {
	//alert("form: " + form.name );
	//alert("type: " + type );
	//alert("HTMLname: " + HTMLname );
	//alert("min: " + min );
	//alert("max: " + max );
	
	//this.form = "FormProcessor";
	this.form = form;
	this.type = type;
	this.HTMLname = HTMLname;
	this.min  = min;
	this.max  = max;
}

//M003a  BEGIN
function checkTextOnly(value){
    var alphaExp = /^[a-zA-Z -]+$/;
	if(value.match(alphaExp)){
		return true;
	}else{
	    return false;
	}
}
//M003a  END

function validate() {
    //alert("checkObjects.length: " + checkObjects.length );
    if (checkObjects.length > 0) {
        errorObject = "";
        var bErr = 0;  //M003a
        for (i = 0; i < checkObjects.length; i++) {
            bErr = 0;  //M003a
            validateObject = new Object();
	            //alert("validateObject.length: " + validateObject );
            validateObject.form = checkObjects[i].form;
	            //alert("validateObject.form: " + validateObject.form );
            validateObject.HTMLname = checkObjects[i].HTMLname;
	            //alert("validateObject.HTMLname: " + validateObject.HTMLname );
            validateObject.val = checkObjects[i].form.value;
	            //alert("validateObject.val: " + validateObject.val );
            validateObject.len = checkObjects[i].form.value.length;
            //validateObject.len = checkObjects[i].form.length;
            //	alert("validateObject.len: " + validateObject.len );
            validateObject.min = checkObjects[i].min;
            //	alert("validateObject.min: " + validateObject.min );
            validateObject.max = checkObjects[i].max;
            //	alert("validateObject.max: " + validateObject.max );
            validateObject.type = checkObjects[i].type;
            //	alert("validateObject.type: " + validateObject.type );
            	
            //if (validateObject.type == "num" || validateObject.type == "string") {  //M003d
            if (validateObject.type == "num") {  //M003a
            //if ((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val))) { errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['num'] + "\n";  //M002d
                /* M005D Begin
                if ((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val)) || (validateObject.type == "num" && validateObject.val == '1000000000')) {
                    errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['num'] + "\n";  //M002a
                    bErr = 1;  //M003a
                } M005D End */
                //M005A Begin
                if (validateObject.len <= 0 || isNaN(validateObject.val) || validateObject.val == '1000000000') {
                    errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['num'] + "\n";
                    bErr = 1;
                }else{
					if ((validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max))) {
						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['minmax'] + validateObject.max+language['numbers'] + "\n";
						bErr = 1;
					} else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)) { 
						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['numbers'] + "\n";
						bErr = 1;
					} else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)) { 
						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['max'] + validateObject.max + language['numbers'] + "\n";
						bErr = 1;
					} else if (!validateObject.min && !validateObject.max && validateObject.len <= 0) { 
						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + "\n";  
						bErr = 1;
					}
                }
				//M005A End
            } else if (validateObject.type == "string" || validateObject.type == "text") {  //M003a
                //} else if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)) {   //M003d
                if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)) {   //M003a
                    errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['minmax'] + validateObject.max+language['chars'] + "\n";
                    bErr = 1;  //M003a
                } else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)) { 
                    errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['chars'] + "\n";
                    bErr = 1;  //M003a
                } else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)) { 
                    errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['max'] + validateObject.max + language['chars'] + "\n";
                    bErr = 1;  //M003a
                } else if (!validateObject.min && !validateObject.max && validateObject.len <= 0) { 
                    errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + "\n";  
                    bErr = 1;  //M003a
               }
               //M003a  BEGIN
               if (validateObject.type == "text" && checkTextOnly(validateObject.val) == false){
                    if((errors.length > 0) && (errors.indexOf(validateObject.HTMLname)>=0)){
                        errors += language["nonnum"] + "\n";
                    }else{
                        errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language["nonnum"] + "\n";
                    }
               }else{
					if((errors.length > 0) && (bErr==1))errors += "\n";
               }               
               //M003a  END
               //M007a  BEGIN
               if(validateObject.type == "string" && validateObject.val == "1000000000"){
                    errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + "\n";  
                    bErr = 1;  
               }
               //M007a  END
            } else if(validateObject.type == "email") {
                    // Checking existense of "@" and ".". 
                    // Length of must >= 5 and the "." must 
                    // not directly precede or follow the "@"
                    if ((validateObject.val.indexOf("@") == -1) || (validateObject.val.charAt(0) == ".") || (validateObject.val.charAt(0) == "@") || (validateObject.len < 6) || (validateObject.val.indexOf(".") == -1) || (validateObject.val.charAt(validateObject.val.indexOf("@")+1) == ".") || (validateObject.val.charAt(validateObject.val.indexOf("@")-1) == ".")) { 
                        errors += language['start'] + language['field'] + validateObject.HTMLname + language['email'] + "\n"; 
                    }
                }
        }  //for (i = 0; i < checkObjects.length; i++)        
       
    }  //if (checkObjects.length > 0)
    
     //M001a  BEGIN
    if (document.getElementById("hidLRegions") && document.getElementById("hidLDegrees") && document.getElementById("chRegionCode") && document.getElementById("iDegreeOfInterest")){
        P = document.getElementById("iDegreeOfInterest").options[document.getElementById("iDegreeOfInterest").selectedIndex].value
        S = document.getElementById("chRegionCode").options[document.getElementById("chRegionCode").selectedIndex].value.toUpperCase()
        //if (S != "1000000000" && ((P == "101510") || (P == "101964"))){
        if (S != "1000000000" && (document.getElementById("hidLDegrees").value.indexOf(P) >= 0)){
            if (document.getElementById("hidLRegions").value.indexOf(S) >= 0){
                errors += language['start'] + " The program you selected is not currently available in your state." + "\n";
            }
        }                
    } 
    //M001a  END     
    
    if (errors) {
            alert(language["header"].concat("\n" + errors));
            errors = "";
            returnVal = false;
        } else {
			//M006a  BEGIN 
			if (tiOmni==1){
				var omniDegreeId = 0;
				var omniSchoolId = 0;
				if(document.getElementById("iDegreeOfInterest")){omniDegreeId =document.getElementById("iDegreeOfInterest").value};
				if(document.getElementById("iSchoolOfInterest")){omniSchoolId =document.getElementById("iSchoolOfInterest").value};
				mboxDefine("mboxDynamicElement", "submit_iFarmForm", "DegreeId="+omniDegreeId,"SchoolId="+omniSchoolId);
				mboxUpdate("submit_iFarmForm", "DegreeId="+omniDegreeId,"SchoolId="+omniSchoolId);
			}
			//M006a  END
            returnVal = true;
        }
}
//M005A Begin
function popHiddenPhone(sHiddenFieldId){
	var oHiddenField = document.getElementById(sHiddenFieldId);
	var oAreaCode = document.getElementById(sHiddenFieldId + "_AreaCode");
	var oPrefix = document.getElementById(sHiddenFieldId + "_PhonePrefix");
	var oSuffix = document.getElementById(sHiddenFieldId + "_PhoneSuffix");
	if (oHiddenField && oAreaCode && oPrefix && oSuffix){
		oHiddenField.value = "" + oAreaCode.value + oPrefix.value + oSuffix.value;
	}
}
//M005A End
//function popup(filename){
//if (! returnVal){ 
//window.open(filename, "","height=480,width=750,top=0,left=0,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,titlebar=no,toolbar=no,directories=no");
//} 
//}


//onUnload="popup('http://www.college-net.com/indiana.asp')"