/**
 * Haengt einen Eventhandler an ein DOM Element und faengt alle Events in dem Element ab
 *  auch wenn sie von Kindknoten kommen. Die Abfrage der gespeichetren Funktionen luft ueber
 *  'Eventtyp' und 'Klassenname'. Es kann also nur eine Funktion pro Eventtyp und Klassennamen gespeichert werden.
 */

Element.implement({
	/**
	 * Statt in den Event an das jeweilige Object per addEvent zu hngen, diese Funktion aufrufen
	 * @param {String} eventTyp
	 * @param {String} className
	 * @param {Function} func
	 */
	registerEvent: function(eventTyp, className, func){
		var savedEvents = this.retrieve('savedEvents') || {};
		if (!savedEvents[eventTyp]) {
			if (eventTyp == 'blur') {
				if (Browser.Engine.trident) {
					this.onfocusout = this.handleEvents.bind(this);
				} else {
					this.addEventListener('blur', function(e){this.handleEvents(e)}.bind(this), true );
				}
			} else {
				this.addEvent(eventTyp, this.handleEvents.bindWithEvent(this));
			}
			savedEvents[eventTyp]={};
		}
		savedEvents[eventTyp][className] = func;
		this.store('savedEvents', savedEvents);
		return this;
	},
	handleEvents: function(event){
		var storedEvents = this.retrieve('savedEvents')[(!event.type.match(/DOMMouseScroll|focusout/)) ? event.type : event.type == 'DOMMouseScroll' ? 'mousewheel' : 'blur'];
		if (storedEvents) {
			var target = $(event.target),
				eventIsFired = false;
			while (!eventIsFired && target) {
				target.className.split(' ').some(function(className){
					if (storedEvents[className]) {
						event.target = target;
						storedEvents[className].run(event);
						eventIsFired = true;
						return true;
					}
				}, this);
				target = target.getParent();
			}
		}
	}
});
/***
 * ndern der Schriftgroee in 3 Schritten (ber alternative CSS Dateien) und speichern in einem Cookie.
 */
var Fontsize = new Class({
	initialize: function(element) {
        if($defined(element)) {
            this.styles = $$('link[rel^=alternate]').set('disabled', true);
	        this.setCss(Cookie.read('aragFontsize'));
		    element.registerEvent('click', 'jsFontsize', this.setFontsize.bindWithEvent(this))
		    .registerEvent('keydown', 'jsFontsize', this.setFontsize.bindWithEvent(this))
		    .removeClass('hide');
        }
	},
	setFontsize: function(event) {
		event.stop();
		if (event.key == 'enter' || event.type == 'click') {
			var size = event.target.className.replace('jsFontsize', '').trim();
			this.setCss(size);
			Cookie.write('aragFontsize', size, {duration: 30});
		}
	},
	setCss: function(size) {
		this.styles.each(function(style){
			style.disabled = style.title == size ? false : true;
		});
	}
})

var LinkHover = new Class({
	initialize: function(element) {
        if (!Browser.Engine.trident && !Browser.Engine.version < 5) {
			element.each( function(thisEl){
				thisEl.setStyles({'opacity': 0,'visibility': 'visible','margin-left': '-221px'})

				var myFx = new Fx.Tween(thisEl, {
					onComplete: function(){thisEl.setStyle('visibility', 'visible');},
					duration: 300,
					link: 'cancel'
				} );

				thisEl.addEvent('mouseenter', function(){
					myFx.start('opacity', 1);
				})
				thisEl.addEvent('mouseleave', function(){
					myFx.start('opacity', 0);
				})
			});
		}
	}
})


var ClickTracker = new Class({
    initialize: function(container, secureID) {
        this.secureID = secureID;
        container.registerEvent('click', 'ctrack', this.click.bindWithEvent(this));
        container.registerEvent('change', 'ctrack', this.click.bindWithEvent(this));
    },
    click: function(event){
        var classes = event.target.className;
        var regex = /ct-([^ ]*)/;
        if (classes.test(regex)) {
            var decoded = classes.match(regex)[1].toString();
            clickTracker(decoded, this.secureID);
        }
    }
})

var toSleep = true;
function stopTimer() {
    toSleep = false;
}
function clickTracker(LinkName, secureID) {
    var redirectUrl = "http://www.etracker.de/skin/de.def/img/1px.gif";
    etrackerSink = new Image(1, 1);
    toSleep = true;
    try {
        var useSSL = et_ssl;
    } catch(e) {
        var useSSL = 0
    };
    if (useSSL == 1) {
        redirectUrl = "https://www.etracker.de/skin/de.def/img/1px.gif";
        etrackerSink.src = "https://www.etracker.de/lnkcnt.php?et=" + secureID + "&url=" + redirectUrl + "&lnkname=" + LinkName;
        etrackerSink.onload = stopTimer;
    } else {
        etrackerSink.src = "http://www.etracker.de/lnkcnt.php?et=" + secureID + "&url=" + redirectUrl + "&lnkname=" + LinkName;
        etrackerSink.onload = stopTimer;
    }
    if (toSleep == true) {
        maxDelay(500);
    }
    return true;
}
function maxDelay(gap) {
    var then, now;
    then = new
    Date().getTime();
    now = then;
    while (toSleep == true && (now - then) < gap) {
        now = new Date().
        getTime();
    }
}
