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