//##############################################################################
//------------------------------------------------------------------------------
this.onImageLoad = function(img, item, success)
{   
    if(success)
    {
        var baseElement = document.getElementById('content');
        img.onmouseover = albumMouseOver;
        img.onmouseout = albumMouseOut;
        img.style.position = 'absolute';    
        img.style.visibility = 'hidden';
        
        img.onmousedown = dragStart;            
        
        if(item.linkURL)
        {
			var link = document.createElement('a');
			link.target = '_blank';
			link.href = item.linkURL;
			baseElement.appendChild(link);
			link.appendChild(img);
			item.lastClickTime = 0;
        }
        else
			baseElement.appendChild(img);       

        if(typeof(img.naturalWidth) == 'undefined')
        {
            img.naturalWidth = img.width;
            img.naturalHeight = img.height;
        }
        
        if(img.naturalWidth < 10 || img.naturalHeight < 10)
            tileFailedLoad(item);
        
        img.mdItem = item;
        
        if(img.src == item.bigURL)
            item.setBigTile(img, link);
        else 
            item.setTile(img, link);

        needsUpdate = true;
    }
    else if(img.src == item.url)
        tileFailedLoad(item);
    
    drawer.isLoadingImage = false;
}

//##############################################################################
//------------------------------------------------------------------------------
function Drawer()
{   
    this.isLoadingImage = false;
    this.focusItemIndex = -1;
    this.albumLoadingStatusChanged = false;
    this.albumInfoChanged = false;
}

//------------------------------------------------------------------------------
Drawer.prototype.update = function()
{
	var changed = false;
	
	var lastFocusItemIndex = this.focusItemIndex;                    
	this.focusItemIndex = -1;
	var topVolume = 0;

	var floor = 0.08;
	var ceil = 0.44;

	var windowSize = getWindowSize();
	var windowBox = new Rect(0, 0, windowSize.x, windowSize.y);
	var windowCenterX = windowSize.x / 2;
	var windowCenterY = windowSize.y / 2; 
	var windowArea = windowSize.x * windowSize.y;
	var floorArea = windowArea * floor;
	var maxWidth = windowSize.x * 1.6;
	var maxHeight = windowSize.y * 1.6;
	var minWidth = 3;
	var minHeight = 3;

	var zoom = viewport.zoomSpring.current;
	var panX = viewport.panX.current;
	var panY = viewport.panY.current;

	var itemToLoad = null;
	var loadBig = false;
	var item;
	var tile;
	var bigTile;
	var left;
	var top;
	var width;
	var height;
	var intersectionLeft;
	var intersectionTop;
	var intersectionRight;
	var intersectionBottom;
	var intersectionWidth;
	var intersectionHeight;
	var intersectionArea;
	var onScreen;
	var boxCenterX;
	var boxCenterY;
	var centerDist;
	var score;
	var percentage;
	var foundHoverItem = false;
	
	for(a = 0; a < doc.items.length; a++)
	{  
		item = doc.items[a];
		if(item.isLoaded())
		{
			// ___ Position    
			left = ((item.getLeft() - panX) * zoom) + windowCenterX;
			top = ((item.getTop() - panY) * zoom) + windowCenterY;
			width = item.sizeX * zoom;
			height = item.sizeY * zoom;
			
			// ___ Volume 
			if((item != controller.focusItem && (width > maxWidth || height > maxHeight)) 
					|| width < minWidth || height < minHeight)
				onScreen = false;
			else
			{
				intersectionLeft = Math.max(left, 0);
				intersectionTop = Math.max(top, 0);
				intersectionRight = Math.min(left + width, windowSize.x);
				intersectionBottom = Math.min(top + height, windowSize.y);
				intersectionWidth = intersectionRight - intersectionLeft;
				intersectionHeight = intersectionBottom - intersectionTop;
				if(intersectionWidth > 0 && intersectionHeight > 0)
					onScreen = true;
				else
					onScreen = false;
			}
				
			tile = item.tile;
			bigTile = item.bigTile;
			div = item.div;
					   
			if(tile) // ImageItem
			{
				if(onScreen)
				{                    	
					if(width > tile.naturalWidth)
					{
						if(bigTile)
						{
							tile.style.visibility = 'hidden';
							tile = bigTile;
						}
						else if(!itemToLoad && item.bigURL)
						{
							itemToLoad = item;
							loadBig = true;
						}
					}
					else if(bigTile)
						bigTile.style.visibility = 'hidden';
					
					if(item.highlight)
					{
						tile.style.border = '3px solid ' + tagHighlightColor;
		
						left -= 3;
						top -= 3;
					}
					else
						tile.style.border = '';
					
					tile.style.left = left + 'px';
					tile.style.top = top + 'px';
					tile.style.width = width + 'px';
					tile.style.height = height + 'px';                    
					
					// ___ opacity
					if(!isIE || item.entity)
						setOpacity(tile, item.opacity);

					tile.style.visibility = '';
				}
				else
				{
					tile.style.visibility = 'hidden';
					
					if(bigTile)
						bigTile.style.visibility = 'hidden';
				}
				
			}
			else if(div) // TextItem
			{
				if(onScreen)
				{
					div.style.left = left + 'px';
					div.style.top = top + 'px';
					div.style.width = width + 'px';
					div.style.height = height + 'px'; 
					div.style.fontSize = item.fontSize * zoom + 'px';                        

					if(!isIE)
						setOpacity(div, item.opacity);
					
					div.style.visibility = '';
				}
				else
				{
					div.style.visibility = 'hidden';
				}
			}
		}
		else if(!itemToLoad)
			itemToLoad = item;
	}
			 
	if(itemToLoad && !this.isLoadingImage)
	{
		this.isLoadingImage = true;
		if(loadBig)
			new ImageLoader(itemToLoad.bigURL, onImageLoad, itemToLoad);
		else
			new ImageLoader(itemToLoad.url, onImageLoad, itemToLoad);
	}
				
	return changed;
}

