var ie5=document.all && !window.opera;
var ns6=document.getElementById;

function GetElementParentByTag(oElement,strTagName) {
	var strTemp = strTagName.toLowerCase();
	while ((oElement != null) && (typeof oElement.tagName != 'undefined') && (oElement.tagName.toLowerCase() != strTemp)) oElement = oElement.parentNode;
	return oElement;
};

function GetWindowWidth() {
    try { return ie5 ? document.body.clientWidth : window.innerWidth; } 
    catch (e) { return 0; }
};

function GetWindowHeight() {
    try { return ie5 ? document.body.clientHeight : window.innerHeight; }
    catch (e) { return 0; }
};


function GetEventSource(e) {
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	return targ;
}


function GetElementPosition(element)
/* der Aufruf dieser Funktion ermittelt die absoluten Koordinaten
   des Objekts element */
{
  var elem=element,tagname="",x=0,y=0;
  
/* solange elem ein Objekt ist und die Eigenschaft offsetTop enthaelt
   wird diese Schleife fuer das Element und all seine Offset-Eltern ausgefuehrt */
  while ((elem != null) && (typeof(elem)=="object") && (typeof(elem.tagName)!="undefined"))
  {
    y+=elem.offsetTop;     /* Offset des jeweiligen Elements addieren */
    x+=elem.offsetLeft;    /* Offset des jeweiligen Elements addieren */
    tagname=elem.tagName.toUpperCase(); /* tag-Name ermitteln, Grossbuchstaben */

/* wenn beim Body-tag angekommen elem fuer Abbruch auf 0 setzen */
    if (tagname=="BODY")
      elem=0;

/* wenn elem ein Objekt ist und offsetParent enthaelt
   Offset-Elternelement ermitteln */
    if (typeof(elem)=="object")
      if (typeof(elem.offsetParent)=="object")
        elem=elem.offsetParent;
  }
	
  // for ie add scroll position
  var docEl = (typeof document.compatMode != "undefined" && document.compatMode        != "BackCompat") ? "documentElement" : "body";
	if (document[docEl]) {
		x    -= document[docEl].scrollLeft;
		y    -= document[docEl].scrollTop;
	}


/* Objekt mit x und y zurueckgeben */
  position=new Object();
  position.x=x;
  position.y=y;
  return position;
}


function DefaultHandleOnClick(e) {
	if (typeof ContextMenuHandleDocumentOnClick  == "function") ContextMenuHandleDocumentOnClick(e);
	if (typeof CalendarHandleDocumentOnClick  == "function") CalendarHandleDocumentOnClick(e);
};


function SetElementClassName(oElement,strClassName,bAdd) {

    if (!oElement) return;
    
    // entfernen
    if (!bAdd) {
        oElement.className = oElement.className.replace(strClassName);
        return;
    };
    
    // hinzufügen
    if (oElement.className == '') {
        oElement.className = strClassName;
    } else {
        if (oElement.className.indexOf(strClassName, 0) < 0) oElement.className += " " + strClassName;
    };  
            
};


if (ie5||ns6) document.onclick=DefaultHandleOnClick;

