/* jQuery Carousel 0.9.2
Copyright 2008-2009 Thomas Lanciaux and Pierre Bertet.
This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>

Taken from: http://thomlx.free.fr/jquery/jquery_carousel.htm

*/
;(function($){$.fn.carousel=function(params){
	var params=$.extend({
		direction:"horizontal",
		loop:false,
		dispItems:1,
		pagination:false,
		paginationPosition:"inside",
		nextBtn:'<a role="button">Next</a>',
		prevBtn:'<a role="button">Previous</a>',
		btnsPosition:"inside",
		nextBtnInsert:"appendTo",
		prevBtnInsert:"prependTo",
		nextBtnInsertFn:false,
		prevBtnInsertFn:false,
		autoSlide:false,
		autoSlideInterval:3000,
		delayAutoSlide:false,
		combinedClasses:false,
		effect:"slide",
		slideEasing:"swing",
		animSpeed:"normal",
		equalWidths:"true",
		verticalMargin:0,
		callback:function(){},
		useAddress:false,
		adressIdentifier:"carousel",
		tabLabel:function(tabNum){return tabNum;}},params);

	if(params.btnsPosition=="outside"){
		params.prevBtnInsert="insertBefore";
		params.nextBtnInsert="insertAfter";
		}

	params.delayAutoSlide=params.delayAutoSlide||params.autoSlideInterval;
	return this.each(function(){
		var env={$elts:{},params:params,launchOnLoad:[]};
		env.$elts.carousel=$(this).addClass("js");
		env.$elts.content=$(this).children().css({position:"absolute","top":0});
		env.$elts.wrap=env.$elts.content.wrap('<div class="carousel-wrap"></div>').parent().css({overflow:"hidden",position:"relative"});
		env.steps={first:0,count:env.$elts.content.children().length};
		env.steps.last=env.steps.count-1;

		if($.isFunction(env.params.prevBtnInsertFn)){
			env.$elts.prevBtn=env.params.prevBtnInsertFn(env.$elts);
			}
		else{
			env.$elts.prevBtn=$(params.prevBtn)[params.prevBtnInsert](env.$elts.carousel);
			}
		
		if($.isFunction(env.params.nextBtnInsertFn)){
			env.$elts.nextBtn=env.params.nextBtnInsertFn(env.$elts);
		}
		else{
			env.$elts.nextBtn=$(params.nextBtn)[params.nextBtnInsert](env.$elts.carousel);
			}
		env.$elts.nextBtn.addClass("carousel-control next carousel-next");
		env.$elts.prevBtn.addClass("carousel-control previous carousel-previous");
//		env.$elts.nextBtn.appendTo("cite");
//		env.$elts.prevBtn.prependTo("cite");
		initButtonsEvents(env);
		if(env.params.pagination){initPagination(env);}
		
		initAddress(env);
		
$(function(){
	var $items=env.$elts.content.children();
	var $maxHeight=0;
	$items.each(function(){
		$item=$(this);
		$itemHeight=$item.outerHeight();
		if($itemHeight>$maxHeight){$maxHeight=$itemHeight;}});
		if(env.params.verticalMargin>0){$maxHeight=$maxHeight+env.params.verticalMargin;}
		$items.height($maxHeight);
		var $firstItem=env.$elts.content.children(":first");
		env.itemWidth=$firstItem.outerWidth();
		if(params.direction=="vertical"){env.contentWidth=env.itemWidth;}
		else{
			if(params.equalWidths){env.contentWidth=env.itemWidth*env.steps.count;}
			else{env.contentWidth=(function(){
				var totalWidth=0;
				env.$elts.content.children().each(function(){totalWidth+=$(this).outerWidth();});
				return totalWidth;})();}}
env.$elts.content.width(env.contentWidth);
env.itemHeight=$maxHeight;

if(params.direction=="vertical"){env.$elts.content.css({
	height:env.itemHeight*env.steps.count+"px"});env.$elts.content.parent().css({height:env.itemHeight*env.params.dispItems+"px"});
	}
	else{
		env.$elts.content.parent().css({height:env.itemHeight+"px"});
}
	updateButtonsState(env);
	$.each(env.launchOnLoad,function(i,fn){fn();});
	if(env.params.autoSlide){window.setTimeout(function(){
		env.autoSlideInterval=window.setInterval(function(){
			goToStep(env,getRelativeStep(env,"next"));},
			env.params.autoSlideInterval);
			},
			env.params.delayAutoSlide);}});});};
			
function initButtonsEvents(env){
	env.$elts.nextBtn.add(env.$elts.prevBtn).bind("enable",function(){
		var $this=$(this).unbind("click").bind("click",function(){
			goToStep(env,getRelativeStep(env,($this.is(".next")?"next":"prev")));
			stopAutoSlide(env);}).removeClass("disabled");
	if(env.params.combinedClasses){
		$this.removeClass("next-disabled previous-disabled");}}).bind("disable",function(){
			var $this=$(this).unbind("click").addClass("disabled");
			if(env.params.combinedClasses){
				if($this.is(".next")){
					$this.addClass("next-disabled");
				}
				else if($this.is(".previous")){
					$this.addClass("previous-disabled");}}}).hover(function(){
						$(this).toggleClass("hover");});};

function initPagination(env){env.$elts.pagination=$('<div class="center-wrap"><div class="carousel-pagination"><p></p></div></div>')[((env.params.paginationPosition=="outside")?"insertAfter":"appendTo")](env.$elts.carousel).find("p");env.$elts.paginationBtns=$([]);env.$elts.content.find("li").each(function(i){if(i%env.params.dispItems==0){env.$elts.paginationBtns=env.$elts.paginationBtns.add($('<a role="button"><span>'+env.params.tabLabel(env.$elts.paginationBtns.length+1)+'</span></a>').data("firstStep",i));}});env.$elts.paginationBtns.each(function(){$(this).appendTo(env.$elts.pagination);});env.$elts.paginationBtns.slice(0,1).addClass("active");env.launchOnLoad.push(function(){env.$elts.paginationBtns.click(function(e){goToStep(env,$(this).data("firstStep"));stopAutoSlide(env);});});};

function initAddress(env){if(env.params.useAddress&&$.isFunction($.fn.address)){$.address.init(function(e){var pathNames=$.address.pathNames();if(pathNames[0]===env.params.adressIdentifier&&!!pathNames[1]){goToStep(env,pathNames[1]-1);}else{$.address.value('/'+env.params.adressIdentifier+'/1');}}).change(function(e){var pathNames=$.address.pathNames();if(pathNames[0]===env.params.adressIdentifier&&!!pathNames[1]){goToStep(env,pathNames[1]-1);}});}else{env.params.useAddress=false;}};

function goToStep(env,step){env.params.callback(step);transition(env,step);env.steps.first=step;updateButtonsState(env);if(env.params.useAddress){$.address.value('/'+env.params.adressIdentifier+'/'+(step+1));}};

function getRelativeStep(env,position){if(position=="prev"){if((env.steps.first-env.params.dispItems)>=0){return env.steps.first-env.params.dispItems;}else{return((env.params.loop)?(env.steps.count-env.params.dispItems):false);}}else if(position=="next"){if((env.steps.first+env.params.dispItems)<env.steps.count){return env.steps.first+env.params.dispItems;}else{return((env.params.loop)?0:false);}}};

function transition(env,step){switch(env.params.effect){case"no":if(env.params.direction=="vertical"){env.$elts.content.css("top",-(env.itemHeight*step)+"px");}else{env.$elts.content.css("left",-(env.itemWidth*step)+"px");}
break;case"fade":if(env.params.direction=="vertical"){env.$elts.content.hide().css("top",-(env.itemHeight*step)+"px").fadeIn(env.params.animSpeed);}else{env.$elts.content.hide().css("left",-(env.itemWidth*step)+"px").fadeIn(env.params.animSpeed);}
break;default:if(env.params.direction=="vertical"){env.$elts.content.stop().animate({top:-(env.itemHeight*step)+"px"},env.params.animSpeed,env.params.slideEasing);}else{env.$elts.content.stop().animate({left:-(env.itemWidth*step)+"px"},env.params.animSpeed,env.params.slideEasing);}
break;}};

function updateButtonsState(env){if(getRelativeStep(env,"prev")!==false){env.$elts.prevBtn.trigger("enable");}else{env.$elts.prevBtn.trigger("disable");}
if(getRelativeStep(env,"next")!==false){env.$elts.nextBtn.trigger("enable");}else{env.$elts.nextBtn.trigger("disable");}
if(env.params.pagination){env.$elts.paginationBtns.removeClass("active").filter(function(){return($(this).data("firstStep")==env.steps.first)}).addClass("active");}};

function stopAutoSlide(env){if(!!env.autoSlideInterval){window.clearInterval(env.autoSlideInterval);}};})(jQuery);
