/*----------------------------------------------------------------------------
  GetCookie
  
  Parameters:
    name - name of the desired cookie
  
  return string containing value of specified cookie or null if cookie does
  not exist
  ----------------------------------------------------------------------------*/
function GetCookie(name) {
  var dc     = document.cookie;
  var prefix = name + "=";
  var begin  = dc.indexOf("; " + prefix);
  
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) {
      return null;
    }
  }
  else {
    begin += 2;
  }
  
  var end = document.cookie.indexOf(";", begin);
  if (end == -1) {
    end = dc.length;
  }
  
  return unescape(dc.substring(begin + prefix.length, end));
}

/*----------------------------------------------------------------------------
  SetCookie
   
  Parameters:
    name      - name of the cookie
    value     - value of the cookie
    [expires] - expiration date of the cookie
                (defaults to end of current session)
    [path]    - path for which the cookie is valid
                (defaults to path of calling document)
    [domain]  - domain for which the cookie is valid
                (defaults to domain of calling document)
    [secure]  - Boolean value indicating if the cookie transmission requires
                a secure transmission
                 
    an argument defaults when it is assigned null as a placeholder
    a null placeholder is not required for trailing omitted arguments
  ----------------------------------------------------------------------------*/

function SetCookie (name, value) {
  var today   = new Date();
  
  var argv    = SetCookie.arguments;
  var argc    = SetCookie.arguments.length;
  var expires = (argc > 2)? argv[2]: new Date(today.getTime() + 28 * 24 * 60 * 60 * 1000);
  var path    = (argc > 3)? argv[3]: "/";
  var domain  = (argc > 4)? argv[4]: null;
  var secure  = (argc > 5)? argv[5]: false;
  var cookieValue = name + "=" + escape(value) +
                    "; expires=" + expires.toGMTString() +
                    "; path="    + path +
                    ((domain )? "; domain="  + domain: "") +
                    ((secure )? "; secure" : "");

  document.cookie = cookieValue;
}

/*----------------------------------------------------------------------------
  DeleteCookie
   
  Parameters:
    name     - name of the cookie
    [path]   - path of the cookie
               (must be same as path used to create cookie)
    [domain] - domain of the cookie
               (must be same as domain used to create cookie)
    
  path and domain default if assigned null or omitted if no explicit argument
  proceeds
  ----------------------------------------------------------------------------*/
    
function DeleteCookie(name, path, domain) {
   if (GetCookie(name)) {
      document.cookie = name + "=" + 
                        ((path)? "; path=" + path: "/") +
                        ((domain)? "; domain=" + domain: "") +
                        "; expires=Thu, 01-Jan-70 00:00:01 GMT";
   }
}

