   /*
	*	LIBRAIRIE AJAX
	*
	*	
	*	$Id: ajax.js 39 2007-05-03 14:49:37Z svn $
	*
	*
	*/ 

	// Configuration
	var IMG_WAIT 	= '<img src="squelettes/include/images/indicator.gif" width="16" height="16"'+ 'align="absmiddle">&nbsp;';
	var IMG_SUCCESS	= '<img src="squelettes/include/images/accept.png" align="absmiddle">&nbsp;';
	var IMG_ERROR	= '<img src="squelettes/include/images/delete.png" align="absmiddle">&nbsp;';

	// On preload les images
	preloadImage ('squelettes/include/images/clock.png');
	preloadImage ('squelettes/include/images/accept.png');
	preloadImage ('squelettes/include/images/delete.png');
	preloadImage ('squelettes/include/images/indicator.gif');

	/*
	 *	AJAX
	 *
	 *
	 */

	function makeRequest(url, formobj, caller, divmessage) {
		var http_request = false;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            setMessage(IMG_ERROR + 
				'Abandon :( Impossible de créer une instance XMLHTT', 
				divmessage);
            return false;
        }
		// Appel de la fonction permettant de traiter la reponse
		// Ceci serait a améliorer avec un format XML ou texte propriétaire
        http_request.onreadystatechange = function() { 
			alertContents(http_request, formobj, caller, divmessage); 
		};
		// On passe la requete : du GET ou du POST ?
        var GET_QUERY = url.indexOf ('?');
        if (GET_QUERY >= 0) {
            //alert ('GET');
            http_request.open('GET', url, true);
            http_request.send(null);
        } else {
            //alert ('POST');
            http_request.open('POST', url, true);
		    http_request.setRequestHeader(
			    "Content-type", "application/x-www-form-urlencoded");
            http_request.send(makePostStr(formobj));
        }
		return true;
    }

	/*
	 * 	FONCTION PRINCIPALE
	 *
	 *	Cette fonction javascript sert a appeler un script en envoyant les
	 * 	données en GET d'un formulaire formname.
	 *
	 *	Le caller est l'objet qui a tenté d'initier la transaction HTTP.
	 */	
	function sendRequest (url, formobj, caller, divmessage) {
		if (formobj) {
            disableForm (formobj, divmessage);
        }
        if (caller) {
		    hideElement (caller);
        }
		makeRequest(url, formobj, caller, divmessage);
	}	

	// Fonction auto-complete
	function auto_complete (script_name, value, fieldname, 
                            formobj, caller, divmessage) {
		var query = script_name + '?' + fieldname + '=' + value;
        //alert (query);
		makeRequest (query, formobj, caller, divmessage);
	}
	// Recupere la valeur d'un champ
	function get_value (field_name) {
		return (document.getElementById(field_name).value);
	}

	// Recupere la valeur d'un champ
	function set_value (field_name, fvalue) {
		document.getElementById(field_name).value = fvalue;
	}

	// Fonction masquant un élément HTML
	// le paramÃ¨tre elem est une chaine contenant un id
	function hideElement (elem_name) {
		document.getElementById(elem_name).style.visibility="hidden";
	}
	
	// Fonction (re)affichant un élément HTML
	// le paramÃ¨tre elem est une chaine contenant un id
	function showElement (elem_name) {
		document.getElementById(elem_name).style.visibility="visible";
	}

	// Fonction désactivant tous lesélÃments d'un formulaire
	function disableForm (formobj, divmessage) {
		setMessage('<br>'+IMG_WAIT+'<b>Traitement en cours...</b>', divmessage);
		var j = formobj.length;
		var i = 0;
		for (i=0; i < j; i++) {
			formobj[i].disabled = true;
		}
	}
	
	// Fade in d'un élément
	function fadeElement (obj_name) {
		Fat.fade_element(obj_name);
	}
	
	// Fonction (re)activant tous les éléments d'un formulaire
	function enableForm (formobj) {
		var j = formobj.length;
		var i = 0;
		for (i=0; i < j; i++) {
			formobj[i].disabled = false;
		}
	}

	// Fonction générant une chaine avec les valeurs des champs
	// d'un formulaire
	function makePostStr (formobj) {
		var str= '';
		//var formobj = document.forms[formname];
		var j = formobj.length;
		//alert ('Nombre elements : ' + j);
		var i = 0;
		for (i=0; i < j; i++) {
			if ((formobj[i].type == 'radio') || 
				(formobj[i].type == 'checkbox')) {
				if (formobj[i].checked == true) {
					str = str + formobj[i].name + '=' + formobj[i].value + '&';
				}
			} else {
				//Rapsys debug :
				//XXX: Les fonctions escape et unescape ne fonctionnent pas correctement pour les caractères non-ASCII et sont donc déconseillées !
				//http://developer.mozilla.org/fr/docs/Guide_JavaScript_1.5:Fonctions_pr%C3%A9d%C3%A9finies:Les_fonctions_escape_et_unescape
				//str = str + formobj[i].name + '=' + escape(formobj[i].value) + '&';
				str = str + formobj[i].name + '=' + encodeURIComponent(formobj[i].value) + '&';
			}
		}
		str = str + 'submit=1';
		return (str);
	}

    function alertContents(http_request, formobj, caller, divmessage) {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
				// Le script appele doit renvoyer un contenu
				// avec les messages contenant la description des erreurs
				// ou le message indiquant un succes
				var reponse =  http_request.responseText;
				var ERROR_FLAG = reponse.indexOf ('ERROR');
                // Pas d'icone seulement pour les SUCCESS
				var NOICO_FLAG = reponse.indexOf ('NOICON');
				var REDIRECT_FLAG = reponse.indexOf ('http');
				var DEBUG_FLAG = reponse.indexOf ('DEBUG');
				if (DEBUG_FLAG >= 0) {
					 var fullDebug = '<font face="Courier" size="2">' +
								 	  reponse + '</font>';
					 fullDebug = fullDebug.replace ("\n", "<br>");
					 setMessage (fullDebug, divmessage);
				} else {
					if (REDIRECT_FLAG >= 0) {
						//document.getElementById('frm_messages').innerHTML=reponse;
						document.location.href=reponse;
					} else {
               			if (ERROR_FLAG >= 0) {
							setMessage ('<br>' + IMG_ERROR + reponse,
								divmessage);
						} else {
                    		if (NOICO_FLAG >=0) {
					    		setMessage (reponse, divmessage);
                    		} else {
					    		setMessage ('<br>' + IMG_SUCCESS + reponse,
						  		divmessage);
                    		}
						}
						enableForm (formobj);
						showElement (caller);
					}
				}
            } else {
				setMessage (IMG_ERROR + 
					'Un probleme est survenu lors de la requete', divmessage);
				enableForm (formobj);
				showElement (caller);
            }
        }
    }

	// Affiche le message dans un div 
	function setMessage (str, divmessage) {
		var divmes = document.getElementById(divmessage);
		if (divmes) {
			divmes.innerHTML = str;
			return true;
		} else {
			alert ('<div> Message manquant !');
			return false;
		}
	}

	// Preload d'images
	function preloadImage (image_src) {
		if (document.images) {
			var preload_img = new Image ();
			preload_img.src = image_src;
		}
	}

	// Fonction pour l'utilisation de FCKEditor avec AJAX qui ne met
	// pas à jour le champ hidden correctement
	// 
 	// A Appeler comme suit : 
	// var MyUpdate = new FCKUpdate ();
	// puis fck.update () dans le javascript du bouton
	//
	function FCKUpdate () {
        this.update = function() {
        	for ( i = 0; i < parent.frames.length; ++i ) {
            	if ( parent.frames[i].FCK ) {
                	parent.frames[i].FCK.UpdateLinkedField();
				}
			}
        }
	}
	var fck = new FCKUpdate ();

	//Scroll to up
	function scrolltop()
	{
		if (navigator.appName == 'Microsoft Internet Explorer')
		{
			scroll(0, 0);
		}
	}

