function validateCompleteForm(objForm,strErrorClass){
return _validateInternal(objForm,strErrorClass,0);
};
function validateStandard(objForm,strErrorClass){
return _validateInternal(objForm,strErrorClass,1);
};
function _validateInternal(form,strErrorClass,nErrorThrowType){
var strErrorMessage="";var objFirstError=null;
if(nErrorThrowType==0){
strErrorMessage=(form.err)?form.err:_getLanguageText("err_form");
};
var fields=_GenerateFormFields(form);
for(var i=0;i<fields.length;++i){
var field=fields[i];
if(!field.IsValid(fields)){
field.SetClass(strErrorClass);
if(nErrorThrowType==1){
_throwError(field);
return false;
}else{
if(objFirstError==null){
objFirstError=field;
}
strErrorMessage=_handleError(field,strErrorMessage);
bError=true;
}
}else{
field.ResetClass();
}
};
if(objFirstError!=null){
alert(strErrorMessage);
objFirstError.element.focus();
return false;
};

	/* agregado por JMG 21/09/2006 para poner disabled los botones */
	if (document.getElementById("email02"))
	{
		if (comparacion('email1', 'email02', 'Email', 'Los E-Mails deben ser iguales', 'N') === true && comparacion('clave', 'clave02', 'Clave', 'Las Claves deben ser iguales', 'N') === true)
		{
		_DesabilitarBotones(form);
		return true;
		}
		return false;
	} 
	else
	{
		return true;
	}
};
function _getLanguageText(id){
objTextsInternal=new _jsVal_Language();
objTexts=null;
try{
objTexts=new jsVal_Language();
}catch(ignored){};
switch(id){
case "err_form":strResult=(!objTexts||!objTexts.err_form)?objTextsInternal.err_form:objTexts.err_form;break;
case "err_enter":strResult=(!objTexts||!objTexts.err_enter)?objTextsInternal.err_enter:objTexts.err_enter;break;
case "err_select":strResult=(!objTexts||!objTexts.err_select)?objTextsInternal.err_select:objTexts.err_select;break;
};
return strResult;
};
function _GenerateFormFields(form){
var arr=new Array();
for(var i=0;i<form.length;++i){
var element=form.elements[i];
var index=_getElementIndex(arr,element);
if(index==-1){
arr[arr.length]=new Field(element,form);
}else{
arr[index].Merge(element)
};
};
return arr;
};
function _getElementIndex(arr,element){
if(element.name){
var elementName=element.name.toLowerCase();
for(var i=0;i<arr.length;++i){
if(arr[i].element.name){
if(arr[i].element.name.toLowerCase()==elementName){
return i;
}
};
};
}
return -1;
};
function _jsVal_Language(){
this.err_form="Por favor ingrese/seleccione datos para los siguientes campos:\n\n";
this.err_select="Por favor seleccione un valor valido para \"%FIELDNAME%\"";
this.err_enter="Por favor ingrese un valor valido para \"%FIELDNAME%\"";
};
function Field(element,form){
this.type=element.type;
this.element=element;
this.exclude=element.exclude||element.getAttribute('exclude');
this.err=element.err||element.getAttribute('err');
this.required=_parseBoolean(element.required||element.getAttribute('required'));
this.realname=element.realname||element.getAttribute('realname');
this.elements=new Array();
switch(this.type){
case "textarea":
case "password":
case "text":
case "file":
this.value=element.value;
this.minLength=element.minlength||element.getAttribute('minlength');
this.maxLength=element.maxlength||element.getAttribute('maxlength');
this.regexp=this._getRegEx(element);
this.minValue=element.minvalue||element.getAttribute('minvalue');
this.maxValue=element.maxvalue||element.getAttribute('maxvalue');
this.equals=element.equals||element.getAttribute('equals');
this.callback=element.callback||element.getAttribute('callback');
break;
case "select-one":
case "select-multiple":
this.values=new Array();
for(var i=0;i<element.options.length;++i){
if(element.options[i].selected&&(!this.exclude||element.options[i].value!=this.exclude)){
this.values[this.values.length]=element.options[i].value;
}
}
this.min=element.min||element.getAttribute('min');
this.max=element.max||element.getAttribute('max');
this.equals=element.equals||element.getAttribute('equals');
break;
case "checkbox":
this.min=element.min||element.getAttribute('min');
this.max=element.max||element.getAttribute('max');
case "radio":
this.required=_parseBoolean(this.required||element.getAttribute('required'));
this.values=new Array();
if(element.checked){
this.values[0]=element.value;
}
this.elements[0]=element;
break;
};
};
Field.prototype.Merge=function(element){
var required=_parseBoolean(element.getAttribute('required'));
if(required){
this.required=true;
};
if(!this.err){
this.err=element.getAttribute('err');
};
if(!this.equals){
this.equals=element.getAttribute('equals');
};
if(!this.callback){
this.callback=element.getAttribute('callback');
};
if(!this.realname){
this.realname=element.getAttribute('realname');
};
if(!this.max){
this.max=element.getAttribute('max');
};
if(!this.min){
this.min=element.getAttribute('min');
};
if(!this.regexp){
this.regexp=this._getRegEx(element);
};
if(element.checked){
this.values[this.values.length]=element.value;
};
this.elements[this.elements.length]=element;
};
Field.prototype.IsValid=function(arrFields){
switch(this.type){
case "textarea":
case "password":
case "text":
case "file":
return this._ValidateText(arrFields);
case "select-one":
case "select-multiple":
case "radio":
case "checkbox":
return this._ValidateGroup(arrFields);
default:
return true;
};
};
Field.prototype.SetClass=function(newClassName){
if((newClassName)&&(newClassName!="")){
if((this.elements)&&(this.elements.length>0)){
for(var i=0;i<this.elements.length;++i){
if(this.elements[i].className!=newClassName){
this.elements[i].oldClassName=this.elements[i].className;
this.elements[i].className=newClassName;
}
}
}else{
if(this.element.className!=newClassName){
	if (document.getElementById(this.element.name+"_digito"))
		document.getElementById(this.element.name+"_digito").className=newClassName;		
this.element.className=newClassName;
}
};
}
};
Field.prototype.ResetClass=function(){
if((this.type!="button")&&(this.type!="submit")&&(this.type!="reset")){
if((this.elements)&&(this.elements.length>0)){
for(var i=0;i<this.elements.length;++i){
//if(this.elements[i].oldClassName){
this.elements[i].className=this.elements[i].oldClassName;
//}
//else{
//this.element.className="";
//}
}
}else{
if(this.elements.oldClassName){
this.element.className=this.element.oldClassName;
}
else{
this.element.className="";
}
};
};
};
Field.prototype._getRegEx=function(element){
regex=element.regexp||element.getAttribute('regexp')
if(regex==null)return null;
retype=typeof(regex);
if(retype.toUpperCase()=="FUNCTION")
return regex;
else if((retype.toUpperCase()=="STRING")&&!(regex=="JSVAL_RX_EMAIL")&&!(regex=="JSVAL_RX_TEL")
&&!(regex=="JSVAL_RX_PC")&&!(regex=="JSVAL_RX_ZIP")&&!(regex=="JSVAL_RX_MONEY")
&&!(regex=="JSVAL_RX_CREDITCARD")&&!(regex=="JSVAL_RX_POSTALZIP"))
{
nBegin=0;nEnd=0;
if(regex.charAt(0)=="/")nBegin=1;
if(regex.charAt(regex.length-1)=="/")nEnd=0;
return new RegExp(regex.slice(nBegin,nEnd));
}
else{
return regex;
};
};
Field.prototype._ValidateText=function(arrFields){
if((this.required)&&(this.callback)){
nCurId=this.element.id?this.element.id:"";
nCurName=this.element.name?this.element.name:"";
eval("bResult = "+this.callback+"('"+nCurId+"', '"+nCurName+"', '"+this.value+"');");
if(bResult==false){
return false;
};
}else{
if(this.required&&!this.value){
return false;
};
if(this.value&&(this.minLength&&this.value.length<this.minLength)){
return false;
};
if(this.value&&(this.maxLength&&this.value.length>this.maxLength)){
return false;
};
if(this.regexp){
if(!_checkRegExp(this.regexp,this.value))
{
if(!this.required&&this.value){
return false;
}
if(this.required){
return false;
}
}
else
{
return true;
};
};
if(this.equals){
for(var i=0;i<arrFields.length;++i){
var field=arrFields[i];
if((field.element.name==this.equals)||(field.element.id==this.equals)){
if(field.element.value!=this.value){
return false;
};
break;
};
};
};
if(this.required){
var fValue=parseFloat(this.value);
if((this.minValue||this.maxValue)&&isNaN(fValue)){
return false;
};
if((this.minValue)&&(fValue<this.minValue)){
return false;
};
if((this.maxValue)&&(fValue>this.maxValue)){
return false
};
};
}
return true;
};
Field.prototype._ValidateGroup=function(arrFields){
if(this.required&&this.values.length==0){
return false;
};
if(this.required&&this.min&&this.min>this.values.length){
return false;
};
if(this.required&&this.max&&this.max<this.values.length){
return false;
};
return true;
};
function _handleError(field,strErrorMessage){
var obj=field.element;
strNewMessage=strErrorMessage+((field.realname)?field.realname:((obj.id)?obj.id:obj.name))+"\n";
return strNewMessage;
};
function _throwError(field){
var obj=field.element;
switch(field.type){
case "text":
case "password":
case "textarea":
case "file":
alert(_getError(field,"err_enter"));
try{
obj.focus();
}
catch(ignore){}
break;
case "select-one":
case "select-multiple":
case "radio":
case "checkbox":
alert(_getError(field,"err_select"));
break;
};
};
function _getError(field,str){
var obj=field.element;
strErrorTemp=(field.err)?field.err:_getLanguageText(str);
idx=strErrorTemp.indexOf("\\n");
while(idx>-1){
strErrorTemp=strErrorTemp.replace("\\n","\n");
idx=strErrorTemp.indexOf("\\n");
};
return strErrorTemp.replace("%FIELDNAME%",(field.realname)?field.realname:((obj.id)?obj.id:obj.name));
};
function _parseBoolean(value){
return !(!value||value==0||value=="0"||value=="false");
};
function _checkRegExp(regx,value,element){
switch(regx){
case "JSVAL_RX_EMAIL":
return((/^[0-9_a-zA-ZüöäßÄÖÜ-]+([\.-]?[0-9_a-zA-ZüöäßÄÖÜ-]+)*@[0-9a-zA-ZüöäßÄÖÜ-]+([\.-]?[a-zA-ZüöäßÄÖÜ]+)*(\.\w{2,5})+$/).test(value));
case "JSVAL_RX_TEL":
return((/^1?[\-]?\(?\d{3}\)?[\-]?\d{3}[\-]?\d{4}$/).test(value));
case "JSVAL_RX_PC":
return((/^[a-z]\d[a-z]?\d[a-z]\d$/i).test(value));
case "JSVAL_RX_ZIP":
return((/^\d{5}$/).test(value));
case "JSVAL_RX_MONEY":
return((/^\d+([\.]\d\d)?$/).test(value));
case "JSVAL_RX_CREDITCARD":
return(!isNaN(value));
case "JSVAL_RX_POSTALZIP":
if(value.length==6||value.length==7)
return((/^[a-zA-Z]\d[a-zA-Z] ?\d[a-zA-Z]\d$/).test(value));
if(value.length==5||value.length==10)
return((/^\d{5}(\-\d{4})?$/).test(value));
break;
default:
return(regx.test(value));
};
};

/* agregado por JMG 21/09/2006 para poner disabled los botones */
function _DesabilitarBotones(form)
{
	for(var i=0;i<form.length;++i)
	{
		var element=form.elements[i];
		if (element.type == 'submit' || element.type == 'button' || element.type == 'reset' )
		{
			element.disabled=true;	
		}
	}
}
/* FIN JMG */


/* agregado por JMG 21/09/2006 para poner disabled los botones */
function _HabilitarBotones(form)
{
	for(var i=0;i<form.length;++i)
	{
		var element=form.elements[i];
		if (element.type == 'submit' || element.type == 'button' || element.type == 'reset' )
		{
			element.disabled=false;	
		}
	}
}
/* FIN JMG */

/* agregado por JMG 27/09/2006 para validar numeros */
function validaNumero(id,name,value)
{
	/* 
	PARA EL USO DE ESTA FUNCION SE REQUIERE QUE EXISTA
	EN EL FORMULARIO EL ATRIBUTO "ID".
	
	EJEMPLO:
	<input type='text' name='mi_campo' id='mi_campo' required='1' callback='validaNumero' realname='Campo Numero'>
	*/
	element = document.getElementById(id);
		
	var required =_parseBoolean(element.getAttribute('required'));
	if (required) {
		if (value == "")
		{
			return false;
		}
	}

	return((/^\d*$/).test(value));
	
}

/* FIN JMG */

/* agregado por JMG 07/11/2006 para validar numero con punto flotante */
function validaNumeroDecimal(id,name,value)
{
	/* 
	PARA EL USO DE ESTA FUNCION SE REQUIERE QUE EXISTA
	EN EL FORMULARIO EL ATRIBUTO "ID".
	
	EJEMPLO:
	<input type='text' name='mi_campo' id='mi_campo' required='1' callback='validaNumeroDecimal' realname='Campo Numero'>
	*/
	element = document.getElementById(id);
		
	var required =_parseBoolean(element.getAttribute('required'));
	if (required) {
		if (value == "")
		{
			return false;
		}
	}
	return ((/^((\d+(\.\d*)?)|((\d*\.)?\d+))$/).test(value));
	
}


/* FIN JMG

/* agregado por JMG 21/09/2006 para validar rut */
function validaRut(id, name, value,dv)
{

	/* 
	PARA EL USO DE ESTA FUNCION SE REQUIERE QUE EXISTAN 
	DOS CAMPOS EN EL FORMULARIO Y AMBOS TENGAN ADEMAS EL ATRIBUTO "ID", 
	ADICIONAL AL CAMPO NOMBRE. EL CAMPO DIGITO VERIFICADOR 
	SE DEBERIA LLAMAR IGUAL AL CAMPO INICIAL MAS _digito EN EL NOMBRE
	
	EJEMPLO:
	<input type='text' name='mi_campo' id='mi_campo' required='1' callback='validaRut' realname='Rut Cliente'>
	<input type='text' name='mi_campo_digito' id='mi_campo_digito'>
	
	*/
	
    //digito_rut = document.getElementById("digitoVerificador");
	digito_rut = dv;
    if (!digito_rut)
    {
    	alert("No se encuentra campo Digito Verificador");
    	return false;
    }
	    
    var rut_completo = value + "-" + digito_rut.value;
	if (validaRutConDigito(id,name,rut_completo) === false)
	{
		if (value == "" && digito_rut.value == "")
		{
			return true;
		}
		else
		{
			alert("RUT Inválido")
			$(id).className='error';
			$(dv.id).className='error';
		}
		return false;
	}
	else
	{
		$(id).className='';
		$(dv.id).className='';
		return true;
	}
}

function validaRutConDigito(id, name, value)
{

	/* 	
	EJEMPLO DE USO:
	<input type='text' name='mi_campo' required='1' callback='validaRutConDigito' realname='Rut Cliente'>
	
	*/

	var tmpstr = "";	
	for ( i=0; i < value.length ; i++ )		
		if ( value.charAt(i) != ' ' && value.charAt(i) != '.' && value.charAt(i) != '-' )
			tmpstr = tmpstr + value.charAt(i);	
	value = tmpstr;	
	largo = value.length;	

	/*if ( largo < 2 )	
	{		
		alert("Debe ingresar el rut completo")		
		return false;	
	}	*/

	for (i=0; i < largo ; i++ )	
	{			
		if ( value.charAt(i) !="0" && value.charAt(i) != "1" && value.charAt(i) !="2" && value.charAt(i) != "3" && value.charAt(i) != "4" && value.charAt(i) !="5" && value.charAt(i) != "6" && value.charAt(i) != "7" && value.charAt(i) !="8" && value.charAt(i) != "9" && value.charAt(i) !="k" && value.charAt(i) != "K" )
 		{			
			alert("El valor ingresado no corresponde a un R.U.T valido");			
			return false;		
		}	
	}	

	var invertido = "";	
	for ( i=(largo-1),j=0; i>=0; i--,j++ )		
		invertido = invertido + value.charAt(i);	
	var dvalue = "";	
	dvalue = dvalue + invertido.charAt(0);	
	dvalue = dvalue + '-';	
	cnt = 0;	

	for ( i=1,j=2; i<largo; i++,j++ )	
	{		
		//alert("i=[" + i + "] j=[" + j +"]" );		
		if ( cnt == 3 )		
		{			
			dvalue = dvalue + '.';			
			j++;			
			dvalue = dvalue + invertido.charAt(i);			
			cnt = 1;		
		}		
		else		
		{				
			dvalue = dvalue + invertido.charAt(i);			
			cnt++;		
		}	
	}	

	invertido = "";	
	for ( i=(dvalue.length-1),j=0; i>=0; i--,j++ )		
		invertido = invertido + dvalue.charAt(i);	

	if ( revisarDigito2(value) )
	{	
		return true;	
	}
	else
	{	
		return false;
	}
}

function revisarDigito( dvr )
{	
	dv = dvr + ""	
	if (dv == "")
	{
		return false;	
	}
	if ( dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4' && dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9' && dv != 'k'  && dv != 'K')	
	{		
		alert("Debe ingresar un digito verificador valido");		
		return false;	
	}	
	return true;
}

function revisarDigito2( crut )
{	
	largo = crut.length;	
	/*if ( largo < 2 )	
	{		
		alert("Debe ingresar el rut completo")		
		return false;	
	}	*/
	if ( largo > 2 )		
		rut = crut.substring(0, largo - 1);	
	else		
		rut = crut.charAt(0);	
	dv = crut.charAt(largo-1);	
	revisarDigito( dv );	

	if ( rut == null || dv == null )
		return 0	

	var dvr = '0'	
	suma = 0	
	mul  = 2	

	for (i= rut.length -1 ; i >= 0; i--)	
	{	
		suma = suma + rut.charAt(i) * mul		
		if (mul == 7)			
			mul = 2		
		else    			
			mul++	
	}	
	res = suma % 11	
	if (res==1)		
		dvr = 'k'	
	else if (res==0)		
		dvr = '0'	
	else	
	{		
		dvi = 11-res		
		dvr = dvi + ""	
	}
	if ( dvr != dv.toLowerCase() )	
	{		
		//alert("EL rut es incorrecto")		
		return false	
	}

	return true
}

/* FIN JMG*/

/* agregado por MLE 08/06/2007 para validar 2 campos iguales */
function comparacion(id1, id2, nombre, error, vacio)
/* validaRut(string,string,string,vacio,Y|N) */
{
    
    id1 = document.getElementById(id1).value;
    id2 = document.getElementById(id2).value;
    
	if (vacio == "N") {
		if (id1.length == 0 && id2.length == 0)
		{
			alert("Los campos para "+nombre+" no pueden ser vacíos");
			return false;
		}
	}
	    
	if (id1 != id2)
	{
		alert(error);
		return false;
	}
	
	
	return true;

}
