(function($) {
	$.maskSS = {"types":{'9':/[0-9]/,'a':/[A-Za-z]/,'*':/[A-Za-z0-9]/},
				"isType":function(c){for(var obj in $.maskSS['types']){if(obj == c)return true;}return false}
				};
	$.fn.extend({
		behavior : function(mask,settings){						//console.log(d);
			try{
				var input = $(this[0]);
				input.data("length",0);
				input.data("chaarcter"," ");
				input.data("dir","LTR");
				input.data("setDir",function(dir){
					if(dir == "LTR"){input.attr("dir","LTR");}
					if(dir == "RTL"){input.attr("dir","RTL");}
				});
				input.data("val",new Array());
				
				input.data("mask",function(){
					try{
					}catch(e){}
				});
				
				input.data("setCharacter",function(c){
							if(input.data("val").length < input.data("length") ){
								input.data("val").push(c);
								input.data("print")();
								input.data("position")();
							}
						});
				input.data("backspace",function(c){
							input.data("val").pop();
							input.data("print")();
							input.data("position")();
						});
				input.data("delete",function(c){
						});
				input.data("chaarcter",settings['placeholder'] != undefined? settings['placeholder'] : input.data("chaarcter"));
				type = settings['type'] != undefined ? settings['type']:"custom";
				switch(type){
					case "custom":
							input.data("mascara",new String(mask).split(""));
							for(var obj in input.data("mascara")){
								d = input.data("mascara")[obj];
								if($.maskSS['isType'](d)){
									 input.data("length",input.data("length") + 1);
								}
							}
							input.data("funcion",function(c){
								try{
									countPos = 0;
									lengthMax = input.data("val").length;
									d='';
									//input.data("pos",0);
									for(var obj in input.data("mascara")){
											d = input.data("mascara")[obj];
											if($.maskSS['isType'](d)){
												countPos++;
												if(lengthMax < countPos){
													break;
												}
											}
									}
								
									if($.maskSS['types'][d].test(c)){
										input.data("setCharacter")(c);
									}
								}catch(e){}
							});
							input.data("print",function(){
								try{
									index=0;
									valString = "";
									leng = input.data("mascara").length;
									for(i = 0 ;i<leng;i++){
										d = input.data("mascara")[i];
										if(!$.maskSS['isType'](d)){
											valString += d;
										}else{
											if(index < input.data("val").length ){
												valString += input.data("val")[index];
												index++;
											}else{
												valString += input.data("chaarcter");
											}
										}
									}
									$(input).val(valString);
								}catch(e){}
							});
							input.data("position",function(){
								try{
									var pos = 0;
									lengthMax = input.data("val").length;
									countPos = 0;
									for(var obj in input.data("mascara")){
										d = input.data("mascara")[obj];
										if($.maskSS['isType'](d)){
											countPos++;
											if(lengthMax < countPos){
												break;
											}
										}
										pos++;
									}
									begin = end = pos;

									if (input.get(0).setSelectionRange) {
										input.get(0).focus();
										input.get(0).setSelectionRange(begin, end);
									} else if (input.get(0).createTextRange) {
										var range = input.get(0).createTextRange();
										range.collapse(true);
										range.moveEnd('character', end);
										range.moveStart('character', begin);
										range.select();
									}
								}catch(e){}
							});
					break;
					case "moneyL":
							input.data("mascara",new String("999999999999999999999999999999").split(""));
							for(var obj in input.data("mascara")){
								d = input.data("mascara")[obj];
								if($.maskSS['isType'](d)){
									input.data("length",input.data("length") + 1);
								}
							}
							input.data("funcion",function(c){
								try{
									if(input.data("val").length == 0 && c=='0'){return;}
									countPos = 0;
									lengthMax = input.data("val").length;
									d='';
									for(var obj in input.data("mascara")){
											d = input.data("mascara")[obj];
											if($.maskSS['isType'](d)){
												countPos++;
												if(lengthMax < countPos){
													break;
												}
											}
									}
									if($.maskSS['types'][d].test(c)){
										input.data("setCharacter")(c);
									}
								}catch(e){}
							});
							input.data("print",function(){
								try{
									index=0;
									valString = "";
									leng = input.data("val").length;
									for(i = leng-1 ;i>=0;i--){
										d = input.data("val")[i];
										valString = d+(index % 3 == 0 && index != 0?",":"")+valString;
										index++;
									}
									valString=(valString==""?"0":valString)+".00";

									$(input).val(valString);
								}catch(e){}
							});
							input.data("position",function(){
								try{
									var pos = input.val().length-3;
									begin = end = pos;
									if (input.get(0).setSelectionRange) {
										input.get(0).focus();
										input.get(0).setSelectionRange(begin, end);
									} else if (input.get(0).createTextRange) {
										var range = input.get(0).createTextRange();
										range.collapse(true);
										range.moveEnd('character', end);
										range.moveStart('character', begin);
										range.select();
									}
								}catch(e){}
							});
					break;
				}
				
				return this.each(function(i,elemento) {
					elemento = $(this);
					ignore = false;backspace=false;
					elemento.bind("keypress", function(e) {
						try{
							e = e || window.event;
							var k = e.charCode || e.keyCode || e.which;
							ignore = !(k > 47 && k < 58 || k > 91  && k < 123 || k > 64  && k < 91);
							if(k == 8 || k == 46 ){if(backspace == false){input.data("backspace")();}else{backspace=false;}return false;}
							if(ignore){
								ignore = false;
								return  false;
							}
							c = String.fromCharCode(k);
							input.data("funcion")(c);
						}catch(e){}
						return false;
					});
					elemento.bind("blur", function() {
						if(input.data("val").length == 0){$(input).val("");}
					});
					elemento.bind("click", function() {
						input.data("print")();
						input.data("position")();
					});
					elemento.bind("keydown", function(e) {
						try{
							var k = e.keyCode;
							ignore = (k < 16 || (k > 16 && k < 32) || (k > 32 && k < 41));
							if (k == 8 || k == 46) {//backspace/delete
								input.data("backspace")();
								backspace = true;
								return false;
							} 
						}catch(e){}
					});
				});
			}catch(e){}
		}
	});
})(jQuery);

