// jquery.validator.js - By Clem Flory (cjflory@gmail.com)

var reg_emptyString = /^\s*$/ ;
var reg_zip = /^\d{5}$|^\d{5}-\d{4}$/;
var reg_email = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
var reg_phone = /^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/;
var reg_state = /^(?:(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY]))$/;
var reg_url = /^((http|https):\/\/(www\.)?|www\.)[a-zA-Z0-9\_\-]+\.([a-zA-Z]{2,4}|[a-zA-Z]{2}\.[a-zA-Z]{2})(\/[a-zA-Z0-9\-\._\?\&=,'\+%\$#~]*)*$/;


function validate_field(id, req, valtype) {
    var val = $('#'+id).attr("value");
    if (req == true) { // Field is required
        if (reg_emptyString.test(val)) { return show_error(id); }
        else { // Field is not empty
            if (valtype == "") { return hide_error(id); } // Field doesn't require validation
        }
    } else { // Field isn't required
        if (reg_emptyString.test(val)) { return hide_error(id); } // Field is empty
        else { // Field isn't empty
            if (valtype == "") { return hide_error(id); } // Field doesn't require validation
        }
    }
    // Field requires validation
    if (regex_validation(id, valtype) == true) { return hide_error(id); }
    else { return show_error(id); }
}


function regex_validation(id, valtype) {
    var value = $('#'+id).attr("value");
    var regex = "";
    switch (valtype) {
        case "zip": return reg_zip.test(value);
        case "email": return reg_email.test(value);
        case "phone": return reg_phone.test(value);
        case "state": return reg_state.test(value);
        case "url": return reg_url.test(value);
        default: return false;
    }
}

function show_error(id) {
    var field = $('#'+id);
    var error = $('<label>');
    error.addClass('error');
    error.id = id + "_error";
    var ermsg = "Please enter a valid " + field.parent().children('label').html();
    error.html(ermsg);
    error.insertBefore(field);
    return false;
}

function hide_error(id) {
    var field = $('#'+id);
    field.parent().children('label.error').animate({
        'marginLeft': '-100px',
        'opacity': 0
    }, 300, function() {
        $(this).remove();
    });
    return true;
}
