var wacker = wacker || {};
wacker.cookieNameCountry = 'countrySelection';
wacker.urlProgressBar = '/cms/media/images/markets/ladebalken.gif';
//wacker.urlProgressBar = 'img/gesamt/ladebalken_02.gif';
wacker.urlCountryImages = '/cms/media/images/flags/flag_DE.gif';
//wacker.urlCountryImages = 'img/gesamt/flag_';
wacker.urlCountryImages = wacker.urlCountryImages.substring(0, wacker.urlCountryImages.lastIndexOf('_') + 1);
wacker.extensionCountryImages = '.gif';
wacker.urlCountries = '/cms/de/products-markets/countries.jsp';
//wacker.urlCountries = 'jscript/example_countries.js';
wacker.urlCountriesParams = wacker.urlCountriesParams ? wacker.urlCountriesParams : {};
// get-parameter für die länder-links
wacker.locationParams = wacker.locationParams ? wacker.locationParams : {};

var htmlClass = ''

try {
	// prevents background flickering in ie
	if ($.browser.msie)
		document.execCommand("BackgroundImageCache", false, true);
} catch (ex) {}

wacker.getActiveCountry = function () {
	var country;
	return function (cookieName) {
	    if (typeof country != 'undefined') {
			return country;
		}
		cookieName = cookieName || wacker.cookieNameCountry;
		var cookie = decodeURIComponent(document.cookie.replace(/[+]/g, ' '));
		var result;
		result = (new RegExp(cookieName + '=(\\w+),([^,]+)(,.*|)$')).exec(cookie);
		result = result && [result[1], result[2]];
		country = result;
		return result;
	};
}();
wacker.progressBar = function () {
	var progressBar = $('<img src="' + wacker.urlProgressBar + '" alt="" />');
	return function () {
		return progressBar.clone(false);
	};
}();
wacker.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;
	}
}();
wacker.getCountries = function () {
	var loadedCountries = null;
	var listeners = [];
	var loading;

	// function zum holen der länder, callback bei erfolg aufgerufen
	function getCountries(callBack) {
		var params;
		var param;
		var href = wacker.urlCountries;
		var hasquery = -1 != href.indexOf('?');
		var 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;
		}
		if (loadedCountries) {
			callBack && callBack(loadedCountries);
			return loadedCountries;
		}
		callBack && listeners.push(callBack);
		if (!loading) {
			loading = true;
			$.getJSON(href, function (data) {
				loadedCountries = data;
				while (listeners.length) {
					listeners.pop()(loadedCountries);
				}
			});
		}
		return null;
	}
	
	getCountries.liForCountry = function (item, url) {
	    noQuery = url === null;
	    url = url || '';
	    var language = wacker.getActiveLanguage();
	    var country = wacker.getActiveCountry();
	    var href;
		var img = document.createElement('img');
		var a = document.createElement('a');
		var li = document.createElement('li');
		var param;
		var params = wacker.locationParams;
		var key = item[0];
		var hasquery;
		var wasparam = false;
		
	    if (noQuery) {
			href = '#';
			a.setAttribute('href', href);
		} else {
			href = url;
			hasquery = -1 != href.indexOf('?');
			// anängen 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;
			}
			a.setAttribute('href', href);
			//wacker.insertQueryString(a);
		}
		a.title = '';
		a.key = key;
		img.src = wacker.urlCountryImages + key + wacker.extensionCountryImages;
		img.alt = '';
		a.appendChild(img);
		a.appendChild(document.createTextNode(item[1]));
	    if (country && country[0] == key) {
			a.className = 'aktiv';
		}
		li.appendChild(a);
		return li;
	}
	
	return getCountries;
}();
wacker.doIncrementalBuildCountries = function (list, callback, url) {
	var obj;
	//url = url || null;
	obj = $(list).get(0);
	obj.url = url;
	obj.callback = callback;
	function incrementalBuildCountries(from, to) {
		wacker.getCountries(function (data) {
			function step() {
				var i;
				var length;
				var url = obj.url;
				for (i = from, length = data.length; i <= to && i < length; ++i) {
					obj.appendChild(wacker.getCountries.liForCountry(data[i], url));
				}
			    if (i < length) {
			    	from = i, to = i + 50;
					window.setTimeout(step, 100);
					return false;
				} else {
					obj.callback && obj.callback();
				}
			}
			step();
		});
	}
	incrementalBuildCountries(0, 29);
}
wacker.insertQueryString = function () {
	function insert (i, item) {
		var href = this.getAttribute('href');
		var hash;
		var 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;
			this.href = href;
		}
		return this;
	}
	return function (that, i , item) {
		return insert.call(that, i, item);
	}
}();


$(document).ready(function() {
	
	$('a.fn-params').each(function (i, item) {
		wacker.insertQueryString(this, i, item);
	});
	
	// fuellen der standortwahl
	var countryDiv = $('div#standortwahl div.out');
	var countryButton = $('div#standortwahl div.inner > span > a');
	var activeCountry = wacker.getActiveCountry();
	if (activeCountry) {
		$('div#standortwahl div.inner > span:not(.unsichtbar) > a').replaceWith($(wacker.getCountries.liForCountry(activeCountry)).find('a').addClass('first'));
		countryButton = $('div#standortwahl div.inner > span > a');
	}

	countryButton.one('click', function (e) {
	    e = e ||event;
	    countryButton.unbind('click').css('cursor', 'wait').bind('click', function (e) {
			e.preventDefault && e.preventDefault();
			e.returnValue = false;
			return false;
		});
		wacker.getCountries(function (countries) {
		    var li;
			var menu = $('div#standortwahl div.inner > ul.pulldownMenue');
			countryButton.css('cursor', 'pointer').bind('click', function (e) {
			    e = e || event;
				menu.menuSlide(e);
				e.returnValue = false;
				e.preventDefault && e.preventDefault;
				return false;
			});
			menu.menuSlide = function (e, close) {
				var that = this;
				function bodyClick(e) {
				    e = e || event;
					that.menuSlide(e, true);
				}
		    	$('div#standortwahl div.inner > span').toggleClass('unsichtbar');
				if (this.isOpen || close) {
					this.slideUp(10);
					countryDiv.removeClass('ausgeklappt');
					$('body').unbind('click');
				} else {
					this.slideDown(10);
					countryDiv.addClass('ausgeklappt');
					$('body').one('click', bodyClick);
				}
				this.isOpen = !this.isOpen;
			}
			menu.menuSlide();
			wacker.doIncrementalBuildCountries(menu);
		});
		e.returnValue = false;
		e.preventDefault && e.preventDefault;
		return false;
	});

	// 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 = /WACKERZOOM=(\w+)/.exec(document.cookie);
if (zoomClass) {
	htmlClass += ' ' + zoomClass[1];
}

// 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 && zoomClass[1] == '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, Jï¿½Ã¶rn 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);
