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
				if (me.Carousels[id]['slides'][slideClass].actionButton != '') {
				    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
			});
				
			
			
		/*
		* Carousel Radio Button functionality update
		*/	
		$('ul.dots li.sprite').bind('click', function(){
				
				var carousel = $(this).closest('.carousel');
				var carouselId = carousel.attr('id');
				

				var dotClassList = $(this).attr('class');
				var dotClassArr = dotClassList.split(" ");				
				var dotClassName = dotClassArr[1];
				
				var allDotClassesArr = $('#'+ carouselId + ' ul.dots').find('[class]').map(function() {
					return this.className;
					}).get();
			
				var allDotClassesJoined = allDotClassesArr.join(' ');
				var allDotClassesArrNew = allDotClassesJoined.split(' ');
			
				//get rid of 'sprite' word from array
				for(var i=0; i<allDotClassesArrNew.length; i++ ){ 
					if(allDotClassesArrNew[i]=="sprite") 
					allDotClassesArrNew.splice(i,1); 
					}

				//get rid of 'selected' word from array
				for(var i=0; i<allDotClassesArrNew.length; i++ ){ 
					if(allDotClassesArrNew[i]=="selected") 
					allDotClassesArrNew.splice(i,1); 
					}
					
				var allDotClassesList = allDotClassesArrNew.join(' ');

				//removes all 3 classes, and adds selected class based on dot clicked
				$('#' + carouselId + ' ul.slides').removeClass(allDotClassesList);
				$('#' + carouselId + ' ul.slides').addClass(dotClassName);
				
				//set corresponding modal id
				var modalName = dotClassName + "Modal";
				$('#' + carouselId + ' .mainSlide').attr('modalid', modalName);		

				// action button
				if (me.Carousels[carouselId]['slides'][dotClassName].actionButton != '') {
				    var actionClasses = $('#' + carouselId + ' .actionButton').attr('class');
    				var lastSpace = actionClasses.lastIndexOf(' ');
    				var len = actionClasses.length;
    				var lastClass = actionClasses.substring(lastSpace + 1, len);
    				$('#' + carouselId + ' .actionButton').removeClass(lastClass);
    				$('#' + carouselId + ' .actionButton').addClass(me.Carousels[carouselId]['slides'][dotClassName].actionButton);
				}
				
				
				
				// text 
				$('#' + me.Carousels[carouselId]['textTarget']).html($('#' + carouselId + ' div.' + dotClassName).html());
				rim.InitCufon();
				
				
				//dots on/off
				$('#' + carouselId + ' li.sprite').removeClass("selected");
				$(this).addClass("selected");
				
				
			});
			/* end Carousel radio button functionality update */	
			
			
			

		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();
});
