var map = false;
function directions_init() {	
	map = new GMap2($('karte'));		
	map.addControl(new GLargeMapControl());		
	map.addControl(new GMapTypeControl());		
}

function directions_do(start,goal,locale) {		
	var directions = new GDirections(map, $('wege'));	
	directions.load("from: "+start+" to: "+goal, { "locale": locale } );
}

function newswindow(u) {

	ww = getWinWidth();
	wh = getWinHeight();

	w = ww * 0.8;
	h = wh * 0.95;
	
	w = Math.floor(w);
	h = Math.floor(h);
	
	var l=ww/2-w/2;
	var t=wh/2-h/2;
	l = Math.floor(l);
	t = Math.floor(t);
	
	var opt = "width="+w+",height="+h+",left="+l+",top="+t+""+",resizable=yes, scrollbars=yes";
	var win = window.open(u, "Zweitfenster", opt);
	win.focus();
	return false;
}
 


var odump = (function(){
  var max, INDENT = "                                   "; // As long as you need :)
  
  function valueToStr(value, depth) {
    switch (typeof value) {
      case "object":   return objectToStr(value, depth + 1);
      case "function": return "function";
      default:         return value;
    }
  }
  
  function objectToStr(object, depth) {
    if (depth > max)
      return false;
    
    var output = "";
    for (var key in object)
      output += "\n" + INDENT.substr(0,2*depth) + key + ": " + valueToStr(object[key], depth);

    return output;  
  };
  
  return function odump(object, depth, _max) {
    max = _max || 2;
    return objectToStr(object, depth || 0);
  };
})();


function videowindow(u,winw,winh) {

        ww = getWinWidth();
        wh = getWinHeight();

        w = ww * 0.6;
        h = wh * 0.95;
        w = winw;
        h = winh;

        w = Math.floor(w);
        h = Math.floor(h);

        var l=ww/2-w/2;
        var t=wh/2-h/2;
        l = Math.floor(l);
        t = Math.floor(t);

        u = u + "&w=" + w + "&h=" + h;

        var opt = "width="+w+",height="+h+",left="+l+",top="+t+""+",resizable=no, scrollbars=no, dependend=yes";
        var win = window.open(u, "Zweitfenster", opt);
        win.focus();
        return false;
}


function imgobserve() {
	var ia = document.getElementById('imgvdma');
	var ib = document.getElementById('cpos');
	var ic = document.getElementById('helper');
	
	
	if ( !ia || typeof(ia) == "undefined" ) return false;
	if ( !ib || typeof(ia) == "undefined" ) return false;
	
	var posax = findPosX(ia);
	var posay = findPosY(ia);
	var posbx = findPosX(ib);
	var posby = findPosY(ib);
	
	
	if ( posby-posay >= 30 ) {
		ia.style.visibility = 'hidden';
		
		ia.style.visibility = 'absolute';
		return true;
	}
	
	ia.style.visibility = 'visible';
	return true;
	
	ic.innerHTML = '';
	ic.innerHTML += posay;
	ic.innerHTML += ' _ ';
	ic.innerHTML += posby;
	ic.innerHTML += ' _ ';
	ic.innerHTML += posby-posay;
	ic.innerHTML += ' _ ';
	ic.innerHTML += window.innerHeight;
	
}

function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }
  


function getWinHeight() // based on a script by projectseven.com (PVII)
{
 if (window.innerWidth) { h = window.innerHeight; } // ns4
 else if(document.body)
 {
  h = document.body.clientHeight;
  if (document.body.offsetHeight == h && document.documentElement && document.documentElement.clientHeight)
  {
   h = document.documentElement.clientHeight;
  }
 }
 return h;
}

function getWinWidth() // based on a script by projectseven.com (PVII)
{
 if (window.innerWidth) { h = window.innerWidth; } // ns4
 else if(document.body)
 {
  h = document.body.clientWidth;
  if (document.body.offsetWidth == h && document.documentElement && document.documentElement.clientWidth)
  {
   h = document.documentElement.clientWidth;
  }
 }
 return h;
}

 function ImagePreload()
 {
  document.Preload = new Array();
  if(document.images)
  {
   for(var i=0; i < ImagePreload.arguments.length; i++)
   {
    document.Preload[i] = new Image();
    document.Preload[i].src = ImagePreload.arguments[i];
   }
  }
 }
 
 
function addEvent(obj,event,func,bool) {
	Event.observe(obj,event,func);
}
function addEvent(obj,event,func,bool) {
	Event.observe(obj,event,func);
}

function statecorrect(data) {	
	for ( var item in data ) {
		var value = data[item];
		if ( typeof(data) == "object" ) value = statecorrect(value);
		if ( typeof(data) == "array" ) 	value = statecorrect(value);
		if ( value == "true" ) 	value = true;
		if ( value == "false" ) value = false;
		
		data[item] = value;
	}
	return data;
}

function sleep(naptime){
  naptime = naptime;
  var sleeping = true;
  var now = new Date();
  var alarm;
  var startingMSeconds = now.getTime();
 
  while(sleeping){
	 alarm = new Date();
	 alarmMSeconds = alarm.getTime();
	 if(alarmMSeconds - startingMSeconds > naptime){ sleeping = false; }
  }      
  return true;
}

function eserialize(obj) {
	var out = '';
	
	out += "&fieldname="+obj.name+"&fieldvalue="+obj.value+"&fieldid="+obj.id;
		
	return out;
	

	if ( typeof(obj) == "object" ) {
		for ( var item in obj ) {
			var value = obj[item];
			
			if ( typeof(value) == "function" ) continue;
			if ( typeof(value) == "object" ) continue;
			
			if ( typeof(value) == "object" ) {
				//out += eserialize(value);
				//continue;
			}
			
			
			
			out+= "&field"+item+"="+value;
		}
	}
		
	return out;
}


function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";

	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}


function setContent(objContent,objId) {
	$(objId).innerHTML = objContent;
}

function effect(objId,objEffects,objContent) {
	$(objId).innerHTML = objContent;
	var eve = '$(objId).'+objEffects;
	eval(eve);
}

function formSubmit(url,sid,did,fid) {
	
	var nurl = url+'?getElementById='+sid;
	var params = '';
	if ( false != fid ) params = Form.serialize(document.getElementById(fid));
	
	
	new Ajax.Updater(did, nurl, { 
		method: 'get', evalScripts: true, parameters: params

	});
	return false;
}


var InputFocus = Class.create();
InputFocus.prototype = {
  initialize: function(){
	return true;
    $$("input", "textarea").each(
      function(input){
        Event.observe(input, 'focus',
          function(e){
			
            Element.addClassName(
              Event.element(e),
              'focus'
            );
			
          }.bindAsEventListener(this),
        false);
        Event.observe(input, 'blur',
          function(e){
            Element.removeClassName(
              Event.element(e),
              'focus'
            );
          }.bindAsEventListener(this),
        false);
      }.bind(this)
    );
  }
}



function minit(obj) {
	
	return false;
	obj.onmouseover = obj.style.visibility = 'visible';
	obj.onmouseout = obj.style.visibility = 'hidden';
	return false;
	helper(obj);
}

function helper() {
	var help = false;
	if ( !document.getElementById('helper') ) {
		help = document.createElement('div');
		help.id = 'helper';
		help.style.backgroundColor = 'yellow';
		help.style.fontSize = '9pt';
		help.style.position = 'absolute';
		help.style.top = '0px';
		help.style.right = '0px';
		document.getElementsByTagName('body')[0].appendChild(help);	
	}
	
	if ( false == help ) return false;
	
	var write = '';
	
	for ( var cnt = 0; cnt < helper.arguments.length; cnt++ ) {
		var item = helper.arguments[cnt];		
		if ( typeof(item) == "object" ) {
			for ( items in item ) {
				write+=item+'.'+items+ '=>' + item[items] + '<br>';
			}
			
			continue;
		}
		
		write += helper.arguments[cnt]+'<br>';
		
	}
	
	help.innerHTML = write+help.innerHTML;
}

function menu_init(objid) {		
	var obj = document.getElementById(objid);
	if ( !obj || typeof(obj) == "undefined" ) return false;
	helper(obj);
	return true;
	for ( item in obj.childNodes ) {
		helper(obj.childNodes[item]);
	}
}

var inited = new Array();
var styles = new Array();

function stylesAssign(styles,obj) {
	for ( item in styles ) {
	
		
		continue;
		obj.setAttribute(item,styles[item],true);
		if ( !obj.style[item] ) {
			continue;
		}
		continue;
		obj.style[item] = '';
		continue;
		obj.style[item] = 'green';
		
	}
}

function styleChange(obj,style,setter) {
	if ( !styles[obj] ) styles[obj] = new Object();
	styles[obj][style] = obj.style[style];
	obj.style[style]=setter;
	
}

function styleReset(obj) {
	for ( item in styles[obj] ) obj.style[item] = styles[obj][item];
}


function changeStyle() {	
	for ( var cnt = 1; cnt < this.styleset.length; cnt+=2 ) {
		//styles[this.id][this.styleset[cnt]] = this.style[this.styleset[cnt]];
		this.style[this.styleset[cnt]] = this.styleset[cnt+1];
		var a = this.getElementsByTagName('a');
		if ( a.length > 0 ) {
			for ( var acnt = 0; acnt < a.length; acnt++ ) {
				
			}
		}
	}
	
}

function resetStyle() {
	for ( item in styles[this.id] ) {		
		this.style[item] = styles[this.id][item];
	}
}

function storeStyle(obj) {	
	if ( !styles[obj.id] ) styles[obj.id] = new Array();
	for ( var cnt = 1; cnt < obj.styleset.length; cnt+=2 ) {
		var item = obj.styleset[cnt];		
		styles[obj.id][item] = obj.style[item];
	}
}

function hover(id) {	
	var obj = document.getElementById(id);	
	//if ( inited[obj.id] ) return true;
	if ( hover.arguments.length > 1 ) {
		obj.styleset 	= hover.arguments;		
		//storeStyle(obj);		
		obj.addEventListener('mouseover',changeStyle,false);
		obj.addEventListener('mouseout',resetStyle,false);
		//obj.onmouseout 	= resetStyle(obj);
		//changeStyle(obj);
	}
	//inited[obj.id] = true;
	return true;
}


function tablehover(obj) {
	if ( inited[obj] ) return true;
	var rows = obj.getElementsByTagName('tr');
	for ( var cnt=0; cnt<rows.length;cnt++ ) {		
		var styles = rows[cnt].style;				
		rows[cnt].onmouseover = function() {
			styleChange(this,'backgroundColor','#EFEFEF');				
		}
		
		rows[cnt].onmouseout = function() {
			styleReset(this);
		}
		
		var as = rows[cnt].getElementsByTagName('a');
		if ( as.length > 0 ) {
			//
			//rows[cnt].onclick = function() {
			//	document.location = as[0].href;
			//}		
	
		}
		
	}
	
	inited[obj] = true;
}


function tooltip(obj,text) {
	var itext = text;
	
	if ( itext.substr(0,7) == "base64_" ) {
		itext = itext.substr(7);
		itext = Base64.decode(itext);		
	}
	
	var elm = document.createElement('div');
	elm.setAttribute('id','tooltip');		
	elm.className = 'tooltip_window';
	elm.innerHTML = itext;
	
	obj.onmouseout = function() { 
		if ( typeof(document.getElementById('tooltip')) != "undefined" ) {
			document.getElementById('tooltip').style.visibility='hidden';
			document.getElementById('tooltip').parentNode.removeChild(document.getElementById('tooltip'));
		}
	}
	
	obj.appendChild(elm);	

	return true;
}

function rl(obj) {


}

function rp(id,obj) {

	var obj = rl(obj);
	return true;
	var repl = document.getElementById(id);
	if ( typeof(repl) == "undefined" || !repl ) return false;		
	rl(repl,obj);
	alert(1);
	return true;
}

function messagebox1(nodename,nodevalue) {
	var box = document.createElement("div");
	
	box.setAttribute("id",nodename);
	box.innerHTML = nodevalue;
	box.className = 'messagebox';
	box.style.position = 'absolute';
	box.style.visibility = 'visible';
	
	var pscroll = getPageScroll();
	var psize = getPageSize();
	
	//box.style.left = psize[0]/2+"px";
	box.style.left = 50+"px";
	box.style.width = psize[2]-100+"px";
	box.style.top = pscroll[1]+"px";
	
	box.style.zIndex = 2000;
	//alert(pscroll);
	//alert(psize);
	
	document.getElementById('top_sub').appendChild(box);
	setTimeout("document.getElementById('"+nodename+"').parentNode.removeChild(document.getElementById('"+nodename+"'))",4000);
	
}

function imp(text,arr) {
	if ( arr.length === 0 ) return false;
	
	var sep = text.split('<nodeseparator>');
	if ( sep.length == 0 ) return false;
	
	var info;
	var nodename;
	var nodevalue;
	var nodeexec;
	var nodetype;
	
	
	for ( var s = 0; s < sep.length-1; s++ ) {
		info = sep[s].split('<nodeinfo>');			
		if ( info.length == 0 ) continue;
		
		nodename 	= info[0];
		nodevalue 	= info[1];
		nodeexec 	= info[2];
		nodetype 	= info[3];
		
		if ( typeof(nodeexec) != "undefined" && nodeexec != "" ) {
			switch ( nodeexec ) {
				case "create":
					switch ( nodetype ) {
						case "box1":
							messagebox1(nodename,nodevalue);

							//setTimeout("document.getElementById('"+c.id+"').style.visibility = 'hidden'", 1000);
							//document.getElementsByTagName('body')[0]
														
						break;
					}
				break;
			}
		}
		
		for ( var x = 0; x < arr.length; x++ ) {
			//alert("'"+arr[x]+"'" + " " + "'"+nodename+"'");
			
			if ( nodename != arr[x] ) continue;
			var all;
			if ( document.all ) {
				all = document.all;
			} else {
				all = document.getElementsByTagName("*");
			}
		

			for ( var y = 0; y < all.length; y++ ) {
				if ( all[y].getAttribute("id") != nodename ) {
					if ( all[y].getAttribute("name") != nodename ) continue;					
				}
				
				var repl = all[y];
				
				//var repl = document.getElementById(nodename);
				if ( typeof(repl) == "undefined" ) continue;			
				repl.innerHTML = nodevalue;													
			}
		}		
	}
	
	
	return false;
	alert(text);
	
	
	return false;
}

function aj(obj,sa) {	

	var tids = new Array();	
	var tidw = '';
	for ( var c = 1; c < aj.arguments.length; c++ ) {
		tids[c-1] = aj.arguments[c];
		tidw += 'tidw[]='+aj.arguments[c]+"";
		if ( typeof(aj.arguments[c+1]) != "undefined" ) tidw += '&';
	}
		
	var nodes;
	var param = 'link='+obj.href+'&'+tidw;
	
	//document.getElementById("helper").style.visibility="visible";
	//document.getElementById("helper").innerHTML = param;
	
	//alert(tidw);
    var options = {
		method : 'post',
		parameters : param,
			onComplete : function(request) {
			// turn off update message here
			var resp = request.responseText;
			//var resp = request.responseXML;			
			var got = imp(resp,tids);			
			//alert(got);
			
			var root = resp.getElementsByTagName('root');
			//resp = (new DOMParser()).parseFromString(gresp, "text/xml");
			
			if ( typeof(root) == "undefined" || !root ) return true;

			
			for ( var cnt = 0; cnt < tids.length; cnt++ ) {
				var myid = tids[cnt];	
				
				var elmid = root[0].getElementsByTagName(myid);				
				if ( typeof(elmid) == "undefined" || !elmid ) continue;
				
				var elobj = elmid[0].childNodes[0];
				if ( typeof(elobj) == "undefined" || !elobj ) continue;		
				
				rp(myid,elobj);				
				continue;
		
			}
		}
	};

    var req = new Ajax.Request(obj.href, options);
	return false;
	alert(req.getStatus());
	if ( 0 == req.getStatus() ) return false;
	return true;
	//if ( !Ajax.responseIsSuccess ) return true;
	
	
	return false;
}


var Base64 = {

	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

	// public method for encoding
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;

		input = Base64._utf8_encode(input);

		while (i < input.length) {

			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);

			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;

			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}

			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

		}

		return output;
	},

	// public method for decoding
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;

		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

		while (i < input.length) {

			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));

			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;

			output = output + String.fromCharCode(chr1);

			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}

		}

		output = Base64._utf8_decode(output);

		return output;

	},

	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}
