YAHOO.namespace("cmsIT");

if (!YAHOO.cmsIT.introImage)
{
	YAHOO.cmsIT.introImage = function()
	{
		// Private
		var config = null,
			fadeAnimation = null,
			imageCover = null,
			imagesHash = new Object(),
			imageLoaderQueue = null,
			imagePointer = 0,
			images = null,
			imageViewer = null,
			introImage = null,
			progressBar = null,
			rotateTimer = 0,
			timer = null,
			utils = YAHOO.cmsIT.utils;


		var LoadConfig = function()
		{
			config = YAHOO.lang.JSON.parse(config.innerHTML);

			rotateTimer = config.autoRotateTimer * 1000;
		};


		var LoadImages = function(response, arguments)
		{
			images = response;

			var queueProperties = YAHOO.cmsIT.imageLoader.GetNewQueue();
			imageLoaderQueue = queueProperties.name;
			

			for (var i = 0; i < images.length; i++)
			{
				if (i == 0)
				{
					YAHOO.cmsIT.imageLoader.QueueImage(imageLoaderQueue, images[i].path, OnFirstImageLoad);
				}
				else
				{
					YAHOO.cmsIT.imageLoader.QueueImage(imageLoaderQueue, images[i].path);
				}

				imagesHash[images[i].imgID] = images[i];
			}

			YAHOO.cmsIT.imageLoader.Subscribe(imageLoaderQueue, "queueLoaded", OnAllImagesLoaded);
			YAHOO.cmsIT.imageLoader.LoadImages(imageLoaderQueue, true);
		};


		var LoadIndicators = function()
		{
			for (var i = 0; i < images.length; i++)
			{
				var indicator = document.createElement("div");
				indicator.className = "indicator";

				if (i == 0)
				{
					indicator.className += " selected";
				}

				progressBar.appendChild(indicator);
				images[i].indicator = indicator;

				YAHOO.util.Event.addListener(indicator, "click", SelectImage, i);
			}
		};


		var OnAllImagesLoaded = function()
		{
			YAHOO.cmsIT.imageLoader.RemoveQueue(imageLoaderQueue);

			imageLoaderQueue = null;

			LoadIndicators();

			YAHOO.util.Event.addListener(imageCover, "click", OnImageClick);
			YAHOO.util.Event.addListener(progressBar, "click", OnImageClick);
			YAHOO.lang.later(rotateTimer, this, RotateImage, null, false);
		};


		var OnFadeComplete = function()
		{
			imageCover.style.backgroundImage = imageViewer.style.backgroundImage;
			YAHOO.util.Dom.setStyle(imageCover, "opacity", 1);
			fadeAnimation = null;

			if (timer != null)
			{
				timer.cancel();
				timer = null;
			}

			timer = YAHOO.lang.later(rotateTimer, this, RotateImage, null, false);
		};


		var OnFirstImageLoad = function()
		{
			imageViewer.style.backgroundImage = "url(" + images[0].path + ")";
		};


		var OnImageClick = function()
		{
			if (images[imagePointer].url.length > 0)
			{
				location.href = images[imagePointer].url;	
			}
		};


		var RotateImage = function()
		{
			if (timer != null)
			{
				timer.cancel();
				timer = null;
			}

			if (imagePointer == images.length - 1)
			{
				var nextImage = 0;
			}
			else
			{
				var nextImage = imagePointer + 1;
			}

			SelectImage(null, nextImage);
		};


		var SelectImage = function(ev, id)
		{
			if (fadeAnimation == null)
			{
				for (var i = 0; i < images.length; i++)
				{
					if (i == id && !YAHOO.util.Dom.hasClass(images[i].indicator, "selected"))
					{
						YAHOO.util.Dom.addClass(images[i].indicator, "selected");
					}
					else if (YAHOO.util.Dom.hasClass(images[i].indicator, "selected"))
					{
						YAHOO.util.Dom.removeClass(images[i].indicator, "selected");
					}
				}


				imageCover.style.backgroundImage = imageViewer.style.backgroundImage;
				imageViewer.style.backgroundImage = "url(" + images[id].path + ")";
				imagePointer = id;


				var attributes =
				{
					opacity: { from: 1, to: 0 }
				};

				fadeAnimation = new YAHOO.util.Anim(imageCover, attributes, 1, YAHOO.util.Easing.easeOut);
				fadeAnimation.onComplete.subscribe(OnFadeComplete);
				fadeAnimation.animate();
			}

			if (ev != undefined && ev != null)
			{
				YAHOO.util.Event.stopEvent(ev);	
			}
		};




		// Public
		return {
			Init: function()
			{
				if (introImage == null)
				{
					introImage = YAHOO.util.Dom.get("introImage");

					var divs = YAHOO.util.Dom.getElementsByClassName("imageCover", "div", introImage);
					imageCover = divs[0];

					divs = YAHOO.util.Dom.getElementsByClassName("imageViewer", "div", introImage);
					imageViewer = divs[0];

					divs = YAHOO.util.Dom.getElementsByClassName("progressBar", "div", introImage);
					progressBar = divs[0];

					divs = YAHOO.util.Dom.getElementsByClassName("config", "div", introImage);
					config = divs[0];

					LoadConfig();

					var callback = YAHOO.cmsIT.utils.CreateCallBack(LoadImages, null, YAHOO.cmsIT.introImage);

					utils.ProcessRequest("imgGallery", "GetGalleryImages", [config.imgGalleryID], callback);
				}
			}
		};
	}();

	// YAHOO.util.Event.onContentReady("introImage", YAHOO.cmsIT.introImage.Init);
	YAHOO.util.Event.addListener(window, "load", YAHOO.cmsIT.introImage.Init, YAHOO.cmsIT.introImage, true);
}
