/*jslint evil: true, forin: true */
/*!
 * Minute Maid Primary file for Home Page Carousel
 * Author: SapientNitro (2011) (http://www.sapient.com)
 * @version 1.2
*/

(function( window, $, undefined ) {
	//Main Root object for uwb
	var uwb = (function (uwb) {
		/**
		* Init call for Main JS
		* Called on document ready
		*/
		uwb.eventTarget = "";
		uwb.carouselHolder = "";
		uwb.carouselContainer = '';		
		uwb.carouselSize = 0;
		uwb.oAjaxRequests = [];
		uwb.carouselData = {};		
		uwb.siteLocale = 'en_GB';
		uwb.jcarouselControl = '';
		uwb.time = 0;
		uwb.init = function () {
			uwb.eventTarget = $('body');
			uwb.carouselHolder = $('#carouselHolder');
			uwb.support.loadAjaxData('carouselImageJSON', uwb.createCarouselOnLoad);
			
			if($('#downloadCarousel li').length != 0){
				uwb.downloadCarousel();
			}
			
			return this;
		};
		
		//Create Carousel 
		uwb.createCarouselOnLoad = function(oRespData) {
			var carouselHTML = [], fruitImage = '', fruitLabelImage = "", liBannerImage = "";			
			if(($.isEmptyObject(oRespData) === true) || (oRespData[""] === "")) {
				console.log('Error in Loding Data');
			} else if(oRespData.hasOwnProperty('ImageURL') && oRespData['ImageURL'].hasOwnProperty(uwb.siteLocale)){
						uwb.carouselData = oRespData['ImageURL'][uwb.siteLocale];
						uwb.carouselHolder.append('<span class="leftLeaf onHomePage">\
						<span class="shadow"></span></span>\
						<span class="rightLeaf onHomePage">\
						<span class="shadow"></span></span><span class="singleHummingBird onHomePage"></span>\
						<ul id="mycarousel" class="jcarousel-skin-tango"></ul><div class="jcarousel-control"><div>');
						uwb.carouselContainer = $('#mycarousel');
						var loop = 1;
						$.each(uwb.carouselData, function(key, value) {
							liBannerImage = uwb.carouselData[key]["bgImage"];
							fruitImage = uwb.carouselData[key]["fruitImage"];
							fruitLabelImage = uwb.carouselData[key]["fruitLabelImage"];
							title = uwb.carouselData[key]["title"];
							birdImage = uwb.carouselData[key]["birdImage"];
							urlTitle = uwb.carouselData[key]["urlTitle"];
							urlLink = uwb.carouselData[key]["urlLink"];
							carouselHTML[key] = '<li>\
													<div class="bannerImageContainer">';
							if(birdImage!=="") {
								carouselHTML[key] += '<img src="'+birdImage+'" class="birdImage'+loop+'" />';
							}
							
														
							carouselHTML[key] += '<span class="title'+loop+'">'+title+'</span>';
							
							if(urlTitle!=="") {
								carouselHTML[key] += '<a class="urlTitle'+loop+'" href="'+urlLink+'">'+urlTitle+'</a>';
							}
											
							carouselHTML[key] += '<img src="'+liBannerImage+'" class="bannerImage" />\
										</div>\
										<div id="fruitTypeContainer">\
											<img src="'+fruitImage+'" alt="" class="fruitImage" />\
											<h2 class="fruitLabel">';
											
							if(fruitLabelImage!=="") {
								carouselHTML[key] += '<img src="'+fruitLabelImage+'" alt="" />';
							}	
							
							carouselHTML[key] += '</h2>\
										</div>\
									</li>';
							loop++;
						});
					uwb.renderCarousel(carouselHTML);
				}
		};
		
		/**
		* Render the Carousel after Carousel Data gets loaded on the Page.
		*/
		uwb.renderCarousel = function(carouselHTML){
			if(carouselHTML.length > 0){
				for(var i = 1, carouselHTMLLen = carouselHTML.length; i <= carouselHTMLLen; i++){
					uwb.carouselContainer.append(carouselHTML[i-1]);
				}
				uwb.carouselContainer.find('li').hide();
				uwb.carouselContainer.find('li:eq(0)').fadeIn('fast');
			}
			
			uwb.carouselSize = carouselHTMLLen;
			$('.shadow').css('display', 'inline-block');
			
			uwb.jcarouselControl = $('.jcarousel-control');
			
			if(uwb.carouselSize > 1){
				for(var i = 1; i <= uwb.carouselSize; i++){
					uwb.jcarouselControl.append('<span class="eventPost"><a href="#">'+ i +'</a></span>');
				}
				uwb.jcarouselControl.find('a:eq(0)').addClass('active');
				uwb.jcarouselControl.find('a').bind('click', uwb.playCarousel);
				uwb.startAutoRotate();
			} else{
				uwb.jcarouselControl.empty();
				uwb.jcarouselControl.hide();
			}
		};
		
		uwb.startAutoRotate = function(){
			uwb.time = setTimeout('uwb.rotateCarousel()', 4000);
		}
		
		uwb.rotateCarousel = function(){
			for($i=0; $i < uwb.carouselSize; $i++){
			
				var isActive = $('.jcarousel-control a').eq($i).hasClass('active');
				if(isActive == true){
					var itemIndex = $i;
				}
			}
			if(itemIndex < uwb.carouselSize-1){
				itemIndex = itemIndex + 1;				
			} else {
				itemIndex = 0;
			}
			
			$(uwb.jcarouselControl).find('a').removeClass('active');			
			
			$(uwb.jcarouselControl).find('a:eq('+itemIndex+')').addClass('active');
			uwb.carouselContainer.find('li').hide();
			uwb.carouselContainer.find('li:eq('+itemIndex+')').fadeIn(800);
			uwb.startAutoRotate();
		};
		
		uwb.playCarousel = function(evt){
					evt.preventDefault();
					clearTimeout(uwb.time);
					$(uwb.jcarouselControl).find('a').removeClass('active');
					var itemIndex = 0;
					itemIndex = $(uwb.jcarouselControl).find('a').index(this);
					$(uwb.jcarouselControl).find('a:eq('+itemIndex+')').addClass('active');
					uwb.carouselContainer.find('li').hide();
					uwb.carouselContainer.find('li:eq('+itemIndex+')').fadeIn(800);
					uwb.startAutoRotate();
		};
		
		uwb.downloadCarousel = function(){
			var downloadCarousel = $('#downloadCarousel'), totalItems = $('#downloadCarousel li'), downloadCarouselHolder = $('#downloadCarouselHolder'), prevControl = '', nextControl = '', navControl = '', index = 0;
			
			prevControl = downloadCarouselHolder.find('.prevControl');
			nextControl = downloadCarouselHolder.find('.nextControl');
			navControl = downloadCarouselHolder.find('.control');
			
			if(totalItems.length > 1){
				downloadCarousel.find('li').hide();
				prevControl.hide();
				downloadCarousel.find('li:eq('+index+')').fadeIn('fast').addClass("active");
				
				nextControl.bind('click', function(evt){
					evt.preventDefault();
					index = index + 1;
					downloadCarousel.find('li').hide().removeClass("active");
					downloadCarousel.find('li:eq('+index+')').fadeIn('fast').addClass("active");
					if(index != 0){
						prevControl.show();
					}
					if(index == totalItems.length-1){
						nextControl.hide();
					}
				});
				
				prevControl.bind('click', function(evt){
					evt.preventDefault();
					index = index - 1;
					downloadCarousel.find('li').hide().removeClass("active");
					downloadCarousel.find('li:eq('+index+')').fadeIn('fast').addClass("active");
					if(index != totalItems.length-1){
						nextControl.show();
					}
					if(index == 0){
						prevControl.hide();
					}
				});				
			} else{
				navControl.hide();
			}		
		};
		
		/**
		* Supporting functions
		*/
		uwb.support = {
			loadAjaxData: function(fName, fCallback, options) {
				var defaults = {
					allowMuliple : true
				};
				var options = $.extend({}, defaults, options),
				fCallback = fCallback,
				sServiceName = fName, parameters = '';
				
				var furl = uwb.config.urls[fName];
				if (uwb.oAjaxRequests[sServiceName] && options.allowMuliple === false) {
					uwb.oAjaxRequests[sServiceName].abort();
				}
				//request new data
				uwb.oAjaxRequests[sServiceName] = $.ajax({
					url: furl,
					data: parameters,
					type: "GET",
					dataType: "json",
					success: function(oRespData) {
						uwb.oAjaxRequests[sServiceName] = false;
						if(fCallback) {
							fCallback(oRespData);
						}
					},
					error: function() {
						if (!window.console && !(/MSIE 8/i.test(navigator.userAgent))) console = {log: function() {
							return 'Error in loading "'+fName+'" file.';
						}};
					}
				});					
				//return the promise
				return uwb.oAjaxRequests[sServiceName];
			}
		};
		//return out new object
		return uwb;
	
	}(uwb || {}));
	
	//expose the uwb object to global scope.
	window.uwb = uwb;
	
	$(document).ready(function () {
		uwb.init();
	});
	
}(window, jQuery));

