/**
 * mh_Slider.js
 * developed by goodRanking 2009
 * autor: M.Hoffmann
 * requires mootools.js V1.2
*/
var mh_Slider = new Class({
  	/* Initialisation
	 * @param	duration		int, string(e.g. 'short', 'long' etc.) standard: 'long'
	 * @param	transition	FX.transition (standard: Fx.Transitions.Sine.easeOut)
	 * @param	slider_id	array of slider_ids (can also be added by mh_Slider.add(slider_id))
	*/
	initialize: function(duration, transition, slider_id){
		this.duration = ($type(duration)=="number" || $type(duration)=="string")? duration : 'long';
		this.transition = ($type(transition)=="function")? transition : Fx.Transitions.Sine.easeOut;;
		this.slider_id = ($type(slider_id)=="array")? slider_id : new Array();
		this.open = false;
		this.prototype = new Array();
		this.openSlider = null;
		this.slideAktiv = false;
		var parentObj = this;
		this.ie6 = (Browser.Engine.trident && Browser.Engine.version==4)? true : false;
		
		for(i=0; i < this.slider_id.length; i++){
			this.prototype[this.slider_id[i]] = new Object();
			this.prototype[this.slider_id[i]].FX = new Fx.Morph(this.slider_id[i], { duration: this.duration, transition: this.transition });
			this.prototype[this.slider_id[i]].FX.parentObj = parentObj;
			this.prototype[this.slider_id[i]].scrollHeight = $(this.slider_id[i]).getScrollSize().y;
			this.prototype[this.slider_id[i]].status = "hidden";
			this.prototype[this.slider_id[i]].FX.set({
   	 		'display': 	'none',
	 			'margin-top': - ($(this.slider_id[i]).getScrollSize().y)
			});
			if(this.ie6) this.prototype[this.slider_id[i]].FX.set({ 'visibility': 'hidden' });
		}
   },

	/* Slider hinzufügen und initialisieren
	 *  @param: slider_id
	*/
	add: function(slider_id){
		var parentObj = this;
		this.prototype[slider_id] = new Object();
		this.prototype[slider_id].FX = new Fx.Morph(slider_id, {duration: this.duration, transition: this.transition });
		this.prototype[slider_id].FX.parentObj = parentObj;
		this.prototype[slider_id].scrollHeight = $(slider_id).getScrollSize().y;
		this.prototype[slider_id].status = "hidden";
		this.prototype[slider_id].FX.set({
   		'display': 	'none',
	 		'margin-top': - ($(slider_id).getScrollSize().y)
		});
		if(this.ie6) this.prototype[slider_id].FX.set({ 'visibility': 'hidden' });
		this.slider_id.push(slider_id);
	},
	
	/* Slider hineinbewegen
	 *  @param: slider_id
	*/
	slideIn: function(slider_id){
		var posY = -(this.prototype[slider_id].scrollHeight);
		var ie6 = this.ie6;
		if(!this.open){
			// Hineinsliden
			this.slideAktiv = true;
			this.prototype[slider_id].FX.set({ 'display': 'block' });
			this.prototype[slider_id].FX.addEvent("complete", function(){
				this.set({ 'display': 'block' });
				//this.slideAktiv = false;
				this.parentObj.slideAktiv = false;
				if(ie6){ this.set({ 'visibility': 'visible' }); }
			});
			// Bei IE6
			if(this.ie6){
				this.prototype[slider_id].FX.set({ 'visibility': 'hidden' });
				this.slideAktiv = false;
			}
			this.prototype[slider_id].FX.start({
		 		'margin-top': [posY, 0]
			});
			this.prototype[slider_id].status = "show";
			this.open = true;
			this.openSlider = slider_id;
		}else{
			// Ansicht aktualisieren: dargestellen div verbergen
			if(this.openSlider!=slider_id && this.openSlider!=null){
				this.prototype[this.openSlider].FX.set({ 'display': 'none', 'margin-top': posY });
				this.prototype[this.openSlider].status = 'hidden';
				if(ie6){ this.prototype[this.openSlider].FX.set({ 'visibility': 'hidden' }); }
				this.demarkLink(this.openSlider);
			}
			// Ansicht aktualisieren: gewuenschten div anzeigen
			this.prototype[slider_id].FX.set({ 'display': 'block', 'margin-top': 0 });
			this.prototype[slider_id].status = 'show';
			if(ie6){ this.prototype[slider_id].FX.set({ 'visibility': 'visible' }); }
			this.openSlider = slider_id;
		}
	},
	
	
	/* Slider hinausbewegen
	 *  @param: slider_id
	*/
	slideOut: function(slider_id){
		if(this.open){
			// hinaussliden
			this.slideAktiv = true;
			var posY = -(this.prototype[slider_id].scrollHeight);
			this.prototype[slider_id].FX.addEvent("complete", function(){
				this.set({ 'display': 'none' });
				this.parentObj.slideAktiv = false;
			});
			// bei IE6 vorher ausblenden, dann sliden
			if(this.ie6){
				this.prototype[slider_id].FX.set({ 'visibility': 'hidden' });
				this.slideAktiv = false;
			}
			this.prototype[slider_id].FX.start({
		 		'margin-top': [0, posY]
			});
			this.prototype[slider_id].status = "hidden";
			this.open = false;
			this.openSlider = null;
		}
	},
	
	/* Slider hineinbewegen
	 *  @param: slider_id
	*/
	toggle: function(slider_id){
		if(!this.slideAktiv){
			switch(this.prototype[slider_id].status){
				case "show" :
					this.demarkLink(slider_id);
					this.slideOut(slider_id);
				break;
				
				case "hidden" :
					this.markLink(slider_id);
					this.slideIn(slider_id);
				break;
			}
		}
	},
	
	/* Schliesst den offenen Slider */
	close: function(){
		if(this.openSlider!=null){
			this.demarkLink(this.openSlider);
			this.slideOut(this.openSlider);
		}
	},
	
	/* Link markieren
	 *  @param: slider_id
	*/
	markLink: function(slider_id){
		$("toggle_"+slider_id).setStyle("font-weight", "bold");
	},
	
	/* Link demarkieren
	 *  @param: slider_id
	*/
	demarkLink: function(slider_id){
		$("toggle_"+slider_id).setStyle("font-weight", "normal");
	}
});