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

    Routines written by John Gardner - 2003 - 2005

    See www.braemoor.co.uk/software for information about more freeware
    available.

================================================================================

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 exp = new RegExp (escape(cookieName) + "=([^;]+)");
  if (exp.test(document.cookie + ";")) {
      exp.exec(document.cookie + ";");
      return unescape(RegExp.$1);
  }
  else { return false; }
}

function getCookieValueNoEsc(cookieName) {
    var exp = new RegExp(cookieName + "=([^;]+)");
    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";
  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, DisableEscape) {
    var lDisableEscape = (DisableEscape) ? true : false;
    var expireDate = new Date();
    offset = offset / 1;

    var myPeriodType = periodType;
    switch (myPeriodType.toLowerCase()) {
        case "years":
            expireDate.setYear(expireDate.getFullYear() + 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;
    }

    if (!DisableEscape) {
        document.cookie = escape(CookieName) + "=" + escape(CookieValue) + "; expires=" + expireDate.toGMTString() + "; path=/";
    }
    else {
        document.cookie = CookieName + "=" + 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;
    }
}

