YAHOO.namespace("vibrant");
YAHOO.vibrant.imageLoader = function () {
	this.init();
}

YAHOO.vibrant.imageLoader.prototype = {
	init: function()
		{			
			this.loaderSrc = '/images/loader.gif';
			this.loaderDuration = 1;
			this.loaderWidth = 32;
			this.loaderHeight = 32;
			this.loaderImageQueue = new Array();
			this.autoCenter = true;
		}	
	,		
	load: function(id, src, setWidth, setHeight, boolAutoAlignWidth, boolAutoAlignHeight)
		{
			var img = document.getElementById(id);
			
			if (boolAutoAlignWidth == undefined) {
				boolAutoAlignWidth = true;
			}
						
			if (boolAutoAlignHeight == undefined) {
				boolAutoAlignHeight = true;
			}
			
			if (setHeight == undefined && img.height != 0) {
				setHeight = img.height;
			}
			
			img.src = this.loaderSrc;
			img.width = this.loaderWidth;
			img.height = this.loaderHeight;		

			YAHOO.util.Dom.setStyle(img, 'position', 'absolute');
			if (boolAutoAlignWidth) YAHOO.util.Dom.setStyle(img, 'left', ((setWidth/2)-(this.loaderWidth/2))+'px');
			if (boolAutoAlignHeight) YAHOO.util.Dom.setStyle(img, 'top', ((setHeight/2)-(this.loaderHeight/2))+'px');
				
			// Safari/IE hack
			var imgPreloader = document.createElement('img');					
			// imgPreloader = new Image();
			
			imgPreloader.src = src;		
			
			// IE hack	
			//alert('debug point A: ' + imgPreloader.readyState + ' (' + src + ')');
			if (imgPreloader.readyState == 'complete') {
				img.removeAttribute('style');
				img.width = setWidth;
				img.height = setHeight;			
				
				YAHOO.util.Dom.setStyle(img, 'opacity', 0.1);
				img.src = src;
				var anim = new YAHOO.util.Anim(id, { opacity: { to: 1 } }, this.loaderDuration, YAHOO.util.Easing.easeOut);					
				anim.animate();			
			}
			imgPreloader.onload = function() {									
				//alert('debug point B: ' + imgPreloader.readyState + ' (' + src + ')');
				// Safari hack
				YAHOO.util.Dom.setStyle(img, 'left', '0%');
				YAHOO.util.Dom.setStyle(img, 'top', '0%');
				
				img.removeAttribute('style');
				
				img.width = setWidth;
				img.height = setHeight;			
				
				YAHOO.util.Dom.setStyle(img, 'opacity', 0.1);
				img.src = src;
				var anim = new YAHOO.util.Anim(id, { opacity: { to: 1 } }, this.loaderDuration, YAHOO.util.Easing.easeOut);					
				anim.animate();												
			}
		},		
		queueImage: function (id, src, setWidth, setHeight, priority)
		{
			var _queueImage = function(id, src, setWidth, setHeight) {
				this.id = id;		
				this.src = src;
				this.setWidth = setWidth;
				this.setHeight = setHeight;												
				this.priority = priority;												
			}
			
			var q = new _queueImage(id, src, setWidth, setHeight, priority);
			this.loaderImageQueue.push(q);
		},
		loadLoaderImageQueue: function ()
		{
			this.sortLoaderImageQueue();
			for (var i = 0; i < this.loaderImageQueue.length; i++) {
				this.load(this.loaderImageQueue[i].id, this.loaderImageQueue[i].src, this.loaderImageQueue[i].setWidth, this.loaderImageQueue[i].setHeight);
			}		
		},		
		sortLoaderImageQueue: function ()
		{
			var sortPriority = function (_queueImageA, _queueImageB)
			{				
				return _queueImageA.priority - _queueImageB.priority;
			}
			
			this.loaderImageQueue = this.loaderImageQueue.sort(sortPriority);				
		},		
		printLoaderImageQueue: function ()
		{
			for (var i = 0; i < this.loaderImageQueue.length; i++) {
				document.write(this.loaderImageQueue[i].id + "<BR>");
			}		
		}
 }	