function GetId(id) {
	return document.getElementById(id);
}
var nodeId;
var i=false; // La variable i nous dit si la bulle est visible ou non
var left = 0;
var top = 0;

/**
 * Permet de placer la div "bulle" à la position de la souris
 * @param e evenement de la souris qui contient sa position
 * @param horizontalDirection direction du text (left ou right)
 */
function move(e,horizontalDirection) {
	var HORIZONTAL_DIRECTION_RIGHT = "right";
	var HORIZONTAL_DIRECTION_LEFT = "left";
	var MARGE = 30;
	if(typeof horizontalDirection == "undefined"){
		horizontalDirection = HORIZONTAL_DIRECTION_RIGHT;
	}
	if(i) { // Si la bulle est visible, on calcul en temps reel sa position ideale
		var bulle = GetId("bulle");
		if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
			if(horizontalDirection == HORIZONTAL_DIRECTION_RIGHT){
				var left = e.pageX;
				bulle.style.left= left +"px";
				bulle.style.right = "";
				if((left + bulle.clientWidth + MARGE) > document.width){
					bulle.style.width = bulle.clientWidth - ((left + bulle.clientWidth + MARGE) - document.width) + "px";
				}
			}
			else if(horizontalDirection == HORIZONTAL_DIRECTION_LEFT){
				var right = (document.width - e.pageX);
				bulle.style.right= right + "px";
				bulle.style.left = "";
				//si l'infobulle est trop large
				if((right + bulle.clientWidth + MARGE) > document.width){
					bulle.style.width = bulle.clientWidth - ((right + bulle.clientWidth + MARGE) - document.width) + "px";
				}
			}
			bulle.style.top=e.pageY + 10 + "px";
		}
		else {
			if(document.documentElement.clientWidth > 0) {
				if(horizontalDirection == HORIZONTAL_DIRECTION_RIGHT){
					var left = event.x;
					bulle.style.left= left + "px";
					bulle.style.right = "";
					if((left + bulle.clientWidth + MARGE) > document.documentElement.clientWidth){
						var width = bulle.clientWidth - ((left + bulle.clientWidth + MARGE) - document.documentElement.clientWidth);
						bulle.style.width = width + "px";
					}
				}
				else if(horizontalDirection == HORIZONTAL_DIRECTION_LEFT){
					var right = document.documentElement.clientWidth - event.x;
					bulle.style.right= right +"px";
					bulle.style.left = "";
					if((right + bulle.clientWidth + MARGE) > document.documentElement.clientWidth){
						var width = bulle.clientWidth - ((right + bulle.clientWidth + MARGE) - document.documentElement.clientWidth);
						bulle.style.width = width + "px";
					}
				}
				bulle.style.top=10 + event.y + document.documentElement.scrollTop + "px";
			}
			else {
				if(horizontalDirection == HORIZONTAL_DIRECTION_RIGHT){
					var left = event.x;
					bulle.style.left = left + "px";
					bulle.style.right = "";
					if((left + bulle.clientWidth + MARGE) > document.body.clientWidth){
						bulle.style.width = bulle.clientWidth - ((left + bulle.clientWidth + MARGE) - document.body.clientWidth) + "px";
					}

				}
				else if(horizontalDirection == HORIZONTAL_DIRECTION_LEFT){
					var right = (document.body.clientWidth - event.x);
					bulle.style.right = right + "px";
					bulle.style.left = "";
					if((right + bulle.clientWidth + MARGE) > document.body.clientWidth){
						bulle.style.width = bulle.clientWidth - ((right + bulle.clientWidth + MARGE) - document.body.clientWidth) + "px";
					}
				}
				bulle.style.top=10+event.y+document.body.scrollTop+"px";
			}
		}
	}
}

/**
 * Affiche ou masque (selon l'etat courant) l'infobulle avec le texte correspondant
 * @param e evenement de la souris qui contient sa position
 * @param text texte à afficher
 * @param horizontalDirection direction du text (left ou right)
 * @return
 */
function afficherInfoBulle(e,text,horizontalDirection, width){
	if(typeof horizontalDirection == "undefined"){
		horizontalDirection = "right";
	}
	if(i){
		cache();
	} else{
		montre(e,text,horizontalDirection, width);
	}
}

/**
 * Affiche l'infobulle avec le texte correspondant
 * @param e evenement de la souris qui contient sa position
 * @param text texte à afficher
 */
function montre(e,text,horizontalDirection, width) {
	if(i==false) {
		i=true;
		var bulle = GetId("bulle");
		//on remet la bulle à une position initiale
		GetId("bulle").innerHTML = "";
		bulle.style.width = "";
		if (navigator.appName!="Microsoft Internet Explorer") {
			bulle.style.top = document.height;
		}
		else{
			bulle.style.top = document.body.clientHeight;
		}
		GetId("bulle").style.visibility="visible"; // Si il est cacher (la verif n'est qu'une securite) on le rend visible.
		//on rédéfinit la taille du DIV
		GetId("bulle").innerHTML = text;
		move(e,horizontalDirection);
		/*if(typeof width != "undefined"){
			bulle.style.width = width;
		}*/
	}
}

/**
 * Masque l'infobulle avec le texte correspondant
 * @param e evenement de la souris qui contient sa position
 */
function cache(e) {
	if(i==true) {
		GetId("bulle").style.visibility="hidden"; // Si la bulle etais visible on la cache
		i=false;
	}
}

/**
 * Affiche ou masque (selon l'etat courant) l'infobulle dédiée à l'aide en ligne avec le texte correspondant
 * @param e evenement de la souris qui contient sa position
 * @param text texte à afficher
 * @return
 */
function afficherInfoBulleAide(e,text){
	if(i){
		cache();
	} else{
		montreAide(e,text);
	}
}

/**
 * Affiche l'infobulle dédiée à l'aide en ligne avec le texte correspondant pour une page
 * @param e evenement de la souris qui contient sa position
 * @param text texte à afficher
*/
function montreAide(e, text) {
	if(i==false) {
		i=true;
		moveAide(e);
		GetId("bulle").style.visibility="visible"; // Si il est cacher (la verif n'est qu'une securite) on le rend visible.
		GetId("bulle").innerHTML = text; // Cette fonction est a ameliorer, il parait qu'elle n'est pas valide (mais elle marche)
	}
}


/**
 * Permet de placer la div "bulle" à la position de la souris, dans le cas ou la div est utilisée pour l'affichage de l'aide en ligne
 * @param e evenement de la souris qui contient sa position
 */
function moveAide(e) {
	if(i) { // Si la bulle est visible, on calcul en temps reel sa position ideale
		if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
			GetId("bulle").style.left=e.pageX - 800+"px";
			GetId("bulle").style.top=e.pageY + 10+"px";
		}
		else {
			if(document.documentElement.clientWidth>0) {
				GetId("bulle").style.left=-800+event.x+document.documentElement.scrollLeft+"px";
				GetId("bulle").style.top=10+event.y+document.documentElement.scrollTop+"px";
			}
			else {
				GetId("bulle").style.left=-800+event.x+document.body.scrollLeft+"px";
				GetId("bulle").style.top=10+event.y+document.body.scrollTop+"px";
			}
		}
	}
}



/**
 * Fonction qui ne permet de saisir que des information numériques
 * @param event evenement de la touche (caractère à vérifier)
 * @return true si le caractères est correct sinon false
 */
function chiffres(event) {
	if(!event && window.event) {
		event=window.event;
	}

	//Code clavier caracteres autorises  : de 48 a 57 : chiffres 0 a 9
	//				: 32 : espace
	//				: 8 : backspace
	//				: 0 : tab
	//				: 46 : point
	//				: 44 : virgule
	//				: 45 : le signe "-"
	//				: 43 : le signe "+"
	if((event.keyCode < 48 || event.keyCode > 57)){
		if (event.keyCode != 32 && event.keyCode != 8
				&& event.keyCode != 0 && event.keyCode != 46
				&& event.keyCode != 44 && event.keyCode != 45
				&& event.keyCode != 43){
			event.returnValue = false;
			event.cancelBubble = true;
		}
	}

	if((event.which < 48 || event.which > 57)) {
		if (event.which != 32 && event.which != 8
				&& event.which != 0 && event.which != 46
				&& event.which != 44 && event.which != 45
				&& event.which != 43){
			event.preventDefault();
			event.stopPropagation();
		}
	}
}

/**
	Met le focus sur le composant
	Si l'id est nulle alors il met le focuse sur le premier element qui à pour class label_error
	@param id du compostant
*/
function setFocus(id){
	var curleft = curtop = 0;
	var element = 'undefined';
	if(id != ""){
		element = document.getElementById(id);
	}
	else{
		elements = getElementsByAttribute(document,'*','class','label_error');
		for(i = 0; i < elements.length; i++){
			if(elements[i].innerHTML != ""){
				element = elements[i];
				break;
			}
		}
	}
	if(element != 'undefined' && element != null){
		if (element.offsetParent != 'undefined') {
			do {
				curleft += element.offsetLeft;
				curtop += element.offsetTop;
			} while (element = element.offsetParent);
		}
		window.scrollTo(0,curtop - 150);
	}
}

/*
 Retourne les elements HTML par rapport a leurs attribut.
 @param oElm element a partir duquel on commence a rechercher
 @param strTagName nom du tag (* = tous les elements)
 @param strAttributeName nom de l'attribut
 @paral strAttributeValue valeur de l'attribut (si null on ne prend pas en compte ce critere)
*/
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue) {
	var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
	var oCurrent;
	var oAttribute;
	for(var i=0; i < arrElements.length; i++) {
        oCurrent = arrElements[i];
        if(strAttributeName != 'class'){
        	oAttribute = oCurrent.getAttribute(strAttributeName);
        }
        else{
        	oAttribute = oCurrent.className;
        }
		if (typeof oAttribute == "string" && oAttribute.length > 0) {
			if (typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
				arrReturnElements.push(oCurrent);
			}
		}
	}
	return arrReturnElements;
}

/**
Upload un fichier via javascript
*/
function uploadFile(bouton){
	ligne = bouton.parentNode;
	while(ligne.tagName != 'TR'){
		ligne = ligne.parentNode;
	}
	tabForm = getElementsByAttribute(document,'form','id','form');
	if(tabForm.length > 0)
		monForm  = tabForm[0];
	inputFile = getElementsByAttribute(ligne,'input','type','file');
	if(inputFile.length > 0){
		if( monForm != 'undefined'){
			encoding = monForm.encoding;
			target = monForm.target;
			action = monForm.action;
			monForm.encoding='multipart/form-data';
			monForm.target='uploadframe';
			monForm.action = monForm.action + "?uploadFile=true";
			monForm.submit();
			monForm.encoding = encoding;
			monForm.target = target;
			monForm.action = action;
			fileUpload = false;
			while(!fileUpload){
				fileUpload = fileUploaded();
			}
		}
	}
}

/**
 * Envoie des requête Ajax pour voir savoir si le fichier est télécharger
 * @return true si oui sinon false
 */
function fileUploaded(){
	retour = false;
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		isIE = true;
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}
	monForm = document.getElementById('form');
	url = monForm.action + "?fileUploadRequest=true";
    req.open("GET", url, false);
    req.send(null);
    if(req.responseText == 'true')
	    retour = true;
    return retour;
}

/**
 * Simulation d'un click sur un element HTML
 * @param linkId id de l'element HTML
 */
function clickLink(linkId)
{
  var fireOnThis = document.getElementById(linkId)
  if (document.createEvent)
  {
    var evObj = document.createEvent('MouseEvents')
    evObj.initEvent( 'click', true, false )
    fireOnThis.dispatchEvent(evObj)
  }
  else if (document.createEventObject)
  {
    fireOnThis.fireEvent('onclick')
  }
}


/**
*  Gestion des onglets de navigation
*/
function survolOnlgetOn(element){
	bgImage = 'url(../../images/common/nav_on.jpg)';
	changeBackground(element,bgImage);
}

function survolOnlgetOff(element){
	bgImage = 'url(../../images/common/nav.gif)';
	changeBackground(element,"");
}

function changeBackground(element, bgImage){
	myclass = element.className;
	if(myclass == "onglet")
		element.style.backgroundImage = bgImage;
}

/**
 * Imprime seulement la liste des dossier d'une opération groupée
 */
function printListeDossierOG(){
	var tableau = new Array('hideprintEnTete','hideprintStatut','hideprintDimensionnement','enTeteListeDossier1','enTeteListeDossier2');
	var i = 0;
	for(i = 0; i < tableau.length; i++){
		element = document.getElementById(tableau[i]);
		if(element != null){
			element.className="hideprint";
		}
	}
	window.print();
}

/**
 * Imprime toutes la page d'une OG
 */
function printPageOG(){
	var tableau = new Array('hideprintEnTete','hideprintStatut','hideprintDimensionnement','enTeteListeDossier1','enTeteListeDossier2');
	var i = 0;
	for(i = 0; i < tableau.length; i++){
		element = document.getElementById(tableau[i]);
		if(element != null){
			element.className="";
		}
	}
	window.print();
}

/**
 * affiche la dernière colonne (node en variable global)
 */
function displayLastColumn(){
	node = document.getElementById(nodeId);
	if(typeof node != "undefined"){
		while(node.tagName.toUpperCase() != 'TABLE'){
			node = node.parentNode;
		}
		if(node.tagName.toUpperCase() == 'TABLE'){
			//on affiche le dernière en-tete
			var thead = node.getElementsByTagName('thead')[0];
			if(thead.tagName.toUpperCase() == 'THEAD'){
				for(i = 0; i < thead.rows.length; i++){
					var cells = thead.rows[i].cells;
					cells[cells.length - 1].style.display = '';
				}
			}
			//on affiche les cellules de la dernière colonne
			var tbody = node.getElementsByTagName('tbody')[0];
			if(tbody.tagName.toUpperCase() == 'TBODY'){
				for(i = 0; i < tbody.rows.length; i++){
					var cells = tbody.rows[i].cells;
					cells[cells.length - 1].style.display = '';
				}
			}
		}
	}
}

/**
 * masque la dernière colonne (node en variable global)
 */
function hideLastColumn(){
	node = document.getElementById(nodeId);
	if(typeof node != "undefined"){
		while(node.tagName.toUpperCase() != 'TABLE'){
			node = node.parentNode;
		}
		if(node.tagName.toUpperCase() == 'TABLE'){
			var thead = node.getElementsByTagName('thead')[0];
			if(thead.tagName.toUpperCase() == 'THEAD'){
				for(i = 0; i < thead.rows.length; i++){
					var cells = thead.rows[i].cells;
					cells[cells.length - 1].style.display = 'none';
				}
			}
			//on affiche les cellules de la dernière colonne
			var tbody = node.getElementsByTagName('tbody')[0];
			if(tbody.tagName.toUpperCase() == 'TBODY'){
				for(i = 0; i < tbody.rows.length; i++){
					var cells = tbody.rows[i].cells;
					cells[cells.length - 1].style.display = 'none';
				}
			}
		}
	}
}

/**
 * Renvoi true si le tableau à des erreur de validation
 */
function containsError(){
	var retour = false;
	node = document.getElementById(nodeId);
	if(typeof node != "undefined"){
		while(node.tagName.toUpperCase() != 'TABLE'){
			node = node.parentNode;
		}
		if(node.tagName.toUpperCase() == 'TABLE'){
			var errors = getElementsByAttribute(node,'*','class','label_error');
			for(i = 0; i < errors.length && !retour; i++){
				if(errors[i].innerHTML != ""){
					retour = true;
				}
			}
		}
	}
	return retour;
}


function setNode(l_node){
	while(l_node.tagName.toUpperCase() != 'TABLE'){
		l_node = l_node.parentNode;
	}
	nodeId = l_node.id;
}

/**
 * Vérifie si l'attribut value de l'élément correspondant à l'id est vide
 * @param idInput id du composant
 * @return true si la valeur est null ou vide sinon false
 */
function isEmpty(idInput){
	var retour = false;
	var element = document.getElementById(idInput);
	if(element != null && typeof element != "undefined"){
		retour = element.value == "" || element.value == null || element.value == "undefined";
	}
	return retour;
}
