//-------------------------------------------------
//		Media Fader jQuery Plugin
//		Created by dan and emanuel @geckonm.com
//		www.geckonewmedia.com
//
//		v1.0
/*
	Copyright (c) 2010 Gecko New Media Ltd
*/
//-------------------------------------------------

(function($) {

    $.fn.mediaSlider = function(options) {
    	
		var defaults = {		
			//Slider
			startSlide: 1,
			fadeSpeed: 500,
			autoFade: true,
			pauseOnHover: false,
			pauseOnFlashClick: true,
			fadeTimeout: 6000,
			
			//callbacks
			onStart : function(){},
			onSlide : function(){},
			
			//paging, navigation, tooltips
			usePager: true,
			thumbNav: false,
			defaultNavThumbPath: "images/mediafader/thumbdefault.jpg",
			toolTips: true,
			externalNav: "",
			nextButton: ".next",
			backButton: ".prev",
			pauseButton: ".pause",
			
			//paging slide options
			thumbNavList: ".thumbs",
			pagerThumbsToShow: 6,
			pagerSlideBy: 6,
			pagerSlideTime: 500,
			pagerthumbNavCurrentPage: 1,
			pagerUsePageNav: false,
			pagerNavHolder: ".navHolder"
		};

        var options = $.extend(defaults, options);


        return this.each(function() {

            var selector = jQuery(this);
            var slideCounter = 0;
            var pageNav = "<ul class='mediaSliderNav'>";

            var toolTips = [];
			
            options.onStart.call(this, options.startSlide);

            //main loop through panels, building nav and stacking
            selector.children().each(function(i) {

                if (i == options.startSlide - 1) {
                    jQuery(this).addClass('currentSlide');
                    pageNav += "<li><a class='thumbNavCurrent' rel='" + parseInt(i + 1) + "' href='#'>";
                }

                else {
                    pageNav += "<li><a rel='" + parseInt(i + 1) + "' href='#'>";
                    jQuery(this).hide();
                }

                if (options.thumbNav) {
                    if (jQuery(this).children(".slide_thumb").length > 0) {
                        pageNav += "<img src='" + $(this).children(".slide_thumb").attr("src") + "'  />";
                    }
                    else {
                        pageNav += "<img src='" + options.defaultNavThumbPath + "'  />";
                    }
                }
                else {
                    pageNav += parseInt(i + 1);
                }

                if (options.toolTips) {

                    var toolTipText = jQuery(this).attr("title");
                    if (toolTipText != '') {

                        toolTips[i] = toolTipText;

                        //pageNav += "<span class='panel_tooltip'><span>"+toolTipText+"</span></span>";
                    }
                }
               // jQuery(this).attr("title", "");  //titles don't look good
                pageNav += "</a></li>";

                jQuery(this).css({
                    'z-index': 9999 - i,
                    'position': 'absolute'
                }).addClass("mediaSlide_" + (i + 1)).attr("rel", i + 1);

                slideCounter++;
                //end main loop
            });

            if (options.toolTips) {
                selector.css("overflow", "visible");
            }

            if (slideCounter <= 1) {
                return;
            }

            pageNav += "</ul>";

            if (options.usePager) {
                selector.find(".media_slider_nav").append(pageNav);
            };

			
			//DEBUG
			function consoleLog(entry) {
                if (window.console && window.console.firebug) {
                                console.log(entry);
                }
			}


	

            function goSlide(slideNumber) {
				var eq = parseInt(slideNumber) - 1;
                $(options.thumbNavList + " li a").removeClass("thumbNavCurrent");
                $(options.thumbNavList + " li a:eq("+ eq +")").addClass("thumbNavCurrent");

                var thumbNavCurrent = selector.find("li.currentSlide");

                selector.find("li[rel='" + parseInt(slideNumber) + "']")
					.css({ "z-index": thumbNavCurrent.css("z-index") - 1 });
                thumbNavCurrent.fadeOut(options.fadeSpeed, function() {
                    thumbNavCurrent.removeClass("currentSlide");
                    if($.browser.msie){
			if(typeof $f() != 'undefined') {	
				$f().stop();  
			}
			};	
                    selector.find("li[rel='" + parseInt(slideNumber) + "']").addClass("currentSlide").fadeIn();
                });
				options.onSlide.call(this, slideNumber);

            };

            function nextSlide() {

                var thumbNavCurrentNum = selector.find("li.currentSlide").attr("rel");

	            if (thumbNavCurrentNum == slideCounter) {
	                thumbNavCurrentNum = 1
	                slideTo(1);
	                thumbNavCurrentPage = 1;
	            }
	            else {
	                thumbNavCurrentNum++;
	                    if (thumbNavCurrentNum == ( options.pagerThumbsToShow * thumbNavCurrentPage ) + 1 ) {
	                	
						var slideToItem = thumbNavCurrentPage * options.pagerSlideBy + 1;
						slideTo(slideToItem);
						thumbNavCurrentPage++;
						cleanUpNav(thumbNavCurrentPage);
	                }
	            }
	
	            return goSlide(thumbNavCurrentNum);
	
	        }
	
	        function prevSlide() {
			
	            var thumbNavCurrentNum = selector.find("li.currentSlide").attr("rel");
	            
	            
	            if (thumbNavCurrentNum == 1) { 
	            	thumbNavCurrentNum = slideCounter;
            	}
	            else {
	                if ( ( thumbNavCurrentNum - 1 ) ==  options.pagerThumbsToShow * ( thumbNavCurrentPage - 1 ) ) 
					{
						thumbNavCurrentPage--;
						slideTo( ( options.pagerSlideBy * (thumbNavCurrentPage - 1) + 1 ) );
						cleanUpNav(thumbNavCurrentPage);
					}
					thumbNavCurrentNum--;
	            }
	            return goSlide(thumbNavCurrentNum);
	
	        }
	
			if(options.externalNav != ""){
				$(options.externalNav).children("li").children("a").click(function(){
					goSlide($(this).parent().index()+1)
					//alert($(this).parent().index());
					return false;
				})
			}
			

            if (options.autoFade) {

				
				var paused = false;
				selector.find("a.startstop").show();
				var runAuto = setInterval(nextSlide, parseInt(options.fadeTimeout));
				
				
				function stopAutoPlay() {
					paused = true;
					$(options.pauseButton).addClass("paused");
					return clearInterval(runAuto);
				};
				
				function startAutoPlay() {
					paused = false;
					$(options.pauseButton).removeClass("paused");
					runAuto = setInterval(nextSlide, parseInt(options.fadeTimeout));
					return runAuto;
				};


                if (options.pauseOnHover) {
                    selector.hover(
						function() {
						    return stopAutoPlay();
						},
						function() {
						    if (!paused) {
						        return startAutoPlay();
						    }
						}
					);
                }

                if (options.pauseOnFlashClick) {
                    selector.find("object").click(function() {
						if (options.autoFade) {
							return stopAutoPlay();
						}
                    });
                    
                    

                }
                
                
                selector.find("a.vid_holder").click(function() {
					return stopAutoPlay()
                });

                selector.find("a.startstop").click(function() {
					return startAutoPlay()
                });
                
                
				if(options.nextButton != "") {
					$(options.nextButton).click(function() {
						nextSlide();
						if(!paused){
							return stopAutoPlay();
						}
					})
				}
				
				if(options.backButton != "") {
					$(options.backButton).click(function() {
						prevSlide();
						if(!paused){
							return stopAutoPlay();
						}
					})
				}

				if(options.pauseButton != "" && options.autoFade) {
					$(options.pauseButton).click(function() {
						if(paused) {
							return startAutoPlay();
						}
						else {
							return stopAutoPlay();
						}
					});
					
				}

            };
			
            //sliding thumbnail setup vars
            var thumbWidth = parseInt($(options.thumbNavList + " li").outerWidth()) + parseInt($(options.thumbNavList + " li").css("margin-right") + parseInt($(options.thumbNavList + " li").css("margin-left")));
            var pages = Math.ceil($(options.thumbNavList + " li").length / options.pagerSlideBy);
            //consoleLog(pages);
            var thumbNavCurrentPage = options.pagerthumbNavCurrentPage;
			

            selector.find("a.next").click(function() {
                nextSlide();
                return false;
            });
            selector.find("a.back").click(function() {
                prevSlide();
                return false;
            });

            selector.find(".mediaSliderNav span.panel_tooltip").css({ opacity: "0" });
            selector.find(".mediaSliderNav a").hover(
				function() {
				    var positionLeft = jQuery(this).position().left - ((thumbNavCurrentPage - 1) * (thumbWidth * options.pagerSlideBy)) - 10;

				    if (toolTips[jQuery(this).attr("rel") - 1] != null) {

				        var toolTipText = toolTips[jQuery(this).attr("rel") - 1];

				        //selector.prepend("<span class='panel_tooltip'>"+toolTipText+"</span>");
				        jQuery("<span class='panel_tooltip ie6fix'></span>")
						.css({
						    "left": positionLeft,
						    "bottom": selector.find(".mediaSliderNav").height() //IE7 doesn't like+ 20  ,
						    //"opacity": "0"
						})
						.text(toolTipText)
						.appendTo(selector)
						.show();
				        //.animate({
				        //    bottom: selector.find(".mediaSliderNav").height() + 5,
				        //   opacity: "1"
				        //}, 300);
				    }

				},
				function() {
				    selector.children("span.panel_tooltip").hide() //thanks IE
					// selector.children("span.panel_tooltip").stop().animate({
					//    bottom: "76px",
					//   opacity: "0"
					//}, 300, function() { jQuery(this).remove() });
				}
			);


            //pager navigation behaviour
			$(options.thumbNavList + " a").click(function() {
				var thumbNavCurrent = selector.find("li.currentSlide");
				var selectedSlideNum = jQuery(this).parent("li").index() + 1;
				
				if ((thumbNavCurrent.index()+1) != selectedSlideNum) {
					goSlide(selectedSlideNum);
				};
				stopAutoPlay();
				return false;
			});


            if (pages > 1) {

                var slidingNavPager = "<ul class='slidingNavPager'>"

                for (i = 1; i < (pages + 1); i++) {
                    slidingNavPager += "<li><a href='#' rel='" + i + "' title='Go directly to page " + i + "'>&#149;</a></li>";
                }

                slidingNavPager += "</ul>"

                if (options.pagerUsePageNav) {
                    $(options.pagerNavHolder).append(slidingNavPager);
                }

                $("a.scrollNext").show();
            }

			$(options.thumbNavList).wrap("<div class='navSliderWrapper'></div>").width($(options.thumbNavList +" li").length * thumbWidth + 500);
			$(".navSliderWrapper").width(625).css({ 'overflow': 'hidden' });

			$("a.scrollNext").click(function() {
				var slideToItem = thumbNavCurrentPage * options.pagerSlideBy + 1;
				slideTo(slideToItem);
				thumbNavCurrentPage++;
				cleanUpNav(thumbNavCurrentPage);
				return false;
            });

            $("a.scrollBack").click(function() {
				thumbNavCurrentPage--;
				//alert("going to page:"+thumbNavCurrentPage);
				var slideToItem = (thumbNavCurrentPage - 1) * options.pagerSlideBy + 1;
				//alert(slideToItem);
				slideTo(slideToItem);
				cleanUpNav(thumbNavCurrentPage);
				return false;
            });

            selector.find("ul.slidingNavPager li a").click(function() {
                var chosenPage = $(this).attr("rel");
                slideTo((chosenPage - 1) * options.pagerSlideBy + 1);
                thumbNavCurrentPage = chosenPage;
                cleanUpNav(thumbNavCurrentPage);
                return false;
            });

            function cleanUpNav(thumbNavCurrentPage) {
				if (thumbNavCurrentPage > 1) {
					$("a.scrollBack").show();
				}
				if (thumbNavCurrentPage == 1) {
					$("a.scrollBack").hide();
				}
				if (thumbNavCurrentPage == pages) {
					$("a.scrollNext").hide();
				}
				if (thumbNavCurrentPage < pages) {
					$("a.scrollNext").show();
				}
				selector.find("ul.slidingNavPager li a").removeClass("current");
				selector.find("ul.slidingNavPager li a[rel='" + thumbNavCurrentPage + "']").addClass("current");
            };


            function slideTo(itemNum) {
                $(".navSliderWrapper").animate({ scrollLeft: (thumbWidth * (itemNum - 1)) }, options.pagerSlideTime);
            };
            function jumpTo(itemNum) {
                $(".navSliderWrapper").scrollLeft(thumbWidth * (itemNum - 1));
                
            };

            //jump back to first panel
            var slideToPage = thumbNavCurrentPage;
            jumpTo((thumbNavCurrentPage - 1) * options.pagerSlideBy + 1);
            cleanUpNav(thumbNavCurrentPage);

        });
    }


})(jQuery);


