function formatRut10Digits(rutDigits,checkDigit){
	var tmpStr;
	
	// Remove trailing and add zeros at begining
	tmpStr = Trim(rutDigits);
	newRut = getNChars(9 - tmpStr.length,"0") + tmpStr + checkDigit;
	return newRut;
}

function formatRut(rut){
	var rutDigits,checkDigit,rutValue,newRut;

	// Remove trailing spaces and check taht there really are 10 chars
	rutValue = Trim(rut)
	if (rutValue.length!=10){
		return "XXX.XXX.XXX-X";
	}
	rutDigits = rutValue.substr(0,rutValue.length-1);
	checkDigit = rutValue.substr(rutValue.length-1,1);
	
	// Build new rut with . and -
	newRut = rutDigits.substr(0,3)+".";
	newRut = newRut + rutDigits.substr(3,3)+".";
	newRut = newRut + rutDigits.substr(6,3);
	
	// Remove trailing 0 
	while (newRut.substr(0,1) == "0" || newRut.substr(0,1) == "."){
	   newRut = newRut.substr(1,newRut.length);
	}
	
	return newRut+"-"+checkDigit;
}

/***
*	function digito(rut)
*	Retorna el digito verificador que corresponde al RUT 
*/
function digito(rut) {
	var i,total,cnt,div, resto,c,digver;

	total = 0;
	cnt = 2;
	for (i = rut.length - 1; i >= 0; i--) {
		c = rut.charAt(i);
		if (c < "0" || "9" < c)
			return "";
		total += parseInt(c, 10) * cnt;
		cnt++;
		if (cnt == 8){
			cnt = 2;
		}
	}

	div = Math.round(total / 11 - 0.5);
	resto = total - div * 11;
	if ((11 - resto) == 10){
		digver = "K";
	}else if ((11 - resto) == 11){
		digver = "0";
	}else{
		digver = (11 - resto) + "";
	}
	return digver;
}

function doError(theField,doingSubmit,errorMessage){
	if (doingSubmit){
		alert(errorMessage)
		theField.value = "";
		theField.focus();
	}
	return false;
}

function allTrim(varStr)
{
	var posBeg = 0;
	var posEnd = 0;
	for ( var i = 0; i < varStr.length; i++)
	{
		if (varStr.substr(i,1) !=' '){
			posBeg = i
			i = varStr.length;
		}
	}
	for ( var j = (varStr.length-1); j > -1; j--)
	{
		if (varStr.substr(j,1) !=' '){
			posEnd= j
			j = -1;
		}
	}
	return varStr.substr(posBeg,posEnd+1);
	
}

function checkRut(theForm,rutFieldName,errorMessage,doingSubmit){
	var rutField,rutDigits,checkDigit,rutValue,minusChar;
	
	
	
	// Check if field exists
	rutField = theForm.elements[rutFieldName];

	if (typeof(rutField) == "undefined"){
		alert("Campo "+rutFieldName+" no existe en form");
		return false;
	}
	// Get digits separeted
	rutField.value = allTrim(rutField.value);
	rutValue = rutField.value;
	//if (rutValue.length <= 1)
		//return doError(rutField,doingSubmit,errorMessage);

	rutDigits = rutValue.substr(0,rutValue.length-1);
	rutDigits = removeChar(rutDigits,'.');
	checkDigit = rutValue.substr(rutValue.length-1,1).toUpperCase();  // Convertir a may?scula
	if (isEmpty(rutDigits) || isEmpty(checkDigit))
	{
		return true;
//		return doError(rutField,doingSubmit,errorMessage);
	}

	// Check for - chat at end
	minusChar = rutDigits.substr(rutDigits.length-1,1);
	if (minusChar == '-')
	{
		rutDigits = rutDigits.substr(0,rutDigits.length-1);
	}
	if (rutDigits.length > 9)
	{
		return doError(rutField,doingSubmit,errorMessage);
	}
	else if (!isInteger(rutDigits) && rutDigits.length > 0)
	{
		return doError(rutField,doingSubmit,errorMessage);
	}
	else if (checkDigit !=  digito(rutDigits) && rutDigits.length > 0)
	{
		return doError(rutField,doingSubmit,errorMessage);
	}
	rutField.value = formatRut(formatRut10Digits(rutDigits,checkDigit));
	return true;
}

function formato_rut(texto, activo) {
var invertido = "";
var dtexto = "";
var cnt = 0;
var i=0;
var j=0;
var largo = "";	
	if (activo) {
		  texto = formato_rut(texto, false)
		  largo = texto.length;
		  for ( i=(largo-1),j=0; i>=0; i--,j++ )
		    invertido = invertido + texto.charAt(i);		  
		  dtexto = dtexto + invertido.charAt(0);
		  dtexto = dtexto + '-';		  
		  for ( i=1,j=2; i<largo; i++,j++ )
		  {
		    //alert("i=[" + i + "] j=[" + j +"]" );
		    if ( cnt == 3 )
		    {
		      dtexto = dtexto + '.';
		      j++;
		      dtexto = dtexto + invertido.charAt(i);
		      cnt = 1;
		    }
		    else
		    { 
		      dtexto = dtexto + invertido.charAt(i);
		      cnt++;
		    }
		  }
		  invertido = "";
		  for ( i=(dtexto.length-1),j=0; i>=0; i--,j++ )
		    invertido = invertido + dtexto.charAt(i);
		  if (invertido == '-') invertido = ""
		  texto = invertido;
	} else {
		var tmpstr = "";
		for ( i=0; i < texto.length ; i++ )
		if ( texto.charAt(i) != ' ' && texto.charAt(i) != '.' && texto.charAt(i) != '-' )
			tmpstr = tmpstr + texto.charAt(i);
		texto = tmpstr;
	}
	return texto;
}


function setea_rut(theForm, rutFieldName, s, c,rutFieldShowName, fieldClaveName){
	
	var rutField, rutFieldShow,fieldClave;
	
	rutField = theForm.elements[rutFieldName];	
	if (typeof(rutField) == "undefined"){
		alert("Campo "+rutFieldName+" no existe en form");
		return false;
	}

	rutFieldShow = theForm.elements[rutFieldShowName];	
	if (typeof(rutFieldShow) == "undefined"){
		alert("Campo "+rutFieldShowName+" no existe en form");
		return false;
	}

	fieldClave = theForm.elements[fieldClaveName];	
	if (typeof(fieldClave) == "undefined"){
		alert("Campo "+fieldClaveName+" no existe en form");
		return false;
	}

	
	s = formato_rut(s, false);	
	var largo = 10 - s.length;
	var rut;
	
	if (s.length <=1 ) 
	{
	     doError(rutFieldShow,true,'Rut ingresado no es v?lido! Ingr?selo nuevamente');
	     return false;
	}
	
	if (c.length < 4 )
	{
	     doError(fieldClave,true,'La Clave que ingres? posee menos de 4 caracteres! Ingr?sela nuevamente');
	     return false;
	}
	
	for (i = 1; i <= largo; i++){
		rut = "0" + s;
		s = rut;
	}

	if ( (50000000 < parseFloat(s.substr(0,s.length-1))) && (parseFloat(s.substr(0,s.length-1)) < 99000000) )
	{
	     doError(rutFieldShow,true,'Rut ingresado no es v?lido! Ingr?selo nuevamente');
	     return false;
	}
	rutField.value = (s.length <=1 ?' ':s);
	return true;
}

function unFormatRut(rutFieldName)
{
	rutFieldName = removeChar(rutFieldName,'.');
	rutFieldName = removeChar(rutFieldName,'-');
	
	return rutFieldName	;
}

function LimpiarPasswd(theForm,rutFieldName,passwdFieldName)
{
	theForm.elements[passwdFieldName].value = "";
	theForm.elements[rutFieldName].focus();
}	

function checkClave(theForm,rutFieldName,errorMessage)
{
	var rutField,rutDigits,checkDigit,rutValue,minusChar;
	
	// Check if field exists
	rutField = theForm.elements[rutFieldName];
	if (typeof(rutField) == "undefined"){
		alert("Campo "+rutFieldName+" no existe en form");
		return false;
	}
	
	// Get digits separeted
	if (theForm.elements[rutFieldName].value.length < 4)
	{
		alert(errorMessage);
		theForm.elements[rutFieldName].focus();
		return false;
	}
}

/*
function dformato(rut) {
	
	document.rutForm.RUT.value = formato_rut(rut, false);
	setea_rut(document.rutForm.RUT.value);
	
	

}
*/
