/**
  * @name: FD.gallery 
  * @package: Fairfax Digital Javascript Framework 
  * @version: 1.0 
  * @author: Dave Elkan 
  * @copyright: Copyright 2007. Fairfax Digital. 
  * * * * * * * * * * * * * * * * * * * * * * * * * * 
  *             DO NOT ALTER THIS FILE. 
  * If your requirements are not met by this widget 
  * or this widget does not work please ask 
  * Dave Elkan <delkan@fairfaxdigital.com.au>. 
  * This widget is designed to to be used across 
  * the Fairfax Digital Network and contains no  
  * site specific code. 
  * Altering this file will render it unsupportable. 
  * * * * * * * * * * * * * * * * * * * * * * * * * *  
  **/
if(window["FD"]){FD.Gallery=new Class({Implements:[Options,Events],options:{idScroll:"FDGThumbs",idMainImg:"mImg",idImgDesc:"mImgDesc",idSwitch:"FDGSwitch",idRotate:"rotate",idGallery:"gallery",idScrollPrev:"scrollPrev",idScrollNext:"scrollNext",idNav:"nav",classSelected:"selected",classPrev:"prev",classNext:"next",classPageNo:"page",classHidden:"hidden",classReset:"reset",rotateDur:1500,classMoveLinks:"move",propGalImages:"FDGalleryImages",preload:true,galW:980,galH:330,dur:200,hotZone:50,hotZoneDelay:2000,coldZone:125,openPos:0,imgMThreshold:50,itemsAtOnce:6,adSwapCount:1,pageOf:"of",navElementType:"a"},navW:100,navH:115,imgC:0,imgPos:0,imgLoaded:[],navPos:0,navOn:true,navTrans:false,clickNo:0,rotating:false,disabled:false,mainMargins:[],initialize:function(I){this.setOptions(I);
var H=this.getGal();var A=this.getNav();var D=window[this.options.propGalImages];if(H&&A&&D){var G=H.getCoordinates();this.galLeft=G.left;this.galTop=G.top;this.imgArr=D;this.constructNav();this.autoAdjustMargin($(this.options.idMainImg),0);if(this.options.hotZone>0){H.addEvent("mouseleave",this.closeNav.bind(this));A.addEvent("mouseover",this.setNavOver.bind(this));this.appendMouseE.delay(this.options.hotZoneDelay,this,H);
this.closeDelay=this.closeNav.delay(this.options.hotZoneDelay,this)}else{A.addEvent("click",this.toggleNav.bind(this))}H.addEvent("click",this.moveBy.bind(this,1,true));document.addEvent("keydown",this.doKeyPress.bind(this,null,true));if(this.options.preload){var B={onProgress:this.setImgLoaded.bind(this)};Asset.images(D,B);A.addEvent("click",this.catchClick.bind(this,[],true))}var E=$$("."+this.options.classReset);
for(var C=0,F=E.length;C<F;C++){E[C].addEvent("click",this.reset.bind(this,[],true))}}},appendMouseE:function(A){if(A){A.addEvent("mousemove",this.checkNav.bind(this))}},doKeyPress:function(C){if(!this.disabled){var B=C.key;var A=0;if(!C.control&&!C.shift&&!C.alt){if(B=="left"||B=="space"||B=="right"){if(B=="left"){A=-1}else{if(B=="right"||B=="space"){A=1}}this.moveBy(C,A)}else{if(B=="esc"){this.closeNav()
}}}}},setNavOver:function(){if(this.closeDelay){$clear(this.closeDelay)}if(!this.navOver){this.navOver=true}},autoAdjustMargin:function(C,B){if(C){if(!B){var B=0}if(!this.mainMargins[B]){var A=C.height;if(A>100&&A<this.options.galH){var D=Math.round((this.options.galH-A)/2);this.mainMargins[B]=D}}if(this.mainMargins[B]){C.setStyle("margin-top",this.mainMargins[B]+"px")}}},catchClick:function(A){new Event(A).stop()
},setImgLoaded:function(C,A){var B=$("FDGalThumb_"+A);if(B){this.imgLoaded[A]=true;B.setOpacity(1);B.removeClass("loading")}},openNav:function(){if(!this.navOn){if(!this.navTrans){var D=this.getNav();var C=D.getStyle("top").toInt();this.navTrans=true;var B={transition:Fx.Transitions.Quad.easeOut,onComplete:this.navComplete.bind(this),duration:this.options.dur};var A=new Fx.Style(D,"top",B);A.start(C,this.options.openPos);
this.transBuffer=""}else{this.transBuffer="open"}}},closeNav:function(){if(this.navOn){if(!this.navTrans){var D=this.getNav();var C=D.getStyle("top").toInt();this.navTrans=true;var B={transition:Fx.Transitions.Quad.easeOut,onComplete:this.navComplete.bind(this),duration:this.options.dur};var A=new Fx.Style(D,"top",B);var E=this.navH*-1;if(this.options.openPos>0){E=this.navH+this.options.openPos}A.start(C,E);
this.transBuffer=""}else{this.transBuffer="close"}}},navComplete:function(){this.navTrans=false;var A=this.transBuffer;if(A=="close"){this.closeNav()}else{if(A=="open"){this.openNav()}else{var C=this.getNav();var B=C.getStyle("top").toInt();if(B==this.options.openPos){this.fireEvent("navOpen");this.navOn=true}else{this.fireEvent("navClosed");this.navOn=false}}}},constructNav:function(){var E=this.getScroller();
if(E){var J=E.getCoordinates();this.navH=J.height;var G=E.getElements(this.options.navElementType);this.imgC=G.length;for(var H=0,B=G.length;H<B;H++){if(H==0){this.navW=G[H].offsetWidth;if(this.options.startImg){if(G[this.options.startImg]){G[this.options.startImg].addClass(this.options.classSelected)}}else{G[H].addClass(this.options.classSelected)}}G[H].addEvent("click",this.swap.bind(this,H,true));
var C=G[H].getElements("img")[0];C.id="FDGalThumb_"+H;if(C.offsetHeight<this.navH){var I=Math.floor((this.navH-C.offsetHeight)/2);if(I>1){C.setStyle("margin-top",I+"px")}}}var A=this.getNav();var K=A.getStyle("width").toInt();this.thumbsVisible=Math.round(K/this.navW);this.parseButtons();if(this.options.startImg){var D=this.options.startImg;if(D<=this.imgC){this.imgPos=this.options.startImg;this.moveNavToCurrentImage(1)
}}var F=$(this.options.idSwitch);if(F){E.addEvent("click",this.toggleNav.bind(this,null,true));F.addEvent("click",this.toggleNav.bind(this,null,true))}}},toggleNav:function(B){if(B){new Event(B).stop()}var C="Show Thumbnails";if(!this.navOn){C="Hide Thumbnails";this.navOn=true;this.openNav()}else{this.navOn=false;this.closeNav()}var A=$(this.options.idSwitch);if(A){A.setText(C)}},parseButtons:function(){var G=$(this.options.idScrollPrev);
var F=$(this.options.idScrollNext);if(G){G.addEvent("click",this.doMoveNavClick.bind(this,(-1*this.options.itemsAtOnce),true))}if(F){if(this.imgC<=this.options.itemsAtOnce){F.addClass(this.options.classHidden)}F.addEvent("click",this.doMoveNavClick.bind(this,this.options.itemsAtOnce,true))}var E=$$("."+this.options.classMoveLinks);for(var B=0,D=E.length;B<D;B++){var A=E[B];var C=1;if(A.hasClass(this.options.classPrev)){C=-1
}A.addEvent("click",this.moveBy.create({bind:this,event:true,arguments:C}))}this.initRotate()},initRotate:function(){var A=$(this.options.idRotate);if(A){A.addEvent("click",this.rotate.bind(this),true)}},moveBy:function(B,A){if(B){new Event(B).stop()}else{var B}if(this.options.hotZone>0){if(B){this.closeNav()}}else{if(this.navOn){this.toggleNav()}}var C=this.imgPos+A;if(C==this.imgC){C=0}else{if(C<0){C=this.imgC-1
}}this.swap(B,C);this.moveNavToCurrentImage(A)},reset:function(B){if(B){new Event(B).stop()}var A=-1*this.imgPos;this.moveBy(B,A)},rotate:function(A){if(A){new Event(A).stop()}var B=$(this.options.idRotate+"Switch");if(B){if(!this.rotating){this.rotating=true;this.rotateID=this.moveBy.periodical(this.options.rotateDur,this,[null,1]);B.addClass(this.options.classSelected)}else{$clear(this.rotateID);
this.rotateID=false;this.rotating=false;B.removeClass(this.options.classSelected)}}},moveNavToCurrentImage:function(C){var A=0;if((this.imgPos+1)>this.thumbsVisible||this.imgPos<this.navPos){if(this.imgPos>0){var B=Math.floor(this.thumbsVisible/2);if((this.imgPos+1)==this.imgC||B<(this.imgC-this.imgPos)){A=this.imgC-this.navPos}else{if(this.imgPos==B){B=this.imgPos*-1}A=C*(this.imgPos-B)}}else{A=-1*(this.imgC-this.navPos+this.thumbsVisible)
}this.moveNav(A)}},checkNav:function(B){if(!B){this.closeNav();return }var A=Client.getScrollTop();var C=(B.client.y+A-this.galTop);if(!this.navTrans&&!this.disabled){if(this.options.openPos==0){if(!this.navOn&&C<this.options.hotZone){this.openNav()}else{if(this.navOn&&this.navOver&&C>this.options.coldZone){this.closeNav()}}}else{if(!this.navOn&&C>this.options.openPos){this.openNav()}else{if(this.navOn&&C<this.options.openPos){this.closeNav()
}}}}},doMoveNavClick:function(B,A){if(B){new Event(B).stop();this.moveNav(A)}},moveNav:function(A){var G=this.navPos+A;if(A>0){if((G+this.thumbsVisible)>=this.imgC){G=this.imgC-this.thumbsVisible}}else{if(G<0){G=0}}if(G==(this.imgC-this.thumbsVisible)){$(this.options.idScrollNext).addClass(this.options.classHidden)}else{$(this.options.idScrollNext).removeClass(this.options.classHidden)}if(G==0){$(this.options.idScrollPrev).addClass(this.options.classHidden)
}else{$(this.options.idScrollPrev).removeClass(this.options.classHidden)}this.navPos=G;var F=(G*this.navW)*-1;var D=this.getScroller();var E=D.getStyle("left").toInt();if(E!=F&&F<this.options.galW){var C={duration:this.options.dur,transition:Fx.Transitions.Quad.easeOut};var B=new Fx.Style(D,"left",C);B.start(E,F)}},swap:function(D,B){if(D){new Event(D).stop();if(this.rotateID){this.rotate()}}if(!isNaN(B)&&this.imgArr[B]){this.clickNo++;
var C=this.getGal();if(this.options.preload){if(this.imgLoaded[B]){C.removeClass("loading")}else{C.addClass("loading")}}this.setSelected(B);var F=this.getImgDesc();if(F){F.empty().innerHTML=FDGalleryDesc[B]}var A=$(this.options.idMainImg);var E=new Element("img");E.src=this.imgArr[B];E.injectBefore(A);this.autoAdjustMargin(E,B);A.remove();Garbage.trash(A);E.id=this.options.idMainImg;this.setImageNumber(B);
this.fireEvent("swap")}},setImageNumber:function(B){var A=$$("."+this.options.classPageNo);var D=(B+1)+" "+this.options.pageOf+" "+this.imgC;for(var C=0,E=A.length;C<E;C++){A[C].setText(D)}},setSelected:function(C){if(!isNaN(C)){this.imgPos=C;var B=$(this.options.idScroll).getElements("a");for(var A=0,D=B.length;A<D;A++){if(A==C){B[A].addClass(this.options.classSelected)}else{B[A].removeClass(this.options.classSelected)
}}}},getGal:function(){return $(this.options.idGallery)},getNav:function(){return $(this.options.idNav)},getScroller:function(){return $(this.options.idScroll)},getImgDesc:function(){if(window["FDGalleryDesc"]){return $(this.options.idImgDesc)}}})}
