function bw_check(){var is_major=parseInt(navigator.appVersion);this.nver=is_major;this.ver=navigator.appVersion;this.agent=navigator.userAgent;this.dom=document.getElementById?1:0;this.opera=window.opera?1:0;this.ie5=(this.ver.indexOf("MSIE 5")>-1&&this.dom&&!this.opera)?1:0;this.ie6=(this.ver.indexOf("MSIE 6")>-1&&this.dom&&!this.opera)?1:0;this.ie4=(document.all&&!this.dom&&!this.opera)?1:0;this.ie=this.ie4||this.ie5||this.ie6;this.mac=this.agent.indexOf("Mac")>-1;this.ns6=(this.dom&&parseInt(this.ver)>=5)?1:0;this.ie3=(this.ver.indexOf("MSIE")&&(is_major<4));this.hotjava=(this.agent.toLowerCase().indexOf('hotjava')!=-1)?1:0;this.ns4=(document.layers&&!this.dom&&!this.hotjava)?1:0;this.bw=(this.ie6||this.ie5||this.ie4||this.ns4||this.ns6||this.opera);this.ver3=(this.hotjava||this.ie3);this.opera7=((this.agent.toLowerCase().indexOf('opera 7')>-1) || (this.agent.toLowerCase().indexOf('opera/7')>-1));this.operaOld=this.opera&&!this.opera7;return this;};
function none(){}
function nn(val){return val != null;}
//function und(val){return typeof(val)=='undefined';}

/**
 * @return true si la variable fournie est définie.
 */
function checkVariable(variable) {
	if ( (variable == null) || (variable == 'undefined') ) {
		return false;
	}
	return true;
}

function und(a_val) {
	return (a_val == null) || (typeof(a_val) == 'undefined');
}

/** Remonte depuis un élément HTML jusqu'à l'élément HTML dans lequel il est inclu.
* Cela permet de récupérer la référence du composant et d'invoquer une de ses méthodes.
* @param a_includedNode 	élément HTML dont il faut trouver l'élément père.
* @param a_tagName 			nom de l'élément auquel il faut remonter.
* @return la référence du composant trouvé.
* @author VLT.
*/
function getElement(a_includedNode, a_tagName) {
	var l_uppTagName = a_tagName.toUpperCase();
	var l_node = a_includedNode;
	var l_uppName;
	do {
		l_node = l_node.parentNode;
		l_uppName = l_node.nodeName.toUpperCase();
		if (l_uppName == "BODY") {
			return null;
		}
	}
	while (l_uppName != l_uppTagName);

	return l_node;
}

/** 
 * Remonte dans les noeuds parents de l'élément HTML donné jusqu'à l'élément HTML 
 * dont on a spécifié le nom.
 * @param a_childNode (HTMLElement) référence de l'élément dont il faut trouver l'élément père.
 * @param a_parentName (String) nom de l'élément père jusqu'auquel il faut remonter.
 * @return la référence du composant trouvé.
 * @author VLT.
 */
function getParentByTagName(a_childNode, a_parentName) {
	var l_uppParentName = a_parentName.toUpperCase();
	var l_node = a_childNode;
	var l_uppName;
	do {
		l_uppName = l_node.nodeName.toUpperCase();
		if (l_uppName == "BODY") {
			return null;
		}
		if (l_uppName == l_uppParentName) {
			return l_node;
		}
		l_node = l_node.parentNode;
	}
	while (l_node.nodeName.toUpperCase() != l_uppParentName);

	return l_node;
}

/** 
 * Calcul de la coordonnée horizontale absolue d'un élément HTML.
 * @param a_myNode objet HTML dont on souhaite connaître la coordonnée.
 * @return coordonnée horizontale de l'objet.
 * @author VLT le 07/02/2002
 */
function getClientLeft(a_myNode) {
	var l_tmpNode = a_myNode;
	var l_left = 0;
	while ((l_tmpNode != null) &&(l_tmpNode.nodeName != "BODY")) {
		l_left += l_tmpNode.offsetLeft;
		l_tmpNode = l_tmpNode.offsetParent;
	}
	return l_left;
}

/** 
 * Calcul de la coordonnée verticale absolue d'un élément HTML.
 * @param a_myNode objet HTML dont on souhaite connaître la coordonnée.
 * @return coordonnée horizontale de l'objet.
 * @author VLT le 07/02/2002
 */
function getClientTop(a_myNode) {
	var l_tmpNode = a_myNode;
	var l_top = 0;
	while ((l_tmpNode != null) &&(l_tmpNode.nodeName != "BODY")) {
		l_top += l_tmpNode.offsetTop;
		l_tmpNode = l_tmpNode.offsetParent;
	}
	return l_top;
}

/** 
 * Calcul des coordonnées absolues d'un élément HTML.
 * @param a_myNode objet HTML dont on souhaite connaître les coordonnées.
 * @return les coordonnées [left, top]
 */
function getClientPosition(a_htmlElt) {
	var l_tmpNode = a_htmlElt;
	var l_position = [0, 0];
	while ((l_tmpNode != null) && (l_tmpNode.nodeName != "BODY")) {
		l_position[0] += l_tmpNode.offsetLeft;
		l_position[1] += l_tmpNode.offsetTop;
		l_tmpNode = l_tmpNode.offsetParent;
	}
	return l_position;
}

/**
 * Renvoie le premier fils de node dont le tag s'appelle name.
 * Renvoie le noeud lui-même si aucun fils correspondant n'est trouvé.
 * @param node      élément HTML père
 * @param tagName   nom du tag désiré
 */
function getChildByTag(node, tagName) {
	var l_children = node.getElementsByTagName(tagName);
	if (checkVariable(l_children) && checkVariable(l_children[0])) {
		return l_children[0];
	} else {
		return node;
	}
}

/************************************************************************************
 ** trace dans une autre fenêtre
 */
/**
 * Ouvre la fenêtre de trace
 */
function initTrace() {
	var l_props = 
					'dependent=no,' + 	//fermeture sans fermeture parent (NS, ne fonctionne pas sur IE)
					'directories=no,' +	//barre d'outils
					'location=no,' +		//zone d'adresse
					'menubar=no,' +		//barre de menu
					'focus=no,' +
					'status=yes,' + 	//barre de statuts
					'resizable=yes,' +	//redimensionnement
					'width=350,' +
					'height=200,' +
					'screenX=900,' +		//position horizontale (NS, ne fonctionne pas sur IE)
					'screenY=0,' +
					'scrollbars=yes';	//ascenseurs
					
	top.trace = window.open('../modules/trace.htm', 'trace', l_props);
	top.trace.focus();
}

/**
 * Ajoute la ligne fournie au début de la trace
 * @param a_line   ligne à tracer
 */
function writeMyTrace(a_line) {
	if (checkVariable(top.trace) && (top.trace.closed == false)) {
		var l_textArea = top.trace.document.traceForm.traceText;
		l_textArea.value = a_line + '\n' + l_textArea.value;
	
//		var l_div = xbGetElementById("js", top.trace);
//		xbSetInnerHTML(l_div, "<script>alert('titi')<\/script>");
	}
}