// JavaScript Document
(function($){
	$.fn.AutoFormato = function(){		
		var tipoFormato = arguments[0];
		var eventos = arguments[1];
		if(eventos){
			aEventos = eventos.split(",");
			for(i = 0; i < aEventos.length; i++){
				aEventos[i] = aEventos[i].split(" ").join("")
			}
		}
		
		var af = this;
		this.each(function(){
			var metodoFormato = null;
			$.each($.fn.AutoFormato.metodos, function(i, metodo){
				if(metodo.className == tipoFormato){
					metodoFormato = metodo.formato;
				}
			});

			if(typeof metodoFormato == "function"){
				if(eventos){
					for(i = 0; i < aEventos.length; i++){	
						switch(aEventos[i]){
							case "keyup" : $(this).keyup(function(){
												$(this).val(metodoFormato($(this).val()));
											});
											break;
							case "click" : $(this).click(function(){
												$(this).val(metodoFormato($(this).val()));
											});
											break;
							case "keydown" : $(this).keydown(function(){
												$(this).val(metodoFormato($(this).val()));
											});
											break;
							case "blur" : $(this).blur(function(){
												$(this).val(metodoFormato($(this).val()));
											});
											break;
							case "focus" : $(this).focus(function(){
												$(this).val(metodoFormato($(this).val()));
											});
											break;
						}
					}
				}else{
					$(this).keyup(function(){
						$(this).val(metodoFormato($(this).val()));
					});
					$(this).blur(function(){
						$(this).val(metodoFormato($(this).val()));
					});
				}
			}			
		});
	}
	
	// tipos de formato
	$.extend($.fn.AutoFormato, {
		metodos : {
			// agregue su tipo de formato y la implementacion requerida
			telefono : {
				className : "EsTelefono",
				formato: function(telefono){	// metodo a implementar en caso de que aplique el formato
					var cadena = "";
					telefono = $.fn.AutoFormato.DevuelveSoloNumeros(telefono);		
					var telefonoArray= telefono.split("");
					for(i = 0; i < telefonoArray.length; i++){
						switch(i){
							case 0: cadena = cadena.concat("(");
									cadena = cadena.concat(telefonoArray[i]);
									break;
							case 3: cadena = cadena.concat(")");					
									cadena = cadena.concat(telefonoArray[i]);					
									break;
							case 6: cadena = cadena.concat("-");
									cadena = cadena.concat(telefonoArray[i]);										
									break;
							default:cadena = cadena.concat(telefonoArray[i]);
									break;
						}
					}	
					return cadena.substr(0, 13);
				}
			},
				
			fecha : {
				className : "EsFecha",
				formato: function(fecha){	// metodo a implementar en caso de que aplique el formato
					var cadena = "";
					fecha = $.fn.AutoFormato.DevuelveSoloNumeros(fecha);
					var fechaArray = fecha.split("");
					for(i = 0; i < fechaArray.length; i++){
						switch(i){
							case 2: 
									cadena = cadena.concat("-");
									cadena = cadena.concat(fechaArray[i]);					
									break;
							case 4: cadena = cadena.concat("-");
									cadena = cadena.concat(fechaArray[i]);					
									break;
							default:cadena = cadena.concat(fechaArray[i]);
									break;
						}
					}	
					return cadena.substr(0, 10);
				}
			},
			moneda : {
				className : "EsMoneda",
				formato: function(moneda){	// metodo a implementar en caso de que aplique el formato
					var Cadena;
					
					Cadena = moneda.toString().split(".");
	
					Val = Cadena[0];//Enteros
					Val = String(Val);
					Val2 = Cadena[1];//Decimales
					
					for(i=0;i<Val.length;i++){
						Val = Val.replace(",","");
					}
					if(Val2){
						for(i=0;i<Val2.length;i++){
							Val2 = Val2.replace(",","");
						}
					}
				
					Val = "" + Val;
					var output = ""; 
					for (var i=0; i < Val.length; i++) {//inicio for
					  if (i != 0 && (Val.length - i) % 3 == 0) output += ",";
					  output += Val.charAt(i);
					}//fin for
					if(!Val2){
						if(output != ""){
							Val = output + ".00";
						}
						return Val;
					}else{
						Dec = Cadena[1];
						if(Dec.length> 2)
							CharDec = Dec.charAt(0) + Dec.charAt(1);
						else
							CharDec = Dec;
						Salida = output + "."+CharDec;
						return Salida;
					}
					//fin metodo
				}
			}
		}
	});
	// funciones privadas
	$.extend($.fn.AutoFormato, {		
		ValidarEsNumero : function (caracter){
			var objRegExp  = /^([0-9]{1})$/;
			return (objRegExp.test(caracter))? true : false;
		},
		
		DevuelveSoloNumeros : function (cadenaEntrada){
			var cadena = "";
			var cadenaEntradaArray = cadenaEntrada.split("");
			for(i = 0; i < cadenaEntradaArray.length; i++){
				cadena = (this.ValidarEsNumero(cadenaEntradaArray[i]))? cadena.concat(cadenaEntradaArray[i]) : cadena.concat("");
			}
			return cadena;
		}
	});
})(jQuery);
