function URLDecode( encoded ){
	var HEXCHARS = "0123456789ABCDEFabcdef";
	var plaintext = "";
	var i = 0;
	while (i < encoded.length) {
		var ch = encoded.charAt(i);
		if (ch == "+") {
			plaintext += " ";
			i++;
		} else if (ch == "%") {
			if (i < (encoded.length-2) && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				//alert( 'Bad escape combination near ...' + encoded.substr(i) );
				//plaintext += "%[ERROR]";
				i++;
			}
		} else {
			plaintext += ch;
			i++;
		}
	} // while
	return plaintext;
}; 

function UTF8_encode(string) {
	string = string.replace(/\r\n/g,"\n");
	var utftext = "";

	for (var n = 0; n < string.length; n++) {

		var c = string.charCodeAt(n);

		if (c < 128) {
			utftext += String.fromCharCode(c);
		}
		else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		}
		else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}

	}

	return utftext;
};

function UTF8_decode (utftext) {
	var string = "";
	var i = 0;
	var c = c1 = c2 = 0;

	while ( i < utftext.length ) {

		c = utftext.charCodeAt(i);

		if (c < 128) {
			string += String.fromCharCode(c);
			i++;
		}
		else if((c > 191) && (c < 224)) {
			c2 = utftext.charCodeAt(i+1);
			string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
			i += 2;
		}
		else {
			c2 = utftext.charCodeAt(i+1);
			c3 = utftext.charCodeAt(i+2);
			string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
			i += 3;
		}

	}

	return string;
};
 

var InputToggle = new Class({
	Implements:[Options, Events],
	options:{
		'selector': 'input.toggle',
		'focus': true,	//toggle on focus/unfocus
		'hover':false,	//toggle on hover
		'select':true	//select value on toggle
	},
	initialize: function(options){
		this.setOptions(options);
		var elements = document.id(document.body).getElements(this.options.selector);
		if(!elements || (!this.options.focus && !this.options.hover)){
			return;
		}		
		this.prepareElements(elements);
	},
	prepareElements: function(elements){
		elements.each(function(element){
			element.store('originalValue', element.get('value'));
			if(this.options.focus){
				element.addEvents({
					'focus': this.onToggle.bind(this),
					'blur': this.onUnToggle
				});
			}
			if(this.options.hover){
				element.addEvents({
					'mouseenter': this.onToggle.bind(this),
					'mouseleave': this.onUnToggle
				}); 
			}
		}.bind(this));
	},
	onToggle: function(event){
		var element = document.id(event.target);
		if(element.get('value') === element.retrieve('originalValue')){
			element.set('value', '');
		} else if(this.options.select) {
			element.select();
		}
	},
	onUnToggle: function(event){
		var element = document.id(event.target);
		if(element.get('value') === ""){
			element.set('value', element.retrieve('originalValue'));
		}
	}
});


var SuperCofelyScroller = new Class({
	Implements:[Options],
	
	options:{
		'cnt': 'jobs_sroller',//selector
		'url': '/de/karriere/stellenangebote.html?json=1',
		'type': 'jobs',
		'wheel':true //use scrollwheel
	},
	
	initialize: function(options){
		this.setOptions(options);
		this.element = document.id(this.options.cnt);
		if(!this.element)
			return null;
		this.wrapper = this.element.getElement('.scroll_wrapper');
		this.counter = 0;
		
	        this.prepareElements();			
	
		this.scroll = new Fx.Scroll(this.wrapper, {
			link: 'cancel',
			duration: 300,
			offset: {'x': 0, 'y': 0},
			transition: Fx.Transitions.Quad.easeInOut,
			wheelStops:false
		});

	},
	
	prepareElements: function(){


                this.r = new Request({
		  'url': this.options.url,
		  onSuccess: this.buildElements.bind(this)
		}).send();	


	         this.element.getElement('.arrow_up').addEvent('click', this.up.bind(this));
		this.element.getElement('.arrow_down').addEvent('click', this.down.bind(this));
		if(this.options.wheel){
			this.wrapper.addEvent('mousewheel', this.onWheel.bind(this));
		}
	},
	
	buildElements: function(result){
		jobs = JSON.decode(result);
		jobs.each(function(job){

			 if($type(job.title) != false){ 
				
			     if(this.options.type == 'jobs' )
			     	var p = new Element('p').grab(new Element('a', {'href': job.link, 'text': job.id + ' - ' + job.title}).grab(new Element('strong', {'html': job.date+'<br />'}), 'top').grab(new Element('br')), 'top');
			     else
			     	var p = new Element('p').grab( new Element('a', {'href': job.link, 'text': job.teaser}).grab(new Element('strong', {'html': job.title+'<br />'}), 'top').grab(new Element('br')), 'top');
			     	
			     	
			     this.wrapper.grab(p);
			     p.store('pos', p.getCoordinates(this.wrapper).top);
				 }
		     
		}.bind(this));
		this.items = this.wrapper.getElements('p');
	},
	
	up: function(){		
		this.counter--;
		if(this.counter < 0) {
			this.counter = 0;
			return false;
		}
		else {
			this.scrollToActive();
			return true;
		}
	},
	
	down: function(){
		this.counter++;
		if(this.counter >= this.items.length) {
			this.counter = this.items.length -1;
			return false;
			
		}
		else {
			this.scrollToActive();
			return true;
		}
	},
	
	scrollToActive: function(){
		this.scroll.start(0, this.items[this.counter].retrieve('pos'));
	},
	
	onWheel: function(e){
		var e = new Event(e);
		var dir = (e.wheel < 0 ? this.down() : this.up());
		//if(dir){
			e.stop();
		//}
		return true;
	}
	
});


Tips.implement({
 position: function(event){
	var size = window.getSize(), scroll = window.getScroll(),
	tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight},
	props = {x: 'left', y: 'top'},
	obj = {};
	 
	for (var z in props){
		obj[props[z]] = event.page[z] + this.options.offset[z];
	//if ((obj[props[z]] + tip[z] - scroll[z]) > size[z]) obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
	}
	 
	this.tip.setStyles(obj);
	}
})


window.addEvent("domready", function(){


	


	var accordion_trigger = document.id('content').getElements('.accordion_trigger');
	var accordion_target = document.id('content').getElements('.accordion_target');
	if(accordion_trigger && accordion_target){
		accordion_trigger.removeClass('accordion_trigger_active');
		accordion_target.removeClass('active');
			
		var myAccordion = new Fx.Accordion(accordion_trigger, accordion_target, {
			display : (document.id('show_ac') != null ? document.id('show_ac').innerHTML : -1 )
		});
		
		myAccordion.addEvent('active', function(trigger, target){
			accordion_trigger.removeClass('accordion_trigger_active');
			accordion_target.removeClass('active');
			if(trigger) {
				trigger.addClass('accordion_trigger_active');
			}
			if(target) {
				target.addClass('active');
			}
			
		});
		if(document.id('show_ac') != null)
		    if(document.id('show_ac').innerHTML != -1)
			myAccordion.fireEvent('active', [accordion_trigger[0],accordion_target[0]]);
	}



	
	//Toggle Search Box on focus
	var searchToggle = new InputToggle({'selector': '#search_top_q'});

	
	// Headerslide	
	var buehne = document.id('buehne');
	var images;
	if(buehne){
		images = buehne.getElements('img.slide');
	}
	if(buehne && images.length > 1){
		stageHeight(buehne,images[0]);
		
		for(var i=0; i < images.length; i++){			
			if(Browser.Engine.trident && Browser.Engine.version == 4){		
				images[i].getParent().setStyle('position', 'absolute');
				images[i].getParent().setStyle('z-index', images.length-i);
			}else{
				images[i].setStyle('position', 'absolute');
				images[i].setStyle('z-index', images.length-i);
			}
       }
		
		var counter = 0;
		
		if(!(Browser.Engine.trident && Browser.Engine.version == 4)){		
			var progress_fx =  new Fx.Morph( document.id('process'), {duration: 6860, transition: Fx.Transitions.linear, fps: 30} );
			progress_fx.start({'width': [0,960]});

					
			(function(){
			  var fx = new Fx.Morph(images[counter], {duration: 2000, transition: Fx.Transitions.linear, fps: 30});
			  images[counter].setStyle('opacity', 1);
			  fx.start({'opacity': ['1' , '0']});
			  fx.addEvent('complete', function(e){
				
				//alert("FX complet");
				e.setStyle('z-index', 0);
				e.setStyle('opacity', 1);		  	
				this.images.each(function(img){ img.setStyle('z-index', img.getStyle('z-index').toInt() +1); });	  	
			  }.bind({'images':images, 'progress_fx': progress_fx }));			
			  counter++;		  	
			  progress_fx.start({'width': [0,960]});
			  if(counter >= images.length) counter = 0;			
								
			}).periodical(7000);
		}else{
			// IE6
			var progress_fx =  new Fx.Morph( document.id('process'), {duration: 6860, transition: Fx.Transitions.linear, fps: 30} );
			progress_fx.start({'width': [0,960]});

					
			(function(){
			  var fx = new Fx.Morph(images[counter], {duration: 2000, transition: Fx.Transitions.linear, fps: 30});
			  images[counter].setStyle('opacity', 1);
			  fx.start({'opacity': ['1' , '0']});
			  fx.addEvent('complete', function(e){				
				//alert("FX complet");
				e.getParent().setStyle('z-index', 0);
				e.setStyle('opacity', 1);		  	
				this.images.each(function(img){ 
					img.getParent().setStyle('z-index', img.getParent().getStyle('z-index').toInt() +1); 
				});	  	
			  }.bind({'images':images, 'progress_fx': progress_fx }));			
			  counter++;		  	
			  progress_fx.start({'width': [0,960]});
			  if(counter >= images.length) counter = 0;			
								
			}).periodical(7000);
		}
	}
	


	// jobs
	if(document.id(document.body).getElements('.homepage').length == 1){
	



		var pressUrl;
		var stellUrl;
		if( document.id(document.body).getElement('.homepage').hasClass('lang_de') ){
			pressUrl = '/de/presse/pressemitteilungen.html?json=1';
			stellUrl = '/de/karriere/stellenangebote.html?json=1';			
		}else{			
			pressUrl = '/en/news/pressreleases.html?json=1';
			stellUrl = '/en/careers/vacancies.html?json=1';		
		}

		
		new SuperCofelyScroller({url:stellUrl});
		new SuperCofelyScroller({
			'cnt' : 'press_scroller',
			'url' : pressUrl,
			'type': 'press'
		});




	}




	
	var myTips = new Tips('#imgmap area', {
		className:'cflyTip',
		title:$empty,
		'text':function(el){
			var keyword = el.get('alt');
			var txt= '';
			$$('.MappointCnt.' + keyword).each(function(item){
				txt += item.innerHTML
			});
			txt = txt!=''?txt:'&nbsp;';
			return txt;
		},
		onShow: function(tip, el){
			tip.set('tween', {'link':'cancel', 'duration':700});
			tip.tween('opacity', [0, 1]);

		},
		onHide: function(tip, el){
			tip.setStyle('opacity', 0);

		}
	});
	
	if( document.id(document.body).getElement('.select_left') && document.id(document.body).getElement('.select_right') ){
	
		if( document.id(document.body).hasClass('lang_de') )
			stellUrl = '/de/karriere/stellenangebote.html?json=1';			
		else		
			stellUrl = '/en/careers/vacancies.html?json=1';		
		
	
		var location_select = document.id(document.body).getElement('.select_left').getElements('select');
		var sector_select = document.id(document.body).getElement('.select_right').getElements('select');
		
		
		var currentValue = sector_select[0].value;
		
		new Request({
		  'url': stellUrl,			  
		  onSuccess: function(result){
		  	var json = JSON.decode(result);
		  	
		  	sector_select[0].getElements('option').each(function(item){
		  		if( item.value != 'null' ){
		  			item.destroy();
		  		}
		  	});			  	
		  	
		  	var new_options = new Array();
		  	json.each(function(item){
		  		if(!new_options.contains(item.sector) ){				  			
		  			new_options.push(item.sector);
		  		}
		  	});
		  	
		  	new_options.each(function(item){
		  		if(UTF8_decode(URLDecode(currentValue)) == item){
		  			var el = new Element('option', {'value': item, 'text': item});
		  			el.selected = true;
		  			sector_select[0].grab(el);
		  		}else{
		  			sector_select[0].grab(new Element('option', {'value': item, 'text': item} ));
		  		}
				  			
		  	});
		  }
		}).send('json=1&location=' + location_select[0].value );

		
		location_select.addEvent('change', function(e){
			//if(sector_select[0].value == 'null'){
				new Request({
				  'url': stellUrl,			  
				  onSuccess: function(result){
				  	var json = JSON.decode(result);
				  	
				  	sector_select[0].getElements('option').each(function(item){
				  		if( item.value != 'null' ){
				  			item.destroy();
				  		}
				  	});			  	
				  	
				  	var new_options = new Array();
				  	json.each(function(item){
				  		if(!new_options.contains(item.sector) ){				  			
				  			new_options.push(item.sector);
				  		}
				  	});
				  	
				  	new_options.each(function(item){
				  		sector_select[0].grab(new Element('option', {'value': item, 'text': item} ));
				  	});
				  }
				}).send('json=1&location=' + e.target.value );
			//}
		});
		
		sector_select.addEvent('change', function(){
			//console.log('change location');
		});
	}




	
});
var stageHeight = function (buehne, img){
	if(!img){return;}
	var hb = buehne.getSize().y;
	var h = img.getSize().y;
	//	console.log(h)
	
	if(h>20 && hb && h!=hb){
		buehne.setStyle('height', h+'px');
		return;
	}else {
		//buehne.style.height=h+'px';
	}
	return;
}