﻿var ScriptFragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
/**
 * Allgemeine Funktionen
 */
var isString = function(obj) {
	return typeof (obj) == 'string';
};
var isNumber = function(obj) {
	return typeof (obj) == 'number';
};
var isBoolean = function(obj) {
	return typeof (obj) == 'boolean';
};
var isFunction = function(obj) {
	return typeof (obj) == 'function';
};
var isObject = function(obj) {
	return (typeof (obj) == 'object') || isFunction(obj);
};
var isArray = function(obj) {
	return isObject(obj) && obj instanceof Array;
};
var isDate = function(obj) {
	return isObject(obj) && obj instanceof Date;
};
var isError = function(obj) {
	return isObject(obj) && obj instanceof Error;
};
var isUndefined = function(obj) {
	return typeof (obj) == 'undefined';
};
var isNull = function(obj) {
	return obj === null;
};
var isNone = function(obj) {
	return isUndefined(obj) || isNull(obj);
};
var isSet = function(obj) {
	return !isNone(obj);
};
var isTrue = function(obj) {
	return isSet(obj) && !!obj;
};
var isFalse = function(obj) {
	return isSet(obj) && !obj;
};
var isEmpty = function(obj) {
	switch (typeof (obj)) {
		case 'undefined' :
			return true;
		case 'string' :
			return obj == '';
		case 'number' :
			return obj == 0;
		case 'boolean' :
			return obj == false;
		case 'function' :
			for ( var i in obj) {
				if (!(isSet(Function.prototype[i]))) {
					return false;
				}
			}
			;
			return (obj.toString() == (function() {}).toString());
		case 'object' :
			if (obj === null) {
				return true;
			}
			;
			var pt = Object.prototype;
			if (isArray(obj)) {
				pt = Array.prototype;
			}
			;
			if (isError(obj)) {
				pt = Error.prototype;
			}
			;
			for ( var i in obj) {
				if (!(isSet(pt[i]))) {
					return false;
				}
			}
			;
			return true;
		default :
			return false;
	}
};
var runOnLoad = function(f) {
	if (runOnLoad.loaded) {
		f(); /* If already loaded, just invoke f() now. */
	} else {
		runOnLoad.funcs.push(f); /* Otherwise, store it for later */
	}
};
var runOnLoadFinish = function(f) {
	if (runOnLoad.loaded) {
		f(); /* If already loaded, just invoke f() now. */
	} else {
		runOnLoad.finish.push(f); /* Otherwise, store it for later */
	}
};
runOnLoad.funcs = []; /* The array of functions to call when the document */
runOnLoad.loaded = false; /* The functions have not been run yet. */
runOnLoad.finish = [];
/*
 * Run all registered functions in the order in which they were registered. It is safe to call runOnLoad.run() more than
 * once: invocations after the first do nothing. It is safe for an initialization function to call runOnLoad() to
 * register another function.
 */
runOnLoad.run = function() {
	if (runOnLoad.loaded) {
		return;
	};
	for ( var i = 0; i < runOnLoad.funcs.length; i++) {
		try {
			runOnLoad.funcs[i]();
		} catch (e) {
			/* An exception in one function shouldn't stop the rest */
		}
	};
	runOnLoad.loaded = true;
	delete runOnLoad.funcs;
	delete runOnLoad.run;
	runOnLoad.finish.each(function(f) {
		f.call(f);
	});
	delete runOnLoad.finish;
};
if (window.addEventListener) {
	window.addEventListener("load", runOnLoad.run, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", runOnLoad.run);
} else {
	window.onload = runOnLoad.run;
};
var getEl = function(el) {
	return (document.getElementById(el));
};
var embedflash = function(src, w, h, v) {
	var id = getUniqueID();
	document.write('<span id="flash' + id + '"></span>');
	runOnLoad(function() {
		var swf = new SWFObject(src, "flash" + id + "obj", w, h, v || "8");
		swf.addParam('wmode', 'transparent');
		swf.addParam('allowscriptaccess', 'always');
		swf.addParam('allowfullscreen', 'true');
		swf.useExpressInstall(basepath + '_/flash/expressinstall.swf');
		swf.write("flash" + id);
	});
};
var embedMoviePlayer = function(src, w, h, v, a) {
	var id = getUniqueID();
	document.write('<span id="flash' + id + '"></span>');
	var swf = new SWFObject(basepath + '_/flash/moviePlayer.swf', "flash" + id + "obj", w || 400, h || 362, v || "8");
	swf.addParam('wmode', 'transparent');
	swf.addParam('allowFullScreen', 'true');
	swf.addVariable("skinSource", basepath + '_/flash/SkinUnderAllNoCaption.swf');
	swf.addVariable("streamSource", src);
	if (typeof a != 'undefined') {
		swf.addVariable("startPlay", a);
	};
	swf.useExpressInstall(basepath + '_/flash/expressinstall.swf');
	swf.write("flash" + id);
};
var getUniqueID = function() {
	uniqueID = (new Date()).getTime() + "" + Math.floor((Math.random() * 8999) + 1000);
	return (uniqueID);
};
var apply = function(o, c, defaults) {
	if (defaults) {
		attributeApply(o, defaults);
	};
	if (o && c && (typeof c == 'object')) {
		for ( var p in c) {
			o[p] = c[p];
		}
	};
	return o;
};
var owin = function(url, config) {
	var win;
	var winconfig = {};
	var stdconfig = {
		name : 'popupwin',
		width : 800,
		height : 600,
		scrollbars : 'yes',
		resizable : 'yes',
		left : 0,
		top : 0,
		toolbar : 'no',
		menubar : 'no'
	};
	winconfig = apply(winconfig, config || stdconfig);
	win = window.open(url, winconfig.name, 'width=' + winconfig.width + ',height=' + winconfig.height + ',scrollbars=1,resizable=1');
	win.focus();
	return (win);
};
var cmsMessages = [];
var msgBox = function(title, text, typ, handleFunction) {
	var msg = Ext.MessageBox;
	if (!typ) {
		typ = "ok";
	};
	var modal = false;
	switch (typ) {
		case "continuesave" :
			buttons = {
				yes : translate('Speichern'),
				no : translate('Nicht speichern'),
				cancel : translate('Abbrechen')
			};
			break;
		case "continue" :
			buttons = {
				yes : translate('Weiter'),
				cancel : translate('Abbrechen')
			};
			break;
		case "yesno" :
		case "yesnomodal" :
			buttons = {
				yes : 'Ja',
				no : 'Nein'
			};
			if (typ == "yesnomodal") {
				modal = true;
			}
			;
			break;
		case "ok" :
		case "okmodal" :
			if (typ == "okmodal") {
				modal = true;
			}
			;
			buttons = {
				ok : 'OK'
			};
			break;
		case "okcancel" :
		case "okcancelmodal" :
			if (typ == "okcancelmodal") {
				modal = true;
			}
			;
			buttons = {
				ok : 'OK',
				cancel : translate('Abbrechen')
			};
			break;
		case "login" :
			buttons = {
				yes : 'Login'
			};
			break;
	};
	if (msg.isVisible()) {
		if (!msg.currentMessages) {
			msg.currentMessages = [];
		};
		msg.currentMessages.push(text);
		text = msg.currentMessages.join("<hr>");
	};
	msg.show({
		title : title || translate('Hinweis'),
		msg : text || cmsMessages.join("<hr>"),
		buttons : buttons,
		modal : modal,
		progress : false,
		closable : false,
		width : 400,
		fn : handleFunction || null
	});
	msg.currentMessages = cmsMessages;
	cmsMessages = [];
};
var setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
	document.cookie = escape(cookieName) + '=' + escape(cookieValue) + (expires ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '');
};
var getCookie = function(cookieName) {
	var cookieValue = '';
	var posName = document.cookie.indexOf(escape(cookieName) + '=');
	if (posName != -1) {
		var posValue = posName + (escape(cookieName) + '=').length;
		var endPos = document.cookie.indexOf(';', posValue);
		if (endPos != -1) {
			cookieValue = unescape(document.cookie.substring(posValue, endPos));
		} else {
			cookieValue = unescape(document.cookie.substring(posValue));
		}
	};
	return (cookieValue);
};
var decode = function(json, onlyLast) {
	var ret;
	var succes = false;
	try {
		ret = eval("(" + json + ')');
		succes = true;
		throw "decoded";
	} catch (e) {
		if (e == "decoded") {
			return (ret);
		} else if ((typeof e == "object") && e.name && (e.name == "SyntaxError")) {
			try {
				if (onlyLast) {
					ret = eval(json.extractScripts().last());
				} else {
					ret = json.evalScripts();
				};
				succes = true;
				throw "decoded";
			} catch (e) {
				if (e == "decoded") {
					return (ret);
				}
			}
		}
	}
};
Object.extend = function(destination, source) {
	for ( var property in source) {
		destination[property] = source[property];
	};
	return destination;
};
var $A = Array.from;
$A = function(iterable) {
	if (!iterable) {
		return [];
	};
	if (iterable.toArray) {
		return iterable.toArray();
	} else {
		var results = [];
		for ( var i = 0, length = iterable.length; i < length; i++) {
			results.push(iterable[i]);
		};
		return results;
	}
};
Object.extend(Array.prototype, {
	each : function(iterator) {
		for ( var i = 0, length = this.length; i < length; i++) {
			iterator(this[i]);
		}
	},
	clear : function() {
		this.length = 0;
		return this;
	},
	collect : function(iterator) {
		var results = [];
		this.each(function(value, index) {
			results.push(iterator(value, index));
		});
		return results;
	},
	first : function() {
		return this[0];
	},
	last : function() {
		return this[this.length - 1];
	},
	compact : function() {
		return this.select(function(value) {
			return value !== undefined || value !== null;
		});
	},
	flatten : function() {
		return this.inject([], function(array, value) {
			return array.concat(value && (value.constructor == Array) ? value.flatten() : [
				value
			]);
		});
	},
	without : function() {
		var values = $A(arguments);
		return this.select(function(value) {
			return !values.include(value);
		});
	},
	indexOf : function(object) {
		for ( var i = 0, length = this.length; i < length; i++) {
			if (this[i] == object) {
				return i;
			}
		};
		return -1;
	},
	reverse : function(inline) {
		return (inline !== false ? this : this.toArray())._reverse();
	},
	reduce : function() {
		return this.length > 1 ? this : this[0];
	},
	clone : function() {
		return [].concat(this);
	},
	inspect : function() {
		return '[' + this.map(Object.inspect).join(', ') + ']';
	},
	findAll : function(iterator) {
		var results = [];
		this.each(function(value, index) {
			if (iterator(value, index)) {
				results.push(value);
			}
		});
		return results;
	},
	include : function(object) {
		var found = false;
		this.each(function(value) {
			if (value == object) {
				found = true;
			}
		});
		return found;
	},
	uniq : function() {
		var a2 = [];
		var a3 = [];
		for ( var i = 0; i < this.length; i++) {
			if (typeof (a2[this[i]]) == "undefined") {
				a2[this[i]] = true;
				a3[a3.length] = this[i];
			}
		};
		var a4 = [];
		for (i = 0; i < a3.length; i++) {
			a4[a4.length] = a3[i];
		};
		return a4;
	},
	shuffle : function() {
		for ( var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x) {
			;
		}
	}
});
Object.extend(Array.prototype, {
	map : Array.prototype.collect,
	select : Array.prototype.findAll,
	member : Array.prototype.include
});
String.interpret = function(value) {
	return value == null ? '' : String(value);
};
Object.extend(String.prototype, {
	gsub : function(pattern, replacement) {
		var result = '', source = this, match;
		replacement = arguments.callee.prepareReplacement(replacement);
		while (source.length > 0) {
			match = source.match(pattern);
			if (match) {
				result += source.slice(0, match.index);
				result += (replacement(match) || '').toString();
				source = source.slice(match.index + match[0].length);
			} else {
				result += source;
				source = '';
			}
		};
		return result;
	},
	sub : function(pattern, replacement, count) {
		replacement = this.gsub.prepareReplacement(replacement);
		count = count === undefined ? 1 : count;
		return this.gsub(pattern, function(match) {
			if (--count < 0) {
				return match[0];
			};
			return replacement(match);
		});
	},
	scan : function(pattern, iterator) {
		this.gsub(pattern, iterator);
		return this;
	},
	truncate : function(length, truncation) {
		length = length || 30;
		truncation = truncation === undefined ? '...' : truncation;
		return this.length > length ? this.slice(0, length - truncation.length) + truncation : this;
	},
	strip : function() {
		return this.replace(/^\s+/, '').replace(/\s+$/, '');
	},
	stripTags : function() {
		return this.replace(/<\/?[^>]+>/gi, '');
	},
	stripScripts : function() {
		return this.replace(new RegExp(ScriptFragment, 'img'), '');
	},
	extractScripts : function() {
		var matchAll = new RegExp(ScriptFragment, 'img');
		var matchOne = new RegExp(ScriptFragment, 'im');
		return (this.match(matchAll) || []).map(function(scriptTag) {
			return (scriptTag.match(matchOne) || [
				'',
				''
			])[1];
		});
	},
	evalScripts : function() {
		return this.extractScripts().map(function(script) {
			return eval(script);
		});
	},
	escapeHTML : function() {
		var div = document.createElement('div');
		var text = document.createTextNode(this);
		div.appendChild(text);
		return div.innerHTML;
	},
	unescapeHTML : function() {
		var div = document.createElement('div');
		div.innerHTML = this.stripTags();
		return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
	},
	toQueryParams : function() {
		var match = this.strip().match(/[^?]*$/)[0];
		if (!match) {
			return {};
		};
		var pairs = match.split('&');
		return pairs.inject({}, function(params, pairString) {
			var pair = pairString.split('=');
			var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;
			params[decodeURIComponent(pair[0])] = value;
			return params;
		});
	},
	toDirName : function() {
		var dirName = this;
		dirName = dirName.toLowerCase();
		dirName = dirName.replace(/Ã¤/gi, 'ae');
		dirName = dirName.replace(/Ã¶/gi, 'oe');
		dirName = dirName.replace(/Ã¼/gi, 'ue');
		dirName = dirName.replace(/ÃŸ/gi, 'ss');
		dirName = dirName.replace(/[^a-z0-9\-]+/gi, '');
		return (dirName);
	},
	toArray : function() {
		return this.split('');
	},
	camelize : function() {
		var oStringList = this.split('-');
		if (oStringList.length == 1) {
			return oStringList[0];
		};
		var camelizedString = this.indexOf('-') === 0 ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) : oStringList[0];
		for ( var i = 1, length = oStringList.length; i < length; i++) {
			var s = oStringList[i];
			camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
		};
		return camelizedString;
	},
	inspect : function(useDoubleQuotes) {
		var escapedString = this.replace(/\\/g, '\\\\');
		if (useDoubleQuotes) {
			return '"' + escapedString.replace(/"/g, '\\"') + '"';
		} else {
			return "'" + escapedString.replace(/'/g, '\\\'') + "'";
		}
	}
});
String.prototype.gsub.prepareReplacement = function(replacement) {
	if (typeof replacement == 'function') {
		return replacement;
	};
	var template = new Template(replacement);
	return function(match) {
		return template.evaluate(match);
	};
};
String.prototype.parseQuery = String.prototype.toQueryParams;
var Template = {};
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
Template.prototype = {
	initialize : function(template, pattern) {
		this.template = template.toString();
		this.pattern = pattern || Template.Pattern;
	},
	evaluate : function(object) {
		return this.template.gsub(this.pattern, function(match) {
			var before = match[1];
			if (before == '\\') {
				return match[2];
			};
			return before + String.interpret(object[match[3]]);
		});
	}
};
var set_var = function(n, v, frmid) {
	var frm = false;
	var fields = [];
	if (frmid) {
		fields = Ext.select('form[id=' + frmid + '] input');
	} else {
		fields = Ext.select('input');
	};
	fields.each(function(f) {
		field = f.dom;
		if (field.name && (field.name == n)) {
			var da = field.disabled;
			field.disabled = false;
			field.value = v;
			field.disabled = da;
			frm = field.form;
		}
	});
	fields = [];
	if (frmid) {
		fields = Ext.select('#' + frmid + ' select');
	} else {
		fields = Ext.select('select');
	};
	fields.each(function(f) {
		field = f.dom;
		if (field.name && (field.name == n)) {
			var da = field.disabled;
			field.disabled = false;
			field.value = v;
			field.disabled = da;
			frm = field.form;
		}
	});
	return (frm);
};
var get_var = function(n, frmid) {
	var fieldvalue = false;
	var fields = [];
	if (frmid) {
		fields = Ext.select('form[id=' + frmid + '] input');
	} else {
		fields = Ext.select('input');
	};
	fields.each(function(f) {
		if (fieldvalue) {
			return (fieldvalue);
		};
		var field = f.dom;
		if (field.name && (field.name == n)) {
			fieldvalue = field.value;
		}
	});
	fields = [];
	if (frmid) {
		fields = Ext.select('#' + frmid + ' select');
	} else {
		fields = Ext.select('select');
	};
	fields.each(function(f) {
		if (fieldvalue) {
			return (fieldvalue);
		};
		var field = f.dom;
		if (field.name && (field.name == n)) {
			fieldvalue = field.value;
		}
	});
	return (fieldvalue);
};
/**
 * Sonstige Funktionen
 */
var cmslogin = function(f) {
	if (f.elements['username'].value.length && f.elements['password'].value.length) {
		f.elements['response'].value = MD5(f.elements['password'].value);
		f.elements['password'].value = "";
		return (true);
	};
	return (false);
};
var cmslogoff = function(f) {
	f.submit();
};
var convertSelect = function(el) {
	var fld = Ext.get(el);
	if (fld) {
		var converted = new Ext.form.ComboBox({
			typeAhead : false,
			triggerAction : 'all',
			transform : fld,
			width : 204,
			forceSelection : true,
			displayField : 'text',
			valueField : 'value'
		});
		converted.show();
		converted.on('select', function(el) {
			if (el.el.dom.form.name && el.el.dom.form.name != '' && cmsForms[el.el.dom.form.name]) {
				var doSubmit = (cmsForms[el.el.dom.form.name] && cmsForms[el.el.dom.form.name].fireEvent("submit"));
				if (doSubmit) {
					el.el.dom.form.submit();
				}
			} else {
				el.el.dom.form.submit();
			}
		});
	}
};
var convertDateBox = function(id, dat, name, format, width) {
	var el = Ext.get(id);
	var format = ((typeof format != 'undefined') && format !== '') ? format : 'd.m.Y';
	var width = ((typeof width != 'undefined') && width !== '') ? Number(width) : 90;
	if (el) {
		el.dom.innerHTML = "";
		Ext.menu.Menu.prototype.minWidth = 204;
		var datepicker = new Ext.form.DateField({
			format : format,
			value : dat,
			width : width,
			name : name,
			id : 'ext-' + id,
			validationEvent : 'blur',
			msgTarget : 'title'
		});
		datepicker.render(el);
		return (datepicker);
	}
};
var checkMonthViewDate = function(el, newval, oldval) {
	var m = newval.format('mY');
	var om = oldval.format('mY');
	if (m != om) {
		this.el.up('form').dom.submit();
	}
};
var createDatePicker = function(tgt, link) {
	var linkedEl = link;
	runOnLoad(function() {
		var el = Ext.get(tgt);
		if (el) {
			var cal = new Ext.DatePicker();
			cal.render(el);
			if (linkedEl) {
				cal.setValue(linkedEl.getValue());
			};
			cal.on('select', function(el, dat) {
				if (linkedEl) {
					linkedEl.setValue(dat);
				} else {
					var ecsfld = Ext.get('evstart');
					var evefld = Ext.get('evend');
					if (ecsfld && evefld) {
						ecsfld.dom.value = dat.format('d.m.Y');
						evefld.dom.value = dat.format('d.m.Y');
					};
					this.el.up('form').dom.submit();
				}
			});
		}
	});
};
var dateDiff = false;
var watchDateField = function(s, e, setRange) {
	var sf = s;
	var ef = e;
	ef.minValue = sf.getValue();
	if (!setRange) {
		dateDiff = ef.getValue().getElapsed(sf.getValue());
	} else {
		var d = sf.getValue();
		if (isDate(d)) {
			ef.setValue(d.add(Date.MILLI, dateDiff));
		}
	};
	if (!sf.hasListener('valid')) {
		sf.on('valid', function() {
			watchDateField(sf, ef, true);
			sf.el.dom.form.submit();
		});
	};
	if (!ef.hasListener('valid')) {
		ef.on('valid', function(el) {
			var d = el.getValue();
			if (isDate(d)) {
				dateDiff = d.getElapsed(sf.getValue());
			}
		});
		ef.on('invalid', function(el) {
			el.setValue(sf.getValue());
		});
	}
};
var flag = 0;
var checkForm = function() {
	document.gbook['gb[name]'].value = trim(document.gbook['gb[name]'].value);
	document.gbook['gb[content]'].value = trim(document.gbook['gb[content]'].value);
	if (document.gbook['gb[name]'].value == "") {
		msgBox("", translate("Sie haben noch keinen Namen eingegeben!"), "okmodal", function() {
			document.gbook['gb[name]'].focus();
		});
		return false;
	};
	if (document.gbook['gb[content]'].value == "") {
		msgBox("", translate("Sie haben noch keinen Beitrag eingeben!"), "okmodal", function() {
			document.gbook['gb[content]'].focus();
		});
		return false;
	};
	if (document.gbook['gb[title]'].value == "") {
		msgBox("", translate("Sie haben noch keinen Titel eingeben!"), "okmodal", function() {
			document.gbook['gb[title]'].focus();
		});
		return false;
	};
	if (document.gbook['gb[code]'] && document.gbook['gb[code]'].value == "") {
		msgBox("", translate("Sie haben keinen Code angegeben."), "okmodal", function() {
			document.gbook['gb[code]'].focus();
		});
		return false;
	};
	if ((document.gbook['gb[content]'].value.length < 6) || (document.gbook['gb[content]'].value.length > 2000)) {
		msgBox("", translate("Der Beitrag ist entweder zu kurz oder zu lang."), "okmodal", function() {
			document.gbook['gb[content]'].focus();
		});
		return false;
	};
	flag = 1;
	return true;
};
var trim = function(value) {
	startpos = 0;
	while ((value.charAt(startpos) == " ") && (startpos < value.length)) {
		startpos++;
	};
	if (startpos == value.length) {
		value = "";
	} else {
		value = value.substring(startpos, value.length);
		endpos = (value.length) - 1;
		while (value.charAt(endpos) == " ") {
			endpos--;
		};
		value = value.substring(0, endpos + 1);
	};
	return (value);
};
var emoticon = function(text) {
	text = ' ' + text + ' ';
	if (document.gbook['gb[content]'].createTextRange && document.gbook['gb[content]'].caretPos) {
		var caretPos = document.gbook['gb[content]'].caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
		document.gbook['gb[content]'].focus();
	} else {
		document.gbook['gb[content]'].value += text;
		document.gbook['gb[content]'].focus();
	}
};
var showpic = function(url) {
	var aWin = window.open(url, "userfile", "width=400,height=400,left=0,top=0,scrollbars=yes,resizable=yes");
};
var tabs = {};
var panels = [];
var addTab = function(tabel, tgtel, desc, url, usecookie, beforetabchange) {
	var updurl = url != '' ? url : false;
	var tabpanel = Ext.get(tgtel);
	var tabcnt = Ext.get(tabel);
	if (tabpanel && tabcnt) {
		tabcnt.dom.style.visibility = 'hidden';
		if (!tabs[tgtel]) {
			tabs[tgtel] = new Ext.TabPanel(tabpanel, {
				resizeTabs : true,
				usecookie : (typeof (usecookie) == 'undefined') ? true : usecookie
			});
			tabs[tgtel].on('tabchange', tabChange);
			if (isFunction(beforetabchange)) {
				tabs[tgtel].on('beforetabchange', beforetabchange);
			};
			panels.push(tgtel);
		};
		runOnLoad(function() {
			var tab = tabs[tgtel].addTab(tabel, desc || "");
			if (updurl) {
				tab.on('activate', function(p, t) {
					if (t.loaded) {
						return;
					};
					t.setContent(tab.getUpdateManager().indicatorText);
					Ext.Ajax.request({
						url : updurl,
						method : 'post',
						params : 'ajreq=1',
						success : function(req) {
							t.setContent(req.responseText);
							decode(req.responseText);
							t._setLoaded();
							preparePager(t);
						}
					});
				});
			}
		});
	}
};
var preparePager = function(t) {
	var bd = t.bodyEl ? t.bodyEl : t;
	bd.select('div[class=pager]').each(function(del, cmps) {
		cmps.el.select('a').each(function(adel, acmps) {
			if (adel.dom.href == document.location.href || adel.dom.href === document.location.href + '#') {
				adel.dom.onclick = function() {
					return (false);
				};
				return;
			};
			adel.dom.onclick = function() {
				t.getUpdateManager().update(this.href, null, preparePager);
				return (false);
			};
		});
	});
};
var tabChange = function(panel, activeTab) {
	var gm = activeTab.bodyEl.select('*[id^=gmap_]');
	gm.each(function(g) {
		if (gMap.configs[g.dom.id]) {
			gMap.create(gMap.configs[g.dom.id]);
		}
	});
	setCookie(panel.el.id, activeTab.id);
};
var tabActivate = function(panelid) {
	var t = getCookie(panelid);
	if ((t == '') && tabs[panelid]) {
		var tab = tabs[panelid].getTab(0);
		if (tab) {
			t = tab.id;
		}
	};
	if ((t != '') && tabs[panelid]) {
		if (tabs[panelid].usecookie == true && tabs[panelid].getTab(t)) {
			tabs[panelid].activate(t);
		} else {
			var tabtest = tabs[panelid].getTab(0);
			if (tabtest) {
				tabs[panelid].activate(tabtest.id);
			}
		}
	} else {
		panels.each(function(panelid) {
			tabActivate(panelid);
		});
	}
};
runOnLoadFinish(tabActivate);
var hide = function(el) {
	var elm = document.getElementById(el);
	if (elm) {
		elm.style.visibility = 'hidden';
	}
};
var toggleVis = function(el, changeImg, mode) {
	var _el = Ext.get(el);
	if (!_el) {
		return;
	};
	var showAsBlock = false;
	if (mode && (mode == 'block')) {
		showAsBlock = true;
	};
	var isDisplayed = _el.isDisplayed();
	display = (isDisplayed && !showAsBlock) ? "none" : "block";
	_el.setDisplayed(display);
	if (display == 'block') {
		var m = _el.select('iframe');
		if ((m.getCount() == 1) && m.first().dom.document.frames[0].map && mapSpace) {
			var doc = m.first().dom.document.frames[0];
			var newZoom = 10; // doc.map.getBoundsZoomLevel(mapSpace);
			if (mapSpace[doc.name]) {
				var newCenter = mapSpace[doc.name].getCenter();
				gotoMapPosition(doc, newCenter, newZoom);
			}
		};
		var gm = _el.select('*[id^=gmap_]');
		gm.each(function(g) {
			if (gMap.configs[g.dom.id]) {
				gMap.create(gMap.configs[g.dom.id]);
			}
		});
	};
	if (changeImg) {
		_im = Ext.get(el + '_pic');
		if (_im) {
			if (isDisplayed && !showAsBlock) {
				_im.dom.src = basepath + '_/pics/bullet_arrow_right.gif';
				document.cookie = el + "=none;";
			} else {
				_im.dom.src = basepath + '_/pics/bullet_arrow_down.gif';
				document.cookie = el + "=block;";
			}
		}
	}
};
var setblocks = function(mode) {
	var showAsBlock = false;
	if (mode && (mode == 'block')) {
		showAsBlock = true;
	};
	if (document.cookie) {
		c = decodeURI(document.cookie);
		var cookies = c.split(";");
		for ( var d = 0; d < cookies.length; d++) {
			var cookie = cookies[d].split('=');
			var sdiv = cookie[0].replace(/ /, "");
			var elem = Ext.get(sdiv);
			if (elem) {
				_im = Ext.get(sdiv + '_pic');
				isDisplayed = cookie[1];
				if ((isDisplayed != "block") && (isDisplayed != "none")) {
					isDisplayed = "block";
				};
				elem.dom.style.display = showAsBlock ? 'block' : isDisplayed;
				if (_im) {
					if ((isDisplayed == "none") || showAsBlock) {
						_im.dom.src = basepath + '_/pics/bullet_arrow_right.gif';
					} else {
						_im.dom.src = basepath + '_/pics/bullet_arrow_down.gif';
					}
				}
			}
		}
	}
};
/**
 * DynMenü
 */
var cmsmenus = {
	elements : [],
	add : function(src_id, tgt_id, droppos, offset, nested) {
		var srcel = document.getElementById(src_id);
		var tgtel = document.getElementById(tgt_id);
		if (srcel && tgtel) {
			this.elements[this.elements.length] = src_id;
			this.elements[this.elements.length] = tgt_id;
			srcel.tgtitem = new Object();
			srcel.tgtitem.id = tgt_id;
			srcel.offset = offset;
			srcel.droppos = droppos;
			srcel.nested = nested ? true : false;
			srcel.onmouseover = function() {
				cmsmenus.showsrc(this.id);
			};
			srcel.onmouseout = function() {
				document.getElementById(this.tgtitem.id).vis = false;
				window.setTimeout("cmsmenus.hidesrc('" + this.id + "')", 100);
			};
		}
	},
	showsrc : function(el) {
		var src = document.getElementById(el);
		var tgt = document.getElementById(src.tgtitem.id);
		tgt.style.display = 'block';
		Ext.get(src.tgtitem.id).alignTo(el, src.droppos, src.offset);
		tgt.vis = true;
		tgt.onmouseover = function() {
			this.vis = true;
		};
		tgt.onmouseout = function() {
			this.vis = false;
			window.setTimeout("cmsmenus.hidetgt('" + this.id + "')", 100);
		};
	},
	hidesrc : function(el) {
		var src = document.getElementById(el);
		var tgt = document.getElementById(src.tgtitem.id);
		if (tgt.vis) {
			return;
		};
		tgt.style.display = 'none';
		window.clearTimeout();
	},
	hidetgt : function(el) {
		var tgt = document.getElementById(el);
		if (tgt.vis) {
			return;
		};
		tgt.style.display = 'none';
		window.clearTimeout();
	}
};
var dynmenu = cmsmenus;
window.onunload = function() {
	for (z = 0; z < dynmenu.elements.length; z++) {
		el = document.getElementById(dynmenu.elements[z]);
		el.vis = null;
		el.tgtitem = null;
		el.nested = null;
		el.offset = null;
		el.droppos = null;
		el.onmouseover = null;
		el.onmouseout = null;
	};
	dynmenu = null;
};
function bookmark(el, module, id) {
	var url = trfilename + '?_func=addbookmark&_nrdr=1&_mode=' + module + '&_id=' + id + '&_nc=' + getUniqueID();
	var linkfile = Ext.get(el);
	Ext.Ajax.request({
		url : url,
		method : 'get',
		success : function(req) {
			var param = decode(req.responseText);
			var bookmarkcount = Ext.get("bookmarked_sites_count");
			if (bookmarkcount) {
				bookmarkcount.dom.innerHTML = param.count;
			};
			if (linkfile) {
				linkfile.dom.title = param.title;
				linkfile.dom.innerHTML = param.text;
				switch (param.status) {
					case 'added' :
						linkfile.dom.className = 'bookmark_saved bookmark_' + module + '_saved';
						break;
					case 'removed' :
						linkfile.dom.className = 'bookmark bookmark_' + module;
						break;
				}
			}
		}
	});
};
function shop(el, module, id, hash, addtobasket) {
	var url = trfilename + '?_func=addbasket&_nrdr=1&_mode=' + module + '&_id=' + id + '&_nc=' + getUniqueID();
	if (hash) {
		url += '&_slid=' + hash;
	};
	var add = !el.className.match(/saved/);
	if (add) {
		var fc = true;
		Ext.select('form[id^=soptform]').each(function(f) {
			var elements = {};
			f.select('*[name^=sopt]').each(function(i) {
				if (i.dom.name !== "" && typeof i.dom.name !== "undefined") {
					var disabled = i.dom.getAttribute('disabled');
					if (disabled !== 'disabled') {
						if (!elements[i.dom.name]) {
							elements[i.dom.name] = {
								count : 0,
								selected : 0
							};
						};
						switch (i.dom.type) {
							case "checkbox" :
								elements[i.dom.name].count++;
								if (i.dom.checked) {
									elements[i.dom.name].selected++;
								}
								;
								break;
							case "radio" :
								elements[i.dom.name].count++;
								if (i.dom.checked) {
									elements[i.dom.name].selected++;
								}
								;
								break;
							case "select-one" :
							case "select-multiple" :
								elements[i.dom.name].count++;
								for ( var o = 0; o < i.dom.options.length; o++) {
									if (i.dom.options[o].selected) {
										elements[i.dom.name].selected++;
									}
								}
								;
								break;
							default :
								break;
						}
					};
				};
			});
			for ( var k in elements) {
				if (elements[k].selected == 0) {
					fc = false;
				}
			};
			url += '&' + Ext.Ajax.serializeForm(f.dom);
		});
		if (fc !== true) {
			msgBox(translate('Achtung'), translate('Auswahl unvollst&auml;ndig!'), 'ok');
			return (false);
		}
	} else {
		if (!addtobasket) {
			url += '&_rm=1';
		}
	};
	Ext.Ajax.request({
		url : url,
		method : 'get',
		success : function(req) {
			var param = decode(req.responseText);
			if (param.baskets) {
				foreach(param.baskets, function(v, k) {
					var basketcount = Ext.get('basket_count_' + k);
					if (basketcount) {
						basketcount.dom.innerHTML = v;
					}
				});
			};
			switch (param.status) {
				case 'added' :
					msgBox(translate('Warenkorb'), translate('Der Artikel wurde im Warenkorb gespeichert'), 'ok');
					break;
				case 'removed' :
					msgBox(translate('Warenkorb'), translate('Der Artikel wurde aus dem Warenkorb entfernt'), 'ok');
					break;
				case 'exists' :
					msgBox(translate('Warenkorb'), translate('Dieser Artikel befindet sich bereits im Warenkorb'), 'ok');
					break;
			};
			var linkfile = Ext.get(el);
			if (linkfile) {
				if (linkfile.dom.name && (linkfile.dom.name != '')) {
					var elm = Ext.select('a[name=' + linkfile.dom.name + ']');
					elm.each(function(lnk) {
						lnk.dom.title = param.title;
						lnk.dom.innerHTML = param.text;
						switch (param.status) {
							case 'added' :
								if (!addtobasket) {
									lnk.dom.className = 'shop_saved shop_' + module + '_saved';
									if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
										spinners['s' + hash].setValue(1);
									};
								}
								;
								break;
							case 'removed' :
								lnk.dom.className = 'shop shop_' + module;
								if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
									spinners['s' + hash].setValue(0);
								}
								;
								break;
						}
					});
				} else {
					linkfile.dom.title = param.title;
					linkfile.dom.innerHTML = param.text;
					switch (param.status) {
						case 'added' :
							if (!addtobasket) {
								linkfile.dom.className = 'shop_saved shop_' + module + '_saved';
								if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
									spinners['s' + hash].setValue(1);
								};
							}
							;
							break;
						case 'removed' :
							linkfile.dom.className = 'shop shop_' + module;
							if ((typeof spinners != 'undefined') && spinners['s' + hash]) {
								spinners['s' + hash].setValue(0);
							}
							;
							break;
					}
				}
			}
		}
	});
};
function showOpt(el, rmel) {
	el = funcClean(el, 'dir');
	rmel = funcClean(rmel, 'dir');
	var opt = Ext.get(el);
	if (opt) {
		Ext.select('*[id^=' + rmel + ']').setStyle('display', 'none');
		Ext.select('*[id^=' + rmel + ']').each(function(s) {
			s.select('select').each(function(ss) {
				ss.dom.disabled = true;
			});
		});
		opt.setStyle('display', 'block');
		opt.select('select').each(function(s) {
			s.dom.disabled = false;
		});
	}
};
function refreshbasket(el) {
	var frm = Ext.getDom('shopbasket');
	if (frm) {
		frm.action = el.href;
		frm.submit();
	}
};
function funcClean(text, type) {
	if (!type) {
		type = 'fil';
	};
	var sets = {
		'num' : '0123456789',
		'sml' : 'abcdefghijklmnopqrstuvwxyz',
		'big' : 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
		'ltr' : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\s-\/',
		'eml' : '0123456789abcdefghijklmnopqrstuvwxyz\._-',
		'fil' : '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\._-',
		'url' : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-',
		'anm' : '@0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\.-_\s',
		'email' : '@0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\._-',
		'dir' : '0123456789abcdefghijklmnopqrstuvwxyz_-'
	};
	if (type == 'url') {
		text = text.replace(/\s/g, '_');
	};
	text = text.replace(/ü/g, 'ue');
	text = text.replace(/ö/g, 'oe');
	text = text.replace(/ä/g, 'ae');
	text = text.replace(/Ü/g, 'Ue');
	text = text.replace(/Ö/g, 'Oe');
	text = text.replace(/Ä/g, 'Ae');
	text = text.replace(/ß/g, 'ss');
	if (type == 'sml') {
		text = text.toLowerCase();
	};
	if (type == 'eml') {
		text = text.toLowerCase();
	};
	if (type == 'dir') {
		text = text.toLowerCase();
	};
	if (type == 'big') {
		text = text.toUpperCase();
	};
	if (type == 'fil') {
		text = text.replace(/\/.*\//g, '');
		text = text.replace(/\.\./g, '.');
		text = text.replace(/\s/g, '_');
	};
	var allow = new RegExp('[' + sets[type] + ']');
	var res = '';
	for ( var i = 0; i < text.length; i++) {
		if (text.substr(i, 1).match(allow)) {
			res += text.substr(i, 1);
		}
	};
	text = res;
	return (text);
};
function setPointsOfVoting(nr, id) {
	var vdiv = Ext.select('#' + id + ' a');
	var count = 1;
	vdiv.each(function(el) {
		if (count > nr) {
			el.dom.className = 'inactivestar';
		} else {
			el.dom.className = 'activestar';
		};
		count++;
	});
};
function showAds(id) {
	var h = Ext.getDom('h' + id);
	var s = Ext.getDom('s' + id);
	if (s && h) {
		s.innerHTML = h.innerHTML;
		h.parentNode.removeChild(h);
	}
};
function initGMap(c) {
	setblocks();
	gMap.create(c);
};
var mapPoints = {};
var mapSpace = {};
var mapCategories = {};
var mapMarkers = {};
function loadGMap(gid) {
	setblocks();
	var gmap = Ext.get('gmap_' + gid);
	if (gmap) {
		mapPoints[gmap.dom.name] = [];
		var url = basepath + '_/tools/gearth.php?map=' + gid;
		var p = gmap.up('div');
		if (p) {
			p.dom.loadOnShow = url;
			p.dom.loadTgt = gmap.id;
			if (p.isVisible()) {
				gmap.dom.src = url;
				p.dom.isLoaded = true;
			}
		} else {
			gmap.dom.src = url;
		}
	}
};
function finishGMap(c) {
	gMap.finish(c);
};
function gMapsLoaded(doc) {
	var ad = Ext.select('.gmapadress');
	ad.each(function(a) {
		var mn = a.dom.getAttribute('gmap');
		if (mn && 'gmap_' + mn !== doc.name) {
			return;
		};
		var plz = a.select('.gmapplz').first();
		var ort = a.select('.gmaport').first();
		var str = a.select('.gmapstr').first();
		var txt = a.select('.gmaptxt').first();
		var marker = a.select('.gmapmarker').first();
		var shadow = a.select('.gmapmarkershadow').first();
		var cat = a.select('.gmapcat').first();
		var cfg = {
			mod : a.dom.getAttribute('mod'),
			prfx : a.dom.getAttribute('prfx'),
			id : a.dom.getAttribute('modid'),
			lat : a.dom.getAttribute('lat'),
			lon : a.dom.getAttribute('lon'),
			plz : plz ? plz.dom.innerHTML : '',
			ort : ort ? ort.dom.innerHTML : '',
			str : str ? str.dom.innerHTML : '',
			txt : txt ? txt.dom.innerHTML : '',
			marker : a.dom.getAttribute('marker') ? a.dom.getAttribute('marker') : '',
			shadow : a.dom.getAttribute('markershadow') ? a.dom.getAttribute('markershadow') : '',
			cat : cat ? cat.dom.innerHTML : 'default'
		};
		if ((cfg.lat && (cfg.lat != '') && cfg.lon && (cfg.lon != '')) || ((((cfg.plz != '') && (cfg.ort != '')) || (cfg.ort.match(/\d{5}\s.+/))) && (cfg.str != ''))) {
			addMapPoint(cfg, doc);
		}
	});
	if (doc && (mapPoints[doc.name] && (mapPoints[doc.name].length > 0)) && (typeof doc.createMarker == 'function')) {
		var count = 1;
		mapSpace[doc.name] = new doc.GLatLngBounds();
		mapCategories[doc.name] = [];
		mapMarkers[doc.name] = {};
		var total = 0;
		mapPoints[doc.name].each(function(p) {
			if ((p.lat != '') && (p.lon != '')) {
				var point = new doc.GLatLng(Number(p.lat), Number(p.lon));
				mapSpace[doc.name].extend(point);
				mapCategories[doc.name].push(p.cat);
				var m = doc.createMarker(point, p.txt, p.marker, count, p.shadow);
				if (!mapMarkers[doc.name][p.cat]) {
					mapMarkers[doc.name][p.cat] = [];
				};
				mapMarkers[doc.name][p.cat].push(m);
				doc.map.addOverlay(m);
				var pointLat = point.lat();
				var pointLon = point.lng();
				total++;
				if (total >= mapPoints[doc.name].length) {
					var newZoom = doc.map.getBoundsZoomLevel(mapSpace[doc.name]);
					var newCenter = mapSpace[doc.name].getCenter();
					gotoMapPosition(doc, newCenter, newZoom);
				}
			} else {
				var m = doc.map;
				var c = doc.createMarker;
				doc.geocoder.getLatLng(p.plz + ' ' + p.ort + ', ' + p.str, function(point) {
					if (point) {
						mapSpace[doc.name].extend(point);
						if (!mapMarkers[doc.name][p.cat]) {
							mapMarkers[doc.name][p.cat] = [];
						};
						var mp = c(point, p.txt, '', count);
						mapMarkers[doc.name][p.cat].push(mp);
						m.addOverlay(mp);
						var pointLat = point.lat();
						var pointLon = point.lng();
						var url = trfilename + '?_func=ksll&_mod=' + p.mod + '&_prfx=' + p.prfx + '&_lat=' + pointLat + '&_lng=' + pointLon + '&_id=' + p.id;
						Ext.Ajax.request({
							url : url
						});
						total++;
					};
					if (total >= mapPoints[doc.name].length) {
						var newZoom = doc.map.getBoundsZoomLevel(mapSpace[doc.name]);
						var newCenter = mapSpace[doc.name].getCenter();
						gotoMapPosition(doc, newCenter, newZoom);
					}
				});
			};
			count++;
		});
		mapCategories[doc.name] = mapCategories[doc.name].uniq();
		if (mapCategories[doc.name].length && !(mapCategories[doc.name].length == 1 ? (mapCategories[doc.name][0] == 'default' ? true : false) : false)) {
			var catdiv = Ext.DomHelper.append(document.body, {
				tag : 'div',
				id : 'mapcat_' + doc.name
			}, true);
			var catclose = Ext.DomHelper.append(catdiv, {
				tag : 'div',
				style : 'position:absolute; padding:5px; top:0; left:0;',
				html : '<img id="mapcat_' + doc.name + '_close" src="' + basepath + '_/pics/tab-close.gif">'
			}, true);
			catdiv.dom.className = 'gmapcatcontainer';
			mapCategories[doc.name].each(function(cat) {
				if (cat == 'default') {
					return;
				};
				catdiv.dom.innerHTML += '<a class="gmapcat" href="#" onclick="showMapCat(\'' + cat + '\', \'' + doc.name + '\'); return(false);">' + cat + '</a>';
			});
			catdiv.setStyle({
				width : '0',
				height : '300'
			});
			catdiv.alignTo(Ext.get(doc.name), 'tr-tr', [
				0,
				30
			]);
			catdiv.on('click', function(e, cd) {
				if (!cd.id.match(/mapcat/)) {
					return;
				};
				var el = Ext.get(cd);
				if (cd.id.match(/close/)) {
					if (catdiv.getWidth() < 50) {
						return;
					};
					catdiv.shift({
						width : 0,
						x : catdiv.getX() + 180
					});
					return;
				};
				if (el.getWidth() > 50) {
					return;
				};
				el.shift({
					width : 200,
					x : el.getX() - 180
				});
			});
		}
	}
};
showMapCat = function(c, d) {
	var m = mapMarkers[d][c];
	m.each(function(p) {
		if (!p.isHidden()) {
			p.hide();
		} else {
			p.show();
		}
	});
};
gotoMapPosition = function(doc, c, z) {
	doc.map.setCenter(c, z);
};
function addMapPoint(cfg, doc) {
	if (!isObject(cfg)) {
		return;
	};
	var o = {
		mod : '',
		prfx : '',
		id : '',
		lat : '',
		lon : '',
		plz : '',
		ort : '',
		str : '',
		txt : '',
		cat : ''
	};
	Ext.apply(o, cfg);
	mapPoints[doc.name].push(o);
};
function categorySelect(el) {
	var trid = el.value;
	if (trid == '') {
		msgBox(translate('Achtung'), translate('Es mu&szlig; eine Kategorie ausgew&auml;hlt sein!'), 'ok');
	};
	Ext.get(document.body).mask();
	var url = trfilename + '?_func=gcf&_trid=' + trid;
	Ext.Ajax.request({
		url : url,
		success : function(req) {
			var config = decode(req.responseText);
			var elem = el.form.elements;
			for ( var z = 0; z < elem.length; z++) {
				var _el = elem[z];
				if (_el.type == 'application/x-shockwave-flash') {
					fileReferences.each(function(fr) {
						if (fr.movieName == _el.id) {
							_el.name = fr.customSettings.name;
						}
					});
				};
				if (_el.name === '' || _el.name === 'id' || _el.name === 'tree' || _el.name.match(/deletemedia/) || _el.name.match(/livesearch/) || _el.id == 'repetition') {
					continue;
				};
				var tr = Ext.get(_el).up('tr').dom;
				var editext = Ext.get(_el).up('tr.editorext');
				if (!config[_el.name.replace(/(\[\d*\])/, '')] && !editext) {
					_el.disabled = 'disabled';
					tr.style.display = 'none';
				} else {
					_el.disabled = '';
					var displaymode = Ext.isIE ? 'block' : 'table-row';
					tr.style.display = displaymode;
				}
			};
			Ext.get(document.body).unmask();
			prepareForms([
				el.form
			], true, el.form.name);
		}
	});
};
function submitMask() {
	Ext.get(document.body).mask('<img src="' + basepath + '_/pics/formwait.gif" style="vertical-align:middle;"> Daten werden gespeichert...');
};
function translate(txt) {
	translation.each(function(trans) {
		if (trans.o == txt) {
			txt = trans.t;
		}
	});
	return (txt);
};
function serialize(mixed_value) {
	var _getType = function(inp) {
		var type = typeof inp, match;
		var key;
		if ((type == 'object') && !inp) {
			return 'null';
		};
		if (type == "object") {
			if (!inp.constructor) {
				return 'object';
			};
			var cons = inp.constructor.toString();
			match = cons.match(/(\w+)\(/);
			if (match) {
				cons = match[1].toLowerCase();
			};
			var types = [
				"boolean",
				"number",
				"string",
				"array"
			];
			for (key in types) {
				if (cons == types[key]) {
					type = types[key];
					break;
				}
			}
		};
		return type;
	};
	var type = _getType(mixed_value);
	var val, ktype = '';
	switch (type) {
		case "function" :
			val = "";
			break;
		case "undefined" :
			val = "N";
			break;
		case "boolean" :
			val = "b:" + (mixed_value ? "1" : "0");
			break;
		case "number" :
			val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
			break;
		case "string" :
			val = "s:" + encodeURIComponent(mixed_value).replace(/%../g, 'x').length + ":\"" + mixed_value + "\"";
			break;
		case "array" :
		case "object" :
			val = "a";
			var count = 0;
			var vals = "";
			var okey;
			var key;
			for (key in mixed_value) {
				ktype = _getType(mixed_value[key]);
				if (ktype == "function") {
					continue;
				};
				okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
				vals += serialize(okey) + serialize(mixed_value[key]);
				count++;
			}
			;
			val += ":" + count + ":{" + vals + "}";
			break;
	};
	if ((type != "object") && (type != "array")) {
		val += ";";
	};
	return val;
};
function unserialize(data) {
	var error = function(type, msg, filename, line) {
		throw new this.window[type](msg, filename, line);
	};
	var read_until = function(data, offset, stopchr) {
		var buf = [];
		var chr = data.slice(offset, offset + 1);
		var i = 2;
		while (chr != stopchr) {
			if ((i + offset) > data.length) {
				error('Error', 'Invalid');
			};
			buf.push(chr);
			chr = data.slice(offset + (i - 1), offset + i);
			i += 1;
		};
		return [
			buf.length,
			buf.join('')
		];
	};
	var read_chrs = function(data, offset, length) {
		var buf;
		buf = [];
		for ( var i = 0; i < length; i++) {
			var chr = data.slice(offset + (i - 1), offset + i);
			buf.push(chr);
		};
		return [
			buf.length,
			buf.join('')
		];
	};
	var _unserialize = function(data, offset) {
		var readdata;
		var readData;
		var chrs = 0;
		var ccount;
		var stringlength;
		var keyandchrs;
		var keys;
		if (!offset) {
			offset = 0;
		};
		var dtype = (data.slice(offset, offset + 1)).toLowerCase();
		var dataoffset = offset + 2;
		var typeconvert = new Function('x', 'return x');
		switch (dtype) {
			case 'i' :
				typeconvert = function(x) {
					return parseInt(x, 10);
				};
				readData = read_until(data, dataoffset, ';');
				chrs = readData[0];
				readdata = readData[1];
				dataoffset += chrs + 1;
				break;
			case 'b' :
				typeconvert = function(x) {
					return parseInt(x, 10) == 1;
				};
				readData = read_until(data, dataoffset, ';');
				chrs = readData[0];
				readdata = readData[1];
				dataoffset += chrs + 1;
				break;
			case 'd' :
				typeconvert = function(x) {
					return parseFloat(x);
				};
				readData = read_until(data, dataoffset, ';');
				chrs = readData[0];
				readdata = readData[1];
				dataoffset += chrs + 1;
				break;
			case 'n' :
				readdata = null;
				break;
			case 's' :
				ccount = read_until(data, dataoffset, ':');
				chrs = ccount[0];
				stringlength = ccount[1];
				dataoffset += chrs + 2;
				readData = read_chrs(data, dataoffset + 1, parseInt(stringlength, 10));
				chrs = readData[0];
				readdata = readData[1];
				dataoffset += chrs + 2;
				if ((chrs != parseInt(stringlength, 10)) && (chrs != readdata.length)) {
					error('SyntaxError', 'String length mismatch');
				}
				;
				break;
			case 'a' :
				readdata = {};
				keyandchrs = read_until(data, dataoffset, ':');
				chrs = keyandchrs[0];
				keys = keyandchrs[1];
				dataoffset += chrs + 2;
				for ( var i = 0; i < parseInt(keys, 10); i++) {
					var kprops = _unserialize(data, dataoffset);
					var kchrs = kprops[1];
					var key = kprops[2];
					dataoffset += kchrs;
					var vprops = _unserialize(data, dataoffset);
					var vchrs = vprops[1];
					var value = vprops[2];
					dataoffset += vchrs;
					readdata[key] = value;
				}
				;
				dataoffset += 1;
				break;
			default :
				error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
				break;
		};
		return [
			dtype,
			dataoffset - offset,
			typeconvert(readdata)
		];
	};
	return _unserialize(data, 0)[2];
};
function trim(str, charlist) {
	var whitespace, l = 0, i = 0;
	str += '';
	if (!charlist) {
		whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";
	} else {
		charlist += '';
		whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
	};
	l = str.length;
	for (i = 0; i < l; i++) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(i);
			break;
		}
	};
	l = str.length;
	for (i = l - 1; i >= 0; i--) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(0, i + 1);
			break;
		}
	};
	return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
};
var foreach = function(v, iterator) {
	if (isObject(v)) {
		for ( var key in v) {
			iterator(v[key], key);
		}
	} else if (isArray(v)) {
		v.each(iterator);
	}
};
var MySqlDateTimeToTimeStamp = function(mySqlDate) {
	var stm = mySqlDate.match(/(\d{1,2})\.(\d{1,2})\.(\d{2,4}) (\d{1,2}):(\d{1,2})/);
	if (stm) {
		mySqlDate = new Date(Number(stm[3]), Number(stm[2]) - 1, Number(stm[1])).format('Y-m-d H:i:s');
	};
	var stme = mySqlDate.match(/^(\d{2,4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2})$/);
	if (stme) {
		mySqlDate += ':00';
	};
	if ((mySqlDate == "0000-00-00 00:00:00") || mySqlDate === "" || (typeof mySqlDate == 'undefined')) {
		mySqlDate = "1970-01-01 00:00:00";
	};
	var dateObj = Date.parseDate(mySqlDate, "Y-m-d H:i:s");
	var dateobject = Date.parse(dateObj);
	return dateobject;
};
var vsubmit = function(frm) {
	if (!isObject(frm)) {
		var frm = Ext.getDom(frm);
	};
	if (frm.name && frm.name != '' && cmsForms[frm.name]) {
		var doSubmit = (cmsForms[frm.name] && cmsForms[frm.name].fireEvent("submit"));
		if (doSubmit) {
			frm.submit();
		}
	} else {
		frm.submit();
	}
};
var extLiveSearch = function(el, typ, trclass, defaultvalue) {
	var search;
	var searchel = el + 'livesearch';
	var limitPageSize = 5;
	var widthOfElem = 370;
	var elements = Ext.get(el);
	var elementstxt = Ext.get(el + 'livesearch');
	if (elementstxt) {
		if ((defaultvalue != "") && ((elements.dom.value != "") && (elements.dom.value != "0"))) {
			elementstxt.dom.value = defaultvalue;
		}
	};
	var oldValue = elementstxt.dom.value;
	var ds = new Ext.data.Store({
		proxy : new Ext.data.ScriptTagProxy({
			url : trfilename + '?_func=fndLoc&start=0&limit=' + limitPageSize
		}),
		reader : new Ext.data.JsonReader({
			root : 'contents',
			totalProperty : 'totalCount',
			id : 'id'
		}, [
			{
				name : 'title',
				mapping : 'title'
			},
			{
				name : 'id',
				mapping : 'id'
			},
		])
	});
	/* Custom rendering Template */
	var resultTpl = new Ext.Template('<div class="search-item"><span class="search-title">{title}</span></div>');
	var search = new Ext.form.ComboBox({
		store : ds,
		displayField : 'title',
		typeAhead : false,
		loadingText : 'Suche...',
		queryParam : 'filter',
		width : widthOfElem,
		pageSize : limitPageSize,
		hideTrigger : true,
		minChars : 2,
		tpl : resultTpl,
		onSelect : function(record) {
			if (elements) {
				elements.dom.value = record.data.id;
			};
			if (elementstxt) {
				elementstxt.dom.value = record.data.title;
				oldValue = elementstxt.dom.value;
			};
			this.collapse();
		}
	});
	search.applyTo(searchel);
	elementstxt.dom.onselect = function() {
		elementstxt.dom.value = "";
	};
	elementstxt.dom.onblur = function() {
		if ((elements.dom.value == "") || (elements.dom.value == "0")) {
			oldValue = "";
		};
		elementstxt.dom.value = oldValue;
	};
};
var socialBookmarks = function(url, title) {
	var link = encodeURIComponent(document.location.protocol + '//' + document.location.host + url);
	var text = encodeURIComponent(title);
	var html = '<DIV id="socialBookmarks">';
	html += '<UL>';
	html += '<LI><A id="bm_facebook" href="http://www.facebook.com/sharer.php?u=' + link + '&amp;t=' + title + '" target=_blank>Facebook</A></LI>';
	html += '<LI><A id="bm_delicious" href="http://del.icio.us/post?' + link + '&amp;title=' + title + '" target=_blank>del.icio.us</A></LI>';
	html += '<LI><A id="bm_digg" href="http://digg.com/submit?phase=2&amp;url=' + link + '&amp;title=' + title + '" target=_blank>Digg</A></LI>';
	html += '<LI><A id="bm_furl" href="http://furl.net/storeIt.jsp?u=' + link + '&amp;t=' + title + '" target=_blank>Furl</A></LI>';
	html += '<LI><A id="bm_yahoo_myweb" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=' + link + '&amp;t=' + title + '" target=_blank>Yahoo! My Web</A></LI>';
	html += '<LI><A id="bm_stumbleupon" href="http://www.stumbleupon.com/submit?url=' + link + '&amp;title=' + title + '" target=_blank>StumbleUpon</A></LI>';
	html += '<LI><A id="bm_google_bmarks" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=' + link + '&amp;title=' + title + '" target=_blank>Google Bookmarks</A></LI>';
	html += '<LI><A id="bm_technorati" href="http://www.technorati.com/faves?add=' + link + '" target=_blank>Technorati</A></LI>';
	html += '<LI><A id="bm_reddit" href="http://reddit.com/submit?url=' + link + '&amp;title=' + title + '" target=_blank>reddit</A></LI>';
	html += '</UL>';
	html += '</DIV>';
	Ext.Msg.show({
		title : '<img src="' + basepath + '_/pics/bookmarks/share.gif" width="12" height="12"> Bookmark',
		msg : html,
		buttons : Ext.Msg.OK
	});
};
var showReminder = function(mod, id, d) {
	var url = trfilename + '?_func=shRmd&_stRmMod=' + mod + '&_stRmID=' + id + '&_stRmDate=' + d;
	Ext.Ajax.request({
		url : url,
		success : function(req) {
			msgBox(translate('Erinnerung'), req.responseText, 'okcancel', setReminder);
		}
	});
};
var setReminder = function(btn) {
	if (btn == 'ok') {
		var f = new Ext.form.BasicForm('reminder');
		var v = f.getValues();
		var url = trfilename + '?_func=stRmd';
		Ext.Ajax.request({
			url : url,
			method : 'post',
			params : v,
			success : function(req) {
				var r = decode(req.responseText);
				if (r && !r.error) {
					msgBox(translate('Erinnerung'), translate('Erinnerung wurde hinzugef&uuml;gt.'), 'ok');
				};
				if (r.error && r.errortext) {
					msgBox(translate('Fehler'), translate(r.errortext), 'ok');
				}
			}
		});
	}
};
var b64d = function(data) {
	var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = [];
	if (!data) {
		return data;
	};
	data += '';
	do {
		h1 = b64.indexOf(data.charAt(i++));
		h2 = b64.indexOf(data.charAt(i++));
		h3 = b64.indexOf(data.charAt(i++));
		h4 = b64.indexOf(data.charAt(i++));
		bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
		o1 = bits >> 16 & 0xff;
		o2 = bits >> 8 & 0xff;
		o3 = bits & 0xff;
		if (h3 == 64) {
			tmp_arr[ac++] = String.fromCharCode(o1);
		} else if (h4 == 64) {
			tmp_arr[ac++] = String.fromCharCode(o1, o2);
		} else {
			tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
		}
	} while (i < data.length);
	dec = tmp_arr.join('');
	dec = utd(dec);
	return dec;
};
var sinitf = function(code) {
	var c = b64d(code);
	eval(c);
};
var utd = function(str_data) {
	var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
	str_data += '';
	while (i < str_data.length) {
		c1 = str_data.charCodeAt(i);
		if (c1 < 128) {
			tmp_arr[ac++] = String.fromCharCode(c1);
			i++;
		} else if ((c1 > 191) && (c1 < 224)) {
			c2 = str_data.charCodeAt(i + 1);
			tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
			i += 2;
		} else {
			c2 = str_data.charCodeAt(i + 1);
			c3 = str_data.charCodeAt(i + 2);
			tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
			i += 3;
		}
	};
	return tmp_arr.join('');
};
if (typeof sinit != 'undefined') {
	sinitf(sinit);
};
if (typeof basepath == 'undefined') {
	var basepath = '/';
};
if (typeof trfilename == 'undefined') {
	var trfilename = 'index.html';
};
if (typeof translation == 'undefined') {
	var translation = [];
};
if (typeof debugscript == 'undefined') {
	debugscript = false;
};
if (typeof rbuild == 'undefined') {
	if (debugscript === true) {
		document.write('<script type="text/javascript" src="' + basepath + '_/scripts/ext/adapter/ext/ext-base.js"></script>');
		document.write('<script type="text/javascript" src="' + basepath + '_/scripts/ext/ext-all-debug.js"></script>');
	} else {
		document.write('<script type="text/javascript" src="' + basepath + '_/scripts/ext/ext-min.js"></script>');
	};
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/extend.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/lang/ext-lang-de.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/swfobject.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/md5.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/validate.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/extensions/monthview.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/extensions/Spinner.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/extensions/SpinnerStrategy.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/ticker.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/statistics.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/events.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/upload.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/gmapfe.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/htmlcleaner.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/swfupload/swfupload.js" charset="UTF-8"></script>');
	document.write('<script type="text/javascript" src="' + basepath + '_/scripts/swfupload/swfupload.queue.js" charset="UTF-8"></script>');
};
runOnLoad(function() {
	Ext.QuickTips.init();
	Ext.QuickTips.enable();
	var vbox = Ext.select('.votingbox');
	vbox.each(function(el) {
		el.on('mouseout', function(ev, elm) {
			var t = ev.getRelatedTarget();
			if (!Ext.fly(this).contains(t)) {
				var param = elm.id.split('_');
				var id = param[1];
				setPointsOfVoting(0, id);
			}
		}, el.dom);
		var a = Ext.select('#' + el.dom.id + ' a.inactivestar');
		a.each(function(ela) {
			ela.on('mouseover', function(ev, elm) {
				var param = elm.id.split('_');
				var nr = param[2];
				var id = param[1];
				setPointsOfVoting(nr, id);
			});
			ela.on('click', function(ev, elm) {
				var pn = Ext.fly(this.parentNode);
				var rma = pn.select('a[class$=activestar]');
				var param = elm.id.split('_');
				var nr = param[2];
				var id = param[1];
				var resel = Ext.get(id + '_result');
				pn.removeAllListeners();
				rma.removeAllListeners();
				var url = elm.href + '&_func=vt';
				var um = resel.getUpdateManager();
				um.indicatorText = '<span class="loading-indicator">' + translate('Lade...') + '</span>';
				resel.load(url);
			}, ela.dom);
		});
	});
});