function validateForm( oForm )
{
	var validForm = true;
	var oObjeto;
	
	if( typeof(document.getElementById('panelMensajes')) != 'undefined' && document.getElementById('panelMensajes') != null)
		document.getElementById('panelMensajes').innerHTML = '';
		
	for ( var nElemento = 0; nElemento < oForm.length; nElemento++ )
	{
		var validObj = validate(oForm[nElemento]);
		validForm = validForm && validObj;
	}
	if(!validForm)
	{
		if( typeof(document.getElementById('panelMensajes')) != 'undefined' && document.getElementById('panelMensajes') != null)
			document.getElementById('panelMensajes').innerHTML += ' ' + VALIDATION_GENERAL;
	}
	
	return validForm;
}

function validate(obj)
{
	var mensaje = '';
	var valid = true;
	// no podria usar el getElementsByTagName ??
	if ( obj.tagName == "select" || (obj.type != "checkbox" && obj.type != "hidden" && obj.disabled == false && obj.tagName.toLowerCase() != "fieldset") )
	{
		if(obj.tagName.toLowerCase() == "select")
		{
			// o no es obligatorio o tiene algo seleccionado
			valid = ( !isRequired(obj) || (obj.value != '' && obj.value != '0') );
		}
		else
		{
			var datatype = obj.getAttribute('datatype');
			if(isRequired(obj) && obj.value.length == 0)
			{
				valid = false;
				//mensaje = ' No ha completado todos los campos requeridos.';
			}
			else if(obj.value.length > 0)
			{
				switch( datatype )
				{
					case 'int':
						valid = validateInt(obj);
						mensaje = VALIDATION_NUMBER;
						break;
					case 'float':
						valid = validateFloat(obj);
						mensaje = VALIDATION_NUMBER;
						break;
					case 'text':
						valid = validateText(obj);
						mensaje = VALIDATION_TEXT;
						break;
					case 'date':
						valid = validateDate(obj);
						mensaje = VALIDATION_DATE;
						break;
					case 'datetime':
						valid = validateDateTime(obj);
						mensaje = VALIDATION_DATETIME;
						break;
					case 'time':
						valid = validateTime(obj);
						mensaje = VALIDATION_TIME;
						break;
					case 'cuit':
						valid = validateCuit(obj);
						mensaje = VALIDATION_CUIT;
						break;
					case 'document':
						valid = validateDocument(obj);
						mensaje = VALIDATION_TEXT;
						break;
					case 'password':
						valid = validatePassword(obj);
						mensaje = VALIDATION_PASSWORD;
						break;
					case 'passwordconfirmation':
						// solo valida que sea igual a la reingresada
						valid = validatePasswordConfirmation(obj);
						mensaje = VALIDATION_PASSWORD_CONFIRMATION;
						break;
				}
			}
		}
		if(!valid)
		{
			if(obj.tagName.toLowerCase() == "select")
			{
				obj.style.backgroundColor = "red";
			}
			else
			{
				obj.style.borderColor = "red";
			}
			
			if( typeof(document.getElementById('panelMensajes')) != 'undefined' && document.getElementById('panelMensajes') != null )
				document.getElementById('panelMensajes').innerHTML += ' ' + mensaje;
			//var messageElement = 'divMessage' + obj.name;
			//document.getElementById(messageElement).innerHTML = '*';
		} 
		else
		{
			/*
			var messageElement = 'divMessage' + obj.name;
			if(document.getElementById(messageElement) != null)
				document.getElementById(messageElement).innerHTML = '';
			*/
			//obj.style.backgroundColor = "";
			obj.style.borderColor = "";
		}
		
	}
	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 validateDocument(obj)
{
	var doc = obj.value.replace(/\./g,'');
	
	doc = parseInt(doc);
	
	if(isNaN(doc) || doc == 0)
		return false;

	if(doc.toString().length < 7)
		return false;
	
	obj.value = doc;
	
	return true;
}

function validateDate(obj)
{
	arr = obj.value.split('/');
	if (arr.length != 3)
		return false
	else
		return (parseInt(arr[0]) <= 31 && parseInt(arr[1]) <= 12 && parseInt(arr[2]) > 1800 && parseInt(arr[2]) < 4000);
}

function validateDateTime(obj)
{
	// ASI NO ANDA, SEPARAR el validate del obj !!!!!
	//arr = obj.value.split(' ');
	//return validateDate(arr[0]) && validateTime(arr[1]);
	return true;
}

function validateTime(obj)
{
	if(obj.value.indexOf(':') == -1)
	{
		return false;
	}
	else
	{
		arr = obj.value.split(':');

		if(arr.length < 2 || arr.length > 3)
		{
			return false;
		}
		
		if( isNaN(parseInt(arr[0])) || isNaN(parseInt(arr[1])))
		{
			return false;
		}
		
		if(parseInt(arr[0]) > 24)
		{
			return false;
		}
			
		if(parseInt(arr[1]) > 59)
		{
			return false;
		}

		if(arr.length == 3)
		{
			if(parseInt(arr[2]) > 59)
			{
				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 ;
}