MIXAD.tool.XMLHttpRequest = function ()
{
	//
}

MIXAD.tool.XMLHttpRequest.prototype._init = function()
{	
	// valeur par defaut du mimetype retourné par le serveur
	this._mimeType = "text/xml";
	// valeur par defaut du charset encoding retourné par le serveur
	this._charsetEncoding = "iso-8859-1";

	// tableau pour stocker les parametres de la requete http
	this._searchParam = new Array();

	// permet la mise en cache ou non des requetes au niveau du navigateur
	this._noCache = false;

	this._transaction = null;

	// on initialise l'objet xmlHttp une bonne fois pour toute
	this._httpObject = MIXAD.common.getXmlHttp();
}

// URI de la page de recherche sur le serveur;
MIXAD.tool.XMLHttpRequest.prototype._pageURI = null;

MIXAD.tool.XMLHttpRequest.prototype._contentType = null;

MIXAD.tool.XMLHttpRequest.prototype._searchParam = null;

// procedure de callback appelee apres un retour serveur concluant
MIXAD.tool.XMLHttpRequest.prototype._requestProcessCallBack = null;

MIXAD.tool.XMLHttpRequest.prototype._httpObject = null;



/**************************************************************************************
***	METHODES PUBLIQUES
***************************************************************************************/
MIXAD.tool.XMLHttpRequest.prototype.setSearchParam = function (paramName, paramValue)
{
	this._searchParam[paramName] = paramValue;
}
MIXAD.tool.XMLHttpRequest.prototype.setMimeType = function (mimeType)
{
	this._mimeType = mimeType;
}
MIXAD.tool.XMLHttpRequest.prototype.setCharsetEncoding = function (charsetEncoding)
{
	this._charsetEncoding = charsetEncoding;
}
MIXAD.tool.XMLHttpRequest.prototype.setNoCache = function (noCache)
{
	this._noCache = noCache;
}

/**************************************************************************************
***	METHODE PRIVEE
***************************************************************************************/
MIXAD.tool.XMLHttpRequest.prototype._getDataFromServer = function ()
{
	var cInstance = this;

	if (cInstance._httpObject && cInstance._httpObject.readyState < 4)
	{
		cInstance._httpObject.abort();
	}

	var searchURI = cInstance._pageURI + "?";
	
	for (var paramName in cInstance._searchParam)
	{
		var paramValue = cInstance._searchParam[paramName];
		// si la valeur du parametre est de type object on recupere la valeur de l'objet
		if (typeof(paramValue) == "object")
		{
			paramValue = paramValue.value;
		}
		searchURI += "&" + paramName + "=" + MIXAD.common.urlEncode(paramValue);
	}

	if (cInstance._noCache)
	{
		var dt = new Date();
		var dtString = "" + dt.getFullYear() + dt.getMonth() + dt.getDate() + dt.getHours() + dt.getMinutes() + dt.getMilliseconds();

		searchURI += "&dt=" + dtString;
	}

	searchURI = searchURI.replace("?&", "?");

	//cInstance._httpObject.onreadystatechange = function() { cInstance._requestProcessCallBack(); };

	cInstance._httpObject.open("GET", searchURI, true);
	// firefox
	if (cInstance._httpObject.overrideMimeType)
	{
		cInstance._httpObject.overrideMimeType(cInstance._mimeType);
	}

	cInstance._httpObject.setRequestHeader("Content-Type", cInstance._mimeType + ";charset=" + cInstance._charsetEncoding);

	// timer pour detecter quand la requete a terminé correctement son job et a reçu quelque chose en retour
	// (beaucoup plus efficace que la methode native "onreadystatechange" au comportement assez aleatoire)
	// merci yahoo :)
	cInstance._handleReadyState(cInstance);

	// on lance la recherche
	cInstance._httpObject.send(null);
}

MIXAD.tool.XMLHttpRequest.prototype._handleReadyState = function (o)
{
	try
	{
		o._transaction = window.setInterval
		(
			function()
			{
				if (o._httpObject && o._httpObject.readyState == 4)
				{
					window.clearInterval(o._transaction);
					o._requestProcessCallBack();
				}
			}
			, 50
		);
	}
	catch(e)
	{
		window.clearInterval(o._transaction);
	}
}
