var fx = null;
var visible = true;
var teaser = new Array();
var stageSlider = new Array();
var relatedProductSlider = new Array();
var gallerySlider = new Array();
var flexteaser = new Array();

function raiseEvent(eventType, elementID) {   
	var o = document.getElementById(elementID);   
	if (document.createEvent) {   
		var evt = document.createEvent("Events");   
		evt.initEvent(eventType, true, true);   
		o.dispatchEvent(evt);   
	}   
	else if (document.createEventObject)   
	{  
		var evt = document.createEventObject();   
		o.fireEvent('on' + eventType, evt);   
	}   
	o = null;  
 } 

function changeBackground(color) {

	var objBody = $$('body')[0];
	if(fx) {
		fx.cancel();
	}
	if(color){
		Element.addClassName(objBody, color);
	} else {
		objBody.className = "";
	}

}

function flashConnect(range, color) {
	changeBackground(color);
	teaserToggle(range);
	return visible;
}

function closeOpenTeaser() {
	$$('a.handleTeaserContent').each(function(handle) {
		if(handle.next().style.display != "none") {
			raiseEvent('click', handle.id);
		}
	});
}

function teaserToggle(range) {

	var teaserGroup = $$('.teaserGroup')[0];
	/* 
	if(visible === false) {
		range = 0 - range;
	}
	closeOpenTeaser()
	fx = new Effect.Move(teaserGroup, {
		mode: 'relative', 
		y: range, 
		duration: 0.65,
		afterFinish:function(){
			if(visible === true) {
				visible = false;
			} else {
				visible = true;
			}
		}
	}); */
	if(teaserGroup.style.visibility == "hidden") {
		teaserGroup.style.visibility = "visible";
	} else {
		teaserGroup.style.visibility = "hidden";
	}

}

var TeaserBox = Class.create();
Object.extend(TeaserBox.prototype, {
	initialize:function(handle, height)
	{
		this.handle = $(handle);
		this.content = this.handle.next();
			this.content.style.display = "none";
			this.content.style.height = height + "px";
		this.height = height;
		this.visible = false;
		this.toggle = this.toggle.bindAsEventListener(this);
		Event.observe(this.handle, 'click', this.toggle);
	}, 
	toggle:function(event)
	{
		Event.stopObserving(this.handle, 'click', this.toggle);
		event.stop();
		if(this.visible === false) {
			this.showContent();
		} else {
			this.hideContent();
		}
		return false;
	},
	showContent:function()
	{
		fx = new Effect.BlindDown(this.content, {
			duration: 0.55,
			afterFinish:function() {
				Event.observe(this.handle, 'click', this.toggle);
				this.visible = true;
			}.bind(this)
		});
	},
	hideContent:function()
	{
		fx = new Effect.BlindUp(this.content, {
			duration: 0.55,
			afterFinish:function() {
				Event.observe(this.handle, 'click', this.toggle);
				this.visible = false;
			}.bind(this)
		});
	}
});

var StageSlider = Class.create();
Object.extend(StageSlider.prototype, {
	initialize:function(id)
	{
		this.sliderGroup = $(id);
		this.sliderWrapper = this.sliderGroup.parentNode;
		this.slides = $$('#' + this.sliderGroup.id + ' .slideElement');
		
		this.maxWidth = 0;
		this.counter = 0;
		this.slides.each(function(slide) {
			this.counter++;
			this.maxWidth += slide.offsetWidth;
			slide.style.width = slide.offsetWidth + "px";
		}.bind(this));
		this.sliderGroup.style.width = this.maxWidth + "px";
		this.slideWidth = this.maxWidth / this.counter;
		
		if(this.counter > 1) {
			this.pager = new Element('ul', {'class': 'pager'});
			for (var i = 1; i<= this.counter; i++) {
				li = new Element('li');
				link = new Element('a', {'rel': i, 'style': 'cursor: pointer;', 'href': 'javascript:void(0);'}).update(i);
				if(i == 1) {
					Element.addClassName(link, 'active');
				}
				li.insert(link)
				this.pager.insert(li);
			}
			
			this.sliderWrapper.appendChild(this.pager);
			
			this.pagerElements = $$('#' + this.sliderWrapper.id + ' ul.pager li a');
			
			this.pagerElements.each(function(handle) {
		
				Event.observe(handle, 'click', function(event) {
				
					var element = Event.element(event);
					event.stop();
					
					this.pagerElements.each(function(handles){
						Element.removeClassName(handles, 'active');
					});
					Element.addClassName(element, 'active');
					
					this.slide(element.rel);
					
					return false;
				
				}.bind(this));
			
			}.bind(this));
			
		}
		
	},
	slide:function(pos)
	{
		var slideTo = this.slideWidth * (pos - 1);
		fx = new Effect.Move(this.sliderGroup, {
			x: -slideTo,
			mode: 'absolute', 
			duration: 0.5
		});
			
	}
});

var Slider = Class.create();
Object.extend(Slider.prototype, {
	initialize:function(id, type)
	{
		this.id = id;
		this.sliderGroup = $(id);
		this.sliderWrapper = this.sliderGroup.parentNode;
		this.wrapper = this.sliderWrapper.parentNode;
		this.slides = $$('#' + this.sliderGroup.id + ' li');
		this.type = type;
		
		this.maxWidth = 0;
		this.counter = 0;
		this.slides.each(function(slide) {
			this.maxWidth += slide.offsetWidth;
			this.counter++;
		}.bind(this));
		this.slideWidth = this.maxWidth / this.counter;
		
		this.sliderGroup.style.width = this.maxWidth + "px";
		
		if(this.counter > 3) {
		
			if(this.type == 'related') {
			
				this.jumpToCurrent();
			
			}
		
			this.reverseButton = new Element('a', {'href': 'javascript:void(0)', 'class': 'leftSliderNav sliderNav pngIE'}).update('zurück');
			this.forwardButton = new Element('a', {'href': 'javascript:void(0)', 'class': 'rightSliderNav sliderNav pngIE'}).update('vor');
			
			this.wrapper.appendChild(this.reverseButton);
			this.wrapper.appendChild(this.forwardButton);
		
			this.reverse = this.reverse.bindAsEventListener(this);
			this.forward = this.forward.bindAsEventListener(this);
		
			Event.observe(this.reverseButton, 'click', this.reverse);
			Event.observe(this.forwardButton, 'click', this.forward);
		}
		
	},
	reverse:function(event)
	{
		Event.stopObserving(this.reverseButton, 'click', this.reverse);
		
		fx = new Effect.Move(this.sliderGroup, {
			x: this.slideWidth, 
			mode: 'relative', 
			duration: 0.5, 
			beforeStart:function() {
				this.sliderGroup.style.left = "-" + this.slideWidth + "px";
				Element.insert(this.sliderGroup, {top: $$('#' + this.sliderGroup.id + ' li')[this.counter - 1]});
			}.bind(this),
			afterFinish:function() {
				Event.observe(this.reverseButton, 'click', this.reverse);
			}.bind(this)
		});
	},
	forward:function(event)
	{
		Event.stopObserving(this.forwardButton, 'click', this.forward);
		
		fx = new Effect.Move(this.sliderGroup, {
			x: -this.slideWidth,
			mode: 'absolute', 
			duration: 0.5,
			afterFinish:function() {
				Event.observe(this.forwardButton, 'click', this.forward);
				this.sliderGroup.appendChild($$('#' + this.sliderGroup.id + ' li')[0]);
				this.sliderGroup.style.left = "0px";
			}.bind(this)
		});
	},
	jumpToCurrent:function()
	{
		var flag = false;
		
		this.slides.each(function(elm) {
			if(elm.id.split("_")[1] != elm.className.split("_")[1] && flag === false) {
				this.sliderGroup.appendChild($$('#' + this.sliderGroup.id + ' li')[0]);
			} else {
				flag = true;
			}
		}.bind(this));
	}
});

var Accordion = Class.create();
Object.extend(Accordion.prototype, {
	initialize:function(id)
	{
		this.accordionWrapper = $(id);
		this.action = false;
		this.toggle = this.toggle.bindAsEventListener(this);
		$$('.dbnAccordionHandle').each(function(handle) {
			handle.style.cursor = "pointer";
			Event.observe(handle, 'click', this.toggle);
		
		}.bind(this));
		
	},
	toggle:function(event)
	{
		var element = Event.element(event);
		var content = element.next();
		if(this.action === false) {
			if(content.style.display == "none") {
				fx = new Effect.BlindDown(content, { 
					duration: 0.5,
					beforeStart:function() {
						this.action = true;
						Element.addClassName(element.parentNode, 'open');
					}.bind(this),
					afterFinish:function() {
						this.action = false;
					}.bind(this)
				});
			} else { 
				fx = new Effect.BlindUp(content, {
					duration: 0.5,
					beforeStart:function() {
						this.action = true;
					}.bind(this),
					afterFinish:function() {
						this.action = false;
						Element.removeClassName(element.parentNode, 'open');
					}.bind(this)
				});
			}
		}
	}
});

var i = 0;
var FlexTeaser = Class.create();
Object.extend(FlexTeaser.prototype, {
	initialize:function(id)
	{
		this.delay = 5;
		this.duration = 3;
		this.fx1 = null;
		this.fx2 = null;
		this.id = id;
		this.flex = $(id);
		this.list = $$('ul#'+this.id+' li');
		this.count = this.list.length;
		if(this.count > 1) {
			this.toggle();
		}
	},
	toggle:function()
	{
		if(Prototype.Browser.IE) { this.duration = 0; }
		this.fx1 = new Effect.Fade(this.list[i], { 
			delay: this.delay, 
			duration: this.duration,
			beforeStart: function() {
				if((i+1) < this.count) {
					i++;
				} else {
					i = 0;
				}
				this.fx2 = new Effect.Appear(this.list[i], { delay: this.delay, duration: this.duration });
			}.bind(this),
			afterFinish: function() {
				this.toggle();
			}.bind(this)
		});
	}
});

function init_accordion(id) {
	var dbnAccordion = new Accordion(id);
	$$('#' + id + ' .dbnAccordionContent').each(function(accordionContent) {
		accordionContent.style.height = accordionContent.offsetHeight + "px";
		accordionContent.hide();
	});
}

Event.observe(window, 'load', function() {

	var flexTeaserCounter = 0
	$$('.flexTeaser').each(function(flex) {
		flex.id = 'flexTeaser_' + flexTeaserCounter;
		flexteaser[flexTeaserCounter] = new FlexTeaser(flex.id);
		flexTeaserCounter++;
	});
	
	var teaserCounter = 0;
	$$('a.handleTeaserContent').each(function(handle) {
		handle.id = 'handleTeaserContent_' + teaserCounter;
		teaser[teaserCounter] = new TeaserBox(handle.id, handle.rel);
		teaserCounter++;
	});
	
	var stageSliderCounter = 0;
	$$('.slides').each(function(wrapper) {
		wrapper.id = 'slides_' + stageSliderCounter;
		wrapper.parentNode.id = 'slidesWrapper_' + stageSliderCounter;
		stageSlider[stageSliderCounter] = new StageSlider(wrapper.id);
		stageSliderCounter++;
	});
	
	var relatedProductSliderCounter = 0;
	$$('.relatedProductsSlides').each(function(slides) {
		slides.id = 'relatedProductSlides_' + relatedProductSliderCounter;
		slides.parentNode.id = 'relatedProductsSliderWrapper_' + relatedProductSliderCounter;
		slides.parentNode.parentNode.id = 'relatedProductsWrapper_' + relatedProductSliderCounter;
		relatedProductSlider[relatedProductSliderCounter] = new Slider(slides.id, 'related');
		relatedProductSliderCounter++;
	});
	
	
	var gallerySliderCounter = 0;
	$$('.gallerySlides').each(function(slides) {
		slides.id = 'gallerySlides_' + gallerySliderCounter;
		slides.parentNode.id = 'gallerySliderWrapper_' + gallerySliderCounter;
		slides.parentNode.parentNode.id = 'galleryWrapper_' + gallerySliderCounter;
		gallerySlider[relatedProductSliderCounter] = new Slider(slides.id);
		gallerySliderCounter++;
	});
	
	/*
	
	var active = false;
	function refreshCufon() {
		if(active == false ) {
			//console.log('+');
			Cufon.replace('ul.subNav li a', {fontFamily: 'Gill Sans MT'}, false);
			active = true;
			window.setTimeout(function(){
				active = false;
			}, 1000);
		}
	}
	function autoRefreshCufon() {
		refreshCufon();
		autoRefreshCufon.delay(1);
	}
	$$('ul.subNav li').each(function(e){
		Event.observe(e, 'mouseover', function(){ refreshCufon(); });
		Event.observe(e, 'mouseout',  function(){ refreshCufon(); });
	});
	autoRefreshCufon();
	*/
}); 