// imageSlideShow module JS by Christopher Najewicz cnajewicz@futuremediainteractive.com

var slideShows = function(moduleIDs) {

	swfDir = '/swf/';
				
		var embedSlideShow = function(divID) {

		var	jsonData = eval('getModuleData'+divID)();
		var slideShowOptions = eval('presets.id'+jsonData.preset+'.options');
		slideShowOptions.totalWidth = "100%";
		var getDataFunction = 'getModuleData'+divID;
		var swfParentDiv = 'm' + divID;
		var swfDivID = 'imageSlideShow' + divID;
		var swfDiv = $('#' + swfParentDiv + ' .imageSlideShow');
		
		var params = {};
			params.wmode = "transparent";
			params.seamlesstabbing = "true";
		var attributes = {};
			attributes.id = swfDivID;
		var flashvars = {};
			flashvars.functionName = getDataFunction;
			
		if(typeof(bPageIsDraft)==='undefined')
			bPageIsDraft = false;
   		flashvars.editmode = bPageIsDraft;
		
		//	var myjson = encodeURI(JSON.stringify(varObj));

		swfDiv.attr('id',swfDivID);
		
		// need to change the width and height of this dynamically in the future
		$('#'+swfParentDiv+' .contentbox').css('min-height',slideShowOptions.totalHeight).andSelf().css('height',slideShowOptions.totalHeight);
		swfobject.embedSWF(swfDir + "imageSlideshow.swf", swfDivID, slideShowOptions.totalWidth, slideShowOptions.totalHeight, "9.0.0", false, flashvars, params, attributes);
		swfobject.addLoadEvent( function() { flashOK = true; });
		
		// if the flash object hasn't been embedded run the slide show...
		if(	! swfobject.getFlashPlayerVersion().major > 9 )
			htmlSlideShow(divID,jsonData,slideShowOptions);

		}; // end of embedSlideShow()


	var htmlSlideShow = function(divID,jsonData,slideShowOptions) {

		var numSlides = jsonData.images.length;
		var slideShowImages = jsonData.images;
		
		var parent = $('#m'+divID+' .contentbox');
		var slideShowDiv = $('.imageSlideShow',parent);
		
		// makes sure the width is a number and not a %
		if(!isNaN(Number(slideShowOptions.totalWidth))) slideShowOptions.totalWidth += 'px'; 

		// init the slide show div with options
		slideShowDiv.
			addClass('preset'+jsonData.preset).
			css('display','block').
			css('width',slideShowOptions.totalWidth).
			css('height',slideShowOptions.totalHeight+'px').
			css('min-height',slideShowOptions.totalHeight+'px');
		
		// setup the first slide

		// if slide show has captions to be shown, setup the positioning
		if(slideShowOptions.showCaptions!=undefined && slideShowOptions.showCaptions)
			$('.imageText',slideShowDiv).
				css('display','block').
				css('left',slideShowOptions.titleXMargin+'px').
				css('top',slideShowOptions.titleYMargin+'px');

		// setup imageFrame and imageFrame image		
//		$('.imageFrame',slideShowDiv).append("<img />");
		$('.imageFrame img',slideShowDiv).
			attr('src',slideShowImages[0].src).
			attr('width',slideShowOptions.imgWidth).
			attr('height',slideShowOptions.imgHeight);
		
		// slide show options
		if(slideShowOptions.showCaptions!=undefined && slideShowOptions.showCaptions)
			{
				$('.imageText h1',slideShowDiv).css('display','block').text(slideShowImages[0].title);
				$('.imageText p',slideShowDiv).css('display','block').text(slideShowImages[0].description);
			}
		
		if(slideShowOptions.showNavigation!=undefined && slideShowOptions.showNavigation) 
			$('.navigation',slideShowDiv).
				css('display','block').
				css('top',slideShowOptions.navigationY).
				css('left',slideShowOptions.navigationX);

		// build out the slide show nav on the bottom
		$('ul',slideShowDiv).empty();
		for(var count = 1;count<=numSlides;count++)
			{
				$('ul',slideShowDiv).append("<li><a href='#"+count+"' title=''>"+count+"</a>");
				if(count===1)
					$('a',slideShowDiv).addClass('current');
			}

			//-------> SWITCHIMAGE main slideShow workhorse
			var switchImage = function(slideNum,effect) {

				var duration = slideShowOptions.transitionDuration;
				
				var oldImage = $('.imageFrame img',slideShowDiv);
				var oldTitle = $('.imageText h1',slideShowDiv);
				var oldDescription = $('.imageText p',slideShowDiv);
				
				if(slideNum > numSlides) slideNum = 0; else slideNum--;  
			
				// move the navigation
				$('.current',slideShowDiv).removeClass();
				$('li:eq('+(slideNum)+') a',slideShowDiv).addClass('current');
				
				// utility function for all transition types (code reuse)
				var getNewDataObject = function() {
					return {
						"image" 		: 	oldImage.clone().attr('src',slideShowImages[slideNum].src),
						"title"			:	oldTitle.clone().text(slideShowImages[slideNum].title),
						"description"	:	oldDescription.clone().text(slideShowImages[slideNum].description)
						};
				}
				
				//-------> CROSSFADE Transition
 		 		var doCrossFade = function() {
					var newData = getNewDataObject();
					
					newData.image.attr('alt',newData.title.text()).add(newData.title).add(newData.description).css('display','none');
					// start fading out all the old crap, and when it's done remove it from the DOM
					oldImage.add(oldTitle).add(oldDescription).fadeOut(duration/2,function(){ $(this).remove(); });

					newData.image.appendTo($('.imageFrame',slideShowDiv)).fadeIn(duration/2, function() { 
						if(Number(slideShowOptions.showCaptions))
							newData.title.add(newData.description).appendTo($('.imageText',slideShowDiv)).fadeIn('medium');
					});
										
				}; // end of doCrossFade
		
				//-------> STANDARD Transition
				var doStandard = function() {
					var newData = getNewDataObject();

					oldImage.add(oldTitle).add(oldDescription).remove();
					newData.image.attr('alt',newData.title.text()).appendTo($('.imageFrame',slideShowDiv));
					if(slideShowOptions.showCaptions)
						$('.imageText',slideShowDiv).append(newData.title).append(newData.description);
					
				}; // end of doStandard
		
				switch(effect) {
					case 'fade':
						doCrossFade();
					break;
					case 'standard':
						doStandard();
					break;
					default:
						doStandard();
					break;
				} // end of switch
		
		}; // end of switchImage
		
		
		var startTimer = function() {
			var delay = Number(slideShowOptions.delay)+Number(slideShowOptions.transitionDuration);
			slideShowDiv.everyTime(delay,'timer'+divID, function() { 
					switchImage(Number($('.current',slideShowDiv).text())+1,slideShowOptions.transitionType);
					});
		};

		if(slideShowOptions.autoplay!=undefined && slideShowOptions.autoplay) 
			startTimer();
		else 
			slideShowDiv.bind('click',function() { startTimer(); });	

		/* bind some events to the nav so a user can mouseover a slide # in the nav,
		   and then the show starts back up on mouse leave */

		$('ul li',slideShowDiv).bind('mouseover',function() {
			slideShowDiv.stopTime('timer'+divID).find("*").stop();
			$('.imageText',slideShowDiv).empty().append("<h1></h1><p></p>");
			$('.current',slideShowDiv).removeClass('current');
			switchImage($('a',$(this)).addClass('current').text(),'standard');
		});
		
		$('ul li',slideShowDiv).bind('mouseleave',function() { 
			if(slideShowOptions.autoplay!=undefined && slideShowOptions.autoplay)
				startTimer();
		});


		return;
	} // end of htmlSlideShow
	
	
	//----> MAIN
	var currentID = 0;
	// loop through all imageSlideShow divIDs
		for(var i = 0; i < moduleIDs.length; i++)
		{
			currentID = moduleIDs[i];
			// this will check to make sure the module still exists in the page content after refresh
			if($('#m'+currentID).length) 
				embedSlideShow(currentID); 
		}	// end of for loop

};