/*
 * jQuery Validation Plugin
 * Useful validation options to prevent form submission if
 * validation is not passed.
 */

//---------------------------------------------------------------
// Main Validation Initialization
//---------------------------------------------------------------

function validateForm(form, options) {

    // Pre-Process Each Input
    for (name in options) {
        var label = form.find('label[for="'+name+'"]');
        var input = form.find('#'+name);
        // Add the Required Star to Each Required Input
        if (options[name].required == true)
            label.after(" <span class='req'>*</span>");
        // Attach Change Event
        input.change(function() { validateInput($(this)); })
        if (input.val() != "")  { input.triggerHandler('change'); }
    }

    // Actions to perform on input change event
    function validateInput(input) {
        var inputid = input.attr('id');
        var required = options[inputid].required;
        var validateFunc = options[inputid].validateFunc;
        var errorMessage = null;
        // Validate the Input value
        if (!errorMessage && required)
            errorMessage = validateNotBlank(input);
        if (!errorMessage && (validateFunc != undefined))
            errorMessage = validateFunc(input);
        // Display the Error Message (if any)
        var container = input.parents('div.field');
        container.removeClass('error');
        container.removeClass('success');
        container.find('p.error-msg').remove();
        if (errorMessage) {
            container.addClass('error');
            container.append("<p class='error-msg'>"+ errorMessage +"</p>");
        } else if (input.val() != '') {
            container.addClass('success');
        }
        // Return the status of this input
        if (!errorMessage) { return true; }
        return false;
    }
    
    // Check values one more time on Submit
    form.submit(function() {
        // Remove current messages; Check form is valid
        $('div.status-messages').remove();
        var formValid = true;
        for (name in options) {
            var input = $(this).find('#'+name);
            formValid &= validateInput(input);
        }
        // If Invalid, Display a Message
        if (!formValid) {
            var message = "";
            message  = "<div class='status-messages'><p class='error'>";
            message += "  There has been a problem with this form.";
            message += "  Please correct the errors marked below.";
            message += "</p></div>";
            $(this).prepend(message);
        }
        // If the Form is Valid, Submit
        if (formValid) { return true; }
        return false;
    });
    
}


//----------------------------------------------------------------
// Validation Functions
//----------------------------------------------------------------

// Verify the value id not blank.
function validateNotBlank(input) {
    if (input.val() == "")
        return "This is a required field.";
    return null;
}

// Verify a proper email is entered (or value is blank).
function validateEmail(input) {
    var regex = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    var email = input.val();
    if ((email != "") && (regex.test(email) == false))
        return "Email address appears invalid.";
    return null;
}

// Verify a proper phone number is entered (or value is blank).
function validatePhone(input) {
    var regex = /^[\+0-9\.\(\)\-\s]+$/;
    var phone = input.val();
    if ((phone != "") && (regex.test(phone) == false))
        return "Please use only numbers.";
    return null;
}


//----------------------------------------------------------------
// Additional Javascript Functions
//----------------------------------------------------------------
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); }
String.prototype.ltrim = function() { return this.replace(/^\s+/,""); }
String.prototype.rtrim = function() { return this.replace(/\s+$/,""); }


