﻿
Duration = function (days, hours, minutes, seconds, milliseconds)
{
	if (/(\d+)(?:\.?(\d+)\:(\d+)\:(\d+))(\.\d+)?/.test(arguments[0]))
	{
		return Duration.parse(arguments[0]);
	}

	this.getTime = function () { return ((milliseconds || 0) + ((seconds || 0) * 1000) + ((minutes || 0) * 60000) + ((hours || 0) * 3600000) + ((days || 0) * 86400000)); }
}

Duration.parse = function (expression)
{
	var d = /(\d+)(?:\.?(\d+)\:(\d+)\:(\d+))(\.\d+)?/.exec(expression)
	,	days = d[1] == null ? 0 : parseInt(d[1])
	,	hours = d[2] == null ? 0 : parseInt(d[2])
	,	minutes = d[3] == null ? 0 : parseInt(d[3])
	,	seconds = d[4] == null ? 0 : parseInt(d[4])
	,	milliseconds = d[5] == null ? 0 : parseFloat(d[5]) * 1000

	return new Duration(days, hours, minutes, seconds, milliseconds);	
}

Cookie =
{
	defaultDuration: Duration("0.00:20:00")
,
	set: function (name, value, days)
	{
		var e, d = new Date();

		if (value == null)
		{
			days = -1;
		}
		if (days)
		{
			var duration = new Duration(days);

			d.setTime(d.getTime() + duration.getTime());
		}
		else
		{
			d.setTime(d.getTime() + this.defaultDuration.getTime());
		}

		document.cookie = name + "=" + (value == null ? "" : value) + "; expires=" + d.toGMTString() + "; path=/";
	}
,
	get: function (name, constructor)
	{
		var nameEQ = name + "=", ca = document.cookie.split(';');

		for (var i = 0; i < ca.length; i++)
		{
			var c = ca[i];

			while (c.charAt(0) == ' ') c = c.substring(1, c.length);

			if (c.indexOf(nameEQ) == 0)
			{
				var value = c.substring(nameEQ.length, c.length);

				if (constructor == Number)
				{
					if (!isNaN(value))
					{
						return parseFloat(value);
					}
				}
				else if (constructor == Boolean)
				{
					if (/^(0|1|false|true)$/.test(value))
					{
						return /(1|true)$/.test(value);
					}
				}
				else
				{
					return value;
				}
			}
		}

		return null;
	}
}

