"use strict";
(function (window, undefined) {
	var mdx;

	if (typeof(window['mdx']) === 'undefined') {
		window['mdx'] = {};
	}
	mdx = window['mdx'];

	mdx.addEvent = function (obj, type, func) {
		if (obj.attachEvent) {
			var rnd = parseInt(Math.random() * 0xffffffff, 16).toString() + parseInt(Math.random() * 0xffffffff, 16).toString() + parseInt(Math.random() * 0xffffffff, 16).toString() + parseInt(Math.random() * 0xffffffff, 16).toString();
			obj['e' + type + func + rnd] = func;
			obj[type + func + rnd] = function() { obj['e' + type + func + rnd](window.event); }
			obj.attachEvent('on' + type, obj[type + func + rnd]);
		} else {
			obj.addEventListener(type, func, false);
		}
	};

	mdx.addLoadEvent = function (func) {
		return mdx.addEvent(window, 'load', func);
	};

	mdx.getElementsByClassName = function (searchClass, node, tag) {
		if (node.getElementsByClassName) {
			return node.getElementsByClassName(searchClass);
		} else {
			var	classElements = [],
				els = node.getElementsByTagName(tag),
				elsLen = els.length,
				pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
			for (var i = 0; i < elsLen; i++) {
				if (pattern.test(els[i].className)) {
					classElements.push(els[i]);
				}
			}
			return classElements;
		}
	};

	mdx.cookie = {
		read: function _read(name) {
			if (navigator.cookieEnabled) {
				var cookie = document.cookie;
				name += '=';
				return (cookie.indexOf(name) !== -1 ? cookie.substring(cookie.indexOf(name) + name.length).split(';', 2)[0] : null);
			}
			return null;
		},
		write: function _write(name, val, expires, path) {
			if (navigator.cookieEnabled) {
				expires = (expires ? '; expires=' + expires : '');
				document.cookie = name + '=' + val + expires + '; path=' + (path || '/');
			}
			return this;
		},
		remove: function (name) {
			alert('Deleting cookies is not supported yet.');
		}
	};

	mdx.trim = function (text) {
		return text.replace(/^\s+/, '').replace(/\s+$/, '');
	};

	mdx.hasClass = function (node, className) {
		if (typeof(node) === 'string') { node = document.getElementById(node); }
		return (new RegExp('(^|\\s)' + className + '(\\s|$)')).test(node.className);
	};

	mdx.addClass = function (node, className) {
		if (typeof(node) === 'string') { node = document.getElementById(node); }
		if (!mdx.hasClass(node, className)) {
			return (node.className += (node.className ? ' ' : '') + className);
		}
		return node.className;
	};

	mdx.removeClass = function (node, className) {
		if (typeof(node) === 'string') { node = document.getElementById(node); }
		if (mdx.hasClass(node, className)) {
			return (node.className = mdx.trim(node.className.replace(new RegExp('(^|\\s)' + className + '(\\s|$)'),' ')));
		}
		return node.className;
	};

	mdx.contains = function (nodeParent, nodeChild) {
		if (typeof(nodeParent.contains) !== 'undefined') {
			return nodeParent.contains(nodeChild);
		} else {
			return !!(nodeParent.compareDocumentPosition(nodeChild) & 16);
		}
	};

	mdx.addFavorite = function (url, title) {
		if (window.sidebar) {
			// Firefox
			window.sidebar.addPanel(title, url, '');
		}
		else if(window.opera && window.print) {
			// Opera
			var elem = document.createElement('a');
			elem.setAttribute('href', url);
			elem.setAttribute('title', title);
			elem.setAttribute('rel', 'sidebar');
			elem.click();
		}
		else if(document.all) {
			// IE
			window.external.AddFavorite(url, title);
		}
	};

	mdx.stripText = function (text, len, attach) {
		attach = attach || '';

		var retText = text.substr(0, len);

		return retText + (text != retText ? attach : '');
	};

	mdx.formatNumber = function (num) {
		var sign = '', decPoint, intPlaces, decPlaces = '', intPlacesOut;

		if (typeof num == 'string') { num = parseFloat(num); }
			
		if (num < 0) {
			sign = '-';
			num = -num;
		}

		num = num.toString();

		decPoint = num.indexOf('.');
		if (decPoint != -1) {
			intPlaces = num.substr(0, decPoint);
			decPlaces = num.substr(decPoint + 1);
		} else {
			intPlaces = num;
		}

		if (intPlaces.length > 3) {		
			intPlacesOut = intPlaces.substr(intPlaces.length - 3);
		} else {
			intPlacesOut = intPlaces;
		}
		for (var i = intPlaces.length - 6; i >= -2; i -= 3) {
			if (i >= 0) {
				intPlacesOut = intPlaces.substr(i, 3) + '.' + intPlacesOut;
			} else {
				intPlacesOut = intPlaces.substr(0, 3 + i) + '.' + intPlacesOut;
				break;
			}
		}
		return sign + intPlacesOut + (decPoint != -1 ? ',' + decPlaces : '');
	};

	mdx.unselectable = function (elem) {
		if (elem === undefined) { return; }
		mdx.addEvent(elem, "selectstart", function () { return false; });
		elem.style.MozUserSelect = "none";
		elem.style.KhtmlUserSelect = "none";
		elem.unselectable = "on";
	};

	mdx.opacity = function (elem, opacity) {
		if (elem === undefined) { return; }
		elem.style.opacity = opacity || 1.0;
		elem.style.filter = "Alpha(style=0, opacity=" + ((opacity || 1.0) * 100) + ")";
	};

	mdx.stack = function () {
		if (typeof(console) === 'object' && typeof(console.log) === 'function') {
			try { mdx.mdx.mdx.mdx; } catch (e) { console.log('mdx.stack:\n' + e.stack) }
		}
	};

	mdx.script = function (adr, query) {
		query = query || {};
		if (!query['preventCache']) {
			query['preventCache'] = (new Date()).getTime();
		}

		var script = document.createElement('script');
		script.type = 'text/javascript';
		script.src = adr + mdx.queryFromObject(query);
		script.charset = 'UTF-8';
		document.getElementsByTagName('head')[0].appendChild(script);
	};

	mdx.queryFromObject = function (obj) {
		var queryString, param;
		for (param in obj) {
			if (obj[param]) {
				queryString = (queryString ? queryString + '&' : '?') + encodeURIComponent(param) + '=' + encodeURIComponent(obj[param]);
			}
		}
		return (queryString || '');
	};

	mdx.getQueryObject = function (form) {
		var query = {},
			elems = (typeof(form) === 'string' ? document.getElementById(form) : form).elements;

		for (var e = 0; e < elems.length; e++) {
			if (elems[e].nodeName && elems[e].name) {
				switch (elems[e].nodeName.toLowerCase()) {
					case 'input':
						switch (elems[e].type.toLowerCase()) {
							case 'text':
							case 'hidden':
								if (elems[e].value) {
									query[elems[e].name] = elems[e].value;
								}
								break;
							case 'checkbox':
								if (elems[e].checked && elems[e].value) {
									query[elems[e].name] = elems[e].value;
								}
								break;
						}
						break;
					case 'select':
						if (elems[e].options[elems[e].selectedIndex].value) {
							query[elems[e].name] = elems[e].options[elems[e].selectedIndex].value;
						}
						break;
				}
			}
		}
		return query;
	};

	mdx.replaceholder = function (form, placeholderColor) {
		// Nur im IE
		if (!(!!window.attachEvent && !isOpera)) { return; }

		if (typeof(form) === 'string') {
			form = document.getElementById(form);
		}
		if (!form) {
			return;
		}

		placeholderColor = placeholderColor || '#888';

		for (var e in form.elements) {
			if (form.elements[e] && typeof(form.elements[e].nodeName) === 'string' && (
				(form.elements[e].nodeName.toUpperCase() === 'INPUT' && form.elements[e].type.toLowerCase() === 'text') ||
				(form.elements[e].nodeName.toUpperCase() === 'TEXTAREA')
			) && form.elements[e].getAttribute('placeholder')) {
				if (form.elements[e].value.length === 0) {
					form.elements[e].value = form.elements[e].getAttribute('placeholder');
					form.elements[e].style.color = placeholderColor;
				}
				mdx.addEvent(form.elements[e], 'focus', function () {
					if (this.value === this.getAttribute('placeholder')) {
						this.value = '';
						this.style.color = '#000';
					}
				}, false);
				mdx.addEvent(form.elements[e], 'blur', function () {
					if (this.value === '') {
						this.value = this.getAttribute('placeholder');
						this.style.color = placeholderColor;
					}
				}, false);
			}
		}

		var onSubmit = null;
		if (form.onsubmit) {
			onSubmit = form.onsubmit;
			form.onsubmit = function () {};
		}
		mdx.addEvent(form, 'submit', (function (onSubmit) { return function (event) {
			for (var e in this.elements) {
				if (this.elements[e] && typeof(this.elements[e].nodeName) === 'string' && (
					(this.elements[e].nodeName.toUpperCase() === 'INPUT' && this.elements[e].type.toLowerCase() === 'text') ||
					(this.elements[e].nodeName.toUpperCase() === 'TEXTAREA')
				) && this.elements[e].getAttribute('placeholder') && this.elements[e].value === this.elements[e].getAttribute('placeholder')) {
					this.elements[e].value = '';
					this.elements[e].style.color = '#000';
				}
			}

			if (typeof(onSubmit) === 'function') {
				var retValue = onSubmit.call(this);
				if (retValue === false) {
					for (var e in this.elements) {
						if (this.elements[e] && typeof(this.elements[e].nodeName) === 'string' && (
							(this.elements[e].nodeName.toUpperCase() === 'INPUT' && this.elements[e].type.toLowerCase() === 'text') ||
							(this.elements[e].nodeName.toUpperCase() === 'TEXTAREA')
						) && this.elements[e].getAttribute('placeholder')) {
							if (this.elements[e].value.length === 0) {
								this.elements[e].value = this.elements[e].getAttribute('placeholder');
								this.elements[e].style.color = placeholderColor;
							}
						}
					}
					if (event.preventDefault) {
						event.preventDefault();
					} else {
						event.returnValue = false;
					}
					return false;
				}
			}
		} })(onSubmit));
	};

	/* --- Session-ID aus Adresse übernehmen --- */

	var sessionId = /\/go.to\/([0-9a-z]{32})\//.exec(window.location.href);
	if (sessionId && sessionId.length === 2 && sessionId[1] != mdx.cookie.read('MdxUserSession')) {
		mdx.cookie.write('MdxUserSession', sessionId[1]);
	}

	/* --- Browser-Version dem html-Tag hinzufügen --- */

	var	ua = navigator.userAgent,
		isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';

	try {
		mdx.addClass(document.documentElement, 'js');

		if (!!window.attachEvent && !isOpera) {
			mdx.addClass(document.documentElement, 'ie');
			mdx.addClass(document.documentElement, 'ie' + parseInt(/MSIE (\d+\.\d+);/.exec(navigator.userAgent)[1]));

			/* Make HTML5-tags available for older IE versions */
			var html5 = ['abbr','article','aside','audio','canvas','datalist','details','figcaption','figure','footer','header','hgroup','mark','meter','nav','output','progress','section','summary','time','video'], e;
			for (e in html5) {
				document.createElement(html5[e]);
			}
		} else if (isOpera) {
			mdx.addClass(document.documentElement, 'opera');
		} else if (ua.indexOf('AppleWebKit/') > -1) {
			mdx.addClass(document.documentElement, 'webkit');

			if (ua.indexOf('iPhone') > -1) {
				mdx.addClass(document.documentElement, 'ios');
				mdx.addClass(document.documentElement, 'iphone');
			} else if (ua.indexOf('iPod') > -1) {
				mdx.addClass(document.documentElement, 'ios');
				mdx.addClass(document.documentElement, 'ipod');
			} else if (ua.indexOf('iPad') > -1) {
				mdx.addClass(document.documentElement, 'ios');
				mdx.addClass(document.documentElement, 'ipad');
			} else if (ua.indexOf('Android') > -1) {
				mdx.addClass(document.documentElement, 'android');
			}
		} else if (ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1) {
			mdx.addClass(document.documentElement, 'gecko');
			if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
				mdx.addClass(document.documentElement, 'fx' + parseInt(RegExp.$1));
			}
		} else if (ua.indexOf('Blackberry') > -1) {
			mdx.addClass(document.documentElement, 'blackberry');
		}

		if (window.history.length > 1) {
			mdx.addClass(document.documentElement, 'history');
		} else {
			mdx.addClass(document.documentElement, 'nohistory');
		}

		if (
			('MozTransition' in document.documentElement.style) ||
			('WebkitTransition' in document.documentElement.style) ||
			('OTransition' in document.documentElement.style) ||
			('MsTransition' in document.documentElement.style) ||
			('transition' in document.documentElement.style)
		) { mdx.addClass(document.documentElement, 'transition'); }
	} catch (e) { }
})(window);
