// Check the fields required for the conference registration form.
//
function checkReg(aForm) {
    var msg = "";
    
    clearAll();
    msg += checkNonNull("attendeeName,title,organization,address1,city,state,zipCode,email,phoneNumber,emergencyName,emergencyRel,emergencyPhone");

    if (aForm.shareRoom[0].checked == true) {
        var msg2 = checkNonNull("roommate");
        if (msg == "") {
            msg = msg2;
        }
    }

    msg += checkState(aForm.state);
    msg += checkEmail(aForm.email);
    msg += checkPhone(aForm.phoneNumber);
    msg += checkPhone(aForm.emergencyPhone);

    if (msg != "") {
        displayErrors(msg);
        return false;
    }
    return true;
}

function checkAlertsContact(aForm) {
    var msg = "";
    
    clearAll();
    msg += checkNonNull("firstName,lastName,company,email,telephone");
    msg += checkEmail(aForm.email);
    msg += checkPhone(aForm.telephone);
    
    if (msg != "") {
        displayErrors(msg);
        return false;
    }
    return true;
}

function checkDmContact(aForm) {
    var msg = "";
    
    clearAll();
    msg += checkNonNull("firstName,lastName,email,telephone,company,physicians,specialties");
    msg += checkEmail(aForm.email);
    msg += checkPhone(aForm.telephone);
    
    if (msg != "") {
        displayErrors(msg);
        return false;
    }
    return true;
}

function checkAlertsReg(aForm) {
    var msg = "";
        
    clearAll();
    msg += checkNonNull("businessName,taxid,physicians,address1,city,state,zipCode,billingFirst,billingLast,billingEmail,telephone");
    msg += checkEmail(aForm.billingEmail);
    msg += checkState(aForm.state);
    msg += checkZip(aForm.zipCode);
    msg += checkPhone(aForm.telephone);
    
    msg += checkSubscriber(1);
    msg += checkSubscriber(2);
    msg += checkSubscriber(3);
    msg += checkSubscriber(4);
    msg += checkSubscriber(5);
            
    if (msg != "") {
        displayErrors(msg);
        return false;
    }
    return true;
}

// Check product demo form
//
function checkDemo(aForm) {
    var msg = "";
    
    clearAll();
    msg += checkNonNull("firstName,lastName,organization,state,telephone,emailAddress,hearAbout");
    msg += checkEmail(aForm.emailAddress);
    msg += checkPhone(aForm.telephone);
    msg += checkState(aForm.state);
    
    if (msg != "") {
        displayErrors(msg);
        return false;
    }
    return true;
}


// Display form errors in a box at the top of the page (or 
// wherever you have put <div id="errors">).
//
function displayErrors(message) {
    scroll(0,0);
    var e = document.getElementById("errors");
    e.innerHTML = "<h1>Error</h1><ul>" + message + "</ul>";
    e.style.display = "block";
}

// Make the error box go away
//
function clearAll() {
    var fields = document.getElementsByTagName("input"); 
    for (var i = 0; i < fields.length; i++) { 
        fields[i].style.backgroundColor="#fff";
    }
    var e = document.getElementById("errors");
    e.style.display = "none";
    scroll(0,0);
    return true;
}

function hilite(element) {
    // element.style.backgroundColor = "#ccffcc";FCEDD5
    element.style.backgroundColor = "#FCEDD5";
}

function checkNonNull(list) {
    var msg = "";
    var count=0;
    var tokens = list.split(",");
    for (i=0; i<tokens.length; i++) {
        var token = tokens[i];
        var e = document.getElementsByName(token)[0];
        if (e.value == "") {
            hilite(e);
            count++;
        }
    }
    if (count > 0) {
        msg = "<li>All highlighted fields need to be filled out.</li>";
    }
    return msg;
}

function checkSubscriber(index) {
    var msg = "";
    
    var fn = document.getElementsByName("firstName" + index)[0];
    var ln = document.getElementsByName("lastName" + index)[0];
    var em = document.getElementsByName("email" + index)[0];
    var cb = document.getElementsByName("category" + index + "[]");
    
    // If all are defined, verify the email address and make sure at least
    // one checkbox is checked.
    //
    if (fn.value != "" && ln.value != "" && em.value != "") {
        
        // Check email format. Modify the returned message so it makes sense in the
        // context of the subscriber.
        //
        var message = checkEmail(em);
        if (message != "") {
            msg += message.replace("address", "address for subscriber " + index);
        }
        
        // Check the checkboxes.
        //
        var checked = false;

        for (i=0; i<cb.length; i++) {
            if (cb[i].checked == true) {
                checked = true;
                break;
            }
        }
        
        if (checked == false) {
            msg += "<li>Please select at least one alert category for subscriber " + index + ".</li>";
        }
    }
    
    // Otherwise, not all of the fields are defined. If at least ONE of them is
    // defined, hilite any fields that have been left blank.
    //
    else if (fn.value != "" || ln.value != "" || em.value != "") {
        if (fn.value == "") { hilite(fn); }
        if (ln.value == "") { hilite(ln); }
        if (em.value == "") { hilite(em); }
        msg += "<li>Please complete all fields for subscriber " + index + ".</li>";
    }

    return msg;
}

function checkState(element) {
    var msg = "";
    var regex = /^(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NE|NC|ND|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i;
    
    if (element.value != "") {
        var match = regex.exec(element.value);
        if (!match) {
            hilite(element);
            msg = "<li>Please enter a valid state abbreviation.</li>";
        }
    }
    return msg;
}

function checkEmail(element) {
    var msg = "";

    if (element.value != "") {
        var emailFilter=/^.+@.+\..{2,3}$/;
        if (!(emailFilter.test(element.value))) { 
            msg = "<li>Please enter a valid email address.</li>";
        } else {
            var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/;
            if (element.value.match(illegalChars)) {
                msg = "<li>The email address contains illegal characters.</li>";
            }
        }
    }
    if (msg != "") {
        hilite(element);
    }
    return msg;    
}

function checkZip(element) {
    var msg = "";
    
    if (element.value != "") {
        var regex1 = /^[0-9]{5}$/;
        var regex2 = /^[0-9]{5}\-[0-9]{4}$/;
        
        if (!element.value.match(regex1) && !element.value.match(regex2)) {
            msg = "<li>Please specify a valid zip code.</li>";
            hilite(element);
        }
    }
    return msg;
}

function checkPhone(element) {
    var msg = "";
    
    if (element.value != "") {
        // Strip out acceptable non-numeric characters.
        //
        var stripped = element.value.replace(/[\(\)\.\-\ ]/g, '');
        
        // If the value still contains non-digits, then it's bad.
        //
        var nonDigits = /[^0-9]/;
        if (stripped.match(nonDigits)) {
            msg = "<li>The phone number contains illegal characters.</li>";
        }

        // Otherwise check the length of the numbers (we need 10).
        //
        else if (stripped.length > 10) {
            msg = "<li>The phone number is too long.</li>";
        } else if (stripped.length == 7) {
            msg = "<li>Please include the telephone area code.</li>";
        } else if (stripped.length < 10) {
            msg = "<li>The phone number is too short.</li>";
        }
    }
    
    if (msg != "") {
        hilite(element);
    }
    return msg;    
}

function checkPopup(element, badValue) {
    var msg = "";
    
    if (element.value != "" && element.value == badValue) {
        msg = "<li>Please specify a business type.</li>";
        hilite(element);
    }
    
    return msg;
}
