/*==============================================================================

PROYECTO  : aa6
NOMBRE    : /js/global.js
FECHA     : 07-JUL-06
AUTOR     : Ricardo Puerto <ricardo.puerto@aatranslations.com>
COPYRIGHT : Copyright (c) 2006 aatranslations

SUMARIO

Funciones JavaScript de uso general para ejecución en cliente.

==============================================================================*/


/*------------------------------------------------------------------------------
Recupera un documento XML.
'url' es la URL (relativa o completa) del archivo XML cuyo Content-Type es un
tipo XML válido (como por ejemplo, 'text/xml'). La URL debe estar en el mismo
dominio que el archivo HTML.
'fn' es la función a llamar cuando el archivo se haya recuperado (la operación
es asíncrona). A fn le es pasado un objeto req y un valor val. El objeto req
contiene en responseText los datos recuperados en formato texto y en
responseXML los datos recuperados en formato XML.
'val' es un valor a pasar a fn.
Refs: [1] http://developer.apple.com/internet/webcontent/xmlhttpreq.html
------------------------------------------------------------------------------*/

var req, reqfn, reqval;

function loadXMLDoc(url, fn, val){
	reqfn = fn;
	reqval = val;
	if(window.XMLHttpRequest){
		req = new XMLHttpRequest();
		req.onreadystatechange = _reqchange;
		req.open("GET", url, true);
		req.send(null);
	}else if(window.ActiveXObject){
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if(req){
			req.onreadystatechange = _reqchange;
			req.open("GET", url, true);
			req.send();
		}
	}
}

function _reqchange(){
	if(req.readyState == 4 && req.status == 200){
		reqfn(req, reqval);
	}
}

/*------------------------------------------------------------------------------
Comprueba que una dirección de e-mail sea sintácticamente correcta.
Nota: Adicionalmente comprueba que los dominios tras la arroba sean al menos
dos y que no haya ninguno vacío.
Nota: Traducción literal de CheckEMailAddr() en /inc/fn.php.
Refs: [1] RFC 2822 cap 3.4.1 (http://rfc.net/rfc2822.html)
------------------------------------------------------------------------------*/

function checkEMailAddr(adr){
	var a, j;
	if(!adr.match(new RegExp("^[-!#$%&'*+./0-9=?@A-Z^_`a-z{|}~]+$")))
		return false;
	a = adr.split("@");
	if(a.length != 2 || !a[0].length)
		return false;
	a = a[1].split(".");
	if(a.length < 2)
		return false;
	for(j = 0; j < a.length; j++)
		if(!a[j].length)
			return false;
	return true;
}

/*------------------------------------------------------------------------------
Comprueba que un nick sea sintácticamente correcto.
Nota: Traducción literal de CheckNick() en /inc/fn.php.
------------------------------------------------------------------------------*/

function checkNick(str){
	return str.match(/^[-_0-9A-Za-z]+$/);
}

/*------------------------------------------------------------------------------
Comprueba si una cadena de texto puede convertirse en valor entero con signo.
'str' es la cadena de texto representando el valor numérico en la forma [-]i,
donde i es la parte entera en el rango -2147483648 - 2147483647.
Devuelve el valor numérico o null si no puede convertirse.
Nota: Traducción literal de CheckInt() en /inc/fn.php.
------------------------------------------------------------------------------*/

function checkInt(str){
	var n;
	if(str.match(/^-*\d+$/)){
		n = str - 0;
		if(n >= -2147483648 && n <= 2147483647)
	 		return n;
 	}
	return null;
}

/*------------------------------------------------------------------------------
Comprueba si una cadena de texto puede convertirse en valor entero sin signo.
'str' es la cadena de texto representando el valor numérico en la forma i,
donde i es la parte entera en el rango 0 - 4294967295.
Devuelve el valor numérico o null si no puede convertirse.
Nota: Traducción literal de CheckIntUnsigned() en /inc/fn.php.
------------------------------------------------------------------------------*/

function checkIntUnsigned(str){
	var n;
	if(str.match(/^\d+$/)){
		n = str - 0;
		if(n <= 4294967295)
	 		return n;
 	}
	return null;
}

/*------------------------------------------------------------------------------
Comprueba si una cadena de texto puede convertirse en un id (entero mayor
que 0).
'str' es la cadena de texto representando el valor numérico en la forma i,
donde i es la parte entera en el rango 1 - 4294967295.
Devuelve el valor numérico o null si no puede convertirse.
Nota: Traducción literal de CheckId() en /inc/fn.php.
------------------------------------------------------------------------------*/

function checkId(str){
	var n;
	if((n = checkIntUnsigned(str)) != null && n > 0)
		return n;
	return null;
}

/*------------------------------------------------------------------------------
Elimina los espacios blancos de principio y final de cadena.
Nota: Equivalente a la función trim() de PHP.
------------------------------------------------------------------------------*/

function trim(str){ return str.replace(/^[ \t\n\r\0\x0B]+/g, "").replace(/[ \t\n\r\0\x0B]+$/g, ""); }

/*------------------------------------------------------------------------------
Selecciona una opción en un control "select" por valor (no por índice).
Nota: Si no hay ninguna opción en la lista con el valor indicado, la selección
no se modifica. Si hay varias opciones con el mismo valor, se selecciona la
opción con menor índice.
------------------------------------------------------------------------------*/

function selectInSelect(sel, val){
	var j;
	for(j = 0; j < sel.options.length; j++){
		if(sel.options[j].value == val){
			sel.selectedIndex = j;
			break;
		}
	}
}
