/**
 * @class Page
 * Classe des fonctions appellées depuis la page HTML.
 *
 * @note          Copyright(C) CCI.fr SAS, 2004
 * @author        Olivier GUILLOUX <olivier.guilloux@entreprise.cci.fr>
 * @author        Florent LAOT <f.laot@entreprise.cci.fr>,
 * @author        François DE FAUCAL <f.juindefaucal@entreprise.cci.fr>
 * @author        Yassine CHAOUCHE  <yassine.chaouche@kinoa.com>
 * @version       $Revision: 4436 $
 * @date          $Date: 2008-03-18 14:27:00 +0100 (mar, 18 mar 2008) $
 */
 
/* (DES)ACTIVATION D'UN FILTRE */ 

/**
 * Variable globale
 */
var valeurFiltre = "";
var verrouFiltrage = false;

/**
 * Bloque la saisie dans le champs
 */
function desactiverFiltre(p_nomFiltre) {
        with(document.getElementById(p_nomFiltre)) {    	
            style.color = "#cccccc";
    }
}

/**
 * Active à nouveau la saisie dans le champs
 */
function activerFiltre(p_nomFiltre) {
        with(document.getElementById(p_nomFiltre)) {    	
            style.color = "#666666";
            if (value != valeurFiltre) {
                    value = valeurFiltre;
            } else {
                    focus();
            }
    }
}

/* AFFICHAGES */

/**
 * Afficher la barre de sous-onglets
 *
 * @param p_idBarreSousOnglet : Identifiant de la barre
 */
function P_montrerBarre(p_idBarreSousOnglet){
    this.gbo.afficherBarreSousOnglets(p_idBarreSousOnglet);

    // Modifie le curseur sous IE 5.5
    if(navigateur.estInternetExplorer() && navigateur.version == 5.5) {
            document.getElementById("localisation").style.cursor = "ne-resize";
            document.getElementById("activites").style.cursor = "ne-resize";
            document.getElementById("cpf").style.cursor = "ne-resize";
            document.getElementById("donneesChiffrees").style.cursor = "ne-resize";
            document.getElementById("info").style.cursor = "ne-resize";
            document.getElementById("coordonnees").style.cursor = "ne-resize";
    }
}

/**
 * Afficher l'ensemble de champs Ã  partir de son sous-onglet
 *
 * @param p_idFamille : Identifiant de la barre d'onglets -DT- contenant
 * l'ensemble de champs -FIELDSET- Ã  afficher
 *
 * @param p_idEnsemble : Identifiant de l'ensemble de champs Ã  afficher
 *
 * @param p_indexCritere : Numero d'ordre du critere dans la barre de
 * sous-onglets -DD-
 */
function P_montrerChamp(p_idFamille, p_idEnsemble, p_index,p_service){
    // Affiche l'ensemble de champs correspondant
    this.formulaire.afficherChamp(p_idEnsemble, p_idFamille, p_index);
    this.afficherStatistiques() && this.zoneStatistiques.rafraichir(p_service);
}

/**
 * Construire l'url du service a appeler
 *
 * @param p_filtre: Filtre a appliquer sur le service
 */
function P_construireURL(p_service, p_filtre, p_filtreExclusion){
    var url =  this.urlService + "/services/" + p_service + "/executer";

    // Cas particulier des NAF filtres
    url = url.replace("valeursActivitesG", "g");
    url = url.replace("valeursActivitesC", "c");
    // Pour cantons et communes
    url = url.replace("valeursLocalisationC", "c");
    // Pour epci
    url = url.replace("valeursLocalisationE", "e");
    // Pour groupesCPF
    url = url.replace("valeursCpfG", "g");
    // Pour classesCPF et categorie CPF
    url = url.replace("valeursCpfC", "c");
    // Pour sous catÃÂ©gorie CPF
    url = url.replace("valeursCpfS", "s");
    
    //
    if (p_filtre.length > 0) {
            url += "?p_filtre=" + p_filtre + "&p_format=javascript";
    }
    else {
            url += "?p_format=javascript";
    }
    if (p_filtreExclusion.length > 0){
        url += "&p_filtreExclusion=" + p_filtreExclusion;
    }

    if (this.afficherVolumetrie()) {
        //alert(p_service);
        switch(p_service) {
            /*Onglet Localisation*/
            case "regions" :
            case "departements":
            case "cantons":
            case "epci":
            case "communes":
            case "cci":
            /*Onglet Activite*/
            case "sectionsNAF":
            case "sousSectionsNAF":
            case "divisionsNAF":
            case "valeursActivitesGroupesNAF" :
            case "valeursActivitesClassesNAF":
            case "categorie":
	    case "metier":
	    case "domaine":
            /*Onglet Produits/Services*/
            case "sectionsCPF":
            case "sousSectionsCPF":
            case "divisionsCPF":
            case "groupesCPF":
            case "classesCPF":
            case "categoriesCPF":
            case "sousCategoriesCPF":
            case "effectif" :
            /*Onglet Profil*/
            case "formeJuridique":
            case "statut":
            /*Onglet Coordonnées*/
            case "presence":
            url +="&p_volumetrie=1";
            break;
        }
    }
    return url;
}

function P_afficherStatistiques(){
    return window.location.href.indexOf('ecoStat') != -1
}


function P_afficherVolumetrie() {
    //return true;
    adresse  = window.location.href;
    //alert(adresse);
    position = adresse.indexOf("aideRechercheMultiligne");
    if (position < 0){
       position = adresse.indexOf("ecoStat");
    }
    //alert(position);
    if (position != -1) {
	//alert('VRAI');
	return true;
    }
    else {
	//alert('FAUX');
	return false;
    }
}

/**
 * Valider le filtre pour le service passe en parametre
 *
 * @param p_service: Identifiant du service
 * @param p_idSousOnglet: Identifiant du sous onglet
 */
function P_getInformationsService(p_service, p_idSousOnglet) {
    if (!verrouFiltrage) {
	// Bloque la saisie dans le champs durant l'appel XML-RPC
	// afin d'eviter une anomalie dans les appels successifs
	identifiant = p_idSousOnglet.charAt(0).toUpperCase() + p_idSousOnglet.substring(1, p_idSousOnglet.length);
	nomFiltre = "filtre" + identifiant;
	
	// Desactive le filtre
	desactiverFiltre(nomFiltre);
	
	verrouFiltrage = true;
	
	var filtre = this.formulaire.lireFiltre(p_idSousOnglet);
	var filtreExclu = this.formulaire.lireFiltreExclusion(p_idSousOnglet);
	url = this.construireURL(p_service, filtre, filtreExclu);
	
	client = new ClientListeFiltre();
	client.setUrl(url); 
	idSelection = client.validerFiltre(p_idSousOnglet);
	
	this.formulaire.supprimerOptionsSuperflues(idSelection);
    }
    
    // Autorise a nouveau la saisie et redonne la main au champs sous IE
    activerFiltre(nomFiltre);    
}

/* TRANSFERTS */

/**
 * Transferer les elements -OPTION- choisis de la selection -SELECT- de gauche
 * vers la selection de droite
 */
function P_transferer(){
    this.formulaire.transferer();
}

/**
 * Tranferer l'ensemble des elements -OPTION- de la selection -SELECT- de gauche
 * vers la selection de droite
 */
function P_toutTransferer() {
    this.formulaire.toutTransferer();
}


/* SUPPRESSIONS */

/**
 * Selectionner l'ensemble des elements -OPTION- choisis de la selection de
 * droite
 */
function P_selectionnerTout() {
    this.formulaire.selectionnerTout();
}

/**
 * Supprimer les criteres -OPTION- selectionnes de la selection -SELECT- de
 * droite
 */
function P_supprimerCriteresSelectionnes() {
    this.formulaire.supprimer();
}

/**
 * elimine l'ensembe des criteres selectionnes
 */
function P_effacerTouteSelection() {
    this.formulaire.effacerTouteSelection();
}

/**
 */
function P_compter() {
    // Determine le nombre de criteres selectionnes
    var nombreCriteres = lib.getById('listeCriteresSelectionnes').length;

    // Affiche une erreur si moins d'un critere est selectionne
    if (nombreCriteres > 0) {
        // Selectionne tout
        this.selectionnerTout();

        // Rend inactif toutes les selections et saisies du contenu
        // et affiche une animation
        lib.setClass(lib.getById('listeChampsRecherche'), 'desactive');
        
        // Soumet le formulaire
        document.getElementById('formulaireRecherche').submit();
    } else {
        // Informe l'utilisateur de son erreur
        alert("Veuillez selectionner au moins un critere !");
    }
}

function P_getInfobulle() {
    return this.infobulle;
}

/* CONSTRUCTEURS */

/**
  * Classe Page
 *
 * @param p_url: URL du site
 */
function Page(p_url) {

    // Déclaration les methodes
    this.montrerBarre = P_montrerBarre;
    this.montrerChamp = P_montrerChamp;
    this.getInformationsService = P_getInformationsService;
    this.transferer = P_transferer;
    this.selectionnerTout = P_selectionnerTout;
    this.toutTransferer = P_toutTransferer;
    this.supprimerCriteresSelectionnes = P_supprimerCriteresSelectionnes;
    this.effacerTouteSelection = P_effacerTouteSelection;
    this.compter = P_compter;
    this.getInfobulle = P_getInfobulle;
    this.construireURL = P_construireURL;
    this.afficherVolumetrie =  P_afficherVolumetrie; 
    this.afficherStatistiques = P_afficherStatistiques;
    // Déclaration des attributs
    this.formulaire = new Formulaire();
    this.urlService = p_url;
    this.gbo = new GestionnaireBarreOnglets(this.formulaire);    
    this.infobulle = new Infobulle('infobulleOption', 'infobulle', 'Cliquez');
    if (this.afficherStatistiques()){
	this.zoneStatistiques = new ZoneStatistiques();
    }


}

/* FONCTIONS PRINCIPALES */

/**
 * Affiche un message pour avertir l'utilisateur qu'il ne peut pas
 * acceder au site a partir du navigateur ou de l'ordinateur ou il se
 * trouve actuellement
 */
function avertirUtilisateur() {
        e = new ExceptionAEF("E0004");
        e.afficher();	
}

function masquerFormulaireRecherche() {
        with(document) {
                getElementById('principale').style.visibility = 'hidden';
                getElementById('chemin').style.visibility = 'hidden';
                getElementById('titre').style.visibility = 'hidden';		
        }
}

/**
 * Fonction principale appelee au chargement de la page.
 *
 * @param p_url: URL du site
 */
function accueil(p_id) {
        // Verfie la compatibilite du navigateur avec le site
	var navigateur = new Navigateur();
        var parametres = "";
                
        parametres += "?p_compatibiliteXMLRPCNavigateur:boolean=";
    if (!navigateur.estCompatibleXMLRPC()) {		
            var avertissement = new ExceptionAEF('W0004');    			
            parametres += "False";
    }	
    else {
            parametres += "True";
    }

        parametres += "&p_compatibiliteAEFNavigateur:boolean=";    
        if (!navigateur.estCompatibleAEF()) {		
            var avertissement = new ExceptionAEF('W0003');    	
            parametres += "False";
    } else {
            parametres += "True";
    }
    
    parametres += "&p_navigateurEstInternetExplorer:boolean=";    
        if (!navigateur.estInternetExplorer()) {		
            var avertissement = new ExceptionAEF('W0003');    	
            parametres += "False";
    } else {
            parametres += "True";
    }
    
    // Avertit discretement l'utilisateur si besoin
	if (avertissement instanceof ExceptionAEF) {    
            avertissement.afficher();
                
                // Change le lien vers 
	    if (typeof document.getElementById(p_id) == 'object') {
                        document.getElementById(p_id).href = 
                                document.getElementById(p_id).href + parametres;
                }
        }
}


/**
 * Fonction principale appelee au chargement de la page.
 *
 * @param p_url: URL du site
 */
function principale(p_url) {
    // Charge la librairie commune
    lib = new Bibliotheque();
    
    // Teste le navigateur
    navigateur = new Navigateur();
    if (!navigateur.estCompatibleAEF() || !navigateur.estCompatibleXMLRPC()) {
	location.href = location + "/../statiques/recommandationsTechniques";
	//var erreur = new ExceptionAEF('E0005');    	
    	//erreur.afficher();
    	
	// Cas d'I.E. 5.5
    } 
    else {
	if (navigateur.moteur == "MSIE" && navigateur.version >= 5.5
            && navigateur.version < 6) {
	    var attention = new ExceptionAEF('E0007');
	    attention.afficher();
	}
    }
    
    // Tente de creer la page en javascript et affiche du formulaire
    page = new Page(p_url);
    page.montrerBarre('localisation');
    /*	try {		
	page = new Page(p_url);
	//souris = new Souris();
	//infobulle = page.getInfobulle();
	page.montrerBarre('localisation');
	} catch(exception) {
	if (exception instanceof ExceptionAEF) {
	erreur = exception;
	} else {
	erreur = new ExceptionAEF('E0001');
	}    
	erreur.afficher();    	
	} 
    */    	
}

/**
 * Recupere la valeur de l'attribut TITLE de l'option active (cliquee)
 * d'une selection identifiee sur la page
 */
function rechercherTitle(p_idSelection) {
        var index = -1;
    var selection = document.getElementById(p_idSelection);           

    if (selection.selectedIndex >= 0) {	    
            return selection.options[selection.selectedIndex].getAttribute('title');
    }
    return "Cliquez sur le libellé pour le lire entièrement";
}


