/* ZfL */

function Effect(element, duration) {
    if(typeof(element) == "string") {
        this.element = document.getElementById(element);
    } else {
        this.element = element;
    }
    this.duration = (duration == undefined) ? 250 : duration;    
    // Target opacity to reach for fade-effect. Used as indicator for fade-in/out.
    this.opacity = (!this.element.style.display || this.element.style.display == "none") ? 1.0 : 0.0;    
    // Effect stops when endtime is reached.
    this.endtime = new Date().getTime() + this.duration;    
}

Effect.fade = function(element, duration) {
    new Effect(element, duration).startFade();
}

Effect.prototype.startFade = function() {    
    if (!this.element.style.display || this.element.style.display == "none") {
		this.setOpacity(0.0);
		this.element.style.display = "block";
	} else {
		this.setOpacity(1.0);
	}
	this.animateFade(this);
}

// Takes current Effect as parameter, because setTimeout is called for next iteration (= looses context after call).
Effect.prototype.animateFade = function(effect) {
	var time = new Date().getTime();
	if (time < this.endtime) {
        effect.setOpacity(Math.abs(effect.opacity - ((this.endtime - time) / this.duration)));
		setTimeout(function() {effect.animateFade(effect);}, 33);
	} else {
		effect.setOpacity(effect.opacity);
		if (!effect.opacity) {
			effect.element.style.display = "none";
		}
	}
}

Effect.prototype.setOpacity = function(value) {
    this.element.style.opacity = value;
    // IE-Hacks
    this.element.style.filter = "alpha(opacity = " + Math.round(value * 100) + ")";
    this.element.style.zoom = 1.0;
}


var cms = {
	toogle : function(id) {
              try {
                Effect.fade(id, 250);
              } catch(e) {
		document.getElementById(id).style.display = (document
				.getElementById(id).style.display == 'none' ? 'block' : 'none');
              }
	},

	hide : function(id) {
		document.getElementById(id).style.display = 'none';
	},
	
	show : function(id) {
		document.getElementById(id).style.display = 'block';
	}
}

