﻿/*
Validators 
*/
var Validators = {
    errorClass: null,
    regexUserName: /[a-zA-Z0-9]{5,50}/i,
    regexEmail: /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/i,
    regexPassword: /[a-zA-Z0-9]{7,50}/i,
    regexAlphaNum: /^[a-zA-Z\s.\-\']+$/i,
    regexWhitespace: /^\s+|\s+$/g,
    alphaNum: 'alphanum',
    password: 'password',
    email: 'email',
    userName: 'username',

    // this fucntion must always be called before using the Validators class.
    init: function(errorClass) {
        this.errorClass = errorClass;
    },

    // test to see if a field is empty
    requiredField: function(fieldId) {
        var isValid = $(Validators.formatSelector(fieldId)).val() != '';
        this.toggleClass(isValid, fieldId);
        return isValid;
    },

    // validate password by regex pattern
    validatePassword: function(fieldId) {
        var isValid = Validators.validateExpression(fieldId, this.password);
        this.toggleClass(isValid, fieldId);
        return isValid;
    },

    // validate user name by regex pattern
    validateUserName: function(fieldId) {
        var isValid = Validators.validateExpression(fieldId, this.userName);
        this.toggleClass(isValid, fieldId);
        return isValid;
    },

    // validate an email address by regex pattern
    validateEmail: function(fieldId) {
        var isValid = Validators.validateExpression(fieldId, this.email);
        this.toggleClass(isValid, fieldId);
        return isValid;
    },

    // validate an alpha numeric text by regex pattern
    validateAlphaNum: function(fieldId) {
        var isValid = Validators.validateExpression(fieldId, this.alphaNum);
        this.toggleClass(isValid, fieldId);
        return isValid;
    },

    // remove whitespace from field by regex pattern
    validateWhitespace: function(fieldId) {
        fieldId = Validators.formatSelector(fieldId);
        var fieldVal = $(fieldId).val();
        $(fieldId).val(fieldVal.replace(this.regexWhitespace, ''));

        return $(fieldId).val() != '';
    },

    // return true if passwords match and false if they don't
    comparePasswords: function(passwordId1, passwordId2, allowBlank) {

        var is_valid = false;
        passwordId1 = Validators.formatSelector(passwordId1);
        passwordId2 = Validators.formatSelector(passwordId2);

        if (allowBlank == true) {
            is_valid = ($(passwordId1).val() == $(passwordId2).val());
        }
        else {
            if ($(passwordId1).val() != "" || $(passwordId2).val() != "") {
                is_valid = ($(passwordId1).val() == $(passwordId2).val())
            }
            else {
                is_valid = false;
            }
        }

        Validators.toggleClass(is_valid, passwordId1);
        Validators.toggleClass(is_valid, passwordId2);

        return is_valid;
    },

    // validate value again a specified regex pattern
    validateExpression: function(fieldId, patternType) {
        fieldId = Validators.formatSelector(fieldId);
        var pattern;

        switch (patternType) {
            case this.email:
                pattern = this.regexEmail;
                break;
            case this.userName:
                pattern = this.regexUserName;
                break;
            case this.alphaNum:
                pattern = this.regexAlphaNum;
                break;
            case this.password:
                pattern = this.regexPassword;
                break;
        }
        return pattern.test($(fieldId).val());
    },

    // set error class
    toggleClass: function(isValid, fieldId) {
        var fieldId = Validators.formatSelector(fieldId);

        if (isValid) {
            $(fieldId).removeClass(this.errorClass);
        } else {
            $(fieldId).addClass(this.errorClass);
        }
    },

    // format jquery selector for id
    formatSelector: function(selector) {
        if (selector != '') {
            if (selector.charAt(0) != '#') {
                selector = '#' + selector;
            }
        }
        return selector;
    }
}

var LoginBar = {

}
