'use strict';
(function($){
    if ($.fn.xaxos == undefined) { $.fn.xaxos = {}; }
    $.xaxosCarouselIsAnimating = false;
	
    $.fn.xaxosCarousel = function(options) {
	var defaults = {
	    selectors: {
		sliderHeaderImg: null,
		prevButton: '.slider-prev',
		nextButton: '.slider-next',
		sliderContent: null,
		sliderListItems: '.thumb-row:first li',
		sliderListItemDetail: '.slider-item-detail',
		sliderListItemDetailImage: '.slider-item-image'
	    },
	    speed: 500
	};

	var options = $.extend(true, defaults, options);
	var methods = {
	    init: function(obj, options) {
		//say("Init Carousel");
		// retrieve current settings/objects
		obj.find(options.selectors.sliderListItems).hover(
		    function() {
			// Assign "selected" status
			var $this = $(this);
			$this.siblings().removeClass('selected').end().addClass('selected');
						    
			// Assign teaser content (if available)
			if (options.selectors.sliderContent !== null) {
			    $(options.selectors.sliderContent).html($this.children(options.selectors.sliderListItemDetail).html());
			}
						    
			// Assign main image
			if (options.selectors.sliderHeaderImg !== null) {
			    var imgSource = $this.children(options.selectors.sliderListItemDetailImage);
			    $(options.selectors.sliderHeaderImg).attr({
				src: imgSource.attr('href'),
				alt: imgSource.text()
			    });
			}
		    },
		    function() { }
		);
	    },
	    move: function(obj, dir) {
		if ($.xaxosCarouselIsAnimating === false) {
		    $.xaxosCarouselIsAnimating = true;
		    var container = obj.children('ul');
		    var items = $(options.selectors.sliderListItems);
		    var maxitems = (parseInt(items.length) - 4);
		    var width = items.first().outerWidth(true);
					
		    // retrieve index
		    var index = container.attr('data');			
		    if (index == null) { index = 0; }
					
		    // calculate new index
		    index = parseInt(index) + parseInt(dir);
		    if (index > 0) { index = -1 * maxitems; }
		    if (index < (-1 * maxitems)) { index = 0; }
					
		    // store new index
		    container.attr('data', index);

		    // start animation
		    container.animate({ left: ((index * width) + 'px')}, options.speed, function() {
			    $.xaxosCarouselIsAnimating = false;
			    });
		}
	    },
	    addEventHandler: function(obj, options, methods) {
		// initialize event handler
		obj.find(options.selectors.prevButton).click(function() {
		// Move left
		methods.move(obj, 1);
		return false;
		});
		obj.find(options.selectors.nextButton).click(function() {
		    // Move right
		    methods.move(obj, -1);
		    return false;
		});
	    }
	};

	return this.each(function() {
	    var obj = $(this);
	    //say('Carousel for ...');
	    //say(obj);
	    methods.init(obj, options);
	    methods.addEventHandler(obj, options, methods);
	    methods.move(obj, 0);
	});
    };

})(jQuery);





