/**
 * @class	ExceptionAEF
 * Gestion des exceptions javascript dans AEF
 *
 * @note    Copyright(C) CCI.fr SAS, 2004
 * @author  Florent LAOT <f.laot@entreprise.cci.fr>
 * @version $Revision: 2908 $
 * @date    $Date: 2005-10-20 14:22:39 +0200 (jeu, 20 oct 2005) $
 */
 
/**
 * Messages d'erreur
 */
var messages = new Array();

// Erreurs générales
messages['E0001'] = "Erreur JavaScript inconnue";
messages['E0002'] = "Code d'exception AEF inconnue"; 
messages['E0003'] = "Type d'exception AEF inconnue"; 
messages['E0004'] = "Erreur lors du chargement du module de recherche"; 
messages['E0005'] = 
	"Module de recherche multicritère provisoirement indisponible pour votre "
	+ "version de navigateur";
messages['E0006'] = "Vous ne pouvez sélectionner qu'un seul intervalle"; 
messages['E0007'] = 
	"Attention ! Votre navigateur ne permet pas d'utiliser toutes les "
	+ "fonctionnalités du site. Utilisez Mozilla Firefox 1 ou Microsoft "
	+ "Internet Explorer 6 pour en profiter.";

// Avertissements généraux
messages['W0001'] = "Echec du tri"; 
messages['W0002'] = "Ajout du critère incertain"; 
messages['W0003'] = "Module de recherche multicritère provisoirement indisponible";
messages['W0004'] = "Support du XML-RPC absent ou désactivé"; 

// Erreurs Selection.js
messages['ES001'] = "Impossible de supprimer toutes les options";

// Erreurs Bon de commande ClientInfosEntreprise.js
messages['EB001'] = "Merci de saisir une adresse e-mail valide pour que nous "
	+ "puissions vous envoyer le bon de commande";
// Erreurs Prise de commande ControlesPriseCommande.js
messages['EP001'] = "Merci de saisir une valeur dans le champ obligatoire " +
    "signalé par une bordure rouge";

// Erreurs Client.js
messages['WC001'] = "Absence d'une extension XML-RPC";
messages['WC002'] = "Verrouillage de la saisie";
messages['WC003'] = "Evaluation impossible de la liste récupérée via XML-RPC";
messages['WC004'] = "Recherche d'un parseur XML-RPC...";
messages['WC005'] = "Impossible d'instancier un parseur XML-RPC";

/**
 * Récupère le message d'erreur à afficher à l'internaute
 */
function EAEF_getMessage() {
	var reference = "";
	if(this.referenceExiste()) {
		reference = " (" + this.fichier + " l." + this.ligne + ")";
	}
	message = this.texte + reference;
	
	return message;
}

/**
 * Récupère le texte du message d'erreur à afficher à l'internaute
 *
 * XXX: Syntaxe des commentaires ci-dessous à vérifier / Doxygen
 * @param p_code: Code de l'erreur
 * @type p_code: string
 */
function EAEF_getTexte() {
	var texte = messages[this.code];
	
	if (typeof texte == 'undefined') {
		alert(new ExceptionAEF('E0002').getMessage());
		texte = "";
	}
	
	return texte;
} 

/**
 * Récupère le type du message d'erreur à afficher à l'internaute
 *
 * XXX: Syntaxe des commentaires ci-dessous à vérifier / Doxygen
 * @param p_code: Code de l'erreur
 * @type p_code: string
 */
function EAEF_getType() {
	var type = "typeInconnu";

	if (typeof this.code == 'string' && this.code.length > 0) {
		type = this.code.charAt(0);
	}
	
	return type;
} 

/**
 * Indique que l'exception est une erreur
 */
function EAEF_estErreur() {
	return (this.type == 'E');
}

/**
 * Indique que l'exception est un avertissement
 */
function EAEF_estAvertissement() {
	return (this.type == 'W');
}

/**
 * Ajoute une référence sur le fichier et la ligne de l'exception
 */
function EAEF_ajouterReference(p_fichier, p_ligne) {
	this.fichier = p_fichier;
	this.ligne = p_ligne;
}

/**
 * Détermine si une référence (nom du fichier & ligne de l'exception) existe
 */
function EAEF_referenceExiste() {
	return (this.ligne != 0);
}

/**
 * Affiche les avertissements dans la barre d'état
 */
function EAEF_afficher() {
	if (this.estAvertissement()) {
		window.status = "AVERTISSEMENT " + this.getMessage();
		window.setTimeout( "window.status = ''", this.delai);
	}
	if (this.estErreur()) {
		alert(this.getMessage());
	}
}
 
/**
 * Cette classe est la classe des exceptions javascript
 * dans AEF, l'(annuaire des entreprise de France.
 * Site officiel : http://www.aef.cci.fr
 */
function ExceptionAEF(p_code) {
	// Déclare les attributs
	this.code = p_code;	
	this.type = "W";
	this.texte = "";
	this.fichier = "";
	this.ligne = 0;
	this.delai = 5000;
	
	// Déclare les méthodes
	this.getMessage = EAEF_getMessage;
	this.getTexte = EAEF_getTexte;	
	this.getType = EAEF_getType;	
	this.estErreur = EAEF_estErreur;
	this.estAvertissement = EAEF_estAvertissement;
	this.ajouterReference = EAEF_ajouterReference;
	this.referenceExiste = EAEF_referenceExiste;
	this.afficher = EAEF_afficher;	
	
	// Initialisation
	this.texte = this.getTexte();
	this.type = this.getType();
}

