(function(){if(typeof Spry=="undefined"||!Spry.Widget||!Spry.Widget.Base)
{alert("SpryImageSlideShow.js requires SpryWidget.js!");return;}
var defaultConfig={plugIns:[],defaultSlide:0,injectionType:"inside",repeatingElementSelector:null,useButtonControls:false,dropFrames:true,autoPlay:true,transitionDuration:2000,displayInterval:6000,slideLinkStopsSlideShow:true,widgetID:null,widgetClass:"ImageSlideShow",playingClass:"ISSPlaying",nameClass:"ISSName",clipClass:"ISSClip",viewClass:"ISSView",slideClass:"ISSSlide",slideVisibleClass:"ISSSlideVisible",slideHiddenClass:"ISSSlideHidden",slideTitleClass:"ISSSlideTitle",slideCaptionClass:"ISSSlideCaption",countClass:"ISSSlideCount",slideLinksClass:"ISSSlideLinks",slideLinkClass:"ISSSlideLink",controlsClass:"ISSControls",firstBtnClass:"ISSFirstButton",prevBtnClass:"ISSPreviousButton",playBtnClass:"ISSPlayButton",nextBtnClass:"ISSNextButton",lastBtnClass:"ISSLastButton",playLabelClass:"ISSPlayLabel",pauseLabelClass:"ISSPauseLabel",slideShowBusy:"ISSBusy",slideLoading:"ISSSlideLoading",sliceMap:{},componentOrder:["view","controls"]};Spry.Widget.ImageSlideShow=function(ele,opts)
{Spry.Widget.Base.call(this);this.element=Spry.$$(ele)[0];this.rootContainer=this.element;this.slideShowName=null;this.imageInfo=[];this.slideElements=[];this.slideElementCount=2;this.currentSlideElementIndex=-1;this.currentVirtualSlideIndex=-1;this.isReady=false;this.loader=new Spry.Utils.ImageLoader();this.isPlaying=false;this.setOptions(this,Spry.Widget.ImageSlideShow.config);this.setOptions(this,opts);var self=this;this.firstFunc=function(e){return self.showFirstSlide();};this.prevFunc=function(e){return self.showPreviousSlide();};this.playFunc=function(e){return self.togglePlayMode();};this.nextFunc=function(e){return self.showNextSlide();};this.lastFunc=function(e){return self.showLastSlide();};this.initializePlugIns(Spry.Widget.ImageSlideShow.config.plugIns,opts);var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreInitialize",evt);if(!evt.performDefaultAction)
return;this.transformMarkup();this.attachBehaviors();this.updateSlideTitle();this.updateSlideCaption();this.updateSlideCountLabel();this.triggerCallbackAfterOnLoad(this.loadImages,this);this.notifyObservers("onPostInitialize",evt);};Spry.Widget.ImageSlideShow.prototype=new Spry.Widget.Base();Spry.Widget.ImageSlideShow.prototype.constructor=Spry.Widget.ImageSlideShow;Spry.Widget.ImageSlideShow.config=defaultConfig;Spry.Widget.ImageSlideShow.prototype.getOffscreenSlideIndex=function()
{var si=this.currentSlideElementIndex;var si=this.panelSet.getCurrentPanelIndex();return si<0?0:((si+1)%this.slideElements.length);};Spry.Widget.ImageSlideShow.prototype.setupOffscreenSlideForDisplay=function(virtualSlideIndex)
{var info=this.imageInfo[virtualSlideIndex];if(!info)
return;var si=this.getOffscreenSlideIndex();var slideEle=this.slideElements[si];var img=Spry.$$("img",slideEle)[0];img.src="";img.src=info.src;img.style.width=info.width+"px";img.style.height=info.height+"px";};Spry.Widget.ImageSlideShow.prototype.showSlide=function(slideIndex)
{var ps=this.panelSet;if(!ps||!ps.showPanel)
return;var offscreenIndex=this.getOffscreenSlideIndex();this.setupOffscreenSlideForDisplay(slideIndex);var evt=new Spry.Widget.Event(this,{target:this.slideElements[offscreenIndex],slideIndex:slideIndex});this.notifyObservers("onPreShowSlide",evt);if(!evt.performDefaultAction)
return false;if(this.panelSelector)
this.panelSelector.selectButton(slideIndex);this.currentSlideElementIndex=offscreenIndex;this.currentVirtualSlideIndex=slideIndex;this.updateSlideTitle();this.updateSlideCaption();this.updateSlideCountLabel();ps.showPanel(offscreenIndex);this.notifyObservers("onPostShowSlide",evt);};Spry.Widget.ImageSlideShow.prototype.hideSlide=function(slideIndex)
{var ps=this.panelSet;if(ps&&ps.hidePanel)
ps.hidePanel(slideIndexs);};Spry.Widget.ImageSlideShow.prototype.showFirstSlide=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreShowFirstSlide",evt);if(!evt.performDefaultAction)
return false;if(this.imageInfo.length)
this.showSlide(0);this.notifyObservers("onPostShowFirstSlide",evt);return false;};Spry.Widget.ImageSlideShow.prototype.showPreviousSlide=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreShowPreviousSlide",evt);if(!evt.performDefaultAction)
return false;if(this.imageInfo.length)
{var prevIndex=this.currentVirtualSlideIndex-1;prevIndex=prevIndex<0?this.imageInfo.length-1:prevIndex;this.showSlide(prevIndex);}
this.notifyObservers("onPostShowPreviousSlide",evt);return false;};Spry.Widget.ImageSlideShow.prototype.showNextSlide=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreShowNextSlide",evt);if(!evt.performDefaultAction)
return false;if(this.imageInfo.length)
{var nextIndex=(this.currentVirtualSlideIndex+1)%this.imageInfo.length;this.showSlide(nextIndex);}
this.notifyObservers("onPostShowNextSlide",evt);return false;};Spry.Widget.ImageSlideShow.prototype.showLastSlide=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreShowLastSlide",evt);if(!evt.performDefaultAction)
return false;if(this.imageInfo.length)
this.showSlide(this.imageInfo.length-1);this.notifyObservers("onPostShowLastSlide",evt);return false;};Spry.Widget.ImageSlideShow.prototype.play=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreStartSlideShow",evt);if(!evt.performDefaultAction)
return false;if(this.panelSet)
this.panelSet.play();this.notifyObservers("onPostStartSlideShow",evt);return false;};Spry.Widget.ImageSlideShow.prototype.stop=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreStopSlideShow",evt);if(!evt.performDefaultAction)
return false;if(this.panelSet)
this.panelSet.stop();this.notifyObservers("onPostStopSlideShow",evt);return false;};Spry.Widget.ImageSlideShow.prototype.togglePlayMode=function()
{if(this.element)
{if(Spry.Utils.hasClassName(this.element,this.playingClass))
this.stop();else
this.play();}
return false;};Spry.Widget.ImageSlideShow.prototype.getCurrentSlide=function()
{return this.panelSet?this.panelSet.getCurrentPanel():null;};Spry.Widget.ImageSlideShow.prototype.getCurrentSlideIndex=function(idx)
{return this.currentVirtualSlideIndex;};Spry.Widget.ImageSlideShow.prototype.getSlideIndex=function(ele)
{var ps=this.panelSet;return ps&&ps.getPanelIndex?ps.getPanelIndex(ele):-1;};Spry.Widget.ImageSlideShow.prototype.getSlides=function()
{var results=[];var clip=Spry.$$("."+this.clipClass,this.element)[0];if(clip)
return Spry.$$("."+this.slideClass,clip);return results;};Spry.Widget.ImageSlideShow.prototype.isInPlayMode=function()
{return this.isPlaying;};Spry.Widget.ImageSlideShow.prototype.handlePanelSetStart=function(e)
{this.isPlaying=true;this.addClassName(this.element,this.playingClass);return false;};Spry.Widget.ImageSlideShow.prototype.handlePanelSetStop=function(e)
{this.isPlaying=false;this.removeClassName(this.element,this.playingClass);return false;};Spry.Widget.ImageSlideShow.prototype.handlePanelSetShowNextPanel=function(e)
{this.showNextSlide();e.preventDefault();};Spry.Widget.ImageSlideShow.prototype.updateLabel=function(className,labelStr)
{var eles=Spry.$$("."+className,this.element);if(eles.length)
{for(var i=0;i<eles.length;i++)
{var e=eles[i];var c=e?e.contentContainer:e;c.innerHTML=labelStr;}}};Spry.Widget.ImageSlideShow.prototype.updateSlideTitle=function()
{var info=this.imageInfo[this.currentVirtualSlideIndex];var title=(info&&info.title)?info.title:"";var evt=new Spry.Widget.Event(this,{title:title});this.notifyObservers("onPreUpdateSlideTitle",evt);if(!evt.performDefaultAction)
return false;this.updateLabel(this.slideTitleClass,title);this.notifyObservers("onPostUpdateSlideTitle",evt);};Spry.Widget.ImageSlideShow.prototype.updateSlideCaption=function()
{var info=this.imageInfo[this.currentVirtualSlideIndex];var caption=(info&&info.caption)?info.caption:"";var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreUpdateSlideCaption",evt,{caption:caption});if(!evt.performDefaultAction)
return false;this.updateLabel(this.slideCaptionClass,caption);this.notifyObservers("onPostUpdateSlideCaption",evt);};Spry.Widget.ImageSlideShow.prototype.updateSlideCountLabel=function()
{var slideIndex=this.currentVirtualSlideIndex;var slideCount=this.imageInfo.length;var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreUpdateSlideCount",evt,{slideIndex:slideIndex,slideCount:slideCount});if(!evt.performDefaultAction)
return false;var label=(slideIndex>=0)?((slideIndex+1)+" of "+slideCount):"";this.updateLabel(this.countClass,label);this.notifyObservers("onPostUpdateSlideCount",evt);};Spry.Widget.ImageSlideShow.prototype.createButtonElement=function(label,className,clickFunc,useLink)
{var btn=this.createOptionalSlicedStructure(null,useLink?"a":"button",className,null,"span");if(useLink)
btn.href="#";else
btn.setAttribute("type","button");this.addClassName(btn,className);btn.contentContainer.appendChild(document.createTextNode(label));return btn;};Spry.Widget.ImageSlideShow.prototype.addImageToLoader=function(slideIndex,info)
{var self=this;this.loader.load(info.src,function(src,img)
{info.width=img.width;info.height=img.height;var lastSlideIndex=self.imageInfo.length-1;if(!self.isReady&&(slideIndex>lastSlideIndex||slideIndex>(self.defaultSlide+1)))
{self.removeClassName(self.element,self.slideShowBusy);self.showSlide(self.defaultSlide);if(self.autoPlay)
self.play();self.isReady=true;}
if(self.panelSelector)
self.panelSelector.enableButton(slideIndex);});};Spry.Widget.ImageSlideShow.prototype.loadImages=function()
{var numImages=this.imageInfo.length;for(var i=0;i<numImages;i++)
this.addImageToLoader(i,this.imageInfo[i]);};Spry.Widget.ImageSlideShow.prototype.extractInfoFromElement=function(ele)
{var info=new Object();if(ele)
{info.src=ele.href?ele.href:ele.src;info.title=ele.title;if(ele.nodeName.toLowerCase()=="a")
{var img=ele.getElementsByTagName("img").item(0);if(img)
info.caption=img.alt;}
else
info.caption=ele.alt;}
return info;}
Spry.Widget.ImageSlideShow.prototype.extractImageInfo=function(elements)
{var evt=new Spry.Widget.Event(this,{repeatingElements:elements});this.notifyObservers("onPreExtractImageInfo",evt);if(!evt.performDefaultAction)
return;var cnt=elements.length;for(var i=0;i<cnt;i++)
{var e=elements[i];var n=e.nodeName.toLowerCase();if(n!="a"&&n!="img")
e=Spry.$$("a, img",e)[0];this.imageInfo.push(this.extractInfoFromElement(e));}
this.notifyObservers("onPostExtractImageInfo",evt);}
Spry.Widget.ImageSlideShow.prototype.transformMarkup=function()
{var elements=[];if(!this.repeatingElementSelector)
elements=this.getElementChildren(this.element);else
elements=Spry.$$(this.repeatingElementSelector,this.element);if(this.element.title)
this.slideShowName=this.element.title;this.extractImageInfo(elements);var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreTransformMarkup",evt);if(!evt.performDefaultAction)
return;var root=this.createOptionalSlicedStructure(null,"div",this.widgetClass);var rootCC=root.contentContainer;if(this.widgetID)
root.id=this.widgetID;for(var i=0;i<this.componentOrder.length;i++)
{var itemName=this.componentOrder[i];switch(itemName)
{case"view":var clip=this.createElement("div",this.clipClass,null);var view=this.createElement("div",this.viewClass,clip);for(var j=0;j<this.slideElementCount;j++)
{var bufEle=this.slideElements[j]=this.createOptionalSlicedStructure(null,"div",this.slideClass);bufEle.appendChild(document.createElement("img"));view.appendChild(bufEle);}
rootCC.appendChild(clip);break;case"controls":var controls=this.createOptionalSlicedStructure(null,"div",this.controlsClass);var controlsCC=controls.contentContainer;controlsCC.appendChild(this.firstBtn=this.createButtonElement("First",this.firstBtnClass,this.firstFunc,!this.useButtonControls));controlsCC.appendChild(this.prevBtn=this.createButtonElement("Previous",this.prevBtnClass,this.prevFunc,!this.useButtonControls));controlsCC.appendChild(this.playBtn=this.createButtonElement("",this.playBtnClass,this.playFunc,!this.useButtonControls));controlsCC.appendChild(this.nextBtn=this.createButtonElement("Next",this.nextBtnClass,this.nextFunc,!this.useButtonControls));controlsCC.appendChild(this.lastBtn=this.createButtonElement("Last",this.lastBtnClass,this.lastFunc,!this.useButtonControls));this.playBtn.contentContainer.innerHTML="<span class=\""+this.playLabelClass+"\">Play</span><span class=\""+this.pauseLabelClass+"\">Pause</span>";rootCC.appendChild(controls);break;case"links":var links=this.createOptionalSlicedStructure(null,"div",this.slideLinksClass);var linksCC=links.contentContainer;for(var j=0;j<elements.length;j++)
linksCC.appendChild(this.createButtonElement((j+1)+"",this.slideLinkClass,null,true));rootCC.appendChild(links);break;case"name":var nameEle=this.createOptionalSlicedStructure(null,"div",this.nameClass);if(this.slideShowName)
nameEle.contentContainer.innerHTML=this.slideShowName;rootCC.appendChild(nameEle);break;case"title":rootCC.appendChild(this.createOptionalSlicedStructure(null,"div",this.slideTitleClass));break;case"caption":rootCC.appendChild(this.createOptionalSlicedStructure(null,"div",this.slideCaptionClass));break;case"count":rootCC.appendChild(this.createOptionalSlicedStructure(null,"div",this.countClass));break;}}
if(this.injectionType=="replace")
{var parent=this.element.parentNode;parent.replaceChild(root,this.element);this.element=root;}
else
{this.element.innerHTML="";this.element.appendChild(root);this.element=root;}
this.addClassName(this.element,this.slideShowBusy);this.notifyObservers("onPostTransformMarkup",evt);};Spry.Widget.ImageSlideShow.prototype.attachViewBehaviors=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreAttachViewBehaviors",evt);if(!evt.performDefaultAction)
return;this.panelSet=new Spry.Widget.FadingPanels(Spry.$$("."+this.slideClass,this.element),{defaultPanel:-1,dropFrames:this.dropFrames,minDuration:this.transitionDuration,maxDuration:this.transitionDuration,displayInterval:this.displayInterval,visibleClass:this.slideVisibleClass,hiddenClass:this.slideHiddenClass});var self=this;this.panelSet.addObserver({onPreStartSlideShowMode:function(n,evt){self.handlePanelSetStart(evt);},onPreStopSlideShowMode:function(n,evt){self.handlePanelSetStop(evt);},onPreShowNextPanel:function(n,evt){self.handlePanelSetShowNextPanel(evt);}});this.notifyObservers("onPostAttachViewBehaviors",evt);};Spry.Widget.ImageSlideShow.prototype.attachButtonBehavior=function(ele,className,clickFunc)
{var w=new Spry.Widget.Button(ele,{downClass:className+"Down",hoverClass:className+"Hover",disabledClass:className+"Disabled",onclick:clickFunc});};Spry.Widget.ImageSlideShow.prototype.attachControlBehaviors=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreAttachControlBehaviors",evt);if(!evt.performDefaultAction)
return;var self=this;Spry.$$("."+this.firstBtnClass,this.element).forEach(function(n){self.attachButtonBehavior(n,self.firstBtnClass,self.firstFunc);});Spry.$$("."+this.prevBtnClass,this.element).forEach(function(n){self.attachButtonBehavior(n,self.prevBtnClass,self.prevFunc);});Spry.$$("."+this.playBtnClass,this.element).forEach(function(n){self.attachButtonBehavior(n,self.playBtnClass,self.playFunc);});Spry.$$("."+this.nextBtnClass,this.element).forEach(function(n){self.attachButtonBehavior(n,self.nextBtnClass,self.nextFunc);});Spry.$$("."+this.lastBtnClass,this.element).forEach(function(n){self.attachButtonBehavior(n,self.lastBtnClass,self.lastFunc);});this.notifyObservers("onPostAttachControlBehaviors",evt);};Spry.Widget.ImageSlideShow.prototype.handleSlideLinkClick=function(slideLinkEle,slideLinkIndex)
{if(!slideLinkEle||slideLinkIndex==this.currentVirtualSlideIndex)
return;if(this.slideLinkStopsSlideShow)
this.stop();this.showSlide(slideLinkIndex);};Spry.Widget.ImageSlideShow.prototype.attachLinkBehaviors=function()
{var links=Spry.$$("."+this.slideLinkClass,this.element);if(links.length>0)
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreAttachLinkBehaviors",evt);if(!evt.performDefaultAction)
return;this.panelSelector=new Spry.Widget.PanelSelector(links,null,{downClass:this.slideLinkClass+"Down",disabledClass:this.slideLinkClass+"Disabled",selectedClass:this.slideLinkClass+"Selected",unselectedClass:this.slideLinkClass+"Unselected",hoverClass:this.slideLinkClass+"Hover",focusedClass:this.slideLinkClass+"Focused"});var self=this;this.panelSelector.addObserver({onPostPanelSelectorClick:function(n,evt)
{self.handleSlideLinkClick(evt.target,evt.targetIndex);if(self.panelSet)
self.panelSet.stop();}});for(var i=0;i<links.length;i++)
this.panelSelector.disableButton(i);this.notifyObservers("onPostAttachLinkBehaviors",evt);}};Spry.Widget.ImageSlideShow.prototype.attachBehaviors=function(link)
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPreAttachBehaviors",evt);if(!evt.performDefaultAction)
return;this.attachViewBehaviors();this.attachLinkBehaviors();this.attachControlBehaviors();this.notifyObservers("onPostAttachBehaviors",evt);};})();
