﻿myTips = new Class({
    Extends : Tips,
    elementEnter: function(event, element){
        if(!element.hasClass("active")) this.parent(event, element);
	}
});
function fixUnload() {
        // Is there things still loading, then fake the unload event
        if (document.readyState == 'interactive') {
                function stop() {
                        // Prevent memory leak
                        document.detachEvent('onstop', stop);
                        // Call unload handler
                        unload();
                };
                // Fire unload when the currently loading page is stopped
                document.attachEvent('onstop', stop);
                // Remove onstop listener after a while to prevent the unload function
                // to execute if the user presses cancel in an onbeforeunload
                // confirm dialog and then presses the stop button in the browser
                window.setTimeout(function() {
                        document.detachEvent('onstop', stop);
                }, 0);
        }
};
function unload() {
      $(document.body).empty();
};
if(Browser.Engine.trident && Browser.Engine.version < 7) window.addEvent('unload', unload);
if(Browser.Engine.trident && Browser.Engine.version < 7) window.addEvent('beforeunload', fixUnload);
///<reference path="mootools-1.2.js" />
var imageSwitcher = new Class({
    options : {
        "nextImageDelay": 5000,
        "fadeOverlayDelay" : 4000,
        "overlayOpacity" : 0.2,
        "OverLayFxDuration" : "long",
        "imageFadeDuration" : 400
    },
    initialize : function (imagesObj, curLabel) {
        this.imagesObj = $H(imagesObj);
        var menuObj = $H(imagesObj);
        var imArr = [];
        this.lblArr = [];
        menuObj.each(function (elt, key){
                                    if(elt.images){
                                        
                                        this.imagesObj.set(key,$extend(this.imagesObj.get(key),
                                                                        {"imgNum": imArr.length}));

                                        elt.images.each(function(imgsrc){
                                                        imArr.push(imgsrc+"?width=738");
                                                        this.lblArr.push(key);
                                                    }, this);
                                    }
                                }, this);
        var slideInd = this.imagesObj.get(curLabel) ? this.imagesObj.get(curLabel).imgNum  : 0;
        this.s = new Slideshow($("image"),imArr , {"controller" : false, 
                                                    "thumbnail" : false, 
                                                    "resize" : false,
                                                    "loader" : false,
                                                    "width" : 735,
                                                    "height":492, 
                                                    "paused" : false, 
                                                    "slide" : slideInd,
                                                    "delay" : Number.MAX_VALUE,
                                                    "duration" : this.options.imageFadeDuration});
                                                    
        $$('#backText, #backText2, #frontText').set('morph', {duration: 'long'});
        
        var isIE6 = Browser.Engine.trident && Browser.Engine.version < 7;
        
        this.s.addEvent("onComplete", this.slideChanged.bind(this));
        this.s.addEvent("onComplete", this.initChangeImageDelay.bind(this));
        
        this.currentReq = new Request.HTML({url:'/ajax/getContent.aspx', update : $("contentText")});
                
        this.overlayLeft = $("back").getSize().x;
        
        $("OverLay").setStyles({"width":0, 
                                "background-color" : "#FFFFFF", 
                                "opacity" : this.options.overlayOpacity});

        this.OverLayEffect = new Fx.Tween($("OverLay"),{property: 'width', 
                                                        duration: this.options.OverLayFxDuration, 
                                                        transition: Fx.Transitions.Expo.easeOut});

        this.OverLayOutEffect = new Fx.Tween($("OverLay"),{property: 'opacity', 
                                                           duration: "short"});
        this.OverLayOutEffect.addEvent("complete", function () {
                                                        this.OverLayEffect.set(0);
                                                        this.OverLayOutEffect.set(this.options.overlayOpacity)
                                                   }.bind(this));
        
        window.addEvent("onMenuChange", this.getMenu.bindWithEvent(this));
        window.addEvent("onImageChange", this.imgLinkClicked.bindWithEvent(this));
        window.addEvent("onPageChange", this.changeTextPage.bindWithEvent(this));
        this.prevnextpage = new Element("div",{"text" : "pages", "class" : "prevnextpages"}).inject($("frontText"));
        this.fadeOverlayDelay = this.changeImageDelay = null;
        this.changePagecounter = 0;
        this.changeImgcounter = 0;
        this.changeImglabel = "";
        this.diaporamaEnabled = true;
    },
    getMenu : function (imageLbl){
        // fired when the menu changes 
        
        $clear(this.changeImageDelay);
        this.changePagecounter = 0;
        this.changeImgcounter = 0;
        this.diaporamaEnabled = true;
        
        var curSlideIndex = ((this.s.slide - 1 + this.lblArr.length)% this.lblArr.length);
        
        if(!this.imagesObj.get(imageLbl) || this.imagesObj.get(imageLbl).imgNum == curSlideIndex) {
            // can't find any images associated : probably a parent menu item
            // don't do anything and fire back the event :
            window.fireEvent("hideLoading");
            window.fireEvent("onMenuChanged", imageLbl);
            return;
        } 
        $("main").removeEvents("mouseenter").removeEvents("mouseleave");
        
        this.OverLayEffect.start(this.overlayLeft).chain(function(){ 
                                                            this.s.go(this.imagesObj.get(imageLbl).imgNum);
                                                        }.bind(this));
    },
    showOverlay : function(){
        $clear(this.fadeOverlayDelay);
        this.fadeBackIn(false);
        $("main").removeEvents("mouseleave");
        $("main").addEvent("mouseleave", this.fadeBackOut.bind(this));
    },
    initChangeImageDelay : function () {
        //change image only if different label and project type
        var slideInd = (this.s.slide - 1 + this.lblArr.length) % this.lblArr.length;
        var label = this.lblArr[slideInd];
        var curObj = this.imagesObj.get(label);
        this.prevnextpage.setStyle("display","none").empty();
        if(this.changeImglabel != label && curObj.pages == 0) {
            this.changeImgcounter = curObj.images.length - 1;
            this.changeImglabel = label;
            $clear(this.changeImageDelay);
            if(this.changeImgcounter > 1 && this.diaporamaEnabled) 
                this.changeImageDelay = this.nextProjectImg.delay(this.options.nextImageDelay, this);
            $("nav").set("class","c"+this.changeImgcounter);
            this.fadeBackIn(false);
        } else if(this.changeImglabel == label){ 
                this.changeImgcounter--;
                $clear(this.changeImageDelay);
                $("nav").set("class","c"+this.changeImgcounter);
                if(this.changeImgcounter > 0 && this.diaporamaEnabled) 
                    this.changeImageDelay = this.nextProjectImg.delay(this.options.nextImageDelay, this);
         } else { 
                $("nav").set("class","c" + (curObj.pages - 1));
                if(curObj.pages > 1) {
                    this.prevnextpage.setStyle("display", "block");
                    new Element("a",{"text" : "précedente", "class" : "inactPage"}).inject(this.prevnextpage);
                    this.prevnextpage.appendText(" | ")
                    new Element("a",{"text" : "suivante","events" : {"click" : this.changeTextPage.pass([label, curObj.pages-1],this)}}).inject(this.prevnextpage);
                }
         }
    },
    imgLinkClicked : function (label, imgPos) {
        //clear the delay if any
        this.diaporamaEnabled = false;
        $clear(this.changeImageDelay);
        this.changeImgcounter = imgPos;
        $("nav").set("class","c"+(this.changeImgcounter - 1));
        $("main").removeEvents("mouseenter").removeEvents("mouseleave");
        
        var projectImages  = this.lblArr.filter(function(curlbl){return curlbl == label;});    
        
        var indToGo = this.lblArr.indexOf(label) + projectImages.length - imgPos;
        this.OverLayEffect.start(this.overlayLeft).chain(function(){ 
                                            this.s.go(indToGo);
                                        }.bind(this));
    },
    nextProjectImg : function (){
        this.s.next();
    },
    slideChanged : function (){
        //this.currentReq.cancel();
        var slideInd = (this.s.slide - 1 + this.lblArr.length) % this.lblArr.length;
        
        var curObj = this.imagesObj.get(this.lblArr[slideInd]);
        
        if(curObj.pages > 0) this.fadeBackIn(true);

        
        this.currentReq.removeEvents("onComplete").addEvent("onComplete" , this.fillText.pass(curObj.pages > 0,this));
        this.currentReq.post({'lbl': this.lblArr[slideInd], 'p':1});
        $("contentText").empty();
        window.fireEvent("hideLoading");
    },
    fadeBackIn : function (constant) {
        $$('#backText, #frontText' + (constant ? ", #backText2" : "")).morph({"opacity" : 1});        
        if(!constant && $("backText2").get("opacity") == 1) $("backText2").morph({"opacity" : 0}); 
    },
    fadeBackOut : function() {
        $$('#backText, #backText2, #frontText').morph({"opacity" : 0});
    },
    changeTextPage : function(label, imgPos) {
        //clear the delay if any
        this.diaporamaEnabled = false;
        $clear(this.changeImageDelay);
        //this.changePagecounter = 0;
        var slideInd = (this.s.slide - 1 + this.lblArr.length) % this.lblArr.length;
        var imageobj = this.imagesObj.get(label)
        var pageNumber = imageobj.pages - imgPos + 1
        this.currentReq.removeEvents("onSuccess").addEvent("onSuccess" , function() {
             this.fillText(true); 
             $("nav").set("class","c"+(imgPos-1));
             }.bind(this));
        this.currentReq.get({'lbl': this.lblArr[slideInd], 'p':pageNumber});
        if(imageobj.pages > 1) {
            this.prevnextpage.empty();
            new Element("a",{"text" : "précedente", 
                            "class" :  imgPos < imageobj.pages ? "" : "inactPage",
                            "events" : imgPos < imageobj.pages ? {"click" : this.changeTextPage.pass([label, imgPos+1],this)} : {}}).inject(this.prevnextpage);
            this.prevnextpage.appendText(" | ");
            new Element("a",{"text" : "suivante", 
                            "class" : imgPos < 2 ? "inactPage" : "",
                            "events" : imgPos < 2 ? {} : {"click" : this.changeTextPage.pass([label, imgPos-1],this)}}).inject(this.prevnextpage);
        }
    },
    fillText : function(constant) {
        
        this.OverLayOutEffect.start(0);
        $clear(this.fadeOverlayDelay);
        //this.currentReq.cancel();
        
        var slideInd = (this.s.slide - 1 + this.lblArr.length) % this.lblArr.length;
        
        window.fireEvent("onMenuChanged",this.lblArr[slideInd]);
        
        if(!constant) {
             $("main").removeEvents("mouseenter").removeEvents("mouseleave");
             this.fadeOverlayDelay = this.fadeBackOut.delay(this.options.fadeOverlayDelay);
             $("main").addEvent("mouseenter", this.showOverlay.bind(this));
        }
        
    }
});
var Menu = new Class({
    initialize : function (menuObj, curLabel) {
        $$("#nav ul").addClass("j");
        this.menuObj = $H(menuObj);
        this.isWorking = false;
        this.curMenuLbl = "";
        var imagesObj = new Hash();
        this.menuObj.each(function(menuObjElt, key){
                if(!$chk(key) || !$chk($(key).getElement("a"))) return;
                
                var elt = $(key).getElement("a");
                    elt.set({"href" : "javascript:void(0)"});
                    elt.set({"events" :{"click" : this.menuClicked.pass([elt,key],this)}});
                
                var imglinks = $(key).getElements("ul.images li a");
                var imglinksLength = imglinks.length;
                    imglinks.each(function(imglkelt,ind){
                        imglkelt.set({"events" :{"click" : this.imageClicked.pass([key,imglinksLength - ind],this)}});
                    },this);
                
                var pagelinks = [];
                if($(key).getChildren("ul.page").length > 0) pagelinks = $(key).getElement("ul.page").getElements("li a");
                var pagelinksLength = pagelinks.length;
                pagelinks.each(function(pagelkelt,ind){
                    pagelkelt.set({"href" : "javascript:void(0)","events" :{"click" : this.pageClicked.pass([key,pagelinksLength - ind],this)}});
                },this);
                imagesObj.set(key,{"images" : menuObjElt.img, "pages": menuObjElt.pages})
            }, this);
        this.loader = new Element("img", {"class" : "navloader", "src" : "/assets/ajax-loader.gif"}).inject($("nav"));
        new imageSwitcher(imagesObj, curLabel);
        window.addEvent("onMenuChanged",this.changeMenuHighLights.bindWithEvent(this));
        window.addEvent("hideLoading",this.showLoading.bindWithEvent(this, false));
    },
    menuClicked : function(eltClicked, lblrelated) {
        if(this.curMenuLbl == lblrelated || this.isWorking) return;
        this.curMenuLbl = lblrelated;
        //this.changeMenuHighLights(lblrelated);
        this.isWorking = true;
        this.showLoading(true);
        window.fireEvent("onMenuChange",lblrelated);
    },
    imageClicked : function(lblrelated, imgNum) {
        window.fireEvent("onImageChange",[lblrelated,imgNum]);
    },
    pageClicked : function(lblrelated, imgNum) {
        window.fireEvent("onPageChange",[lblrelated,imgNum]);
    },
    showLoading : function(bool){
        this.loader.fade(bool ? "in" : "out");
    },
    changeMenuHighLights : function (curEltLabel) {
        eltClicked = $(curEltLabel);
        this.menuObj.each(function(menuObjElt, key) {var elt = $(key);
                                                     if(!elt.hasChild(eltClicked)) elt.removeClass("active").removeClass("menuactive");
                                                     //if($chk(menuObjElt.title)) elt.getElement("a").set("text",menuObjElt.title);
                                        });
        //if($chk(this.menuObj.get(curEltLabel).titleActive)) eltClicked.getElement("a").set("text",this.menuObj.get(curEltLabel).titleActive);
        eltClicked.addClass("active");
        if(eltClicked.getParent("ul.submenu")) eltClicked.getParent("li").removeClass("active").addClass("menuactive");
        this.curMenuLbl = curEltLabel;
        this.isWorking = false;
        
        
    }
});

var Private = new Class({
    initialize : function () {
        this.txt = $("contentText");
        this.sendbutton = this.txt.getElement("input[type=button]");
        this.sendbutton.addEvent("click", this._getForm.bind(this))  
    },
    _getForm : function(){
        var id = $("userInput").get("value");
        var pass = $("passwordInput").get("value");
        new Request.HTML({url:'/ajax/logIn.aspx', update : $("contentText")}).post({"user" :id,"password":pass});
    }
}); 
