var slowOpacityTimeout = new Object();

function initOpacity(node){
	if (!node) node = document;
	if (node.getAttribute && node.getAttribute("opacity") != null){
		opaAdd(node,false);
		node.setOpacity(node.getAttribute("opacity"));
	}
	var kinder = node.childNodes;
	for (var i = 0 ; i < kinder.length; i++){
		initOpacity(kinder[i]);
	}
}

function slowShowOpacity(id,schnelligkeit){
         var objekt = document.getElementById(id);
         if (!objekt) return false;
         if (!objekt.getOpacity){opaAdd(objekt);}
         if (objekt.style.display == "none"){
            objekt.style.display = "";
            objekt.setOpacity(0);
         }
         stopSlowOpacity(id);
         slowOpacity(id,objekt.getOpacity(),100,false,schnelligkeit);
         return objekt;
}

function slowHideOpacity(id,verstecken,schnelligkeit){
         var objekt = document.getElementById(id);
         if (!objekt) return false;
         if (!objekt.getOpacity){opaAdd(objekt);}
         if (objekt.style.display == "none"){
            objekt.style.display = "";
            objekt.setOpacity(0);
         }
         stopSlowOpacity(id);
         slowOpacity(id,objekt.getOpacity(),0,verstecken,schnelligkeit);
         return objekt;
}

function slowToggleOpacity(id,verstecken,schnelligkeit){
         var objekt = document.getElementById(id);
         if (!objekt) return false;
         if (!objekt.getOpacity){opaAdd(objekt);}
         if (objekt.style.display == "none"){
            objekt.style.display = "";
            objekt.setOpacity(0);
         }
         stopSlowOpacity(id);
         if (objekt.getOpacity() == 0){
            slowOpacity(id,0,100,verstecken,schnelligkeit);
         }
         else {
              slowOpacity(id,objekt.getOpacity(),0,verstecken,schnelligkeit);
         }
         return objekt;
}

function stopSlowOpacity(id){
         if (slowOpacityTimeout && slowOpacityTimeout[id]) window.clearTimeout(slowOpacityTimeout[id]);
}

function slowOpacity(id,starto,endo,verstecken,schnelligkeit){
         var objekt = document.getElementById(id);
         if (!objekt) return false;
         if (!objekt.getOpacity){opaAdd(objekt);}
         if (isNaN(schnelligkeit)){schnelligkeit = 1;}
         objekt.setOpacity(starto);
         if (Math.abs(starto-endo)<=3*schnelligkeit){
            if (verstecken && endo == 0) objekt.style.display = "none";
            objekt.setOpacity(endo);
            return objekt;
         }
         else {
              slowOpacityTimeout[id] = setTimeout("slowOpacity('"+id+"', "+(parseInt(starto-3*schnelligkeit*Math.abs(starto-endo)/(starto-endo)))+", "+parseInt(endo)+", "+verstecken+", "+schnelligkeit+");",10);
         }
         return objekt;
}

function opaAdd(node,kinder){
	var setOpacity = function (value){
	             if (!this.style) return false;
	             if (value != 0 && this.style.display == "none") this.style.display = "";
				 this.setAttribute("opacity", value);
	             if (this.style.opacity || this.style.opacity == ""){
	                this.style.opacity=value/100;
	                return this;
	             }
	             if (this.style.filter || this.style.filter == ""){
	                this.style.filter="Alpha(opacity="+value+")";
	                return this;
	             }
	             return false;
	};
	
	var getOpacity = function (){
	             if (!this.style) return false;
	             if (this.style.opacity || this.style.opacity == ""){
	                return (isNaN(this.style.opacity) || this.style.opacity == "")? 100 : this.style.opacity*100;
	             }
	             if (this.style.filter || this.style.filter == ""){
	                this.style.filter.match(/Alpha.*?opacity=(\d*)/);
	                return (isNaN(RegExp.$1) || RegExp.$1 == "")? 100 : RegExp.$1;
	             }
	             return false;
	};

	if (!node || !node.style) return false;

	//Das hier hat eigentlich nichts mit Opacity zu tun, aber der IE will den Filter nicht anwenden, wenn das Objekt keine "Layout" hat  - die eigenschaft zoom gibt ihm solches
	if (node.currentStyle && typeof(node.style.zoom) != "undefined" && !node.currentStyle.hasLayout) {
		node.style.zoom = "100%";
	}

	node.setOpacity = setOpacity;
	node.getOpacity = getOpacity;
	if (kinder){
		for (var i=0;i<node.childNodes.length;i++){
			opaAdd(node.childNodes[i]);
		}
	}
	return node;
}
