var TV = function(tvSmallNode, tvFullNode, tvFullInnerNode, tvImgNode, tvSmallToggleNode, progressBarOuter, progressBarInner)
{
	var _this = this;
	var _current = 0;
	var _loaded = false;
	
	var _images = [];
	var _loadingImages = [];
	var _imageWidths = [];
	var _imageHeights = [];
	
	var _toggleTimer = 0;
	var _imageTimer = 0;
	
	var _minHeight = tvSmallNode.clientHeight;
	var _maxHeight = tvFullNode.clientHeight;
	
	var _staticURL = '/tv/shell/static.gif';
	var _static = false;
	
	this.step = 25;
	this.timeOnScreen = 5000;
	this.staticTimeOnScreen = 500;
	
	var _imageTimerFire = function()
	{
		_static = !_static;
		
		if (_static)
		{
			tvImgNode.style.margin = '0';
			tvImgNode.src = _staticURL;
		}
		else
		{
			tvImgNode.src = _images[_current];
			
			_current++;
			_current %= _images.length;
		}
		
		_imageTimer = setTimeout(_imageTimerFire, _static ? _this.staticTimeOnScreen : _this.timeOnScreen);
	};
	
	var _loadImages = function()
	{
		var imagesToLoad = _images.concat(_staticURL);
		var toLoad = imagesToLoad.length;
		
		var loadingImages = [];
		
		var getOnload = function(index)
		{
			var onload = function()
			{
				toLoad--;
				
				progressBarInner.style.width = ((imagesToLoad.length - toLoad) / imagesToLoad.length * 100) + '%';
				
				_imageWidths[index] = loadingImages[index].width;
				_imageHeights[index] = loadingImages[index].height;
				
				if (!toLoad)
				{
					_loaded = true;
					setTimeout(_startImageRotation, 50);
				}
			};
			
			return onload;
		};
		
		progressBarOuter.style.visibility = 'visible';
		progressBarInner.style.width = '0%';
		
		for (var i in imagesToLoad)
		{
			loadingImages.push(new Image());
			
			loadingImages[i].onload = getOnload(i);
			loadingImages[i].src = imagesToLoad[i];
		}
	};
	
	var _startImageRotation = function()
	{
		progressBarOuter.style.visibility = 'hidden';
		
		_static = false;
		_imageTimer = _imageTimerFire();
	};
	
	var _stopImageRotation = function()
	{
		clearInterval(_imageTimer);
	};
	
	this.toggle = function()
	{
		popupGenerator.displayPopup(tvFullNode, 'TV', function()
		{
			_stopImageRotation();
		});
		
		if (_loaded)
		{
			_startImageRotation();
		}
		else
		{
			_loadImages();
		}
		
		return false;
	};
	
	this.add = function(imgSrc)
	{
		_images.push(imgSrc.replace(/&amp;/g, '&'));
		
		return _images.length;
	};
	
	this.batchAdd = function(imgSrcs)
	{
		for (var i in imgSrcs)
		{
			this.add(imgSrcs[i]);
		}
		
		return _images.length;
	};
	
	tvFullNode.parentNode.removeChild(tvFullNode);
	tvFullNode.style.display = 'block';
	tvFullNode.style.visibility = 'visible';
	
	tvSmallToggleNode.onclick = this.toggle;
};
