<!--
// written by Ryan Schaeffer, gsk - 4/01/02

var required = [], format = [], OrderError = [];
var validateForm = null;
var TextSelectErr = '', RadioCheckErr = '', othererr = '';
// 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 "email" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if (formvalue!="" && !/^[\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 "zip4" :
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                if(formvalue!="" && !/^\d{4}(-?\d{3})?$/.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 "ActivationCardNumber" :
                // match a very specific activation card number 15000001 - 190000000
                var formvalue = eval("validateForm."+elem.field[0]+".value");
                //if ((formvalue!="") && (!/^01$/.test(formvalue.substr(formvalue.length-2,formvalue.length)) || !/^(((15([1-9]\d{5}|\d{1}[1-9]\d{4}|\d{2}[1-9]\d{3}|\d{3}[1-9]\d{2}|\d{4}[1-9]\d{1}|\d{5}[1-9]))|(1[6-9]\d{6}|[2-9]\d{7}))|(1[1-8]\d{7}|190{7}))$/.test(formvalue.substr(0,formvalue.length-2)))) {
                //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))) {
                if (formvalue!="" && (/\D/.test(formvalue) || formvalue.length!=11)) {
                    addFormatError(elem.display);
                }
                break;
					 

            case "questionerr":
                if(!(formObj.QUES_Axert_migraine_treatment.checked) && !(formObj.QUES_Fioricet_migraine_treatment.checked) && !(formObj.QUES_Frova_migraine_treatment.checked)
                    && !(formObj.QUES_Maxalt_migraine_treatment.checked) && !(formObj.QUES_Relpax_migraine_treatment.checked) && !(formObj.QUES_Midrin_migraine_treatment.checked)
                    && !(formObj.QUES_Topamax_migraine_treatment.checked) && !(formObj.QUES_Treximet_migraine_treatment.checked) && !(formObj.QUES_Imitrex_migraine_treatment.checked)
                    && !(formObj.QUES_Zomig_migraine_treatment.checked) && !(formObj.QUES_Advil_migraine_treatment.checked) && !(formObj.QUES_Aleve_migraine_treatment.checked) && !(formObj.QUES_Ibuprofen_migraine_treatment.checked) && !(formObj.QUES_Motrin_migraine_treatment.checked)&& !(formObj.QUES_Tylenol_migraine_treatment.checked)&& !(formObj.QUES_Other_medicine_migraine.checked)&& !(formObj.QUES_Over_counter_medication.checked)&& !(formObj.QUES_No_medication_migraine.checked)&&  !(formObj.QUES_Excedrin_migraine_treatment.checked))

                    //setOtherError("What current migraine treatment(s) are you using?");
                    OrderError[OrderError.length] = "RadioCheckErr";
                RadioCheckErr += "\t" + "What current migraine treatment(s) are you using?" + "\n";

                break;
            case "emailcheck" :
                if((formObj.EMAIL_ADDR.value.length>0) || (formObj.CONFIRM_EMAIL_ADDR.value.length>0))
                {
                    if(formObj.EMAIL_ADDR.value.toLowerCase()!=formObj.CONFIRM_EMAIL_ADDR.value.toLowerCase())
                    {
                        setOtherError("E-mail Address and Confirm E-mail address should match. Please re-enter your E-mail address.");
                    }
                }
                break;
        }
    }
}
			
		
// 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) {
    othererr = errmsg;
}
// 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";
    }
    if (formaterr != "") builderr += "The following fields had format input error(s):\n"+formaterr+"\n";
    if (othererr != "") builderr += "\n\t"+othererr+"\n";
			
    if (builderr != "") {
        alert(builderr);
        return false;
    } else return true;
			
}

//-->