//
// Copyright (c) 2007-2008 Stardock Systems, Inc.
// Author: Geroge Marsack, Andrew Powell, 10.30.07
// Version 1.0
//

Sd.ImageResizer = Class.create();
Sd.ImageResizer.prototype =
{
	initialize: function(id, img)
	{
		this.id = id;
		this.img = img;
		this.originalWidth = 0;
		this.originalHeight = 0;
		this.warning = null;
		this.warningTextNode = null;
		
		img.id = Sd.ImageResizer.ImageIdPrefix+id;		
	}, 
	
	restoreImage: function() 
	{
		newimg = document.createElement('IMG');
		newimg.src = this.img.src;
		this.img.width = newimg.width;
		this.img.height = newimg.height;
	},
	
	reclaimWarning: function()
	{
		warning = document.getElementById(Sd.ImageResizer.WarningIdPrefix+newid);
		
		this.warning = warning;
		this.warningTextNode = warning.firstChild.firstChild.childNodes[1].firstChild;
		this.warning.resize = this;
		
		this.scale();
	},
	
	createWarning: function()
	{
	   var warning = document.createElement('div');
	   warning.className = 'ImageResizer_Warning';
	   warning.id = Sd.ImageResizer.WarningIdPrefix + this.id;
	
	   var warningImgDiv = document.createElement('div');
	   warningImgDiv.className = 'ImageResizer_WarningImage';
	
	   var warningImg = document.createElement('img');
	   warningImg.src = '/images/alert.gif';
	
	   warningImgDiv.appendChild(warningImg);
	
	   var warningMessage = document.createElement('span');
	   warningMessage.className = 'ImageResizer_WarningMessage';
	     
	   var messageNode = document.createTextNode('');
	   
	   warningMessage.appendChild(messageNode);
	   
	   warning.appendChild(warningImgDiv);
	   warning.appendChild(warningMessage);
	         
	   this.img.parentNode.insertBefore(warning, this.img);
		
		this.warning = warning;
		this.warningTextNode = messageNode;         
	},
	
	scale: function()
	{
		this.img.height = this.originalHeight;
		this.img.width = this.originalWidth;
		
		if(Sd.ImageResizer.MAXWIDTH > 0 && this.img.width > Sd.ImageResizer.MAXWIDTH)
		{
			resized = true;
			this.img.height = (Sd.ImageResizer.MAXWIDTH / this.img.width) * this.img.height;
			this.img.width = Sd.ImageResizer.MAXWIDTH;
		}
		
		if(Sd.ImageResizer.MAXHEIGHT > 0 && this.img.height > Sd.ImageResizer.MAXHEIGHT)
		{
			resized = true;
			this.img.width = (Sd.ImageResizer.MAXHEIGHT / this.img.height) * this.img.width;
			this.img.height = Sd.ImageResizer.MAXHEIGHT;
		}
		
		var resizer = this;
		this.warning.style.width = this.img.width + 'px';
		this.warning.onclick = function() { return Sd.ImageResizer.viewFull(resizer); }
		
	   var message = 'This image has been resized. Click this bar to view the full image. The original image is sized ' + this.originalWidth + 'x' + this.originalHeight;
	   if(this.img.fileSize && this.img.fileSize > 0)
	      message += ' and weighs ' + parseInt(this.img.fileSize/1024) + 'k.';
	   else
	      message += '.';	
		
		this.warningTextNode.data = message;
		
		return false;
	}	
}

Sd.ImageResizer.ImageIdPrefix = 'ImageResize_Image_';
Sd.ImageResizer.WarningIdPrefix = 'ImageResize_Warning_';
Sd.ImageResizer.MAXWIDTH = 600;
Sd.ImageResizer.MAXHEIGHT = 440;

Sd.ImageResizer.getNextId = function() 
{
	id = 1;
	while(document.getElementById(Sd.ImageResizer.ImageIdPrefix+id) != null)
		id++;

	return id;
}

Sd.ImageResizer.createOn = function(img) 
{

	if(!img.tries || typeof img.tries == 'undefined')
		img.tries = 1;
	else
      img.tries++;
	
	if((img.width == 0 || img.height == 0) && img.tries < 4) 
	{
		setTimeout(function() { Sd.ImageResizer.createOn(img); }, 500);
		return;
	}

	isRecovery = false; 
	if(img.id && img.id.indexOf(Sd.ImageResizer.ImageIdPrefix) == 0 && document.getElementById(Sd.ImageResizer.WarningIdPrefix+img.id.substr(Sd.ImageResizer.ImageIdPrefix.length)) != null) 
	{
		newid = img.id.substr(Sd.ImageResizer.ImageIdPrefix.length);
		resizer = new Sd.ImageResizer(newid, img);
		isRecovery = true;
		resizer.restoreImage();
	} else 
	{
		newid = Sd.ImageResizer.getNextId();
		resizer = new Sd.ImageResizer(id, img);
	}
	
	if (resizer.originalWidth == 0) resizer.originalWidth = img.width;
	if (resizer.originalHeight == 0) resizer.originalHeight = img.height;
	
	if((Sd.ImageResizer.MAXWIDTH > 0 && resizer.originalWidth > Sd.ImageResizer.MAXWIDTH) || (Sd.ImageResizer.MAXHEIGHT > 0 && resizer.originalHeight > Sd.ImageResizer.MAXHEIGHT))
	{
		if(isRecovery)
			resizer.reclaimWarning(warning);
		else 
			resizer.createWarning();
		
		resizer.scale();
	}
}

Sd.ImageResizer.viewFull = function(resizer)
{
	window.open(resizer.img.src, '_blank');
	return false;
}