/* Kodierung: UTF-8 */

/* ********************************************************************************************* */

function log (str) {
	if (!log.element) {
		log.element = document.createElement("div");
		log.element.id = "log";
		addClass(log.element, "log");
		if (document.body) {
			document.body.appendChild(log.element);
		} else {
			addEvent(window, "load", function (e) {
				document.body.appendChild(log.element);
			});
		}
	}
	var div = document.createElement("div");
	div.appendChild(document.createTextNode(str));
	log.element.appendChild(div);
}

/* ********************************************************************************************* */


Array.prototype.inArray = function (value) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

/* ********************************************************************************************* */

/* http://dean.edwards.name/IE7/caveats/ */

function addClass (element, className) {
	if (!hasClass(element, className)) {
		if (element.className) {
			element.className += " " + className;
		} else {
			element.className = className;
		}
	}
};
function removeClass (element, className) {
	var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
	element.className = element.className.replace(regexp, "$2");
};
function hasClass (element, className) {
	var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
	return regexp.test(element.className);
};

/* ********************************************************************************************* */

/* http://dean.edwards.name/my/events.js */

function addEvent (element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent (element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
}

function handleEvent (event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
}

function fixEvent (event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
}
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};


function getEventTarget (e) {
	if (e.target) {
		target = e.target;
	} else if (e.srcElement) {
		target = e.srcElement;
	}
	if (target.nodeType == 3) {
		target = target.parentNode;
	}
	return target;
}

/* ********************************************************************************************* */

/*
	forEach, version 1.0
	http://dean.edwards.name/base/forEach.js
	Copyright 2006, Dean Edwards
	License: http://www.opensource.org/licenses/mit-license.php
*/

// array-like enumeration
if (!Array.forEach) { // mozilla already supports this
	Array.forEach = function (array, block, context) {
		for (var i = 0; i < array.length; i++) {
			block.call(context, array[i], i, array);
		}
	};
}

// generic enumeration
Function.prototype.forEach = function (object, block, context) {
	for (var key in object) {
		if (!(key in this.prototype)) {
			block.call(context, object[key], key, object);
		}
	}
};

// globally resolve forEach enumeration
var forEach = function (object, block, context) {
	context = context || object;
	if (object) {
		var resolve = Object; // default
		if (object instanceof Function) {
			// functions have a "length" property
			resolve = Function;
		} else if (typeof object.length == "number") {
			// the object is array-like
			resolve = Array;
		}
		resolve.forEach(object, block, context);
	}
};

/* ********************************************************************************************* */

function getViewportSize () {
	var box = new Object();
	box.x = "[unbekannt]";
	box.y = "[unbekannt]";
	if (self.innerHeight) {
		box.x = self.innerWidth;
		box.y = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		box.x = document.documentElement.clientWidth;
		box.y = document.documentElement.clientHeight;
	} else if (document.body) {
		box.x = document.body.clientWidth;
		box.y = document.body.clientHeight;
	}
	return box;
}

(function stats () {
	if (!document.images || !window.Image)
		return false;

	/*
	if (window.name == "org.selfhtml.de.weblog.session_recorded")
		return false;
	window.name = "org.selfhtml.de.weblog.session_recorded";
	*/

	function addQuery (name, value) {
		if (querystring != "")
			querystring += "&";
		querystring += encode(name) + "=" + encode(value);
	}

	function encode (str) {
		if (encoding == "encodeURIComponent") {
			return encodeURIComponent(str);
		} else {
			return escape(str);
		}
	}

	var baseurl = "/weblog/statistik/count.php?";
	var querystring = "";

	var encoding;
	if (window.encodeURIComponent) {
		encoding = "encodeURIComponent";
	} else if (window.escape) {
		encoding = "escape";
	} else {
		return false;
	}
	addQuery("encoding", encoding);

	addQuery("url", location.pathname);

	addQuery("time", (new Date).getTime());

	/* -------------------------------------------------------- */

	try {
		if (window.navigator) {
			if (navigator.userAgent) {
				addQuery("navigator.userAgent", navigator.userAgent);
			} else {
				addQuery("navigator.userAgent", "[leer oder nicht verfuegbar]");
			}

			if (navigator.platform)
				addQuery("navigator.platform", navigator.platform);

			if (navigator.language)
				addQuery("navigator.language", navigator.language);
			if (navigator.userLanguage)
				addQuery("navigator.userLanguage", navigator.userLanguage);

			if (navigator.product)
				addQuery("navigator.product", navigator.product);
			if (navigator.vendor)
				addQuery("navigator.vendor", navigator.vendor);
			if (navigator.appName)
				addQuery("navigator.appName", navigator.appName);
		}
	} catch (e) {
		addQuery("navigator", "[Zugriffsfehler: " + e.name + ": " + e.message + "]");
	}

	try {
		if (window.screen) {
			if (screen.width) {
				addQuery("screen.width", screen.width);
			} else {
				addQuery("screen.width", "[leer oder nicht verfuegbar]");
			}
			if (screen.height) {
				addQuery("screen.height", screen.height);
			} else {
				addQuery("screen.height", "[leer oder nicht verfuegbar]");
			}
		}
	} catch (e) {
		addQuery("screen", "[Zugriffsfehler: " + e.name + ": " + e.message + "]");
	}

	try {
		if (document.referrer) {
			addQuery("document.referrer", document.referrer);
		} else {
			addQuery("document.referrer", "[leer oder nicht verfuegbar]");
		}
	} catch (e) {
		addQuery("document.referrer", "[Zugriffsfehler: " + e.name + ": " + e.message + "]");
	}

	var measures = getViewportSize();
	addQuery("innerwidth", measures.x);
	addQuery("innerheight", measures.y);

	/* -------------------------------------------------------- */

	var img = new Image();
	img.src = baseurl + querystring;

})();

/* ********************************************************************************************* */
