﻿var Menu = new Class({
    initialize: function(contentObject, options){
        this.setOptions({
			orientation: "vertical",
			closeonreclick: true,
			showvisited: true,
			menuPanelid : "myMenu",
			menuitemTag : "li",
			menuitemClass : "menuitem",
			openatstartup : '',
			getRandombackground : false,
			parentitemClass : "parentitem"
		}, options);
		this.fireEvent('onInit');
		this.rootElt = $(this.options.menuPanelid);
		$extend(this, { "rootElt": this.rootElt});
		this.currentElement;
		this.hasStartUp = !(this.options.openatstartup == '');
		this.contentObject = contentObject;
		this.activeHover = new Array();
		this.allitems = new Array();
		this.populateMenu(this.rootElt);
        
    },
    changeLocationProxy: function (lblstartup) {
        var d = new String(window.location.host);
        var h = new String(window.location.hash);
        var s = new String(window.location.search);
        if(!s.contains("proxy=true")){
            var lbl = "";
            if(h.contains("lbl")) lbl = "lbl=" + h.replace("lbl","");
            if(lbl=="" && s.contains("lbl=")) lbl = s.replace("?","");
            if(lbl=="" && lblstartup != "") lbl = "lbl=" + lblstartup;
            var u = "http://" + d +"?proxy=true&"+lbl;
            window.location = u;
        }
    },
    getRootElt: function () {
        return this.rootElt;
    },
    populateMenu: function(element){
    
        menuOcc = this;
        var startupElt;
        element.getElementsBySelector(this.options.menuitemTag + "." + this.options.menuitemClass + "," + this.options.menuitemTag +"." + this.options.parentitemClass).each(function(el) {
            menuOcc.allitems.include($(el));
            var optionsElt = el.getElement("span.options");
            $extend($(el), this.menuOcc.createOptions(optionsElt));
            var linkElt = el.getElement("a");
            if($chk(linkElt)){
                if(linkElt.innerHTML != "") {
                    linkElt.href = "#";
                    linkElt.addEvent('click', this.menuOcc.menuclicked.pass(el,this.menuOcc));
                    if($(el).label != ""){
                        linkElt.addEvent('click', this.menuOcc.contentObject.getcontent.pass(el,this.menuOcc.contentObject));
                        linkElt.href = "#lbl" + $(el).label;
                    }
                    if($(el).label == this.menuOcc.options.openatstartup && $(el).label != ""){ this.menuOcc.options.openatstartup = $(el).label;startupElt = el}
                } else {
                    el.addClass("separator");
                    el.setText(" ");   
                }
            }
        });
        if(this.hasStartUp) {var startupObj = { "label" : this.options.openatstartup };this.contentObject.getcontent(startupObj);}
        if(startupElt) this.update(startupElt);
    },
    createOptions : function (elt) {
        var label = "";
        var backStr = "";
        if($chk($E("span.label",elt))) label = $E("span.label",elt).innerHTML;
        if($chk($E("span.backStr",elt))) backStr = $E("span.backStr",elt).innerHTML;
        var optobj = {
            "label" : label,
            "backStr" : backStr
        }
        return optobj;
    },
    menuclicked: function(elt){
        if(this.options.showvisited) elt.addClass("visited");
        this.update(elt);
        this.rootElt.fireEvent('onPageChange')
        if(this.options.getRandombackground) $E("body").setStyle("background-image","url(/returnbandeaux.aspx?"+$random(0,100)+")");
        if(elt.hasClass(this.options.menuitemClass)) this.fireEvent('onMenuClicked');
        if(elt.hasClass(this.options.parentitemClass)) this.fireEvent('onParentMenuClicked');
    },
    update: function(elt) {
        if(elt != this.currentElement && !elt.hasClass('active')) {
            while($chk(this.currentElement) && this.currentElement != this.rootElt){
                this.setInactive(this.currentElement);
                this.currentElement = this.currentElement.getParent()
            }
            elt = $(elt);
            this.currentElement = elt;
            while($chk(elt) && elt != this.rootElt){
                this.setActive(elt);
                elt = elt.getParent()
            }
        } else if(elt.hasClass('active')) {
            while($chk(this.currentElement) && this.currentElement != this.rootElt && this.currentElement != elt){
                this.setInactive(this.currentElement);
                this.currentElement = this.currentElement.getParent();
            }
            this.currentElement = elt;
        }
    },
    setActive: function(elt) {
        elt.addClass('active');
    },
    setInactive: function(elt) {
        elt.removeClass('active');
    },
    getByLabel: function(label) {
        var curEltToShow = false;
        this.allitems.some(function(item, index){
                                if(item.label == label) curEltToShow = item;
                                return item.label == label;
                           }.bind(this));
        if(!$chk(curEltToShow)) {curEltToShow = new Object();$extend(curEltToShow, {'label' : label})}
        else this.menuclicked(curEltToShow);
        this.contentObject.getcontent(curEltToShow);
    }
});
Menu.implement(new Events);
Menu.implement(new Options);
var Content = new Class({
    initialize: function(options){
        this.setOptions({
			mainpanelid: "contentPanel",
			defaultclass : "contentpage",
			transition : "none",
			loaderIcon : "/assets/ajax-loader.gif"
		}, options);
		this.fireEvent('oninit');
		this.mainpanel = $(this.options.mainpanelid);
		this.currentelement;
		this.currentRequest;
		this.loadingDiv = new Element('div',{'id' : 'loadingIcon', 'class' : 'contentpage'}).injectInside(this.mainpanel);
		this.hideLoading();
		new Element('img',{'alt': 'loading page', 'src': this.options.loaderIcon}).injectInside(this.loadingDiv);
    },
      
    getcontent: function(elt){
        if($chk(this.currentelement) && this.currentelement.hasClass('active')) this.currentelement.removeClass('active');
        if($chk($(elt.label))){
           this.currentelement =  $(elt.label);
           this.currentelement.setStyle('opacity',0);
           this.currentelement.addClass('active');
           Content.Transitions[this.options.transition](this.currentelement);
           this.fireEvent('onRevisit', elt.label);
        } else {
           if($chk(this.currentRequest)) this.currentRequest.cancel();
           var newDiv = new Element('div').addClass(this.options.defaultclass).addClass('active').setProperty('id', elt.label).setStyle("opacity",0).injectInside(this.mainpanel);
           this.currentRequest = new Ajax("/ajax/ReturnPage.aspx", {method: 'post', autoCancel : true, update:newDiv, data:'label='+elt.label, evalScripts: true}).request();
           this.currentRequest.addEvent('onSuccess',function(div) {Content.Transitions[this.options.transition](div);this.hideLoading()}.pass(newDiv,this));
           this.currentRequest.addEvent('onFailure',this.hideLoading.bind(this))
           this.currentelement =  newDiv;
           this.showLoading()
        }
        if($chk(elt.backStr))this.changeBackGround(elt);
    },
    changeBackGround : function(elt){
        document.body.style.backgroundImage = "url('"+elt.backStr.split("|")[0]+"')";
        document.body.style.backgroundRepeat = (elt.backStr.split("|")[1]=="true"?"repeat":"no-repeat");
        document.body.style.backgroundPosition = elt.backStr.split("|")[2];
    },
    showLoading : function (){
        this.loadingDiv.setStyle('display','block');
    },
    hideLoading : function (){
        this.loadingDiv.setStyle('display','none');
    }
});
Content.implement(new Events);
Content.implement(new Options);
Content.Transitions = new Abstract ({
	fade: function(newDiv){
		if(newDiv.getProperty("opacity") != 1) new Fx.Style(newDiv, 'opacity', {duration:70}).start(0, 1);
	},
	none: function(newDiv) {
	    newDiv.setStyle("opacity",1);
	}
});

var NormalImg = new Class({
    initialize: function(fullPanelid, options){
        this.setOptions({
            showThumbnails : false,
            linkonImage : true,
            showFirstPic : true,
            legendandlinkContainer : false,
            elementSelector: "div.imageElement",
            destroyAfterPopulate : true,
			titleSelector: "h3",
			subtitleSelector: "div",
			linkSelector: "a.open",
			imageSelector: "img.full"
		}, options);
		this.fireEvent('oninit');
		this.currentIter = -1;
		this.lastIter = 0;
		this.maxIter = 0;
		this.populateFrom = $(fullPanelid);
		this.fullPanel = new Element("div").setProperties({'class' : 'fullImage'}).injectInside(this.populateFrom);
		this.galleryData = [];
		this.populateData();
		this.fullImage = this.createFullImage();
		this.galleryInit = 1;
		if(this.galleryData.length > 1 && this.options.linkonImage) this.fullImage.addEvents({'click' : this.nextItem.pass(true,this)})
		if(this.galleryData.length > 0) this.goTo(0);
		if(this.options.legendandlinkContainer && this.galleryData.length > 1) this.createImagesLinks($(this.options.legendandlinkContainer));
		this.changeSeeAlsoLinks($(this.options.legendandlinkContainer.replace("descriptionText", "description")));
    },
    createImagesLinks : function (legendandlinkContainer)  {
       if(!$chk(legendandlinkContainer)) return;
       legendandlinkContainer.innerHTML = "<br />" + this.galleryData.length + " Images<br />";
       this.nextbtn = new Element("a").setProperties({'alt' : 'next image', 'class' : 'imagenextLink'}).injectInside(legendandlinkContainer).addEvent("click", function (evt) {this.nextItem(true)}.bind(this));
       this.nextbtn.innerHTML = "Next ›››<br />";
       this.previousbtn = new Element("a").setProperties({'alt' : 'back image', 'class' : 'imagebackLink'}).injectInside(legendandlinkContainer).addEvent("click", function (evt) {this.backItem(true)}.bind(this));
       this.previousbtn.innerHTML = "Back ‹‹‹<br />";
       //this.addEvent("onChanged", function () {this.nextbtn.setOpacity(((this.currentIter+1) >= this.maxIter) ? 0 : 1);this.previousbtn.setOpacity(((this.currentIter-1) < 0) ? 0 : 1); }.bind(this));
       
    },
    changeSeeAlsoLinks : function (legendandlinkContainer) {
    if(!$chk(legendandlinkContainer)) return;
    legendandlinkContainer.getElements("a.seealsoLink").each(function(elt){elt.setProperty("href","#");if($chk(elt.getElement("span.label"))) elt.addEvent("click", myMenu.getByLabel.pass(elt.getElement("span.label").innerHTML,myMenu));}.bind(this));
    },
    createFullImage : function () {
        this.maxIter = this.galleryData.length;
        var fullImg = new Element('img').setProperties({'alt' : ''}).setStyles({'display' : 'block', 'opacity' : 0}).addClass('fullSizeImage').injectInside(this.fullPanel);
        return fullImg;
    },
    populateData: function() {
		currentArrayPlace = this.galleryData.length;
		options = this.options;
		var data = $A(this.galleryData);
		data.extend(this.populateGallery(this.populateFrom));
		this.galleryData = data;
		this.fireEvent('onPopulated');
	},
    populateGallery: function(element) {
		var data = [];
		options = this.options;
		element.getElements(options.elementSelector).each(function(el) {
			elementDict = {
				image: el.getElement(options.imageSelector).getProperty('src'),
				number: currentArrayPlace
			};
			elementDict.extend = $extend;
			data.extend([elementDict]);
			currentArrayPlace++;
			if (this.options.destroyAfterPopulate)
				el.remove();
		});
		return data;
	},
	goTo : function(num){
		this.changeItem(num);
	},
	changeItem: function(num) {
		this.fireEvent('onStartChanging');
		this.galleryInit = 0;
		if (this.currentIter != num)
		{
			this.currentIter = num;
			this.fullImage.setProperty('src', this.galleryData[num].image).setStyles({'opacity' : 1});
		}
		this.fireEvent('onChanged');
	},
	nextItem: function(loop) {
		this.fireEvent('onNextCalled');
		this.nextIter = this.currentIter+1;
		if (loop && this.nextIter >= this.maxIter)
			this.nextIter = 0;
	    else if(!loop && this.nextIter >= this.maxIter)
	        return;
		this.galleryInit = 0;
		this.goTo(this.nextIter);
	},
	backItem: function(loop) {
		this.fireEvent('onBackCalled');
		this.backIter = this.currentIter-1;
		if (loop && this.backIter < 0)
			this.backIter = this.maxIter;
	    else if(!loop && this.backIter < 0)
	        return;
		this.galleryInit = 0;
		this.goTo(this.backIter);
	}
});
NormalImg.implement(new Events);
NormalImg.implement(new Options);
var OverViewPage = new Class({
    initialize: function(fullPanelid, menuOcc, options){
        this.setOptions({
		}, options);
		this.fireEvent('oninit');
		$(fullPanelid).getElementsBySelector("a.ovrviewLink").each(function (link){if($chk($E("span.label",link))) curlabel = $E("span.label",link).innerHTML;link.setProperty("href","#").addEvent("click", menuOcc.getByLabel.pass(curlabel,menuOcc))}.bind(this))
		
    }
});
OverViewPage.implement(new Events);
OverViewPage.implement(new Options);
var randomImagePage = new Class({
    initialize: function(fullPanelid, menuOcc, options){
        this.setOptions({
		}, options);
		this.fireEvent('oninit');
		$(fullPanelid).getElementsBySelector("a").each(function (link){if($chk($E("span.label",link))) curlabel = $E("span.label",link).innerHTML;link.setProperty("href","#").addEvent("click", menuOcc.getByLabel.pass(curlabel,menuOcc))}.bind(this))
		
    }
});
randomImagePage.implement(new Events);
randomImagePage.implement(new Options);
formFunctions = new Abstract ({
    prepareBtn: function(formId) {
        new Element("div").setProperty("id","response_"+formId).injectInside($("Form_"+formId))
        $("sendbtn_"+formId).addEvent('click', this.sendForm.pass(formId));
    },
	sendForm: function(formid){
	    new Ajax("/ajax/sendForm.aspx", {method: 'post', autoCancel : true, update:$("response_"+formid), data:$("Form_"+formid).toQueryString(), evalScripts: true}).request();
	}
});
