var ImageScaler = new Object();
ImageScaler.VERSION = "1.3"
ImageScaler.m_nTimeout = 500;
ImageScaler.m_bDebug = false;

/**
 * Skaliert alle Bilder mit dem geg. Namen so, dass Sie in Ihren Vaterknoten passen würden.
 * Dies funktioniert auch wenn der Eltern Container eine relative Höhe hat.  
 * @param {Object} strImgName Der Name des zu skalierenden Bildes
 */
ImageScaler.scaleToParent = function(strImgName) {
	ImageScaler.m_logMessage('scaleToParent: ' + strImgName);
	ImageScaler.m_clearResizeImagesInterval(strImgName, 0, 0);
	ImageScaler[strImgName + '_' + 0 + 'x' + 0] = window.setInterval("ImageScaler.m_resizeAvailableImagesToParent('" + strImgName + "')", ImageScaler.m_nTimeout);
}

/**
 * Skaliert alle Bilder mit dem geg. Namen so, 
 * dass Sie in ein Rechteck mit den geg. Kantenlängen passen würden.
 * @param {String} strImgName Der Wert des "name" Attributs der zu skalierenden Bilder
 * @param {Number} nRectWidth Die Breite des Rechtecks in das das Bild skaliert werden soll
 * @param {Number} nRectHeight Die Höhe des Rechtecks in das das Bild skaliert werden soll
 */
ImageScaler.scaleToRect = function(strImgName, nRectWidth, nRectHeight) {
	ImageScaler.m_logMessage('scaleToRect: ' + strImgName + ' / ' + nRectWidth + 'x' + nRectHeight);
	if (nRectHeight > 0 && nRectWidth > 0) {
		//Sicherheitshalber ein bestehendes Interval löschen
		ImageScaler.m_clearResizeImagesInterval(strImgName, nRectWidth, nRectHeight);
		
		//Neues Interval setzen
		ImageScaler.m_logMessage('start resize: ' + strImgName + '_' + nRectWidth + 'x' + nRectHeight);
		ImageScaler[strImgName + '_' + nRectWidth + 'x' + nRectHeight] = window.setInterval("ImageScaler.m_resizeAvailableImages('" + strImgName + "', " + nRectWidth + ", " + nRectHeight + ")", ImageScaler.m_nTimeout);
	}
}

/**
 * Skaliert alle Bilder mit dem geg. Namen so,
 * dass sie ein ein Quadrat mit der geg. Kantenlänge passen würden
 * @param {Object} strImgName Der Wert des "name" Attributs der zu skalierenden Bilder 
 * @param {Object} nSquareLength Die Kantenlänge des Quadrats in das das Bild skaliert werden soll
 */
ImageScaler.scaleToSquare = function(strImgName, nSquareLength) {
	if (nSquareLength > 0) {
		ImageScaler.scaleToRect(strImgName, nSquareLength, nSquareLength);
	}
}

/**
 * Skaliert alle Bilder mit dem geg. Namen so, 
 * dass Sie in ein Rechteck mit den geg. Kantenlängen passen würden.
 * @param {String} strImgName Der Wert des "name" Attributs der zu skalierenden Bilder
 * @param {Number} nRectWidth Die Breite des Rechtecks in das das Bild skaliert werden soll
 * @param {Number} nRectHeight Die Höhe des Rechtecks in das das Bild skaliert werden soll. Wenn nicht gegeben wird ein Quadrat mit der Kantenlänge der geg. Rechteckbreite angenommen.
 * @deprecated Nur noch vorhanden wegen Rückwärtskomp. Benutzen Sie @see {ImageScaler.scaleToSquare} oder @see {ImageScaler.scaleToRect}
 */
ImageScaler.startResizeImagesInterval = function(strImgName, nRectWidth, nRectHeight) {
	if (nRectHeight == undefined) {
		nRectHeight = nRectWidth;
	}
	ImageScaler.scaleToRect(strImgName, nRectWidth, nRectHeight);
}


/*----------------------------------Interne Funktionen ---------------------------------------------- */

ImageScaler.m_clearResizeImagesInterval = function (strImgName, nRectWidth, nRectHeight) {
	if (ImageScaler[strImgName + '_' + nRectWidth + 'x' + nRectHeight] != undefined) {
		window.clearInterval(ImageScaler[strImgName + '_' + nRectWidth + 'x' + nRectHeight]);
		ImageScaler[strImgName + '_' + nRectWidth + 'x' + nRectHeight] = undefined;
	}
}

ImageScaler.m_resizeAvailableImagesToParent = function(strImgName) {
	//Alle Images holen
    var imgs = document.images;
    if (imgs == undefined) {
    	imgs = document.getElementsByTagName('img');
    }
    var handledImages = 0;
    var requiredImages = 0;
    if (imgs != undefined) {
    	for (i=0; i < imgs.length; i++) {
        	if (imgs[i].name == strImgName) {
            	++requiredImages;
            }
        }
        for (i=0; i < imgs.length; i++) {
        	if (imgs[i].name == strImgName) {
            	var width = imgs[i].width;
                var height = imgs[i].height;
                if (width > 0 && height > 0) {
					var nRectWidth = imgs[i].parentNode.clientWidth;
					var nRectHeight = imgs[i].parentNode.clientHeight;
					ImageScaler.m_logMessage('orig. img size: ' + width + 'x' + height);
					ImageScaler.m_logMessage('dest. frame size: ' + nRectWidth + 'x' + nRectHeight);
                	++handledImages;
                    ImageScaler.m_scaleSingleImageToRect(imgs[i], nRectWidth, nRectHeight);
					ImageScaler.m_logMessage('resized img size: ' + imgs[i].width + 'x' + imgs[i].height);
                }
            }
        }
		if (handledImages >= requiredImages) {
			ImageScaler.m_logMessage('resize fertig');
            ImageScaler.m_clearResizeImagesInterval(strImgName, 0, 0);
        }
    }
    else {
		ImageScaler.m_logMessage('keine Bilder');
      	ImageScaler.m_clearResizeImagesInterval(strImgName, 0, 0);
    }
}

ImageScaler.m_resizeAvailableImages = function(strImgName, nRectWidth, nRectHeight) {
	//Alle Images holen
    var imgs = document.images;
    if (imgs == undefined) {
    	imgs = document.getElementsByTagName('img');
    }
    var handledImages = 0;
    var requiredImages = 0;
    if (imgs != undefined) {
    	for (i=0; i < imgs.length; i++) {
        	if (imgs[i].name == strImgName) {
            	++requiredImages;
				
            }
        }
        for (i=0; i < imgs.length; i++) {
        	if (imgs[i].name == strImgName) {
            	var width = imgs[i].width;
                var height = imgs[i].height;
                if (width > 0 && height > 0) {
                	ImageScaler.m_logMessage('orig. img size: ' + width + 'x' + height);
					ImageScaler.m_logMessage('dest. frame size: ' + nRectWidth + 'x' + nRectHeight);
					++handledImages;
					ImageScaler.m_scaleSingleImageToRect(imgs[i], nRectWidth, nRectHeight);
					ImageScaler.m_logMessage('resized img size: ' + imgs[i].width + 'x' + imgs[i].height);
                }
            }
        }
		if (handledImages >= requiredImages) {
			ImageScaler.m_logMessage('resize fertig');
            ImageScaler.m_clearResizeImagesInterval(strImgName, nRectWidth, nRectHeight);
        }
    }
    else {
		ImageScaler.m_logMessage('keine bilder');
      	ImageScaler.m_clearResizeImagesInterval(strImgName, nRectWidth, nRectHeight);
    }
}

ImageScaler.m_scaleSingleImageToRect = function(img, nRectWidth, nRectHeight) {
	var width = img.width;
    var height = img.height;
	if (width > nRectWidth || height > nRectHeight) {
	    var factorW = (nRectWidth / width);
		var factorH = (nRectHeight / height);
		var scaleFactor = (factorH<factorW)?factorH:factorW; 
		if (scaleFactor <= 1) {
			img.height = Math.round(scaleFactor * height);
			img.width = Math.round(scaleFactor * width);
		}
    }
	img.style.visibility = 'visible';
	img.style.display = 'inline'; //Gem. HTML Spezifikation sind img-Tags inline Elemente
}

ImageScaler.m_logMessage = function (sLogMsg) {
	if (typeof(console)!='undefined') {
		if (typeof(console.log)=='function')
			console.log(sLogMsg);
	}
	if (typeof(bb.command.trace)=='function')
		bb.command.trace(null, sLogMsg);
}

