// CookieToolkit.js

/*############################################################################
Description : 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;
   }
}

/*############################################################################
Description : 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;
}

/*############################################################################
Description : Obtain a cookies value
----------------------------------------------------------------------------*/
function readCookie(cookieName)
{
   cookieValue = readUnescapedCookie(cookieName);
   if (cookieValue != null)
   {
      cookieValue = unescape(cookieValue);
   }
   return cookieValue;
}

/*############################################################################
Description : Deletes existing cookie
----------------------------------------------------------------------------*/
function deleteCookie(cookieName)
{
   var expiredDate = new Date();
   expiredDate.setMonth(-1);
   writeCookie(cookieName,"",expiredDate);
}

/*############################################################################
Description : 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;
}

/*############################################################################
Description : 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;
}

/*############################################################################
Description : 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);
      }
   }
}

/*############################################################################
Description : 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;
}