<!--
//==============================================
//	@File : lib_nodevo_navigateurs.js
//	@Date : 08/08/2007 
//	@Auteur : D.CAMUS <dcamus@nodevo.com>
//	@Copyright : Nodevo 2007
//	@Version : 1.0
//	----------------------------
//	Librairie de fonctions standard 
//	Gestion des navigateurs
//==============================================

//	Modifs : 



///////////////////////////////////////////
// Variables de détection des navigateurs
///////////////////////////////////////////
///////////////////////////////////////////

// isNetscape4 : seul netscape 4 renverra true, les versions supérieurs de netscape renverrons false.
//		e.g. isNetscape4 renverra false pour Netscape 6

// iscompatibleXxx :  indique si le browser est compatible avec la version demandée,
//		e.g. isCompatibleInternetExplorer4 renverra true pour MSIE6

std_isNetscape	= ("Netscape"==navigator.appName)
std_isInternetExplorer	= ("Microsoft Internet Explorer"==navigator.appName)


std_isNetscape4 	   = (document.layers)? true:false
std_isCompatibleNetscape6  = (document.getElementById  && std_isNetscape )? true:false

std_isIE4	     = (document.all && !document.getElementById) ? true:false
std_isCompatibleIE4  = (document.all)? true:false
std_isCompatibleIE55 = (document.getElementById && std_isInternetExplorer)? true:false

std_isDHTML = (std_isNetscape4 || std_isCompatibleNetscape6 || std_isCompatibleIE4 || std_isCompatibleIE55)
std_isDOM   = (std_isCompatibleNetscape6 || std_isCompatibleIE55)


///////////////////////////////////////////
// Fonction de manipulation du DOM
///////////////////////////////////////////
///////////////////////////////////////////

function std_getReference(idObjet)
{
  if (std_isIE4 == true)
  {
     return document.all[idObjet] || null;
  }
  else if (std_isNetscape4)
  {
     var lyr = eval("document." + idObjet);
     lyr.style = lyr;
     return lyr;
  }  
  else
  {    
     return document.getElementById(idObjet)
  }
}

function std_getParent(idObjet)
{
  if (std_isInternetExplorer)
  {
    return idObjet.parentElement;
  }
  else if (std_isNetscape)
  {
    return idObjet.parentNode;
  }
  else
  {
    return idObjet.parentElement;
  }
}


/*
function setSourceHTML(id, valeur)
{
  if (!std_isNetscape4)
  {
     getReference(id).innerHTML = valeur
  }
  else
  {
      with(document.layers[id].document)
      {
	  open();
	  write(valeur);
	  close();
      }
  }

}
*/

function std_setSourceHTML(referenceObjet, valeur)
{
  if (!std_isNetscape4)
  {
     referenceObjet.innerHTML = valeur
  }
  else
  {
      with(referenceObjet.document)
      {
	  open();
	  write(valeur);
	  close();
      }
  }

}
function std_getSourceHTML(referenceObjet)
{
  return referenceObjet.innerHTML
}

function std_setStyle(referenceObjet, nomStyle)
{
  referenceObjet.className = nomStyle;
}

function std_cacherObjet(referenceObjet)
{
  referenceObjet.style.visibility = 'hidden'
}

function std_montrerObjet(referenceObjet)
{
  referenceObjet.style.visibility = 'visible'
}

function std_creerTableauLigne(table)
{
  var referenceLigne;
  if (std_isInternetExplorer)
  {
    referenceLigne = table.insertRow()
  }
  else if (std_isNetscape)
  {
    referenceLigne = document.createElement('TR');
    table.appendChild(referenceLigne);
  }
  return referenceLigne;
}

function std_supprimerTableauLigne(ligne)
{
    std_getParent(ligne).removeChild(ligne);
}

function std_creerTableauCellule(ligne, texteCellule)
{
  if (std_isInternetExplorer)
  {
    cellule = ligne.insertCell();
    cellule.innerHTML = texteCellule;
  }
  else if (std_isNetscape)
  {
    cellule = document.createElement('TD');
    cellule.innerHTML = texteCellule;
    ligne.appendChild(cellule);
  }
  return cellule;
}

/***************
 **    AJAX   	**
 **	          	**
 ***************/
 
function executerService(url, params, handler, sync)
{
	var monService = new NodevoService();
	monService.url = url;
	monService.params = params;
	monService.callback = handler;
	if (sync)
		monService.lancerSynchrone();
	else
		monService.lancer();
}

function executerServiceXml(url, params, handler)
{
	var monService = new NodevoService();
	monService.url = url;
	monService.params = params;
	monService.callback = handler;
	monService.lancerXml();
}

function NodevoService() 
{
	this.url = "";
	this.params = null;
	this.callback = null;
	
	this.reponseText = "";
	this.reponseXml = "";
} 

function NodevoService(_url) 
{
	this.url = _url;
	this.params = null;
	this.callback = null;
	
	this.reponseText = "";
	this.reponseXml = "";
} 

NodevoService.prototype={
	
	//La fonction de lancement de la requete
	lancer : function ()
	{
		this.lancer(false, false);
	},
	lancerXml : function ()
	{
		this.lancer(false, true);
	},

	lancerSynchrone : function ()
	{
		this.lancer(true, false);
	},

	lancerSynchroneXml : function ()
	{
		this.lancer(true, true);
	},

    lancer : function (synchrone, xml)
    {
        var maRequete;
		var textRetour = "";
		
		var handler = this.callback;
		
		if(std_isCompatibleIE55) // Spécifique IE
		{
			maRequete = new ActiveXObject("Msxml2.XMLHTTP");
		}
		else // Spécifique Mozilla
		{
			maRequete = new XMLHttpRequest();
		}
		
		//Gestion du callback (handler) si mode asynchrone
		if(!synchrone)
		{			
			maRequete.onreadystatechange = function() {
					if(maRequete.readyState==4)
					{
						if(xml)
						{
		                  handler(maRequete.responseXml);
		                  this.reponseXml = maRequete.responseXml;
		                }
		                else
		                {
		                    handler(maRequete.responseText);
		                    this.reponseText = maRequete.responseText;		                    
		                }
					}
				}
					
		}
		
		//Exceptions sur l'execution de la requete
		try
		{	
			if(this.params != null)
			{			
				//lancement de la requete
				
				maRequete.open("POST",this.url,(!synchrone));
				maRequete.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');		
				
			}
			else
			{
				maRequete.open("GET",this.url,true);
			}
				
			maRequete.send(this.params);

			//Gestion du mode synchrone
			if(synchrone)
			{
			
				if (maRequete.status == 200)
				{	
				
		                           if(xml)
		                           {
		                             this.reponseXml = maRequete.responseXml;
		                           }
		                           else
		                           {
								   handler(maRequete.responseText);
					this.reponseText = maRequete.responseText;					
		                           }
				}
			}
		}
		catch(e)
		{
			var message = e + "\r\n" + "HTTP - " + maRequete.status;
			alert(e);
		}
    },

	ajouterParam : function (nomParam, valeurParam)
	{
		var aInserer = nomParam + "=" + valeurParam;
		this.params = ((this.params == null) || (this.params == "")) ? aInserer : this.params + "&" + aInserer;
	}
}