/**
* Carousel singleton - installs under Allstream namespace facade
*/
var AllstreamCarousel = new function()
{
	/*	attributes we use:
		{
			index:0,
			wait:10000,
			interval:null,
			stopAfterOne:true,
			white:false,
			imgId:"businessCaseCarouselImage",
			ancId:"businessCaseCarouselAnchor",
			dbId:"businessCaseCarouselImages"
		};
		*/
	this.init = init;
	this.next = next;
	this.pause = pause;
	this.pick = pick;
	this.start = start;
	this.stop = stop;
	//
	var cars = {};//hash of carousels indexed by car.imgId	
	//these images are shared among carousels,so we preload them once 
	var sharedImageLoadedCount=0;
	var sharedImageSrc = ["http://media.allstream.com/designimages/car-ball-dark.png", "http://media.allstream.com/designimages/car-ball-gray.png", "http://media.allstream.com/designimages/car-ball-light.png", "http://media.allstream.com/designimages/car-ball-white.png", "http://media.allstream.com/designimages/car-footer.png", "http://media.allstream.com/designimages/car-footer-white.png"]
	var sharedImagePreloadBegun=false;
	//
	function createPickFunc(car,pickIndex)
	{
		return function() {AllstreamCarousel.pick(car,pickIndex); return false;}
	}
	function current(car)
	{
		var img = $(car.imgId);
		var trueDot = car.white ? "http://media.allstream.com/designimages/car-ball-dark.png" : "http://media.allstream.com/designimages/car-ball-gray.png";
		var falseDot = car.white ? "http://media.allstream.com/designimages/car-ball-light.png" : "http://media.allstream.com/designimages/car-ball-white.png";
		for (var i=0;i<car.images.length;i++)
		{//color dots for selection	
			$(car.imgId + "Dot" + i).src = i==car.index ? trueDot : falseDot;
		}
		var img = $(car.imgId);
		img.src = car.images[car.index].src;
		var curAnc = $(car.ancId);
		curAnc.title = car.anchors[car.index].title;
		curAnc.href = car.anchors[car.index].href;
		// added as per JIRA 173
		curAnc.target = car.anchors[car.index].target;
	}
	function init(car)
	{
		if (cars[car.imgId])
		{//this may get called with a new instance from above,
		//so if it's already registered,use the registered one
			car = cars[car.imgId];
		}
		else
		{
			cars[car.imgId] = car;
		}
		if (sharedImageLoadedCount == sharedImageSrc.length) 
		{
			start(car);
		}
		else
		{
			preloadSharedImages();
		}
	}
	function next(car)
	{
	//	car.index++;
		if (car.index >= car.images.length)
		{
			if (car.stopAfterOne)
			{
				stop(car);
				return false;
			}
			else
			{
				car.index = 0;
			}
		}
		current(car);
		car.index++;
		return false;
	}	
	function pause(car)
	{
		if (car.interval == null)
		{
			$(car.imgId + "Control").title = "Click to Pause or Select Item.";
			car.interval = setInterval(function() {AllstreamCarousel.next(car);},car.wait);
		}
		else
		{
			$(car.imgId + "Control").title = "Click to Resume or Select Item.";
			clearInterval(car.interval);
			car.interval = null;
		}		
		return false;
	}
	function pick(car,index)
	{
		pause(car);
		car.index = index;
		current(car);
		return false;
	}	
	function preloadSharedImageEvent(e) 
	{		
		var img = EventHelpers.getEventTarget(e);		
		sharedImageLoadedCount++;
		if (sharedImageLoadedCount == sharedImageSrc.length) 
		{//once all of our shared images are loaded, we start carousels
			for (var imgId in cars)
			{
				start(cars[imgId]);
			}
		}
	}
	function preloadSharedImages() 
	{		
		 if (!sharedImagePreloadBegun && document.images)
    	 {
    		sharedImagePreloadBegun = true;
		 	for (var i = 0; i < sharedImageSrc.length; i++) 
		 	{
				preload_image = new Image();
				EventHelpers.addEvent(preload_image, 'load', preloadSharedImageEvent);
				preload_image.src = sharedImageSrc[i];
			} 
	     }
	}
	function start(car) 
	{
		var img = $(car.imgId);
		var controlAnchor = $(img.id + "Control");
		if (!controlAnchor)
		{
			car.images = $(car.dbId).getElementsByTagName("img");
			car.anchors = $(car.dbId).getElementsByTagName("a");
			if (car.images.length != car.anchors.length)
			{
				alert("Carousel initialization error in " + car.dbId + ": anchor-image count mismatch.");
			}
			var container = img.parentNode.parentNode;
			container.style.position = "relative";
			//create anchor to contain black bar and dots
			controlAnchor = document.createElement("A");
			controlAnchor.id = img.id + "Control";
			controlAnchor.href = "#";			
			//clicks on black bar do pause & resume
			controlAnchor.onclick = function(){return AllstreamCarousel.pause(car);};
			controlAnchor.title = "Click to Pause or Select Item.";
			controlAnchor.style.position = "absolute";
			controlAnchor.style.left = img.offsetLeft + "px";
			controlAnchor.style.top = img.height + "px";
			controlAnchor.style.width = img.width + "px";
			//bar at bottom of carousel image
			var bar = document.createElement("IMG");
			bar.style.width = img.width + "px";
			bar.src = "http://media.allstream.com/designimages/car-footer" + (car.white?"-white":"") + ".png";
			controlAnchor.style.height =  bar.height + "px";
			//
			container.style.height = (img.height + bar.height) + "px";
			controlAnchor.appendChild(bar);
			container.appendChild(controlAnchor);
			//calculate position of first dot
			var trueDot = car.white ? "http://media.allstream.com/designimages/car-ball-dark.png" : "http://media.allstream.com/designimages/car-ball-gray.png";
			var falseDot = car.white ? "http://media.allstream.com/designimages/car-ball-light.png" : "http://media.allstream.com/designimages/car-ball-white.png";
			var dot = document.createElement("IMG");
			dot.src = trueDot;
			var x = Math.max(0,(bar.width - dot.width * car.images.length) / 2);			
			for (var i=0;i<car.images.length;i++)
			{//create one control dot with anchor per image
				var dotA = document.createElement("A");
				dotA.href="#";
				dotA.onclick=createPickFunc(car,i);
				dotA.style.position = "absolute";
				dotA.zIndex = 100;
				dotA.style.left = (img.offsetLeft + x) + "px";
				dotA.style.top  = controlAnchor.style.top;
				dotA.title = car.anchors[i].title;
				dot = document.createElement("IMG");
				dot.style.position = "absolute";
				dot.style.left = "0px";
				dot.style.top  = "0px";				
				if (!car.white) 
				{
					dot.style.height = (bar.height - 1) + "px";
				} 
				else 
				{
					dot.style.width = 'auto';
					dot.style.height = 'auto';
				}
				dot.id = car.imgId + "Dot" + i;
				dot.src = i==0 ? trueDot : falseDot;
				dotA.appendChild(dot);
				container.appendChild(dotA);				
				x += dot.width;
			}			
		}
		car.interval = setInterval(function() {AllstreamCarousel.next(car);},car.wait);
	}
	function stop(car)
	{
		clearInterval(car.interval);
		car.interval = null;
	}	
}
//use allstream namespace as a facade
Allstream.carouselNext = AllstreamCarousel.next;
Allstream.carouselPause = AllstreamCarousel.pause;
Allstream.carouselStart = AllstreamCarousel.init;
Allstream.carouselStop = AllstreamCarousel.stop;

