/* 
   Manager for Cookies

   (c): This source has been written newly, but has some inspirations from OpenSource projects as 
        Bugzilla and WordPress. As tribute, we put this file into GNU Public Licence.
        2007, M-SYS Document Technologies

   Include into project header:
     cookies = new TCookies('thiscookiename',MinutesToExpire);

   class TCookies {
     constructor TCookies(CookieName: String, DefaultMinutesToExpire: Minutes, DefaultDomain: String optional, 
                          DefaultPath: String optional);
     function GetExpiration(MinutesToExpire: Minutes):Date;
     function GetDocumentCookies();
     function SetDocumentCookie();
     function SetCookie(CookieName: String, CookieValue: Variant, MinutesToExpire: Minutes optional, 
                        CookieDomain: String optional, CookiePath: String optional)
     function GetCookie(CookieName: String; DefaultValue: Variant optional):Variant
   }
*/

function TCookies(CookieName, DefaultMinutesToExpire, DefaultDomain, DefaultPath) 
{
  this.name = CookieName;
  this.DefaultExpiration = this.GetExpiration(DefaultMinutesToExpire);
  this.DefaultDomain = (DefaultDomain) ? DefaultDomain : 
                       (document.domain.search(/[a-zA-Z]/) == -1) ? document.domain :
                       document.domain.substring(document.domain.indexOf('.') + 1,document.domain.length);
  this.DefaultPath = (DefaultPath) ? DefaultPath : '/';
  this.cookies = new Object();
  this.expiration = new Object();
  this.domain = new Object();
  this.path = new Object();
  window.onunload = new Function ('cookies.SetDocumentCookies();');
  this.GetDocumentCookies();
}

TCookies.prototype.GetExpiration = function(MinutesToExpire) 
{
  var date = new Date();
  if (! MinutesToExpire) MinutesToExpire = 60 * 24;
  date.setTime(date.getTime() + (MinutesToExpire * 60 * 1000));
  return date.toGMTString();
}

TCookies.prototype.GetDocumentCookies = function() 
{
  var cookie,pair;
  var cookies = document.cookie.split(';');
  var len = cookies.length;
  for(var i=0;i < len;i++) {
    cookie = cookies[i];
    while (cookie.charAt(0)==' ') cookie = cookie.substring(1,cookie.length);
    pair = cookie.split('=');
    this.cookies[pair[0]] = pair[1];
  }
}

TCookies.prototype.SetDocumentCookies = function() 
{
  var expires = '';
  var cookies = '';
  var domain = '';
  var path = '';
  for(var name in this.cookies) {
    expires = (this.expiration[name]) ? this.expiration[name] : this.DefaultExpiration;
    path = (this.path[name]) ? this.path[name] : this.DefaultPath;
    domain = (this.domain[name]) ? this.domain[name] : this.DefaultDomain;
    cookies = name + '=' + this.cookies[name] +  
              ((path) ? '; path=' + path : '') +
              ((expires) ? '; expires=' + expires : '') +
              ((domain) ? '; domain=' + domain : '');
    document.cookie = cookies;
  }
  return true;

}

TCookies.prototype.SetCookie = function(CookieName, CookieValue, MinutesToExpire, CookieDomain, CookiePath) 
{
  this.cookies[CookieName] = CookieValue;
  if (MinutesToExpire) this.expiration[CookieName] = this.GetExpiration(MinutesToExpire);
  if (CookieDomain) this.domain[CookieName] = CookieDomain;
  if (CookiePath) this.path[CookieName] = CookiePath;
  //alert('SetCookie: '+CookieName+'='+CookieValue);
  return true;
}

TCookies.prototype.GetCookie = function(CookieName, DefaultValue) 
{ 
  var value = this.cookies[CookieName]
  if (!value) value = (DefaultValue) ? DefaultValue : false;
  //alert('GetCookie: '+CookieName+'='+value);
  return value;
}

TCookies.prototype.GetCookieNumber = function(CookieName, DefaultValue) 
{ 
  var value = this.GetCookie(CookieName, DefaultValue);
  if (isNaN(value)) value = DefaultValue;
  return value;
}


