/*
 *	jQuery panelswitcher 1.0.0 - Another news slideshow
 * 
 *	Requires : jquery-1.3.2.min.js
 *
 *	Params
 *	--------------------
 *	defaultIndex : Choose which slide to start on
 *	auto : True to run the auto carousel, false to disable it
 *	autoTimeout : Auto scroll duration (ms : less is faster). Must be superior to the fxSpeed.
 *	fxSpeed : Fade effect duration (ms)
 *
 */

(function(jQuery) {
	// jQuery plugin
	jQuery.fn.panelswitcher = function(params) {

		// Default params
        var defaults = {
			defaultIndex : 0,
			auto : false,
			autoTimeout : 6000,
            fxSpeed: 400
        };
		
		// Merge with user params
		settings = jQuery.extend(defaults, params);
		
		return this.each(function(){
			var carousel = jQuery(this);
			carousel.css("display","block");
			var carouselNav = carousel.find(">ul");
			var carouselNavLinks = carouselNav.find("li a");
			var carouselPanels = carousel.find(">div");	
			var carouselSize = carouselPanels.length-1;		
			var panelCurrentId = 0;
            var mainClassName = "panelswitcher-container";
            var navClassName = "panelswitcher-nav";
            var panelClassName = "panelswitcher-panel";
			var selectedClassName = "panelswitcher-selected";
			var activeClassName = "panelswitcher-panel-active";
			var oldClassName = "panelswitcher-panel-old";
			var autoPlay = null;
			var firstTime = false;
			
			/*---------------------------------
			 *	CSS tagging
			 *---------------------------------*/			 
			if(!carousel.hasClass(mainClassName)) carousel.addClass(mainClassName);
			carouselNav.addClass(navClassName);
			carouselPanels.addClass(panelClassName);

			function panelFinder(panelIndex){
				return carouselPanels.eq(panelIndex);
			}
			
			/*---------------------------------
			 *	Events handler
			 *---------------------------------*/			 
			
			// Display first item 
			panelSwitch(settings.defaultIndex, "", true);
			
			// Only if more than 1 item
			if(carouselSize > 0){
			
				// AutoScrolling starter
				if(settings.auto){				
					startAutoScroll();
					
					// Restart autoScrolling when leaving the nav
					carouselNav.mouseleave(function(){
						startAutoScroll();					
					});
				}

				/* Nav handler */
				carouselNavLinks.focus(function(){
					panelSwitchHandler(this);									
				});
				carouselNavLinks.mouseover(function(){
					panelSwitchHandler(this);									
				});
				
				/* Stop autoScroll when reading content */
				carousel.find(".rfr-entry").hover(
					function(){if(autoPlay) stopAutoScroll();},
					function(){if(settings.auto) startAutoScroll();}
				);
			}
			
			/*---------------------------------
			 *	Scroller functions
			 *---------------------------------*/

			/* Scroll swither */
			function panelSwitchHandler(item){
			
				// Stop autoScrolling if active
				if(autoPlay) stopAutoScroll();
				
				// Get the current panel index
				itemParent = jQuery(item).parent();
				panelIndex = jQuery("li", itemParent.parent()).index(itemParent);
				//console.log(panelIndex);
				currentPanel = panelFinder(panelIndex);
				
				// Switch item (only if hidden)
				if(!currentPanel.hasClass(activeClassName)){				
					currentPanel.stop(true, true);
					panelSwitch(panelIndex, currentPanel, false);
				}
				
				else return false;
			}
			
			/* Scroll swither */
			function panelSwitch(panelIndex, currentPanel, firstTime){
				
				// Set auto current image id for autoplay
				panelCurrentId = panelIndex;				
				currentPanel = (currentPanel == "") ? panelFinder(panelIndex) : currentPanel;
				
				// Highlight selected menu
				carousel.find("ul li."+selectedClassName+"").removeClass(selectedClassName);
				carousel.find("ul li:eq("+(panelIndex)+")").addClass(selectedClassName);
				
				if(!firstTime){				
					// Hiding visible panels
					jQuery("."+oldClassName).removeClass(oldClassName);							
					jQuery("."+activeClassName).removeClass(activeClassName).addClass(oldClassName);
					
					// Showing current (smooth effect)								
					currentPanel.stop(true, true).addClass(activeClassName).css({"display":"none"}).fadeIn(settings.fxSpeed);
				}
				else{
					currentPanel.addClass(activeClassName);
					currentPanel.css({"display":"block"});
				}
			};

			/* AutoScroll handler */			 
			function panelAutoScroll(){
				// If last panel or not
				panelCurrentId = (panelCurrentId == carouselSize) ? 0 : panelCurrentId+1;
				
				// Switch to the next panel
				panelSwitch(panelCurrentId, "", false);
			};
			
			/* Start autoScroll */			 
			function startAutoScroll(){
				autoPlay = setInterval(panelAutoScroll, settings.autoTimeout);
			}
			
			/* Stop autoScroll */			 
			function stopAutoScroll(){
				clearTimeout(autoPlay);
				autoPlay = null;
			}
		});
    };
})(jQuery);



