// SpryTitleSliderPlugin.js - version 0.3 - Spry Pre-Release 1.7//// Copyright (c) 2010. Adobe Systems Incorporated.// All rights reserved.//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are met:////   * Redistributions of source code must retain the above copyright notice,//     this list of conditions and the following disclaimer.//   * Redistributions in binary form must reproduce the above copyright notice,//     this list of conditions and the following disclaimer in the documentation//     and/or other materials provided with the distribution.//   * Neither the name of Adobe Systems Incorporated nor the names of its//     contributors may be used to endorse or promote products derived from this//     software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE// POSSIBILITY OF SUCH DAMAGE.(function() { // BeginSpryComponentif (typeof Spry == "undefined" || !Spry.Widget || !Spry.Widget.ImageSlideShow){	alert("SpryTitleSliderPlugin.js requires SpryImageSlideShow.js!");	return;}var defaultConfig = {	direction: "up", // up, down, left, right	duration: 500,	pluginOptionsProp: "TSP"};var gTSP = Spry.Widget.ImageSlideShow.TitleSliderPlugin = {	config: defaultConfig,	initialize: function(ss)	{		var opts = ss.titleSliderPluginInfo = {};		ss.setOptions(opts, defaultConfig);		ss.setOptions(opts, ss[defaultConfig.pluginOptionsProp]);				opts.animationLock = 0;		opts.showTitleFunc = function() { gTSP.showTitle(ss); };		var dir = opts.direction;		opts.scrollDimension = (dir == "down" || dir == "right") ? "scrollWidth" : "scrollHeight";		opts.sideProp =  (dir == "left" || dir == "right") ? "left" : "top";		opts.distPrefix = (dir == "down" || dir == "right") ? "-" : "";			ss.addObserver(this);	},	showTitle: function(ss)	{		var t = ss.titleSliderPluginInfo.clipEle;		var c = ss.titleSliderPluginInfo.contentEle;		if (t && c)		{			var info = ss.titleSliderPluginInfo;			c.style[info.sideProp] = info.distPrefix + t[info.scrollDimension] + "px";			c.style.visibility = "visible";			var anim = new Spry.Effect.CSSAnimator(c, info.sideProp + ": 0px", { duration: info.duration });			anim.start();		}	},	hideTitle: function(ss, slideIndex)	{		var t = ss.titleSliderPluginInfo.clipEle;		var c = ss.titleSliderPluginInfo.contentEle;		if (t && c)		{			var info = ss.titleSliderPluginInfo;			var anim = new Spry.Effect.CSSAnimator(c, info.sideProp + ": " + info.distPrefix + t[info.scrollDimension] + "px", {				duration: info.duration,				onComplete: function() {					c.style.visibility = "hidden";					if (slideIndex >= 0)						ss.showSlide(slideIndex);				}			});			anim.start();		}	},	onPostTransformMarkup: function(ss,evt)	{		var ele = Spry.$$("."+ss.slideTitleClass, ss.element)[0];		if (ele && ele.contentContainer)		{			var clip = ss.titleSliderPluginInfo.clipEle = ele.contentContainer;			clip.style.overflow = "hidden";			var content = document.createElement(clip.nodeName.toLowerCase() == "div" ?  "div" : "span");			ss.appendChildNodes(content, ss.extractChildNodes(clip));			clip.appendChild(content);			content.style.position = "relative";			ss.titleSliderPluginInfo.contentEle = content;		}	},	onPreShowSlide: function(ss,evt)	{		var pi = ss.titleSliderPluginInfo;		if (pi.showTimerID)		{			clearTimeout(pi.showTimerID);			pi.showTimerID = 0;		}		if (pi.clipEle)		{			if(!pi.animationLock)			{				++pi.animationLock;				gTSP.hideTitle(ss, evt.slideIndex);				evt.preventDefault();				return;			}			--pi.animationLock;		}	},		onPreUpdateSlideTitle: function(ss,evt)	{		// We need to override the default updateSlideTitle() implementation so we can insert		// the title into our content element.		var pi = ss.titleSliderPluginInfo;		if (pi.clipEle)		{			pi.contentEle.innerHTML = evt.title ? evt.title : "";				// Delay the show until after the slide transition finishes.			pi.showTimerID = setTimeout(pi.showTitleFunc, ss.transitionDuration);			// Tell the slide show not to set the title label.			evt.preventDefault();		}	}};})(); // EndSpryComponent
