(function($)
{
	$.cookie = function(name, value, options)
	{
		options = $.extend({ }, $.cookie.defaults, options);
		if (value)
		{
			// Set cookie.
			if (value === null)
			{
				value = '';
				options.expires = -1;
			}
			
			var expires = '';
			if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString))
			{
				var date;
				if (typeof options.expires == 'number')
				{
					date = new Date();
					date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
				}
				else
				{
					date = options.expires;
				}
				
				// Use expires attribute; max-age is not supported by IE.
				expires = '; expires=' + date.toUTCString();
			}
			
			// CAUTION: Needed to parenthesize options.path and options.domain
			// in the following expressions, otherwise they evaluate to undefined
			// in the packed version for some reason...
			var path = options.path ? '; path=' + (options.path) : '';
			var domain = options.domain ? '; domain=' + (options.domain) : '';
			var secure = options.secure ? '; secure' : '';
			document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
		}
		else
		{
			// Get cookie.
			var value = null;
			if (document.cookie && document.cookie != '')
			{
				var cookies = document.cookie.split(';');
				for (var i = 0; i < cookies.length; i++)
				{
					// Does this cookie string begin with the name we want?
					var cookie = $.trim(cookies[i]);
					if (cookie.substring(0, name.length + 1) == (name + '='))
					{
						value = decodeURIComponent(cookie.substring(name.length + 1));
						break;
					}
				}
			}
			
			return value;
		}
	};
	
	$.cookie.defaults =
	{
		expires: null,
		path: null,
		domain: null,
		secure: false
	};
})($);
