﻿jQuery.fn.enter = function(handler) {
    jQuery(this).keyup(function(e) {
        if (e.keyCode == 13)
            handler();
    });
};

var oldStyleTable = {};

jQuery.fn.isStyleBackedUp = function() {
    return oldStyleTable[this] != null;
};

jQuery.fn.backupStyle = function(attributes) {
    var styleEntry = {};

    for (var i = 0; i < attributes.length; i++) {
        var key = attributes[i];


        styleEntry[key] = jQuery(this).css(key);
    }

    oldStyleTable[this] = styleEntry;
};

jQuery.fn.restoreStyle = function() {
    var element = this;
    $.each(oldStyleTable[this], function(index, value) {
        element.css(index, value);        
    });
};

jQuery.replaceTokens = function(template, values) {
    var tokens = template.match(/(\$\$[a-zA-Z][a-zA-Z0-9]*)/g);

    for (var x = 0; x < tokens.length; x++)
        template = template.replace(tokens[x], values[tokens[x].substring(2)]);

    return template;
};

jQuery.setEmailField = function(formID, inputID, submit) {
    $('#' + formID).validate({
        submitHandler: function(s) {
            var e = $('#' + inputID);

            if (e.isStyleBackedUp())
                e.restoreStyle();

            submit(e.val());
        },
        invalidHandler: function(s) {
            var e = $('#' + inputID);

            if (!e.isStyleBackedUp())
                e.backupStyle(['color', 'font-weight']);

            e.css({ color: '#FF0000', fontWeight: 'bold' });
        }
    });
    
    $('#' + inputID).rules('add', {
        required: true,
        email: true
    });
};

jQuery.validator.addMethod('zip', function(value, element) {
    var result = this.optional(element) || /^\d{5}$/.test(value);

    var e = $(element);

    if (!result) {
        if (!e.isStyleBackedUp())
            e.backupStyle(['color', 'font-weight']);

        e.css({ color: '#FF0000', fontWeight: 'bold' })
    }
    else if (e.isStyleBackedUp()) {
        e.restoreStyle();
    }

    return result;
}, 'Please enter a valid zip.');
