/* 
    Steuerung der Effekte auf der Startseite.
    Der Code dieser Datei basiert auf dem Mootool-JavaScript Framework (http://mootools.net/). 
*/

// Code erst ausführen, wenn Document Object Model geladet ist
window.addEvent('domready', function() {

    // Funktion, die eine Gruppe von Fx.Slide zu-schiebt. Eine Ausnahme kann mitgegeben werden.
    function slideOut(sliders, notMe) {    
        for(var i=0; i < sliders.length; i++){        
            if(sliders[i] != notMe){
                sliders[i].slideOut();
            }
        }
    }

    /* 
       Klasse, die Aufgabenvearveitung steuert. Damit wird sichergestellt, dass die Fx.Slides sich 
       vernünftig verhalten. Das Problem war, dass Fx.Slides eine Aktion (auf- und zu-schieben) erst 
       zuende durchführen  müssen, bevor sie eine neue Aktion bekommen. Sonst kommt es zu 
       ungewünschten Effekten.
       
       Die Klasse beschreibt eine kurze Task-Queue: Neu -> (Stage 2) -> (Stage 1) -> Ausführen.
       Wenn Stage 1 besetzt ist, werden Tasks über Stage 2 eingereiht (oder reserviert). 
       Wenn Stage 1 abgearbeitet wurde, rückt die aktuelle Stage 2 Task auf Stage 1 vor und wird 
       bearbeitet. Eine später reservierte Task kann die vorherige von Stage 2 verdrängen. 
       Bei der Initialisierung der Klasse gibt refresh das Interval an, in dem die Verarbeitung
       von Stage 1 Tasks erfolgt. Diese Zahl (Zeit in ms) sollte größer als die Dauer der Ausführung
       der einzelnen Task sein.
    */
    var TaskReservation = new Class({    
        initialize: function(refresh){
            this.stage1 = null;
            this.stage2 = null;
            this.process.periodical(refresh, this);
        },
        reserve: function(task) {
            this.stage2 = task;

        },
        process: function() {
            if (this.stage1 != null) {
                eval(this.stage1);
                this.stage1 = this.stage2;
                this.stage2 = null;
            } else if (this.stage2 != null){
                this.stage1 = this.stage2;
                this.stage2 = null;            
                eval(this.stage1);
                this.stage1 = null;
            }            
        },
    });

    // Prozesse in t werden alle 600 ms verarbeitet.
    var t = new TaskReservation(600);

    // Erstelle Slider-Objekte für die Objekte mit id='details_(...)'
	var slider_marke = new Fx.Slide('details_die_marke');
    var slider_eignungsdiagnostik = new Fx.Slide('details_eignungsdiagnostik');
	var slider_personalentwicklung = new Fx.Slide('details_personalentwicklung');
    var slider_personalauswahl = new Fx.Slide('details_personalauswahl');

    // Sammle die Slider-Objekte
    var sliders = [slider_marke, slider_personalentwicklung, slider_personalauswahl, 
                    slider_eignungsdiagnostik];
    
    // Verstecke alle Slider
    for(var i=0; i < sliders.length; i++){
            sliders[i].hide();
    }

    /* Füge mouseover und mouseout Events für Objekte mit id='start_(...)' zu, damit Slider bedient
       werden können. Die Verwendung von t.reserve() stellt sicher, dass die obrige TaskReservation
       für das Abarbeiten der Aktionen verwendet wird.
    */  
	$('start_die_marke').addEvent('mouseover', function(e){e.stop(); 
	    t.reserve('slideOut(sliders, slider_marke);slider_marke.slideIn();')});
	$('start_die_marke').addEvent('mouseout', function(e){e.stop(); 
	    t.reserve('slideOut(sliders, null)')});

	$('start_eignungsdiagnostik').addEvent('mouseover', function(e){e.stop(); 
	    t.reserve('slideOut(sliders, slider_eignungsdiagnostik);slider_eignungsdiagnostik.slideIn();')});
	$('start_eignungsdiagnostik').addEvent('mouseout', function(e){e.stop(); 
	    t.reserve('slideOut(sliders, null)')});		

	$('start_personalentwicklung').addEvent('mouseover', function(e){e.stop();
	    t.reserve('slideOut(sliders, slider_personalentwicklung);'
	    +'slider_personalentwicklung.slideIn();')});
	$('start_personalentwicklung').addEvent('mouseout', function(e){e.stop(); 
	    t.reserve('slideOut(sliders, null)')});	
	
	$('start_personalauswahl').addEvent('mouseover', function(e){e.stop();
	    t.reserve('slideOut(sliders, slider_personalauswahl); slider_personalauswahl.slideIn();')});
	$('start_personalauswahl').addEvent('mouseout', function(e){e.stop();
	    t.reserve('slideOut(sliders, null)')});		

});



