Code:
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;
this.originalWidth = img.originalWidth;
this.originalHeight = img.originalHeight;
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
}
if(!img.originalWidth) {
img.originalWidth = img.width
}
if(!img.originalHeight) {
img.originalHeight = img.height
}
if(NcodeImageResizer.MAXWIDTH > 0 && img.originalWidth > NcodeImageResizer.MAXWIDTH || NcodeImageResizer.MAXHEIGHT > 0 && img.originalHeight > NcodeImageResizer.MAXHEIGHT) {
var isRecovery = false;
var newid, resizer;
if(img.id && img.id.indexOf(NcodeImageResizer.IMAGE_ID_BASE) == 0) {
newid = img.id.substr(NcodeImageResizer.IMAGE_ID_BASE.length);
if(document.getElementById(NcodeImageResizer.WARNING_ID_BASE + newid) != null) {
resizer = new NcodeImageResizer(newid, img);
isRecovery = true;
resizer.restoreImage()
}
}else {
newid = NcodeImageResizer.getNextId();
resizer = new NcodeImageResizer(newid, img)
}
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 = NcodeImageResizer.BBURL + "/images/statusicon/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;
if(NcodeImageResizer.MAXWIDTH > 0 && this.img.width > NcodeImageResizer.MAXWIDTH) {
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) {
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(vbphrase["ncode_imageresizer_warning_small"])
}else {
if(this.img.fileSize && this.img.fileSize > 0) {
this.setText(vbphrase["ncode_imageresizer_warning_filesize"].replace("%1$s", this.originalWidth).replace("%2$s", this.originalHeight).replace("%3$s", Math.round(this.img.fileSize / 1024)))
}else {
this.setText(vbphrase["ncode_imageresizer_warning_no_filesize"].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 = "ncode_imageresizer_original";
if(this.warning != null) {
this.setText(vbphrase["ncode_imageresizer_warning_fullsize"]);
this.warning.width = this.img.width;
this.warning.onclick = function() {
return this.resize.scale()
}
}
break
}
return false
};
NcodeImageResizer.createOnSigs = 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
}
if(!img.originalWidth) {
img.originalWidth = img.width
}
if(!img.originalHeight) {
img.originalHeight = img.height
}
if(NcodeImageResizer.MAXWIDTHSIGS > 0 && img.originalWidth > NcodeImageResizer.MAXWIDTHSIGS || NcodeImageResizer.MAXHEIGHTSIGS > 0 && img.originalHeight > NcodeImageResizer.MAXHEIGHTSIGS) {
var isRecovery = false;
var newid, resizer;
if(img.id && img.id.indexOf(NcodeImageResizer.IMAGE_ID_BASE) == 0) {
newid = img.id.substr(NcodeImageResizer.IMAGE_ID_BASE.length);
if(document.getElementById(NcodeImageResizer.WARNING_ID_BASE + newid) != null) {
resizer = new NcodeImageResizer(newid, img);
isRecovery = true;
resizer.restoreImage()
}
}else {
newid = NcodeImageResizer.getNextId();
resizer = new NcodeImageResizer(newid, img)
}
if(isRecovery) {
resizer.reclaimWarning(newid)
}else {
resizer.createWarning()
}
resizer.scalesigs()
}
};
NcodeImageResizer.prototype.scalesigs = function() {
this.img.height = this.originalHeight;
this.img.width = this.originalWidth;
if(NcodeImageResizer.MAXWIDTHSIGS > 0 && this.img.width > NcodeImageResizer.MAXWIDTHSIGS) {
this.img.height = NcodeImageResizer.MAXWIDTHSIGS / this.img.width * this.img.height;
this.img.width = NcodeImageResizer.MAXWIDTHSIGS
}
if(NcodeImageResizer.MAXHEIGHTSIGS > 0 && this.img.height > NcodeImageResizer.MAXHEIGHTSIGS) {
this.img.width = NcodeImageResizer.MAXHEIGHTSIGS / this.img.height * this.img.width;
this.img.height = NcodeImageResizer.MAXHEIGHTSIGS
}
this.warning.width = this.img.width;
this.warning.onclick = function() {
return this.resize.unScalesigs()
};
if(this.img.width < 450) {
this.setText(vbphrase["ncode_imageresizer_warning_small"])
}else {
if(this.img.fileSize && this.img.fileSize > 0) {
this.setText(vbphrase["ncode_imageresizer_warning_filesize"].replace("%1$s", this.originalWidth).replace("%2$s", this.originalHeight).replace("%3$s", Math.round(this.img.fileSize / 1024)))
}else {
this.setText(vbphrase["ncode_imageresizer_warning_no_filesize"].replace("%1$s", this.originalWidth).replace("%2$s", this.originalHeight))
}
}
return false
};
NcodeImageResizer.prototype.unScalesigs = 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 = "ncode_imageresizer_original";
if(this.warning != null) {
this.setText(vbphrase["ncode_imageresizer_warning_fullsize"]);
this.warning.width = this.img.width;
this.warning.onclick = function() {
return this.resize.scalesigs()
}
}
break
}
return false
};
NcodeImageResizer.createOnSigsExclud = function() {
};