//--------------------------------------------------------------------------
//! @class    Cookie
//! @author   Rico Sonntag <mail@ricosonntag.de>
//! @version  1.0
//! @date     04.12.2006
//!
//! @brief Klasse zum Lesen und Setzen von Cookies.
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
//! @brief Funktion entfernt führende und nachfolgende Leerzeichen
//!        aus einem String.
//--------------------------------------------------------------------------
String.prototype.trim = function()
{
	return (this.replace(/\s+$/, "").replace(/^\s+/, ""));
};

//--------------------------------------------------------------------------
//! @brief Konstruktor (erwartet den Namen des Cookies)
//--------------------------------------------------------------------------
function Cookie(cookieName)
{
	// Name des Cookies
	this.Name = cookieName.trim();
}

//--------------------------------------------------------------------------
//! @brief Diese Funktion liefert den Inhalt des Cookies bzw. null wenn
//!        dieser nicht existiert.
//--------------------------------------------------------------------------
Cookie.prototype.Find = function()
{
  // Cookies sind durch Semikolon getrennt
  var Cookies = document.cookie.split(";");

	// alle Cookies durchlaufen und den Cookie mit
	// übereinstimmenden Namen suchen
  for (var i = 0; i < Cookies.length; ++i)
  {
    // Name und Werte sind durch "=" getrennt
    var NameValue   = Cookies[i].split("=");
    var CookieName  = NameValue[0].trim();
    var CookieValue = NameValue[1];

		// Name muss exakt übereinstimmen
    if (this.Name.indexOf(CookieName) == 0)
      return unescape(CookieValue);
  }

  // nichts gefunden
  return null;
}

//--------------------------------------------------------------------------
//! @brief Diese Funktion liefert "true" wenn der Cookie bereits
//!        vorhanden ist.
//--------------------------------------------------------------------------
Cookie.prototype.Exists = function()
{
	return (this.Find() != null ? true : false);
}

//--------------------------------------------------------------------------
//! @brief Diese Funktion liefert den Cookie-String zurück.
//! @todo
//--------------------------------------------------------------------------
Cookie.prototype.Get = function()
{
	return this.Find();
}

//--------------------------------------------------------------------------
//! @brief Diese Funktion setzt die Daten eines Cookies
//--------------------------------------------------------------------------
Cookie.prototype.Set = function(Value, Expires, Path, Domain, Secure)
{
	var cookieString = this.Name + "=" + escape(Value) +
	                   ((Expires) ? ";expires=" + Expires.toGMTString() : "") +
	                   ((Path)    ? ";path="    + Path                  : "") +
	                   ((Domain)  ? ";domain="  + Domain                : "") +
	                   ((Secure)  ? ";secure"                           : "");

	document.cookie = cookieString;
}

//--------------------------------------------------------------------------
//! @brief Diese Funktion löscht den Cookie. Dazu wird ein Datum in der
//!        Vergangenheit gesetzt.
//--------------------------------------------------------------------------
Cookie.prototype.Delete = function()
{
	// veraltetes Datum setzen
	document.cookie = this.Name + "=" + escape("") + ";expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}

