//-----------------------------------------------------
// 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()
        {
                image_resizer.mode  = 'new';
                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;
}