/*==============================================================================
    Routines written by John Gardner - 2003 - 2005
    See www.braemoor.co.uk/software for information about more freeware
    available.

    Fixed 2009 by SaaS Frontier - getCookie regex broken, replaced with more clear code that
        works. Previous regex code does not work for cookies at the end of the
        cookie string. Reading the last cookie always failed.
================================================================================

Routine to write a session cookie

    Parameters:
        cookieName        Cookie name
        cookieValue       Cookie Value

    Return value:
        true              Session cookie written successfullly
        false             Failed - persistent cookies are not enabled

   e.g. if (writeSessionCookie("pans","drizzle") then
           alert ("Session cookie written");
        else
           alert ("Sorry - Session cookies not enabled");
*/

function writeSessionCookie (cookieName, cookieValue) {
  if (testSessionCookie()) {
    document.cookie = escape(cookieName) + "=" + escape(cookieValue) + "; path=/";
    return true;
  }
  else return false;
}

/*==============================================================================

Routine to get the current value of a cookie

    Parameters:
        cookieName        Cookie name

    Return value:
        false             Failed - no such cookie
        value             Value of the retrieved cookie

   e.g. if (!getCookieValue("pans") then  {
           cookieValue = getCoookieValue ("pans2);
        }
*/

function getCookieValue (cookieName) {
    var c;
    var pos = document.cookie.indexOf(cookieName + "=");
    if (pos == -1){
        c = false;
    } else {
        var pos2 = document.cookie.indexOf(";", pos);
        if (pos2 == -1){
            c = unescape(document.cookie.substring(pos + cookieName.length + 1));
        } else {
            c = unescape(document.cookie.substring(pos + cookieName.length + 1, pos2));
        }
    }

    //alert ("'"+cookieName + "'=" + c);
    return c;

//  var exp = new RegExp (escape(cookieName) + "=([^;]+)");
//  var c = escape(cookieName);
//  var c = document.cookie;
//  if (exp.test (document.cookie + ";")) {
//    exp.exec (document.cookie + ";");
//    return unescape(RegExp.$1);
//  }
//  else return false;
}

/*==============================================================================

Routine to see if session cookies are enabled

    Parameters:
        None

    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

   e.g. if (testSessionCookie())
           alert ("Session coookies are enabled");
        else
           alert ("Session coookies are not enabled");
*/

function testSessionCookie () {
  document.cookie ="testSessionCookie=Enabled";
  //var c = document.cookie;
  //c = getCookieValue ("testSessionCookie");
  if (getCookieValue ("testSessionCookie")=="Enabled")
    return true
  else
    return false;
}

/*==============================================================================

Routine to see of persistent cookies are allowed:

    Parameters:
        None

    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

   e.g. if (testPersistentCookie()) then
           alert ("Persistent coookies are enabled");
        else
           alert ("Persistent coookies are not enabled");
*/

function testPersistentCookie () {
  writePersistentCookie ("testPersistentCookie", "Enabled", "minutes", 1);
  if (getCookieValue ("testPersistentCookie")=="Enabled")
    return true
  else
    return false;
}

/*==============================================================================

Routine to write a persistent cookie

    Parameters:
        CookieName        Cookie name
        CookieValue       Cookie Value
        periodType        "years","months","days","hours", "minutes"
        offset            Number of units specified in periodType

    Return value:
        true              Persistent cookie written successfullly
        false             Failed - persistent cookies are not enabled

    e.g. writePersistentCookie ("Session", id, "years", 1);
*/

function writePersistentCookie (CookieName, CookieValue, periodType, offset) {

  var expireDate = new Date ();
  offset = offset / 1;

  var myPeriodType = periodType;
  switch (myPeriodType.toLowerCase()) {
    case "years":
     var year = expireDate.getYear();
     // Note some browsers give only the years since 1900, and some since 0.
     if (year < 1000) year = year + 1900;
     expireDate.setYear(year + offset);
     break;
    case "months":
      expireDate.setMonth(expireDate.getMonth() + offset);
      break;
    case "days":
      expireDate.setDate(expireDate.getDate() + offset);
      break;
    case "hours":
      expireDate.setHours(expireDate.getHours() + offset);
      break;
    case "minutes":
      expireDate.setMinutes(expireDate.getMinutes() + offset);
      break;
    default:
      alert ("Invalid periodType parameter for writePersistentCookie()");
      break;
  }

  document.cookie = escape(CookieName ) + "=" + escape(CookieValue) + "; expires=" + expireDate.toGMTString() + "; path=/";
}

/*==============================================================================

Routine to delete a persistent cookie

    Parameters:
        CookieName        Cookie name

    Return value:
        true              Persistent cookie marked for deletion

    e.g. deleteCookie ("Session");
*/

function deleteCookie (cookieName) {
  if (getCookieValue (cookieName)){
      writePersistentCookie (cookieName,"Pending delete","years", -1);
  }
  return true;
}
