/***************************************************************/
/** Pour poster des requêtes                                  */
/*************************************************************/
function getAjaxRequest() {
	var xhr;
	try {
		xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Essayer Internet Explorer 
	} catch(e) {   // Echec 
		xhr = new XMLHttpRequest();  // Autres navigateurs
	}
/*	
	xhr.upload.addEventListener("progress", updateProgress, false);  
	xhr.upload.addEventListener("load", transferComplete, false);  
	xhr.upload.addEventListener("error", transferFailed, false);  
	xhr.upload.addEventListener("abort", transferCanceled, false);
TODO !!! */  
	return xhr;
}
function sendPostMessage(servletUrl, data) {
	// L'url de la servlet est envoy�e par le serveur !
	try {
		// On r�cup�re un objet de connection
		var request = getAjaxRequest();
		// On ouvre une connection
		request.open("POST", servletUrl, true);
		// On set le type de la request (OBLIGATOIRE pour un post)
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		// On envoie la queryString pour r�cup�rer des parameters.
		request.send(data);
	} catch (e) {
		alert(e);
	}
}
/** Sauvegarder la page courante dans l'historique des pages du site */
function saveToHistory(historyManagerUrl) {
	// L'url de la page
	var data = "url=" + encodeURIComponent(document.location.href, "UTF-8");
	// On envoi l'url � l'historique manager
	sendPostMessage(historyManagerUrl, data);
}


/***************************************************************/
/** Pour changer de page (géré dans HtmlComponent)            */
/*************************************************************/
function changePage(url){
	window.location = url;
}
function redirect(servlet, param){
	top.location="" + servlet + "?param=" + param;
}
function goBack(nbPage) {
	history.go(-nbPage);
}

/***************************************************************/
/** Pour la visibilité des éléments (géré dans HtmlComponent) */
/*************************************************************/
function switchDisplay(id) {
	if(document.getElementById(id).style.visibility=="hidden") {
		display(id);
	} else {
		hide(id);
	}
}
/** Pour cacher un élément (géré dans HtmlComponent) */
function hide(id){
	var item = document.getElementById(id);
	item.style.visibility="hidden";
	item.style.top="0px";
	item.style.left="0px";
	document.onmousemove = "";
}
function hideInnerElement(id){
	document.getElementById(id).style.display='none';
}
/** Pour afficher un élément caché (géré dans HtmlComponent) */
function display(id){
	document.getElementById(id).style.visibility="visible";
	document.getElementById(id).style.position="relative";
}
function displayInnerElement(id){
	document.getElementById(id).style.display='block';
}


/** Pour afficher une pop-up (géré dans HtmlComponent) */
function displayPopUp(id, event) {
	var item = document.getElementById(id);

	setPositionFromMouse(15, 10, item, event);
	
	item.style.visibility="visible";
	
	// D�finition de la fonction permettant de faire bouger l'�l�ment.
	if( event.pageX != undefined
	|| (event != undefined && event.x != undefined && event.clientX == undefined) // ie4 ?
	|| (event.clientX != undefined)) { // IE6,  IE7, IE5.5
		document.onmousemove = function(e) { setPositionFromMouse(15, 10, item, e); };
	} else {
		
	}
}
/***************************************************************/
/** Pour positionner un élément (les pop-up pour l'instant) (géré dans HtmlComponent) */
/*************************************************************/
function setPositionFromMouse(distX, distY, item, event) {
	if (!event) {
		event = window.event;
	}
	if( event.pageX != undefined ){ // gecko, konqueror,
	    _x = event.pageX;
	    _y = event.pageY;
	}else if(event != undefined && event.x != undefined && event.clientX == undefined){ // ie4 ?
	    _x = event.x;
	    _y = event.y;
	}else if(event.clientX != undefined ){ // IE6,  IE7, IE5.5
	    if(document.documentElement){
	        _x = event.clientX + ( document.documentElement.scrollLeft || document.body.scrollLeft);
	        _y = event.clientY + ( document.documentElement.scrollTop || document.body.scrollTop);
	    }else{
	        _x = event.clientX + document.body.scrollLeft;
	        _y = event.clientY + document.body.scrollTop;
	    }
	}else{
	    _x = 0;
	    _y = 0;
	    // TODO - calculate by sum of item's parents
	}

    // Pour firefox!?!
    if (event.clientX != undefined) {
	    _y = event.clientY;
	    _x = event.clientX;
    }
    
	item.style.position="fixed";
	item.style.top=(_y+10) + "px";
	item.style.left=(_x+15) + "px";
}

/***************************************************************/
/** Pour définir le background d'un élément (géré dans HtmlComponent) */
/*************************************************************/
function setBackground(id, backgroundProperties) {
	var item = document.getElementById(id);
	item.style.background=backgroundProperties;
}

/***************************************************************/
/** Pour bouger jusqu'à un élément                            */
/*************************************************************/
function scrollToElement(idElement){
	var element = document.getElementById(idElement);
	
	var posX = 0;
	var posY = 0;
	              
	while(element != null){
		posX += element.offsetLeft;
		posY += element.offsetTop;
		element = element.offsetParent;
	}
	
	window.scrollTo(posX,posY);
}

/***************************************************************/
/** Pour définir la valeur d'un élément                       */
/*************************************************************/
function setValue(idElement, newvalue) {
	var element = document.getElementById(idElement);
	element.value = newvalue;
	element.innerHtml = newvalue;
}


