function cookieUnescape(s)
{
  var retstring = "";
  if (s == null) return null;
  
  return unescape(s);
  //try
  //{
  //  retstring = decodeURI(s);
  //}
  //catch (ex)
  //{
  //}
  //return retstring;
}

/// <summary>
/// Cookie names should not contain white space or semi-colons, in addition characters encoded 
/// by the javascript function escape, encodeURI and encodeURIComponent are encoded 
/// </summary>
/// <param name="s">String to convert to valid name</param>
/// <returns>Valid cookie name value</returns>
function cookieEscape(s)
{
  var retstring = "";
  if (s == null) return null;

//  try
//  {
    // First we 'unescape' it so that we don't get double escaped strings (not good for '%')
    var encoded = cookieUnescape(s);
    return escape(encoded);
//    retstring =  encodeURI(encoded);
//  }
//  catch(ex)
//  {
//  }
//  return retstring;  
}



// returns a list of cookie names
function GetCookieList()
{
  var cookies = document.cookie;
  if (cookies!=null)
  {
    var cookieList = cookies.split(/;\s*/);
    if (cookieList != null && cookieList.length > 0)
    {
      var cookieNames = new Array();
      for (var i = 0; i < cookieList.length; i++)
      {
        var tmp = cookieList[i].split("=");
        {
          if (tmp != null && tmp.length > 1)
          {
            var cookieName = tmp[0];
            cookieNames[i] = cookieEscape(cookieName);
           }
         }
      }
      return cookieNames;
    }
  }
  return null;
}


// name - name of the desired cookie
// return value of specified cookie or null if cookie does not exist
function GetCookie(name) 
{
	var prefix = name + "=";
	var cookieStartIndex = document.cookie.indexOf(prefix);
	if (cookieStartIndex == -1) 	
	{
		prefix = cookieEscape(name) + "=";
	  cookieStartIndex = document.cookie.indexOf(prefix);
  }
	
	// Couldn't find neither escaped nor unescaped name among cookies
	if (cookieStartIndex == -1) return null;
	
	var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
	
	if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
	
	return cookieUnescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

// 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)
function DeleteCookie(name) 
{ 
  var exp = new Date(); 
  exp.setTime(exp.getTime() - 1); 
  var expires = exp.toUTCString();
  // According to Netscape cookie spec, GMT is the only allowed timezone for cookie-expires
  expires = expires.replace("UTC","GMT");
  
  // Find cookie
	var prefix = name + "=";
	var cookieStartIndex = document.cookie.indexOf(prefix);
	if (cookieStartIndex == -1) 	
	{
	  name = cookieEscape(name);
		prefix = name + "=";
	  cookieStartIndex = document.cookie.indexOf(prefix);
  }
  
  if (cookieStartIndex != -1)
  {
    document.cookie = name + "=deleted; expires=" + expires;
  }
  // else no such cookie
}

// Set a cookie name-value pair.
// name     - name of the cookie (required)
// value    - value of the cookie (required)
// [expire] - expiration date of the cookie (defaults to seven days)
function SetCookie(name, value) 
{
  var argv = SetCookie.arguments;  
  var argc = SetCookie.arguments.length;  
  var expire = (argc > 2) ? argv[2] : null;  
  var duration = 7;
  var today = new Date();
  var defaultExpire = new Date();
  defaultExpire.setTime(today.getTime() + 1000*60*60*24*duration);
  var expires = '';
  if (expire == null) expires = defaultExpire.toUTCString();
  else                expires = expire.toUTCString();
  // According to Netscape cookie spec, GMT is the only allowed timezone for cookie-expires
  expires = expires.replace("UTC","GMT");

  var currentCookie = escape(name) + "="  +
                      escape(value)+ "; " +
                      "expires=" + expires;

  DeleteCookie(name); 
  document.cookie = currentCookie;
}

// Set a cookie name-value pair.
// name     - name of the cookie (required)
// value    - value of the cookie (required)
function SetSessionCookie(name, value) 
{
  var currentCookie = escape(name) + "="  +
                      escape(value);

  DeleteCookie(name); 
  document.cookie = currentCookie;
}
