function validateForm( oForm )
{
	var validForm = true;
	var oObjeto;
	for ( var nElemento = 0; nElemento < oForm.length; nElemento++ )
	{
		var validObj = validate(oForm[nElemento]);
		validForm = validForm && validObj;
	}
	return validForm;
}

function validate(obj)
{
	var valid = true;
	if ( obj.tagName == "select" || (obj.type != "checkbox" && obj.type != "hidden" && obj.disabled == false) )
	{
		if(obj.tagName.toLowerCase() == "select")
		{
			// o no es obligatorio o tiene algo seleccionado
			valid = ( !isRequired(obj) || (obj.value != '' && parseInt(obj.value)>0) );
		}
		else
		{
			var datatype = obj.getAttribute('datatype');
			if(isRequired(obj) && obj.value.length == 0)
			{
				valid = false;
			}
			else if(obj.value.length > 0)
			{
				switch( datatype )
				{
					case 'int':
						valid = validateInt(obj);
						break;
					case 'float':
						valid = validateFloat(obj);
						break;
					case 'text':
						valid = validateText(obj);
						break;
					case 'cuit':
						valid = validateCuit(obj);
						break;
					case 'password':
						valid = validatePassword(obj);
						break;
					case 'passwordconfirmation':
						// solo valida que sea igual a la reingresada
						valid = validatePasswordConfirmation(obj);
						break;
				}
			}
		}
		if(!valid)
		{
			var messageElement = 'divMessage' + obj.name;
			document.getElementById(messageElement).innerHTML = '*';
		} 
		else
		{
			var messageElement = 'divMessage' + obj.name;
			if(document.getElementById(messageElement) != null)
				document.getElementById(messageElement).innerHTML = '';
		}
		
	}
	return valid;
}

function validateInt(obj)
{
	var regex = new RegExp("/[a-z]/","i");
	if ( regex.test(obj.value) )
		return false;
	
	var value = parseInt(obj.value);
	if(isNaN(value))
		return false;

	if(obj.getAttribute('minValue') != '' && !isNaN(parseInt(obj.getAttribute('minValue'))) )
	{
		var minValue = parseInt(obj.getAttribute('minValue'));
		nPosMenos = obj.value.indexOf("-");
		if (minValue >= 0 && nPosMenos != -1 )
			return false;
		if(obj.value < minValue)
			return false;
	}
			
	if(obj.getAttribute('maxValue') != '' && !isNaN(parseInt(obj.getAttribute('maxValue'))) )
	{
		var maxValue = parseInt(obj.getAttribute('maxValue'));
		if(obj.value > maxValue)
			return false;
	}
	return true;
}

function validateFloat()
{
	var regex = new RegExp("/[a-z]/","i");
	if ( regex.test(obj.value) )
		return false;
	
	var value = parseFloat(obj.value.replace(/,/g,'.'));
	if(isNaN(value))
		return false;
	
	if(obj.getAttribute('minValue') != '' && !isNaN(parseInt(obj.getAttribute('minValue'))) )
	{
		var minValue = parseFloat(obj.getAttribute('minValue').replace(/,/g,'.'));
		nPosMenos = obj.value.indexOf("-");
		if (minValue >= 0 && nPosMenos != -1 )
			return false;
		if(obj.value < minValue)
			return false;
	}
			
	if(obj.getAttribute('maxValue') != '' && !isNaN(parseInt(obj.getAttribute('maxValue'))) )
	{
		var maxValue = parseFloat(obj.getAttribute('maxValue').replace(/,/g,'.'));
		if(obj.value > maxValue)
			return false;
	}
	if(obj.getAttribute('pattern') != '')
	{
		var regex = new RegExp(obj.getAttribute('pattern'))
		if(regex.test(obj.value.replace(/,/g,'.')))
			return false;
	}
	return true;
}

function validateText(obj)
{
	if(obj.getAttribute('pattern') != '')
	{
		var regex = new RegExp(obj.getAttribute('pattern'),"gi")
		if(!regex.test(obj.value.replace(/,/g,'.')))
			return false;
	}
	return true;
}

function validatePassword(obj)
{
	if(obj.getAttribute('pattern') != '')
	{
		var regex = new RegExp(obj.getAttribute('pattern'),"gi")
		if(!regex.test(obj.value.replace(/,/g,'.')))
			return false;
	}

	if(obj.getAttribute('minLength') != '')
		return (parseInt(obj.getAttribute('minLength')) <= obj.value.length);
		
	return true;
}

function validatePasswordConfirmation(obj)
{
	var name = obj.name.replace(/confirmar/,'');
	return (obj.value == document.getElementById(name).value);
}

function validateCuit(obj)
{
	return validarCuit(obj.value);
}

function validarCuit(cuit)
{
	// saco los guiones si estan
	cuit = cuit.replace(/\-/,'');
	cuit = cuit.replace(/\-/,'');
	cPrefijo = cuit.substr(0,2);
	cDigito = cuit.slice(2,cuit.length-1);
	cSufijo = cuit.substr(cuit.length-1,1);

	cCuit = cPrefijo + cDigito + cSufijo;

	var valid = true;

	switch ( parseInt(cPrefijo) ) {
		case 30:
		case 33:
		case 34: // Verifica los Digitos en caso de ser una Persona Juridica
			nSumaDigitos = 0;	
			nDigito = parseInt(	cDigito );
			if ( cCuit.length == 11) {
				if ( nDigito > 99900000 ||  cDigito.substr(0,1) == '5' || cDigito.substr(0,1) =='6' || cDigito.substr(0,1) =='7') {
			
			    	for (nContador = 0; nContador < 8; nContador++ ) {
			    	    cDigitoCuit  = cCuit.substr(nContador+2,1);
			    	    cDigitoVerificador  = "71397131".substr(nContador,1);
			    	    nCalculoVerificador   = parseInt(cDigitoCuit) * parseInt(cDigitoVerificador);    	    
			    	    nSumaDigitos += nCalculoVerificador;		    	    
			    	}
			    	
					if ( (nSumaDigitos % 10) != 0 ) 
					{
						valid == false; // "Los dígitos no parecen ser válidos !"
					}
				} 				
			}

		case 20:
		case 23:
		case 24:
		case 27:		
			nSumaDigitos = 0;
			if (valid)
			{		
				if ( cCuit.length == 11) {
			    	for (nContador = 0; nContador < 11; nContador++ ) {
			    	    cDigitoCuit  = cCuit.substr(nContador,1);
			    	    cDigitoVerificador  = "54327654321".substr(nContador,1);
			    	    nCalculoVerificador   = parseInt(cDigitoCuit) * parseInt(cDigitoVerificador);    	    
			    	    nSumaDigitos += nCalculoVerificador;
			    	}
			    	
					if ( (nSumaDigitos % 11) != 0 )
					{
						valid = false; // "El Cuit es Invalido ( " + getDigitoVerificador(cCuit) + " )";
					}
				} 
				else 
				{
			    	valid = false;	// "La cantidad total de dígitos del Cuit debe 11"
				}
			}
			break;			
		default:
			valid = false; // "Los prefijos validos son 20, 23, 24, 27, 30, 33 y 34 "
			break;
	}
	return valid;
}

function getDigitoVerificador( cCuit )
{	
	nContador    = 1;
	nSumaDigitos = 0;
	if ( cCuit.length == 11) {
    	while (nContador  < 11) {
    	    nCalculoVerificador   = 0;
    	    cDigitoCuit  = cCuit.substr(nContador-1,1);
    	    cDigitoVerificador  = "5432765432".substr(nContador-1,1);
    	    nCalculoVerificador   = parseInt(cDigitoCuit) * parseInt(cDigitoVerificador);
    	    nSumaDigitos += nCalculoVerificador;
    	    nContador++;
    	}
    	nResto = (nSumaDigitos % 11) ;
    	if ( nResto == 0 )
    		return 0;
    		
    	if ( nResto == 1 ) 
    		return '?';
    		
    	return 11 - nResto;
	} else
		return -1;	
}

function isRequired(obj)
{
	if(obj.getAttribute('required') == null)
		return false;
	else
		return (obj.getAttribute('required') == '1' || obj.getAttribute('required').toLowerCase() == 'true');
}

function isExplorer() {
	return (navigator.appName == 'Microsoft Internet Explorer') ? true: false ;
}
