/////////////////////////////////
//// Cookies ////////////////////
/////////////////////////////////
function cookieDebug()
{
	javascript:alert("COOKIE DEBUG\n\n" + document.cookie.split(';').join('\n'))
}

// 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);
}

// 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);
      }
   }
}


// 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;
}

// 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;
}


