text: NcodeImageResizer.IMAGE_ID_BASE = 'ncode_imageresizer_container_';
  NcodeImageResizer.WARNING_ID_BASE = 'ncode_imageresizer_warning_';
  
  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.getNextId = function() {
  	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) {
  
  	if(!img.tries || typeof img.tries == 'undefined') {
  		img.tries = 1;
  	} else {
  		img.tries++;
  	}
  	
  	if((img.width == 0 || img.height == 0) && img.tries < 4) {
  		var ran = Math.floor(Math.random()*100000);
  		img.id = ran;
  		setTimeout('NcodeImageResizer.createOnId("'+ran+'");', 500);
  		return;
  	}
  	
  	isRecovery = false; // if this is a recovery from QuickEdit, which only restores the HTML, not the OO structure
  	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(id, 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(warning);
  		} 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() {
  	warning = document.getElementById(NcodeImageResizer.WARNING_ID_BASE+newid);
  	
  	this.warning = warning;
  	this.warningTextNode = warning.firstChild.firstChild.childNodes[1].firstChild;
  	this.warning.resize = this;
  	alert (this.warning)
  	this.scale();
  }
  
  NcodeImageResizer.prototype.createWarning = function() {
  	mtable = document.createElement('TABLE');
  	mtbody = document.createElement('TBODY');
  	mtr = document.createElement('TR');
  	mtd1 = document.createElement('TD');
  	mtd2 = document.createElement('TD');
  	mimg = document.createElement('IMG');
  	mtext = document.createTextNode('');
  	
  	mimg.src = NcodeImageResizer.IMAGE;
  	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.scale = function() {
  	this.img.height = this.originalHeight;
  	this.img.width = this.originalWidth;
  	
  	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.warningTextNode.data = NcodeImageResizer.warningTextNode_1;
  	//	this.warningTextNode.data = 'Click this bar to view the full image.';
  	
  	} else if(this.img.fileSize && this.img.fileSize > 0) {
  		this.warningTextNode.data = NcodeImageResizer.warningTextNode_2+' %1$sx%2$s, size %3$sKB'.replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight).replace('%3$s', Math.round(this.img.fileSize/1024));
  	//	this.warningTextNode.data = 'This is smaller than original. Click this bar to view the full image. The original is %1$sx%2$s, size %3$sKB'.replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight).replace('%3$s', Math.round(this.img.fileSize/1024));
  		//mtext.data = '<phrase 1="'+this.originalWidth+'" 2="'+this.originalHeight+'" 3="'+Math.round(this.img.fileSize/1024)+'">$vbphrase[ncode_imageresizer_warning_filesize]</phrase>';
  	} else {
  		this.warningTextNode.data = NcodeImageResizer.warningTextNode_2+' %1$sx%2$s.'.replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight);
  	//	this.warningTextNode.data = 'This is smaller than original. Click this bar to view the full image. The original is %1$sx%2$s.'.replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight);
  		//mtext.data = '<phrase 1="'+this.originalWidth+'" 2="'+this.originalHeight+'">$vbphrase[ncode_imageresizer_warning_no_filesize]</phrase>';
  	}
  	
  	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, 'mydhd');
  			break;
  		default:
  			this.img.width = this.originalWidth;
  			this.img.height = this.originalHeight;
  			this.img.className = 'ncode_imageresizer_original';
  			if(this.warning != null) {
  				this.warningTextNode.data = vbphrase['ncode_imageresizer_warning_fullsize'];
  				this.warning.width = this.img.width;
  				this.warning.onclick = function() { return this.resize.scale() };
  			}
  			break;
  	}
  	
  	return false;
  }