/***
**  JQUERY MINISLIDER PLUGIN
**	WRITTEN BY TOM ROMBAUT
**  Version 0.11
**  04/2011
**  DEPENDENCIES : JQUERY 1.3.1+ 
***/
var MiniSlider = function(element, options) {
	var conf = $.extend({}, $.fn.minislider.defaults, options);
	var slider = $(element);
	var itemCount 	 = 0;
	var loadCount 	 = 0;
	var intervalID 	 = false;
	var currentIndex = 0;
	
	var _initialize = function() {
		slider.wrap("<div class='ms'></div>");
		slider.css("width",	0);
		slider.css("height",0);
		slider.parent(0).css("width",conf.width);
		if($("li",slider).length > 1)
			slider.parent(0).append("<div class='ms-btns'></div>");
		
		//PRELOAD ELEMENTS WITHOUT IMAGES
		itemCount = $("li",slider).length;
		loadCount = 0;
		$("li",slider).each(function(){
			if($("li",slider).length > 1)
				$(".ms-btns",slider.parent(0)).append("<a href='#'>&nbsp;</a>");
			if($("img",$(this)).length == 0){
				var curwidth = slider.width();
				_setWidth(slider,curwidth+_getWidth($(this)));
				if(_getHeight($(this))> slider.height()){
					slider.css("height",_getHeight($(this)));
				}
				loadCount++;
				if(loadCount >= itemCount){
					_finishInit();
				}
			}else{
				_preload($(this));
			}
		});
	};
	var _preload = function(el){
		
		el.find("img").each(function(){
			var img 	= $(this);
			var image   = $(new Image());
			image.attr('src',img.attr('src'));
			if(image.attr("width")){
				_preloadFinish(img);
				image.remove();
			}else{
				image.load(function(){
					_preloadFinish(img);
					image.remove();
				});
			}
			if(conf.interval){
				$(this).hover(function(){
					_pauseInterval();
				},function(){
					_startInterval();
				});
			}
		});
	};
	var _preloadFinish = function(el){
		var curwidth = slider.width();
		_setWidth(slider,curwidth+_getWidth(el));
		if(_getHeight(el)> slider.height()){
			slider.css("height",_getHeight(el));
		}
		loadCount++;
		if(loadCount >= itemCount){
			_finishInit();
		}
	};
	var _finishInit = function(){
		
		var h 	= 0;
		$("li",slider).each(function(){
			var curwidth = slider.width();
			_setWidth(slider,curwidth+_getWidth($(this)));
			if(_getHeight($(this))> h){
				slider.css("height",_getHeight($(this)));
				h =	_getHeight($(this));
			}
		});
		//CENTER BUTTONS
		
		$(".ms-btns",slider.parent(0)).css("right",(slider.parent(0).width() - $(".ms-btns",slider.parent(0)).width()) / 2);
		$(".ms-btns a:first").addClass("active");
		$(".ms-btns a",slider.parent(0)).click(function(){
			var index = $("a",$(this).parent(0)).index($(this));
			$("a",$(this).parent(0)).removeClass("active");
			$(this).addClass("active");
			_slideTo(index);
			if(conf.interval){
				_pauseInterval();
				_startInterval();
			}
			return false;
		});
		if($.isFunction(conf.onload)){
			conf.onload(slider);
		}
		if(conf.interval){
			_startInterval();
		}
		
	}
	var _pauseInterval = function(){
		if(intervalID){
			clearInterval(intervalID);
			intervalID = false;
		}
	}
	var _startInterval = function(){
		if(!intervalID){
			intervalID = setInterval(function(){_next()},conf.interval+conf.duration);
		}else{
			console.log("no start interval "+intervalID);
		}
	}
	var _next = function(){
		var nextIndex = currentIndex +1;
		if(nextIndex >= itemCount){
			nextIndex = 0;
		}
		$(".ms-btns a",slider.parent(0)).removeClass("active");
		$(".ms-btns",slider.parent(0)).children(":eq("+nextIndex+")").addClass("active");
		_slideTo(nextIndex);
		
	}
	var _slideTo = function(index){
		currentIndex = index;
		var left = 0;
		for(var i=0;i<index;i++){
			left += _getWidth(slider.children(":eq("+i+")"));
		}
		slider.animate({marginLeft : -left},conf.duration,conf.easing);
	}
	var _getmargins = function(){
		var leftm = (slider.css("marginLeft").replace("px","")*1);
		var rightm = slider.width() - ((slider.parent(0).width() + Math.abs(leftm)));
		return {left: leftm, right:rightm};	
	};
	
	var _getWidth = function(el){
		return el.outerWidth()+(el.css("marginLeft").replace("px","")*1)+(el.css("marginRight").replace("px","")*1);
	};
	var _getHeight = function(el){
		return el.outerHeight()+(el.css("marginTop").replace("px","")*1)+(el.css("marginBottom").replace("px","")*1);
	};
	var _setWidth = function(el,width){
		el.css("width",width);
	};
	slider.slideTo = function(index){
		if(index < $("li",slider).length){
			_slideTo(index);
		}
	}
	_initialize();
	return slider;
};
/**
**	JQUERY PLUGIN
**/
(function($) {	
	$.fn.minislider = function(options) {
		return this.each(function() {
			var element = $(this);
			if (element.data('minislider')) return;
			var w = new MiniSlider(this, options);
			element.data('minislider', w);
		});
	};
})(jQuery);
$.fn.minislider.defaults = {
	width			:	600,
	duration		:	300,
	easing			:	'swing',
	onload			:	false,
	interval		:	false
};
















