/**
 * @class	Navigateur
 * Détection du type de navigateur
 *
 * @note    Copyright(C) CCI.fr SAS, 2005
 * @author  Florent LAOT <f.laot@entreprise.cci.fr>
 * @version $Revision: 3357 $
 * @date    $Date: 2006-01-26 16:55:11 +0100 (jeu, 26 jan 2006) $
 */

/**
 * Détermine les propriétés du navigateur à partir de la variable
 * navigator.userAgent
 */
function N__initialiser() {	

	// Récupère le nom
	this._tester("konqueror", "nom", "Konqueror");
	this._tester("epiphany", "nom", "Epiphany");
	this._tester("opera", "nom", "Opera");
	this._tester("msie", "nom", "Microsoft Internet Explorer");
	this._tester("firefox", "nom", "Firefox");		
	this._tester("netscape", "nom", "Netscape");		
	this._tester("mozilla", "nom", "Mozilla");
	this._tester("", "nom", "Navigateur alternatif non identifié");			
		
	// Récupère la version
	this._tester(this.nom + "/10.", "version", 10);
	this._tester(this.nom + "/9.", "version", 9);
	this._tester(this.nom + "/8.0", "version", 8.0);
	this._tester(this.nom + "/8.", "version", 8);
	this._tester(this.nom + "/7.", "version", 7);
	this._tester(this.nom + "/6.", "version", 6);
	this._tester(this.nom + "/5.", "version", 5);
	this._tester(this.nom + "/4.", "version", 4);
	this._tester(this.nom + "/3.", "version", 3.0);
	this._tester(this.nom + "/2.", "version", 2.0);
	this._tester(this.nom + "/1.0", "version", 1.0);	
	this._tester(this.nom + "/1.", "version", 1);
	this._tester(this.nom + "/0.", "version", 0);		
	this._tester("mozilla/5.0", "version", 5.0);
	this._tester("msie 6.0", "version", 6.0);
	this._tester("msie 6", "version", 6);
	this._tester("msie 5.5", "version", 5.5);
	this._tester("msie 5.1", "version", 5.1);
	this._tester("msie 5.0", "version", 5.0);
	this._tester("msie 5", "version", 5);	
	this._tester("11 ", "version", 11);
	this._tester("10.", "version", 10);
	this._tester("9.", "version", 9);
	this._tester("8.", "version", 8);
	this._tester("7.", "version", 7);
	this._tester("6.", "version", 6);
	this._tester("5.", "version", 5);
	this._tester("4.", "version", 4);
	this._tester("3.", "version", 3);
	this._tester("2.", "version", 2);
	this._tester("1.", "version", 1);
	this._tester("0.", "version", 0);
	this._tester("11 ", "version", 11);
	this._tester("10 ", "version", 10);
	this._tester("9 ", "version", 9);
	this._tester("8 ", "version", 8);
	this._tester("7 ", "version", 7);
	this._tester("6 ", "version", 6);
	this._tester("5 ", "version", 5);
	this._tester("4 ", "version", 4);
	this._tester("3 ", "version", 3);
	this._tester("2 ", "version", 2);
	this._tester("1 ", "version", 1);
	this._tester("0 ", "version", 0);
	this._tester("", "version", -1);
	
	
	// Récupère le moteur
	this._tester("khtml", "moteur", "KHTML");
	this._tester("opera", "moteur", "Opera");
	this._tester("msie", "moteur", "MSIE");
	this._tester("gecko", "moteur", "Gecko");
	this._tester("", "moteur", "Moteur alternatif non identifié");
		
	// Récupère le système
	this._tester("windows", "systeme", "Windows");
	this._tester("linux", "systeme", "Linux");
	this._tester("", "systeme", "Système d'exploitation indéterminé");
}

/**
 * Affecte la valeur à la variable si l'agent contient la chaine recherchée
 * et que la variable n'est pas encore initialisée
 */
 function N__tester(p_chaine, p_variable, p_valeur) {
	if ( eval("this." + p_variable + ".length == 0") &&
		this.agent.toLowerCase().indexOf(p_chaine.toLowerCase()) != -1) {
		eval("this." + p_variable + " = \"" + p_valeur + "\"");
	} 	
 }
 
 /**
  * Détermine la compatibilité ou l'incompatibilité du navigateur avec les
  * fonctionnalités du site www.aef.cci.fr
  */
 function N_estCompatibleAEF() {
 	if ((
 		this.moteur == "Gecko" 
	|| (this.moteur == "MSIE" && this.version >= 5.5)	
	|| (this.moteur == "Opera" && this.version >= 9)	
	) && this.estCompatibleXMLRPC()) {
		return true;		
	}
 	return false;
 }
 
 /**
  * Retour sous forme d'une chaine de caractère l'interprétation faite
  * par la classe Navigateur de la variable javascript navigator.userAgent
  */
 function N_getInformations() {
	return this.nom + " " + this.version + " (" + this.moteur + ") sous " 
		+ this.systeme;
 }
 
/**
 * Détermine si le navigateur supporte le XML-RPC
 */
function N_estCompatibleXMLRPC() {

	// Essaie de créer le type d'objet XMLHttpRequest sous IE
	if (typeof XMLHttpRequest == 'undefined') {
    	XMLHttpRequest = function() {
        	var msxmls = ['MSXML4', 'MSXML3', 'MSXML2', 'Microsoft'];

	        for (var i=0; i < msxmls.length; i++) {
    	        try {
        	        return new ActiveXObject(msxmls[i]+'.XMLHTTP');
            	} catch (exception) {
	            }
    	    }
    	}
	}    
	
	// Retourne vrai si le navigateur permet la création d'un objet HttpRequest
    if (typeof XMLHttpRequest != 'undefined') {	 
    	try { 
    		new XMLHttpRequest();
    		return true;
    	} catch(exception) {}	    
	}
	return false;
}

/**
 * Détermine si le navigateur est un Internet Explorer
 */
function N_estInternetExplorer() {
	return (this.moteur == "MSIE");
}

/**
 * Détermine si le moteur de rendu du navigateur se base sur Gecko (Mozilla 
 * Layout Engine)
 */
function N_estGecko() {
	return (this.moteur == "Gecko");
}
 
/**
 * Cette classe recupère les propriétés du navigateur
 */
function Navigateur() {
	// Déclare les attributs
	this.agent = navigator.userAgent;
	this.nom = "";
	this.version = "";
	this.moteur = "";
	this.systeme = "";
	
	// Déclare les méthodes
	this._tester = N__tester;
	this._initialiser = N__initialiser;
	this.estCompatibleAEF = N_estCompatibleAEF;
	this.getInformations = N_getInformations;
	this.estCompatibleXMLRPC = N_estCompatibleXMLRPC;
	this.estInternetExplorer = N_estInternetExplorer;	
	this.estGecko = N_estGecko;
	
	// Initialise l'instance du navigateur
	this._initialiser();
}
