function esVacio(textField){
//Retorna true si en el textField no hay nada escrito o si solo hay blancos
//En caso de estar vacio da el mensaje de error que esta en el siguiente parametro(opcional)
/*
El tercer parametro (opcional) es un booleano que determina si se desea dar el foco en
el objeto en caso de estar vacio. Por defecto es true
*/
	mensajeError=arguments[1]
	darFoco=arguments[2]
	if(darFoco==null)
		darFoco=true
	str= textField.value.replace(/ /g,"");
	if (textField.value && str.length != 0)
		return false
	else{ //Es vacio
		if(mensajeError!=null){
			alert(mensajeError);
		}
		if(darFoco){textField.focus();}
		return true;
	}
}

function esMail(textField,mensajeError){
//Devuelve true si el texto tiene solo un @ y no está en los extremos
//Además controla que no tenga espacios en blanco
       cant = 0;
	   ok=true;
       for(i=0; i< textField.value.length && ok && cant<2; i++ ){
         palabra = textField.value.substring(i,i+1)        
         if (palabra == '@') 
			if(i==0 || i==textField.value.length-1)
			 //si el @ esta al principio o al final no es correcta
				ok=false
			 else
	            cant++;
		if(palabra == ' ') 
			ok=false
		// si tiene un espacio en blanco no es una direccion correcta
	   }
       if (cant!=1 || !ok){
         alert(mensajeError);
		 textField.focus(); 
         return false;
       }else
         return true;
}

function validarRangoEntero(textField) {
//Parametros opcionales en el siguiente orden:
//lowdata -> valor minimo aceptado
//highdata -> valor maximo aceptado
//errorMsg -> mensaje de error para el alert - si no se manda este parametro entonces no se da mensaje
//defaultValue -> es el valor que se le quiere setear si hubo error
//setFoco -> indica si el foco debe volver a setearse al textField en caso de error (es true por defecto)
	ok= false
	if ((textField.value.indexOf(".") != -1) 
		|| (textField.value.indexOf(" ") != -1) 
		|| (textField.value==""))
		ok=true;

	lowdata= arguments[1]
	highdata= arguments[2]
	errorMsg= arguments[3]
	defaultValue= arguments[4]
	setFoco= arguments[5]
	if (isNaN(textField.value)|| esVacio(textField)){ok= true;}
	else{
		if (highdata != null){ok= (textField.value >  highdata)}
		if (lowdata != null && !ok){ok= (textField.value <  lowdata)}
		}
	if (ok){
		if (errorMsg != null){alert(errorMsg);}
		if (defaultValue != null){textField.value=defaultValue}
		else {textField.value=""}
		if (setFoco==null || setFoco){textField.focus();}
		return false;
		}
	return true;
}


function validarRangoReal(textField) {
//Verifica si value es un número real y está en el intervalo [lowdata,highdata]
//La notación debe ser con coma. Ej: 34,1
//Parametros opcionales en el siguiente orden:
//lowdata -> valor minimo aceptado
//highdata -> valor maximo aceptado
//errorMsg -> mensaje de error para el alert - si no se manda este parametro entonces no se da mensaje
//defaultValue -> es el valor que se le quiere setear si hubo error
//setFoco -> indica si el foco debe volver a setearse al textField en caso de error (es true por defecto)
//cantDecimales -> si no es nulo luego de hacer todas las validaciones, trunca el numero para que tenga cantDecimales como maximo
lowdata= arguments[1]
highdata= arguments[2]
errorMsg= arguments[3]
defaultValue= arguments[4]
setFoco= arguments[5]
cantDecimales= arguments[6]

	ok=false //se pone en true si hay error
	valor= textField.value
	if (textField.value.indexOf(".") != -1 || (textField.value.indexOf(" ") != -1)||(textField.value=="")) {ok=true;} //hubo error
	//reemplaza las comas por puntos para poder usar isNaN
	valor= valor.replace(/,/,".");
	if (isNaN(valor)) {ok= true}
	else{
		if (highdata != null){ok= (valor > highdata)}
		if (lowdata != null && !ok){ok= (valor < lowdata)}
		}
	if (ok){
		if (errorMsg != null){alert(errorMsg);}
		if (defaultValue != null){textField.value=defaultValue}
		else {textField.value=""}
		if (setFoco==null || setFoco){textField.focus();}
		return false;
		}

	if(cantDecimales!=null){

	/*Dejo solo cantDecimales caracteres decimales*/
		posComa = textField.value.indexOf(",")
		if (posComa != -1){
			textField.value = textField.value.substring(0,posComa + cantDecimales + 1);
		}
	}

	textField.value= textField.value.replace(/\./,",");
	return true;
}

function validarStringDeCaracteres(textField,minSize,maxSize,errorMsg){
//Verifica si value es un cadana solo de letras y blancos
//Si solo se introducen blancos falla
//minSize y maxSize determinan la mínima y máxima cantidad de caracteres que debe tener value
	ok= false;
	if ((textField.value.length > maxSize) || (textField.value.length < minSize)) ok= true;
	str= textField.value.replace(/ /g,"");
	if (str.length == 0) ok= true;
	for (i=0; i<textField.value.length && !ok; i++){
		code=  textField.value.charCodeAt(i);
		if( ((code < 65) || (code > 90)) && //A..Z
		    ((code < 97) || (code > 122)) && //a..z
			(code != 241) && //ñ
			(code != 209) && //Ñ
			(code != 225) && //á
			(code != 233) && //é
			(code != 237) && //í
			(code != 243) && //ó
			(code != 250) && //ú
			(code != 193) && //Á
			(code != 201) && //É
			(code != 205) && //Í
			(code != 211) && //Ó
			(code != 218) && //Ú
			(code != 32)	 //Espacio en blanco
		  )ok= true;
	}
	if (ok){
		alert(errorMsg);
		textField.value=""; 
		textField.focus(); 
		return false;
	}
	return true;
}

function validarStringDeDescripcion(textField,minSize,maxSize,errorMsg){
	ok= false;
	if ((textField.value.length > maxSize) || (textField.value.length < minSize)) ok= true;
	if (ok){
		alert(errorMsg);
		textField.focus();
		return false;
	}
	return true;
}

function validarNombreDeUsuario(textField){
//Verifica si el texto ingresado es un nombre de usuario valido
//El nombre de usuario es una palabra que tiene entre 4 y 15 caracteres que pueden ser
//mayusculas, minusculas o numeros.
//Ademas el primer caracter no puede ser un numero.
/*
Parametros opcionales
	mensajeNombreUsuarioNoValido: mensaje a mostrar si el nombre de usuario no es valido
*/
	mensajeNombreUsuarioNoValido = arguments[1]
	if(mensajeNombreUsuarioNoValido == null) /*Por defecto en español*/
		mensajeNombreUsuarioNoValido = 'El nombre de usuario debe tener entre 4 y 15 caracteres. \nSolo acepta letras y numeros. \nNo pudiendo empezar con un número.'

	ok= false;
	if ((textField.value.length > 15) || (textField.value.length < 4)) ok= true;
	if (textField.value.length > 0)
	{	code=  textField.value.charCodeAt(0);
		if( ((code < 65) || (code > 90)) && //A..Z
			((code < 97) || (code > 122)) //a..z
			)ok= true;
	}
	for (i=0; i<textField.value.length && !ok; i++){
		code=  textField.value.charCodeAt(i);
		if( ((code < 65) || (code > 90)) && //A..Z
		    ((code < 97) || (code > 122)) && //a..z
			((code < 48) || (code > 57)) //0..9
		  )ok= true;
	}
	if (ok){
		alert(mensajeNombreUsuarioNoValido);
		textField.value=""; 
		textField.focus();
		return false;
	}
	return true;
}

function igual(textField1,textField2,minSize,maxSize,errorMsg){
//Retorna true si los dos textos son iguales y tienen una longitud entre minSize y maxSize
	if ((textField1.value.length > maxSize) || (textField1.value.length < minSize)){
		alert(errorMsg);
		textField1.focus();
		textField1.value="";
		textField2.value="";
		return false;
	}
	ok= (textField1.value.match(textField2.value) && textField2.value.match(textField1.value));
	if (ok) return true;
	else {alert(errorMsg);
		  textField1.focus();
  		  textField1.value="";		  
		  textField2.value="";
		  return false;}
	}

function posicionEnLista(lista,value){
/*retorna la posicion de la lista del elemento que tiene value texto. 
En caso de no encontrarlo retorna 0*/
	for(i=0;i<lista.length;i++)
		if(lista.options[i].value==value)
			return i;
	return 0;
}

function seleccionarOpcionEnLista(lista,textoValue){
/*Selecciona el elemento que tiene value "textoValue" de la lista recibida como parametro*/
	pos=posicionEnLista(lista,textoValue);
	lista.selectedIndex=pos;
}

function seleccionarOpcionEnListaSINO(lista,bool){
/*
"textoValue" representa un valor booleano ("True", "False")
lista es una lista de seleccion con los valores SI - No 
Dependiendo del valor bool selecciona la opcion correcta
*/
	if(bool=="False")
		seleccionarOpcionEnLista(lista,0)
	else
		seleccionarOpcionEnLista(lista,1)
}


function seleccionarOpcionEnRadio(radio,valorOpcion){
/*Selecciona la opcion con valor "valorOpcion" del radio recibido como parametro*/
	for(i=0;i<radio.length;i++)
		if(radio[i].value==valorOpcion){
			radio[i].click()
			break
	}
}

function confirmar(form,mensaje){
/*Muestra una ventana de confirmacion con el texto mensaje y si presionan aceptar hace el submit del form*/
if (window.confirm(mensaje)) {form.submit()}
}

function TrackCount(fieldObj,countField,maxChars)
/*Esta funcion se usa para controlar que un TextArea no supere el valor maxChars*/
{
  var diff = maxChars - fieldObj.value.length;
  if (diff < 0)
  {
    fieldObj.value = fieldObj.value.substring(0,maxChars);
    diff = maxChars - fieldObj.value.length;
	alert('El número máximo de caracteres permitidos es '+maxChars)
  }
  countField.value = diff;
}

function LimitText(fieldObj,maxChars)
/*Esta funcion se usa para controlar que un TextArea no supere el valor maxChars*/
{
  var result = true;
  if (fieldObj.value.length >= maxChars)
    result = false;
  if (window.event)
    window.event.returnValue = result;
  return result;
}

function posicionEnListaPorText(lista,t){
/*retorna la posicion de la lista del elemento que tiene texto t. 
En caso de no encontrarlo retorna 0*/
	for(i=0;i<lista.length;i++){
		if(lista.options[i].text==t)
			return i;
	}
	return 0;
}

function seleccionarOpcionEnListaPorText(lista,texto){
/*Selecciona el elemento que tiene texto "texto" de la lista recibida como parametro*/
	pos=posicionEnListaPorText(lista,texto);
	lista.selectedIndex=pos;
}
