// changes:
/*
	2010-08-30, pr: diverse Animationen für IE deaktivieren
	2010-09-02, pr: Sidebar in den Suchergebnissen entfernen
*/

// IE-Optimierung (keine Animation)
/*
	initializeSearch (Animation beim Ausfahren weiterer Suchergebnisse)
*/

var domain = document.domain;
if(domain == ''){
	domain = 'lachdiamant.softloop.net';
}

Cufon.replace('.din_text h1, #content h1, #navi .nav_level1 a, #navi .nav_level2 a, .din_text p, #sprachNav a, .branches a', {fontFamily: 'DINPro-Medium'});
Cufon.replace('h1 strong', {hover: true, hoverables: {a: true}, fontFamily: 'DINPro-Bold'});
Cufon.replace('.font_swing', {hover: true, hoverables: {a: true}, fontFamily: 'Swing2'});

function str_replace (search, replace, subject, count) {
    // Replaces all occurrences of search in haystack with replace  
    // 
    // version: 1006.1915
    // discuss at: http://phpjs.org/functions/str_replace    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // +      input by: Brett Zamir (http://brett-zamir.me)    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   input by: Oleg Eremeev
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Oleg Eremeev
    // %          note 1: The count parameter must be passed as a string in order    // %          note 1:  to find a global variable in which the result will be given
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'    var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
            f = [].concat(search),
            r = [].concat(replace),
            s = subject,
            ra = r instanceof Array, sa = s instanceof Array;s = [].concat(s);
    if (count) {
        this.window[count] = 0;
    }
     for (i=0, sl=s.length; i < sl; i++) {
        if (s[i] === '') {
            continue;
        }
        for (j=0, fl=f.length; j < fl; j++) {temp = s[i]+'';
            repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
            s[i] = (temp).split(f[j]).join(repl);
            if (count && s[i] !== temp) {
                this.window[count] += (temp.length-s[i].length)/f[j].length;}}
    }
    return sa ? s : s[0];
}

// ermittelt die Artikel-ID von Redaxo anhand der URL
function getArticleId(href){
	href = str_replace('http://'+domain+'/', '', href);
	var articleId = 0;
	if(href.indexOf('article_id=') > -1){
		articleId = href.split('article_id=')[1];
	}else{
		articleId = href.split('-')[0];
	}
	return articleId;
}

// Ajax call
function changeArticleContent(anchor){
	if(anchor){
		// do nothing
	}else{
		// TODO: ralph: check if parameter hiding is ok.
		// var anchor overwriter parameter anchor
		var anchor = this;
	}
	var rel = anchor.get('rel').split(';');
	var href = anchor.get('href');
	if(rel[2]){
		href = rel[2];
	}
	var newArticleId = getArticleId(href);

//	if(currentSiteId != newArticleId){
	var ajaxArticleId = 36;
	var requestMethod = 'get';
	var newArticle = $('article');
	var navigation = $('navi');
	var updateDomElement = $('article');
	
	var languageNavigation = $('sprachNav');

	var requestUrl = 'index.php?article_id='+ajaxArticleId+'&page_id='+newArticleId+'&clang='+clang;

	updateDomElement.get('morph').start( {'opacity': [1,0]} ).chain(
		function(){
			initSidebarMenu(newArticleId);
			new Request.HTML({
				method: requestMethod,
				update: updateDomElement,
				url: requestUrl,
				onSuccess: function(responseText, responseXML, responseHTML){
					setLanguageNavigation(newArticleId);
					
					$('article').set('html', $('new_article').get('html'));
					initImageGallery();
					initCatalog();
					initFadingImageGallery();
					initCatalogIndizes();
					var parent_div = anchor.getParent('div');
					var header_contents = $('header_contents');
					if(temp_header_contents != ''){
						var headerbild = $('headerbild');
						// nach oben scrollen und CoverFlow initialisieren
						var myFx = new Fx.Scroll(window).toTop().chain(function(){
							headerbild.get('morph').start( {'height': 178} ).chain(
								function(){
									all_mooflow_contents.each(
										function(content){
											if(content.indexOf(temp_header_contents) > 0){
												header_contents.set('html', content);
											}
										}
									);
									temp_header_contents = '';
									var height = 178;
									var offset = -200;
									var ratio = height / 800;
									var image_factor = height / 2; // 178 / 3
									var sidebar = $('sidebar');
									if(sidebar){
										var press_teaser = sidebar.getElement('.press_teaser');
										if(press_teaser){
											var current_anchor = press_teaser.getElement('.rex-current');
											var parent_div = current_anchor.getParent('.title');
											if(parent_div.className.indexOf('main_article') > 0){
												var divs = press_teaser.getElements('.main_teaser');
											}else{
												var divs = press_teaser.getElements('.sub_article_elements');
											}
											var counter = 0;
											divs.each(
												function(div){
													var anchor = div.getElement('.rex-current');
													if(anchor){
														start_index = counter;
													}
													counter++;
												}
											);
										}
									}
									var mf = new MooFlow(header_contents.getElement('.mooflow'), {
										startIndex: start_index,
										useSlider: false,
										useAutoPlay: false,
										useCaption: true,
										useResize: false,
										useWindowResize: false,
										useMouseWheel: false,
										useKeyInput: false,
										heightRatio: ratio,
										factor: image_factor,
										offsetY: offset,
										getAjaxContents: false
									});
									all_mooflows[0] = mf;				
								}
							);
						});
						
					}
					if(parent_div.className.indexOf('main_article') > 0){
						var mooflow = header_contents.getElement('.mooflow');
						if(mooflow){
							var sidebar = $('sidebar');
							var main_links = sidebar.getElements('.main_article');
							var counter = 0;
							main_links.each(
								function(main_link){
									var link = main_link.getElement('a');
									var rel = link.get('rel').split(';');
									if(getArticleId(rel[2]) == newArticleId){
										all_mooflows[0].glideTo2(counter);
									}
									counter++;
								}	
							);
						}
					}
					var oFxTween = new Fx.Tween(updateDomElement,
						{
							onStart: function(){
								updateDomElement.setStyles(
									{
										'visibility': 'visible',
										'display': 'none'
									}
								);
								Cufon.refresh();
								updateDomElement.setStyles(
									{
										'visibility': 'hidden',
										'display': 'block'
									}
								);
							},
							onComplete: function(){
							/*	var languageAnchors = languageNavigation.getElements('a');
								languageAnchors.each(
									function(languageAnchor){
										var languageHref = '';
										if(languageAnchor.get('href').indexOf('?') > 0){
											languageHref = languageAnchor.get('href').split('?')[0];
										}else{
											languageHref = languageAnchor.get('href');
										}
										languageAnchor.set('href', languageHref + '?press_article='+newArticleId);
									}
								); */
							}
						}
					).start('opacity', '0', '1');
				}
			}).send();
		}
	);
//	}
	return false;
}

function initSidebarMenuOnStart(){
	//	current_article_id
	var sidebar = $('sidebar');
	if(sidebar){
		var press_teaser = sidebar.getElement('.press_teaser');
		if(press_teaser){
			var main_teaser = press_teaser.getElements('.main_teaser');
			var sub_teaser = press_teaser.getElements('.sub_article_elements');
			var current_anchor = $('subpage_article_'+current_article_id);
			var current_index = 0;
			if(current_anchor){
			//	var parent_div = 
			}
		}
	}
}

function initSidebarMenu(article_id){
	var articles = $$('.press_teaser_article');
	var counter = 0;
	var sidebar = $('sidebar');
	if(sidebar){
		var sub_teaser = sidebar.getElements('.sub_article_elements');
		var press_teaser = sidebar.getElement('.press_teaser');
		if(press_teaser){
			var anchors = press_teaser.getElements('a');
			var close_main_element = true;
			anchors.each(
				function(anchor){
					var parent_div = anchor.getParent('div');
					if(parent_div.className != 'page_navigation'){
						var rel = anchor.get('rel').split(';');
						// var anchor_article_id = getArticleId(anchor.get('href'));
						var anchor_article_id = getArticleId(rel[2]);
						if(anchor_article_id == article_id){
							var parent_div = anchor.getParent('.sub_article_elements');
							if(parent_div){
								close_main_element = false;
							}
						}
					}
				}
			);
		}
		articles.each(
			function(article){
				var anchor = article.getElement('a');
				var rel = anchor.get('rel').split(';');
				// var anchor_article_id = getArticleId(anchor.get('href'));
				var anchor_article_id = getArticleId(rel[2]);
				var title = article.getElement('.title');
				if(anchor_article_id == article_id){
					anchor.className = 'rex-current';
					if(title.className.indexOf('main_article') > 0 && counter < sub_teaser.length){
						var size = sub_teaser[counter].getSize();
						if(size.y == 0){
							sub_teaser[counter].setStyle('height', 'auto');
							size = sub_teaser[counter].getSize();
							sub_teaser[counter].setStyle('height', 0);
						}
						sub_teaser[counter].get('morph').start( {'height': size.y} );
						counter++;
					}
				}else{
					anchor.className = '';
					if(title.className.indexOf('main_article') > 0 && counter < sub_teaser.length && close_main_element){
						sub_teaser[counter].get('morph').start( {'height': 0} );
						counter++;
					}
				}
			}
		);
	}
}

function changePage(){
	var transition_type = 'quad:out'; // 'back:out'
	var animation_length = 1000;
	var anchor = this;
	var rel = anchor.get('rel').split(';');
	var new_height = rel[0];
	var new_background_image = rel[1];
	var headerbild = $('headerbild');
	var header_contents = $('header_contents');
	headerbild.set('morph',
		{
			transition: transition_type,
			duration: animation_length
		}
	);
	if(new_height != header_height){
		var header_image = new Asset.images([new_background_image], {
		    onComplete: function(){
				if(new_height < header_height){
					headerbild.get('morph').start( {'height': [header_height, new_height]} ).chain(
						function(){
							headerbild.get('morph').start( {'opacity': [1,0]} ).chain(
								function(){
									headerbild.setStyle( 'background-image', 'url('+new_background_image+')' );
									header_contents.setStyle( 'visibility', 'hidden' );
									header_contents.empty();
									headerbild.get('morph').start( {'opacity': [0,1]} ).chain(
										function(){
											window.location = anchor.get('href');
										}
									);
								}
							);
						}
					);
				}else{
					headerbild.get('morph').start( {'opacity': [1,0]} ).chain(
						function(){
							headerbild.setStyle('background-image', 'url('+new_background_image+')');
							header_contents.setStyle( 'visibility', 'hidden' );
							header_contents.empty();
							headerbild.get('morph').start( {'opacity': [0,1]} ).chain(
								function(){
									headerbild.get('morph').start( {'height': [header_height, new_height]} ).chain(
										function(){
											window.location = anchor.get('href');
										}
									);
								}
							);
						}
					);
				}
		    }
		});
	}else{
		if(!(headerbild.getStyle('background-image').indexOf(new_background_image) > 0)){
			var header_image = new Asset.images([new_background_image], {
				onComplete: function(){
					headerbild.get('morph').start( {'opacity': [1,0]} ).chain(
						function(){
							headerbild.setStyle('background-image', 'url('+new_background_image+')');
							headerbild.get('morph').start( {'opacity': [0,1]} ).chain(
								function(){
									window.location = anchor.get('href');
								}
							);
						}
					);
				}
			});
		}else{
			return true;
		}
	}
	return false;
}

// Bühnenfunktionen auf Navigation und Logo legen
function initStageFunctions(){
	if(!(navigator.appVersion.indexOf('MSIE 6') > 0)){ 
		var navigation = $('navi');
		var logo = $('logo');
		var links = navigation.getElements('a');
		links.push(logo.getElement('a'));
		// logo.getElement('a').addEvent('click', setNewHistoryManagerHash);
		links.each(
			function(anchor){
				if(anchor.className != 'rex-current'){
					// auf ajax umstellbar
					// anchor.addEvent('click',changePage.bind(anchor));
					anchor.addEvent('click',setNewHistoryManagerHash.bind(anchor));
				}
			}
		);
	}
	return false;
}

function initPressTeaser(){
	var articles = $$('.press_teaser_article');
	var select_fields = $$('.year_select');
	articles.each(
		function(article){
			var anchor = article.getElement('a');
		//	anchor.addEvent('click',changeArticleContent.bind(anchor, anchor));
		//	article.addEvent('click',changeArticleContent.bind(anchor, anchor));
			anchor.addEvent('click',setNewHistoryManagerHashForSubArticle.bind(anchor, anchor));
			article.addEvent('click',setNewHistoryManagerHashForSubArticle.bind(anchor, anchor));
		}
	);
	select_fields.each(
		function(field){
			field.addEvent('change', submitForm.bind(field));
		}
	);
}

function submitForm(){
	var field = this;
	var form = field.getParent('form');
	form.submit();
}

function hideGalleryImageDescription(){
	var anchor = this;
	var gallery = anchor.getParent('.gallery');
	var items = anchor.getParent('div');
	var height = 95;
	var description = gallery.getElement('.description');
	var anchor_title = anchor.get('initial_title');
	anchor.set('title', anchor_title);
	var image = anchor.getElement('img');
	var image_title = image.get('initial_title');
	image.set('title', image_title);
	image.set('initial_title', '');
	if (ie()) {
		description.setStyles({'opacity': '0'});
	} else {
		description.get('morph').start( {'opacity': 0} );
	}
}

function showGalleryImageDescription() {
	var anchor = this;
	var gallery = anchor.getParent('.gallery');
	var items = anchor.getParent('div');
	var height = 95;
	var description = gallery.getElement('.description');
	
	var anchor_title = anchor.get('title');
	var image = anchor.getElement('img');
	var image_title = image.get('title');
	anchor.set('initial_title', anchor_title);
	anchor.set('title', '');

	image.set('initial_title', image_title);
	image.set('title', '');
	var description_text = (anchor_title != '' && anchor_title != null ? '<strong>'+anchor_title+'</strong>' : '') + (image_title != '' && image_title != null ? (anchor_title != '' && anchor_title != null ? '<strong>:</strong> ' : '') + image_title : '');
	description.set('html', description_text);

	description.setStyle('height', 'auto');
	var description_size = description.getSize();
	
	// anchor.get('morph').start( { 'height': [height, (height+9)] } );
	description.setStyles(
		{
			'overflow': 'hidden',
			'opacity': 0
			// 'height': 0
			// 'visibility': 'visible'
		}
	);
	// description.get('morph').start( { 'height': description_size.y } );
	if (description_text != '') {
		if (ie()) {
			description.setStyles({'opacity': '1'});
		} else {
			description.get('morph').start( {'opacity': [0,1]} );
		}
	}
}

function initGalleryHoverFunctions(){
	var galleries = $$('.gallery');
	galleries.each(
		function(gallery){
			var anchors = gallery.getElements('a');
			anchors.each(
				function(anchor){
					anchor.addEvents(
						{
							'mouseenter': showGalleryImageDescription.bind(anchor),
							'mouseleave': hideGalleryImageDescription.bind(anchor)
						}
					);
				}
			);			
		}
	);
}

function initImageGallery(){
	if($$('.gallery').length > 0){
		initGalleryHoverFunctions();
		Shadowbox.setup();
		$$('.gallery').each(
			function(gallery){
				var items = gallery.getElement('.items');
				var anchors = items.getElements('a');
				/* anchors.each(
					function(anchor){
						anchor.set('initial_title', anchor.get('title'));
						anchor.set('title', '');
					}
				); */
				var num_listElements = Math.ceil((items.getElements('li').length / 4));
				var slides = num_listElements;			// Change This
				var pos = 0;
				var offset = 417;		// HOW MUCH TO MOVE
				var currentslide = 1;
				var moveleft = gallery.getElement('.moveleft');
				var moveright = gallery.getElement('.moveright');
				var slider = gallery.getElement('.slider');
				moveleft.setStyle('visibility','hidden');
				if(slides < 2){
					moveright.setStyle('visibility','hidden');
				}
				var fx = new Fx.Morph(items, {duration: 100, transition: Fx.Transitions.linear});

				var scroll = new Fx.Scroll(slider, {
					offset:{'x':0, 'y':0}, 
					// transition: Fx.Transitions.Elastic.easeOut
					transition: Fx.Transitions.Back.easeOut
				});

				moveleft.addEvent('click', function(event) {
					event = new Event(event).stop();
					if(currentslide == 1) return;
					currentslide--;																		
					pos += -(offset);
					fx.start({ 
						'opacity': .3 
					}).chain(function(){
						this.start.delay(100, this, {'opacity': 1});
						scroll.start(pos);
						if(currentslide == 1){
							moveleft.setStyle('visibility','hidden');	
						}
					});
					moveright.setStyle('visibility','visible');		
				});

				moveright.addEvent('click', function(event) { 
					event = new Event(event).stop();
					if(currentslide >= slides){
						return;	
					}
					currentslide++;
					pos += offset;
					fx.start({ 
						'opacity': .3 
					}).chain(function(){
						this.start.delay(100, this, {'opacity': 1});
						scroll.start(pos);
						if(currentslide >= slides){
							moveright.setStyle('visibility','hidden');
						}
					});
					moveleft.setStyle('visibility','visible');
				});

				scroll.toLeft();				
			}
		);
	}
}

// öffnet eine Seite in einem neuen Fenster, Timestamp an Fensternamen, damit wirklich jedesmal ein neues Fenster geöffnet wird
function openExternalLink(){
	var currentDate = new Date();
	window.open(this.href, 'externalSite_'+currentDate.getTime());
	return false;
}

function initMesse(){
	var messen = $$('.messe');
	messen.each(
		function(messe){
			var entries = messe.getElements('.entry');
			entries.each(
				function(entry){
					var anchor = entry.getElement('a');
					anchor.addEvent('click', openExternalLink.bind(anchor));
				}
			);
		}
	);
}

function setDownloadLink(){
	if($('sb-player').get('src')){
		var src = $('sb-player').get('src').split('/');
		var filename = src[(src.length-1)];
		var anchor = new Element('a',
			{
				'href': 'js/download.php?filename='+filename,
				'html': 'Download'
			}
		);
		var download_div = $('sb-wrapper').getElement('.download');
		if(download_div){
			download_div.dispose();
		}
		
		download_div = new Element('div',
			{
				'class': 'download'
			}
		);
		anchor.inject(download_div);
		download_div.inject($('sb-wrapper'));
	}
}

var page_catalog_no = 1;

var temp_header_contents = '';
function loadFlashCatalog(){
	var anchor = this;
	var page_no = anchor.getElement('.page_no');
	if(page_no){
		page_catalog_no = page_no.get('html') * 1;
	}else{
		page_catalog_no	= 1;
	}
	
	var issuu_document_id = anchor.get('rel');
	
	var headerbild = $('headerbild');
	
	var issuu_viewer = 'http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf?pageNumber='+page_catalog_no;
	var issuu_content_id = 'issuu_content';
	var width = 800;
	var height = 500;
	
	var attributes = {
		id: 'issuuViewer'
	};
	var params = {
		allowfullscreen: 'true',
		allowScriptAccess: 'always',
		//jsAPIInitCallback: 'openFlashCatalogPage',
		menu: 'true'
	};
	//pageNumber=8
	var flashvars = {
		jsAPIClientDomain: domain,
		mode: 'embed',
		// layout: 'http%3A%2F%2Fskin.issuu.com%2Fv%2Fdark%2Flayout.xml',
		layout: 'http%3A%2F%2F'+domain+'%2Fissuu%2Fcustom_dark%2Flayout.xml',
		showFlipBtn: 'false',
		documentId: issuu_document_id,
		// docName: 'agent2issue4',
		username: 'LachDiamant'
		// username: 'softloop'
		// loadingInfoText: 'AGENT2%20Issue%204%20July%2FAugust',
		// et: '1251461518896',
		// er: '26'
	};

	var header_contents = $('header_contents');

	var mooflow = header_contents.getElement('div');
	if(mooflow){
		if(mooflow.get('id').indexOf('mooflow_') > -1){
			temp_header_contents = mooflow.get('id');
		}
	}
	header_contents.empty();
	var issuu_div_wrapper = new Element('div',
		{
			'id': 'issuu_wrapper'
		}
	);
	var issuu_div = new Element('div',
		{
			'id': issuu_content_id
		}
	);
	issuu_div.inject(issuu_div_wrapper);
	issuu_div_wrapper.inject(header_contents);
	swfobject.embedSWF(issuu_viewer, issuu_content_id, width, height, "9.0.0","expressInstall.swf", flashvars, params, attributes);
	
	issuu_div_wrapper.get('morph').start( {'opacity': [0,1]} ).chain(
		function(){
			header_height = 500;
			headerbild.set('morph',
				{
					duration: 1000
				}
			);
			headerbild.get('morph').start( {'height': header_height} ).chain(
				function(){
					var myFx = new Fx.Scroll(window).toLeft().chain(function(){
						this.toTop.delay(1, this);
					});
				}
			);
		}
	);
	return false;
}

function initCatalog(){
	var catalogs = $$('.catalog');
	if(catalogs.length > 0){
		var entries = $$('.entry');
		entries.each(
			function(entry){
				var anchor = entry.getElement('a.catalog_link');
				if(anchor){
					anchor.addEvent('click', loadFlashCatalog.bind(anchor));
				}
			}
		);
	}
}

var google_maps = new Array();
function initGoogleMaps(){

	var maps = $$('.google_maps');
	if(maps.length > 0){
		if (GBrowserIsCompatible()) {
			maps.each(
				function(map){
					var addresses = map.getElements('.address_wrapper');
					var first_address = map.getElement('.address').get('html');

					var width = map.getElement('.width').get('html') * 1;
					var height = map.getElement('.height').get('html') * 1;
					var longitude = map.getElement('.longitude').get('html') * 1;
					var latitude = map.getElement('.latitude').get('html') * 1;
					var zoom = map.getElement('.zoom').get('html') * 1;
					
					var markers = new Array();
					
					var sidebar = $('sidebar');
					if(sidebar){
						var address_texts = sidebar.getElements('.address');
						var text_counter = 0;
						addresses.each(
							function(address){
								var html = address.getElement('.address').get('html');
								var zm = address.getElement('.zoom').get('html') * 1;
								var lng = address.getElement('.longitude').get('html') * 1;
								var ltd = address.getElement('.latitude').get('html') * 1;
								var marker = new GMarker(new GLatLng(lng, ltd));
								GEvent.addListener(marker, 'click', function() {
									marker.openInfoWindowHtml(html);
								});
								if(sidebar){
									address_texts[text_counter].addEvent('click',
										function(){
											marker.openInfoWindowHtml(html);
											new Fx.Scroll(window).toTop();
										}
									);
									text_counter++;
								}
								markers.push(marker);			
							}
						);
					}

					map.setStyles(
						{
							'width': width,
							'height': height
						}
					);

					var google_map = new GMap2(map);
					markers.each(
						function(marker){
							google_map.addOverlay(marker);
						}
					);
					var map_control = new GMapTypeControl();
					google_map.addControl(map_control);
					google_map.addControl(new GLargeMapControl());
				    google_map.setCenter(new GLatLng(longitude, latitude), 7);
					google_maps.push(google_map);
					markers[0].openInfoWindowHtml(first_address);
				}
			);
		}
	}
}

function handleErrors(){
   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
     alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
     alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
   
   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
     alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);

//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
     
   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
     alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);

   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
     alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
    
   else alert("An unknown error occurred.");
   
}

var all_mooflows = new Array();
var all_mooflow_contents = new Array();

function initMooFlow(){
//	alert(header_height);
	var elements = $$('.mooflow');
	var headerbild = $('headerbild');
	var size = headerbild.getSize();
	var ratio = header_height / 800;
	var image_factor = header_height / 5;
	var offset = 70;
	var start_index = 0;
	if(header_height < 500){
		offset = -200;
	}
	elements.each(
		function(element){
			// Spezialfall bei Katalogen abfangen und Startindex für MooFlow bestimmen
			if(element.className.indexOf('catalog') > 0){
				var height = 178;
				offset = -200;
				ratio = height / 800;
				image_factor = height / 2; // 178 / 3
				var sidebar = $('sidebar');
				if(sidebar){
					var press_teaser = sidebar.getElement('.press_teaser');
					if(press_teaser){
						var current_anchor = press_teaser.getElement('.rex-current');
						if(current_anchor){
							var parent_div = current_anchor.getParent('.title');
							if(parent_div.className.indexOf('main_article') > 0){
								var divs = press_teaser.getElements('.main_teaser');
							}else{
								var divs = press_teaser.getElements('.sub_article_elements');
							}
							var counter = 0;
							divs.each(
								function(div){
									var anchor = div.getElement('.rex-current');
									if(anchor){
										start_index = counter;
									}
									counter++;
								}
							);
						}
					}
				}
			}
			all_mooflow_contents.push(element.getParent('div').getParent('div').get('html'));
		//	if(element.getElements('img').length > 0){
				var mf = new MooFlow(element, {
					startIndex: start_index,
					useSlider: false,
					useAutoPlay: false,
					useCaption: true,
					useResize: false,
					useWindowResize: false,
					useMouseWheel: false,
					useKeyInput: false,
					heightRatio: ratio,
					factor: image_factor,
					offsetY: offset
				});
				all_mooflows.push(mf);
		//	}
		}
	);
}

// Kontaktformular
function getCheckboxStatus(){
	var checkbox = this;
	var parent_list_element = checkbox.getParent('li');
	var sub_list = parent_list_element.getElement('ul');

	if(sub_list){
		var new_list_height = 0;
		var size = sub_list.getSize();
		if(checkbox.checked){
			sub_list.setStyle('height', 'auto');
			size = sub_list.getSize();
			sub_list.setStyle('height', 0);
			new_list_height = size.y;
			sub_list.get('morph').start( {'height': new_list_height} ).chain(
				function(){
					sub_list.setStyle('height', 'auto');
				}
			);
		}else{
			sub_list.get('morph').start( {'height': [size.y, new_list_height]} ).chain(
				function(){
					var child_lists = sub_list.getElements('ul');
					child_lists.each(
						function(list){
							list.setStyle('height', 0);
						}
					);
				}
			);
			var checkboxes = sub_list.getElements('input');
			checkboxes.each(
				function(sub_list_checkbox){
					sub_list_checkbox.set('checked', '');
				}
			);
		}
		
	}
}

function initContactForm(){
	var content = $('content');
	var contact_form = content.getElement('.contact_form');
	if(contact_form){
		var request = contact_form.getElement('.request');
		if(request){
			var checkboxes = request.getElements('input');
			checkboxes.each(
				function(checkbox){
					var parent_list_element = checkbox.getParent('li');
					var sub_list = parent_list_element.getElement('ul');
					if(sub_list){
						if(checkbox.checked){
							sub_list.setStyle('height', 'auto');
						}else{
							sub_list.setStyle('height', 0);
						}
						checkbox.addEvent('click', getCheckboxStatus.bind(checkbox));
					}
				}
			);
		}
	}
}

function showProductVideo(){
	var anchor = this;
	var filename = anchor.get('href');
	var title = anchor.get('title');
	Shadowbox.open(
		{
			content:    '<div id="shadowbox-video"><div class="var filename">.'+filename+'</div>Video wird geladen...</div>',
			player:     "html",
			title:      title,
			height:     364,
			width:      480
    	}
	);
	return false;
}

function initProductVideos(){
	var videos = $$('.flash_video');
	videos.each(
		function(video){
			var div_list_element = video.getParent('.entry');
			var link = div_list_element.getElement('.links');
			var anchor = link.getElement('a');
			anchor.addEvent('click', showProductVideo.bind(anchor));
		}
	);
}

function setShadowboxVideo(){
	var video = $('shadowbox-video');
	if(video){
		var filename = video.getElement('.filename').get('html');
		var flashvars = {
			file: filename,
			autostart: true
		};
		var params = {
			allowfullscreen: 'true',
			allowscriptaccess: 'always',
			wmode: 'opaque'
		};
		var attributes = {};
		swfobject.embedSWF('mediaplayer-5.2/player.swf', 'shadowbox-video', '480', '360', '9.0.0', 'expressInstall.swf', flashvars, params, attributes);		
	}
}

function loadShadowboxActions(){
	setDownloadLink();
	setShadowboxVideo();
}

function fadeToNextImage(){
	var gallery = this;
	var entries = gallery.getElements('.entry');
	var fading_area = gallery.getElement('.fading_area');
	if(fading_area){
		var image = fading_area.getElement('.image');
		image.setStyle('z-index', 5);
		var description = fading_area.getElement('.description');
		var description_size = description.getSize();
		description.get('morph').start( {'bottom': -description_size.y} ).chain(
			function(){
				var index = gallery.get('index') * 1;
				index++;
				var entry = entries[index];
				if(entry){
				}else{
					entry = entries[0];
					index = 0;
				}
				gallery.set('index', index);
				var entry_clone = entry.clone();
				var new_image = entry_clone.getElement('.image');
				new_image.setStyles(
					{
						'opacity': 1,
						'z-index': 2
					}
				);
				new_image.inject(image, 'before');
				var new_description = entry_clone.getElement('.description');
				new_description.setStyle('visibility', 'hidden');
				image.get('morph').start( {'opacity': [1,0]} ).chain(
					function(){
						image.dispose();
						new_description.inject(description, 'after');
						description.dispose();
						var headlines = new_description.getElements('.headline');
						headlines.each(
							function(headline){
								var h1 = new Element('h1',
									{
										'html': headline.get('html')
									}
								);
								h1.inject(headline, 'after');
								headline.dispose();
							}
						);
						var new_description_size = new_description.getSize();
						new_description.setStyle('bottom', -new_description_size.y);
						new_description.setStyle('visibility', 'visible');
						Cufon.refresh();
						if(new_description.get('html') != ''){
							new_description.get('morph').start( {'bottom': 0} );
						}
					}
				);
			}
		);
	}
}

function initFadingImageGallery(){
	var article = $('article');
	var image_galleries = article.getElements('.fading_images');
	var interval = 6000;
	image_galleries.each(
		function(gallery){
			var entries = gallery.getElements('.entry');
			var fading_area = gallery.getElement('.fading_area');
			entries.each(
				function(entry){
					entry.setStyle('display', 'none');
				}
			);
			if(entries.length > 0){
				gallery.set('index', 0);
				fadeToNextImage.periodical(interval, gallery);
			}
		}
	);
}

// Suche
function hideBranches(){
	var branch_button = this;
	var header = $('header');
	var search = $('search');
	if(header){
		var branches = header.getElement('.branches');
		if(branches){
			var size = branches.getSize();
			var search_size = search.getSize();
			var header_size = header.getSize();
			var margin_bottom = 8;
			var start_top_position = header_size.y - search_size.y - margin_bottom;
			branches.get('morph').start( {'height': 0, 'top': [start_top_position]} ).chain(
				function(){
					branches.setStyle('visibility', 'hidden');
				}
			);
			branch_button.removeEvents('click');
			branch_button.addEvent('click', showBranches.bind(branch_button));
		}
	}
	return false;
}

function showBranches(){
	var branch_button = this;
	var header = $('header');
	var search = $('search');
	if(header){
		var branches = header.getElement('.branches');
		if(branches){
			branches.setStyle('height', 'auto');
			var size = branches.getSize();
			var search_size = search.getSize();
			var header_size = header.getSize();
			var margin_bottom = 8;
			var start_top_position = header_size.y - search_size.y - margin_bottom;
			branches.setStyles(
				{
					'top': start_top_position,
					'height': 0,
					'visibility': 'visible'
				}
			);
			branches.get('morph').start( {'height': size.y, 'top': [start_top_position, start_top_position - size.y]} );
			branch_button.removeEvents('click');
			branch_button.addEvent('click', hideBranches.bind(branch_button));
		}
	}
	return false;
}

function initSearchField(){
	var search = $('search');
	if(search){
		/*var branch_button = search.getElement('.branch');
		branch_button.addEvent('click', showBranches.bind(branch_button));*/
	}
}

function initCatalogIndizes(){
	var article = $('article');
	var indizes = article.getElements('.index');
	indizes.each(
		function(index){
			var rows = index.getElements('tr');
			rows.each(
				function(row){
					row.addEvents(
						{
							'mouseenter': function(){
								row.addClass('hover');
							},
							'mouseleave': function(){
								row.removeClass('hover');
							}
						}
					);
					var anchor = row.getElement('.index_entry');
					anchor.addEvent('click', loadFlashCatalog.bind(anchor));
				}
			);
		}
	);
}

/* function setContentHeight(){
	var wrapper_navi = $('wrapper_navi');
	var wrapper_header = $('wrapper_header');
	var wrapper_inhalt = $('wrapper_inhalt');
//	var current_size = wrapper_inhalt.getSize();
	wrapper_inhalt.setStyle('height', '100%');
	var wrapper_inhalt_size = wrapper_inhalt.getSize();

	wrapper_inhalt.setStyle('height', 'auto');
	
	var wrapper_navi_size = wrapper_navi.getSize();
	var wrapper_header_size = wrapper_header.getSize();
	
	var new_wrapper_inhalt_height = wrapper_inhalt_size.y - wrapper_header_size.y - wrapper_navi_size.y;
	wrapper_inhalt.setStyle('height', new_wrapper_inhalt_height);
} */
var oSearchRequest;
function setupSearchRequest(form) {
	var search = $('article');
	oSearchRequest = new Form.Request(form,
		search,
		{
			onSuccess: function() {
				initializeSearch();
			}
		}	
	).send();
}

function getSearchResults(e) {
	
	e.stop();
	var form = this;
	var search = $('article');
	var sidebar = $('sidebar');
	
	search.empty();
	if (sidebar) {
		sidebar.empty();
	}
	var sClassName = $$('body')[0].className.replace('kataloge', '');
	$$('body')[0].className = sClassName;
	
	var request_url = '177-'+clang+'-.html';
	
	form.set('action', request_url);

	setupSearchRequest(form);
	
	return false;
}

function initSearch(){
	var search = $('search');
	if(search){
		var form = search.getElement('form');
		form.addEvent('submit', getSearchResults);
	}
}

function setBranchFilter(e) {
	var link = this;
	
	// bei erster Suche Ergebnis-Layer erstellen, bei allen weiteren Ergebnis-Layer leeren
	if (!$('search_results')) {
		var response_element = new Element('div',
			{
				'id': 'search_results'
			}
		);
		response_element.inject($('article'));
	} else {
		$('search_results').empty();
		var response_element = $('search_results');
	}
	
	// Link anpassen
	var arr = this.get('href').split('?');
	var baseURL = arr[0];
	var params = arr[1].split('&');
	
	var sXSearch = null;
	
	var i = 0;
	while (i < params.length) {
		var keyvalue = params[i].split('=');
		key = keyvalue[0];
		value = keyvalue[1];
		
		if (key == 'xsearch') {
			sXSearch = value;
		}
		
		i++;
	}
	
	var request_url = 'index.php?article_id=177&branche=1&xsearch=' + sXSearch;
	
	var request = new Request.HTML({
		url: request_url,
		onSuccess: function(a, b, c) {
			$('search_results').set('html', c);
		}
	}).send();
	
	return false;
}
function initBranches(){
	var divBranch = $('search_branch');
	if (divBranch) {
		var liste = divBranch.getChildren();
		
		var nItem = 0;
		while (nItem < liste.length) {
			
			var link = liste[nItem].getChildren()[0];
			var sOldLink = link.get('href');
			var cufon = link.getChildren()[0];
			var sNewLink = sOldLink + '&branche=1&xsearch=' + cufon.get('alt');
			link.set('href', sNewLink);
			link.addEvent('click', setBranchFilter);
			
			nItem++;
		}
	}
}

var background_image_counter = 0;
var background_image_timer;

function setNewBackgroundImage(){
	var headerbild = $('headerbild');
	// background_image_counter++;
	fading_images = new Array();
	var background_images = headerbild.getElements('.header_background_image');
	background_images.each(
		function(image){
			fading_images.push(image.get('html'));
		}
	);
	/* if(fading_images.length > background_image_counter){
		// do nothing
	}else{
		background_image_counter = 0;
	} */
	var random_number = Math.round(fading_images.length*(Math.random()));
	while((random_number == background_image_counter || random_number > (fading_images.length-1)) && fading_images.length > 2){
		random_number = Math.round(fading_images.length*(Math.random()));
	}
	background_image_counter = random_number;
	if(fading_images.length > 0){
		if(fading_images[background_image_counter] != ''){
			var filename = 'index.php?rex_resize=800w__'+fading_images[background_image_counter];
			new Asset.images(new Array(filename),
				{
					onComplete: function(){
						var image = headerbild.getElement('.background_image');
						if(image){
							image.dispose();
						}
						image = new Element('img',
							{
								'class': 'background_image',
								'src': filename,
								'alt': filename,
								'styles': {
									'opacity': 0
								}
							}
						);
						image.inject(headerbild);
						image.set('morph',
							{
								duration: 1000
							}
						);
						image.get('morph').start( {'opacity': 1} ).chain(
							function(){
								headerbild.setStyle('background-image', 'url('+filename+')');
								background_image_timer = setNewBackgroundImage.delay(4000);						
							}
						);
					}
				}
			);
		}
	}
}

function initFadingBackgroundImages() {
	var headerbild = $('headerbild');
	var background_images = headerbild.getElements('.header_background_image');
	if ( background_images.length > 0 ){
		background_image_timer = setNewBackgroundImage.delay(4000);
	}
}

var hm;
window.addEvent('domready',
	function(){
	//	initSidebarMenuOnStart();
		initStageFunctions();	
		initPressTeaser();
		initImageGallery();
		initMesse();
		initCatalog();
		if($$('.page_article_id').length > 0){
			initSidebarMenu($$('.page_article_id')[0].value);
		}
		initMooFlow();
		initGoogleMaps();
		initContactForm();
		initProductVideos();
		initFadingImageGallery();
		initSearchField();
		initCatalogIndizes();
		
		// History Manager for Ajax
		// if(!(navigator.appVersion.indexOf('MSIE 6') > 0)){ 
			hm = new HistoryManager({delimiter:'!'})
			hm.addEvent('article-added', getNextPage);
			hm.addEvent('article-updated', getNextPage);
			hm.addEvent('article-removed', getInitialPage);
			hm.addEvent('sub_article-added', getNextSubPage);
			hm.addEvent('sub_article-updated', getNextSubPage);
			hm.addEvent('sub_article-removed', getInitialSubPage);
			hm.start();
		// }
		initSearch();
		//initBranches();
		// setContentHeight();
		initFadingBackgroundImages();
		Shadowbox.setup();
		initializeIE6();
	}
);

// window.addEvent('resize', setContentHeight);

Shadowbox.init({
	skipSetup: true,
	onFinish: loadShadowboxActions
});
// 2010-08-30, pr: Funktion zum prüfen, ob IE vorliegt
function ie() {
	var bReturn = false;
	var sUserAgent = navigator.userAgent.toLowerCase();
	if (sUserAgent.indexOf('msie') > -1) { bReturn = true; }
	return bReturn;
}
// 2010-08-25, pr: MooFlow-Probleme im IE6, deshalb hier nur Hintergrundbild statt MooFlow
function initializeIE6() {
	
	// prüfen, ob wirklich IE6 vorhanden
	var sUserAgent = navigator.userAgent.toLowerCase();
	
	if (sUserAgent.indexOf('msie 6') > -1) {
	    // Unternehmenshistorie: alternative Darstellungsweise im IE6
	    if ($$('.mooflow_ie6').length > 0) {
		initializeIE6History();
	    }
	    if ( $ ('content_bg') ) {
				ie6_correct_content_bg();
	    }
	}
}
// 2010-08-25, pr: MooFlow-Probleme im IE6, deshalb hier nur Hintergrundbild statt MooFlow
function initializeIE6History() {
    // Höhe auf Vorlage für kleinen Header setzen
    $('header').setStyles({'height': '178'});
    // damit overflow berücksichtigt wird
    $('headerbild').setStyles({'position': 'absolute'});
    // Suche nachpositionieren
    $('search').setStyles({'bottom': '322'});
}
// 2010-08-25, pr: in nternehmen und Kontakt ist der Textcontainer für den Content nicht groß genug
function initializeIE6Container() {
    var iContainer = $('wrapper_inhalt');

    var iArticle = $$('.contact_form')[0];
    var sArticleHeight = iArticle.getStyle('height');
    var saToken = sArticleHeight.split('px');
}
function ie6_correct_content_bg() {
	
}
// 2010-08-25, pr: Effekte für Suchergebnisse
function initializeSearch() {
	// Wenn Suchergebnisse vorhanden sind
	if ($$('.catalog_index').length > 0) {
		// weitere Suchergebnisse ausblenden
		$$('.toggler').getNext().hide();
		// Handling bei Klick auf "weitere Ergebnisse anzeigen..."
		$$('.toggler').addEvent('click', function() {
			var next = this.getNext();
			next.setStyles(
				{
					'display': 'block',
					'overflow': 'hidden',
					'height': 'auto'
				}
			);
			var next_size = next.getSize();
			next.setStyles(
				{
					'height': '0'
				}
			);
			// Animation NICHT für IE
			if (ie()) {
				next.setStyles({'height': next_size.y});
			} else {
				next.get('morph').start( {'height': next_size.y} );
			}
			this.hide();
		});
		// Handling bei Klick auf "weniger Ergebnisse anzeigen..."
		$$('.show_less').addEvent('click', function() {
			
			this.getParent().getParent().getChildren()[0].show();
			var next = this.getParent();
			// Animation NICHT für IE
			if (ie()) {
				next.hide();
			} else {
				next.get('morph').start( {'height': 0} );
			}
		});
	}
}