﻿// browser detect object
var is = {
	opera: !!window.opera,
	ie: /*@cc_on!@*/false,
	khtml: navigator.userAgent.indexOf('KHTML') > -1,
	gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
	webkit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
	mac: navigator.userAgent.indexOf('Macintosh') > -1
}

// execute methods on DOMload
var DomLoaded =
{
	onload: [],
	loaded: function()
	{
		if (DomLoaded.done) return;
		DomLoaded.done = true;

		if (DomLoaded.timer)
			clearInterval(DomLoaded.timer);

		if (DomLoaded.onload.length)
			DomLoaded.execute();
	},
	load: function(fireThis)
	{
		DomLoaded.onload.push(fireThis);

		if (DomLoaded.onload.length == 1)
		{
			if (document.addEventListener)
			{
				document.addEventListener('DOMContentLoaded', DomLoaded.loaded, false);

				//  check document.readyState for WebKit/KHTML as long as they don't support DOMContentLoaded
				if (is.webkit || is.khtml)
				{
					DomLoaded.timer = setInterval(function()
					{
						if (/loaded|complete/.test(document.readyState))
							DomLoaded.loaded();
					}, 10);
				}
			}
			else
			{
				DomLoaded.timer = setInterval(function()
				{
					if (document.getElementById('domLoaded'))
						DomLoaded.loaded();
				}, 10);
			}

			// generic fallback
			addEvent(window, 'load', DomLoaded.loaded);
		}
	},
	execute: function()
	{
		var func = DomLoaded.onload.shift();

		if (typeof func == 'function')
			func();

		if (DomLoaded.onload.length)
			setTimeout(DomLoaded.execute, 10);
	}
}

// generic eventhandling
var addEvent = function()
{
	if (document.addEventListener)
	{
		function checkMouseLeaveOrEnter(element, handler)
		{
			return function(e)
			{
				var target = e.relatedTarget || (e.type == 'mouseover' ? e.fromElement : e.toElement);
				while (target)
				{
					if (target == element)
						return;

					target = target.parentNode;
				}

				return handler.call(this, e);
			}
		}

		return function(element, type, handler)
		{
			if (type == 'mouseenter')
			{
				type = 'mouseover';
				handler = checkMouseLeaveOrEnter(element, handler);
			}
			else if (type == 'mouseleave')
			{
				type = 'mouseout';
				handler = checkMouseLeaveOrEnter(element, handler);
			}

			element.addEventListener(type, handler, false);
		}
	}
	else
	{
		function handleEvent(event)
		{
			event = event || fixEvent(window.event);

			var handlers = this.events[event.type], returnValue;
			for (var i in handlers)
			{
				if (handlers.hasOwnProperty(i) && handlers[i].call(this, event) === false)
					returnValue = false;
			}

			return returnValue;
		}
		function fixEvent(event)
		{
			event.preventDefault = preventDefault;
			event.stopPropagation = stopPropagation;
			event.target = event.srcElement;

			return event;
		}
		function preventDefault() { this.returnValue = false; }
		function stopPropagation() { this.cancelBubble = true; }
		function removeAllEvents()
		{
			while ((cachedEvent = eventCache.pop()))
				removeEvent(cachedEvent.element, cachedEvent.type, cachedEvent.handler);
		}

		var guid = 1;
		var eventCache = [];

		return function(element, type, handler)
		{
			if (!handler.$$guid) handler.$$guid = guid++;
			if (!element.events) element.events = {};
			if (!element.events[type])
			{
				element.events[type] = {};
				if (element['on' + type]) element.events[type][0] = element['on' + type];
				element['on' + type] = handleEvent;
			}

			element.events[type][handler.$$guid] = handler;

			if (type != 'unload')
			{
				if (!eventCache.length)
					addEvent(window, 'unload', removeAllEvents);

				eventCache.push(
					{
						element: element,
						type: type,
						handler: handler
					}
				);
			}
		}
	}
}();

var removeEvent = function()
{
	if (document.removeEventListener)
	{
		return function(element, type, handler)
		{
			element.removeEventListener(type, handler, false);
		}
	}
	else
	{
		return function(element, type, handler)
		{
			if (element.events && element.events[type] && handler.$$guid)
				delete element.events[type][handler.$$guid];
		}
	}
}();

RegExp.escape = function(string) {
	return string.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
}

function externalLinks() {
	var sameDomainCheck = new RegExp('^https?://(\\w+\\.)?' + RegExp.escape(document.domain) + '(/|$)');
	var isMailtoCheck = new RegExp('^mailto:');
	
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && ((/external/.test(anchor.getAttribute("rel")) || (!sameDomainCheck.test(anchor.href) && !isMailtoCheck.test(anchor.href)))))
		{
			anchor.target = "_blank";
			//if (anchor.hasChildNodes() && anchor.firstChild.nodeName == '#text')
			//	anchor.className += ((anchor.className.length>0 ? ' ' : '') + 'external');
		}
	}
}

function toggleoptionsblock(sname, sdesc, bshow) {
		var opt = document.getElementById(sname + '_t');
		var blk = document.getElementById(sname);

		if (opt && blk) {
			blk.style.display = bshow ? 'block' : 'none';
			opt.style.display = 'block';
			opt.firstChild.className = bshow ? 'active' : '';
			opt.firstChild.innerHTML = (bshow ? 'Verberg ' : 'Toon ') + sdesc;
		}
		return false;
}