var wacker = wacker || {};
wacker.cookieNameHideCountrySelectionLayer = wacker.cookieNameHideCountrySelectionLayer || 'WACKERHCS';
wacker.cookieNameCountry = wacker.cookieNameCountry || 'countrySelection';
wacker.urlProgressBar = wacker.urlProgressBar || '../img/gesamt/ladebalken_02.gif';
wacker.urlCountries = wacker.urlCountries || '../jscript/example_countries.js';
wacker.urlCountriesParams = wacker.urlCountriesParams || {};
wacker.urlCountrySelectionLayer = wacker.urlCountrySelectionLayer || '../include/markets/countryselectionlayer.html';
wacker.showCountrySelection = !!wacker.showCountrySelection;
wacker.altButtonCloseLayer = wacker.altButtonCloseLayer || 'close';
// get-parameter für die lander-links
wacker.locationParams = wacker.locationParams ? wacker.locationParams : {};

// will be document.documentElement.className at the end of this script
var htmlClass = '';



try {
	// prevents background flickering in ie
	if ($.browser.msie) {
		if ($.browser.version < '7') {
			// trigger repaint
			jQuery(window).bind('load', function () {
				document.body.className += ' loaded';
			});
		}
		document.execCommand("BackgroundImageCache", false, true);
	}
} catch (ex) {}



(function ($) {

	$.extend(wacker, {
		cookie: function (name, value) {
			if (arguments.length > 1) {
				var expires = value === null ? '; Expires=' + new Date(1980, 1, 1) : '';
				document.cookie = name + '=' + encodeURIComponent(value) + '; Path=/' + expires;
				return null;
			}
			var result = document.cookie.replace(/[+]/g, ' ');
			result = new RegExp(name + '=([^;]+)').exec(result);
			return decodeURIComponent((result && result[1]) || '');
		},
		getActiveCountry: function () {
			var country;
			return function () {
			    if (country) {
					return country;
				}
				var result = this.cookie(wacker.cookieNameCountry);
				if (result == '""') {
					result = null;
				}
				if (result) {
					result = result.split(',');
				}
				return country = result;
			};
		}(),
		progressBar: function () {
			return $('<img src="' + this.urlProgressBar + '" alt="" />');
		},
		getActiveLanguage: function () {
			var language;
			return function () {
				var result;
				if (typeof language != 'undefined') {
				    return language;
				}
				result = $('html').attr('lang');
				result = result || $('html').attr('xml:lang');
				result = result || $('meta[http-equiv=content-language]').attr('content');
				result = result.toLowerCase();
				language = result;
				return result;
			};
		}(),
		listItemForCountry: function (item, url) {
		    noQuery = url === null;
		    url = url || '';
			var key = item[0];
		    var language = wacker.getActiveLanguage();
		    var country = wacker.getActiveCountry();
		    var href;
			var html = [
				'<li>',
				'<a class="link',
				(country && country[0] == key ? ' aktiv' : ''),
				((item[2] == 'selected' && !country) || (item[2] != 'selected' && country && country[0] == key) ? ' preselected' : ''),
				'" title="" href="'
			];
			var param, params = wacker.locationParams, hasQuery, wasParam = false;

		    if (noQuery) {
				href = '#';
				html.push(href);
			} else {
				href = url;
				hasQuery = -1 != href.indexOf('?');
				// anangen von externen parametern, die aus dem html generiert wurden
				params.country = key;
				params.language = language;
				for (param in params) {
					href += (hasQuery || wasParam ? '&' : '?') + param + '=' + encodeURIComponent(params[param]);
					wasParam = true;
				}
				html.push(href);
			}

			html.push(
				'" key="', key, '">',
				'<span class="icon sprite-flag fl-', key, '"></span>', item[1],
				'</a></li>'
			);

			return html.join('');
		},
		getCountries: function () {
			var loadedCountries = null;
			var listeners = [];
			var loading;

			// function zum holen der lander, callback bei erfolg aufgerufen
			function getCountries(callBack) {
				if (loadedCountries) {
					callBack && callBack(loadedCountries);
					return loadedCountries;
				}
				var params, param, href = wacker.urlCountries;
				var hasquery = -1 != href.indexOf('?'), wasparam = false;
				params = wacker.urlCountriesParams;
				if (!params.language) {
					params.language = wacker.getActiveLanguage();
				}
				for (param in params) {
					href += (hasquery || wasparam ? '&' : '?') + param + '=' + encodeURIComponent(params[param]);
					wasparam = true;
				}
				callBack && listeners.push(callBack);
				if (!loading) {
					loading = true;
					$.getJSON(href, function (data) {
						loadedCountries = data;
						while (listeners.length) {
							listeners.pop()(loadedCountries);
						}
					});
				}
				return null;
			}

			return getCountries;
		}(),
		appendCountryListItems: function (list, callback, url) {
			this.getCountries(function (data) {
				var i, length, html = [];
				for (i = 0, length = data.length; i < length; ++i) {
					html.push(wacker.listItemForCountry(data[i], url));
				}
				$(list).append(html.join(''));
				callback && callback.apply(wacker, data);
			});
		},
		insertQueryString: function (that, i , item) {
			var href = that.getAttribute('href');
			var hash, search = location.search;
			if (location.search) {
				if (href.lastIndexOf('#') == -1) {
					hash = '';
				} else {
					hash = href.substring(href.lastIndexOf('#'));
					href = href.substring(0, href.lastIndexOf('#'));
				}
				if (href.lastIndexOf('?') == -1) {
					href += search;
				} else {
					href += '&' + search.substring(1);
				}
				href += hash;
				that.href = href;
			}
			return that;
		},
		overlayLoadHandle: null,
		overlayIsVisible: false,
		overlay: null,
		overlayContent: null,
		showOverlay: function () {
			$(window).bind('resize load', function (e) {
				if (wacker.overlay) {
					wacker.overlay.children('.overlayBg').css({
						width: $(document.body).width() + 'px',
						height: Math.max($(document.documentElement).height(), $(document.body).height()) + 'px'
					});
				}
			});
			return function (cb) {
				if (typeof cb == 'function') {
					wacker.overlayLoadHandle = cb;
				}
				if (!wacker.overlayIsVisible) {
					wacker.overlayIsVisible = true;
					document.documentElement.className += ' overlayIsVisible';
				}
				if (!document.body) {
					setTimeout(arguments.callee, 50);
					return;
				}
				wacker.overlay = $('<div class="modalOverlay overlayLoading"><div class="overlayBg"></div><div class="overlayContent"><div class="overlayClose" onclick="wacker.closeOverlay();">' + wacker.altButtonCloseLayer + '</div><div class="overlayContentInner"></div></div></div>');
				wacker.overlayContent = wacker.overlay.find('.overlayContentInner');
				$(document.body).prepend(wacker.overlay);
				wacker.overlayLoadHandle(function () {
					wacker.overlay.removeClass('overlayLoading');
				});
			};
		}(),
		closeOverlay: function () {
			if (this.overlay) {
				this.overlay.hide();
				this.overlayIsVisible = false;
				$(document.documentElement).removeClass('overlayIsVisible');
				this.overlay.remove();
				this.overlay = null;
			}
		},
		simpleIphoneScrollable: function (el) {
			var start = null;
			el = $(el);
			if (!navigator.userAgent.match(/iPod|iPad|iPhone/)) {
				return;
			}
			el.bind('touchstart', function (e) {
				e = e.originalEvent || e;
				if (e.targetTouches.length > 1) {
					start = null;
					return;
				}
				start = {
					pageY: e.targetTouches[0].pageY + el.get(0).scrollTop,
					identifier: e.targetTouches[0].identifier
				};
			}).bind('touchend', function (e) {
				start = null;
			}).bind('touchmove', function (e) {
				e.preventDefault();
				e = e.originalEvent || e;
				var touch = e.targetTouches[0];
				if (start && touch.identifier == start.identifier) {
					el.get(0).scrollTop = Math.max(0, start.pageY - touch.pageY);
				}
			});
		},
		initCountrySelection: function () {
			if (this.showCountrySelection && navigator.cookieEnabled && !this.cookie(this.cookieNameHideCountrySelectionLayer) && !this.getActiveCountry()) {
				this.showOverlay(function (overlayCb) {
					this.overlayContent.load(this.urlCountrySelectionLayer, function () {
						var layer = $(this), href = null, countries = layer.find('.countryList');
						var links = null;
						wacker.appendCountryListItems(countries, function () {
							links = countries.find('a').bind('click', function (e) {
								e.preventDefault();
								links.removeClass('active');
								$(this).addClass('active');
								href = this.href;
							});
							overlayCb();
							var preselectedCountry = countries.find('.preselected');
							if (preselectedCountry.length) {
								countries.get(0).scrollTop = Math.max(0, preselectedCountry.offset().top - countries.offset().top - 60);
								href = preselectedCountry.attr('href');
							}
							wacker.simpleIphoneScrollable(countries);
						});
						layer.find('.button').bind('click', function (e) {
							if ($(this).is('.select')) {
								if (href) {
									location = href;
								}
							} else if ($(this).is('.noSelect')) {
								wacker.cookie(wacker.cookieNameHideCountrySelectionLayer, true);
								wacker.closeOverlay();
							}
						});
					});
				});
			}
		}
	});

})(jQuery);


jQuery(function($) {

	$('a.fn-params').each(function (i, item) {
		wacker.insertQueryString(this, i, item);
	});


	// fuellen der standortwahl
	$('#typo div.standortwahl').each(function () {

		var countryDiv = $(this).find('div.out');
		var countryButton = countryDiv.find('div.inner > span > a');
		var activeCountry = wacker.getActiveCountry();
		if (activeCountry) {
			countryDiv.find('div.inner > span:not(.unsichtbar) > a').replaceWith($(wacker.listItemForCountry(activeCountry)).find('a').addClass('first'));
			countryButton = countryDiv.find('div.inner > span > a');
			
		}
	
		countryButton.one('click', function (e) {
		    countryButton.unbind('click').css('cursor', 'wait').bind('click', function (e) {
				e.preventDefault();
			});
			wacker.getCountries(function (countries) {
					var menu = countryDiv.find('ul.pulldownMenue');
				countryButton.css('cursor', 'pointer').bind('click', function (e) {
					menu.menuSlide(e);
					return false;
				});
				menu.menuSlide = function (e, close) {
					var that = this;
					function bodyClick(e) {
						if (!$(e.currentTarget).parents('.standortwahl').length) {
							that.menuSlide(e, true);
						}
					}
				    	countryDiv.find('div.inner > span').toggleClass('unsichtbar');
					if (this.isOpen || close) {
						countryDiv.removeClass('ausgeklappt');
					} else {
						countryDiv.addClass('ausgeklappt');
						$('body').one('click', bodyClick);
					}
					this.isOpen = !this.isOpen;
					var preselectedCountry = menu.find('a.preselected');
					menu.get(0).scrollTop = 0;
					if (preselectedCountry.length) {
						menu.get(0).scrollTop = Math.max(0, preselectedCountry.offset().top - menu.offset().top - 60);
					}
					wacker.simpleIphoneScrollable(menu);
					menu.find('a').bind('click', function (e) {
						if (this.href.match(/country=global/)) {
							wacker.cookie(wacker.cookieNameHideCountrySelectionLayer, true);
						}
					});
				};
				wacker.appendCountryListItems(menu);
				menu.menuSlide();
			});
			return false;
		});
	});
	// /standortwahl fuellen



	// Textzoom
	$('#meta').find('a.selectFontS,a.selectFontL,a.selectFontM').click(function (e) {
		var html = $(document.documentElement).removeClass('fontL').removeClass('fontM').removeClass('fontS').removeClass('withBgL');
		var zoomClass = 'fontM';
		switch (this.className) {
			case 'selectFontS':
				zoomClass = 'fontS';
				break;
			case 'selectFontL':
				zoomClass = 'fontL';
				if (useHtmlBg) {
					html.addClass('withBgL');
				}
				break;
		}
		html.addClass(zoomClass);
		document.cookie = 'WACKERZOOM=' + zoomClass + '; path=/';
		e.preventDefault();
	});



	// klappfunktion
	$('div.klappFunktion').each(function (numDiv) {
		var div = $(this);
		div.find('a.klapplink').click(function (e) {
			div.toggleClass('klappAktiv');
			div.siblings().removeClass('klappAktiv');
			return false;
		});
	});



	// Reitermodul
	$('div.tabContainer').each(function (r) {
		var tabContainer = $(this);
		var alleReiter = tabContainer.find('li.reiter');
		alleReiter.each(function (i) {
			var reiter = $(this);
			reiter.find('a').click(function (e) {
				tabContainer.find('div.reitercontent').removeClass('reiterBlock').filter(':eq(' + i + ')').addClass('reiterBlock');
				alleReiter.removeClass('reiterSelected');
				reiter.addClass('reiterSelected');
				return false;
			});
		});
	});



});

// add class iniframe if viewed in iframe by shadowbox
if (parent && parent.Shadowbox && window.frameElement) {
	htmlClass += ' inIframe';
	jQuery(function ($) {
		$(document).click(function (e) {
			var el = $(e.target);
			var href = el.attr('href') || '';
			var target = el.attr('target');

			if (!href) {
				el = el.parents('[href]').eq(0);
				href = el.attr('href');
				target = el.attr('target');
			}


			if (href) {
				if (/^http/.test(href)) {
					open(href);
					return false;
				} else if (/^#|^$/.test(href)) {
					// anchors open in same frame
				} else if (/^\//.test(href)) {
					parent.location = parent.location.protocol + '//' + parent.location.host + href;
				} else {
					parent.location = location.toString().replace(/\/[^\/]+$/, '/') + href;
				}
				return false;
			}
		});
		$('select.suchfeld').removeAttr('onchange').change(function (e) {
			var el = $(e.target);
			var href = el.val() || '';
			if (href) {
				if (/^http/.test(href)) {
					window.open(href);
				} else if (/^#/.test(href)) {
					// anchors open in same frame
					location.hash = href;
				} else if (/^\//.test(href)) {
					parent.location = parent.location.protocol + '//' + parent.location.host + href;
				} else {
					parent.location = location.toString().replace(/\/[^\/]+$/, '/') + href;
				}
				return false;
			}
		});
	});
}

htmlClass += ' js';

// add current zoom-settings from cookie
var zoomClass = wacker.cookie('WACKERZOOM');
if (zoomClass) {
	htmlClass += ' ' + zoomClass;
}
if (navigator.userAgent.match(/iPhone|iPod|iPad/)) {
	htmlClass += ' ios ';
}



// add background-image to html if not turned off by the template
var useHtmlBg = false;
setTimeout(function () {
	if (!document.body) {
		setTimeout(arguments.callee, 50);
		return;
	}
	if (!$(document.body).hasClass('bgNo')) {
		useHtmlBg = true;
		var htmlClass = ' withBg';
		if (zoomClass == 'fontL') {
			htmlClass += ' withBgL';
		}
		document.documentElement.className += htmlClass;
	}
}, 0);

document.documentElement.className = htmlClass;


/*
 * Metadata - jQuery plugin for parsing metadata from elements
 *
 * Copyright (c) 2006 John Resig, Yehuda Katz, Joern Zaefferer, Paul McLanahan
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.metadata.js 3620 2007-10-10 20:55:38Z pmclanahan $
 *
 */
(function($){$.extend({metadata:{defaults:{type:'class',name:'metadata',cre:/({.*})/,single:'metadata'},setType:function(type,name){this.defaults.type=type;this.defaults.name=name;},get:function(elem,opts){var settings=$.extend({},this.defaults,opts);if(!settings.single.length)settings.single='metadata';var data=$.data(elem,settings.single);if(data)return data;data="{}";if(settings.type=="class"){var m=settings.cre.exec(elem.className);if(m)data=m[1];}else if(settings.type=="elem"){if(!elem.getElementsByTagName)return;var e=elem.getElementsByTagName(settings.name);if(e.length)data=$.trim(e[0].innerHTML);}else if(elem.getAttribute!=undefined){var attr=elem.getAttribute(settings.name);if(attr)data=attr;}if(data.indexOf('{')<0)data="{"+data+"}";data=eval("("+data+")");$.data(elem,settings.single,data);return data;}}});$.fn.metadata=function(opts){return $.metadata.get(this[0],opts);};})(jQuery);
