(function($) {

	$.fn.contentSlider = function (options) {
	  
		// default configuration properties
		var defaults = {
			prevId: 		'prevBtn',
			prevText: 		'Previous',
			nextId: 		'nextBtn',	
			nextText: 		'Next',
			orientation:	'', //  'vertical' is optional;
			speed: 			800,
            cycleSpeed:     2000
		}; 
		
		var options = $.extend(defaults, options);
		
		return this.each(function () {
            if (this.cycleTimeout) {
                clearTimeout (this.cycleTimeout);
                this.cycleTimeout = 0;
            }
        
			obj = $(this);
            
            var args = new Object ();
            args.slides = $("li", obj);
            args.slideCount = args.slides.length;
            if (args.slides[0].innerHTML != args.slides[args.slideCount - 1].innerHTML) {
                $("ul", obj).append ('<li>' + args.slides[0].innerHTML + '</li>');
                args.slides = $("li", obj);
            }
            args.width = obj.width ();
            args.height = obj.height ();
            args.lastSlide = args.slideCount - 1;
            args.currentSlide = 0;
            args.contentSlide = this;
            args.id = $(this).attr("id");
            args.subHeading = -1;
            args.subHeadingCount = $("div > div", args.slides[0]).length;
            
            args.options = options;
            
            $("li > h1", obj).css("position", "relative");
            $("li > h1", obj).css("top", -args.height);
            $("div", obj).css("top", 0);
            $("div", obj).css("text-align", "right");
			$("ul", obj).css("width", args.slides.length * args.width);
            $("li", obj).css("float", "left");
			
            //$(obj).after('<span id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span> <span id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>');		
			//$("a","#" + options.nextId).click (function () {		
			//	animate("next");
			//	$("a","#" + options.prevId).fadeIn();
			//});            
			//$("a","#" + options.prevId).click (function () {		
			//	animate("prev");
			//	$("a","#" + options.nextId).fadeIn();
			//});
            
            go(args);
            //$(obj).timeout = setTimeout (function () { go(args) }, options.cycleSpeed)
			
			//if(s > 1) {
            //    $("a","#" + options.nextId).fadeIn();
            //}
		});	  
	};
    
    function showItem (slide, currentIndex, nextIndex, speed) {
        if (currentIndex >= 0) {
            $("div", slide).first().animate({ top: 0 }, speed, "linear", function () { slideUp(slide, nextIndex, speed); } );
        } else {
            slideUp(slide, nextIndex, speed);
        }
    }
    
    function slideUp (slide, index, speed) {
        var div = $("div", slide).first();
        $("div", div).css("display", "none");
        if (index >= 0) {
            $("div", div).eq(index).css("display", "block");
            var height = -1 * ($("div", div).eq(index).height() + 80);
            $(div).animate({ top: height }, speed);
        }
    }

    function slideUpImmediate (slide, index) {
        var div = $("div", slide).first();
        $("div", div).css("display", "none");
        if (index >= 0) {
            $("div", div).eq(index).css("display", "block");
            var height = -1 * ($("div", div).eq(index).height() + 80);
            $(div).css("top", height);
        }
    }
    
    function clearItems (slide) {
        var div = $("div", slide).first();
        $("div", div).css("display", "none");
        $(div).css("top", 0);
    }
    
    function go (args) {
        var previousSlide = args.currentSlide;
        var slide = args.slides[args.currentSlide];
        if (args.subHeading < args.subHeadingCount - 1) {
            args.subHeading ++;
            showItem(slide, args.subHeading - 1, args.subHeading, args.options.speed);
        } else {
            if (args.currentSlide > args.lastSlide) {
                var firstSlide = args.slides [0];
                var firstDiv = $("div", firstSlide).first();
                slideUpImmediate(firstSlide, args.subHeading);
                $("ul", obj).css ('marginLeft', 0);
                args.currentSlide = 1;
                previousSlide = 0;
                slide = args.slides[previousSlide];
            } else {
                args.currentSlide = (args.currentSlide + 1);
            }
            showItem(slide, args.subHeading, -1, args.options.speed);
            slide = args.slides [args.currentSlide];
            clearItems(slide);
            args.subHeading = 0;
            args.subHeadingCount = $("div > div", slide).length;
            showItem (slide, -1, args.subHeading, args.options.speed);
            
            var p = (args.currentSlide * args.width * -1);
            var obj = args.contentSlide;
            if (args.currentSlide == 0) {
                $("ul", obj).css("marginLeft",  0);
            } 
        
            $("ul", obj).animate({ marginLeft: p }, args.options.speed);            
        }
        args.cycleTimeout = setTimeout (function () { go(args) }, args.options.cycleSpeed);
    }
})(jQuery);
