/*
	Copyright Code Computerlove Ltd 2009
	Build: 1.1.0.22
	Date: 10/09/2009 11:48:10
*/

(function($j){ 

Code.registerNamespace('Website.Core');	


$j.fn.CodeCarousel = function(options) {
 
	
	if($j(this).size()){  
		 var defaults = { 
				 items: 1, 
				 itemsPerPage: 0, 
				 width: null,
				 height: null,
				 supressBottomPadding: false,
				 listCount: 0
			};

		 var settings = $j.extend(defaults, options);

 	return this.each(function() { 
			obj = $j(this);

 			carouselHolder = "c-carousel";
			carouselHousing = "c-carousel-outer";
			carouselInner = "c-carousel-inner";
			carouselItem = "c-carousel-item";
			carouselPaging = "c-carousel-paging";
			carouselNav = "c-carousel-nav";
			carouselPrev = "c-carousel-prev";
			carouselNext = "c-carousel-next";
			carousel  = '';
			carouselItems = null;
			carouselItemsPerPage = null;
			listCount = settings.listCount;
			
			setUpCarousel();
			
		function setUpCarousel(){
			
			//set private vars
			var self = this;
			var carousel = obj.attr('class');
			var cCarousel = obj;
			var carouselHolder = self.carouselHolder;
			var carouselHousing = self.carouselHousing;
			var carouselInner = self.carouselInner;
			var carouselItem = self.carouselItem;
			var carouselItems = settings.items;
			var carouselPaging = self.carouselPaging;
			var carouselNav = self.carouselNav;
			var carouselPrev = self.carouselPrev;
			var carouselNext = self.carouselNext;
			var carouselItemsPerPage = (settings.itemsPerPage + 1);
			var cWidth = settings.width;
			var cHeight = settings.height;
			var cStyle = ('');
			var cPaddingTop = 0;
			var cPaddingBottom = 0;
			var cMarginTop = 0;
			var cMarginBottom = 0;
			var cPaddingLeft = 0;
			var cPaddingRight = 0;
			var cMarginLeft = 0;
			var cMarginRight = 0;
			var cSuppressBottomPadding = settings.suppressBottomPadding;
			var carouselTrueWidth = 0;
			var pageCount = null;
			var listItemCount = null;
			var carouselListWidth = 0;
			var carouselList = new Array();
			var carouselItemId = ('');
			var carouselItemClass = ('');
			var carouselSplit = 0;
			
			
			
			//set global vars
			self.carouselItems = carouselItems;
			self.carousel = carousel;
			self.carouselItemsPerPage = carouselItemsPerPage;
			
			//strip and replace the original list item
			$j('li', cCarousel).each(function(index){
																								
					pageCount = parseInt((index+1)/carouselItems);
					listItemCount = index;
					//get the current attributes of the li (should add more here)
					var carouselItemTrueId = $j(this).attr('id');
					var carouselItemTrueClass = $j(this).attr('class');
					
					//clone the attributes
					if(carouselItemTrueId != ""){
						carouselItemId = (' id="' + carouselItemTrueId + '"');
					}else{
						carouselItemId = ('');
					}
					
					if(carouselItemTrueClass != ""){
						carouselItemClass =	(' class="' + carouselItemTrueClass + '"');
					}else{
						carouselItemClass = ('');
					}
					
					carouselList.push('<li' + carouselItemId + ' ' + carouselItemClass + '>' + $j(this).html() + '</li>');
					
					if(index < carouselItems){
								cPaddingTop += parseInt($j(this).css('padding-top'));
								cPaddingBottom += parseInt($j(this).css('padding-bottom'));
								cMarginTop += parseInt($j(this).css('margin-top'));
								cMarginBottom += parseInt($j(this).css('margin-bottom'));
								cPaddingLeft += parseInt($j(this).css('padding-left'));
								cPaddingRight += parseInt($j(this).css('padding-right'));
								cMarginLeft += parseInt($j(this).css('margin-left'));
								cMarginRight += parseInt($j(this).css('margin-right'));
								
							$j(this).children().each(function(){
								cPaddingTop += parseInt($j(this).css('padding-top'));
								cPaddingBottom += parseInt($j(this).css('padding-bottom'));
								cMarginTop += parseInt($j(this).css('margin-top'));
								cMarginBottom += parseInt($j(this).css('margin-bottom'));
								cPaddingLeft += parseInt($j(this).css('padding-left'));
								cPaddingRight += parseInt($j(this).css('padding-right'));
								cMarginLeft += parseInt($j(this).css('margin-left'));
								cMarginRight += parseInt($j(this).css('margin-right'));
							});
					}
					self.listCount = index+1;
			});
			
			
			
			// set width and height of carousel
			var carouselGroupXExtras = (cMarginRight + cPaddingRight) + (cMarginLeft + cPaddingLeft);
			carouselListWidth = (parseInt($j('li', cCarousel).width())) * (carouselItems) + (carouselGroupXExtras) * carouselItemsPerPage;
			
			if(carouselItems < pageCount){
				carouselListWidth = (parseInt($j('li', cCarousel).width())) * (pageCount+1) + (carouselGroupXExtras) * carouselItemsPerPage
			}
			
			if(carouselItemsPerPage > 1 || carouselItems == 1){
				carouselListWidth =  (carouselListWidth * (pageCount));
			}
			
			var carouselGroupItemExtra = (cPaddingTop + cPaddingBottom) + (cMarginTop + cMarginBottom);
			
			
			if(cWidth != undefined){
				cWidth = ('width: ' + cWidth + ';');
			}else{
				cWidth = ('width: ' + $j('li', cCarousel).width() + 'px;');
			}
			
			if(cHeight != undefined){
				cHeight = ('height: ' + parseInt(cHeight + 20) + 'px;');
			}else{
				if(cSuppressBottomPadding)
				{
					cHeight = ('height: ' + parseInt(($j('li', cCarousel).height() * (carouselItems)) + 20) + 'px;');
				}
				else
				{
					cHeight = ('height: ' + parseInt(($j('li', cCarousel).height() * (carouselItems)) + carouselGroupItemExtra + 20) + 'px;');
				}
			}
			if(self.listCount > 0){
			
				//generate controls
				carouselControls = ('<div class="'+ carouselNav +' ' + carouselPrev + '"></div><div class="'+ carouselNav +' '+ carouselNext +'"></div><div class="' + carouselPaging + '"></div>');
				
				
				//place the carousel container
				cCarousel.wrap('<div class="' + carouselHousing + ' ' + carousel + '" style="position: relative;"><div class="' + carouselHolder + '" style="overflow: hidden; ' + cHeight + ' "><div class="' + carouselInner + '" style="position: absolute;"></div></div>' + carouselControls + '</div>');
				var cCarouselInner = $j('.' + carouselInner, '.'+carousel);
				
				//set the width of the inner container
				$j('.'+carouselInner, '.'+carousel).css({width : carouselListWidth, overflow:'hidden'}); 
				
				// write out the new carousel			
				var cCarouselHolder = $j('.' + carouselHolder);
				var carouselItemLength = carouselList.length;
				var	carouselListNew = ('<div class="' + carouselItem + '"><ul>');
				var cCarouselItemsPerPage = carouselItemsPerPage;
				
				
				if(carouselItemsPerPage > 1){
					var pageListCount = (carouselItems * carouselItemsPerPage-1);
				}else{
					var pageListCount = (carouselItems * carouselItemsPerPage);
				}
				
					for(var i = 0; i < carouselItemLength; i++){
						
							carouselListNew += (carouselList[i]);
							if(parseInt(pageListCount) != 0){
								
								if(i == pageListCount-1 && i != listItemCount){
									
									carouselListNew += ('</ul></div><div class="' + carouselItem + '"><ul>');
										if(carouselItemsPerPage > 1){
											pageListCount += (carouselItems *  carouselItemsPerPage-1);
										}else{
											pageListCount += (carouselItems *  carouselItemsPerPage);
										}
								}
							}
					}
				
				carouselListNew += ('</ul></div>');
				//remove the old list item
				cCarousel.remove();
				//place the new one in the dom
				$j(cCarouselInner,'.'+carousel).append(carouselListNew)
				
				//set up the navigation controls
				setupNav();			
			}
		};
		
		function setupNav(){
			
			var self = this;
			var cCarousel = '.'+self.carousel;
			var nav = "c-carousel-nav";
			var navPrev = "c-carousel-prev";
			var navNext = "c-carousel-next";
			var cNav = $j('.' + nav, cCarousel);
			var cNavPrev = $j('.' + navPrev, cCarousel);
			var cNavNext = $j('.' + navNext, cCarousel);
			var carouselInner = self.carouselInner;
			var cCarouselInner = $j('.' + carouselInner, cCarousel);
			var carouselItem = self.carouselItem;
			var cCarouselItem = $j('.' + carouselItem, cCarousel);
			var carouselItems = settings.items;
			var carouselWidth = cCarouselItem.width();
			var carouselLength = 0;
			var carouselTotalItems = 0;
			var navCount = 1;
			var carouselPaging = self.carouselPaging;
			var cCarouselPaging = $j('.' + carouselPaging, cCarousel);
			var carouselItemsPerPage = settings.itemsPerPage;
			
			cCarouselItem.each(function(index){		
				
				carouselLength = index+1;
				carouselTotalItems = carouselLength;
				
			});
			
			$j('li', cCarousel).each(function(index){		
				
				carouselTotalItems = index+1;
				
			});
			
			var pagingText = ('<span class="current">' + navCount + '</span> / <span class="total">' + carouselLength + '</span>');
			
			if(navCount == carouselLength){
				cNavNext.addClass('c-carousel-next-disabled')
			}
			if(navCount == 1){
					cNavPrev.addClass('c-carousel-prev-disabled')
			}
						
			cNav.click(function(evt){
				var myTarget = $j(evt.target);
				if(myTarget.is('.'+navNext)){
					if(navCount < carouselLength){
						/*if(carouselItemsPerPage > 1){
							if(navCount == (carouselLength-1)){
								var lastItem = ((carouselTotalItems / carouselItems) / carouselItemsPerPage);
								if(lastItem != carouselLength){
									carouselWidth = parseInt(carouselWidth)/carouselItemsPerPage; 
								}
							}
						}*/
					
						cCarouselInner.animate({
							"left": '-=' + parseInt(carouselWidth)
							},"slow"
						);
						
						
						
						navCount ++;
						$j('.current', cCarousel).text(navCount);
						/*if(navCount == carouselLength){
							carouselWidth = parseInt(carouselWidth)*carouselItemsPerPage;
						}*/
					}
				}
				if(myTarget.is('.'+navPrev)){
					if(navCount > 1){
						/*if(carouselItemsPerPage > 1){
							if(navCount == 2 && navCount != carouselLength){
								var lastItem = ((carouselTotalItems / carouselItems) / carouselItemsPerPage);
								if(lastItem != carouselLength){
									carouselWidth = parseInt(carouselWidth)/carouselItemsPerPage; 
								}
							}
						}*/
						cCarouselInner.animate({
							"left": '+=' + parseInt(carouselWidth)
							},"slow"
						);
						navCount --;
						$j('.current', cCarousel).text(navCount);
					}
				}
				
				if(navCount == carouselLength){
					cNavNext.addClass('c-carousel-next-disabled')
				}else{
					cNavNext.removeClass('c-carousel-next-disabled')
				}
				if(navCount == 1){
					cNavPrev.addClass('c-carousel-prev-disabled')
				}else{
					cNavPrev.removeClass('c-carousel-prev-disabled')
				}
				
				Website.Core.businessStatisticsCarouselLength = carouselLength;
				
				
			});
			
			//set nav text
			cCarouselPaging.append(pagingText);
			
		
		}
		
	
	});
	
	}
}
})(jQuery); 
