var Cookie =
{
	/**
	 * Adds a new cookie.
	 *
	 * @syntax Cookies.add(name, value[, path[, domain[, expires]]]);
	 * @param name
	 * @param value
	 * @param path    Optional. Default is local path.
	 * @param domain  Optional. Default is local domain.
	 * @param expires Optional. Default is session cookie. Must be a Date object, e.g. new Date();
	 */
	add: function(name, value, path, domain, expires)
	{
		document.cookie = name + "=" 
		+ value.replace(/[=;%\t\f\r\n]/g, function(s){return encodeURIComponent(s);})
		+ (path?"; path=" + path:"")
		+ (domain?"; domain=" + domain:"")
		+ (expires?"; expires=" + expires.toGMTString():"");
	},
	
	/**
	 * Gets cookie value by specified name.
	 *
	 * @syntax Cookies.item(name);
	 * @return String   Returns null if specified cookie not found.
	 */
	item: function(name)
	{
		var items = document.cookie.split("; "), pair;
		
		for (var i = 0; i < items.length; i++)
		{
			pair = items[i].split("=");
			
			if(name == pair[0])
			{
				if(pair[1])
				{
					return decodeURIComponent(pair[1]);
				}
			}
		}
		
		return null;
	},
	
	/**
	 * Removes cookie by specified name.
	 *
	 * @syntax Cookies.remove(name[, path[, domain]]);
	 * @param  name
	 * @param  path   Optional. Default is local path.
	 * @param  domain Optional. Default is local domain.
	 */
	remove: function(name, path, domain)
	{
		document.cookie = name + "=" 
		+ (path?"; path=" + path:"")
		+ (domain?"; domain=" + domain:"")
		+ "; expires=" + new Date(0).toGMTString();
	},
	
	/**
	 * Clears all cookies in local path and domain.
	 *
	 * Unaware of any method to get path and domain from the document.cookie string.
	 *
	 * @syntax Cookies.clear();
	 */
	clear: function()
	{
		var items = document.cookie.split("; "), pair;
		
		for (var i = 0; i < items.length; i++)
		{
			pair = items[i].split("=");
			Cookie.remove(pair[0]);
		}
	}
};