var rim = rim || {};

/*
 * Carousel creates a generic carousel instance that is used
 * to handle the display of all carousels in a page.
 *
 * It takes a collection of objects defining each carousel
 *
 */
rim.Carousel = function (carousels) {
	rim.Carousel = this;
	this.Carousels = {};

	this.Init();
};

rim.Carousel.prototype = {
		Init: function () {

		var me = this;

		},
	Register: function (id, carousel) {

		var me = this;

		me.Carousels[id] = carousel;

		for (var slide in carousel['slides']){
			//assign the click events
			$('ul.' + slide + ' .nav').bind('click', function(){

				var carousel = $(this).closest('.carousel');

				carousel.hide();

				//change the class
				var id = carousel.attr('id');

				var slides = $(this).parent();

				var count = 0;
				var length = 0;
				var slideArray = [];

				for (var slideClass in me.Carousels[id]['slides']){

					slideArray[length] = slideClass;
					length++;

				}

				var nextSlide = null;

				if($(this).hasClass('leftSlide') || $(this).hasClass('leftShadow')){

					//get the previous class

					for (var slideClass in me.Carousels[id]['slides']){

						if(slides.hasClass(slideClass)){

							if(count == length - 1){

								nextSlide = slideArray[0];

							} else {

								nextSlide = slideArray[count + 1];

							}

							break;
						}
						count++;
						
					}

				} else if($(this).hasClass('rightSlide') || $(this).hasClass('rightShadow')){

					//get the next class
					for (var slideClass in me.Carousels[id]['slides']){

					if(slides.hasClass(slideClass)){

						if(count == 0){

							nextSlide = slideArray[length - 1];

						} else {

							nextSlide = slideArray[count - 1];

						}

						break;
					}
					count++;


					}

				}
				slides.removeClass(slideClass);
				slides.addClass(nextSlide);

				//change the actionButton class
				var actionClasses = $('#' + id + ' .actionButton').attr('class');
				var lastSpace = actionClasses.lastIndexOf(' ');
				var len = actionClasses.length;
				var lastClass = actionClasses.substring(lastSpace + 1, len);

				$('#' + id + ' .actionButton').removeClass(lastClass);

				//remove the dot
				$('#' + id + ' .dots li').removeClass('selected');

				me.setSlide(id, nextSlide);

				carousel.show();

			//end of click event
			});

		for (var slideClass in me.Carousels[id]['slides']){
			me.setSlide(id, slideClass);
			break;
		}

		//hide the static version
		$('#' + id + ' .static').hide();

		//show the dynamic version
		$('#' + id + ' .dynamic').show();
		}
	},
	setSlide : function(id, slideClass){
		var me = this;

		$('#' + id + ' .mainSlide').attr('modalid', me.Carousels[id]['slides'][slideClass].modalid);
		$('#' + id + ' .actionButton').addClass(me.Carousels[id]['slides'][slideClass].actionButton);
		$('#' + id + ' .dots .' + slideClass).addClass('selected');
		if(me.Carousels[id]['textTarget']){
			$('#' + me.Carousels[id]['textTarget']).html($('#' + id + ' div.' + slideClass).html());
			rim.InitCufon();
		}
	}
};

rim.OnloadEvents.Register(function () {
	new rim.Carousel();
});
