	var max, speed, a_speed, decel, a_decel, selectSoc,
		active = false, a_active = false, x, a,
		select_div, fade_div, display_mode;
		
	
	/**************************************************************************/
	/******************************  Affichage  *******************************/
	/**************************************************************************/
	
	// Fonction permettant de masquer un élément en specifiant la méthode d'affichage
	function hidediv(div, mode) {
		switch (mode) {
			default:
			case "visibility":
				document.getElementById(div).style.visibility = "hidden";
			break;
			case "display":
				document.getElementById(div).style.display = "none";
			break;
		}
	}
	
	// Fonction utilisée pour masquer le message
	function hide_message() {
		fade("Message", "out");
	}
	
	// Fonction permettant d'afficher un élément en specifiant la méthode d'affichage
	function showdiv(div, mode) {
		switch (mode) {
			default:
			case "visibility":
				document.getElementById(div).style.visibility = "visible";
			break;
			case "display":
				document.getElementById(div).style.display = "";
			break;
		}
	}
	
	// Fonction permettant l'affichage d'un message sur les pages
	function show_message(text, type, delay) {
		// Si le message est vide, on le masque
		if (text.length == 0) {
			hidediv("Message");
			return;
		}
		
		// Si le type de message n'est pas precisé, on utilise le type "information"
		if (!type) type = 0;
		
		switch (type) {
			case 0:
				text = "<SPAN CLASS=\"information\">" + text + "</SPAN>";
			break;
			case 1:
				text = "<SPAN CLASS=\"avertissement\">" + text + "</SPAN>";
			break;
			case 2:
				text = "<SPAN CLASS=\"erreur\">" + text + "</SPAN>";
			break;
			default:
			break;
		}
		
		// Si le delai n'est pas specifié, on utilise 2.5 secondes
		if (!delay) delay = 2500;
		
		// Ecriture du message
		writediv("Message", text);
		
		// On centre le bloc
		document.getElementById("Message").style.marginLeft = - (document.getElementById("Message").offsetWidth / 2);
		
		// Affichage du message
		fade("Message", "in");
		
		// On masque le message apres le delai
		if (delay && delay != -1) setTimeout(hide_message, delay);
	}
	
	// Fonction permettant d'écrire dans un element
	function writediv(div, value) {
		document.getElementById(div).innerHTML = value;
	}
	
	
	/**************************************************************************/
	/*************************  Changements de style  *************************/
	/**************************************************************************/
	
	// Fonction permettant de changer l'opacité d'un élément
	function set_alpha(div, value) {
		div = document.getElementById(div);
		if (!div) return;
		
		div.style.filter = "alpha(opacity=" + value + ");"
		div.style.opacity = value / 100;
		div.style.MozOpacity = value / 100;
	}
	
	// Fonction permettant de changer la couleur de fond d'un élément
	function set_background(field, color) {
		if (document.getElementById(field))
			document.getElementById(field).style.backgroundColor = color;
	}
	
	
	/**************************************************************************/
	/***************************  Effets speciaux *****************************/
	/**************************************************************************/
	
	// Fonction permettant d'afficher/masquer un element avec un fondu
	function fade(div, direction, mode) {
		if (a_active) return;
		
		var attribute;
		
		switch (mode) {
			default:
			case "visibility":
				attribute = document.getElementById(div).style.visibility;
				if ((direction == "out" && attribute == "hidden") ||
					(direction == "in" && attribute == "visible")) return;
			break;
			case "display":
				attribute = document.getElementById(div).style.display;
				if ((direction == "out" && attribute == "none") ||
					(direction == "in" && attribute != "none")) return;
			break;
		}
		if (direction != "in" && direction != "out") direction = "in";
		a_speed = 10;
		a_decel = 1.10;
		a_active = true;
		showdiv(div, mode);
		fade_div = div;
		display_mode = mode;
		
		(direction == "in") ? a = 0 : a = 90;
		(direction == "in") ? fade_in() : fade_out();
	}
	
	// Fonction permettant de réaliser le fondu entrant
	function fade_in() {
		a_speed = Math.max(a_speed / a_decel, 1);
		a = a + a_speed;
		set_alpha(fade_div, a);
		if (a < 90)
			setTimeout(fade_in, 1);
		else {
			a_active = false;
			set_alpha(fade_div, 90);
		}
	}
	
	// Fonction permettant de réaliser le fondu sortant
	function fade_out() {
		a = a - a_speed;
		set_alpha(fade_div, a);
		if (a > 0)
			setTimeout(fade_out, 1);
		else {
			a_active = false;
			set_alpha(fade_div, 0);
			hidediv(fade_div, display_mode);
		}
	}
	
	// Fonction utilisée pour ouvrir/fermer la zone de sélection d'une affaire
	function toggle_select() {
		if (active) return;
		
		max = (document.all) ? -227 : -252;
		speed = (document.all) ? 15 : 25;
		decel = (document.all) ? 1.065 : 1.097;
		active = true;
		select_div = document.getElementById("Selection");
		
		if (!select_div) return;
		document.getElementById("Tirette").style.backgroundImage = (select_div.style.right == "-1px") ? "url(\"../images/gauche.gif\")" : "url(\"../images/droite.gif\")";
		(select_div.style.right == "-1px") ? x = -1 : x = max;
		(select_div.style.right == "-1px") ? close_select() : open_select();
	}
	
	// Fonction permettant de réaliser l'animation d'ouverture de la zone de selection d'une affaire
	function open_select() {
		speed = Math.max(speed / decel, 1);
		x = x + speed;
		select_div.style.right = x + "px";
		if (x <= (-1 - speed))
			setTimeout(open_select, 1);
		else {
			active = false;
			select_div.style.right = "-1px";
		}
	}
	
	// Fonction permettant de réaliser l'animation de fermeture de la zone de sélection d'une affaire
	function close_select() {
		speed = Math.max(speed / decel, 1);
		x = x - speed;
		select_div.style.right = x + "px";
		if (x >= (max + speed))
			setTimeout(close_select, 1);
		else {
			active = false;
			select_div.style.right = max + "px";
		}
	}
	
	
	/**************************************************************************/
	/*************************  Connexion au serveur **************************/
	/**************************************************************************/
	
	// Fonction utilisée pour faire appel à un script php
	function request(page, parameters) {
		var xhr = null; 
		
		// Firefox
		if (window.XMLHttpRequest)
		   xhr = new XMLHttpRequest();
		// Internet Explorer
		else if (window.ActiveXObject) {
			try {
			    xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
			    xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		// XMLHttpRequest non supporté par le navigateur 
		} else {
		   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest."); 
		   return;
		}
		
		if (parameters)
			page += "?" + parameters;
		
		xhr.open("GET", page, false);
		xhr.send(null);
		
		if(xhr.readyState == 4)
			return(xhr.responseText);
		else
			return(false);
	}
	
	
	/**************************************************************************/
	/*******************************  Divers  *********************************/
	/**************************************************************************/
	
	// Fonction permettant d'ouvrir le calendrier afin de choisir une date
	function calendar(field) {
		var w = 206;
		var h = 188;
		var l = (screen.width - w) / 2;
		var t = (screen.height - h) / 2;
		
		if (document.getElementsByName(field)[0].disabled == 0)
			var popup = window.open('../lib/calendar.php?field=' + field, '',
									"top=" + t + ", left=" + l + ", width=" + w + ", height=" + h +
									", " + 'location=no, menubar=no, status=no, scrollbars=yes, resizable=no');
	}
	
	// Fonction permettant de calculer la position d'un objet dans la page
	function find_position(object) {
		var x = y = 0;
		if (object.offsetParent) {
			x = object.offsetLeft
			y = object.offsetTop
			while (object = object.offsetParent) {
				x += object.offsetLeft;
				y += object.offsetTop;
			}
		}
		return [x, y];
	}
	
	// Fonction permettant de détecter Internet Explorer 6
	function is_ie6() {
		var version = 0;
		if (navigator.appVersion.indexOf("MSIE") != -1) {
			version = navigator.appVersion.split("MSIE");
			version = parseFloat(version[1]);
		}
		return (version >= 5.5 && version < 7);
	}
	
	// Fonction permettant de détecter Internet Explorer 7
	function is_ie7() {
		var version = 0;
		if (navigator.appVersion.indexOf("MSIE") != -1) {
			version = navigator.appVersion.split("MSIE");
			version = parseFloat(version[1]);
		}
		return (version == 7);
	}
	
	// Fonction utilisée pour ouvrir une fenêtre popup
	function popup(url, w, h) {
		var l = (screen.width - w) / 2;
		var t = (screen.height - h) / 2;
		var popup = window.open(url, '', "top=" + t + ", left=" + l +
								", width=" + w + ", height=" + h + ", " +
								'location=no, menubar=no, status=no, scrollbars=yes, resizable=yes');
	}
	
	// Fonction utilisée pour enregistrer les données d'un formulaire sans utiliser la soumission
	function save(page, action, parameters, check_func) {
		var param_str = "";
		
		if (eval(check_func)) {
			for (i = 0; i < parameters.length; i++) {
				param_str += "&" + parameters[i] + "=";
				
				if (document.getElementsByName(parameters[i])[0].type == "radio") {
					param_str += (document.getElementsByName(parameters[i])[0].checked) ? 1 : 0;
				} else {
					param_str += document.getElementsByName(parameters[i])[0].value;
				}
			}
			
			request(page, action + param_str);
			
			return true;
		} else {
			return false;
		}
	}
	
	// Fonction appelée lors de la sélection d'une affaire à l'aide de la zone de sélection
	function select_case(id) {
		toggle_select();
		var page = "../affaire/pagefunc.php";
		request(page, "change=" + id);
		parent.frames[0].document.getElementById("Affaire").innerHTML = request(page, "menu");
		affaire = id;
		Afficher();
	}
	
	
