

/* au chargement de la page, on exécute les différentes fonctionnalités */
jQuery(document).ready(function(){
    /* on initialise toutes les tabulations */
    initTabs(paramsblocPractice, paramsPubs, paramsOnglets);

    /* on lance la requète xmlHttpRequest pour obtenir le xml du carousel */
    getIt();
    initTabs(paramsPlayer);

    /* on lance la gestion du module événements */
    initCalendar();

    buildArrow();//traitement des flèches pour faire défiler les événements

});

/**
 * @author Laurent Leborgne
 * @name Carousel
 * @description gestion du carousel de home
 */
// variables
var carouselObj=new Array();
var currentCarousel = parseInt(document.location.hash.replace('#visuel',""));
var timer = 20000;
var carouselPlay;

// fonction générique pour multireplacement
String.prototype.replaceAll = function(strTarget, strSubString)
{
    var strText = this;
    var intIndexOfMatch = strText.indexOf( strTarget );

    // Keep looping while an instance of the target string
    // still exists in the string.
    while (intIndexOfMatch != -1)
    {
        // Relace out the current instance.
        strText = strText.replace( strTarget, strSubString )

        // Get the index of any next matching substring.
        intIndexOfMatch = strText.indexOf( strTarget );
    }

    // Return the updated string with ALL the target strings
    // replaced out with the new substring.
    return( strText );
}
// init des événements de click
var initCarousel = function(){
    /** lié au chargement, on checkque si on a un id de carousel dans l'url, pour charger les noeuds correspondants **/
    if (!isNaN(currentCarousel)) {
        var cur = "#liste-carousel li a:eq(" + (currentCarousel - 1)+")";
        jQuery(cur).trigger("click");
    }else{
        var cur = "#liste-carousel li a:eq(0)";
        jQuery(cur).trigger("click");
    }
}

// on charge le xml du carousel
var getIt = function(){
    $.ajax({
        type: "post",
        url: "/FRONT/CRT_PIDF/xml/home/" + lang + "/home.xml",
        success: function(xhr){
            result = xhr;
            timer = parseInt(stripCDATA(jQuery(result).find("defilement")))*1000;
            jQuery(result).find("onglet").each(function(index){
                obj = {
                    coe_i_id:stripCDATA(jQuery(this).find("coe_i_id")),
                    fiches_i_id:stripCDATA(jQuery(this).find("fiches_i_id")),
                    coe_i_id_rubrique:stripCDATA(jQuery(this).find("coe_i_id_rubrique")),
                    shortTitle: stripCDATA(jQuery(this).find("shortTitle")),
                    date: stripCDATA(jQuery(this).find("date")),
                    longTitle: stripCDATA(jQuery(this).find("longTitle")),
                    accroche: stripCDATA(jQuery(this).find("accroche")),
                    rubrique: stripCDATA(jQuery(this).find("rubrique")),
                    visuel: {
                        type: stripCDATA(jQuery(this).find("visuel type")),
                        src: stripCDATA(jQuery(this).find("visuel src:eq(0)")),
                        alt: stripCDATA(jQuery(this).find("visuel alt:eq(0)")),
                        title: stripCDATA(jQuery(this).find("visuel title:eq(0)")),
                        link: stripCDATA(jQuery(this).find("visuel link:eq(0)")),
                        highligh:{}
                    },
                    url: stripCDATA(jQuery(this).find("url")),
                    bouton: stripCDATA(jQuery(this).find("bouton"))
                };
                if (jQuery(this).find("visuel highlight").length > 0) {
                    obj.visuel.highlight = {
                        src: stripCDATA(jQuery(this).find("visuel highlight src")),
                        alt: stripCDATA(jQuery(this).find("visuel highlight alt")),
                        title: stripCDATA(jQuery(this).find("visuel highlight title")),
                        link: stripCDATA(jQuery(this).find("visuel highlight link"))
                    };
                };
                if (jQuery(this).find("list").length > 0) {
                    obj.list = {
                        url1: stripCDATA(jQuery(this).find("list url1")),
                        label1: stripCDATA(jQuery(this).find("list label1")),
                        target1: stripCDATA(jQuery(this).find("list target1")),
                        title1: stripCDATA(jQuery(this).find("list title1")),
                        url2: stripCDATA(jQuery(this).find("list url2")),
                        label2: stripCDATA(jQuery(this).find("list label2")),
                        target2: stripCDATA(jQuery(this).find("list target2")),
                        title2: stripCDATA(jQuery(this).find("list title2")),
                        url3: stripCDATA(jQuery(this).find("list url3")),
                        label3: stripCDATA(jQuery(this).find("list label3")),
                        target3: stripCDATA(jQuery(this).find("list target3")),
                        title3: stripCDATA(jQuery(this).find("list title3"))
                    };
                };
                carouselObj[index]=obj;
            });
            //on checke si on a une demande par défaut au chargement (url ou 1er de la liste);
            initCarousel();
        }
    });
}

/**strip out the cdata nodes **/
var stripCDATA= function(string){
    string = jQuery(string).text();
    if(string==undefined)string="";

    var startcdata =/<!--\[CDATA\[/;
    var endcdata =/\]\]-->/;
    var startcdata_ie =/<!\[CDATA\[/;
    var endcdata_ie =/\]\]>/;
    string = string.replace("&lt;","<").replace("&gt;",">").replace(startcdata,"").replace(endcdata,"").replace(startcdata_ie,"").replace(endcdata_ie,"");
    return string;
}

/** fonction exécutée par le timer, pour passer à l'item suivant **/
function nextCarouselItem(){
    if(currentCarousel !=carouselObj.length-1){
        var newOne =parseInt(currentCarousel);
        newOne++;
        //console.log("suivant :"+newOne);
        jQuery("#liste-carousel li a:eq("+newOne+")").trigger("click");
    }else{
        jQuery("#liste-carousel li a:eq(0)").trigger("click");
    }
}

/** au click, on change la zone **/
var setCarousel = function(index){
    if(typeof(session_id_user) == "undefined")session_id_user="";
    if (carouselObj.length > 0 && index<carouselObj.length) {
        var so = "";
        var id =1;//pour avoir des id d'éléments commençant à 1 et non 0;
        id+=index;

        // on remet à jour l'index de l'onglet sélectionné
        currentCarousel = index;

        // on check si le timer est encore actif et on le désactive
        if(timer!=0)clearTimeout(carouselPlay);

        /** activation de la rubrique **/
        jQuery('#zone-contenu').removeClass().addClass(carouselObj[index].rubrique);

        /** création du html avec les données du xml */
        var data;
        /** html structurant, reprenant le contenu "normal", avec des zones de remplacement **/
        var mapping = "<div id=\"visuel__index__\" class=\"visuel\"><a href=\"__link__\" title=\"__linktitle__\"><img src=\"__src__\" alt=\"__alt__\" /></a></div><div id=\"contenu__index__\" class=\"contenu\"><p class=\"date\">__date__</p><h3><a href=\"__link__\" title=\"__linktitle__\">__longTitle__</a></h3><hr /><p class=\"accroche\">__accroche__</p>__discover__<hr />__listeLiens__</div>";

        /** gestion de la mise en place des informations génériques **/
        data = mapping.replaceAll("__index__",id)
        .replaceAll("__title__",carouselObj[index].shortTitle)
        .replaceAll("__url__",carouselObj[index].url)
        .replaceAll("__longTitle__",carouselObj[index].longTitle)
        .replaceAll("__accroche__",carouselObj[index].accroche)
        .replaceAll("__date__",carouselObj[index].date)


        /** liste de liens facultative **/
        var lnkElmts = "";
        if(carouselObj[index].list){
            for (i=1;i<4;i++){
                if(carouselObj[index].list['url'+i]!="")lnkElmts+="<a href=\""+carouselObj[index].list['url'+i]+"\" title=\""+carouselObj[index].list['title'+i]+"\" target=\""+carouselObj[index].list['target'+i]+"\" class=\"carouselLinkList\">&gt; "+carouselObj[index].list['label'+i]+"</a>";
            }
        };

        //carouselObj[index].coe_i_id
        //carouselObj[index].fiches_i_id
        //carouselObj[index].coe_i_id_rubrique

        /** bouton décrouvrez, facultatif **/
        var discover = "";
        if(carouselObj[index].bouton!="" && carouselObj[index].url!=""){
            discover = "<a href=\"__url__\" class=\"discover\">__bouton__</a>";
            discover = discover.replaceAll("__url__",carouselObj[index].url).replaceAll("__bouton__",carouselObj[index].bouton);
        }

        /** mise en place des éléments facultatifs **/
        data = data.replace("__discover__",discover);
        data = data.replace("__listeLiens__",lnkElmts);

        /** gestion du contenu visuel en fonction du type **/
        switch(carouselObj[index].visuel.type){
            case "image":
                data = data.replaceAll("__src__",carouselObj[index].visuel.src)
                .replaceAll("__alt__",carouselObj[index].visuel.alt)
                .replaceAll("__link__",carouselObj[index].visuel.link)
                .replaceAll("__linktitle__",carouselObj[index].visuel.title);
                break;
            case "flash":
                data = data.replaceAll("__link__",carouselObj[index].url)
                .replaceAll("__linktitle__",carouselObj[index].longTitle);
                data = data.replaceAll("__src__","");
                so = new SWFObject(carouselObj[index].visuel.src, "CRT", "530", "300", "9", "#000000");
                so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
                so.addVariable("preview", carouselObj[index].visuel.highlight.src);
                so.addParam("allowfullscreen","true");
                so.addParam("wmode","transparent");
                break;
            case "videoFlv":
                data = data.replaceAll("__link__",carouselObj[index].url)
                .replaceAll("__linktitle__",carouselObj[index].longTitle);
                data = data.replaceAll("__src__","");
                so = new SWFObject("/FRONT/CRT_PIDF/flash/video/CRTPlayer.swf", "CRT", "531", "300", "9", "#000000");
                so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
                so.addVariable("url_media", carouselObj[index].visuel.src);
                so.addVariable("preview", carouselObj[index].visuel.highlight.src);
                so.addParam("allowfullscreen","true");

                so.addParam("wmode","transparent");
                break;
            case "videoUTube":
                data = data.replaceAll("__link__",carouselObj[index].url)
                .replaceAll("__linktitle__",carouselObj[index].longTitle);
                data = data.replaceAll("__src__","");
                so = new SWFObject(carouselObj[index].visuel.src.replace('watch?v=','v/')+"?enablejsapi=1&playerapiid=ytplayer", "ytapiplayer", "530", "300", "9", "#000000");
                so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
                so.addParam("allowfullscreen","true");
                so.addParam("allowScriptAccess","always");
                so.addParam("id","myytplayer");
                so.addParam("wmode","transparent");
                break;
            case "vimeo":
                data = data.replaceAll("__link__",carouselObj[index].url)
                .replaceAll("__linktitle__",carouselObj[index].longTitle);
                // définir le clip_id dans le xml :
                // exemple : http://vimeo.com/moogaloop.swf?clip_id=7099825
                so = new SWFObject("http://vimeo.com/moogaloop.swf?clip_id="+carouselObj[index].visuel.src, "vimeoplayer", "530", "300", "9", "#000000");
                so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
                so.addParam("allowfullscreen","true");
                so.addParam("wmode","transparent");
                so.addParam("allowScriptAccess","always");
                so.addParam("id","vimeoplayer");
                break;
            case "dailymotion":
                data = data.replaceAll("__link__",carouselObj[index].url)
                .replaceAll("__linktitle__",carouselObj[index].longTitle);
                // définir l'url dailymotion dans le xml :
                so = new SWFObject(carouselObj[index].visuel.src, "dailymotion_player", "530", "300", "9", "#000000");
                so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
                so.addParam("allowfullscreen","true");
                so.addParam("wmode","transparent");
                so.addParam("allowScriptAccess","always");
                so.addParam("id","dailymotion_player");
                break;
            case "kewego":
                data = data.replaceAll("__link__",carouselObj[index].url)
                .replaceAll("__linktitle__",carouselObj[index].longTitle);
                // définir le "sig", identifiant de la video, dans le xm, ainsi que le language_code
                // exemple de sig : "iLyROoafI4VF"
                // language code : fr
                // à finaliser et tester
                so = new SWFObject("http://sa.kewego.com/swf/p3/epix.swf",carouselObj[index].visuel.src, "530", "300", "9", "#000000");
                so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
                so.addVariable("flashVars","language_code=fr&playerKey=4c42659406e2&skinKey=9c1fdb8efbe2&sig="+carouselObj[index].visuel.src+"&autostart=false")
                so.addParam("allowfullscreen","true");
                so.addParam("wmode","transparent");
                so.addParam("allowScriptAccess","always");
                so.addParam("id",carouselObj[index].visuel.src);
                break;
            default :
                break;
        }
        /** insertion du html recomposé à partir de l'objet json issu du xml **/
        jQuery("#zone-contenu").html(data);
        $(document).pngFix();
        /** si un objet flash a été instancié, on l'écrit dans le html nouvellement généré **/
        if(so!="")so.write("visuel"+id);
        /** on set le timer pour passer à l'item suivant **/
        if(timer!=0)carouselPlay=setTimeout("nextCarouselItem()", timer);


    }else{
//aucune donnée issue du xml, ne devrait pas arriver
}
};

/**
 * @author Laurent Leborgne
 * @description : Evénements par mois
 */
var setCalendar = function(){
    jQuery(calObject.liste).each(function(index){
        if(jQuery(this).attr('id')==calObject.firstElm){
            jQuery(this).hide();
        }else{
            if(index > calObject.nbElmVisibles && jQuery(this).attr('id')!=calObject.lastElm)jQuery(this).hide();
        }
    });
};
var initCalendar = function(){
    calObject.nbItemInList = jQuery(calObject.liste+" li"+calObject.classToBeTabbed).length;
    jQuery(calObject.liste+" li"+calObject.classToBeTabbed+" a").each(function(index){
        jQuery(this).bind("click", function(){
            var destId=jQuery(this).attr("href");
            jQuery(this).parent("li"+calObject.classToBeTabbed).siblings("li"+calObject.classToBeTabbed).children("a").each(function(){
                jQuery(jQuery(this).attr("href")).hide();
                jQuery(this).parent("li."+calObject.activeClassLi).removeClass(calObject.activeClassLi).addClass(calObject.inactiveClassLi);
            })
            jQuery(this).parent('li'+calObject.classToBeTabbed).addClass(calObject.activeClassLi).removeClass(calObject.inactiveClassLi);
            jQuery(destId).show();
            if(jQuery(this).parent("li"+calObject.classToBeTabbed).length>0)return false;
        })
    });
    for(i=jQuery(calObject.liste+" li"+calObject.classToBeTabbed).length;i>calObject.nbElmVisibles-1;i--){
        jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":eq("+i+")").hide();
    }
    jQuery(calObject.liste+" li:eq(0)").hide();


    jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":eq(0) a").trigger('click');
};
var calMove = function(where){
    switch(where){
        case "prev":
            jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).prevAll("li"+calObject.classToBeTabbed+":hidden:eq(0)").show();
            jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).prev("li"+calObject.classToBeTabbed).children("a").trigger("click");
            jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:last").hide();

            if(jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:first a").attr("href") == jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":first a").attr("href")){
                jQuery(calObject.liste+" li"+calObject.firstElm+":visible").hide();
            }else{
                jQuery(calObject.liste+" li"+calObject.lastElm+":hidden").show();
            }

            return false;
            break;
        case "next":

            jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).nextAll("li"+calObject.classToBeTabbed+":hidden:eq(0)").show();
            jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).next("li"+calObject.classToBeTabbed).children("a").trigger("click");
            jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:eq(0)").hide();
            jQuery(calObject.liste+" li"+calObject.firstElm+":hidden").show();
            if(jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:last a").attr('href') == jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":last a").attr('href')){
                jQuery(calObject.liste+" li"+calObject.lastElm+":visible").hide();
            }
            return false;
            break;
        default:
            break;
    }
};
var buildArrow = function (){
    jQuery(calObject.liste+" li"+calObject.lastElm).bind("click",function(){
        calMove('next');
        return false;
    });
    jQuery(calObject.liste+" li"+calObject.firstElm).bind("click",function(){
        calMove('prev');
        return false;
    });
};



/**
 * @author Laurent Leborgne
 * @description gestion des onglets
 */
var tabsTimer; // pour le défilement
var timeObj; // pour le settimeout du défilement
/* on initialise tous les onglets demandés */
var initTabs= function(){
    for(i=0;i<arguments.length;i++){
        settings = arguments[i];
        setTabsBehavior(settings.liste,settings.activeClassLi,settings.inactiveClassLi,settings.callbackAction);
        //test si timer requis
        if (settings.timerTab2Tab == 1 && settings.relClassForTimer) {
            var curTimerElm = jQuery(settings.liste+" li.on").attr("rel");
            timeObj = settings;
            if(!isNaN(parseInt(curTimerElm))){
                tabsTimer = setTimeout(function(){
                    nextTabAuto(timeObj);
                },parseInt(curTimerElm)*1000);
            }
        }
    }
}
/* mise en place du comportement générique pour la gestion des onglets */
var setTabsBehavior = function (ulClass,activeClassLi,inactiveClassLi,callback){
    if(ulClass==".navPub"){
        jQuery(ulClass+" li").each(function(ind){
            jQuery(this).bind("mouseup", function(){
                //console.log("click sur l'élement parent = on flag un click 'humain' et non un trigger, pour désactiver le timer");
                jQuery(this).children("a:eq(0)").attr("rel","click");
            });
        });
    }
    jQuery(ulClass+" li a").each(function(index){
        jQuery(this).bind("click", function(){
            var destId=jQuery(this).attr("href");
            jQuery(this).parent("li").siblings("li").children("a").each(function(){
                jQuery(jQuery(this).attr("href")).hide();
                jQuery(this).parent("li."+activeClassLi).removeClass(activeClassLi).addClass(inactiveClassLi);
            })
            jQuery(this).parent('li').addClass(activeClassLi).removeClass(inactiveClassLi);
            //si un callback est défini, on l'exécute
            if(callback)callback(index);
            //si un timer est en route, on l'annule
            if(tabsTimer && jQuery(this).attr("rel")=="click")clearTimeout(tabsTimer);
            //on montre
            jQuery(destId).show();
            return false;
        });
    });
    if(callback=="")jQuery(ulClass+" li a:eq(0)").trigger("click");
}
/** défilement auto des onglets pour la publicité **/
var nextTabAuto = function(obj){
    var curTimerElm;
    if(jQuery(obj.liste).length>0){
        if(jQuery(obj.liste+" li.on").next("li").length>0){
            jQuery(obj.liste+" li.on").next("li").children("a:eq(0)").trigger("click");
            curTimerElm = jQuery(obj.liste+" li.on").attr("rel");
        }else{
            jQuery(obj.liste +" li a:eq(0)").trigger("click");
            curTimerElm = jQuery(obj.liste+" li:eq(0)").attr("rel");
        }
        if(!isNaN(parseInt(curTimerElm))){
            tabsTimer = setTimeout(function(){
                nextTabAuto(obj);
            },parseInt(curTimerElm)*1000);
        }
    }
}


/** onglets practice et météo **/
var paramsblocPractice = {
    liste : "#navPractice",
    activeClassLi : "on",
    inactiveClassLi: "",
    callbackAction : "",
    buildArrows : false,
    arrowNextClass: ".next",
    arrowPrevClass : ".prev",
    nbElmVisibles : 0,
    timerTab2Tab : 0
}

/** publicités **/
var paramsPubs = {
    liste : ".navPub",
    activeClassLi : "on",
    inactiveClassLi: "",
    callbackAction : "",
    buildArrows : false,
    arrowNextClass: ".next",
    arrowPrevClass : ".prev",
    nbElmVisibles : 0,
    timerTab2Tab : 1,
    relClassForTimer : ".blocPub"
}
/** onglets "et toujours.." */
var paramsOnglets = {
    liste : "#ongletTabs",
    activeClassLi : "active",
    inactiveClassLi: "",
    callbackAction : "",
    buildArrows : false,
    arrowNextClass: ".next",
    arrowPrevClass : ".prev",
    nbElmVisibles : 0,
    timerTab2Tab : 0
}
/** carousel/player **/
var paramsPlayer = {
    liste : "#liste-carousel",
    activeClassLi : "active",
    inactiveClassLi : "onglet",
    callbackAction : setCarousel,
    buildArrows : false,
    arrowNextClass: ".next",
    arrowPrevClass : ".prev",
    nbElmVisibles : 0,
    timerTab2Tab : 0
}
/** onglets des évenements **/
var calObject = {
    liste : "#ongletsMonth",
    firstElm:'#firstItem',
    lastElm:'#lastItem',
    classToBeTabbed:".level1",
    activeClassLi : "active",
    inactiveClassLi: "",
    nbElmVisibles : 3,
    timerTab2Tab : 0,
    activeItem :0,
    nbItemInList : 0
};
