/* 
  * @name: FD.gallery  
  * @package: Fairfax Digital Javascript Framework  
  * @version: 1.0  
  * @author: Dave Elkan  
  * @copyright: Copyright 2008. 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.  
  * * * * * * * * * * * * * * * * * * * * * * * * * *   
  * Created: 2008-04-08T11:03:00+10:00   
  * Revision: 20   
  * * * * * * * * * * * * * * * * * * * * * * * * * *   
  */ 
if(window.FD){FD.Gallery=new Class({Implements:Options,options:{idScroll:"FDGThumbs",idMainImg:"mImg",idImgDesc:"mImgDesc",idSwitch:"FDGSwitch",idRotate:"rotate",idGallery:"gallery",idNav:"nav",classSelected:"selected",classPrev:"prev",classNext:"next",classPageNo:"page",classHidden:"hidden",classReset:"reset",rotateDur:1500,preload:true,galW:800,galH:600,dur:200,hotZone:50,hotZoneDelay:2000,coldZone:125,openPos:0,imgMThreshold:50,itemsAtOnce:6,adSwapCount:3,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(C){this.setOptions(C);
var B=this.getGal();var G=this.getNav();if(B&&G&&window.FDGalleryImages){var A=B.getCoordinates();this.galLeft=A.left;this.galTop=A.top;this.imgArr=FDGalleryImages;this.constructNav();this.autoAdjustMargin($(this.options.idMainImg),0);if(this.options.hotZone>0){B.addEvent("mouseleave",this.closeNav.bind(this));G.addEvent("mouseover",this.setNavOver.bind(this));this.appendMouseE.delay(this.options.hotZoneDelay,this,B);this.closeDelay=this.closeNav.delay(this.options.hotZoneDelay,this)}else{G.addEvent("click",this.toggleNav.bind(this))
}B.addEvent("click",this.moveBy.bindWithEvent(this,1));document.addEvent("keydown",this.doKeyPress.bindWithEvent(this));if(this.options.preload){var F={onProgress:this.setImgLoaded.bind(this)};Asset.images(FDGalleryImages,F);G.addEvent("click",this.catchClick.bindWithEvent(this))}var E=$$("."+this.options.classReset);for(var D=0,H=E.length;D<H;D++){E[D].addEvent("click",this.reset.bindWithEvent(this))}}},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]){FD.log("Adusting margin for image "+C.src);
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.setStyle("opacity",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={onComplete:this.navComplete.bind(this),duration:this.options.dur};var A=new Fx.Morph(D,B).start({top:[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={onComplete:this.navComplete.bind(this),duration:this.options.dur};var E=this.navH*-1;if(this.options.openPos>0){E=this.navH+this.options.openPos}FD.log("Closing nav");var A=new Fx.Morph(D,B).start({top:[C,E]});this.transBuffer=""}else{this.transBuffer="close"}}},navComplete:function(){this.navTrans=false;var A=this.transBuffer;FD.log("Nav trans finished");
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.navOn=true;this.fireEvent("navOpen")}else{this.navOn=false;this.fireEvent("navClosed")}}}},constructNav:function(G){var E=this.getScroller();if(E){var K=E.getCoordinates();this.navH=K.height;var H=E.getElements(this.options.navElementType);this.imgC=H.length;for(var I=0,B=H.length;I<B;I++){if(I==0){this.navW=H[I].offsetWidth;if(this.options.startImg){if(H[this.options.startImg]){H[this.options.startImg].addClass(this.options.classSelected)
}}else{H[I].addClass(this.options.classSelected)}}H[I].addEvent("click",this.swap.bindWithEvent(this,I));var C=H[I].getElements("img")[0];C.id="FDGalThumb_"+I;if(C.offsetHeight<this.navH){var J=Math.floor((this.navH-C.offsetHeight)/2);if(J>1){C.setStyle("margin-top",J+"px")}}}var A=this.getNav();var L=A.getStyle("width").toInt();this.thumbsVisible=L/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);
this.swap(G,this.options.startImg)}}var F=$(this.options.idSwitch);if(F){E.addEvent("click",this.toggleNav.bindWithEvent(this));F.addEvent("click",this.toggleNav.bindWithEvent(this))}}},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.empty().innerHTML=C}},parseButtons:function(){var G=$("scrollPrev");var F=$("scrollNext");if(G){G.addEvent("click",this.doMoveNavClick.bindWithEvent(this,(-1*this.options.itemsAtOnce)));
G.addClass(this.options.classHidden)}if(F){if(this.imgC<=this.options.itemsAtOnce){F.addClass(this.options.classHidden)}F.addEvent("click",this.doMoveNavClick.bindWithEvent(this,this.options.itemsAtOnce))}var E=$$(".move");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.bindWithEvent(this,C))}this.initRotate()},initRotate:function(){var A=$(this.options.idRotate);if(A){A.addEvent("click",this.rotate.bindWithEvent(this))
}},moveBy:function(B,A){if(B){new Event(B).stop()}else{var B=null}this.swap(B,C);this.moveNavToCurrentImage(A);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=document.getScroll().y;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)){$("scrollNext").addClass(this.options.classHidden)}else{$("scrollNext").removeClass(this.options.classHidden)}if(G==0){$("scrollPrev").addClass(this.options.classHidden)}else{$("scrollPrev").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};var B=new Fx.Morph(D,C).start({left:[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=$("mImg");
var E=new Element("img");E.src=this.imgArr[B];E.inject(A,"before");this.autoAdjustMargin(E,B);A.remove();Garbage.trash(A);E.id="mImg";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].empty().innerHTML=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)}}})};
