(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);
   }
  );

 };

})(jQuery);
