// Define the browser we have instead of multiple calls throughout the file
var userAgent = navigator.userAgent.toLowerCase();
var is_opera  = (userAgent.indexOf('opera') != -1);
var is_saf    = ((userAgent.indexOf('applewebkit') != -1) || (navigator.vendor == 'Apple Computer, Inc.'));
var is_webtv  = (userAgent.indexOf('webtv') != -1);
var is_ie     = ((userAgent.indexOf('msie') != -1) && (!is_opera) && (!is_saf) && (!is_webtv));
var is_ie4    = ((is_ie) && (userAgent.indexOf('msie 4.') != -1));
var is_moz    = ((navigator.product == 'Gecko') && (!is_saf));
var is_kon    = (userAgent.indexOf('konqueror') != -1);
var is_ns     = ((userAgent.indexOf('compatible') == -1) && (userAgent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_saf));
var is_ns4    = ((is_ns) && (parseInt(navigator.appVersion) == 4));
var is_mac    = (userAgent.indexOf('mac') != -1);

// Catch possible bugs with WebTV and other older browsers
var is_regexp = (window.RegExp) ? true : false;

// Help out old versions of IE that don't understand element.style.cursor = 'pointer'
var pointer_cursor = (is_ie ? 'hand' : 'pointer');

function fetch_object(idname)
{
  if (document.getElementById)
  {
    return document.getElementById(idname);
  }
  else if (document.all)
  {
    return document.all[idname];
  }
  else if (document.layers)
  {
    return document.layers[idname];
  }
  else
  {
    return null;
  }
}
function fetch_tags(parentobj, tag)
{
  if (typeof parentobj.getElementsByTagName != 'undefined')
  {
    return parentobj.getElementsByTagName(tag);
  }
  else if (parentobj.all && parentobj.all.tags)
  {
    return parentobj.all.tags(tag);
  }
  else
  {
    return null;
  }
}
function do_an_e(eventobj)
{
  if (!eventobj || is_ie)
  {
    window.event.returnValue = false;
    window.event.cancelBubble = true;
    return window.event;
  }
  else
  {
    eventobj.stopPropagation();
    eventobj.preventDefault();
    return eventobj;
  }
}
/*
*
*	The Ultimate addEvent function by Stephen Stchur
*
*	Copyright (c) Microsoft Corporation.  All rights reserved.
*
*	Description:
*	Cross-browser eventing library
*
*	Requires:
*	Nothing
*
*	License: (Ms-PL):  http://www.codeplex.com/gimme/license
*	See also: license.txt
*
*/

var xb = {};
(function()
{
	var GUIDCounter = 0;
	var evtHash = {};
	var pseudoEvents =
	{
		'mouseenter': function(_fn, _useCapture, _listening)
		{
			var f = mouseEnter(_fn);
			_listening ? xb.addEvent(this, 'mouseover', f, _useCapture, false) : xb.removeEvent(this, 'mouseover', f, _useCapture, false);
			f = null;
		},

		'mouseleave': function(_fn, _useCapture, _listening)
		{
			var f = mouseEnter(_fn);
			_listening ? xb.addEvent(this, 'mouseout', f, _useCapture, false) : xb.removeEvent(this, 'mouseout', f, _useCapture, false);
			f = null;
		}
	};

	xb.Helper =
	{
		getObjectGUID: getObjectGUID,
		storeHandler: storeHandler,
		retrieveHandler: retrieveHandler,
		isAnAncestorOf: isAnAncestorOf,
		mouseEnter: mouseEnter
	};

	xb.addEvent = function()
	{
		if (typeof document.addEventListener !== 'undefined')
		{
			return w3c_addEvent;
		}
		else if (typeof document.attachEvent !== 'undefined')
		{
			return ie_addEvent;
		}
		else
		{
			// no modern event support I guess :-(
			// (you could use DOM 0 here if you really wanted to)
			return function() {};
		}

		function w3c_addEvent(_elem, _evtName, _fn, _useCapture, _directCall)
		{
			var eventFn = pseudoEvents[_evtName];

			if (typeof eventFn === 'function' && _directCall !== false)
			{
				eventFn.call(_elem, _fn, _useCapture, true);
			}
			else
			{
				_elem.addEventListener(_evtName, _fn, _useCapture);
			}
		}

		function ie_addEvent(_elem, _evtName, _fn, _useCapture, _directCall)
		{
			var eventFn = pseudoEvents[_evtName];

			if (typeof eventFn === 'function' && _directCall !== false)
			{
				eventFn.call(_elem, _fn, _useCapture, true);
			}
			else
			{
				// create a key to identify this element/event/function combination
				var key = generateHandlerKey(_elem, _evtName, _fn);

				// if this element/event/combo has already been wired up, just return
				var f = evtHash[key];
				if (typeof f !== 'undefined')
				{
					return;
				}

				// create a helper function to fix IE's lack of standards support
				f = function(e)
				{
					// map .target to .srcElement
					e.target = e.srcElement;

					// map .relatedTarget to either .toElement or .fromElement
					if (_evtName == 'mouseover') { e.relatedTarget = e.fromElement; }
					else if (_evtName == 'mouseout') { e.relatedTarget = e.toElement; }

					e.preventDefault = function() { e.returnValue = false; };
					e.stopPropagation = function() { e.cancelBubble = true; };

					// call the actual function, using entity (the element) as the 'this' object
					_fn.call(_elem, e);

					// null out these properties to prevent memory leaks
					e.target = null;
					e.relatedTarget = null;
					e.preventDefault = null;
					e.stopPropagation = null;
					e = null;
				};

				// add the helper function to the event hash
				evtHash[key] = f;

				// hook up the event (IE style)
				_elem.attachEvent('on' + _evtName, f);

				key = null;
				f = null;
			}
		}
	}();

	xb.removeEvent = function()
	{
		if (typeof document.removeEventListener !== 'undefined')
		{
			return w3c_removeEvent;
		}
		else if (typeof document.detachEvent !== 'undefined')
		{
			return ie_removeEvent;
		}
		else
		{
			// no modern event support I guess :-(
			return function() {};
		}

		function w3c_removeEvent(_elem, _evtName, _fn, _useCapture, _directCall)
		{
			var eventFn = pseudoEvents[_evtName];

			if (typeof eventFn === 'function' && _directCall !== false)
			{
				eventFn.call(_elem, _fn, _useCapture, false);
			}
			else
			{
				_elem.removeEventListener(_evtName, _fn, _useCapture);
			}
		}

		function ie_removeEvent(_elem, _evtName, _fn, _useCapture, _directCall)
		{
			var eventFn = pseudoEvents[_evtName];

			if (typeof eventFn === 'function' && _directCall !== false)
			{
				eventFn.call(_elem, _fn, _useCapture, false);
			}
			else
			{
				var key = generateHandlerKey(_elem, _evtName, _fn);
				var f = evtHash[key];
				if (typeof f !== 'undefined')
				{
					// unhook the event and delete the element from the event hash
					_elem.detachEvent('on' + _evtName, f);
					delete evtHash[key];
				}

				// prevent IE memory leaks
				key = null;
				f = null;
			}

			return this;
		}

	}();

	xb.defineEvent = function(_evtName, _logicFn)
	{
		pseudoEvents[_evtName] = _logicFn;
	};


	// Helper Functions
	function storeHandler(_key, _handler)
	{
		evtHash[_key] = _handler;
	}

	function retrieveHandler(_key)
	{
		return evtHash[_key];
	}

	function generateHandlerKey(_elem, _evtName, _handler)
	{
		return '{' + getObjectGUID(_elem) + '/' + _evtName + '/' + getObjectGUID(_handler) + '}';
	}

	function isAnAncestorOf(_ancestor, _descendant, _generation)
	{
		if (_ancestor === _descendant) { return false; }

		var gen = 0;
		while (_descendant && _descendant != _ancestor)
		{
			gen++;
			_descendant = _descendant.parentNode;
		}

		_generation = _generation || gen;
		return _descendant === _ancestor && _generation === gen;
	}

	function mouseEnter(_fn)
	{
		var key = xb.Helper.getObjectGUID(_fn);
		var f = evtHash[key];
		if (typeof f === 'undefined')
		{
			f = evtHash[key] = function(_evt)
			{
				var relTarget = _evt.relatedTarget;
				if (this === relTarget || isAnAncestorOf(this, relTarget)) { return; }

				_fn.call(this, _evt);
			};
		}
		return f;
	}

	function getObjectGUID(_elem)
	{
		if (_elem === window)
		{
			return 'theWindow';
		}
		else if (_elem === document)
		{
			return 'theDocument';
		}
		else if (typeof _elem.uniqueID !== 'undefined')
		{
			return _elem.uniqueID;
		}

		var ex = '__$$GUID$$__';
		if (typeof _elem[ex] === 'undefined')
		{
			_elem[ex] = ex + GUIDCounter++;
		}
		return _elem[ex];
	}

})();

function $(id)
{
	return document.getElementById(id);
}
function $$(id)
{
	return document.getElementsByName(id);
}
function $$$(id)
{
	return document.getElementsByTagName(id);
}

// PopUp öffnen
function wopen1(url,ziel)
{
  window.open(url,ziel,'resizable=yes,status=yes,scrollbars=yes,menubar=yes,toolbar=yes,location=yes');
}
function wopen12(url,ziel,width,height)
{
  window.open(url,ziel,'width='+width+',height='+height+'resizable=no,status=yes,scrollbars=auto,menubar=no,toolbar=no,location=no');
}
function wopen2(url,ziel)
{
  window.open(url,ziel,'resizable=yes,status=no,scrollbars=yes,menubar=no,toolbar=no,location=no');
}

// Cookie setzen
function setCookie(name, wert, expires, domain, path, secure)
{
  var datum = new Date();
  var zeit = new Date(datum.getTime() + expires);
  var cook = name+"="+unescape(wert);
   cook += (expires) ? "; expires="+ zeit.toGMTString() : "";
   cook += (domain) ? "; domain="+ domain : "";
   cook += (path) ? "; path="+path : "";
   cook += (secure) ? "; secure" : "";
   document.cookie = cook;
}
// Cookie lesen
function getCookie(name)
{
   var i=0;  //Suchposition im Cookie
   var suche = name+"=";
   while (i<document.cookie.length)
   {
      if (document.cookie.substring(i, i+suche.length)==suche)
      {
         var ende = document.cookie.indexOf(";", i+suche.length);
         ende = (ende>-1) ? ende : document.cookie.length;
         var cook = document.cookie.substring(i+suche.length, ende);
         return unescape(cook);
      }
      i++;
   }
   return null;
}
// Cookie löschen
function eraseCookie(name, domain, path)
{
   var cook="name=; expires=Thu, 01-Jan-70 00:00:01 GMT";
   cook += (domain) ? "domain="+domain : "";
   cook += (path) ? "path="+path : "";
   document.cookie = cook;
}

/* HTML-Tags und Sonderzeichen maskieren */
function htmlentities(str,typ)
{
  if(typeof str=="undefined")
    str="";
  if(typeof typ!="number")
    typ=2;
  typ = Math.max(0,Math.min(3,parseInt(typ)));
  var html = new Array();
  html[38] = "&amp;";
  html[60] = "&lt;";
  html[62] = "&gt;";
  if(typ==1 || typ==3)
    html[39] = "&#039;";
  if(typ==2 || typ==3)
    html[34] = "&quot;";
  for(var i in html)
    eval("str=str.replace(/"+String.fromCharCode(i)+"/g,\""+html[i]+"\");");
  var entity = new Array(
    "&nbsp;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;",
    "&uml;","&copy;","&ordf;","&laquo;","&not;","&shy;","&reg;","&macr;",
    "&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;",
    "&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;",
    "&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;",
    "&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;",
    "&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;",
    "&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;",
    "&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;",
    "&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;",
    "&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;",
    "&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&yacute;","&thorn;","&yuml;"
    );
  for(var i in entity)
    eval("str=str.replace(/"+String.fromCharCode(i*1+160)+"/g,\""+entity[i]+"\");");
  return str;
}
/**
* John Resig, erklärt bei quirksmode
*/
function addEvent( obj, type, fn )
{
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   } else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}

function removeEvent( obj, type, fn )
{
   if (obj.removeEventListener) {
      obj.removeEventListener( type, fn, false );
   } else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }
}

// NL-Info anzeigen
function ShowInfo(id)
{
  info = $(id);
  info.style.display = 'block';
}

// NL-Info ausblenden
function HideInfo()
{
  info.style.display = 'none';
}

// NL-Info Position aktualisieren
function updateInfo(e)
{
  if(info!=null)
  {
    posx=0; posy=0;
    if (!e) e=window.event;
    if (e.pageX && e.pageY)
    {
      posx=e.pageX;
      posy=e.pageY;
    }
    else if (e.clientX && e.clientY)
    {
      if(document.compatMode && document.compatMode=="CSS1Compat")
      {
        posx=e.clientX + document.documentElement.scrollLeft;
        posy=e.clientY + document.documentElement.scrollTop;
      }
      else
      {
        posx=e.clientX + document.body.scrollLeft;
        posy=e.clientY + document.body.scrollTop;
      }
    }
    //window.status='posx: ' + posx + ' posy: ' + posy;
    info.style.top  = (posy - 104) + 'px';
    info.style.left = (posx + 1) + 'px';
  }
}

// Anfahrtskizze einblenden
function ShowCard()
{
  if(!zoom_in)
    zoom_in = true;
  pcard = $('p_skizze');
  card = $('skizze');
  pcard.style.display = 'block';
  card.style.display = 'block';
  if(card_height_current<card_height)
  {
    card_height_current += 5;
    if(card!=null)
    {
      pcard.style.height = card_height_current + 'px';
      card.style.height = card_height_current + 'px';
    }
    timer = window.setTimeout("ShowCard()",0.1);
  }
}

// Anfahrtskizze ausblenden
function HideCard()
{
  if(zoom_in)
    zoom_in = false;
  pcard = $('p_skizze');
  card = $('skizze');
  if(card_height_current>0)
  {
    card_height_current -= 10;
    if(card!=null)
    {
      pcard.style.height = card_height_current + 'px';
      card.style.height = card_height_current + 'px';
    }
    timer = window.setTimeout("HideCard()",0.1);
  }
  else
  {
    pcard.style.display = 'none';
    card.style.display = 'none';
  }
}

// Anfahrtskizze
function Card()
{
  window.clearTimeout(timer);
  if(!zoom_in)
    timer = window.setTimeout("ShowCard()",0.1);
  else
    timer = window.setTimeout("HideCard()",0.1);
}

// find out if ie runs in quirks mode
//
var docEl = (typeof document.compatMode!="undefined"&&document.compatMode!="BackCompat")?"documentElement":"body";

// register event
// capture it for nc 4x (ok it's a dino)
//
//function init_mousemove() {
    if(document.layers) document.captureEvents(Event.MOUSEMOVE);
//    document.onmousemove =	dpl_mouse_pos;
//}

function subin(x2,txt,e)
{
  var subtitle = $(x2);
  if(subtitle)
  {
    //e = is_ie?'':event;
    var mX = e? e.pageX : window.event.x;
	  var mY = e? e.pageY : window.event.y;
	  if (document.all && !document.captureEvents)
	  {
	    mX += document[docEl].scrollLeft;
	    mY += document[docEl].scrollTop;
    }
    subtitle.style.display = 'block';
    subtitle.style.top     = mY - subtitle.offsetHeight + 'px';
    subtitle.style.left    = mX + 'px';
    subtitle.style.width   = 'auto';
    subtitle.innerHTML = txt;
    if(subtitle.offsetWidth>400)
      subtitle.style.width  = '400px';
  }
  if (document.layers) routeEvent(e);
}

function subout(x)
{
  var subtitle = $(x);
  if(subtitle)
  {
    subtitle.style.display = 'none';
  }
}

// Container ein- / ausblenden
function showContainer(container)
{
  if(container)
  {
    var element = $(container);
    if(element.style.display == 'none')
      element.style.display = 'block';
    else
      element.style.display = 'none';
  }
}
// Tooltipps erstellen
function Tooltipp()
{
	var thisObj = this;
	var dickeTooltip = document.getElementById('dickeTooltip');

    var body = null;
    if(window.document.compatMode && window.document.compatMode == "CSS1Compat")
      body = window.document.documentElement;
    else if(window.document.body)
      body = window.document.body;

	this.show = function(event)
	            {
	              if(!event) var event = window.event;
	              var x = (event.pageX) ? event.pageX : event.clientX + body.scrollLeft;
	              var y = (event.pageY) ? event.pageY : event.clientY + body.scrollTop;
	              dickeTooltip.innerHTML =  this.attributes['title'].nodeValue;
	              this.attributes['title'].nodeValue = '';
	              dickeTooltip.style.top = y+'px';
	              dickeTooltip.style.display = 'block';
	              var breite = dickeTooltip.offsetWidth;
	              dickeTooltip.style.left = (x - Math.round(breite/2))+'px';
	            }

	this.hide = function()
	            {
	              dickeTooltip.style.display = 'none';
	              this.attributes['title'].nodeValue = dickeTooltip.innerHTML;
	            }
}

window.onload = function()
                {
                  tooltipp = new Tooltipp();
                  allElements = document.getElementsByTagName("*");
                  for (i in allElements)
                  {
                    if (allElements[i].attributes && allElements[i].attributes['title'] && allElements[i].attributes['title'].nodeValue)
                    {
                      //allElements[i].onmouseover = tooltipp.show;
                      xb.addEvent(allElements[i], 'mouseover', tooltipp.show);
                      //allElements[i].onmouseout = tooltipp.hide;
                      xb.addEvent(allElements[i], 'mouseout', tooltipp.hide);
                      //window.status = allElements[i].attributes['title'].nodeValue;
                    }
                  }
                }

// Galeriebild laden
function setImage(preview,width,height)
{
  if(preview!=null)
  {
    var _img = new Image();
    var img = $('galerie_bild');
    img.src = '_img/blank.gif';
    _img.onload = function()
                  {
                    img.width  = _img.width;
                    img.height = _img.height;
                    img.src    = _img.src;
                    var margin = (500-_img.width)/2;
                    img.style.margin  = '0px '+Math.ceil(margin)+'px';
                  };
    _img.src = $('bild_link_'+preview).href;
    img.alt = $('bild_link_'+preview).title;
    $('galerie_titel').innerHTML = $('bild_link_'+preview).title;
    preview++;
    if($('bild_link_'+preview))
    {
      $('galerie_forwart').href = "javascript:setImage("+preview+",0,0);";
      $('galerie_forwart').style.visibility = "visible";
    }
    else
      $('galerie_forwart').style.visibility = "hidden";
    preview--;
    preview--;
    if($('bild_link_'+preview))
    {
      $('galerie_back').href = "javascript:setImage("+preview+",0,0);";
      $('galerie_back').style.visibility = "visible";
    }
    else
      $('galerie_back').style.visibility = "hidden";
  }
}

function ClearInput(field, defaultstr)
{
  if(field.value==defaultstr)
    field.value = '';
}

function ResetInput(field, defaultstr)
{
  if(field.value=='')
    field.value = defaultstr;
}


// Globale Variablen initialisieren
var zoom_in = false;
var card_height = 0;
var card_height_current = 0;
var info = null;
var timer = null;

document.onmousemove = updateInfo;
