YAHOO.namespace("newmedia");
/**
 * Werkzeug zur automatischen Anpassung 
 * 
 * http://developer.yahoo.com/yui/articles/hosting/?selector&yahoo-dom-event&MIN
 * 
 * <!-- Combo-handled YUI JS files: -->
 * <script type="text/javascript" src="http://yui.yahooapis.com/combo?2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js&2.8.0r4/build/selector/selector-min.js"></script>
 */
YAHOO.newmedia.YUIResize = function(selector, config) {
	
	if (YAHOO.lang.isUndefined(selector) || YAHOO.lang.isNull(selector)) {
		selector = ".yuiresize";
	}
	
	this.config = config;
	
	this.selector = selector;
	
	this.createEvent("beforeResize");
	this.createEvent("afterResize");
	
	YAHOO.util.Event.on(window, "resize", function(e, args) {
		this.resize();
	}, this, true);
};

YAHOO.newmedia.YUIResize.prototype.resize = function() {
	var autoSizeNodes = YAHOO.util.Selector.query(this.selector);
	YAHOO.util.Dom.batch(autoSizeNodes, function(el) {
		
		this.fireEvent("beforeResize", el);
		
		var elementBottom = 0;
		
		// Falls Webkit verwendet wird, muss der CSS Wert verwendet werden...
		if (YAHOO.env.ua.webkit) {
			elementBottom = YAHOO.lang.isUndefined(this.config.bottom) ? 100 : this.config.bottom;
		} else {
			elementBottom = parseInt(YAHOO.util.Dom.getStyle(el, "bottom"));
			if (!YAHOO.lang.isNumber(elementBottom)) {
				return;
			}
		}
		
		var elementMaxHeight = parseInt(YAHOO.util.Dom.getStyle(el, "max-height"));
		var elementMinHeight = parseInt(YAHOO.util.Dom.getStyle(el, "min-height"));
	
		var viewportHeight = YAHOO.util.Dom.getViewportHeight();
		var elementRegion = YAHOO.util.Dom.getRegion(el);
		
		// Höhe des Elementes berechnen
		var elementHeight = viewportHeight - elementRegion.top - elementBottom;
		
		// 1. Falls die neue Grösser als das Attribut Max-Height ist, muss diese Grösse verwendet werden; 
		if (YAHOO.lang.isNumber(elementMaxHeight) && (elementHeight > elementMaxHeight)) {
			elementHeight = elementMaxHeight;
		}
		
		// 2. Falls die neue Grösser kleiner als das Attribut Min-Height ist, muss diese Grösse verwendet werden; 
		if (YAHOO.lang.isNumber(elementMaxHeight) && (elementHeight < elementMinHeight)) {
			elementHeight = elementMinHeight;
		}
		
		// Referenzelement im Inhalt berücksichtigen
		var autoSizeReferenceNode = YAHOO.util.Selector.query(".yuiresize-ref", el, true);
		if (YAHOO.lang.isObject(autoSizeReferenceNode)) {
			var referenceRegion = YAHOO.util.Dom.getRegion(autoSizeReferenceNode);
			if (elementHeight > referenceRegion.height) {
				elementHeight = referenceRegion.height;
			}
		}
		
		if (elementHeight != elementRegion.height) {
			YAHOO.util.Dom.setStyle(el, "height", elementHeight + "px");
		}
		
		this.fireEvent("afterResize", el);
		
	}, this, true);
};

// Das Resize-Tool kann direkt als Event-Provider verwendet werden.
YAHOO.lang.augmentProto(YAHOO.newmedia.YUIResize, YAHOO.util.EventProvider);
