/************************************************************
 *      Biblioteca de Funciones de Manejo de String con     *
 *      parámetro principal como Objeto, Versión 1.2        *
 *      Autor:           Hernán Mallea Soto                 *
 *      Versión 1.2:  27 - Sep - 2005                       *
 *      - Se incorpora función de validación de formato de  *
 *        correo electrónico.                               *
 *      Versión 1.1:     14 - Feb - 2001                    *
 *      Versión 1.0:     24 - Nov - 1999                    *
 ************************************************************/

/*	Elimina los blancos a la izquierda de un string.
	Devuelve un Objeto	*/
function ltrim(Obj) {
//	Obj:	objeto que contiene string a eliminar blancos de la izquierda

	strValor = Obj.value;
	n = i = 0;
	while (i < strValor.length) {
		if (strValor.charAt(i) != ' ') {
			n = i;
			break;
		}
		i++;
	}
	if (n == 0 && i == strValor.length)
		Obj.value = ''
	else
		Obj.value = strValor.substring(n, strValor.length);
	return Obj;
}

/*	Elimina los blancos a la derecha de un string.
	Devuelve un Objeto	*/
function rtrim(Obj) {
//	Obj:	objeto que contiene string a eliminar blancos de la derecha

	strValor = Obj.value;
	n = i = strValor.length;
	while (i > 0) {
		if (strValor.charAt(i - 1) != ' ') {
			n = i;
			break;
		}
		i--;
	}
	if (n == strValor.length && i == 0)
		Obj.value = ''
	else
		Obj.value = strValor.substring(0, n);
	return Obj;
}

/*	Elimina los blancos de los extremos de un string.
	Devuelve un Objeto	*/
function trim(Obj) {
//	Obj:	objeto que contiene string a eliminar blancos de los extremos

	return rtrim(ltrim(Obj));
}

/*	Elimina los blancos de los extremos y blancos repetidos al interior de un string,
	dejando sólo uno.
	Devuelve un Objeto	*/
function itrim(Obj) {
//	Obj:	objeto que contiene string a eliminar blancos al interior, dejando uno
	var strTrim = '';

	Obj = trim(Obj);
	strValor = Obj.value;
	i = 0;
	while ((n = strValor.indexOf(' ', i)) >= 0) {
		strTrim += strValor.substring(i, n + 1);
		i = n + 1;
		while (strValor.charAt(i) == ' ')
			i++;
	}
	strTrim += strValor.substring(i, strValor.length);
	Obj.value = strTrim;
	return Obj;
}

/*	Verifica blancos al interior de un string.
	Devuelve un Booleano	*/
function hasSpaces(Obj) {
//	Obj:	objeto que contiene string para determinar si tiene
//				blancos en su interior

	strValor = Obj.value;
	n = i = 0;
	while (i < strValor.length) {
		if (strValor.charAt(i) == ' ') {
			return true;
		}
		i++;
	}
	return false;
}


/*	Invierte el orden de los caracteres de un string.
	Devuelve un Objeto	*/
function strReverse(Obj) {
//	Obj:	objeto que contiene string a invertir

	var strRever = '';
	
	strValor = Obj.value;
	for (var i = strValor.length - 1; i >= 0; i--)
		strRever += strValor.charAt(i);
	return strRever;
}

/*	Convierte los caracteres de un string a mayúsculas.
	Devuelve un Objeto	*/
function ucase(Obj){
//	Obj:	objeto que contiene string a convertir caracteres a mayúsculas

	Obj = trim(Obj);
	if (Obj.value != '')
		Obj.value = Obj.value.toUpperCase();
	return Obj;
}

/*	Convierte los caracteres de un string a minúsculas.
	Devuelve un Objeto	*/
function lcase(Obj){
//	Obj:	objeto que contiene string a convertir caracteres a minúsculas

	Obj = trim(Obj);
	if (Obj.value != ''){
		Obj.value = Obj.value.toLowerCase();
	}
	return Obj;
}

/*	Convierte el primer caracter de un string a mayúsculas.
	Devuelve un Objeto	*/
function pcase(Obj) {
//	Obj:	objeto que contiene string con primer caracter en mayúsculas

	Obj = itrim(Obj);
	strValor = Obj.value;
	Obj.value = strValor.charAt(0).toUpperCase() + strValor.substring(1, strValor.length).toLowerCase();
	return Obj;
}

/*	Convierte el primer caracter de cada palabra de un string a mayúsculas.
	Devuelve un Objeto	*/
function initcap(Obj) {
//	Obj:	objeto que contiene string con primer caracter de cada palabra en mayúsculas
	var strTrim = '';

	Obj = trim(Obj);
	strValor = Obj.value;
	i = 0;
	while ((n = strValor.indexOf(' ', i)) >= 0) {
		strTrim += strValor.charAt(i).toUpperCase() + strValor.substring(i + 1, n + 1).toLowerCase();
		i = n + 1;
		while (strValor.charAt(i) == ' ')
			i++;
	}
	strTrim += strValor.charAt(i).toUpperCase() + strValor.substring(i + 1, strValor.length).toLowerCase();
	Obj.value = strTrim;
	return Obj;
}

/*	Verifica si los caracteres de un string son alfabéticos.
	Devuelve un Booleano	*/
function isAlpha(Obj) {
//	Obj:	objeto que contiene string a evaluar sí caracteres son alfabéticos
	var strValor = Obj.value.toLowerCase();

    	RefString = 'abcdefghijklmnñopqrstuvwxyz áéíóúü';
	for (i=0; i<=strValor.length; i++)
	    	if (RefString.indexOf(strValor.charAt(i), 0) == -1) {
    			return false;
			break;
		}
   	return true;
}

/*	Verifica si los caracteres de un string son números.
	Devuelve un Booleano	*/
function isNumber(Obj) {
//	Obj:	objeto que contiene string a evaluar sí caracteres son números
	var strValor = Obj.value;

    	RefString = '0123456789';
	for (i=0; i<=strValor.length; i++)
	    	if (RefString.indexOf(strValor.charAt(i), 0) == -1) {
    			return false;
			break;
		}
   	return true;
}

/*	Verifica si los caracteres de un string son alfanuméricos.
	Devuelve un Booleano	*/
function isAlphaNumber(Obj) {
//	Obj:	objeto que contiene string a evaluar sí caracteres son alfanuméricos
	var strValor = Obj.value.toLowerCase();

    	RefString = '0123456789abcdefghijklmnñopqrstuvwxyz áéíóúü';
	for (i=0; i<=strValor.length; i++)
	    	if (RefString.indexOf(strValor.charAt(i), 0) == -1) {
    			return false;
			break;
		}
   	return true;
}

/*	Verifica si string tiene la estructura de dirección de correo email.
	Devuelve un Booleano	*/
function emailCheck (Obj) {
//	Obj:	objeto que contiene string a evaluar sí es email
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray = Obj.value.match(emailPat);

	if (matchArray == null) {
		alert("Dirección Email está incorrecta. Por favor verifique @ y .");
		return false;
	}

	var user = matchArray[1];
	var domain = matchArray[2];

	if (user.match(userPat) == null) {
	    alert("Username no valido.");
	    return false;
	}

	var IPArray=domain.match(ipDomainPat);
	
	if (IPArray != null) {
		  for (var i = 1; i <= 4; i++) {
		    if (IPArray[i] > 255) {
		        alert("Dirección IP no Valida!");
				return false;
		    }
	    }
	    return true;
	}

	var domainArray = domain.match(domainPat);

	if (domainArray == null) {
		alert("El dominio indicado no existe.");
	    return false;
	}
	
	var atomPat = new RegExp(atom,"g");
	var domArr = domain.match(atomPat);
	var len = domArr.length;

	if (domArr[domArr.length-1].length < 2 || domArr[domArr.length-1].length > 3) {
		alert("La dirección debe finalizar con 3 letras del dominio o 2 letras del país.");
		return false;
	}
	if (len < 2) {
		alert("Dirección incorrecta");
		return false;
	}
	
	return true;
}