// -----------------------------------------------------------------------------------------
// 
// AJAX ! 
// 
// -----------------------------------------------------------------------------------------
Ajax = function() 
{
        var xhr_object = null;
        // On declare un pointeur en memoire stockant l'instance de l'objet
        var me = this;
            
        this.contentFinished = function(e) {}
        this.onContentFinished = function()
        { 
             if ( xhr_object.readyState == 4 )
             {
                 // On fait reference au pointeur memoire
                 me.contentFinished(xhr_object);
             }
        }
        this.getContentStart = function(fileName)
        {
        
            xhr_object = null;
            
            var argv = arguments;
            var argc = arguments.length;

            var method = (argc > 1) ? argv[1] : 'GET';
            var params = (argc > 2) ? argv[2] : null;
            var useAsync = true;


            if(window.XMLHttpRequest) // Firefox
               xhr_object = new XMLHttpRequest();
            else if(window.ActiveXObject) // Internet Explorer
               xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
            else // XMLHttpRequest non supporté par le navigateur
               throw("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");


            // TODO : revoir les params 
            if ( params != null )
            {
                fileName += '?';
                for ( s in params )
                    fileName += s[0] + '=' + s[1] + '&';

                fileName = fileName.remove(fileName.length - 1, 1);
            }
			

            xhr_object.open(method, fileName, useAsync);
            
            // On fait reference au pointeur memoire
            xhr_object.onreadystatechange = me.onContentFinished;

            if ( method == "POST" ) 
    	        xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
	 
	        xhr_object.send(params); 
        }
}

Ajax_XML = function() 
{
        var xhr_object = null;
        // On declare un pointeur en memoire stockant l'instance de l'objet
        var me = this;
            
        this.contentFinished = function(e) {}
        this.onContentFinished = function()
        { 
             if ( xhr_object.readyState == 4 )
             {
                 // On fait reference au pointeur memoire
                 me.contentFinished(xhr_object);
             }
        }
        this.getContentStart = function(fileName)
        {
        
            xhr_object = null;
            
            var argv = arguments;
            var argc = arguments.length;

            var method = (argc > 1) ? argv[1] : 'GET';
            var params = (argc > 2) ? argv[2] : null;
            var useAsync = true;


            if(window.XMLHttpRequest) // Firefox
               xhr_object = new XMLHttpRequest();
            else if(window.ActiveXObject) // Internet Explorer
               xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
            else // XMLHttpRequest non supporté par le navigateur
               throw("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");


            // TODO : revoir les params 
            if ( params != null )
            {
                fileName += '?';
                for ( s in params )
                    fileName += s[0] + '=' + s[1] + '&';

                fileName = fileName.remove(fileName.length - 1, 1);
            }
			
			xhr_object.overrideMimeType('text/xml');
            xhr_object.open(method, fileName, useAsync);
            
            // On fait reference au pointeur memoire
            xhr_object.onreadystatechange = me.onContentFinished;

            if ( method == "POST" ) 
    	        xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
	 
	        xhr_object.send(params); 
        }
}

// ---------------------------------------------------------------------------------------- FONCTIONNEMENT IE UNIQUEMENT
// ------------------------------------- Fonction qui charge un fichier XML
function loadXML (url)
{
       var xmlDoc;
       try 					/* chargement du fichier XML */
		{
          if (document.implementation && document.implementation.createDocument) // Firefox
          {
             xmlDoc = document.implementation.createDocument('', '', null);
             xmlDoc.load(url);
				
          } else if (window.ActiveXObject) // ActiveX pour Internet Explorer
		  {	 
				 try 
				 {
					xmlDoc = new ActiveXObject('Msxml2.XMLDOM');
				 }catch (e) 
				 {
					xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
				 }
				 xmlDoc.async = false;
				 xmlDoc.load(url);
	        
    	  } else if (window.XMLHttpRequest) {  // à l'aide de lobjet XMLHTTPRequest
		  
				 xmlDoc = new XMLHttpRequest();
				 xmlDoc.overrideMimeType('text/xml');
				 xmlDoc.open('GET', url, false);
				 xmlDoc.send(null);
				 if (this.xmlDoc.readyState == 4) 
				 {
					 xmlDoc = xmlDoc.responseXML;
				 }
          }
        } catch (e) {
          return e;
        }
        return xmlDoc;
}
function transform (xml, xsl)
{
        try 
		{
			var result = "";
            if (window.XSLTProcessor)				// Firefox
            {
				// NON UTILISE
			} else if (window.ActiveXObject)
			{		// Internet Explorer
				result = xml.transformNode(xsl);
            }
		    return result;
        } 
		catch (e) 
		{
			alert("Erreur Exception : "+e);
          	return e;
        }
}
// --------------------------------------------------------------------------------------------------------------------


/* ------------------------------- Fonction qui fais une demande à un serveur FORMAT TEXTE ------------------ */
function Load_Data( Page , OnReadyStateFunc )
{
 	var obj_Ajax = new Ajax();
    obj_Ajax.getContentStart(Page);
	obj_Ajax.contentFinished = function (OBJ)
	{
		if (OBJ.readyState == 4) 
		{
			 OnReadyStateFunc( OBJ.responseText );
			 obj_ajax = null;
			 return;
		}
	}
}

// ------------------------------- Fonction qui fais une demande à un serveur FORMAT XML + TRANSFORMATION ----- */
function Load_Data_XSLT( Page , XSLT , OnReadyStateFunc )
{
	if (window.XSLTProcessor)				// Firefox
    {
 		var obj_Ajax_XSL = new Ajax_XML();
        obj_Ajax_XSL.getContentStart(XSLT);
            
            obj_Ajax_XSL.contentFinished = function(XSL_File)
            {
                    var xslStylesheet, myDOM, xmlDoc;
                    var xsltProcessor = new XSLTProcessor();

                    xslStylesheet = XSL_File.responseXML;
                    xsltProcessor.importStylesheet(xslStylesheet);

                    var obj_Ajax_XML = new Ajax_XML();
                    obj_Ajax_XML.getContentStart(Page);
                    obj_Ajax_XML.contentFinished = function(XML_File)
                    {
                         xmlDoc = XML_File.responseXML;
                         var fragment = xsltProcessor.transformToFragment(xmlDoc, document);
                         var tmpElement = document.createElement('p'); 
                         tmpElement.appendChild(fragment)
						 OnReadyStateFunc( tmpElement.innerHTML);
                    }
             }

			 }else{	// IE
			 
				var xml = loadXML(Page);
				var xsl = loadXML(XSLT);
		
				var result = transform( xml , xsl ); 
				OnReadyStateFunc( result );  
			 }
}

/* ------------------------------ Fonction qui charge la page dans un DIV  ------------------------------------ */
function Charge_HTML( Composant , Data )
{
	var obj = document.getElementById(Composant);
	if( obj != null ) obj.innerHTML = Data;
}


