//////////////////////////////////////////////////////////////////////////
//AJAX
//////////////////////////////////////////////////////////////////////////
var current_ajax;
//////////////////////////////////////////////////////////////////////////
function HttpPostRequest( Url , Data , OnComplete )
{
    RequestPost = new CHttpRequest();
    RequestPost.SetURLTarget( Url );
    RequestPost.SetMethod( 'POST' );
    RequestPost.m_Data=Data;
    RequestPost.Open();
    RequestPost.m_OnComplete = OnComplete;
}
//////////////////////////////////////////////////////////////////////////
function CHttpRequest()
{
    this.m_Data = null;
    this.m_Method = "GET";
    this.m_Asynchrone = true;
    this.m_XMLHttpRequest = null; 
    this.m_URLTarget = "";
    this.m_OnLoading = null;
    this.m_OnLoaded = null;
    this.m_OnInteractive = null;
    this.m_OnComplete = null;
    this.m_ReturnText = null;
    
    if(window.XMLHttpRequest) // Firefox 
    {
       this.m_XMLHttpRequest = new XMLHttpRequest(); 
    }
    else if(window.ActiveXObject) // Internet Explorer 
    {
       this.m_XMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    }
    else 
    { // XMLHttpRequest non supporté par le navigateur 
       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    }
    
    
}
//////////////////////////////////////////////////////////////////////////
CHttpRequest.prototype.SetMethod = function( Method )
{
    if( Method == "POST" || Method == "GET" )
    {
       this.m_Method = Method;
       return;
    }
     alert('Method Post et Get uniquement:'+Method);
}
//////////////////////////////////////////////////////////////////////////
CHttpRequest.prototype.SetURLTarget = function( URLTarget )
{
    this.m_URLTarget = URLTarget;
}
//////////////////////////////////////////////////////////////////////////
CHttpRequest.prototype.Open = function()
{
    if( this.m_Method == "POST" )
    {
        this.m_XMLHttpRequest.open( this.m_Method , this.m_URLTarget , this.m_Asynchrone ); 
        this.m_XMLHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded charset=utf-8");
        this.m_XMLHttpRequest.send( this.m_Data );
    }
    
    if( this.m_Method == "GET" )
    {
        this.m_XMLHttpRequest.open( this.m_Method , this.m_URLTarget , this.m_Asynchrone ); 
        this.m_XMLHttpRequest.send( null );
    }
    this.m_XMLHttpRequest.onreadystatechange = this.OnReadyStateChange;
    
    var current_ajax = this;
    this.m_XMLHttpRequest.onreadystatechange  = function ()
    {
        //alert('plok:'+current_ajax.m_XMLHttpRequest.readyState);
        if(current_ajax.m_XMLHttpRequest.readyState == 1) 
        {
            if( current_ajax.m_OnLoading != null )
                current_ajax.m_OnLoading();
        }
        if(current_ajax.m_XMLHttpRequest.readyState == 2) 
        {
            if( current_ajax.m_OnLoaded != null )
                current_ajax.m_OnLoaded();
        }
        if(current_ajax.m_XMLHttpRequest.readyState == 3) 
        {
            if( current_ajax.m_OnInteractive != null )
                current_ajax.m_OnInteractive();
        }
        if(current_ajax.m_XMLHttpRequest.readyState == 4) 
        {
            this.m_ReturnText = current_ajax.m_XMLHttpRequest.responseText;
            
            //alert( this.m_ReturnText);
            if( current_ajax.m_OnComplete != null )
            {
                current_ajax.m_OnComplete( this.m_ReturnText );
            }
            //Analyse du code javascript
            //TODO :: si fichier js , html ou php
            //TODO :: si plusieur script
            responseText = new String( current_ajax.m_XMLHttpRequest.responseText );
            debut = responseText.indexOf( '<script type="text/javascript">' , 0 );
            fin = responseText.indexOf( '</script>' , 0 );
            eval( responseText.substr( debut + 31 , fin - debut - 31 ) );
            //alert( debut +" "+fin);
            //alert(responseText.substr( debut + 31 , fin - debut - 31 ));
        }
    }
}
//////////////////////////////////////////////////////////////////////////
CHttpRequest.prototype.OnReadyStateChange = function()
{
    //alert('ajax update');
    
    if(current_ajax.m_XMLHttpRequest.readyState == 1) 
    {
        if( current_ajax.m_OnLoading != null )
            current_ajax.m_OnLoading();
    }
    if(current_ajax.m_XMLHttpRequest.readyState == 2) 
    {
        if( current_ajax.m_OnLoaded != null )
            current_ajax.m_OnLoaded();
    }
    if(current_ajax.m_XMLHttpRequest.readyState == 3) 
    {
        if( current_ajax.m_OnInteractive != null )
            current_ajax.m_OnInteractive();
    }
    if(current_ajax.m_XMLHttpRequest.readyState == 4) 
    {
        if( current_ajax.m_OnComplete != null )
        {
            current_ajax.m_OnComplete();
            document.getElementById('UPDATE_STRING').innerHTML='pouet';
        }
        //Analyse du code javascript
        //TODO :: si fichier js , html ou php
        responseText = new String( current_ajax.m_XMLHttpRequest.responseText );
        debut = responseText.indexOf( '<script type="text/javascript">' , 0 );
        fin = responseText.indexOf( '</script>' , 0 );
        eval( responseText.substr( debut + 31 , fin - debut - 31 ) );
    }
}
//////////////////////////////////////////////////////////////////////////
function UpdateContents(http_request,updatediv,callback)
{
    if(http_request.readyState == 4 )
    {
        document.getElementById(updatediv).innerHTML=http_request.responseText;
        
        if (typeof callback != "undefined") 
        {
            callback();
        }
    }
    if(document.getElementById("LOADING"))
    {
        document.getElementById("LOADING").style.display = "none";
    }
    
}
//////////////////////////////////////////////////////////////////////////
function makeRequest(url,updatediv,callback)
{
	var http_request = false;

	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
    		http_request.overrideMimeType("text/html");
			//http_request.overrideMimeType('text/xml');
			// Voir la note ci-dessous à propos de cette ligne
		}
	} 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) {
		alert('Abandon :( Impossible de créer une instance XMLHTTP');
		return false;
	}
	http_request.onreadystatechange = function() 
	{ 
	    UpdateContents(http_request,updatediv,callback); 
	    if(http_request.readyState == 4 )
        {
            responseText = new String(http_request.responseText);
            debut = responseText.indexOf('<script type="text/javascript">',0);
            fin = responseText.indexOf('</script>',0);
            
            //alert(responseText.substr(debut+31,fin-debut-31));
            eval(new String( responseText.substr( debut + 31 , fin - debut -31 ) ) );
	        //alert(http_request.responseText);
	        //globaleval(http_request.responseText);
	        try
	        {
	            eval(http_request.responseText);
	        }catch (exception)
	        {
	        //    alert(exception);
	        }
	        
	    }
	    
	    //
	};
	http_request.open('GET', url, true);
	http_request.send(null);
	if(document.getElementById("LOADING"))
    {
	    document.getElementById("LOADING").style.display = "block";
	}
	//eval(http_request.responseText);
	//eval("alert('"+http_request.responseText+"')");
}
//////////////////////////////////////////////////////////////////////////
function globaleval(script)
{
  if(window.execScript)
  {
    return window.execScript(script);
  } 
  else if(navigator.userAgent.indexOf('KHTML') != -1)
  { //safari, konqueror..
      var s = document.createElement('script');
      s.type = 'text/javascript';
      s.innerHTML = script;
      document.getElementsByTagName('head')[0].appendChild(s);
  } 
  else 
  {
    return window.eval(script);
  }
}










