    var clEventTimer;
    var clSecretServiceTimer;
    var clOnlineUsersTimer;
    var clScreamBoxTimer;
    var clEventDetailsElement;
  	var clLoggedOnUsersElement;
  	
    /**
     * Called by the onLoad() Handler. Initializes various members.
     */
    function initialize()
    {
      clEventDetailsElement = document.getElementById("eventdetails");
      clLoggedOnUsersElement = document.getElementById("loggedonusers");
      clSecretServiceTimer = setTimeout('updateSecretServiceState()',500);
      clOnlineUsersTimer = setTimeout('updateOnlineUsers()',1000);
      clScreamBoxTimer = setTimeout('updateScreamBoxCount()',2345);
      clearEventDetails();
    }

    /**
     * Called by onMouseOut - starts asyncronous call to clearEventDetails() in 4000 ms.
     */
    function resetEventDetails()
    {
      clEventTimer = setTimeout('clearEventDetails()',6000);
    }    

    function clearEventDetails()
    {
    
        clEventDetailsElement.innerHTML = "&nbsp;</br>&nbsp;";
        //  "MATERIAL: <a href='http://www.kletter-spezial-einheit.de' class='link_mini' title='Hier kauft der CaveSeeker.'>KLETTER SPEZIAL EINHEIT</a>";
        //"<br><span class = 'text_mini_red'>&nbsp;</span>";
    }    

  function successScreamBoxCount(txt,xml)
  {
    // txt contains JSON stuff like this:
    // ["1922",    "1234123453212",           "Wipplinger","juwi"]
    // ScreamCount UNIXLastScreamTimeStamp   LastScreamer, LastScreamers ImageDirectory
   
    var clData = eval("("+txt+")");
    
    clScreamBoxElement = document.getElementById("screamboxcount");
    
    iUnixTime = parseInt(new Date().getTime()/1000);
    iDelta = iUnixTime-clData[1];
    if (iDelta < 300)
    {
      strAdditional = " <img title='"+clData[2]+"' border='0' src='comrades/"+clData[3]+"/smallface.jpg' width='12' height='14'>"
    }
    else
    {
      strAdditional = "";
    }
    clScreamBoxElement.innerHTML = clData[0] + strAdditional;
    iGreen = 255/300*iDelta;
    if (iGreen > 255)
    {
    iGreen = 255;
    }
    iBlue = 204/300*iDelta;
    if (iBlue > 204)
    {
     iBlue = 204;
    }
    clScreamBoxElement.style.color = num2hex([255,iGreen, iBlue]);
    clScreamBoxTimer = setTimeout('updateScreamBoxCount()',2345);
    
  }
  
  function num2hex(triplet) 
  {
			 var hex_alphabets = "0123456789ABCDEF";
			 var hex = "";
			 var int1,int2;
			 for(var i=0;i<3;i++) 
			 {
			  int1 = triplet[i] / 16;
			  int2 = triplet[i] % 16;
			
			  hex += hex_alphabets.charAt(int1) + hex_alphabets.charAt(int2); 
    }
   return(hex);
  }

	function successUpdateOnlineUsers(txt,xml)
	{
      clOnlineUsersTimer = setTimeout('updateOnlineUsers()',5260);
      
      node = xml.getElementsByTagName('data')[0];
      usersnode = node.getElementsByTagName('users');
      usernodes = usersnode[0].getElementsByTagName('user');
      
      var strResult = "";
      var strFinalResult = "";
      
      for(var i = 0; i < usernodes.length; i++)
      {
        strResult = "";
        if(usernodes[i].getAttribute('imagedirectory') != "")
        {
         strResult += "<img border='0' src='comrades/"+usernodes[i].getAttribute('imagedirectory')+"/smallface.jpg' width='8' height='10'>";
        }
        strResult += " ";
        if(usernodes[i].getAttribute('screaming') == "1")
        {
         strResult += "<a href='php/screambox/homebase.php' class='redlink' title='Kamerad befindet sich in der Schreischachtel'>"
        }
       	strResult += usernodes[i].firstChild.nodeValue.toUpperCase();
     
        if(usernodes[i].getAttribute('screaming') == "1")
        {
          strResult += "</a>";        
        }
     
        strResult += " ";
        strFinalResult += strResult;
      }

      clLoggedOnUsersElement.innerHTML = strFinalResult; //usernodes[0].getElementsByTagName('user');
	}
	
	function successSecretServiceState(txt,xml)
	{
    //if (txt >= 0)
    {
      //alert("Komm in die Box, Marie: "+txt);
    }

    clSecretServiceTimer = setTimeout('updateSecretServiceState()',10000);
	}
	
	function updateScreamBoxCount()
	{
      var myAjax = new Ajax();
      myAjax.url="php/screambox/screamboxstate.php";
      myAjax.params="screamboxinfo=1";
      myAjax.bypassBrowserCache=true;
      myAjax.onSuccess=successScreamBoxCount;
      myAjax.doRequest();
	}
	
	function updateOnlineUsers()
	{
      var myAjax = new Ajax();
      myAjax.url="php/classes/Geheimdienst.php";
      myAjax.params="onlineUsers=1";
      myAjax.bypassBrowserCache=true;
      myAjax.onSuccess=successUpdateOnlineUsers;
      myAjax.doRequest();
	}

	function updateSecretServiceState()
	{
      var myAjax = new Ajax();
      myAjax.url="php/classes/Geheimdienst.php";
      myAjax.bypassBrowserCache=true;
      myAjax.onSuccess=successSecretServiceState;
      myAjax.doRequest();
	}

    /**
     * Called by onMouseOver.
     */
    function retrieveEventDetails(iMessageID)
    {
      var myAjax = new Ajax();
      myAjax.url="php/classes/EventDetailProvider.php";
      myAjax.params="eventID="+iMessageID;
      myAjax.bypassBrowserCache=true;
      myAjax.onSuccess=successHandler;
      myAjax.onerror=errorHandler;
      myAjax.doRequest();
    }
    
    function successHandler(txt,xml)
    {
      clearTimeout(clEventTimer);
      
      node = xml.getElementsByTagName('data')[0];
      strEventTitle = node.getElementsByTagName('title_public')[0].firstChild.nodeValue.toUpperCase();
      
      if (node.getElementsByTagName('title_private')[0] != null)
      {
        strPrivateEventTitle = node.getElementsByTagName('title_private')[0].firstChild.nodeValue.toUpperCase();  
      }
      else
      {
        strPrivateEventTitle = "VERTRAULICH";
      }
      
      strType = node.getElementsByTagName('type')[0].firstChild.nodeValue.toUpperCase();
      strUserLevel = node.getElementsByTagName('userlevel')[0].firstChild.nodeValue.toUpperCase();
      strTag = node.getElementsByTagName('day')[0].firstChild.nodeValue.toUpperCase();
      strHitCount = node.getElementsByTagName('hitcount')[0].firstChild.nodeValue.toUpperCase();
      strInitiator = node.getElementsByTagName('initiator_name')[0].firstChild.nodeValue.toUpperCase();
      strDate = node.getElementsByTagName('date')[0].firstChild.nodeValue.toUpperCase();

// Building List of attendees

     var strAttendeeHtml = "";
     var iLastUserState = -1; // Zuerst sollten die mit UserState 3 aus der DB kommen. Zumindest werden sie so sortiert.
     
// Building List of attendees

    claAttendees = node.getElementsByTagName('attendee');
    
    for (var i = 0; i < claAttendees.length; i++)
    {    
    	
     	var strAttendee =	claAttendees[i].getAttribute('userstate');
      var iUserState = parseInt(strAttendee);
      
						if (iLastUserState == -1)
						{
						 iLastUserState = iUserState;
						}
					 else if (iUserState != iLastUserState)
      {
       iLastUserState = iUserState;
       strAttendeeHtml += " ";
      }
      
      switch(iUserState)
      {
       case 1: 
         strGroupName = "Abonniert";
       break;
       case 2:
         strGroupName = "Unter Vorbehalt zugesagt.";
       break;
       case 3:
         strGroupName = "Zugesagt";
       break;
       default: 
         strGroupName = "";
      } 
      
    		strAttendeeHtml = strAttendeeHtml + "<img border='0' src='comrades/"+claAttendees[i].getAttribute('shortcut')+"/smallface.jpg' title= '"+claAttendees[i].getAttribute('name')+" ["+strGroupName+"]' width='8' height='10'>";
    }
		
      clEventDetailsElement.innerHTML =   "<span class = 'text_mini_red'>DATUM: </span>"+ strDate +
                                          "<span class = 'text_mini_red'> TAG: </span>"+ strTag +
                                          "<span class = 'text_mini_red'> TYP: </span>"+ strType +
                                          "<span class = 'text_mini_red'> ÖFFENTLICHER TITEL: </span>" + strEventTitle + 
                                          "<span class = 'text_mini_red'> INTERNER TITEL: </span>"+strPrivateEventTitle + 
                                      "<br><span class = 'text_mini_red'> BENÖTIGTE BBE: </span>" + strUserLevel + 
                                          "<span class = 'text_mini_red'> AKTIVITÄT: </span>" + strHitCount + 
                                          "<span class = 'text_mini_red'> INITIATOR: </span>" + strInitiator +
                                          "<span class = 'text_mini_red'> KAMERADSCHAFT: " + strAttendeeHtml +" </span>";
    }

    function errorHandler(msg)
    {
      clEventDetailsElement.innerHTML = "AJAX Problem: "+msg;
    }
