/**
* jQuery.fn.slider
* Date: July 2010
*
* @author Rob Phillips
* @version 0.1
* @web http://www.robertjamesphillips.com
*
* Requirements:
* jquery.1.3.2.js - http://jquery.com/
* jquery.easing.1.3.js - http://gsgd.co.uk/sandbox/jquery/easing/
* jquery.timers-1.2.js - http://plugins.jquery.com/project/timers
*
*
**/


(function($) {

    $.fn.dualSlider = function(options) {

        // default configuration properties
        var defaults = {
            auto: true,
            autoDelay: 10000,
            easingCarousel: 'swing',
            easingDetails: 'easeOutBack',
            durationCarousel: 1000,
            durationDetails: 600,
            vertical: false
        };

        var options = $.extend(defaults, options);

        this.each(function() {

            var obj = $(this);
            var carousel;
            var carouselTotal = $(".shelf ul", obj).children().length;
            var carouselPosition = 1;
            var carouselLinkIndex = 1;
            var carouselLinks = "";


            if(options.vertical==true){
                var carouselwidth = $(".shelf", obj).height();
                
            }
            else{
                var carouselwidth = $(".shelf", obj).width();
            }



            var locked = false;

            var timerName = "timer_" + obj.attr("id")


			$(".counter", obj).html(carouselPosition+"/"+carouselTotal);
			
			if(options.auto == true)
			{
				//Creat duplicates for seamless looping

                if(options.vertical==true){
                    $(".shelf ul", obj).prepend($(".shelf ul li:last-child", obj).clone().css("margin-top", "-" + carouselwidth + "px"));
                }
                else
                {
				    $(".shelf ul", obj).prepend($(".shelf ul li:last-child", obj).clone().css("margin-left", "-" + carouselwidth + "px"));
                }
				$(".shelf ul", obj).append($(".shelf ul li:nth-child(2)", obj).clone());

			}
			else{
				$(".previous", obj).hide();
				$(".play, .pause", obj).hide();
			}


            //Set main background width
            if(options.vertical==false)
            {
               $(".shelf ul", obj).css("width", ((carouselTotal+1) * carouselwidth) + 100 + "px");
            }
            

            //Set main detail width

            
            /*
            for (i = 1; i <= carouselTotal; i++) {
                (i == 1) ? carouselLinks += "<a rel=\"" + carouselLinkIndex + "\" title=\"Go to page " + carouselLinkIndex + " \" class=\"link" + carouselLinkIndex + " selected\" href=\"javascript:void(0)\">" + carouselLinkIndex + "</a>" : carouselLinks += "<a rel=\"" + carouselLinkIndex + "\"  title=\"Go to page " + carouselLinkIndex + " \" class=\"link" + carouselLinkIndex + "\" href=\"javascript:void(0)\" >" + carouselLinkIndex + "</a>";
                carouselLinkIndex++;
            }
            $("#numbers", obj).html(carouselLinks);
            */

            //Bind carousel controls
            $(".next", obj).click(function() {
   
                carouselPage(parseInt(carouselPosition + 1), false);
                lock();
            });
            
            $(".previous", obj).click(function() {
   
                carouselPage(parseInt(carouselPosition - 1), false);
                lock();
            });

            /*
            $("#numbers a", obj).click(function() {
                carouselPage($(this).attr("rel"), false);
                lock();
            });
            */

            $(".pause", obj).click(function() {
                autoPause();
            });
            $(".play", obj).click(function() {
                autoPlay();
            });

            function lock() {
                locked = true;
            }

            function unLock() {
                locked = false;
            }


            function checkPreviousNext() {
               
                /*
                $("#numbers a", obj).removeClass("selected");
                $("#numbers .link" + carouselPosition, obj).addClass("selected");
                */
                
				if(options.auto == false)
				{
					(carouselPosition == carouselTotal) ? $(".next", obj).hide() : $(".next", obj).show();
					(carouselPosition < 2) ? $(".previous", obj).hide() : $(".previous", obj).show();
				}
            }
			
			function adjust() {

                if (carouselPosition < 1) {


                    if(options.vertical==true)
                    {
                        $(".shelf ul", obj).css("margin-top", (-1 * ((carouselTotal) * carouselwidth)));
                    }
                    else {
                        $(".shelf ul", obj).css("margin-left", (-1 * ((carouselTotal - 1) * carouselwidth)));
                    }

                    carouselPosition = carouselTotal;

                }
                if (carouselPosition > carouselTotal) {

                    if(options.vertical==true)
                    {
                        $(".shelf ul", obj).css("margin-top", 0);
                    }
                    else
                    {
                        $(".shelf ul", obj).css("margin-left", 0);
                    }

                    carouselPosition = 1;
                }
                
                $(".counter", obj).html(carouselPosition+"/"+carouselTotal);

            }

            function carouselPage(x, y) {

                if (locked != true) {

                    //console.log("New page: " + x);
                    carouselPosition = parseFloat(x);
                    //Cancel timer if manual click
                    if (y == false) autoPause();


                    if(options.vertical==true)
                    {
                        var newPage = (x * carouselwidth) ;

                        if(x==0)
                        {
                            var change=true;
                        }
                        else{
                            var change=false;    

                        }
                    }
                    else{
                        var newPage = (x * carouselwidth) - carouselwidth;
                    }

                    if (newPage != 0) {
                        newPage = newPage * -1;

                    }

                    if(change==true)
                    {
                        newPage=200;    

                    }

                    //  alert("going to page: " + x + "  distance:" + newPage);
                    

                    if(options.vertical==true){

                        $(".shelf ul", obj).animate({
                            marginTop: newPage
                        }, {
                            "duration": options.durationCarousel, "easing": options.easingCarousel,

                            complete: function() {

                                adjust();
                                checkPreviousNext();
                                unLock();
                            }
                        });
                    }
                    else
                    {

                        $(".shelf ul", obj).animate({
                            marginLeft: newPage
                        }, {
                            "duration": options.durationCarousel, "easing": options.easingCarousel,

                            complete: function() {

                                adjust();
                                checkPreviousNext();
                                unLock();
                            }
                        });
                    }
                }
                

            }

            function autoPause() {
                $(".pause", obj).hide();
                $(".play", obj).show();
                $("body").stopTime(timerName);
            }

            function autoPlay() {
                $(".pause", obj).show();
                $(".play", obj).hide();
                $("body").everyTime(options.autoDelay, timerName, function() {
                    carouselPage(carouselPosition + 1, true);
                    lock();
                });
            }

            if (options.auto == true) {
                autoPlay();
            }

        });

    };

})(jQuery);




