/* Author : <a href="mailto:alcmene.gs@gmail.com">Matti Schneider-Ghibaudo</a>
*LICENSE :
*Not determined yet. This code is pre-release and SHOULDN'T BE USED, MODIFIED OR DISCLOSED ANYWHERE WITHOUT PRIOR REQUEST TO THE AUTHOR.
*/
var Toggler=new Class({name:"Toggler",Implements:[Options,Events],togglers:new Array(),sliders:new Array(),targets:new Array(),_isOpened:false,prevScroll:{},scroller:null,options:{togglers:{show:true,className:"toggler"},targets:{show:"anchor",className:"toggled"},closer:{className:"closer",text:"Close"},scroll:{use:true,offset:10},openedClassName:"opened",closedClassName:"closed",replace:["Voir","Masquer"],effect:{}},initialize:function init(C,A,B){this.setOptions(B);if(C){this.addTogglers($$(C))}if(A){this.addTargets($$(A))}if(this.options.scroll){this.scroller=new Fx.Scroll(window);this.prevScroll=window.getScroll()}if(this.openOnLoad){this.open()}},addTogglers:function addToggler(A){var B=$$(A);B.each(this.attachTo.bind(this))},attachTo:function attachTo(C){if(this.togglers.contains(C)){return }C.addEvent("click",this.toggle.bind(this));if(this.options.togglers.show){C.setStyle("display",(Browser.Engine.trident&&Browser.Engine.version<6?"block":"inherit"))}var A=C.get("html");var B=A.replace(this.options.replace[0],this.options.replace[1]);C.store("closedHtml",A);C.store("openedHtml",B);C.addClass(this.options.togglers.className);C.addClass(this.isOpened()?this.options.openedClassName:this.options.closedClassName);this.togglers.push(C)},addTargets:function addTargets(B){var A=$$(B);this.targets.extend(A);A.each(this.target.bind(this))},target:function target(C){var A=new Fx.Slide(C,this.options.effect);if(!this.options.targets.show||(this.options.targets.show=="anchor"&&C.get("id")&&(!new String(document.location).contains("#"+C.get("id"))))){A.hide()}else{A.show();this.openOnLoad=true}C.addClass(this.options.targets.className);if(this.options.closer&&(this.options.closer.show!==false)){var B=new Element("a",{html:this.options.closer.text,"class":this.options.closer.className}).inject(C);this.addTogglers(B)}this.sliders.push(A)},isOpened:function isOpened(){return this._isOpened},toggle:function toggle(){if(this.isOpened()){this.close()}else{this.open()}},open:function open(){this.togglers.each(function(A){A.set("html",A.retrieve("openedHtml"));A.removeClass(this.options.closedClassName);A.addClass(this.options.openedClassName)},this);this.sliders.each(function(B,A){B.slideIn().chain(function(){this.prevScroll=this.scroller.showElement(this.targets[A],this.options.scroll.offset)}.bind(this))},this);this._isOpened=true;this.fireEvent("open",[this.targets,this.togglers,this])},close:function close(){this.togglers.each(function(A){A.set("html",A.retrieve("closedHtml"));A.removeClass(this.options.openedClassName);A.addClass(this.options.closedClassName)},this);this.sliders.each(function(A){A.slideOut()},this);this.scroller.start(this.prevScroll.x,this.prevScroll.y);this._isOpened=false;this.fireEvent("close",[this.targets,this.togglers,this])}});Element.implement({toggle:function toggle(A,B){return new Toggler(this,A,B)}});Fx.Scroll.implement({showElement:function showElement(G,D){G=$(G);D=D||0;var K=G.getPosition(this.element),C=G.getSize(),B={};var J=this.element.getScroll(),A=this.element.getSize(),I={};var F={};for(var H in K){F[H]=J[H];B[H]=K[H]+C[H];I[H]=J[H]+A[H];var E=K[H]-D<J[H];if(E||B[H]+D>I[H]){F[H]=(C[H]+D>A[H]?K[H]-D:K[H]-(E?D:A[H]-C[H]-D))}}this.start(F.x,F.y);return J}});var AutoToggler=new Class({name:"AutoToggler",Implements:Options,options:{wrapper:document.body,togglers:{tag:"a",attribute:"id",keyword:"toggle-"},targets:{tag:"*",attribute:"class"},passOptions:{}},initialize:function initialize(A){this.setOptions(A);var B=(this.options.wrapper||document.body).getElements(this.options.togglers.tag+"["+this.options.togglers.attribute+"^="+this.options.togglers.keyword+"]");B.each(function(C){var D=C.get(this.options.togglers.attribute);D=D.split(" ");D=D[0].replace(this.options.togglers.keyword,"");new Toggler(C,this.options.targets.tag+"["+this.options.targets.attribute+"^="+D+"]",this.options.passOptions)},this)}});