var Tablet=Tablet||{};Tablet.PreloadedImage=function(){this.init.apply(this,arguments);};Tablet.PreloadedImage.prototype={init:function(src){this.options=Object.extend({parentElement:document.body,onLoad:function(){}},arguments[1]||{});this.src=src;Event.onTabletLoaded(this.loadImage.bind(this));},loadImage:function(){this.img=this.buildImage(this.src);this.attachEvent(this.img,'load',this.onLoad);this.attach(this.img,this.options.parentElement);},buildImage:function(src){var img=document.createElement('img');img.style.display='none';img.src=src;return img;},attachEvent:function(elem,event,handler){Event.observe(elem,event,handler.bind(this));},attach:function(elem,parentElem){parentElem.appendChild(elem);},onLoad:function(event){if(Prototype.Browser.WebKit&&!this.img.complete){return window.setTimeout(this.onLoad.bind(this),50);}
this.options.onLoad(this.src);}};
var Tablet=Tablet||{};Tablet.ViewFinder=function(){this.init.apply(this,arguments);};Tablet.ViewFinder.prototype={init:function(elem,listeners){this.elem=$(elem);this.listeners=(listeners.constructor==Array)?listeners:[listeners];this.options=Object.extend({extraX:0,extraY:0,resizeElem:false,moveElem:false,constrainX:false,constrainY:false,moveConstrainX:false,moveConstrainY:false,resizeConstrainX:false,resizeConstrainY:false,duration:.25},arguments[2]||{});this.registerListeners(this.listeners);this.currentEffects=false;},registerListeners:function(listeners){listeners=listeners||this.listeners;for(var i=0;i<listeners.length;i++){this.registerListener(listeners[i]);}},registerListener:function(listener){Event.observe(listener.elem,listener.event,this.eventHandler());},eventHandler:function(){this._eventHandler=this._eventHandler||this.onEvent.bind(this);return this._eventHandler},onEvent:function(event){var listener=this.listenerByElem(Event.element(event));(listener.option('onAction')||function(){})()
return this.viewFind(listener);},viewFind:function(listener){this.halt();if(listener.option('action')=='hide'){this.hideEffect(listener,arguments[1]);}else{this.moveEffect(listener,arguments[1]);}},effectOptions:function(options){return Object.extend({duration:this.option('duration'),afterFinish:this.afterFinish.bind(this)},options||{});},hideEffect:function(listener){if(this.elem.style.display!='none'){var options=this.effectOptions(arguments[1]);if(!options.duration){this.elem.style.display='none';}else{this.currentEffects.push(new Effect.Fade(this.elem,options));}}
this.move(listener,arguments[1]);this.resize(listener,arguments[1]);},moveEffect:function(listener){this.unhide();this.currentEffects.push(new Effect.Morph(this.elem,Object.extend(this.effectOptions(arguments[1]),{style:'opacity: 1;'})))
this.resize(listener,arguments[1]);this.move(listener,arguments[1]);},resize:function(listener){var style='';if(!this.option('constrainX')&&!this.option('resizeConstrainX')){style+='width: '+(listener.boundedElem().offsetWidth+this.option('extraX'))+'px;';}
if(!this.option('constrainY')&&!this.option('resizeConstrainY')){style+='height: '+(listener.boundedElem().offsetHeight+this.option('extraY'))+'px;';}
this.currentEffects.push(new Effect.Morph(this.resizeElem(),Object.extend(this.effectOptions(arguments[1]),{style:style})));},move:function(listener){var style='';if(!this.option('constrainX')&&!this.option('moveConstrainX')){style+='left: '+listener.boundedElem().offsetLeft+'px;';}
if(!this.option('constrainY')&&!this.option('moveConstrainY')){style+='top: '+listener.boundedElem().offsetTop+'px;';}
this.currentEffects.push(new Effect.Morph(this.moveElem(),Object.extend(this.effectOptions(arguments[1]),{style:style})));},unhide:function(){if(this.elem.style.display=='none'){this.elem.style.display='';this.elem.style.opacity='0';}},halt:function(){if(this.currentEffects.length){for(var i=0;i<this.currentEffects.length;i++){this.currentEffects[i].cancel();}}
this.currentEffects=[];},afterFinish:function(effect){var newCurrentEffects=[]
for(var i=0;i<this.currentEffects.length;i++){if(this.currentEffects[i]!=effect){newCurrentEffects.push(this.currentEffects[i]);}}
this.currentEffects=newCurrentEffects;},listenerByElem:function(elem){for(var i=0;i<this.listeners.length;i++){if(this.listeners[i].elem==$(elem)||$(elem).descendantOf(this.listeners[i].elem)){return this.listeners[i];}}
return false;},resizeElem:function(){return this.option('resizeElem')||this.elem;},moveElem:function(){return this.option('moveElem')||this.elem;},option:function(name){return this.options[name];}}
Tablet.ViewFinder.Listener=function(){this.init.apply(this,arguments);};Tablet.ViewFinder.Listener.prototype={init:function(elem,event){this.elem=$(elem);this.event=event;this.options=Object.extend({action:'move',boundedElem:false,onAction:function(){}},arguments[2]||{});},option:function(name){return this.options[name]},boundedElem:function(){return this.option('boundedElem')||this.elem;}};
var Tablet=Tablet||{};Tablet.Slideshow=function(){this.init.apply(this,arguments);}
Tablet.Slideshow.prototype={init:function(viewer,thumbList,elements){this.selectedElement=false;this.activeElement=false;this.options=Object.extend({controlLeft:false,controlRight:false,viewFind:false,moveConstrainY:true,extraX:0,inBetweenTime:5,duration:1,pauseOnHover:true,appearEffect:Effect.AppearBlind,disappearEffect:Effect.Fade,start:true,leftControl:false,rightControl:false,thumbSlider:true,sliderExtraX:0,sliderExtraY:0,sliderRightControl:false,sliderLeftControl:false,onSlide:function(){},scrollIntoView:true,stopOnHover:true,onHover:function(){},onUnhover:function(){},onLoad:function(){}},arguments[3]||{});this.viewer=$(viewer);this.thumbList=$(thumbList);this.elements=(elements.constructor==Array)?elements:[elements];this.listeners=this.attachElements(this.elements);this.attachViewerEvents();var viewFindOptions=Object.extend({},this.options);viewFindOptions.duration=viewFindOptions.duration/2||0;this.viewFinder=this.initViewFinder(this.options.viewFind,this.listeners,viewFindOptions);this.stylize();this.thumbSlider=this.initThumbSlider(this.thumbList);this.attachControls();this.options.onLoad(this);if(this.selectedElement){this.goToPage(this.selectedElement);}else if(this.options.start){this.nextPage();}},stylize:function(){this.viewer.style.position='relative';this.viewer.style.overflow='hidden';},attachElements:function(elements){var listeners=[]
for(var i=0;i<elements.length;i++){this.bindElement(elements[i]);this.viewer.appendChild(elements[i].image);if(this.thumbList){this.thumbList.appendChild(elements[i].thumbnail);}
this.attachEvents(elements[i]);if(elements[i].options.selected){this.selectedElement=elements[i];}
if(elements[i].options.viewFind){listeners.push(elements[i].viewFinderListener);}}
return listeners;},attachControls:function(){if(this.options.controlLeft){Event.observe(this.options.controlLeft,'click',this.leftClickHandler());}
if(this.options.controlRight){Event.observe(this.options.controlRight,'click',this.rightClickHandler());}},leftClickHandler:function(){this._leftClickHandler=this._leftClickHandler||this.prevPageHandler.bind(this);return this._leftClickHandler;},rightClickHandler:function(){this._rightClickHandler=this._rightClickHandler||this.nextPageHandler.bind(this);return this._rightClickHandler;},nextPageHandler:function(event){this.options.scrollIntoView=true;this.nextPage();},prevPageHandler:function(event){this.options.scrollIntoView=true;this.prevPage();},bindElement:function(element){element.slideshow=this;},attachEvents:function(element){element.attachEvents();},attachViewerEvents:function(element){if(this.options.stopOnHover){Event.observe(this.viewer,'mouseover',this.cancel());Event.observe(this.viewer,'mouseout',this.reinstate());}},initViewFinder:function(viewFind,listeners){if(viewFind){return new Tablet.ViewFinder(viewFind,listeners,arguments[2]||{});}},initThumbSlider:function(thumbList){if(this.options.thumbSlider){var slider=new Tablet.Slider(thumbList,{'duration':this.options.duration,'extraX':this.options.sliderExtraX,'extraY':this.options.sliderExtraY,'ignore':$(this.options.viewFind),'rightControl':this.options.sliderRightControl,'leftControl':this.options.sliderLeftControl,'onSlide':this.options.onSlide});if(slider.options.rightControl){slider._nextPage=slider.nextPage;slider.nextPage=function(){if(this.activeElement&&Math.max(slider.currentPage()+1,0)==slider.pageByElement(this.activeElement.thumbnail)){this.options.scrollIntoView=true;}else{this.options.scrollIntoView=false;}
slider._nextPage.apply(slider,arguments);}.bind(this);}
if(slider.options.leftControl){slider._prevPage=slider.prevPage;slider.prevPage=function(){if(this.activeElement&&Math.max(slider.currentPage()-1,0)==slider.pageByElement(this.activeElement.thumbnail)){this.options.scrollIntoView=true;}else{this.options.scrollIntoView=false;}
slider._prevPage.apply(slider,arguments);}.bind(this);}
return slider;}
return false;},handleThumbEvent:function(element,event){this.pageTo(element);},pageTo:function(element){if(!this.activeElement||this.elements.length>1){this.deactivate();if(element){return this.activate(element);}}},nextPage:function(){return this.pageTo(this.nextElement());},prevPage:function(){return this.pageTo(this.prevElement());},nextElement:function(){if(this.activeElement&&this.elements&&this.elements.length){for(var i=0;i<this.elements.length-1;i++){if(this.elements[i]==this.activeElement){return this.elements[i+1];}}}
return(this.elements&&this.elements.length)?this.elements[0]:false;},prevElement:function(){if(this.activeElement&&this.elements&&this.elements.length){for(var i=1;i<this.elements.length;i++){if(this.elements[i]==this.activeElement){return this.elements[i-1];}}}
return(this.elements&&this.elements.length)?this.elements[this.elements.length-1]:false;},activate:function(element){if(this.options.scrollIntoView){this.scrollIntoView(element);}
this.viewFind(element);new this.options.appearEffect(element.image,{duration:this.options.duration||0});this.activeElement=element;this.setTimer();},deactivate:function(){this.cancelTimer();if(this.activeElement){new this.options.disappearEffect(this.activeElement.image,{duration:this.options.duration||0});}
this.activeElement=false;},viewFind:function(element){if(this.viewFinder){this.viewFinder.viewFind(element.viewFinderListener);}},cancel:function(){this._cancel=this._cancel||this.cancelTimerOnHover.bind(this);return this._cancel;},reinstate:function(){this._reinstate=this._reinstate||this.checkHoverAndReinstate.bind(this);return this._reinstate;},cancelTimerOnHover:function(event){this.cancelTimer();this.options.onHover(this.viewer);},checkHoverAndReinstate:function(event){var target=false;if(event){target=$((Prototype.Browser.IE)?event.toElement:event.relatedTarget);}
if(!event||!target||(target!=this.viewer&&!target.descendantOf(this.viewer))){this.setTimer();this.options.onUnhover(this.viewer);}},setTimer:function(){this._timer=window.setTimeout(this.onTimeout(),(this.options.inBetweenTime||0)*1000);},cancelTimer:function(){if(this._timer){window.clearTimeout(this._timer);this._timer=false;}},onTimeout:function(){this._onTimeout=this._onTimeout||this.nextPage.bind(this);return this._onTimeout;},scrollIntoView:function(element){if(this.thumbSlider){this.thumbSlider.pageIntoView(element.thumbnail);}}};Tablet.Slideshow.Element=function(){this.init.apply(this,arguments);}
Tablet.Slideshow.Element.prototype={init:function(src,thumbnailSrc,caption){this.slideshow=false;this.options=Object.extend({boundingCaption:document.createElement('span'),boundingImage:document.createElement('div'),boundingThumbnail:document.createElement('li'),viewFind:true,loadingSrc:'img/global/loading.gif',thumbLoadingSrc:false,loadingClass:'loading',selected:false,width:0,height:0,thumbWidth:0,thumbHeight:0,loadingHeight:0,loadingWidth:0,thumbLoadingHeight:0,thumbLoadingWidth:0,event:'click'},arguments[3]||{});this.src=src;this.thumbnailSrc=thumbnailSrc;this.caption=caption;if(this.thumbnailSrc){this.thumbnail=this.initImageElem(this.thumbnailSrc,this.options.boundingThumbnail,[],this.options.thumbLoadingSrc,this.options.thumbLoadingHeight,this.options.thumbLoadingWidth);}
var imageChildren=(this.caption)?[this.initCaption(this.caption,this.options.boundingCaption)]:[];this.image=this.initImageElem(this.src,this.options.boundingImage,imageChildren,this.options.loadingSrc,this.options.thumbLoadingHeight,this.options.thumbLoadingWidth);this.viewFinderListener=(this.options.viewFind)?this.initViewFinderListener(this.thumbnail,this.options.event):false;this.stylize();},stylize:function(){this.image.style.display='none';this.image.style.position='absolute';this.image.style.top='0px';this.image.style.left='0px';},initViewFinderListener:function(thumb,event){return new Tablet.ViewFinder.Listener(thumb,event);},initImageElem:function(src,bounding,others,loadingSrc,loadingHeight,loadingWidth){others=((others||[]).constructor==Array)?(others||[]):[others];var imageElem=document.createElement('img');this.preloadImage(imageElem,src,loadingSrc,loadingHeight,loadingWidth);if(bounding){for(var i=0;i<others.length;i++){if(others[i]){bounding.appendChild(others[i]);}}
bounding.appendChild(imageElem);return bounding;}
return imageElem;},preloadImage:function(imageElem,src,loadingSrc,loadingHeight,loadingWidth){if(loadingSrc){imageElem.src=loadingSrc;}
if(this.options.loadingClass){$(imageElem).addClassName(this.options.loadingClass)}
if(loadingHeight){imageElem.height=loadingHeight;}
if(loadingWidth){imageElem.width=loadingWidth;}
new Tablet.PreloadedImage(src,{onLoad:this.onPreload(imageElem)});},onPreload:function(el){return function(src){if(el.height){el.height=null;}
if(el.width){el.width=null;}
this.loadImageFromPreloaded(el,src);if(this.options.loadingClass){$(el).removeClassName(this.options.loadingClass);}
if($(el)==this.image||$(el).descendantOf(this.image)){if(this.options.height){el.height=this.options.height;}
if(this.options.width){el.width=this.options.width;}}else if($(el)==this.thumbnail||$(el).descendantOf(this.thumbnail)){if(this.options.thumbHeight){el.height=this.options.thumbHeight;}
if(this.options.thumbWidth){el.width=this.options.thumbWidth;}}}.bind(this);},loadImageFromPreloaded:function(el,src){el.src=src;},initCaption:function(caption,bounding){if(!caption){return false;}
var textNode=document.createTextNode(caption);if(bounding){bounding.appendChild(textNode);return bounding;}
return textNode;},attachEvents:function(){if(this.thumbnail){Event.observe(this.thumbnail,this.options.event,this.thumbEventHandler());}},thumbEventHandler:function(){this._thumbEventHandler=this._thumbEventHandler||this.handleThumbEvent.bind(this);return this._thumbEventHandler;},handleThumbEvent:function(event){this.slideshow.handleThumbEvent(this,event);}};Effect.AppearBlind=function(){this.init.apply(this,arguments);}
Effect.AppearBlind.prototype={init:function(elem,options){this.elem=$(elem);var spans=this.elem.getElementsByTagName('span');this.span=(spans)?spans[0]:false;if(this.span){this.span.style.overflow='hidden';this.span.style.height='0px';this.span.style.padding='';this.span.style.paddingTop='';this.span.style.padingBottom='';}
this.options=options||{};this.appear=new Effect.Appear(elem,Object.extend({afterFinish:function(){if(this.span){var ops=Object.extend({style:'height: '+this.toHeight()+'; padding: '+this.toPadding()+';',transition:Effect.Transitions.sinoidal},this.options||{})
ops.duration=(ops.duration||1)/2;new Effect.Morph(this.span,ops);}}.bind(this)},this.options));},toHeight:function(){return'15px';},toPadding:function(){return'6px 8px';}}
var Tablet=Tablet||{};Tablet.Slider=function(){this.init.apply(this,arguments);};Tablet.Slider.prototype={init:function(slider){this.currentEffect=false;this.options=Object.extend({leftControl:false,rightControl:false,duration:1,extraY:0,extraX:0,onSlide:function(){},ignore:[]},arguments[1]||{});this.options.ignore=(this.options.ignore.constuctor==Array)?this.options.ignore:[this.options.ignore];this.slider=$(slider);this.bounding=$(this.slider.parentNode);this.bindControls();this.stylize();},stylize:function(){this.bounding.style.position='relative';this.bounding.style.overflow='hidden';this.slider.style.position='relative';this.positionChildren(this.slider);this.widthify(this.slider);},bindControls:function(){if(this.options.leftControl){Event.observe(this.options.leftControl,'click',this.leftControlHandler());}
if(this.options.rightControl){Event.observe(this.options.rightControl,'click',this.rightControlHandler());}},leftControlHandler:function(){this._leftControlHandler=this._leftControlHandler||this.prevHandler.bind(this);return this._leftControlHandler;},rightControlHandler:function(){this._rightControlHandler=this._rightControlHandler||this.nextHandler.bind(this);return this._rightControlHandler;},prevHandler:function(event){Event.stop(event);this.prevPage();},nextHandler:function(event){Event.stop(event);this.nextPage();},positionChildren:function(elem){var children=elem.getElementsByTagName('*');var left=0;for(var i=0;i<children.length;i++){if(children[i].parentNode!=elem||this.ignore(children[i])){continue;}
children[i].style.position='absolute';children[i].style.top=this.options.extraY+'px';children[i].style.left=left+'px';left+=children[i].offsetWidth+this.options.extraX;}},widthify:function(elem){var children=elem.getElementsByTagName('*');var width=0;for(var i=0;i<children.length;i++){if(children[i].parentNode!=elem||this.ignore(children[i])){continue;}
width+=children[i].offsetWidth+this.options.extraX;}
elem.style.width=(width-this.options.extraX)+'px';},ignore:function(elem){for(var i=0;i<this.options.ignore.length;i++){if(elem==this.options.ignore[i]){return true;}}
return false;},nextPage:function(event){return this.goToPage(Math.max(this.currentPage()+1,0));},prevPage:function(event){return this.goToPage(Math.max(this.currentPage()-1,0));},currentPage:function(){return Math.floor(Math.abs(parseInt(this.slider.style.left)||0)/this.bounding.clientWidth);},pageIntoView:function(elem){return this.goToPage(this.pageByElement(elem));},pageByElement:function(elem){return Math.floor(parseInt(elem.style.left)/this.bounding.clientWidth);},lastPage:function(){return Math.floor((this.slider.offsetWidth-(this.slider.offsetWidth%this.bounding.clientWidth))/this.bounding.clientWidth);},goToPage:function(page){this.currentEffect=new Effect.Morph(this.slider,{style:{'left':(Math.min(page*this.bounding.clientWidth,this.slider.offsetWidth-(this.slider.offsetWidth%this.bounding.clientWidth))*-1)+'px'},duration:this.options.duration});this.options.onSlide(page,this);}};
