// CookieToolkit.js

// Create a cookie
function writeCookie(cookieName, cookieValue, expires, domain, path, secureFlag)
{
   if (cookieName)
   {
      var cookieDetails = cookieName + "=" + escape(cookieValue);
      cookieDetails += (expires ? "; expires=" + 
         expires.toGMTString(): '');
      cookieDetails += (domain ? "; domain=" + domain: '');
      cookieDetails += (path ? "; path=" + path: '');
      cookieDetails += (secureFlag ? "; secure": '');
      document.cookie = cookieDetails;
   }
}


// Obtain a cookies unescaped value
function readUnescapedCookie(cookieName)
   {
   var cookieValue = document.cookie;
   var cookieRegExp = new RegExp("\\b" + cookieName + "=([^;]*)");
   cookieValue = cookieRegExp.exec(cookieValue);

   if (cookieValue != null)
   {
      cookieValue = cookieValue[1];	
   }

   return cookieValue;
}


// Obtain a cookies value
function readCookie(cookieName)
{
   cookieValue = readUnescapedCookie(cookieName)

   if (cookieValue != null)
   {
      cookieValue = unescape(cookieValue);
   }

   return cookieValue;
}


// Deletes existing cookie
function deleteCookie(cookieName)
{
   var expiredDate = new Date();
   expiredDate.setMonth(-1);
   writeCookie(cookieName,"",expiredDate);
}


// Create a cookie and specify a sub value
function writeMultiValueCookie( cookieName, multiValueName, value, expires, domain, path, secureFlag)
{
   var cookieValue = readUnescapedCookie(cookieName);
   if (cookieValue)
   {
      var stripAttributeRegExp = new RegExp("(^|&)" + 
         multiValueName + "=[^&]*&?");
      cookieValue = cookieValue.replace(stripAttributeRegExp,"$1");
      if (cookieValue.length != 0)
      {
         cookieValue += "&";
      }
   }
   else
   {
      cookieValue = "";
   }
   cookieValue += multiValueName + "=" + escape(value);
   var cookieDetails = cookieName + "=" + cookieValue;
   cookieDetails += (expires ? "; expires=" + expires.toGMTString(): '');
   cookieDetails += (domain ? "; domain=" + domain: '');
   cookieDetails += (path ? "; path=" + path: '');
   cookieDetails += (secureFlag ? "; secure": '');
   document.cookie = cookieDetails;
}


// Obtain sub value stored inside a cookie
function readMultiValueCookie(cookieName, multiValueName)
{
   var cookieValue = readUnescapedCookie(cookieName)
   var extractMultiValueCookieRegExp = new RegExp("\\b" + 
      multiValueName + "=([^;&]*)");
   cookieValue = extractMultiValueCookieRegExp.exec(cookieValue);

   if (cookieValue != null)
   {
      cookieValue = unescape(cookieValue[1]);	
   }

   return cookieValue;
}


// Deletes sub value stored inside a cookie
function deleteMultiValueCookie(cookieName, multiValueName, expires, domain, path, secureFlag)
{
   var cookieValue = readUnescapedCookie(cookieName);
   if (cookieValue)
   {
      var stripAttributeRegExp = new RegExp("(^|&)" + 
         multiValueName + "=[^&]*&?");
      cookieValue = cookieValue.replace(stripAttributeRegExp,"$1");

      if (cookieValue.length != 0)
      {
         var cookieDetails = cookieName + "=" + cookieValue;
         cookieDetails += (expires ? "; expires=" + 
            expires.toGMTString(): '');
         cookieDetails += (domain ? "; domain=" + domain: '');
         cookieDetails += (path ? "; path=" + path: '');
         cookieDetails += (secureFlag ? "; secure": '');
         document.cookie = cookieDetails;
      }
      else
      {
         deleteCookie(cookieName);
      }
   }
}


// Returns true if cookies are supported by browser &switched on by user
function cookiesEnabled()
{
   var cookiesEnabled = window.navigator.cookieEnabled;

   if (!cookiesEnabled)
   {
      document.cookie = "cookiesEnabled=True";
      cookiesEnabled = new Boolean(document.cookie).valueOf();
   }

   return cookiesEnabled;
}

