/*
 outputResizeImages();
 
 This function will auto-resize a image to een specific height or width if it surpass a specific
 width or height.
 
 the function will resize a image with the certain identified classes.
 
*/

function outputResizeImages()
{
	var ArrayClasses = new Array();
	
	/// first class with a max width that fit the width and height of .
	
	ArrayClasses[0] = new Array();
	ArrayClasses[0]["name"] = "resizeParent";
	ArrayClasses[0]["width"] = 0;
	ArrayClasses[0]["height"] = 0;
 	ArrayClasses[0]["addLink"] = 0;
	
	ArrayClasses[1] = new Array();
	ArrayClasses[1]["name"] = "resize100";
	ArrayClasses[1]["width"] = 100;
	ArrayClasses[1]["height"] = 100;
  	ArrayClasses[1]["addLink"] = 0;

	ArrayClasses[2] = new Array();
	ArrayClasses[2]["name"] = "resize120";
	ArrayClasses[2]["width"] = 120;
	ArrayClasses[2]["height"] = 120;
 	ArrayClasses[2]["addLink"] = 0;

	ArrayClasses[3] = new Array();
	ArrayClasses[3]["name"] = "resize400";
	ArrayClasses[3]["width"] = 400;
	ArrayClasses[3]["height"] = 200;
 	ArrayClasses[3]["addLink"] = 1;
	
	ArrayClasses[4] = new Array();
	ArrayClasses[4]["name"] = "resize662";
	ArrayClasses[4]["width"] = 662;
	ArrayClasses[4]["height"] = 662;
 	ArrayClasses[4]["addLink"] = 1;

	ArrayClasses[5] = new Array();
	ArrayClasses[5]["name"] = "resize750";
	ArrayClasses[5]["width"] = 750;
	ArrayClasses[5]["height"] = 750;
 	ArrayClasses[5]["addLink"] = 1;

	ArrayClasses[6] = new Array();
	ArrayClasses[6]["name"] = "resize870";
	ArrayClasses[6]["width"] = 870;
	ArrayClasses[6]["height"] = 870;
 	ArrayClasses[6]["addLink"] = 1;

	ArrayClasses[7] = new Array();
	ArrayClasses[7]["name"] = "resize240";
	ArrayClasses[7]["width"] = 250;
	ArrayClasses[7]["height"] = 600;
 	ArrayClasses[7]["addLink"] = 0;

	ArrayClasses[8] = new Array();
	ArrayClasses[8]["name"] = "resize70";
	ArrayClasses[8]["width"] = 70;
	ArrayClasses[8]["height"] = 70;
 	ArrayClasses[8]["addLink"] = 0;

	ArrayClasses[9] = new Array();
	ArrayClasses[9]["name"] = "resize405";
	ArrayClasses[9]["width"] = 405;
	ArrayClasses[9]["height"] = 405;
 	ArrayClasses[9]["addLink"] = 1;

	ArrayClasses[10] = new Array();
	ArrayClasses[10]["name"] = "resize618";
	ArrayClasses[10]["width"] = 618;
	ArrayClasses[10]["height"] = 618;
 	ArrayClasses[10]["addLink"] = 1;

	ArrayClasses[11] = new Array();
	ArrayClasses[11]["name"] = "resize548";
	ArrayClasses[11]["width"] = 578;
	ArrayClasses[11]["height"] = 578;
 	ArrayClasses[11]["addLink"] = 1;

	ArrayClasses[12] = new Array();
	ArrayClasses[12]["name"] = "resize270";
	ArrayClasses[12]["width"] = 270;
	ArrayClasses[12]["height"] = 270;
 	ArrayClasses[12]["addLink"] = 0;

	ArrayClasses[13] = new Array();
	ArrayClasses[13]["name"] = "resizeBoxshot";
	ArrayClasses[13]["width"] = 250;
	ArrayClasses[13]["height"] = 500;
 	ArrayClasses[13]["addLink"] = 1;
 	
 	ArrayClasses[14] = new Array();
	ArrayClasses[14]["name"] = "resize40";
	ArrayClasses[14]["width"] = 40;
	ArrayClasses[14]["height"] = 40;
 	ArrayClasses[14]["addLink"] = 0;
 	
	// select all img tags and loop through them //
	var divObject = document.getElementsByTagName('img');
	
	for (var i=0; i< divObject.length; i++)
	{			
		// walkthrough predefined classes//
		for(var t=0; t< ArrayClasses.length; t++)
		{	
				if (divObject[i].className == ArrayClasses[t]["name"])
				{
					if(ArrayClasses[t]["name"] == "resizeParent")
					{
								resizeToParent(divObject[i]);
					}
					else
					{
								resizeImage(divObject[i],ArrayClasses[t]["width"],ArrayClasses[t]["height"],ArrayClasses[t]["addLink"]);
					}	
					
					divObject[i].style.display = "inline";
				}
		}
			
			t = 0;
	}
}

function resizeToParent(imgObject)
{
	var parentElement = imgObject.parentNode;
	var goodParent = new Array();
	goodParent[1] = "li";
	goodParent[2] = "div";
	goodParent[3] = "td";
	goodParent[4] = "table";
	goodParent[5] = "body";
	var foundGoodParent = false;
	
	
	while(foundGoodParent == false)
	{
		// walkthrough good parents//
		e=0;
		for(var e=0; e< goodParent.length; e++)
		{
			if(goodParent[e] == parentElement.tagName.toLowerCase())
			{
				if(goodParent[e].offsetWidth == 0 && goodParent[e].offsetHeight == 0)
				{}
				else
				{
					foundGoodParent = true;
				}	
			}
		}	
		
		if(foundGoodParent == true)
		{
			break;
		}
		else
		{
			parentElement = parentElement.parentNode;
		}	
	}		
	
	var maxWidth = parentElement.offsetWidth - 2;
	var maxHeight = parentElement.offsetHeight - 2;
	
	resizeImage(imgObject,maxWidth,maxHeight);
}	


function resizeImage(imgObject,maxWidth,maxHeight,addLink)
{
	// if the size is allready specified in the xhtml, we use it. Otherwise we fetch //
	// them selves from the image property //
	
	
	if(maxWidth <= 1)
	{
		maxWidth = 1000000;
	}	
	
	if(maxHeight <= 5)
	{
		maxHeight = 1000000;
	}	
	
	
	heightImage = false;
	widthImage = false;
	
	if(!imgObject.getAttribute('height'))	
	{}
	else
	{
		heightImage = imgObject.getAttribute('height');
	}
	
	if(!imgObject.getAttribute('width'))	
	{}
	else
	{
		widthImage = imgObject.getAttribute('width');
	}
	
	/// if one of the image size is not specified in the xhtml, starting with fetching
	/// de image object to find the dimensions //
	
	if(heightImage == false | widthImage == false)
	{
		//// create a new image object, if this done loading the following function
		//// will be executed.
		
		newImage = new Image();
		newImage.onload = function()
		{	
			/// this is bug fix for opera browsers, they tend to not correctly read the
			/// width or height of the new loaded image object with a 'onload' execution
			/// By creating a new dom object element and transfering the image
			/// object into it, will trigger opera to determine the correct width and height.
			
			domNewImage = document.createElement("img");
			domNewImage.src = imgObject.src;
			manipulateLoadedImage(imgObject,domNewImage,maxWidth,maxHeight,heightImage,widthImage,addLink);
			
			/// eleminate the objects, this will free up memory.
			newImage = null;
			domNewImage = null;
		}		
		
		newImage.src = imgObject.src;		
	}
	else
	{
		resizeAndPlaceImage(imgObject,maxWidth,maxHeight,heightImage,widthImage,addLink);
	}
}

function manipulateLoadedImage(imgObject,newImage,maxWidth,maxHeight,heightImage,widthImage,addLink)
{
	if(heightImage == false & widthImage == false)
	{
		heightImage = newImage.height;
		widthImage = newImage.width;
	}
	else
	{
		multiplierWidth = newImage.height / newImage.width;
		multiplierHeight = newImage.width / newImage.height;
		
		if(heightImage == false)
		{				
			heightImage = widthImage * multiplierWidth;
		}	
		else
		{
			widthImage = heightImage * multiplierHeight;
		}
	}
	
	newImage = null;
	resizeAndPlaceImage(imgObject,maxWidth,maxHeight,heightImage,widthImage,addLink);
}

function resizeAndPlaceImage(imgObject,maxWidth,maxHeight,heightImage,widthImage,addLink)
{
	multiplierWidth = heightImage / widthImage;
	multiplierHeight = widthImage / heightImage;
	
	if(heightImage > maxHeight)
	{
		heightImage = maxHeight;
		widthImage = heightImage * multiplierHeight;
	}	
	
	if(widthImage > maxWidth)
	{
		widthImage = maxWidth;
		heightImage = widthImage * multiplierWidth;
	}	

	imgObject.height = heightImage;
	imgObject.width = widthImage;

    if(addLink == 1)
    {
        var imgParentTag = imgObject.parentNode.tagName;

        if(imgParentTag != "a")
        {
	        var imgLink = "window.open('" + imgObject.src + "')";
	        imgObject.style.cursor = "pointer";
	        imgObject.setAttribute('onclick', imgLink);
        }

    }
}
