
var ImageScaler = new Object();
ImageScaler.VERSION = "1.2"
ImageScaler.m_nTimeout = 750;
ImageScaler.LOG_ENABLED = true;

/**
 * Skaliert alle Bilder mit dem geg. Namen so, 
 * dass Sie in ein Quadrat mit der geg. Kantenlänge passen würden.
 * @param {String} strImgName Der Wert des "name" Attributs der zu skalierenden Bilder
 * @param {Number} nSquareLength Die Kantenlänge des Quadrats in das das Bild skaliert werden soll
 */
ImageScaler.startResizeImagesInterval = function(strImgName, nSquareLength, nTimeout) {
	//Sicherheitshalber ein bestehendes Interval löschen
	ImageScaler.clearResizeImagesInterval(strImgName, nSquareLength);
	
	if (typeof(nTimeout)!='number') {
		nTimeout = ImageScaler.m_nTimeout;
	}
	
	//Neues Interval setzen
	ImageScaler[strImgName + '_' + nSquareLength] = window.setInterval("ImageScaler.resizeAvailableImages('"+strImgName+"', "+nSquareLength+")", nTimeout);
	//alert("resize started (ref: " + ImageScaler[strImgName + '_' + nSquareLength] + ")");
}

ImageScaler.clearResizeImagesInterval = function (strImgName, nSquareLength) {
	if (ImageScaler[strImgName + '_' + nSquareLength] != undefined) {
		window.clearInterval(ImageScaler[strImgName + '_' + nSquareLength]);
		ImageScaler[strImgName + '_' + nSquareLength] = undefined;
	}
}

/**
 * Gibt eine Log Meldung aus
 * @param {Object} msg Die Nachricht.
 */
ImageScaler.LOG = function(msg) {
	if (ImageScaler.LOG_ENABLED === true) {
		if (typeof(msg) == 'undefined') {
			msg = 'undefined';
		}
		else {
			if (typeof(msg.toString) == 'function') {
				msg = msg.toString();
			}
			else {
				msg = msg + '';
			}
		}
		msg = '[ImageScaler] ' + msg;
		if (typeof(bb) != 'undefined') {
			if (typeof(bb.command) != 'undefined') {
				if (typeof(bb.command.trace) == 'function') {
					bb.command.trace(null, msg);
				}
			}
		}
		if (typeof(console) != 'undefined') {
			if (typeof(console.log) == 'function') {
				console.log(msg);
			}
		}
	}
}

ImageScaler.resizeAvailableImages = function(strImgName, nSquareLength) {
	//Alle Images holen
    var imgs = document.getElementsByTagName('img');
	ImageScaler.LOG("resizeAvailableImages("+strImgName+", "+nSquareLength+")");
    var handledImages = 0;
    var requiredImages = 0;
    if (imgs != undefined) {
    	for (i=0; i < imgs.length; i++) {
			try {
				if (imgs[i].name == strImgName) {
					++requiredImages;
				}
			}
			catch (e2) {};
        }
		ImageScaler.LOG("TODO: " + requiredImages);
        for (i = 0; i < imgs.length; i++) {
			try {
				if (imgs[i].name == strImgName) {
					var width = imgs[i].width;
					var height = imgs[i].height;
					if (width > 0 && height > 0) {
						ImageScaler.LOG("BEFORE SCALING " + imgs[i].src + ' >> ' + width + ' x ' + height);
						++handledImages;
						// Bild ist da, skalieren
						if (width > nSquareLength || height > nSquareLength) {
							var scaleFactor = 1;
							if (width > height) {
								scaleFactor = (nSquareLength / width);
							}
							else {
								scaleFactor = (nSquareLength / height);
							}
							var newHeight = Math.round(scaleFactor * height);
							var newWidth = Math.round(scaleFactor * width);
							imgs[i].height = newHeight;
							imgs[i].width= newWidth;
							ImageScaler.LOG("AFTER SCALING " + imgs[i].src + ' >> ' + newWidth + ' x ' + newHeight);
						}
					}
				}
			} 
			catch (e1) {
			};
		}
		if (handledImages >= requiredImages) {
			ImageScaler.LOG("Done.")
            ImageScaler.clearResizeImagesInterval(strImgName, nSquareLength);
        }
    }
    else {
		ImageScaler.LOG("No images to scale where found.")
      	ImageScaler.clearResizeImagesInterval(strImgName, nSquareLength);
    }
}