var submitcount=0;

var today = new Date();
var year  = today.getFullYear();
var month = today.getMonth()+1;
var mday  = today.getDate();

var msg = {
    req_edt:"The selected field must be filled in.",
    req_edt1:"",
    req_edt2:"",
    req_sel:"A selection from the list must be made.",
    req_diffsel:"A different selection from the list must be made.",
    req_radio:"Please make a selection",
    req_checkbox:"Please check one of the options",
    req_gen:"All required fields must be completed before moving to the next page.",
    req_nonhead:"Items marked with --- cannot be selected",
    req_num_only:"The selected field accepts numbers only.",
    req_min_size:"The selected field requires ",
    req_min_size2:"The selected field requires either ",
    req_min_is_max:"The selected field must be completely filled in.",
    req_valid_email:"A valid e-mail address is required. Example: name@example.com",
    req_matching_email:"The e-mail addresses you supplied do not match",
    req_missing_addr:"Please complete all address fields",
    returns:".\n\n"
};

var fields_part1 = {
    USEP:"",
    PUTF:"",
    PP01:"",
    PPOT:"",
    OFTN:"",
    UPWK:"",
    CHPW:"",
    CSPW:"",
    WP06:""
};

var fields_part2 = {
    WU01:"",
    MHDE:"",
    LK01:"",
    LKOT:"",
    SAT1:"",
    SAT2:"",
    SAT1:""
};

var fields_part3 = {
    RECM:"",
    PT01:"",
    LF01:"",
    GEND:"",
    AGES:"",
    FNAM:"",
    LNAM:"",
    ADD1:"",
    ZIPC:"",
    EMAL:""    
};

function validate(formid, fields, limit) {
    if (submitcount==0) {
        if (limit != 0)
        {
            ++submitcount;
        }
        var obj;
        var error='';
        var br="\n";

        var form = document.getElementById(formid);

        for (var field in fields) {
            
            eval("obj = form.elements['"+field+"']");
            eval("fieldspan = '"+field+"_SPAN'");
            if (typeof(obj) == "undefined")  continue;
            else if (document.getElementById && document.getElementById(fieldspan) && document.getElementById(fieldspan).style.visibility == 'hidden') { // is W3C-DOM
                 continue;
		  }
            else if (obj.type == "text") {
                
                if (obj.value == "") 
                {
                    switch (field) 
                    {
                        // Address Fields
                    case 'ADD1':
                    case 'CITY':
                    case 'STAT':
                        // skip this field - we only want to validate if it has a value
                        break;
                        // 'Other' text fields
                    case 'PPOT':
                        if (!form.elements['PP05'].checked) break;
                    case 'LKOT':
                        if (!form.elements['LK07'].checked) break;
                    
                    default:
                        error='missingreq';
                        break;
                    }
                }
                else if (field == "EMAL" && (!echeck(form.EMAL.value) || hasWhitespace(obj.value))) { error='bademail'; }
                //else if (field == "EMAL" && (obj.value.indexOf("@",0)==-1 || obj.value.indexOf(".",0)==-1 || hasWhitespace(obj.value))) error='bademail';
				//else if (form.EMAL.value != form.EMALC.value) error='emailmatch';
                else
                {
                    switch (field) 
                    {
                    case 'ADD1':
                    case 'CITY':
                    case 'STAT':

                        var assoc_fields = {ADD1:'',CITY:'',STAT:''};
                        for (var assocfield in assoc_fields)
                        {
                            eval("assocobj = form.elements['"+assocfield+"']");
                            if (assocobj.value == '')
                            {
                                error='missingreqaddr';
                                break;
                            }
                        }

                        break;
                    default:
                        
                        break;
                    }
                }
            } 
            else if (obj.type == "select-one") {
                if (obj.selectedIndex <= -1 || obj.options[obj.selectedIndex].value == "") {
                    switch (field) {
                        default: {
                            error='missingsel';
                            break;
                        }
                    }
                }
                else if (field == "YEAR") { 
                    error = badDate(form.YEAR.options[form.YEAR.selectedIndex].value, form.MNTH.options[form.MNTH.selectedIndex].value, form.DAYS.options[form.DAYS.selectedIndex].value, "2007", "08", "31"); 
                }
            }
            else if (obj.type == "checkbox") {
                var foundchecked=0;

                // Begin Senseo Survey specific checkbox validation
                switch(field)
                {
                case 'PP01':
                    if (!form.elements['PP01'].checked && !form.elements['PP02'].checked && !form.elements['PP03'].checked && 
                        !form.elements['PP04'].checked && !form.elements['PP05'].checked)
                    {
                       error='requiredcheckbox';
                    }
                    break;

                case "WP06":
                    if (!form.elements['WP06'].checked && !form.elements['WP03'].checked && !form.elements['WP07'].checked && 
                        !form.elements['WP02'].checked && !form.elements['WP05'].checked)
                    {
                        error='requiredcheckbox';
                    }
                    break;

                case "WU01":
                    if (!form.elements['WU01'].checked && !form.elements['WU02'].checked && !form.elements['WU03'].checked && 
                        !form.elements['WU04'].checked && !form.elements['WU05'].checked && !form.elements['WU06'].checked && !form.elements['WU07'].checked)
                    {
                        error='requiredcheckbox';
                    }
                    break;

                case "LK01":
                    if (!form.elements['LK01'].checked && !form.elements['LK02'].checked && !form.elements['LK03'].checked && 
                        !form.elements['LK04'].checked && !form.elements['LK05'].checked && !form.elements['LK06'].checked && !form.elements['LK07'].checked)
                    {
                        error='requiredcheckbox';
                    }
                    break;

                case "PT01":
                    if (!form.elements['PT01'].checked && !form.elements['PT02'].checked && !form.elements['PT03'].checked && 
                        !form.elements['PT04'].checked && !form.elements['PT05'].checked && !form.elements['PT06'].checked)
                    {
                        error='requiredcheckbox';
                    }
                    break;

                case "LF01":
                    if (!form.elements['LF01'].checked && !form.elements['LF02'].checked && !form.elements['LF03'].checked && 
                        !form.elements['LF04'].checked)
                    {
                        error='requiredcheckbox';
                    }
                    break;

                default:
                    if (obj.checked) 
                    {
                        foundchecked=1;
                    } 
                    else if (!foundchecked) 
                    {
                        switch (field) 
                        {
                        default:
                            error='missingcheckbox';
                            break;
                        }
                    }
                }
          }
            else if (obj[0] && obj[0].type == "radio") {
                var foundchecked=0;
                for (var i=0; i < obj.length; i++) {
                    if (obj[i].checked) {
                        foundchecked=1;
                        break;
                    }
                }
                if (!foundchecked) {
                    switch (field) {
                        default:
                            error='missingradio';
                            break;
                    }
                }
            }
            
            // Begin error > response logic
            if (error) {
                window.scroll(0,0);
                if (error == 'missingradio') 
                {
                    obj[0].focus();
                }
                else 
                {
                    obj.focus();
                }
                switch (error) {
                    case 'req_num_only':
                    case 'min_size2':
                    case 'min_size4':
                        alert( msg[error] + br + msg['req_gen'] );
                        break;
                    case 'bademail':
                        alert( msg['req_valid_email'] + br + msg['req_gen'] );
                        break;
                    case 'emailmatch':
                        alert( msg['req_matching_email'] + br + msg['req_gen'] );
                        break;
                    case 'month':
                    case 'day':
                    case 'year':
                        alert( msg['req_diffsel'] );
                        break;
                    case 'missingsel':
                    case 'missingradio':
                        alert( msg['req_radio'] + br + msg['req_gen'] );
                        break;
                    case 'requiredcheckbox':
                    case 'missingcheckbox':
                        alert( msg['req_checkbox'] + br + msg['req_gen'] );
                        break;
                    case 'missingreqaddr':
                        alert( msg['req_missing_addr'] + br + msg['req_gen'] );
                        break;
                    case 'missingreq':
                    default:
                        alert( msg['req_edt'] + br + msg['req_gen'] );
                        break;
                }
                if (limit != 0)
                {
                    submitcount--;
                }
                return false;
            }
        }
            //alert('validation passed');
        return true;
    }
    // alert('submit count exceeded');
    return false;
}

var DHTML = (document.getElementById || document.all || document.layers);

function getObj(name) {
    if (document.getElementById) {
          return document.getElementById(name);
    }
    else if (document.all) {
          return document.all[name];
    }
    else if (document.layers){
          return document.layers[name];
    }
}