var timer = '';

(function ($) {
    $.fn.jCarrousel = function (options) {
    	var defaults = {
    	  length: 300,
    	  loopTime: 6000
    	};
    	var options = $.extend(defaults, options);
    	    
    	return this.each(function() {
    		var originalId = $(this).attr('id');
    		$(this).hide();
    		var container = $('<div class="carrouselContainer '+$(this).attr('class')+'"></div>');
    		$(this).after(container);
    		
    		var firstIndex = 0;
    		
    		var firstImage = $(this).find('li:eq('+firstIndex+') .carrouselMainImage').clone();
    		container.append(firstImage);
    		
    		var firstInfo = $(this).find('li:eq('+firstIndex+')').clone();
    		firstInfo.find('.carrouselMainImage').remove();
    		var imageInfo = $('<div class="carrouselImageInfo"></div>');
    		imageInfo.append(firstInfo.children());
    		$(firstImage).load(function() {  
    			container.append(imageInfo);
    			var newLinkHref = $('#carrousel li:eq(0) .link').attr('href');
    			if (newLinkHref != "#" && newLinkHref != "" && newLinkHref != "undefined" && typeof newLinkHref != "undefined") {
	    			$(".carrouselImageInfo").click(function(){
	    				window.location = newLinkHref;
	    			}); 
    			} else {
    				$('.carrouselImageInfo .link').hide();
    			}
    		});
    		
    		if ($('#carrouselHighlight').length){
	    		var sideImages = $('#carrouselHighlight');
	    		container.append(sideImages);
	    		$('.carrouselHighlight', sideImages).click(function(){
	    			window.location = $('a', this).attr('href');
	    		});
	    		$('.carrouselMainImage', sideImages).one('load', function() {
	    			sideImages.show().animate({
		    		    right: '0'
		    		}, "slow");
    	        })
	    	    .each(function() {
	    	    	if(this.complete) $(this).trigger('load');
	    	    });
    		}

    		if ($("#carrousel").find('li').size() > 1){
	    		var pagination = $('<ul class="carrouselPagination">');
	    		container.append(pagination);
	    		
	    		var links = $("#carrousel").find('li').each(function(i){
	    			var klasse = '';
	    			if (i==firstIndex) {
	    				klasse = 'active';
	    			}
	    			var linkHref = $(this).find('a').attr('href');
	    			if (linkHref == "" || linkHref == "undefined" || typeof linkHref == "undefined") { linkHref = '#'; }
	    			var listItem = $('<li class="'+klasse+'"><a href="'+linkHref+'">'+(i+1)+'</a></li>');
	    			$(pagination).append(listItem);
	    		});
	    		
	
	    		$('.carrouselPagination li a').click(function(){
	    			$(this).parent().trigger('click');
	    			return false;
	    		});
	    		$('.carrouselPagination li').click(function(){
	    			clearTimeout(timer);
	    			timer = setTimeout( loopImages, options.loopTime );
	    			if (!$(this).hasClass('active')){
		    			$('.carrouselPagination li').removeClass('active');    			
		    			$(this).addClass('active');
		    			
		    			var index = $(this).index();
		    			var currImage = $('.carrouselContainer > .carrouselMainImage');
		    			var newImage = $('#'+originalId + ' li:eq('+index+') .carrouselMainImage').clone();
		    			var newTitle = $('#'+originalId + ' li:eq('+index+') .title').html();
		    			var newSubtitle = $('#'+originalId + ' li:eq('+index+') .subtitle').html();
		    			var newLinkText = $('#'+originalId + ' li:eq('+index+') .link').html();
		    			var newLinkHref = $('#'+originalId + ' li:eq('+index+') .link').attr('href');
		    			
		    			$('.carrouselImageInfo .title').html(newTitle);
		    			if (!newSubtitle){
		    				$('.carrouselImageInfo .subtitle').hide();
		    			} else {
		    				$('.carrouselImageInfo .subtitle').html(newSubtitle).show();
		    			}
		    			if (!newLinkText || !newLinkHref || newLinkHref == '#') {
		    				$('.carrouselImageInfo .link').hide();
		    			} else {
		    				$(".carrouselImageInfo").click(function(){
		    					window.location = newLinkHref; 
		    				});
		    				$('.carrouselImageInfo .link').html(newLinkText).attr('href', newLinkHref).show();
		    			}
		    			$(newImage).prependTo('.carrouselContainer');
		    			$(currImage).fadeOut('slow',
		    					function(){$(this).remove();}
		    			);
	    			}
	    		});
    		}
    		timer = setTimeout( loopImages, options.loopTime);
    	});
    	
    };
    
})(jQuery);

function nextCarrouselItem(){
	var countItems = $('.carrouselPagination li').size();
	var currentItem = $('.carrouselPagination li.active').index();
	var nextItem = 0;
	if (!isNaN(currentItem) && (currentItem+2) <= (countItems)){
		nextItem = currentItem + 1;
	}
	return nextItem;
}


function loopImages(){
	clearTimeout(timer);
	var newIndex = nextCarrouselItem();
	var newActive = $('.carrouselPagination li:eq('+newIndex+')');
	$('.carrouselPagination li').removeClass('active');
	newActive.addClass('active');
	
	var currImage = $('.carrouselContainer .carrouselMainImage');
	var newImage = $('#carrousel li:eq('+newIndex+') .carrouselMainImage').clone();
	var newTitle = $('#carrousel li:eq('+newIndex+') .title').html();
	var newSubtitle = $('#carrousel li:eq('+newIndex+') .subtitle').html();
	var newLinkText = $('#carrousel li:eq('+newIndex+') .link').html();
	var newLinkHref = $('#carrousel li:eq('+newIndex+') .link').attr('href');
	$('.carrouselImageInfo .title').html(newTitle);
	if (!newSubtitle){
		$('.carrouselImageInfo .subtitle').hide();
	} else {
		$('.carrouselImageInfo .subtitle').html(newSubtitle).show();
	}
	if (!newLinkText || !newLinkHref || newLinkHref == '#') {
		$('.carrouselImageInfo .link').hide();
	} else {
		$(".carrouselImageInfo").click(function(){
			window.location = newLinkHref; 
		});
		$('.carrouselImageInfo .link').html(newLinkText).attr('href', newLinkHref).show();
	}
	$(newImage).prependTo('.carrouselContainer');
	$(currImage).fadeOut('slow',
			function(){$(this).remove();}
	);
	timer = setTimeout( loopImages, 6000 );
}
