// @author Fred Leclerc, fred.leclerc@gmail.com

// Initialisation d'un tableau utilisé à l'interne afin de pouvoir savoir
// quelle ID sont utilisé dans le html.
var region = new Array();

/**
 *  Représente des variables systemes qui détermine le mode, le contextPath et
 *  la langue.
 */
 
var server = "http://192.168.0.26:8080/v3/";
var debugMode = false;
var contextPath = "";
var lang = "";
var INTERVAL = 0;
var bodyLoaded = false;

// Groupe de varialbe plus oiu moins utiles
var imagePathCheck = "/images/search/";
var imageOnlyCheck = "check.gif";
var imageOnlyUncheck = "uncheck.gif";
var imageCheck = "/images/search/check.gif";
var imageUncheck = "/images/search/uncheck.gif";

/**
 *  Représente des indices a utiliser lorsque la méthode extractDataFromTemplate
 *  est appellé. Plusieurs retour de valeur sont possibles.
 */ 
var INDEX_VILLE = 0;    // représente l'index pour la donnée villeid
var INDEX_SUB = 1;      // représente l'index pour la donnée sous-region
var INDEX_REGION = 2;

/**
 *  Représente les éléments courants qui sont sélectionnés
 */
var currentSubregionId = -1;
var currentRegionId = -1;
var subIdToDisplayVilleFromPreviousSearch = -1;
var currentRegionIdBureau = -1;
var previousCurrentRegionIdBureau = -1;

var movieName = "carte";

/**
 *  Représente les différentes listes utilisés
 */
var currentTotalVilleByRegionList = []; // Liste de ville par région
var currentSubregionVilleList = [];     // Liste de ville par sous-région
var currentSubregionList = [];          // Liste des sous-region
var nbTotalVille = 0;

/*
 *  Représente les éléments sélectionné et utilisé pour la recherche.
 */
var villeIds = [];      // Liste des villes sélectionnée
var subIds = [];        // Liste des sous-région sélectionnée
var regionIds = [];     // Liste des régions sélectionnée

/**
 *  Représente les différentes couleurs utilisé pour les mouse over
 */
var WHITE = '#FFFFFF';
var BLUE_HOVER = '#75A1BE';
var FONT_COLOR = '#666666';
var SELECTED_BG = '#BACBD2';
var CURRENT = '#C8DFED';

/**
 *  Valeurs hash a passer dans l'url de la fiche pour les differents onglets ...
 */

var HASH_VIRTUELLE = "vv";
var HASH_ALBUM = "ap";
var HASH_CARTE = "cg";



/*******************************************************************************
 *
 *  DEBUT DES FONCTIONS
 *
 ******************************************************************************/

function parseUrlHash(latititude, longitude) {

    var hashValue = location.hash;
    if(hashValue == "#" + HASH_ALBUM){
        try {
            var elm = document.getElementById("albumTab");
            toggleTabState(elm, 'album');
        }catch(e){}
    }else if(hashValue == "#" + HASH_VIRTUELLE){
        try {
            var elm = document.getElementById("mediaTab");
            toggleTabState(elm, 'media');
        }catch(e){}
    }else if(hashValue == "#" + HASH_CARTE){
        try {
            var elm = document.getElementById("carteTab");
            toggleToCarte(elm, 'carte', latititude, longitude);
        }catch(e){}
    }

}

function doneLoading(msg){
    if(msg != ''){
        alert(msg);
    }
    bodyLoaded = true;
}

/**
 *  Cette fonction permet d'afficher des popup javascript et de permettre leur
 *  désactivation grâce à une variable globale (debugMode)
 */
function popup(msg) { 
    if (debugMode) {
        alert(msg);
    }
}



/*
 *  Cette fonction doit être testé sur tous les browser et etre transférer dans functions.js
 */
function enableElement(element, enabled) {
    element.disabled = !enabled;  
}

/**
 *  Cette fonction attribut une valeur pour le contexte d'application (path) et
 *  la langue d'affichage
 */
function setContextPathAndLang(contextP, lng){
    contextPath = contextP;
    lang = lng;
}

/**
 *  Cette fonction permet de wrapper le petit icone de loading
 */
function showLoading() {
    showElement("ajaxloading");
}

function hideLoading() {
    hideElement("ajaxloading");
}

/**
 *  Cette fonction sert a appliquer le bon parametre lors du choix de la langue
 */
function setLinkParam(chk, path){
    var display = getCssDisplay(chk);
    if(display){
        document.getElementById("linkfr").href = path + "/fr/?remember=true";
        document.getElementById("linken").href = path + "/en/?remember=true";
    }else{
        document.getElementById("linkfr").href = path + "/fr/?remember=false";
        document.getElementById("linken").href = path + "/en/?remember=false";
    }
}

function setApplicationParameters(lng, path, bundle) {
    setContextPathAndLang(lng, path);
}

/**
 *  Cette fonction sert à catcher l'événement pour faire revenir le user 
 *  à la page précédente
 */
function redirectToLastPage(address) {
    window.location.replace(address);
}


/**
 **************************************************************
 *   Cette section contient les fonctions utilisé lors des    *
 *   mouse over et mouse out                                  *
 **************************************************************
 */

/**
 *  Cette fonction ajuste les couleurs des éléments selon que la souris est sur
 *  l'élément ou non.
 */
function setChildrenColor(element, hover){
    var spans = element.getElementsByTagName("span");
    for(var i = 0 ; i < spans.length ; i++){
        if(hover){
            spans[i].style.color = WHITE;
        }else{
            spans[i].style.color = FONT_COLOR;
        }
    }
}

function regionHover(elm, idregion){
    if(idregion != currentRegionId && !contains(regionIds, idregion)){
        elm.style.backgroundColor = BLUE_HOVER;
        var spans = elm.getElementsByTagName("span");
        for(var i = 0 ; i < spans.length ; i++){
            spans[i].style.color = WHITE;
        }
    }
}

function regionOut(elm, idregion){
    if(idregion != currentRegionId && !contains(regionIds, idregion)){
        elm.style.backgroundColor = WHITE;
        var spans = elm.getElementsByTagName("span");
        for(var i = 0 ; i < spans.length ; i++){
            spans[i].style.color = FONT_COLOR;
        }
    }
}

function elementOut(element, id) {
    
    if (currentRegionIdBureau != id) {
        element.style.backgroundColor = WHITE;
        
        var spans = element.getElementsByTagName("span");
    
        for(var i = 0 ; i < spans.length ; i++){
            spans[i].style.color = FONT_COLOR;
        }
    }
}

function elementHover(element, id) {
    
    element.style.backgroundColor = BLUE_HOVER; 
    
    var spans = element.getElementsByTagName("span");
    
    for(var i = 0 ; i < spans.length ; i++){
        spans[i].style.color = WHITE;
    }
}


function setFlashCurrentRegionId(categorie){
    
    var inner = '<object type="application/x-shockwave-flash" ';
    inner += 'data="' + contextPath + '/swf/region-' + currentRegionId + '.swf?paramstr=' + lang + '-' + categorie + '" ';
    inner += 'width="337" height="286"> ';
    inner += '<param name="movie" value="' + contextPath + '/swf/region-' + currentRegionId + '.swf?paramstr=' + lang + '-' + categorie + '" />' ;
    inner += '<embed src="' + contextPath + '/swf/region-' + currentRegionId + '.swf?paramstr=' + lang + '-' + categorie + '" ';
    inner += 'width="337" height="286">' ;
    inner += '</embed> </object> ';
    document.getElementById("mapArea").innerHTML = inner;
    
}

function flashGetCurrentRegionId(){
    return currentRegionId;
}

function flashRegionOut(){    
    for(var i = 0 ; i < 25 ; i++){
        if(i != currentRegionId){
            try{
                regionOut(document.getElementById("region-" + i), i);
            }catch(err){}
        }
    }
}

function subregionHover(elm, idsub){

    if(!contains(subIds, idsub) && (currentSubregionId != idsub)){
    
        elm.style.backgroundColor = BLUE_HOVER;
        spans = elm.getElementsByTagName("span");
        for(var i = 0 ; i < spans.length ; i++){
            spans[i].style.color = WHITE;
        }
    }

}

function subregionOut(elm, idsub){

    if(!contains(subIds, idsub) && (currentSubregionId != idsub)){
    
        elm.style.backgroundColor = WHITE;
        spans = elm.getElementsByTagName("span");
        for(var i = 0 ; i < spans.length ; i++) {
            spans[i].style.color = FONT_COLOR;
        }
    }

}

/**
 **************************************************************
 *                ===== FIN DE SECTION ====                   *
 **************************************************************
 */



/*******************************************************************************
 *
 *  CETTE SECTION CONTIENT TOUTES LES FONCTIONS RELIÉS A L'EXTRACTION DE DONNES
 *
 ******************************************************************************/

/**
 *  Cette méthode effectue un parsing afin d'extraire des données a partir du template
 *  template.ajax.ie.*
 */
 
 function extractDataFromTemplate(content) {
    
    var splittedContent = content.split('-');
    
    
    
    var ville = splittedContent[1];
    var subregion = splittedContent[2];
    var region = splittedContent[3];
    
    var arrayOfData = [];
    arrayOfData[INDEX_VILLE] = ville;
    arrayOfData[INDEX_SUB] = subregion;
    arrayOfData[INDEX_REGION] = region;
        
    return arrayOfData;
}

/*
function extractDataFromTemplate(content) {
    
    
    var arrayOfData = [];
    var first = content.indexOf('-');
    var second = content.lastIndexOf('-');
    var ville = content.substring(first + 1, second);
    var subregion = content.substr(second + 1);
    
    arrayOfData[INDEX_VILLE] = ville;
    arrayOfData[INDEX_SUB] = subregion;
    
    return arrayOfData;
}
*/
/**
 *  CETTE MÉTODE DOIT SUPPORTÉ UN SÉPARATEUR PASSÉ EN PARAMÈTRE
 *  Note: 28 juin 2007 - NPM: Je crois que cette méthode n'est plus utilisé
 */
function extractVilleIdFromDiv(id) {
    return id.substr(id.indexOf('-') + 1);
}

/*******************************************************************************
 *
 *  CETTE FONCTION CONTIENT LES FONCTIONS D'AFFICHAGE (pas les call AJAX)
 *  
 ******************************************************************************/
/*
function displayErrors() {
    showElement('searchErrors');
}

function hideErrors() {
    hideElement('searchErrors');
}
*/
/**
 *  Cette méthode affiche les sous-régions dépendant du id de région passée
 *  en paramètre.
 */
function flashDisplaySubregions(elm, idregion){
    displaySubregions(elm, idregion);
    flashRegionOut();
    
}



/********************************************************************************
 *                                                                              *
 *  CETTE SECTION CONTIENT LES FONCTIONS QUI PERMETTENT DE FAIRE CHANGER LE     *
 *  VISUEL DE CERTAINS ÉLÉMENTS (GÉNÉRALE À TOUS)
 *                                                                              *
 *******************************************************************************/

/**
 *  Cette méthode est utilisé pour remettre le label des régions à sa couleur
 *  par défaut.
 */
function resetRegionBackground(encapsulatedValueString) {
    
    for (var i = 0; i < region.length; i++) {
        
        try {
            
            element  = document.getElementById(encapsulatedValueString + region[i]);
            element.style.backgroundColor = WHITE;
            
            var spans = element.getElementsByTagName("span");
            
            for(var j = 0 ; j < spans.length ; j++){
                spans[j].style.color = FONT_COLOR;
            }
        }
        catch (err) {
        }
    }         
}

/**
 *  Cette méthode ajoute la région sélectionnée dans un tableau vide afin de
 *  garder le comportement visuel voulue. (pour corriger un bug d'affichage aussi)
 */
function addToRegionIdsArray(id) {
    regionIds = new Array();
    regionIds.push(id);
}
