(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) k = String.fromCharCode(e.which);
                                        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);
            }
        );
            
    };  


    /** ACTIVATE NUMERIC FILTERS
     -------------------------------------------------------------------------------------------------------------------------------------- */
    // only numbers
    if ($('.limitNumeric').size()>=1) {
        $('.limitNumeric').numeric();
    }

    // only numbers with (.) and (,) for coin
    if ($('.limitNumericCoin').size()>=1) {
        $('.limitNumericCoin').numeric({allow:".,"});
    }


    /** ACTIVATE ALPHA FILTERS
     -------------------------------------------------------------------------------------------------------------------------------------- */
    // only letters
    if ($('.limitAlpha').size()>=1) {
        $('.limitAlpha').alpha();
    }

    // only letters and no caps
    if ($('.limitAlphaNoCaps').size()>=1) {
        $('.limitAlphaNoCaps').alpha({nocaps:true});
    }


    /** ACTIVATE ALPHANUMERIC
     -------------------------------------------------------------------------------------------------------------------------------------- */
    // prevent chars like (<), (>) 
    if ($('.limitAlphaNumeric').size()>=1) {
        $('.limitAlphaNumeric').alphanumeric({ichars:'<>'});
    }

})(jQuery);

