// nCode Image Resizer for vBulletin 3.6.0
// http://www.ncode.nl/vbulletinplugins/
// Version: 1.0 release candidate 4
//
// (c) 2007 nCode


NcodeImageResizer.IMAGE_ID_BASE = 'ncode_imageresizer_container_';
NcodeImageResizer.WARNING_ID_BASE = 'ncode_imageresizer_warning_';
NcodeImageResizer.scheduledResizes = [];

function NcodeImageResizer(id, img) {
    this.id = id;
    this.img = img;
    this.originalWidth = 0;
    this.originalHeight = 0;
    this.warning = null;
    this.warningTextNode = null;
    
    img.id = NcodeImageResizer.IMAGE_ID_BASE+id;
}

NcodeImageResizer.executeOnload = function() {
    var rss = NcodeImageResizer.scheduledResizes;
    for(var i = 0; i  < rss.length; i++) {
        NcodeImageResizer.createOn(rss[i], true);
    }
}

NcodeImageResizer.schedule = function(img) {
    if(NcodeImageResizer.scheduledResizes.length == 0) {
        if(window.addEventListener) {
            window.addEventListener('load', NcodeImageResizer.executeOnload, 
false);
        } else if(window.attachEvent) {
            window.attachEvent('onload', NcodeImageResizer.executeOnload);
        }
    }
    NcodeImageResizer.scheduledResizes.push(img);
}

NcodeImageResizer.getNextId = function() {
    var id = 1;
    while(document.getElementById(NcodeImageResizer.IMAGE_ID_BASE+id) != null) {
        id++;
    }
    return id;
}

NcodeImageResizer.createOnId = function(id) {
    return NcodeImageResizer.createOn(document.getElementById(id));
}

NcodeImageResizer.createOn = function(img, isSchedule) {
    if(typeof isSchedule == 'undefined') isSchedule = false;
    
    if(!img || !img.tagName || img.tagName.toLowerCase() != 'img') {
        alert(img+' is not an image ('+img.tagName.toLowerCase()+')');
    }
    if(img.width == 0 || img.height == 0) {
        if(!isSchedule)
            NcodeImageResizer.schedule(img);
        return;
    }
    
    var isRecovery = false; // if this is a recovery from QuickEdit, which only restores the HTML, not the OO structure
    var newid, resizer;
    if(img.id && img.id.indexOf(NcodeImageResizer.IMAGE_ID_BASE) == 0 && 
document.getElementById(NcodeImageResizer.WARNING_ID_BASE+img.id.substr(NcodeImageResizer.IMAGE_ID_BASE.length)) 
!= null) {
        newid = img.id.substr(NcodeImageResizer.IMAGE_ID_BASE.length);
        resizer = new NcodeImageResizer(newid, img);
        isRecovery = true;
        resizer.restoreImage();
    } else {
        newid = NcodeImageResizer.getNextId();
        resizer = new NcodeImageResizer(newid, img);
    }
    
    if (resizer.originalWidth == 0) resizer.originalWidth = img.width;
    if (resizer.originalHeight == 0) resizer.originalHeight = img.height;
    
    if((NcodeImageResizer.MAXWIDTH > 0 && resizer.originalWidth > 
NcodeImageResizer.MAXWIDTH) || (NcodeImageResizer.MAXHEIGHT > 0 && 
resizer.originalHeight > NcodeImageResizer.MAXHEIGHT)) {
        if(isRecovery) {
            resizer.reclaimWarning(newid);
        } else {
            resizer.createWarning();
        }
        resizer.scale();
    }
}

NcodeImageResizer.prototype.restoreImage = function() {
    newimg = document.createElement('IMG');
    newimg.src = this.img.src;
    this.img.width = newimg.width;
    this.img.height = newimg.height;
}

NcodeImageResizer.prototype.reclaimWarning = function(id) {
    this.warning = document.getElementById(NcodeImageResizer.WARNING_ID_BASE+id);
    this.warningTextNode = this.warning.firstChild.firstChild.childNodes[1].firstChild;
    this.warning.resize = this;
    
    this.scale();
}

NcodeImageResizer.prototype.createWarning = function() {
    var mtable = document.createElement('TABLE');
    var mtbody = document.createElement('TBODY');
    var mtr = document.createElement('TR');
    var mtd1 = document.createElement('TD');
    var mtd2 = document.createElement('TD');
    var mimg = document.createElement('IMG');
    var mtext = document.createTextNode('');
    
    mimg.src = '/images/wol_error.gif';
    mimg.width = 16;
    mimg.height = 16;
    mimg.alt = '';
    mimg.border = 0;
    
    mtd1.width = 20;
    mtd1.className = 'td1';
    
    mtd2.unselectable = 'on';
    mtd2.className = 'td2';
    
    mtable.className = 'ncode_imageresizer_warning';
    mtable.textNode = mtext;
    mtable.resize = this;
    mtable.id = NcodeImageResizer.WARNING_ID_BASE+this.id;
    
    mtd1.appendChild(mimg);
    mtd2.appendChild(mtext);
    
    mtr.appendChild(mtd1);
    mtr.appendChild(mtd2);
    
    mtbody.appendChild(mtr);
    
    mtable.appendChild(mtbody);
    
    this.img.parentNode.insertBefore(mtable, this.img);
    
    this.warning = mtable;
    this.warningTextNode = mtext;
}

NcodeImageResizer.prototype.setText = function(text) {
    var newnode = document.createTextNode(text);
    this.warningTextNode.parentNode.replaceChild(newnode, this.warningTextNode);
    this.warningTextNode = newnode;
}

NcodeImageResizer.prototype.scale = function() {
    this.img.height = this.originalHeight;
    this.img.width = this.originalWidth;
    var resized = false;
    if(NcodeImageResizer.MAXWIDTH > 0 && this.img.width > NcodeImageResizer.MAXWIDTH) 
{
        resized = true;
        this.img.height = (NcodeImageResizer.MAXWIDTH / this.img.width) * this.img.height;
        this.img.width = NcodeImageResizer.MAXWIDTH;
    }
    
    if(NcodeImageResizer.MAXHEIGHT > 0 && this.img.height > NcodeImageResizer.MAXHEIGHT) 
{
        resized = true;
        this.img.width = (NcodeImageResizer.MAXHEIGHT / this.img.height) * this.img.width;
        this.img.height = NcodeImageResizer.MAXHEIGHT;
    }
    
    this.warning.width = this.img.width;
    this.warning.onclick = function() { return this.resize.unScale(); }
    
    if(this.img.width < 450) {
        this.setText('To view fullsize image, click this bar.');
    } else if(this.img.fileSize && this.img.fileSize > 0) {
        this.setText('To view compressed image, click this bar.'.replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight).replace('%3$s', Math.round(this.img.fileSize/1024)));
    } else {
        this.setText('To view compressed image, click this bar.'.replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight));
    }
    
    return false;
}

NcodeImageResizer.prototype.unScale = function() {
    switch(NcodeImageResizer.MODE) {
        case 'samewindow':
            window.open(this.img.src, '_self');
            break;
        case 'newwindow':
            window.open(this.img.src, '_blank');
            break;
        case 'enlarge':
        default:
            this.img.width = this.originalWidth;
            this.img.height = this.originalHeight;
            this.img.className = 'To view fullsize image, click this bar.';
            if(this.warning != null) {
                this.setText('To view compressed image, click this bar.');
                this.warning.width = this.img.width;
                this.warning.onclick = function() { return this.resize.scale() 
};
            }
            break;
    }
    
    return false;
}

