$ = function (id) { 
	//gibt einen element Zurueck oder null, falls element nicht gefunden wird
	return document.getElementById(id); 
	}

extend = function (obj,fname,fn) {
	//erweitert ein belibiges object um eine function fn
	if (!obj[fname]) { obj[fname] = fn; }
}

$defined = function(obj) {
	return (typeof(obj)!="undefined" && obj!=null);
}

childTags = function(obj) {
	var ret = [];
	for (var i=0; i<obj.childNodes.length;i++) {
		if (obj.childNodes[i].nodeType==1) { ret.push(obj.childNodes[i]); }
		}
	return ret;
}

opacity = function(obj, newopacity) {
	obj.style.opacity = newopacity;
	obj.style.MozOpacity = newopacity;
	obj.style.filter = "alpha(opacity=" + (newopacity*100) + ")";
}

fade = function (to, duration, obj) {
	if (typeof(obj)=="undefined") obj=this;
	if (typeof(obj.setOpacity!="function")){
		obj.setOpacity = function(newopacity) {
			if (!$defined(newopacity)) { newopacity = this.xOpacity; }
			opacity(this,newopacity);
			}
		}
	if (typeof(obj.xOpacity)=="undefined") obj.xOpacity = 1;
	if ( obj.xOpacity > 1 ) { obj.xOpacity = 1; obj.setOpacity(); return; }
	if (obj.xOpacity < 0 ) { obj.xOpacity = 0; obj.setOpacity(); return; }
	if (Math.abs(obj.xOpacity-to)<.05) { obj.xOpacity = to; obj.setOpacity(); return; }
	//var delta = (to>obj.xOpacity)?.05:-.05;
	obj.xOpacity = obj.xOpacity;
	obj.setOpacity();
	//setTimeout(function() { obj.fade(to,duration,obj) },duration/20);
}

function cancelEvent(e) {
	e = e ? e : window.event;
	if(e.stopPropagation) e.stopPropagation();
	if(e.preventDefault) e.preventDefault();
	e.cancelBubble = true;
	e.cancel = true;
	e.returnValue = false;
	return false;
}

animate = function (attr, to, duration, obj) {
	//TODO: noch nicht vertig
	if ( !$defined(obj)) obj=this;
	var curAttr = obj.style[attr];
	if ( !$defined(curAttr)) { return; }
	else
		if (typeof(curAttr)=="string" && curAttr.endsWith("px") ) {
			curAttr = parseInt(curAttr.replace(/px/, ""));
			var pxflag=true;
			}
		else { var pxflag=false; }
	var delta = parseInt(duration/(to-curAttr));
	if (Math.abs(curAttr-to)<=Math.abs(delta)) {
		if (pxflag) { obj.style[attr] = to+"px"; }
		else { obj.style[attr] = to; }
		return;
		}
	else {
		if (pxflag) { obj.style[attr] = curAttr+delta+"px"; }
		else { obj.style[attr] = curAttr+delta; }
		setTimeout(function() { obj.animate(attr,to,duration,obj) },duration/Math.abs(delta));
		}
}

function stripScripts (txt) {
	var script = "";
	var html = txt.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function() {
			script += arguments[1] + "\n";
			return "";
		});
	return {"html":html, "script":script};
	}

function check_email(mail) {
	var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(mail);
	}

String.prototype.startsWith = function(str) {
	try { return (this.match("^"+str)==str); }
	catch (e) { return false; }
	}
String.prototype.trim = function()	{
	return(this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
	}
String.prototype.endsWith = function(str) {
	return (this.match(str+"$")==str);
	}



var outImgHash = new Array();
var overImgHash = new Array();

function navi_preload()
{
var j=0;
for (x=0; x < document.images.length; x++){
		if(document.images[x].name.substr(0,4) == 'nav_'){
			var quelle = document.images[x].src;
			var quelle_active = quelle.replace(/(\.[^\.]+)$/, "_act$1");
			outImgHash[document.images[x].name] = new Image();
			outImgHash[document.images[x].name].src = quelle;
			overImgHash[document.images[x].name] = new Image();
			overImgHash[document.images[x].name].src = quelle_active;
		}
	}
}

function navi_act(bildname) {
	if(document.getElementsByName(bildname)[0]){
		if(overImgHash[bildname]){
			document.getElementsByName(bildname)[0].src = overImgHash[bildname].src;
		}
	}
	else{
		for (a=0; a < document.images.length; a++){
			if (document.images[a].name == bildname && (document.images[a].src.search(/_act\.[^\.]+$/) < 0)){
				var quelle = document.images[a].src;
				var quelle_active = quelle.substring(0,quelle.lastIndexOf(".")) + "_act" + quelle.substring(quelle.lastIndexOf("."),quelle.length);
				document.images[a].src =  quelle_active;
				break;
			}
		}
	}
}

function navi_normal(bildname) {
	if(document.getElementsByName(bildname)[0]){
		if(outImgHash[bildname]){
			document.getElementsByName(bildname)[0].src = outImgHash[bildname].src;
		}
	}
	else{
		for (b=0; b < document.images.length; b++){
			if (document.images[b].name == bildname){
				var quelle = document.images[b].src;
				var minus_act = quelle.lastIndexOf(".") - 4;
				var quelle_normal = quelle.substring(0,minus_act) + quelle.substring(quelle.lastIndexOf("."),quelle.length);
				document.images[b].src =  quelle_normal;
				break;
			}
		}
	}
}

function show(zoom_layer){
	zoom_layer.style.visibility = 'visible';
	var yOffset = window.pageYOffset || document.body.scrollTop;
	zoom_layer.style.top = yOffset;
	}


function change_visibility(layer, value){
	layer.style.visibility = value;
	}

function ChangeVisibilityByID(id) {
  layer = document.getElementById(id);
  if ( layer.style.visibility == 'visible' ) {
    layer.style.visibility = 'hidden';
  } else {
    layer.style.visibility = 'visible';
    open_layer = 1;
  }
  setTimeout("open_layer = 0", 100);
}

function remove_so_box (obj) {
	var parent = obj.parentNode;
	parent.removeChild(obj);
	}

function make_dd_box(obj) {
	obj.style.display = "block";
	obj.form = obj.parentNode.parentNode;
	obj.span = obj.getElementsByTagName("span")[0];
	obj.container = obj.getElementsByTagName("div")[0];
	obj.list = obj.getElementsByTagName("ul")[0];
	obj.kids = obj.list.getElementsByTagName("li");
	obj.selected = obj.span.firstChild.nodeValue;
	obj.container.style.display = "none";
	obj.highlightedBg = "#EFF3F7";
	obj.defaultBg = "#FFFFFF";
	obj.preselected = null;
	obj.interval = null;
	obj.spotted = false;
	obj.closed = true;
	obj.tabIndex = 0;
	obj.input = '';
	if (obj.addEventListener) {
		obj.span.addEventListener ("click", function(e){
			obj.focus();
			obj.toggle();
		}, false);
		obj.addEventListener ("mouseout", function(e){
   			var source = e.target;
   			var target = e.relatedTarget;
			obj.trackmouse(source, target);
   		}, false);
		obj.addEventListener ("mouseover", function(e){
			obj.spotted = true;
		}, false);
		obj.addEventListener ("keydown", function(e){
			obj.processkey(e);
			obj.cleardelayed();
		}, false);
		obj.addEventListener ("blur", function(e){
			if (!obj.spotted && !obj.closed) {
				obj.toggle();
			}
		}, false);
	}
	else if (obj.attachEvent){
		obj.span.attachEvent ("onclick", function(e){
			obj.focus();
			obj.toggle();
		});
		obj.attachEvent ("onmouseout", function(e){
			var source = e.srcElement;
			var target = e.toElement;
			obj.trackmouse(source, target);
		});
		obj.attachEvent ("onmouseover", function(e){
			obj.spotted = true;
		});
		obj.attachEvent ("onkeydown", function(e){
			obj.processkey(e);
			obj.cleardelayed();
		});
		obj.attachEvent ("onfocusout", function (e){
			if (!obj.spotted && !obj.closed) {
				obj.toggle();
			}
		});
	}
	obj.trackmouse = function(source, target) {
		if (source.nodeName == 'SPAN') {
			if (target == obj.container || target.parentNode.parentNode.parentNode == obj.container) {
				return;
			}else if (!obj.closed) {
				obj.spotted = false;
			}
			return;
		} else if (source.nodeName != 'DIV') {
			return;
		}
		while (target != source && target.nodeName != 'BODY') {
			target= target.parentNode;
			if (target == source) return;
		}
		obj.spotted = false;
	}
	obj.processkey = function(event) {
		if (event.keyCode == 27) {
			if (!obj.closed) {
				obj.toggle();
			} else {
				obj.clear();
			}
		} else if (event.keyCode == 13 && obj.preselected != null) {
			window.location.href = obj.preselected;
		} else {
			obj.input = obj.input + String.fromCharCode(event.keyCode);
			obj.preselect();
		}
	}
	obj.preselect = function() {
		var express = new RegExp('^' + obj.input, 'i');
		if (this.preselected) {this.preselected.style.background = obj.defaultBg;}
		for (var i = 0; i < obj.kids.length; i++) {
			if (obj.kids[i]) {
				if(express.exec(obj.kids[i].getElementsByTagName("a")[0].firstChild.nodeValue)) {
					this.preselected = obj.kids[i].getElementsByTagName("a")[0];
					this.span.firstChild.nodeValue = this.preselected.firstChild.nodeValue;
					obj.scroll(this.preselected, i);
					this.preselected.style.background = obj.highlightedBg;
					return;
				}
			}
		}
	}
	obj.clear = function() {
		obj.input = '';
		if(obj.closed){
			obj.span.firstChild.nodeValue = obj.selected;
		}
		if (this.preselected) {
			this.preselected.style.background = obj.defaultBg;
			this.preselected = null;
		}
	}
	obj.cleardelayed = function() {
		if (obj.interval == null) {
			obj.interval = setInterval(obj.clear, 1500);
		} else {
			clearInterval(obj.interval);
			obj.interval = setInterval(obj.clear, 1500);
		}
	}
	obj.scroll = function(anchor, counter) {
		if (!anchor.offsetParent) {
			return;
		} else if (anchor.offsetTop == 0 && anchor.offsetParent.offsetTop == 0) {
			this.container.scrollTop = anchor.offsetParent.offsetTop;
		} else if (anchor.offsetTop > 0 && anchor.offsetParent.offsetTop > 0) {
			this.container.scrollTop = anchor.offsetTop;
		} else if (anchor.offsetTop == 0 && anchor.offsetParent.offsetTop > 0 && counter > 0) {
			this.container.scrollTop = anchor.offsetParent.offsetTop;
		} else {
			this.container.scrollTop = anchor.offsetTop;
		}
	}
	obj.toggle = function() {
		if (!this.closed) {
			this.container.style.display = "none";
			this.closed = true;
			obj.clear();
		}
		else {
			this.container.style.display = "block";
			this.closed = false;
			this.container.scrollTop = 0;
			var anchors = this.container.getElementsByTagName("a");
			for (var i = 0; i < anchors.length; i++) {
				if (anchors[i].getAttributeNode("class").nodeValue == "dd_item_anchor selected") {
					this.selected = anchors[i].firstChild.nodeValue;
					obj.scroll(anchors[i], i);
					return;
				}
			}
		}
	}
}

function close_generic_popup() {
	//layer_effect($("generic_popup_div"),"close");
	var popup = $("generic_popup_div");
	if ( popup != null ) {
		unset_shadow();
		popup.parentNode.removeChild( popup );
		}
	}

$each = function (list, fn) {
	//fuert function fn fuer jeder element von list
	if (! list instanceof Array) return;
	for (var i=0; i<list.length;i++) { fn(list[i]); }
	}

function set_shadow() {
	blackbox = document.createElement("div");
	blackbox.id = "blackbox";
	document.body.appendChild(blackbox);
	blackbox.onclick = function(){
		close_generic_popup();
		}
	}

function unset_shadow() {
	var blb = $("blackbox");
	if (typeof(blb)!="undefined") {
		document.body.removeChild(blb);
		}
	}


function loadScripts(id,scrCode) {
	var head  = document.getElementsByTagName("head").item(0);
	if ($("dynamic_script_"+id)!=undefined) {
		head.removeChild($("dynamic_script_"+id));
		}
	scrHandle = document.createElement("script");
	scrHandle.type = "text/javascript";
	scrHandle.id = "dynamic_script_"+id;
	scrHandle.text = scrCode;
	try { void(head.appendChild(scrHandle)); }
	catch (e) { alert(e) }
	}

function open_generic_popup_params (title_, params, className) {
	var gpp = document.createElement("div");
	gpp.id = "generic_popup_div";
	gpp.style.zIndex = "900";

	var sct = document.body.scrollTop;
	if ( sct == 0 ) {
		if (window.pageYOffset) {
			sct = window.pageYOffset
		}
		else {
			sct = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
		}
	}
	gpp.style.top = ( 80 + sct ) + "px" ;

	if ( typeof(className) == "undefined" ) { gpp.className = "generic_popup_div"; } else { gpp.className = "generic_popup_div " + className; }
	gpp.innerHTML='<div class="header" id="gpp_dragger"><h1>'+title_+'</h1><span onclick="close_generic_popup()">X</span></div><div class="content"><div id="generic_popup_div_content"></div></div>';

	gpp_request = new ajax_engine("gpp_request","/ajax/popup_params.html","generic_popup_div_request_cb",params);
	gpp_request.start();

	set_shadow();
	document.body.appendChild(gpp);
	try { new DragObject(gpp, $("gpp_dragger") ); }
	catch (e) {}
	//layer_effect(gpp,"open");
	}

function open_generic_popup (title_, src_, className) {
	var gpp = document.createElement("div");
	gpp.id = "generic_popup_div";
	gpp.style.zIndex = "900";
	if ( typeof(className) == "undefined" ) { gpp.className = "generic_popup_div"; } else { gpp.className = className; }
	gpp.innerHTML='<div class="header" id="gpp_dragger"><h1>'+title_+'</h1><span onclick="close_generic_popup()">X</span></div><div class="content"><div id="generic_popup_div_content"></div></div>';

	gpp_request = new ajax_engine("gpp_request","/ajax/popup.html","generic_popup_div_request_cb","popup="+src_+";id="+SESSION_ID);
	gpp_request.start();

	set_shadow();
	document.body.appendChild(gpp);

	try { new DragObject(gpp, $("gpp_dragger") ); }
	catch (e) {}
	//layer_effect(gpp,"open");
	}

function generic_popup_div_request_cb (res) {
	var r = stripScripts(res);
	$("generic_popup_div_content").innerHTML=r["html"];
	if (r["script"]!="") {
		loadScripts("generic_popup_div",r["script"]);
		}
	}

function countdown( stop_time, div_day, div_hour, div_min, div_sec, mode ) {
	var now_time = new Date();
	var differenz = stop_time - now_time;
	differenz = Math.floor( differenz / 1000 );
	if ( differenz > 0 ) {
		if ( mode == 'without_days' ) {
			var days = 0;
		} else {
			var days = Math.floor( differenz / 60 / 60 / 24 );
		}
		var hours = Math.floor( ( differenz - days * 24 * 60 * 60 ) / 60 / 60 );
		var minuts = Math.floor( ( differenz - days * 24 * 60 * 60 - hours * 60 * 60 ) / 60 );
		var seconds = differenz - days * 24 * 60 * 60 - hours * 60 * 60 - minuts * 60;
		document.getElementById(div_day).innerHTML = ( days < 10 ) ? "0" + days : days;
		document.getElementById(div_hour).innerHTML = ( hours < 10 ) ? "0" + hours : hours;
		document.getElementById(div_min).innerHTML = ( minuts < 10 ) ? "0" + minuts : minuts;
		document.getElementById(div_sec).innerHTML = ( seconds < 10 ) ? "0" + seconds : seconds;
		setTimeout( function() { countdown( stop_time, div_day, div_hour, div_min, div_sec, mode ); }, 200); }
	else {
		document.getElementById(div_day).innerHTML = '00';
		document.getElementById(div_hour).innerHTML = '00';
		document.getElementById(div_min).innerHTML = '00';
		document.getElementById(div_sec).innerHTML = '00';
	}
}

function open_confirm_popup (title_, confirmstring, className) {
	var gpp = document.createElement("div");
	gpp.id = "generic_popup_div";
	gpp.style.zIndex = "900";

	var sct = document.body.scrollTop;
	if ( sct == 0 ) {
		if (window.pageYOffset) {
			sct = window.pageYOffset
		}
		else {
			sct = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
		}
	}
	gpp.style.top = ( 80 + sct ) + "px" ;

	if ( typeof(className) == "undefined" ) { gpp.className = "generic_popup_div confirm_popup"; } else { gpp.className = "generic_popup_div " + className; }
	gpp.innerHTML='<div class="header" id="gpp_dragger"><h1>'+title_+'</h1><span onclick="close_generic_popup()">X</span></div><div class="content"><div id="generic_popup_div_content">'+
	'<span>'+confirmstring+'</span>'
	+'</div></div>';
	set_shadow();
	document.body.appendChild(gpp);
	try { new DragObject(gpp, $("gpp_dragger") ); }
	catch (e) {}
}


function stiner_moover3 (container, items) {
	container.loop_timeout = 5000;
	container.duration = 500;
	container.do_automatic_loop = true;
	container.items = items;
	container.curpos = 0;
	container.lock = false;

	container.onmouseover = function () { container.do_automatic_loop = false; }
	container.onmouseout = function () { container.do_automatic_loop = true; }
	container.getNext = function() { return (this.curpos + 1) % this.items.length; }
	container.setLock = function() {
		container.lock = true;
		setTimeout(function(){ container.lock=false }, this.duration+10);
		}

	for ( var i = 0 ; i < items.length; i++) {
		opacity(items[i],0);
		extend(items[i],"fade",fade);
		if ( i != 0 ) {
			items[i].fade(0,1);
		}
		items[i].style.zIndex=1;
	}
	opacity(items[0],1);
	items[0].style.zIndex=2;

	container.set_loop_timeout = function (sec) {
                if (sec < 1) sec = 1;
		this.loop_timeout = sec*1000;
		}

	container.do_loop = function() {
		//startlog();
		//log("change "+this.curpos+" to "+this.getNext());
		if ( this.do_automatic_loop && !this.lock ) {
			this.setLock();
			this.items[this.curpos].fade(0,this.duration);
                        opacity(items[this.curpos],0);
			this.items[this.curpos].style.zIndex=1;
			this.items[this.getNext()].fade(1,this.duration);
                        opacity(items[this.getNext()],1);
			this.items[this.getNext()].style.zIndex=2;
			this.curpos=this.getNext();
			}
		setTimeout(function(){ container.do_loop(); }, this.loop_timeout);
		}

	setTimeout(function(){ container.do_loop(); }, container.loop_timeout);
}


function window_open_focused (url,name,params) {
   fenster = window.open(url, name, params);
   fenster.focus();
}


// Submit Button sperren geggen doppelte Klicks 
function doppelklicksperre (button_id) {                  
   button =  document.getElementById(button_id)
   if (button) {
	 // Achtung, wenn disabled wird der button nicht mehr im Formular mitgesendet
	 button.disabled = true;                    
	 window.setTimeout(function () {           
	   button.disabled = false;              
	 }, 10000);
   }
}

// Submit Button sperren geggen doppelte Submits , einfache Variante mit globaler Variable
var doppelklicksperre2_aktiv = 0;              
function doppelklicksperre2 () {              
   if (doppelklicksperre2_aktiv == 0) {      
        doppelklicksperre2_aktiv=1;         
         window.setTimeout(function () {   
           doppelklicksperre2_aktiv = 0;  
         }, 10000);                       
        return true;                   

   } else {                           
        return false;                
   }                                
}  


