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