/**
 * jCarouselLite - jQuery plugin to navigate images/any content in a carousel style widget.
 * @requires jQuery v1.2 or above
 *
 * http://gmarwaha.com/jquery/jcarousellite/
 *
 * Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Version: 1.0.1
 * Note: Requires jquery 1.2 or above from version 1.0.1
 */
 

(function($) {
$.fn.jCarouselLite = function(o) {
    o = $.extend({
        btnPrev: null,
        btnNext: null,
        btnGo: null,
        mouseWheel: false,
        auto: null,

        speed: 600,
        easing: null,

        vertical: false,
        circular: true,
        visible: 3,
        start: 0,
        scroll: 2,
		width: 648,

        beforeStart: readyHandler(this),
        afterEnd: null
    }, o || {});

    return this.each(function() {
		var running = false, animCss=o.vertical?"top":"left", sizeCss=o.vertical?"height":"width";
        var div = $(this), ul = $("ul", div), tLi = $("li", ul), tl = tLi.size();
		var	v = 1;
		var distribute = false; // set to false if you dont want automargins
		var thumbWidth = 0;
		var endFlag = false;

        if(o.circular) {
            ul.prepend(tLi.slice(tl - v - 1 + 1).clone())
              .append(tLi.slice(0,v).clone());
            o.start += v;
        }

        var li = $("li", ul), itemLength = li.size(), curr = o.start;
        div.css("visibility", "visible");

        li.css({overflow: "hidden", float: o.vertical ? "none" : "left"});
        ul.css({margin: "0", padding: "0", position: "relative", "list-style-type": "none", "z-index": "1", height:0, overflow: "hidden"});
        div.css({overflow: "hidden", position: "relative", "z-index": "2", left: "0px"});

        var liSize = o.vertical ? height(li) : width(li);
        var ulSize = liSize * itemLength;
        var divSize = o.width ? o.width : liSize * v;
		var totalWidth = 0;
		var count = 0;
		ul.children().each(function(i){
			var img = $(this).find("img");
			img.bind('click',function(){
			    //Stop autoplay if active
				    if(intervalID!=null)
				    { 
				        o.speed = 600;
				        stopAuto();
				    }
				});
			if(isImageLoaded(img)) {
				imageLoaded(img);
			}
			else {
				img.bind("load",{image:img},loadHandler);
			}
		});
		
		function loadHandler(event) {
			imageLoaded(event.data.image);
		}
		
		function imageLoaded(image) {
			totalWidth += image.width();
			if(thumbWidth == 0) {
				thumbWidth = image.width();
			}
			else if (image.width() != thumbWidth) {
				distribute = false;
			}
			count++;
			if(count == ul.children().length)
				queueLoaded();
		}
		
		function queueLoaded() {
			if(distribute) {
				var numItems = Math.floor(divSize / thumbWidth);
				var liWidth = Math.ceil(divSize / numItems);
				var marginRight = liWidth - thumbWidth;
				totalWidth = liWidth * ul.children().length;
				li.css("margin-right", marginRight + "px");
			}
			
			li.css({width: "auto", height: li.height()});
			ul.css(sizeCss, totalWidth).css(animCss, -(curr * liSize));
			ul.css({height: "auto"});
			div.css(sizeCss, divSize + "px");
			
			$(o.btnPrev).addClass("disabled");
			
			if(o.btnPrev)
				$(o.btnPrev).click(function() {
				    //Stop autoplay if active
				    if(intervalID!=null)
				    { 
				        o.speed = 600;
				        stopAuto();
				    }
					return go(curr - o.scroll);
				});

			if(o.btnNext)
				$(o.btnNext).click(function() {
				    //Stop autoplay if active
				    if(intervalID!=null)
				    { 
				        o.speed = 600;
				        stopAuto();
				    }
					return go(curr + o.scroll);
				});

			if(o.btnGo)
				$.each(o.btnGo, function(i, val) {
					$(val).click(function() {
						return go(o.circular ? o.visible + i : i);
					});
				});

			if(o.mouseWheel && div.mousewheel)
				div.mousewheel(function(e, d) {
					return d > 0 ? go(curr - o.scroll) : go(curr + o.scroll);
				});

			if(o.auto){
			    if(intervalID==null)
			    {
				    intervalID = setInterval(function() {
					    go(curr + o.scroll);
				    }, o.auto + o.speed);
                }
			}
		}
		
		function isImageLoaded(image) {
			if (!image.get(0).complete) {
				return false;
			}
			else if (image.height() == 0) {
				return false;
			}
			return true;
		}
		
        function vis() {
            return li.slice(curr).slice(0,v);
        };
		
		function checkEndPosition(to) {
			var curr = to;
			var item = ul.find("li").eq(curr);
			var position = item.position();

			while((-position.left < o.width - totalWidth - item.width())){
				curr--;
				item = ul.find("li").eq(curr);
				position = item.position();
			}
			return curr;
		}
		
        function go(to) {
            if(!running) {
				var item = ul.find("li").eq(to);
				var next = (to > curr);
                if(o.beforeStart)
                    o.beforeStart.call(this, vis());

                if(o.circular) {
                    if(to <= o.start - v - 1) {
                        ul.css(animCss, -((itemLength - (v * 2)) * liSize) + "px");
                        curr = to == o.start - v - 1 ? itemLength - (v * 2) - 1 : itemLength - (v * 2) - o.scroll;
                    } else if(to >= itemLength - v + 1) {
                        ul.css(animCss, -((v) * liSize) + "px");
                        curr = to == itemLength - v + 1 ? v + 1 : v + o.scroll;
                    } else curr = to;
                } else {
					if(to < 0) {
						curr = 0;
					}
					else if(to > itemLength - v) {
						curr = itemLength - v;
					}
					else {
						curr = to;
					}
                }

                running = true;
				
				if(next) {
					curr = checkEndPosition(curr);
				}
				
				
				var currItem = ul.find("li").eq(curr);
				var position = currItem.position();
				var endFlag = false;
				
				if(next && (totalWidth - position.left <= o.width)) {
					endFlag = true;
				}
				
                ul.animate(
					animCss == "left" ? { left: -position.left } : { top: -(curr * liSize) } , o.speed, o.easing,
                    function() {
                        if(o.afterEnd)
                            o.afterEnd.call(this, vis());
                        running = false;
                    }
                );
                
                if(!o.circular) {
                    $(o.btnPrev + "," + o.btnNext).removeClass("disabled");
					
					if(curr == 0) {
						$(o.btnPrev).addClass("disabled");
					}
					
					if(endFlag) {
						$(o.btnNext).addClass("disabled");
					}
                }
            }
            return false;
        };
    });
};

function readyHandler(el) {
	$(el[0]).css("display","inline");
}

function css(el, prop) {
    return parseInt($.css(el[0], prop)) || 0;
};
function width(el) {
    return  el[0].offsetWidth + css(el, 'marginLeft') + css(el, 'marginRight');
};
function height(el) {
    return el[0].offsetHeight + css(el, 'marginTop') + css(el, 'marginBottom');
};


})(jQuery);

//Autoplay controller
var intervalID;
function stopAuto(){
     if(intervalID!=null)
    {
       clearInterval(intervalID);
       intervalID = null;
    }
}

//Adjust navigationdiv height to center arrow

