/**
 * Affiche le texte contenu dans cet element
 */
function getText(node) {
    var res = node.textContent; // w3c
    if (res == null)
	res = node.text; // IE
    return res;
}

/**
 * contrôle la longueur maximale d'un textarea
 * @param elem : l'élément textarea
 * @param leng : longueur max autorisée
 * @param indic : numéro de l'indicateur du nombre de caractères restant
 * @usage <textarea onkeyup="maxlength(100)" onkeydown="maxlength(100)"></textarea>
 */
function maxlength (elem, leng, indic) {
	if (elem.value.length>leng) {
		elem.value = elem.value.substring(0, leng);
	}
	document.getElementById(indic).innerHTML = leng - elem.value.length;
}


/* http://openweb.eu.org/articles/objet_xmlhttprequest/ */
function getHTTPObject() {
	var xmlhttp = false;

	/* on essaie de créer l'objet si ce n'est pas déjà fait */
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	return xmlhttp;
}


/**
 * supprime les espaces en début et en fin de texte
 * @param str : chaîne de caractères
 */
function trim(str) {
   return str.replace(/^\s*|\s*$/g,'');
}

/**
 * coche automatiquement tout les éléments de type checkbox du formulaire
 * (utilisé dans eturencontres pour la messagerie privée)
 */
function toggleChecked(oElement) 
{ 
  oForm = oElement.form; 
  oElement = oForm.elements; 
  if(oElement.length) 
  { 
    bChecked = oElement[0].checked; 
    for(i = 1; i < oElement.length; i++) 
      oElement[i].checked = bChecked; 
  } 
} 


/**
 * contrôle les valeurs obligatoires d'un formulaire
 * @param listElements : liste des champs à contrôler (soit un tableau, soit un élément unique)
 * @param listMessages : liste des messages d'erreurs (soit un tableau, soit un élément unique), correspondant aux éléments à contrôler
 * @usage <form onsubmit="return controlForm( new Array('elem1', 'elem2') , new Array('message1', 'message2') )">
 * @usage pour controler qu'un radio/checkbox aie au moins une valeur sélectionnée parmi plusieurs choix,
 * l'élément 'elem' du premier tableau doit être un Array
 */
function controlForm (listElements, listMessages) {
	// if you give me an item, and not an array; handle this
	if (typeof(listElements)!='object' || listElements.constructor!=Array) {
		listElements = new Array(listElements);
	}
	if (typeof(listMessages)!='object' || listMessages.constructor!=Array) {
		listMessages = new Array(listMessages);
	}
	
	// both arrays' lengths must be the same
	if (listElements.length != listMessages.length) {
		alert('error : wrong number of elements - aborted');
		return false;
	}
	
	for (i=0; i<listElements.length; i++) {
		// here is the solution to handle checkbox and radio : give me an array with possible selected items ! :-D
		if (listElements[i].constructor == Array) {
			var isValue = false;
			for (var j=0; j<listElements[i].length; j++) {
				if (listElements[i][j].checked == true) {
					isValue = true;
				}
			}
			if (!isValue) {
				alert(listMessages[i]);
				return false;
			}
		} else {
			switch (listElements[i].type) {
				case 'text' :
				case 'password' :
				case 'textarea' :
				case 'select-one' :
				case 'select-multiple' :
				case 'file' :
					if (trim(listElements[i].value) == '' || listElements[i].value == '-2') {
						alert(listMessages[i]);
						listElements[i].focus();
						return false;
					}
					break;
				case 'radio' :
					// if you give me a simple radio (for multiple choices, see above)
					if (!listElements[i].checked) {
						alert(listMessages[i]);
						listElements[i].focus();
						return false;
					}
					break;
				case 'checkbox' :
					// if you give me a simple checkbox (for multiple choices, see above)
					if (!listElements[i].checked) {
						alert(listMessages[i]);
						listElements[i].focus();
						return false;
					}
					break;
				case 'hidden' :
					break;
				default :
					// this case should not happen. what sort of element did you give me?
					alert('indéfini : ' + listElements[i].type);
					return false;
					break;
			}
		}
	}
	return true;
}


/**
 * Script affichant un menu au survol de la souris
 */
function positionInfobulle(e) {
	//On repère la position de la souris et on ajuste selon le scroll, de la façon adaptée au navigateur

	if (is_ie6up) {
	    x = event.x + document.documentElement.scrollLeft;
	    y = event.y + document.documentElement.scrollTop;
	} else {
	    x = e.clientX + document.documentElement.scrollLeft;
	    y = e.clientY + document.documentElement.scrollTop;
	}
	
	if (window.innerHeight) {
		wiw = window.innerWidth;
		wih = window.innerHeight;
	} else if (document.documentElement.clientWidth) {
		wiw = document.documentElement.clientWidth;
		wih = document.documentElement.clientHeight;
	} else {
		wiw = document.body.clientWidth;
		wih = document.body.clientHeight;
	}

	if ((e ? e.clientX : event.x) < wiw / 2) {
		x = x + 15;
	} else {
		x = x - document.getElementById('divinfo').offsetWidth - 15;
	}
	if ((e ? e.clientY : event.y) < wih / 2) {
		y = y + 15;
	} else {
		y = y - document.getElementById('divinfo').offsetHeight - 15;
	}

	document.getElementById('divinfo').style.left = x+"px";
	document.getElementById('divinfo').style.top = y+"px";
}

/**
 * afficher l'infobulle
 */
function afficherDivInfo(contenu, afficherdiv) {
	if(afficherdiv == 1){
		if (navigator.appName.substring(0,3) == "Net"){
			addEventListener('MOUSEMOVE', afficherDivInfo, true);
		}
		document.onmousemove = positionInfobulle;
		document.getElementById('divinfo').innerHTML = contenu;
		document.getElementById('divinfo').style.display = '';
	} else {
		document.onmousemove = '';
		document.getElementById('divinfo').style.display = 'none';
	}
}
