//-----------------------------------------------------
// D21-Automatic Image Resizing - Javascript Library
//-----------------------------------------------------
// Written By:  Dean
// Website:     http://www.dscripting.com
// Email:       deaner225@gmail.com
//-----------------------------------------------------
// Copyright 2006 - Dean (D-Scripting)
//-----------------------------------------------------

image_resizer._mode    = null;
image_resizer.cancel   = false;
image_resizer.text     = new Array();
image_resizer.img_pre  = 'imageresizer_container_';
image_resizer.warn_pre = 'imageresizer_warning_';

function image_resizer(id, img)
{
	this.id           = id;
	this.img          = img;
	this.orig_width   = 0;
	this.orig_height  = 0;
	this.warning      = null;
	this.warning_text = null;

	img.id = image_resizer.img_pre+id;
}

image_resizer._add_text = function(k, v)
{
	image_resizer.text[k] = v;
}

image_resizer._parse_error_img = function()
{
	var re = /^<img(.*)src=['"](.+?)["'](.*)>$/gi;
	var ei = image_resizer.error_img;
	ei     = ei.replace(re, "$2");

	image_resizer.error_img = ei;
}

image_resizer._next_id = function()
{
	var id = 1;
	while (document.getElementById(image_resizer.img_pre+id) != null)
	{
		id++;
	}

	return id;
}

image_resizer.cancel_bubble = function(o, e)
{
	if (!o || document.all)
	{
		if (e)
		{
			window.event.returnValue = false;
		}

		window.event.cancelBubble = true;
		return window.event;
	}
	else
	{
		o.stopPropagation();
		if (e)
		{
			o.preventDefault();
		}

		return o;
	}
}

image_resizer._create = function(img)
{
	if (!image_resizer.enable)
	{
		return false;
	}

	recovery = false;
	if (img.id && img.id.indexOf(image_resizer.img_pre) == 0 && document.getElementById(image_resizer.warn_pre+img.id.substr(image_resizer.img_pre.length)) != null)
	{
		newid    = img.id.substr(image_resizer.img_pre.length);
		resizer  = new image_resizer(newid, img);
		recovery = true;
		resizer._restore();
	}
	else
	{
		newid   = image_resizer._next_id();
		resizer = new image_resizer(newid, img);
	}

	if (resizer.orig_width == 0)
	{
		resizer.orig_width = img.width;
	}

	if (resizer.orig_height == 0)
	{
		resizer.orig_height = img.height;
	}

	if ((image_resizer.max_width > 0 && resizer.orig_width > image_resizer.max_width) || (image_resizer.max_height > 0 && resizer.orig_height > image_resizer.max_height))
	{
		if (recovery)
		{
			resizer._warning_reclaim();
		}
		else
		{
			resizer._warning_create();
		}

		resizer.scale();
	}
}

image_resizer.prototype._restore = function()
{
	newimg          = document.createElement('IMG');
	newimg.src      = this.img.src;
	this.img.width  = newimg.width;
	this.img.height = newimg.height;
}

image_resizer.prototype._warning_reclaim = function()
{
	warning = document.getElementById(image_resizer.warn_pre+newid);
	
	this.warning        = warning;
	this.warning_text   = warning.firstChild.firstChild.childNodes[1].firstChild;
	this.warning.resize = this;

	this.scale();
}

image_resizer.prototype._warning_create = function()
{
	var tbl = document.createElement('TABLE');
	var bdy = document.createElement('TBODY');
	var tr  = document.createElement('TR');
	var td1 = document.createElement('TD');
	var td2 = document.createElement('TD');
	var img = document.createElement('IMG');
	var txt = document.createTextNode('');

	img.src    = image_resizer.error_img;
	//img.width  = ti.width;
	//img.height = ti.height;
	img.alt    = '';
	img.border = 0;
	img.onclick = function()
	{
		var o = this.parentNode.parentNode.parentNode.parentNode;
		image_resizer._mode = image_resizer.mode;
		image_resizer.mode  = 'new';
		o.resize.unscale();

		image_resizer.cancel = true;
		setTimeout("image_resizer.mode=image_resizer._mode;image_resizer._mode=null;image_resizer.cancel=false", 10);

		return false;
	}

	td1.width     = 20;
	td1.className = 'td1';

	td2.unselectable = 'on';
	td2.className    = 'td2';

	tbl.className = 'imageresizer_warning';
	tbl.text      = txt;
	tbl.resize    = this;
	tbl.id        = image_resizer.warn_pre+this.id;

	td1.appendChild(img);
	td2.appendChild(txt);

	tr.appendChild(td1);
	tr.appendChild(td2);

	bdy.appendChild(tr);
	tbl.appendChild(bdy);

	this.img.parentNode.insertBefore(tbl, this.img);

	this.warning      = tbl;
	this.warning_text = txt;
}

image_resizer.prototype.scale = function()
{
	if (image_resizer.cancel)
	{
		return;
	}

	if (image_resizer.max_width > 0 && this.orig_width > image_resizer.max_width)
	{
		resized         = true;
		this.img.width  = image_resizer.max_width;
		this.img.height = (image_resizer.max_width / this.orig_width) * this.orig_height;
	}

	if (image_resizer.max_height > 0 && this.orig_height > image_resizer.max_height)
	{
		resized         = true;
		this.img.height = image_resizer.max_height;
		this.img.width  = (image_resizer.max_height / this.orig_height) * this.orig_width;
	}

	this.warning.width   = this.img.width;
	this.warning.onclick = function()
	{
		this.resize.unscale();
	}

	if (this.img.width < 450)
	{
		this.warning_text.data = image_resizer.text['small'];
	}
	else if (this.img.fileSize && this.img.fileSize > 0)
	{
		this.warning_text.data = image_resizer.text['filesize'].replace('%1', this.orig_width).replace('%2', this.orig_height).replace('%3', Math.round(this.img.fileSize/1024));
	}
	else
	{
		this.warning_text.data = image_resizer.text['nofilesize'].replace('%1', this.orig_width).replace('%2', this.orig_height);
	}

	return false;
}

image_resizer.prototype.unscale = function()
{
	if (image_resizer.cancel)
	{
		return;
	}

	switch (image_resizer.mode)
	{
		case 'same':
			window.open(this.img.src, '_self');
			break;
		case 'new':
			window.open(this.img.src, '_blank');
			break;
		default:
			this.img.width     = this.orig_width;
			this.img.height    = this.orig_height;
			this.img.className = 'imageresizer_original';

			if (this.warning != null)
			{
				this.warning_text.data = image_resizer.text['fullsize'];
				this.warning.width     = this.img.width;
				this.warning.onclick   = function()
				{
					this.resize.scale();
				}
			}
			break;
	}
	
	return false;
}
