<!--
// written by Ryan Schaeffer, gsk - 4/01/02

var required = [], format = [], OrderError = [];
var validateForm = null;

// initialer helper function to build required array and parameters
function addRequired(display, field) {
    var pos = required.length;
    required[pos] = new Object();
    required[pos].display = display;
    required[pos].field = field; 
    if (arguments.length > 2) {
        required[pos].trigger = arguments[2];
        required[pos].extra = [];
        for (var i=3; i < arguments.length; i+=2) {
            var extrapos = required[pos].extra.length;
            required[pos].extra[extrapos] = new Object();
            required[pos].extra[extrapos].display = arguments[i];
            required[pos].extra[extrapos].field = arguments[i+1];
        }
    }
}
		
function isDate(thedate, theformat) {
    var aDaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

    // Fetch the date separator from the user's input
    var sSepDate = thedate.charAt(thedate.search(/\D/));
    // Fetch the date separator from the format
    var sSepFormat=theformat.charAt(theformat.search(/[^MDY]/i));
    // Compare separators
    if (sSepDate!=sSepFormat) return false;

    // Fetch the three pieces of the date from the user's input and the format
    var aValueMDY=thedate.split(sSepDate,3);
    var aFormatMDY=theformat.split(sSepFormat,3);

    // Assign day, month, year based on format
    var iMonth,iDay,iYear;
    iMonth = aValueMDY[0];
    iDay   = aValueMDY[1];
    iYear  = aValueMDY[2];

    // Validate that all pieces of the date are numbers
    if ( !/\d/.test( iMonth ) || !/\d/.test( iDay ) || !/\d/.test( iYear ) )
        return false;

    // Require format digit year
    if(iYear.length!=aFormatMDY[2].length)	return false;

    // Check for leap year
    var iDaysInMonth=(iMonth!=2)?aDaysInMonth[iMonth-1]:
    ((iYear%4==0 && iYear%100!=0 || iYear % 400==0)?29:28);

    return (iDay!=null && iMonth!=null && iYear!=null && iMonth<13 && iMonth>0 && iDay>0 && iDay<=iDaysInMonth);
}
		
function isTime(thetime, theformat) {
    // Fetch the date separator from the user's input
    var sSepDate = thetime.charAt(thetime.search(/\D/));
    // Fetch the date separator from the format
    var sSepFormat=theformat.charAt(theformat.search(/[^HM]/i));
    // Compare separators
    if (sSepDate!=sSepFormat) return false;

    // Fetch the three pieces of the date from the user's input and the format
    var aValueHM=thetime.split(sSepDate,2);
    var aFormatHM=theformat.split(sSepFormat,2);

    // Assign day, month, year based on format
    var iHour,iMinute;
    iHour 	= aValueHM[0];
    iMinute	= aValueHM[1];

    // Validate that all pieces of the date are numbers
    if ( !/\d/.test( iHour ) || !/\d/.test( iMinute ) )
        return false;

    return (iHour!=null && iMinute!=null && iHour<24 && iHour>=0 && iMinute>=0 && iMinute<60);
}		
		
// initialer helper function to build format array and parameters
function addFormat(display, field, fmt) {
    var pos = format.length;
    format[pos] = new Object();
    format[pos].display = display;
    format[pos].field = field;
    format[pos].format = fmt;
}

var formaterr = '';
// checks specified format for each case - and builds error string
function checkFormats() {
    for (var i=0; i < format.length; i++) {
        var elem = format[i];
        switch (elem.format) {
            case "number" :
                var done = false;
                for (var f=0; (f < elem.field.length && !done); f++) {
                    var formvalue = eval("validateForm."+elem.field[f]+".value");
                    if (formvalue!="" && /\D/.test(formvalue)) {
                        addFormatError(elem.display);
                        done = true;
                    }
                }
                break;
            case "yyyy" :
                var done = false;
                for (var f=0; (f < elem.field.length && !done); f++) {
                    var formvalue = eval("validateForm."+elem.field[f]+".value");
                    if (formvalue!="" && /\D/.test(formvalue)) {
                        addFormatError(elem.display);
                        done = true;
                    }
                    else if (formvalue.length != 4) {
                        addFormatError(elem.display);
                        done = true;
                    }
                }
                break;
            case "email" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if (formvalue!="" && formvalue!="E-mail Address" &&
                    !/^[\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)*\.\w{2,4}$/.test(formvalue)) {
                    addFormatError(elem.display);
                }
                break
            case "zip" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if(formvalue!="" && !/^\d{5}(-?\d{4})?$/.test(formvalue)) {
                    addFormatError(elem.display);
                }
                break;
            case "phone" :
                var formvalue = "";
                for (var f=0; (f < elem.field.length && !done); f++) {
                    formvalue += eval("validateForm."+elem.field[f]+".value").replace(/\D/g,"");
                }
                var iDigits = formvalue.length;
                if( formvalue!="" && !(iDigits==10 || iDigits==11 && /^1/.test(formvalue)) ) {
                    addFormatError(elem.display);
                }
                break;
            case "date" :
                var formvalue = eval("formObj."+elem.field[0]+".value");
                var sFormat = "MM-DD-YYYY";
                if ( formvalue!="" && !isDate(formvalue, sFormat) ) {
                    addFormatError(elem.display);
                }
                break;
            case "time" :
                var formvalue = eval("formObj."+elem.field[0]+".value");
                var sFormat = "HH:MM"
                if ( formvalue!="" && !isTime(formvalue, sFormat) ) {
                    addFormatError(elem.display);
                }
                break;
            case "firstname" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if ( formvalue == "First Name" ) {
                    addFormatError(elem.display);
                }
                break;
            case "lastname" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if ( formvalue == "Last Name" ) {
                    addFormatError(elem.display);
                }
                break;
            case "address" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if ( formvalue == "Address" ) {
                    addFormatError(elem.display);
                }
                break;
            case "city" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if ( formvalue == "City" ) {
                    addFormatError(elem.display);
                }
                break;
            case "ActivationCardNumber" :
                // match a very specific activation card number 15000001 - 190000000
                var formvalue = eval("validateForm."+elem.field[0]+".value");
						
                var testint = parseInt(formvalue.substr(0,formvalue.length-2));
                if (formvalue!="" && testint && (!/^01$/.test(formvalue.substr(formvalue.length-2,formvalue.length)) || !(testint>150000000 && testint<190000001))) {
							
                }
                break;
        }
    }
}
			
var TextSelectErr = '', RadioCheckErr = '', OtherErr = '';
// resets the error message for before each required check
function resetErrorMessage() {
    TextSelectErr = '', RadioCheckErr = '', formaterr = '', OtherErr = '';
    OrderError = [];
}

function addFormatError( str ) {	
    formaterr += "\t"+str+"\n";
}
		
var validateForm = null;
function setValidateForm(_form) { 
    validateForm = _form;
}

// runs through specified required array and checks validity for based on field type
function checkRequired(reqarray) {
    for (var i=0; i < reqarray.length; i++) {
        var elem = reqarray[i];
        var formelem = eval("validateForm."+elem.field[0]);
        if (!formelem) alert("validateForm."+elem.field[0]);
        switch (formelem.type || formelem[0].type) {
            case "text" : case "textarea" : case "password" :
                var done = false;
                for (var f=0; (f < elem.field.length && !done); f++) {
                    formelem = eval("validateForm."+elem.field[f]);
                    if (formelem.value == "") {
                        if (TextSelectErr=="") OrderError[OrderError.length] = "TextSelectErr";
                        TextSelectErr += "\t"+elem.display + "\n";
                        done = true;
                    }
                }
                break;
            case "select-one" :
                if (formelem.options[formelem.selectedIndex].value == "") {
                    if (TextSelectErr=="") OrderError[OrderError.length] = "TextSelectErr";
                    TextSelectErr += "\t"+elem.display + "\n";
                }
                break;
            case "radio" :
                var done = null;
                for (var r=0; (r < formelem.length && !done); r++) {
                    if (formelem[r].checked) done = formelem[r].value
                }
                if (done == null) {
                    if (RadioCheckErr=="") OrderError[OrderError.length] = "RadioCheckErr";
                    RadioCheckErr += "\t" + elem.display + "\n";
                } else if (elem.trigger == done) checkRequired(elem.extra);
                break;
            case "checkbox" :
                var done = false;
                for (var c=0; (c < elem.field.length && !done); c++) {
                    var chbxelem = eval("validateForm."+elem.field[c])
                    if (chbxelem.checked) done = true;
                }
                if (!done) {
                    if (RadioCheckErr=="") OrderError[OrderError.length] = "RadioCheckErr";
                    RadioCheckErr += "\t" + elem.display + "\n";
                }
                break;
        }
    }
}

function setOtherError(errmsg) {
    if (OtherErr=="") OrderError[OrderError.length] = "OtherErr";
    OtherErr += "\t" + errmsg + "\n";
}
// builds error message from the required array and alert the user
function validateRequired() {
    checkRequired(required);
    checkFormats();
    var builderr = '';
    for (var i=0; i < OrderError.length; i++) {
        if (OrderError[i] == "TextSelectErr") builderr += "The following fields are missing:\n"+TextSelectErr+"\n";
        else if (OrderError[i] == "RadioCheckErr") builderr += "The following questions require a selection:\n"+RadioCheckErr+"\n";
        else if (OrderError[i] == "OtherErr") builderr += "The following errors occured in your submission:\n"+OtherErr+"\n";
    }
    if (formaterr != "") builderr += "The following fields had format input error(s):\n"+formaterr+"\n";
    if (builderr != "") {
        alert(builderr);
        return false;
    } else return true;
			
}

function checkRequiredAge( minAge,yyyy,mm,dd ) {
			
			
    // check if at least of age
    //var bdate = new Date( birthDate );
    var bdate = new Date(yyyy,mm-1,dd);

    var birth = new Object;
    birth.mm = bdate.getMonth()+1;
    birth.dd = bdate.getDate();
    birth.yyyy = bdate.getFullYear();
               
    var today = new Date();
    var now = new Object;
    now.mm = today.getMonth() + 1;
    now.dd = today.getDate();
    now.yyyy = today.getFullYear();
               
			   
    var age = now.yyyy - birth.yyyy;
				
    if ( (now.mm < birth.mm) || (now.mm==birth.mm && now.dd<birth.dd)) {
        age--;
    }
    if ( (age<minAge) ){
					
        alert("Date of Birth: Must be 18 years old or older");
        return false;
    }
    return true;
	    			
} // end checkRequiredAge

//-->