function changeKey (textControl, evt, keyChecker) {
	var keyCode = evt.keyCode ? evt.keyCode :
        evt.charCode ? evt.charCode :
		evt.which ? evt.which : void 0;
  	var key;
  	if (keyCode) {
    	key = String.fromCharCode(keyCode);
  	}
  	if( textControl.value.toString().indexOf('-') >= 0 && textControl.value.toString().indexOf('.') >= 0 && keyChecker == cancelDigits) {
		keyChecker = cancelDigits3;
	} else if( textControl.value.toString().indexOf('.') >= 0 && keyChecker == cancelDigits) {
  		keyChecker = cancelDigits4;
  	} else if( textControl.value.toString().indexOf('-') >= 0 && keyChecker == cancelDigits) {
  		keyChecker = cancelDigits5;
  	}
  	var keyCheck = keyChecker(keyCode, key);
  	if (keyCode && window.event && !window.opera) {
    	if (keyCheck.cancelKey) {
    		return false;
    	} else if (keyCheck.replaceKey) {
    		window.event.keyCode = keyCheck.newKeyCode;
    		if (window.event.preventDefault) {
      			window.event.preventDefault();
    		}
    		return true;
    	} else {
    		return true;
    	}
  	} else if (typeof textControl.setSelectionRange != 'undefined') {
  	if (keyCheck.cancelKey) {
   		if (evt.preventDefault) {
      		evt.preventDefault();
   		}
   		return false;
  	} else if (keyCheck.replaceKey) {
   		if (evt.preventDefault) {
  			evt.preventDefault();
   		}
   		var oldSelectionStart = textControl.selectionStart;
   		var oldSelectionEnd = textControl.selectionEnd;
   		var selectedText = textControl.value.substring(oldSelectionStart,oldSelectionEnd);
   		var newText = typeof keyCheck.newKey != 'undefined' ?
		keyCheck.newKey : String.fromCharCode(keyCheck.newKeyCode);
     		textControl.value = 
       		textControl.value.substring(0, oldSelectionStart) +
       		newText +
       		textControl.value.substring(oldSelectionEnd);
   		textControl.setSelectionRange(oldSelectionStart + newText.length,
			oldSelectionStart + newText.length);
   		return false;
   		} else {
   			return true;
   		} 
	} else if (keyCheck.cancelKey) {
   		if (evt.preventDefault) {
   			evt.preventDefault();
   		}
   		return false;
  	} else {
   		return true;
  	}
}

function lettersToUpperCase (keyCode, key) {
  var newKey = key.toUpperCase();
  if (newKey != key) {
    return { replaceKey: true, newKeyCode: newKey.charCodeAt(), newKey:
newKey };
  }
  else {
    return { cancelKey: "'\"~".indexOf(key) != -1 };
  }
}

function cancelDigits (keyCode, key) {
  return { cancelKey: "'/\\\"¨´` €abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ*+¿?¡!|ªº=)(&%$·|#¬@~<>_^çÇ}{][àèìòù;:,".indexOf(key) != -1 };
}

// funsion que ve en el onBlur del campo numerico que incluye decimales
function numerico(Campo,decimales,Min,Max) {
	// Campo : es el objeto input de la forma
	// decimales : especifica el numero de decimales aceptable
	// Min : limite inferior 
	// Max : limite superior
	Campo.value = Campo.value.toString().replace(/\,/g,'');
	re = /\s/;
	Campo.value = Campo.value.replace(re, "0");
	if (Min == "-i")
		Min = -999999999999.99;
	if (Max == "i")
		Max = 999999999999.99;
	Min = parseFloat(Min);
	Max = parseFloat(Max);
	
	if(Campo.value == "")
		Campo.value = 0;
	
	if(isNaN(Campo.value) == true)
		Campo.value = 0;
	else {
		if(parseFloat(Campo.value) < Min || parseFloat(Campo.value) > Max) {
			temp = parseFloat(Campo.value);
			Campo.value = temp.toFixed(decimales);
			formatCurrency(Campo,decimales);
			window.alert('Fuera de rango.');
			Campo.focus();
		} else {
			temp = parseFloat(Campo.value);
			Campo.value = temp.toFixed(decimales);
			formatCurrency(Campo,decimales);
		}
	}
}
// funsion que ve en el onBlur del campo de solo texto
function texto(Campo,flag) {
	// Campo : es el objeto input de la forma
	re = /([^"]*)(["]+|[']+|[~]+)([^"]*)/;
	while(Campo.value.search(re) != -1) {
		Campo.value = Campo.value.replace(re, "$1$3");
	}
	Campo.value = Campo.value.toUpperCase();
	
	if(Campo.value == "") {
		if(flag) {
			Campo.focus();
			window.alert("Debe de ingresar un texto.");
			return false;
		}
	} else {
		if(isNaN(Campo.value) == true) { }
		else {
			Campo.value = "";
			Campo.focus();
			window.alert("Debe de ingresar un texto.");
			return false;
		}
	}

}
// funsion que va en el onKeyUp del campo numerico
function formatCurrency(Campo,decimales) {
	// Campo : es el objeto input de la forma
	// decimales : especifica el numero de decimales aceptable
	num = Campo.value;
	num = num.toString().replace(/\,/g,'');
	ult = num.substring(num.length-1,num.length);
	ult1 = num.substring(num.length-2,num.length-1);
	if (num == '-' || num == "0-") {
		Campo.value = '-';
		return false;
	}
	if(isNaN(num)) {
		alert(num + " No es un numero, intente de nuevo");
		Campo.value = 0;
		return false;
	}
	pos = num.search(/\./g);
	if (num.search(/\-/g) == 0)
		neg = 1;
	else
		neg = 0;
	cents = '0';
	if (pos > 0) {
		if (pos != num.length) {
			cents = num.substring(pos+1,num.length);
			if (cents.length > decimales) {
				cents = cents.substring(0,decimales);
			}
		}
	}
	if(neg)
		num = Math.ceil((num*100+0)/100).toString();
	else
		num = Math.floor((num*100+0)/100).toString();
	for (var i = 0; i < Math.floor(((num.length-neg)-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
	if (cents == '0') {
		if (ult == '.') {
			Campo.value = num + '.';
			return true;
		} else {
			if (ult1 == '.') {
				Campo.value = num + '.' + '0';
				return true;
			} else{
				Campo.value = num;
				return true;
			}
		}
	} else{
		Campo.value = num + '.' + cents;
		return true;
	}
}

// funsion que va en el onKeyUp del campo de fecha
function formatNum(Campo,decimales) {
	if( navigator.appName=="Netscape" ) {
		formatNum2(Campo,decimales);
	} else {
  		var keyCode = event.keyCode ? event.keyCode : 
		event.which ? event.which : event.charCode;
  		if ( keyCode == 13 || keyCode == 9 ) {
    		return false;
  		} else {
			formatNum2(Campo,decimales);
		}
	}
}

function formatNum2(Campo,decimales) {
		// Campo : es el objeto input de la forma
		// decimales : especifica el numero de decimales aceptable
		num = Campo.value;
		num = num.toString().replace(/\,/g,'');
		ult = num.substring(num.length-1,num.length);
		ult1 = num.substring(num.length-2,num.length-1);
		if (num == '-' || num == "0-") {
			Campo.value = '-';
			return false;
		}
		if(isNaN(num)) {
			alert(num + " No es un numero, intente de nuevo");
			Campo.value = 0;
			return false;
		}
		pos = num.search(/\./g);
		if (num.search(/\-/g) == 0)
			neg = 1;
		else
			neg = 0;
		cents = '0';
		if (pos > 0) {
			if (pos != num.length) {
				cents = num.substring(pos+1,num.length);
				if (cents.length > decimales) {
					cents = cents.substring(0,decimales);
				}
			}
		}
		if(neg)
			num = Math.ceil((num*100+0)/100).toString();
		else
			num = Math.floor((num*100+0)/100).toString();
		for (var i = 0; i < Math.floor(((num.length-neg)-(1+i))/3); i++)
			num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
		if (cents == '0') {
			if (ult == '.') {
				Campo.value = num + '.';
				return true;
			} else {
				if (ult1 == '.') {
					Campo.value = num + '.' + '0';
					return true;
				} else{
					Campo.value = num;
					return true;
				}
			}
		} else{
			Campo.value = num + '.' + cents;
			return true;
		}
}