/**
 *  Company:    Green Leg, Inc.
 *  Website:    http://www.greenleg.com
 *  Developer:  Kevin Cawley Jr
 *  Copyright:  Copyright (c) 2011, All rights reserved
 *  Filename:   forms.css
 */

$(document).ready(function(){
    
    // Set the variables for this file
    var validate;
    
    // Custom validator methods
    $.validator.addMethod("exactLength", function(_value, _element, _length) {
        return this.optional(_element) || (_value.length == _length);
    }, "Length must be exact!");
    $.validator.addMethod("phoneUS", function(_value, _element) {
        var phoneNuber = _value.replace(/\s+/g, ""); 
        return this.optional(_element) || phoneNuber.length > 9 && phoneNuber.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
    }, "Phone number must match US format!");
    $.validator.addMethod("defaultDropdown", function(_value, _element) {
        return this.optional(_element) || (_value != "null");
    }, "Dropdown must be selected!");
    $.validator.addMethod("hardPassword", function(_value, _element) {
        var counterFilters = 0;
        if(_value.match(/[(\*\(\)\[\]\+\?\@\!\_\\#\$\%\^\&)+]/)) {
            counterFilters++;
        }
        if(_value.match(/[0-9]/)) {
            counterFilters++;
        }
        if(_value.match(/[a-zA-Z]/)) {
            counterFilters++;
        }
        return this.optional(_element) || (counterFilters == 3);
    }, "Password must contain the right characters!");
    $.validator.addMethod("notEqual", function(_value, _element, _param) {
        var fieldValue = $(_param).val() 
        return this.optional(_element) || (_value != fieldValue);
    }, "Values cannot match!");
    $.validator.addMethod('filesize', function(_value, _element, _param) {
        return this.optional(_element) || (_element.files[0].size <= _param) 
    });
    
    // Validate the customer support form
    var validate = $("#customerSupportForm").validate({
        rules: {
            fullName: {required: true, minlength: 3, maxlength: 128},
            companyName: {minlength: 3, maxlength: 128},
            emailAddress: {required: true, minlength: 6, maxlength: 64, email: true},
            mailingAddress: {minlength: 6, maxlength: 128},
            addressContinued: {minlength: 6, maxlength: 128},
            cityTown: {minlength: 6, maxlength: 128},
            postalCode: {digits: true, exactLength: 5},
            emailSubject: "defaultDropdown",
            emailMessage: {required: true, minlength: 6, maxlength: 3000}
        },
        messages: {
            fullName: {
                required: "Your name is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            companyName: {
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            emailAddress: {
                required: "Your email address is required!",
                minlength: jQuery.format("Email must be at least {0} characters!"),
                maxlength: jQuery.format("Email cannot be longer then {0} characters!"),
                email: "Please format your email address properly!"
            },
            mailingAddress: {
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            addressContinued: {
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            cityTown: {
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            postalCode: {
                digits: "This field can only contain numbers!",
                exactLength: jQuery.format("This field must contain {0} characters!")
            },
            emailSubject: {
                defaultDropdown: "Please select a drop down value!"
            },
            emailMessage: {
                required: "Your message is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            }
        }
    });
    
    // Validate the account registration form
    var validate = $("#accountRegistrationForm").validate({
        rules: {
            emailAddress: {required: true, minlength: 6, maxlength: 64, email: true, remote: {url: "ajax/verify-emailaddress.php",type: "post",async: false}},
            accountPassword: {required: true, minlength: 6, maxlength: 12, hardPassword: true},
            passwordAgain: {required: true, minlength: 6, maxlength: 12, equalTo: "#accountPassword"},
            firstName: {required: true, minlength: 3, maxlength: 128},
            lastName: {required: true, minlength: 3, maxlength: 128},
            postalCode: {required: true, digits: true, exactLength: 5}
        },
        messages: {
            emailAddress: {
                required: "Your email address is required!",
                minlength: jQuery.format("Email must be at least {0} characters!"),
                maxlength: jQuery.format("Email cannot be longer then {0} characters!"),
                email: "Please format your email address properly!",
                remote: "That email address already exists in our system!"
            },
            accountPassword: {
                required: "A password is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                hardPassword: "Please format your password correctly!"
            },
            passwordAgain: {
                required: "A password is required again!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                equalTo: "Your passwords must match!"
            },
            firstName: {
                required: "Your first name is required",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            lastName: {
                required: "Your last name is required",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            postalCode: {
                digits: "This field can only contain numbers!",
                exactLength: jQuery.format("This field can only contain {0} characters!")
            }
        }
    });
    
    // Validate the account login form
    var validate = $("#accountLoginForm").validate({
        rules: {
            emailAddress: {required: true, minlength: 6, maxlength: 64, email: true},
            accountPassword: {required: true, minlength: 6, maxlength: 12}
        },
        messages: {
            emailAddress: {
                required: "Your email address is required!",
                minlength: jQuery.format("Email must be at least {0} characters!"),
                maxlength: jQuery.format("Email cannot be longer then {0} characters!"),
                email: "Please format your email address properly!"
            },
            accountPassword: {
                required: "A password is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            }
        }
    });
    
    // Validate the edit profile form
    var validatedForm = $("#editProfileForm").validate({
        rules: {
            firstName: {required: true, minlength: 3, maxlength: 128},
            lastName: {required: true, minlength: 3, maxlength: 128},
            jobTitle: {minlength: 3, maxlength: 128},
            companyName: {required: true, minlength: 3, maxlength: 128},
            websiteUrl: {minlength: 3, maxlength: 255, url: true},
            mailingAddress: {required: true, minlength: 3, maxlength: 255},
            addressContinued: {minlength: 3, maxlength: 128},
            cityTown: {required: true, minlength: 3, maxlength: 128},
            stateCode: "defaultDropdown",
            postalCode: {required: true, digits: true, exactLength: 5},
            countryCode: "defaultDropdown",
            phoneNumber: "phoneUS",
            mobilePhone: "phoneUS",
            securityQuestion: "defaultDropdown",
            securityAnswer: {required: true, minlength: 3, maxlength: 255}
        },
        messages: {
            firstName: {
                required: "Your first name is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            lastName: {
                required: "Your last name is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            jobTitle: {
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            companyName: {
                required: "Your company name is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            websiteUrl: {
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                url: "Please use the proper format!"
            },
            mailingAddress: {
                required: "Your address is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            addressContinued: {
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            cityTown: {
                required: "Your city is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            stateCode: {
                defaultDropdown: "You must make a selection!"
            },
            postalCode: {
                required: "Your postal code is required!",
                digits: "Only numbers are allowed!",
                exactLength: jQuery.format("This field requires {0} characters!")
            },
            countryCode: {
                defaultDropdown: "You must make a selection!"
            },
            phoneNumber: {
                phoneUS: "Please format correctly!"
            },
            mobilePhone: {
                phoneUS: "Please format correctly!"
            },
            securityQuestion: {
                defaultDropdown: "You must make a selection!"
            },
            securityAnswer: {
                required: "Your answer is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            }
        }
    });
    
    // Validate the change password form
    var validatedForm = $("#changePasswordForm").validate({
        rules: {
            accountPassword: {required: true, minlength: 6, maxlength: 12, hardPassword: true},
            newPassword: {required: true, minlength: 6, maxlength: 12, hardPassword: true, notEqual: "#accountPassword"},
            passwordAgain: {required: true, minlength: 6, maxlength: 12, hardPassword: true, equalTo: "#newPassword"}
        },
        messages: {
            accountPassword: {
                required: "Your current password is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                hardPassword: "Please format your password properly!"
            },
            newPassword: {
                required: "Your new password is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                hardPassword: "Please format your password properly!",
                notEqual: "Your new password cannot match your existing one!"
            },
            passwordAgain: {
                required: "Your new password is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                hardPassword: "Please format your password properly!",
                equalTo: "The new passwords must match!"
            }
        }
    });
    
    // Validate the change email address form
    var validatedForm = $("#changeEmailForm").validate({
        rules: {
            emailAddress: {required: true, minlength: 6, maxlength: 64, email: true, notEqual: "#currentEmail", remote: {url: "ajax/verify-emailaddress.php",type: "post",async: false}},
            confirmEmail: {required: true, minlength: 6, maxlength: 64, email: true, equalTo: "#emailAddress"}
        },
        messages: {
            emailAddress: {
                required: "Your new email is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                email: "Please format your email properly!",
                notEqual: "Your new email cannot match your existing one!",
                remote: "That email address already exists!"
            },
            confirmEmail: {
                required: "Your new email is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!"),
                email: "Please format your email properly!",
                equalTo: "The new emails must match!"
            }
        }
    });
    
    // Validate the resume form
    var validatedForm = $("#addResumeForm").validate({
        rules: {
            resumeTitle: {required: true, minlength: 6, maxlength: 64},
            resumeDescription: {required: true, minlength: 6, maxlength: 128},
            resumeCategory: "defaultDropdown",
            resumeSpecialty: "defaultDropdown",
            resumeExperience: "defaultDropdown",
            resumeFile: {required: true, accept: "pdf|doc|docx", filesize: 131072}
        },
        messages: {
            resumeTitle: {
                required: "A resume title is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            resumeDescription: {
                required: "A resume description is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            resumeCategory: {
                defaultDropdown: "You must make a selection!"
            },
            resumeSpecialty: {
                defaultDropdown: "You must make a selection!"
            },
            resumeExperience: {
                defaultDropdown: "You must make a selection!"
            },
            resumeFile: {
                required: "A resume file is required!",
                accept: "Only PDF,DOC,DOCX files allowed!",
                filesize: "No files over 1mb allowed!"
            }
        }
    });
    
    // Validate the resume edit form
    var validatedForm = $("#editResumeForm").validate({
        rules: {
            resumeTitle: {required: true, minlength: 6, maxlength: 64},
            resumeDescription: {required: true, minlength: 6, maxlength: 128},
            resumeCategory: "defaultDropdown",
            resumeSpecialty: "defaultDropdown",
            resumeExperience: "defaultDropdown"
        },
        messages: {
            resumeTitle: {
                required: "A resume title is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            resumeDescription: {
                required: "A resume description is required!",
                minlength: jQuery.format("This field requires at least {0} characters!"),
                maxlength: jQuery.format("This field cannot be longer then {0} characters!")
            },
            resumeCategory: {
                defaultDropdown: "You must make a selection!"
            },
            resumeSpecialty: {
                defaultDropdown: "You must make a selection!"
            },
            resumeExperience: {
                defaultDropdown: "You must make a selection!"
            }
        }
    });
    
    // Clear the form of errors
    $(".cancel").click(function() {
        // Reset the form values on the form that was last ran
        validate.resetForm();
    });
    
});
