var Cookie = {
  set: function(name, value, daysToExpire, apath, cdomain, secure, httpOnly) {
    var expire = '';
    if (daysToExpire != undefined) {
      if(typeof(daysToExpire) === 'number' ||
         (typeof(daysToExpire) == 'string' && daysToExpire.indexOf(' ') == -1)) {
        var d = new Date();
        d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
        expire = '; expires=' + d.toGMTString();
      } else {
        // Preformated date string:
        expire = '; expires=' + daysToExpire;
      }

    }

    if(apath) {
      apath = '; path=' + apath;
    } else {
      apath = '';
    }

    if(cdomain) {
      cdomain = '; domain=' + cdomain;
    } else {
      cdomain = '';
    }

    if(secure) {
      secure = '; secure';
    } else {
      secure = '';
    }

    if(httpOnly) {
      httpOnly = '; HttpOnly;';
    } else {
      httpOnly = '';
    }

    return (document.cookie = escape(name) + '=' + escape(value || '') + expire + apath + cdomain + secure + httpOnly);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name, '', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') === '1');
  }
};

function GetCookie(Name){ return Cookie.get(Name); }

// Create or change a cookie given its name and value.  The name and value
// are required, but the expiration date isn't.  Note that if you don't specify
// an expiration date, the cookie only exists for the current session.
function SetCookie(Name, Value, Expire, APath){
  if(!Name) return;
  if(!Expire) Expire = 1;

  if(typeof(Expire) == 'string' && Expire.indexOf('GMT') == -1){
    var i;
    var expDate = new Date();
    var newTime;
    if((i = Expire.indexOf('year')) != -1){
      newTime = expDate.getTime() + (86400000 * 365 * Expire.substring(0, i));
    } else if((i = Expire.indexOf('month')) != -1){
      newTime = expDate.getTime() + (86400000 * 30 * Expire.substring(0, i));
    } else if((i = Expire.indexOf('day')) != -1){
      newTime = expDate.getTime() + (86400000 * Expire.substring(0, i));
    } else if((i = Expire.indexOf('hour')) != -1){
      newTime = expDate.getTime() + (3600000 * Expire.substring(0, i));
    } else if((i = Expire.indexOf('minute')) != -1){
      newTime = expDate.getTime() + (60000 * Expire.substring(0, i));
    } else if((i = Expire.indexOf('second')) != -1){
      newTime = expDate.getTime() + (1000 * Expire.substring(0, i));
    }

    if(newTime){
      expDate.setTime(newTime);
      Expire = expDate.toGMTString();
    }
  }

  // If survived all of that:
  if(Expire){
    if(typeof(Expire) == 'object') {
      var date_now = new Date();
      var diff = (Expire.getTime() - date_now.getTime())/86400;
      Expire = parseInt(diff);
    }
    Cookie.set(Name, Value, Expire, APath || '/');
  }
}

function FixCookieDate (date){
  var base = new Date(0);
  var skew = base.getTime(); // dawn of (Unix) time - should be 0
  if(skew > 0)  // Except on the Mac - ahead of its time
    date.setTime(date.getTime() - skew);
}

var expdate = new Date ();
FixCookieDate(expdate); // Correct for Mac date bug - call only once for given Date object!
expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 1000 * 365)); // 365 days from now

