// --------------------------------------------------------------------------------
// fb_Application.js
// Simon Anderson 08-September-2009
// Contains Javascript relevant to the Forms builder application.
// --------------------------------------------------------------------------------

var fb_fieldPrefix = "tmpl_fbApp_"

// cancel flag
var fb_cancelled = false;

// the maximum amount of characters in a text area, can be overwritten by a control
var maxlen = 256;

// regular expression for validating email addresses
var em_re = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

// regular expression for validating phone numbers
var ph_re = /^(((\(\d{3}\))|((1[\- ]?)?\d{3}))[\- ]?)?\d{3}[\- ]?\d{4}$/;

// --- Attach JS to document elements and execute simple statements. ---
ow_f_AppendLoadEvent(
function() {

    if (document.getElementById(fb_fieldPrefix + "fb_btnOK") != null)
        ow_f_AddEvent(document.getElementById(fb_fieldPrefix + "fb_btnOK"), "click", fb_formSubmitClicked, false);

    if (document.getElementById(fb_fieldPrefix + "fb_btnOKImage") != null)
        ow_f_AddEvent(document.getElementById(fb_fieldPrefix + "fb_btnOKImage"), "click", fb_formSubmitClicked, false);


    if (document.getElementById(fb_fieldPrefix + "studentnumber") != null)
        ow_f_AddEvent(document.getElementById(fb_fieldPrefix + "studentnumber"), "keypress", fb_ValidateNumeric, false);

    if (document.getElementById(fb_fieldPrefix + "graduateyear") != null)
        ow_f_AddEvent(document.getElementById(fb_fieldPrefix + "graduateyear"), "keypress", fb_ValidateNumeric, false);
        
    if (document.getElementById(fb_fieldPrefix + "donate") != null)
        ow_f_AddEvent(document.getElementById(fb_fieldPrefix + "donate"), "click", fb_ToggleDonation, false);        

    if (document.getElementById(fb_fieldPrefix + "donationamount") != null) {
        ow_f_AddEvent(document.getElementById(fb_fieldPrefix + "donationamount"), "keypress", fb_ValidateNumeric, false);
        document.getElementById(fb_fieldPrefix + "donationamount").disabled = true;
    }


    if (document.getElementById("fb_form") != null) {
        var inp = document.getElementById("fb_form").getElementsByTagName("input");
        for (var i = 0; i < inp.length; i++) {
            if (inp[i].type == "text")
                ow_f_AddEvent(inp[i], "keypress", fb_formTextSubmit, false);

            // add hidden input element for spambot-prevention after a short (500 ms) timeout
            setTimeout(function() {
                var fb_chkNotSpam = document.getElementById(fb_fieldPrefix + "fb_chkNotSpam");
                if (fb_chkNotSpam == null && document.createElement) {
                    var fb_chkNotSpam = document.createElement("input");
                    if (fb_chkNotSpam) {
                        fb_chkNotSpam.setAttribute("type", "checkbox");
                        fb_chkNotSpam.setAttribute("id", fb_fieldPrefix + "fb_chkNotSpam");
                        fb_chkNotSpam.setAttribute("name", fb_fieldPrefix + "fb_chkNotSpam");
                        fb_chkNotSpam.setAttribute("value", "notspam");
                        fb_chkNotSpam.style.display = "none";
                        document.getElementById("fb_form").appendChild(fb_chkNotSpam);
                        fb_chkNotSpam.checked = true;
                    }
                }
            }, 500);


        }
    }
}
);


// --------------------------------------------------------------------------------
// fb_ToggleDonation()
// Toggles the donation amount field based on the click on the donation checkbox
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- nothing
// --------------------------------------------------------------------------------
function fb_ToggleDonation(e) {

    var donate = document.getElementById(fb_fieldPrefix + "donate")
    var donateamount = document.getElementById(fb_fieldPrefix + "donationamount")

    if (donate != null && donateamount != null) {
        if (donate.checked)
            donateamount.disabled = false;
        else {
            donateamount.value = "";
            donateamount.disabled = true;            
        }    
    }
}


// --------------------------------------------------------------------------------
// fb_formTextSubmit()
// Fires when a textfield had focus and ENTER was pressed.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- Nothing
// --------------------------------------------------------------------------------
function fb_formTextSubmit(e) {

    var code;
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;

    if (code == 13) {
        document.getElementById(fb_fieldPrefix + "fb_btnOK").click();
        if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
    }
}

// --------------------------------------------------------------------------------
// fb_ReadOnlyTextField()
// Makes a control read-only
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- nothing
// --------------------------------------------------------------------------------
function fb_ReadOnlyTextField(e) {
    if (!e) var e = window.event;

    if (e.preventDefault)
        e.preventDefault();
    else
        e.returnValue = false;
}

// --------------------------------------------------------------------------------
// fb_formSubmitClicked()
// Fires when the submit button was clicked.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- Nothing
// --------------------------------------------------------------------------------
function fb_formSubmitClicked(e) {

    // hidden field demoform defines the demo form
    var demoform = document.getElementById(fb_fieldPrefix + "demoform");
    if (demoform != null) {
        if (!fb_checkDemoData()) {
            if (!e) var e = window.event;
            if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
        } else {
            return;
        }    
    }

    else {
        if (!fb_checkRequestData()) {
            if (!e) var e = window.event;
            if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
        } else {
            return;
        }    
    }


}


// --- Functions and variables. ---

// --------------------------------------------------------------------------------
// fb_ValidateNumeric()
// Ensure that only numeric values and periods are entered.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- nothing
// --------------------------------------------------------------------------------
function fb_ValidateNumeric(e) {
    var nums = '0123456789.\b';
    var code;
    if (!e) var e = window.event;

    if (e.which != null) {
        code = e.which;
        // for browsers that support e.which, if it is zero then we had a control character pressed
        if (code == 0) return
    }
    else if (e.keyCode) code = e.keyCode;
    var character = String.fromCharCode(code);

    // check the character against the numeric characters
    if (nums.indexOf(character) == -1) {
        if (e.preventDefault)
            e.preventDefault();
        else
            e.returnValue = false;
    }
}

// --------------------------------------------------------------------------------
// fb_checkDemoData()
// Validates the data entered on the demo form.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- the results of the validation [boolean]
// --------------------------------------------------------------------------------

function fb_checkDemoData() {

        var title = document.getElementById(fb_fieldPrefix + "title");
        if (title != null && title.value == "") {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_title").value);
            title.focus();
            return false;
        }
        
        var fullname = document.getElementById(fb_fieldPrefix + "fullname");
        if (fullname != null && fullname.getAttribute("required") == "1" && fullname.value.length == 0) {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_fullname").value);
            fullname.focus();
            return false;
        }


        var em_re = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        var demoemail = document.getElementById(fb_fieldPrefix + "demoemail");
        if (demoemail != null) {
            if (demoemail.getAttribute("required") == "1" && demoemail.value.length == 0) {
                alert(document.getElementById(fb_fieldPrefix + "hid_req_demoemail").value);
                demoemail.focus();
                return false;
            } else {
                if (demoemail.value.length > 0 && !demoemail.value.match(em_re)) {
                    alert(document.getElementById(fb_fieldPrefix + "hid_regx_demoemail").value);
                    demoemail.focus();
                    demoemail.select();
                    return false;
                }
            }
        }
        //determine if we need to verify re-enter email field
        var demoemailconfirm = document.getElementById(fb_fieldPrefix + "demoemailconfirm");
        if (demoemailconfirm != null) {
            if (demoemailconfirm.value.length == 0) {
                alert(document.getElementById(fb_fieldPrefix + "hid_req_demoemailconfirm").value);
                demoemailconfirm.focus();
                return false;
            }
            else if (demoemailconfirm.value != demoemail.value) {
                alert(document.getElementById(fb_fieldPrefix + "hid_cusv_demoemailconfirm").value);
                demoemailconfirm.focus();
                return false;
            }
        }


        var programs = document.getElementById(fb_fieldPrefix + "programs");
        if (programs != null && programs.value == "") {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_programs").value);
            programs.focus();
            return false;
        }        

        return true;
}

// --------------------------------------------------------------------------------
// fb_checkRequestData()
// Validates the data entered on the order page.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- the results of the validation [boolean]
// --------------------------------------------------------------------------------

function fb_checkRequestData() {
    // return if the cancel button is clicked
    if (fb_cancelled)
        return true;

    /* Proctor approval form */

    var studentnumber = document.getElementById(fb_fieldPrefix + "studentnumber");
    if (studentnumber != null && studentnumber.getAttribute("required") == "1" && studentnumber.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_studentnumber").value);
        studentnumber.focus();
        return false;
    }

    var firstname = document.getElementById(fb_fieldPrefix + "firstname");
    if (firstname != null && firstname.getAttribute("required") == "1" && firstname.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_firstname").value);
        firstname.focus();
        return false;
    }

    var lastname = document.getElementById(fb_fieldPrefix + "lastname");
    if (lastname != null && lastname.getAttribute("required") == "1" && lastname.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_lastname").value);
        lastname.focus();
        return false;
    }

    var courses = document.getElementById(fb_fieldPrefix + "courses");
    if (courses != null) {
        if (courses.getAttribute("maxlength") != null)
            maxlen = parseInt(courses.getAttribute("maxlength"))

        if (courses.value.length == 0) {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_courses").value);
            courses.focus();
            return false;
        }
        else if (courses.value.length > maxlen) {
            alert(document.getElementById(fb_fieldPrefix + "hid_cusv_courses").value);
            courses.focus();
            return false;
        }
    }    



    var email = document.getElementById(fb_fieldPrefix + "email");
    if (email != null) {
        if (email.getAttribute("required") == "1" && email.value.length == 0) {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_email").value);
            email.focus();
            return false;
        } else {
            if (email.value.length > 0 && !email.value.match(em_re)) {
                alert(document.getElementById(fb_fieldPrefix + "hid_regx_email").value);
                email.focus();
                email.select();
                return false;
            }
        }
    }


    var proctorname = document.getElementById(fb_fieldPrefix + "proctorname");
    if (proctorname != null && proctorname.getAttribute("required") == "1" && proctorname.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_proctorname").value);
        proctorname.focus();
        return false;
    }

    var occupation = document.getElementById(fb_fieldPrefix + "occupation");
    if (occupation != null && occupation.getAttribute("required") == "1" && occupation.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_occupation").value);
        occupation.focus();
        return false;
    }

    var employer = document.getElementById(fb_fieldPrefix + "employer");
    if (employer != null && employer.getAttribute("required") == "1" && employer.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_employer").value);
        employer.focus();
        return false;
    }


    var address1 = document.getElementById(fb_fieldPrefix + "address1");
    if (address1 != null && address1.getAttribute("required") == "1" && address1.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_address1").value);
        address1.focus();
        return false;
    }

    var city = document.getElementById(fb_fieldPrefix + "city");
    if (city != null && city.getAttribute("required") == "1" && city.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_city").value);
        city.focus();
        return false;
    }


    var province = document.getElementById(fb_fieldPrefix + "province");
    if (province != null && province.getAttribute("required") == "1" && province.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_province").value);
        province.focus();
        return false;
    }

    var country = document.getElementById(fb_fieldPrefix + "country");
    if (country != null && country.getAttribute("required") == "1" && country.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_country").value);
        country.focus();
        return false;
    }


    var postalcode = document.getElementById(fb_fieldPrefix + "postalcode");
    if (postalcode != null && postalcode.getAttribute("required") == "1" && postalcode.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_postalcode").value);
        postalcode.focus();
        return false;
    }


    var proctoremail = document.getElementById(fb_fieldPrefix + "proctoremail");
    if (proctoremail != null) {
        if (proctoremail.getAttribute("required") == "1" && proctoremail.value.length == 0) {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_proctoremail").value);
            proctoremail.focus();
            return false;
        } else {
            if (proctoremail.value.length > 0 && !proctoremail.value.match(em_re)) {
                alert(document.getElementById(fb_fieldPrefix + "hid_regx_proctoremail").value);
                proctoremail.focus();
                proctoremail.select();
                return false;
            }
        }
    }

    // determine if we need to check for a required phone field
    var workphone = document.getElementById(fb_fieldPrefix + "workphone");
    if (workphone != null && workphone.getAttribute("required") == "1" && workphone.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_workphone").value);
        workphone.focus();
        return false;
    }


    var alumnaeemail = document.getElementById(fb_fieldPrefix + "alumnaeemail");
    if (alumnaeemail != null) {
        if (alumnaeemail.getAttribute("required") == "1" && alumnaeemail.value.length == 0) {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_alumnaeemail").value);
            alumnaeemail.focus();
            return false;
        } else {
            if (alumnaeemail.value.length > 0 && !alumnaeemail.value.match(em_re)) {
                alert(document.getElementById(fb_fieldPrefix + "hid_regx_alumnaeemail").value);
                alumnaeemail.focus();
                alumnaeemail.select();
                return false;
            }
        }
    }


    // determine if we need to check for a required phone field
    var phone = document.getElementById(fb_fieldPrefix + "phone");
    if (phone != null && phone.getAttribute("required") == "1" && phone.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_phone").value);
        phone.focus();
        return false;
    }    
    
    

    var agreement = document.getElementById(fb_fieldPrefix + "agreement");
    if (agreement != null && !agreement.checked) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_agreement").value);
        agreement.focus();
        return false;
    }



    var degree = document.getElementById(fb_fieldPrefix + "degree");
    if (degree != null && degree.getAttribute("required") == "1" && degree.value.length == 0) {
        alert(document.getElementById(fb_fieldPrefix + "hid_req_degree").value);
        degree.focus();
        return false;
    }


    var businessemail = document.getElementById(fb_fieldPrefix + "businessemail");
    if (businessemail != null) {
        if (businessemail.getAttribute("required") == "1" && businessemail.value.length == 0) {
            alert(document.getElementById(fb_fieldPrefix + "hid_req_businessemail").value);
            businessemail.focus();
            return false;
        } else {
            if (businessemail.value.length > 0 && !businessemail.value.match(em_re)) {
                alert(document.getElementById(fb_fieldPrefix + "hid_regx_businessemail").value);
                businessemail.focus();
                businessemail.select();
                return false;
            }
        }
    }
     return true;

}	
