function Ajax() {
  //Eigenschaften deklarieren und initialisieren
  this.url="";
  this.params="";
  this.method="GET";
  this.onSuccess=null;
  this.onError=function (msg) {
    alert(msg)
  }
}

Ajax.prototype.doRequest=function() {
  //Üeberpruefen der Angaben
  if (!this.url) {
    this.onError("Es wurde kein URL angegeben. Der Request wird abgebrochen.");
    return false;
  }

  if (!this.method) {
    this.method="GET";
  } else {
    this.method=this.method.toUpperCase();
  }

  //Zugriff auf Klasse für readyStateHandler ermöglichen  
  var _this = this;
  
  //XMLHttpRequest-Objekt erstellen
  var xmlHttpRequest=getXMLHttpRequest();
  if (!xmlHttpRequest) {
    this.onError("Es konnte kein XMLHttpRequest-Objekt erstellt werden.");
    return false;
  }
  
  //Fallunterscheidung nach Übertragungsmethode
  switch (this.method) {
    case "GET": xmlHttpRequest.open(this.method, this.url+"?"+this.params, true);
                xmlHttpRequest.onreadystatechange = readyStateHandler;
                xmlHttpRequest.send(null);
                break;
    case "POST": xmlHttpRequest.open(this.method, this.url, true);
                 xmlHttpRequest.onreadystatechange = readyStateHandler;
                 xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                 xmlHttpRequest.send(this.params);
                 break;
  }  

  //Private Methode zur Verarbeitung der erhaltenen Daten
  function readyStateHandler() {
    if (xmlHttpRequest.readyState < 4) {
      return false;
    }
    if (xmlHttpRequest.status == 200 || xmlHttpRequest.status==304) {
      if (_this.onSuccess) {
        _this.onSuccess(xmlHttpRequest.responseText, xmlHttpRequest.responseXML);
      }
    } 
	//else {
      //if (_this.onError) {
       // _this.onError("["+xmlHttpRequest.status+" "+xmlHttpRequest.statusText+"] Es trat ein Fehler bei der Datenbertragung auf.");
      //}
   // }
  }
}

//Gibt browserunabhängig ein XMLHttpRequest-Objekt zurück
function getXMLHttpRequest() 
{
  if (window.XMLHttpRequest) {
    //XMLHttpRequest für Firefox, Opera, Safari, ...
    return new XMLHttpRequest();
  } else 
  if (window.ActiveXObject) {
    try {   
      //XMLHTTP (neu) für Internet Explorer 
      return new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {        
        //XMLHTTP (alt) für Internet Explorer
        return new ActiveXObject("Microsoft.XMLHTTP");  
      } catch (e) {
        return null;
      }
    }
  }
  return false;
}


//Globale Variablen
var asb_shouts;

//Initialisierung der Shoutbox
window.onload = function() 
{
  //Referenz auf asb_shouts erzeugen und mit Hinweistext füllen
  asb_shouts = document.getElementById('asb_shouts');
  asb_shouts.innerHTML = "Shoutbox wird geladen...";
  
  //onSubmit des Formulars asb_inputform belegen
  document.asb_inputform.onsubmit = asbSaveNewEntry;
    
  //Bisherige Nachrichten der Shoutbox erstmalig laden
  asbLoadEntries();
  
  //Alle 5 Sekunden Shoutbox-Nachrichten neu laden
  setInterval("asbLoadEntries()",5000);
}

//Laden der asb_entries.xml per AJAX
function asbLoadEntries() 
{
 with (new Ajax()) {
  url="./data/asb_entries.xml";
  onError=asbShowError;
  onSuccess=asbShowEntries;
  doRequest(); 
 }
}

//Umformen der übertragenen asb_entries.xml nach HTML
function asbShowEntries(txt,xml) 
{
  //Fehler beim Laden von asb_entries.xml?
  if (asbHasError(txt)) {
    asbShowError(asbGetError(txt));
    return null;
  }  
  
  var content = new String();
  var entryNode, nickNode, textNode;
  var entry = new Array();
  
  for(i=0; i<xml.getElementsByTagName('entry').length;i++) {
    entryNode = xml.getElementsByTagName('entry')[i];
    nickNode = entryNode.getElementsByTagName('nick')[0];
    textNode = entryNode.getElementsByTagName('text')[0]; 
    entry['nick'] = nickNode.firstChild.nodeValue;  
    entry['time'] = entryNode.attributes[0].nodeValue;
    entry['text'] = textNode.firstChild.nodeValue;  
    content += '<div class="nameandtime"><b>'+entry['nick']+'</b> ['+entry['time']+']: </div><div class="text">'+entry['text']+'</div>';
  } 
  asb_shouts.innerHTML = content;
}

//Neuen Eintrag an Server schicken
function asbSaveNewEntry() 
{
  var text=(this.asb_message.value).trim();
  var nick=(this.asb_name.value).trim();

  //Eingaben überprüfen
  if (!nick) {
    alert("Bitte gib einen Namen an!");
    return null;
  }
  if (!text) {
    alert("Bitte gib eine Nachricht ein!");
    return null;
  }
 
  //Eingaben für den Versand vorbereiten
  nick=encodeURIComponent(nick); 
  text=encodeURIComponent(text);

  with (new Ajax()) {
    url="php/writeEntry.php";
    method="POST";
    params="text="+text+"&nick="+nick;
    onError=asbShowError;
    onSuccess= function(txt,xml) {
      //Fehler beim Speichern?
      if (asbHasError(txt)) {
        asbShowError(asbGetError(txt));
        return false;
      } else {
        asbLoadEntries();
      }
    }
    doRequest(); 
  } 

 //Nachrichtentext löschen und Feld fokussieren
 this.asb_message.value = "";
 this.asb_message.focus();
 
 //Herkömmliches Verschicken des Formulars verhindern
 return false;
}

//allgemeine Fehlerbehandlung
function asbShowError(msg) 
{
 //alert(msg); 
}

//Überprüft Rückgabe eines PHP-Skripts auf Fehlermeldung
function asbHasError(msg)
{
  //Hat msg einen Inhalt?
  if (!msg) return false; 
  
  //Befindet sich Zeichenkette AOEERROR: am Anfang von msg?
  if (msg.indexOf("ASBERROR:") == 0) {
    return true;
  } else {
    return false;
  }
}

//Aufbereiten der Fehlermeldung eines PHP-Skripts
function asbGetError(msg)
{
  //AOEERROR: aus Fehlermeldung entfernen
  return msg.replace(/ASBERROR:/, "");
}

//String-Objekt um die Funktion trim erweitern
String.prototype.trim = function () {
   return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

function showFormElements(value){
	alert(value);
	if(value =='Region' || value =='Kategorie'||value =='Monat')
	{
		document.getElementById(2).style.visibility='visible';
		document.getElementById(1).style.visibility='hidden';
	}
	else
	{
		document.getElementById(1).style.visibility='visible';
		document.getElementById(2).style.visibility='hidden';
	}
}

function chkRateCommentForm(){

	if(document.rateform.vorname.value==""){
		alert("Bitte Vorname eingeben!");
		document.rateform.vorname.focus();
		return false;
	}
	if(document.rateform.name.value==""){
		alert("Bitte Nachname eingeben!");
		document.rateform.name.focus();
		return false;
	}
	if(document.rateform.email.value==""){
		alert("Bitte E-Mail eingeben!");
		document.rateform.email.focus();
		return false;
	}
   if (document.rateform.email.value.indexOf("@") == -1) {
	   alert("Keine gültige E-Mail-Adresse!");
	   document.rateform.email.focus();
		return false;
	}
	/*if(document.rateform.kommentar.value==""){
		alert("Bitte Kommentar eingeben!");
		document.rateform.kommentar.focus();
		return false;
	}*/
	if(document.rateform.kommentartitle.value==""){
		alert("Bitte Betreff eingeben!");
		document.rateform.kommentartitle.focus();
		return false;
	}
}

function chkFormular(){
	if(document.createeventform.title.value==""){
		alert("Bitte Eventtitel eingeben!");
		document.createeventform.title.focus();
		return false;
	};
	return true;
	//return alert('Hallo');
}

/**
 *	Object zum dynamischen Scrollen von Inhalten.
 *
 *	Company: Gimmixx New Media
 *	Programmer: Robert Engelhardt
 *	E-Mail: engelhardt@gimmixx.de
 *
 *	Created: 03 01 2007
 *
 *
 *	Element initialisierung:
 *	------------------------
 *	gxScroller.addScroller('scroller', 400, 20);
 *	gxScroller.initScrolling('scroller', 50, 3);
 *
 */

var gxScroller =
{

	addCssProperty : function (element, property, value)
	{

		element.style[property] = value;
	},

	setStatusMessage : function (message)
	{

		window.status = message;
	},

	addScroller : function (element, width, padding)
	{

		if (this.e == null)
		{

			this.e = {};
		}

		this.e[element] =
		{

			element  			: (typeof element == 'object') ? element : document.getElementById(element),
			top					: 0,
			left				: padding,
			displayHeight		: null,
			allDisplays			: 0,
			steps				: null,
			displayCount		: 0,
			newValue			: null,
			currentValue		: null,
			valueDifferenz		: null,
			stoppFeadback		: false,
			interval			: null
		};

		var obj = (this.e[element]['element'].firstChild.tagName == null) ? this.e[element]['element'].childNodes[1] : this.e[element]['element'].firstChild;
		var tds = obj.getElementsByTagName('td');


		this.addCssProperty(this.e[element]['element'], 'width', width + 'px');
		this.addCssProperty(this.e[element]['element'], 'position', 'relative');
		this.addCssProperty(this.e[element]['element'], 'overflow', 'hidden');

		this.addCssProperty(obj, 'position', 'relative');
		this.addCssProperty(obj, 'left', padding + 'px');
		this.addCssProperty(obj, 'top', '0px');
		this.addCssProperty(obj, 'width', (width - (padding * 2)) + 'px');

		for(var x = 0; x < tds.length; ++x)
		{

			if (this.e[element]['displayHeight'] < (tds[x].offsetHeight  + (padding * 2)))
			{

					this.e[element]['displayHeight'] = tds[x].offsetHeight + (padding * 2);
			}
		}

		for(var y = -1, x = 0; x < tds.length; ++x)
		{

			this.addCssProperty(tds[x], 'height', this.e[element]['displayHeight'] + 'px');
			this.addCssProperty(tds[x], 'cursor', 'pointer');

			tds[x].element = element;
			tds[x].onmouseover = function () {

				gxScroller.e[element]['stoppFeadback'] = true;
			};

			tds[x].onmouseout = function () {

				gxScroller.e[element]['stoppFeadback'] = false;
			};
		}

		this.addCssProperty(this.e[element]['element'], 'height', this.e[element]['displayHeight'] + 'px');

		this.e[element]['allDisplays'] 	= tds.length;
		this.e[element]['element'] 		= obj;
	},


	easeOutQuint : function (t, b, c, d)
	{

		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},


	initScrolling : function (element, duration, stoppTime)
	{

		if(arguments[3] == null)
		{

			window.clearTimeout(this.e[element]['interval']);

			this.e[element]['steps']			= 0;
			this.e[element]['newValue']			= -(this.e[element]['displayHeight'] * this.e[element]['displayCount']) - ((!window.opera && document.all) ? 1 : 0);
			this.e[element]['currentValue']		= parseInt(this.e[element]['element'].style.top);
			this.e[element]['valueDifferenz']	= this.e[element]['newValue'] - this.e[element]['currentValue'];
			this.e[element]['interval']			= null;
		}

		if(this.e[element]['steps'] < duration)
		{

			this.e[element]['element'].style.top = this.easeOutQuint(this.e[element]['steps'], this.e[element]['currentValue'], this.e[element]['valueDifferenz'], duration) + 'px';

			if (!this.e[element]['stoppFeadback'])
			{

				this.e[element]['steps']++;
			}

			this.e[element]['interval'] = window.setTimeout('gxScroller.initScrolling("' + element + '", ' + duration + ', ' + stoppTime + ', true)', 10);
		}

		else

		{

			if (++this.e[element]['displayCount'] < this.e[element]['allDisplays'])
			{

				window.clearTimeout(this.e[element]['interval']);

				window.setTimeout('new Function("", gxScroller.initScrolling("' + element + '", ' + duration + ', ' + stoppTime + '))', stoppTime * 1000);
			}

			else

			{

				window.clearTimeout(this.e[element]['interval']);

				this.e[element]['steps'] 			= 0;
				this.e[element]['displayCount']		= 0;
				this.e[element]['newValue']			= -(this.e[element]['displayHeight'] * this.e[element]['displayCount']);
				this.e[element]['currentValue'] 	= parseInt(this.e[element]['element'].style.top);;
				this.e[element]['valueDifferenz'] 	= this.e[element]['newValue'] - this.e[element]['currentValue'];
				this.e[element]['interval']			= null;

				window.setTimeout('new Function("", gxScroller.initScrolling("' + element + '", ' + duration + ', ' + stoppTime + ', true))', stoppTime * 1000);
			}
		}
	}
};

window.onload = function ()
{
	gxScroller.addScroller('scroller', 130, 0);
	gxScroller.initScrolling('scroller', 20, 3);
};
