﻿// browser detect object
var is = {
	opera: !!window.opera,
	ie: /*@cc_on!@*/false,
	gteIE7: false /*@cc_on || window.XMLHttpRequest @*/,
	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;
}

function bgAnim(opacity, maxhdrs) {
	var hb1 = document.getElementById('headerback1');
	var hb2 = document.getElementById('headerback2');

	if (hb1 && hb2) {
		var wait = 50;
		var t,b;
		
		if (hb1.style.zIndex<hb2.style.zIndex) {
			t = hb2; b = hb1;
		} else {
			t = hb1; b = hb2;
		}
		
		if (opacity<=0) {
			t.style.zIndex = 0; b.style.zIndex = 1;
			t.style.backgroundImage = getRandomBG(maxhdrs);
			opacity = 1;
			wait = 10000;
		} else {
			opacity -= .025;
		}
		
		setOpacity(t, opacity);
		window.setTimeout(function() { bgAnim(opacity, maxhdrs);}, wait);
	}
}

function getRandomBG(maxhdrs) {
	return 'url(\'/img/tophdrs/hdr' + (Math.floor(Math.random()*maxhdrs)+1) + '.jpg\')';
}

function setOpacity(elem, value) {
	elem.style.opacity = value;
	elem.style.filter = 'alpha(opacity=' + (value*100) + ')';
}

function initPage(maxhdrs) {
	externalLinks();
	if (!is.ie || is.gteIE7) {
		document.getElementById('headerback2').style.backgroundImage = getRandomBG(maxhdrs);
		bgAnim(1, maxhdrs);
	}
}
