(function($) {
    $.fn.alphanumeric = function(p) {
        p = $.extend({
            ichars: "!@#$%^&*()+=[]\\\';,/{}|\":<>?~`.- ",
            nchars: "",
            allow: ""
        },
        p);
        return this.each(function() {
            if (p.nocaps) p.nchars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            if (p.allcaps) p.nchars += "abcdefghijklmnopqrstuvwxyz";
            s = p.allow.split('');
            for (i = 0; i < s.length; i++) if (p.ichars.indexOf(s[i]) != -1) s[i] = "\\" + s[i];
            p.allow = s.join('|');
            var reg = new RegExp(p.allow, 'gi');
            var ch = p.ichars + p.nchars;
            ch = ch.replace(reg, '');
            $(this).keypress(function(e) {

                if (!e.charCode) 
                {
                    if (e.which)
                    {
                        k = String.fromCharCode(e.which);
                    }
                    else
                    {
                        k = String.fromCharCode(e.keyCode);
                    }
                }
                else
                {
                    k = String.fromCharCode(e.charCode);
                }

                if (ch.indexOf(k) != -1) 
                {
                    e.preventDefault();
                }
                
                if (e.ctrlKey && k == 'v') 
                {
                    e.preventDefault()
                }

            });
            $(this).bind('contextmenu',
            function() {
                return false
            })
        })
    };
    $.fn.numeric = function(p) {
        var az = "abcdefghijklmnopqrstuvwxyz";
        az += az.toUpperCase();
        p = $.extend({
            nchars: az
        },
        p);
        return this.each(function() {
            $(this).alphanumeric(p)
        })
    };
    $.fn.alpha = function(p) {
        var nm = "1234567890";
        p = $.extend({
            nchars: nm
        },
        p);
        return this.each(function() {
            $(this).alphanumeric(p)
        })
    }
})(jQuery);
