	// JavaScript Document
	// Mascara.js
	/* 
	*	Dependencias: commons.js, Formateador.js
	*   Opcional: Mensajes.js
	*	Corre en: ie6, ie7
	*	Versión: 2.0
	*	Autor: rlopez
	*/
	function Mascara() {
		
		// ATRIBUTOS
		function teclasValidas() {
			var teclas = [
				8,  // backspace
				9,  // tab
				16, // shift
				17, // ctrl
				18, // shiftDer
				13, // enter
				27, // esc
				35, // inicio
				36, // fin
				37, // flechaIzq
				38, // flechaArriba
				39, // flechaDer
				40, // flechaAbajo
				45, // insert
				46  // supr
			];
			return teclas;
		}
		
		this.setNumericos = function () {
			if(arguments.length != 0) {				
				PT.crearFormateador();
				for(var i=0;i<arguments.length;i++)	{
					this.numerico(document.getElementById(arguments[i].toString()));
				}
			}
		}

		this.setFechas = function () {
			if(arguments.length != 0) {
				PT.crearValidador();
				for(var i=0;i<arguments.length;i++)	{
					this.fecha(document.getElementById(arguments[i].toString()));
				}
			}
		}
	
		this.setTelefonos = function () {
			if(arguments.length != 0) {
				for(var i=0;i<arguments.length;i++)	{
					this.telefono(document.getElementById(arguments[i].toString()));
				}
			}
		}
		
		this.setEORs = function () {
			if(arguments.length != 0) {
				for(var i=0;i<arguments.length;i++)	{
					this.EOR(document.getElementById(arguments[i].toString()));
				}
			}
		}		

		this.setHoras = function () {
			if(arguments.length != 0) {
				for(var i=0;i<arguments.length;i++)	{
					this.horas(document.getElementById(arguments[i].toString()));
				}
			}
		}

		// MASCARAS	
		
		this.numerico = function (obj) {
			try {
				
				if(obj.decimal == "true") {
					obj.style.textAlign = "right";
				}								
				
				obj.onblur = function() {
					if(obj.value != "") {
						if(obj.decimal == "true") {
							obj.value = PT.formateador.moneda(obj.value);
						}
						if(obj.value == "-") obj.value = "";						
					}
					if(obj.triggerblur != undefined)
						eval(obj.triggerblur);
				}
				
				obj.onfocus = function() {					
					if(obj.decimal == "true") {						
						obj.value = PT.formateador.moneda(obj.value, false);
					}
					obj.select();
					if(obj.triggerfocus != undefined)					
						eval(obj.triggerfocus);
				}
				
				obj.onkeyup = function() {
					if(obj.negativo == "true") {
						if(obj.value.indexOf("-") != 0)
							obj.value = obj.value.replace("-", "");
					}
				}
				
				obj.onkeydown = function(e) {
					
					var evt = getEvent(e);
					var key = evt.keyCode;
					
					var teclasPermitidas = teclasValidas(); 
								
					// Validacion en caso de que el control acepte caracter negativo (-)	
					if(obj.negativo == "true") {
						if(key == 109) {
							if(obj.value.charAt(0) == "-") obj.value = obj.value.substring(1, obj.value.length);
							else obj.value = "-" + obj.value;						
							return false;
						}
						teclasPermitidas.push(109); // menos del numberpad
						//teclasPermitidas.push(); // TODO agregar menos del keypad
					}
					
					// Validacion en caso de que el control acepte el caracter decimal (.)
					if(obj.decimal == "true") {
						teclasPermitidas.push(110); // punto ó decimal del numberpad
						teclasPermitidas.push(190); // punto ó decimal del keypad						
						if(key == 110 || key == 190) {
							if(obj.value.length == 0) {
								return false;
							}
							
							var primerPunto = obj.value.indexOf(".");
							if(primerPunto != -1 && obj.value.substring(primerPunto, obj.value.length).indexOf(".") != -1) {
								return false;
							}
						}
					}
										
					// Chequea la tecla presionada si es un caracter valido
					var esTP = false;
					
					for(var i=0;i<teclasPermitidas.length;i++) {
						if(teclasPermitidas[i] == key) {
							esTP = true;
							break;
						}
					}
						
					var permitido = true;
					if(!esTP) {
						var permitido = ((key >= 96 && key <= 105) || (key >= 48 && key <= 57)) && !(evt.altKey || evt.ctrlKey || evt.shiftKey);						
					}
					
					if(!permitido) {
						return false;
					}
	
				}
			} catch(e) {
				alert(e.message);
			}						
		}
		
		this.fecha = function(obj) {
			try {
			
				obj.onblur = function() {					
					if(!PT.validador.fecha(obj)) {
						obj.focus();
						if(PT.mensaje) PT.mensaje.flotante("Debe ingresar una fecha válida.", obj.id);
						else alert("Debe ingresar una fecha válida.");
					}
					if(obj.triggerblur != undefined)
						eval(obj.triggerblur);					
				}						
				
				obj.onkeyup = function() {
					var str = obj.value;				
					
					if(str.substring(0, 2).indexOf("/") != -1) {
						obj.value = str.substring(0, 2).replace("/", "");					
						return false;
					}
					
					if(str.substring(3, 5).indexOf("/") != -1) {
						obj.value = str.substring(0, 3).concat(str.substring(3, 5).replace("/", ""));
						return false;
					}
					// 01 2 34 5 6789
					// 14 / 10 / 2006
				}			
				
				obj.onkeydown = function(e) {			
					
					var evt = getEvent(e);
					var key = evt.keyCode;
					
					if(key == 40) {
						var fecha = new Date();
						var mes = parseInt(fecha.getMonth()) + 1;
						mes = (mes<10)?"0".concat(mes):mes;
						obj.value = (fecha.getDate()<10?"0".concat(fecha.getDate()):fecha.getDate()) + 
							"/" + mes + 
							"/" + fecha.getFullYear();
						return false;
					}
					
					var teclasPermitidas = teclasValidas();
								
					// Chequea la tecla presionada si es un caracter valido
					var esTP = false;
					
					for(var i=0;i<teclasPermitidas.length;i++) {
						if(teclasPermitidas[i] == key) {
							esTP = true;
							break;
						}
					}			
	
					var permitido = true;
					if(!esTP) {
						// valida y permite los caracteres validos
						var permitido = ((key >= 96 && key <= 105) || (key >= 48 && key <= 57)) && !(evt.altKey || evt.ctrlKey || evt.shiftKey);
	
						if(obj.value.length == 10)
							return false;
	
						if(permitido) {
							var strFinal = "";
							var schar = "";
							
							// Cuenta la cantidad de slash ingresados en el texto 
							var cantSlash = 0;
							for(var i=0;i<obj.value.length;i++) {
								if(obj.value.charAt(i) == "/")
									cantSlash++;
							}
							
							// Construye caracter a caracter el formato de fecha a medida que es ingresada la fecha
							for(var i=0;i<obj.value.length+1;i++) {
								schar = obj.value.charAt(i);
								if(i==2 && cantSlash == 0) schar = "/";
								if(i==5 && cantSlash == 1) schar = "/";
								strFinal += schar;
							}
							obj.value = strFinal;
						}
					}
	
					if(!permitido) {
						return false;
					}
	
				}
			} catch(e) {
				alert(e.message);
			}
			
		}
		
		this.EOR = function (obj) {
			try {
				
				obj.onfocus = function() {
					obj.select();
					if(obj.focustrigger != undefined)
						eval(obj.focustrigger);
				}
				
				obj.onkeydown = function(e) {
					
					var evt = getEvent(e);
					var key = evt.keyCode;					
					
					if(obj.value.match(/[a-zA-Z]/)) {						
						obj.value = "";
					}
										
					var teclasPermitidas = teclasValidas(); 
					
					// Chequea la tecla presionada si es un caracter valido
					var esTP = false;
					
					for(var i=0;i<teclasPermitidas.length;i++) {
						if(teclasPermitidas[i] == key) {
							esTP = true;
							break;
						}
					}		
	
					var permitido = true;
					if(!esTP) {
						var permitido = ((key >= 96 && key <= 105) || (key >= 48 && key <= 57)) && !(evt.altKey || evt.ctrlKey || evt.shiftKey);
						
						// Construye caracter a caracter el formato de las estructura
						if(permitido) {
							var strFinal = "", schar = "";
							for(var i=0;i<obj.value.length+1;i++) {
								schar = obj.value.charAt(i);
								if((i+1)%3 == 0) schar = "-";
								strFinal += schar; 
							}
							obj.value = strFinal;
						}
					}				
						
					if(!permitido) {
						return false;
					}
	
				}
			} catch(e) {
				alert(e.message);
			}						
		}

		this.telefono = function (obj) {
			try {
				
				obj.onblur = function() {
	
					var str = obj.value;
					var tam = obj.value.length;
					
					if(tam < 7) {
						return;
					} else if(tam == 7) {
						obj.value = str.substr(0, 3) + "-" + str.substr(3, 2) + "-" + str.substr(5, 2);
					} else if(tam == 10) {
						obj.value = "(" + str.substr(0, 3) + ")" + str.substr(3, 3) + "-" + str.substr(6, 2) + "-" + str.substr(8, 2);
					} else if(tam == 11) {
						obj.value = "(" + str.substr(0, 4) + ")" + str.substr(4, 3) + "-" + str.substr(7, 2) + "-" + str.substr(9, 2);
					} else {
						//obj.value = "(" + str.substr(str.length-10, 4) + ")" + str.substr(str.length-7, 3) + "-" + str.substr(str.length-4, 2) + "-" + str.substr(str.length-2, 2);	
					}
					
					if(obj.triggerblur != undefined) {
						eval(obj.triggerblur);
					}
				}
				
				obj.onkeydown = function(e) {
					
					var evt = getEvent(e);
					var key = evt.keyCode;
					
					var teclasPermitidas = teclasValidas(); 

					// Chequea la tecla presionada si es un caracter valido
					var esTP = false;
					
					for(var i=0;i<teclasPermitidas.length;i++) {
						if(teclasPermitidas[i] == key) {
							esTP = true;
							break;
						}
					}

					var permitido = true;
					if(!esTP) {
						var permitido = ((key >= 96 && key <= 105) || (key >= 48 && key <= 57)) && !(evt.altKey || evt.ctrlKey || evt.shiftKey);
						
						// Construye caracter a caracter el formato de las estructura
						if(permitido) {
							if(obj.value.length == 15)
								return false;
						}
					}				
						
					if(!permitido) {
						return false;
					}
	
				}
				
				obj.onfocus = function() {
					
					obj.value = obj.value.replace(/\-|\(|\)/g, "");
					obj.select();
					
					if(obj.triggerblur != undefined) {
						eval(obj.triggerfocus);
					}
				}
				
			} catch(e) {
				alert(e.message);
			}						
		}

		this.mayuscula = function (obj) {
			try {				
				obj.onkeyup = function() {
					obj.value = obj.value.toUpperCase();
				}				
			} catch(e) {
				alert(e.message);
			}						
		}
		
		this.horas = function (obj) {
			try {

				obj.onblur = function() {
					var militar = false;
					if(obj.militar == "true") {	
						militar = true;
					}
					if(!PT.validador.horas(obj, militar)) {
						obj.focus();
						if(PT.mensaje) PT.mensaje.flotante("Debe ingresar una hora válida.", obj.id);
						else alert("Debe ingresar una hora válida.");
					}
					if(obj.triggerblur != undefined)
						eval(obj.triggerblur);					
				}						
				
				obj.onkeydown = function(e) {
					
					var evt = getEvent(e);
					var key = evt.keyCode;
					
					var teclasPermitidas = teclasValidas(); 
								
					// Formateo de las horas
					if(key != 46 && key != 8) {
						switch(obj.value.length) {
							case 2: 
								obj.value += ":";
								break;
							case 5:
								if(obj.maxlength > 5)
									obj.value += ":";
								break;
						}
					}
													
					// Chequea la tecla presionada si es un caracter valido
					var esTP = false;
					
					for(var i=0;i<teclasPermitidas.length;i++) {
						if(teclasPermitidas[i] == key) {
							esTP = true;
							break;
						}
					}
						
					var permitido = true;
					if(!esTP) {
						var permitido = ((key >= 96 && key <= 105) || (key >= 48 && key <= 57)) && !(evt.altKey || evt.ctrlKey || evt.shiftKey);						
					}
					
					if(!permitido) {
						return false;
					}
	
				}
			} catch(e) {
				alert(e.message);
			}						
		}
		
	} // fin Mascara