﻿(function($) {
	$.Cookie = function(name, value, options) {
		var settings = $.extend({}, $.Cookie.Defaults, options);

		if (arguments.length > 1) {
			if (value === null) {
				settings.expires = -2;
			}

			if (typeof settings.expires === "number") {
				var date = new Date();
				date.setDate(date.getDate() + settings.expires);
				settings.expires = date;
			}

			var cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
			if (settings.expires) {
				cookie += "; expires=" + settings.expires.toGMTString();
			}
			if (settings.path) {
				cookie += "; path=" + settings.path;
			}
			if (settings.domain) {
				cookie += "; domain=" + settings.domain;
			}

			document.cookie = cookie;
		}
		else {
			var pattern = new RegExp("(^|; )?" + encodeURIComponent(name) + "=([^;]*)(;|$)");
			var matches = pattern.exec(document.cookie);
			if (matches != null) {
				return decodeURIComponent(matches[2]);
			}
			else {
				return null;
			}
		}
	};

	$.Cookie.Match = function(name) {
		var cookies = {};
		if (document.cookie && document.cookie !== "") {
			var items = document.cookie.split(";");
			var pattern = new RegExp(name);
			var index = 0;
			for (; index < items.length; index++) {
				var nameValue = items[index].split("=");
				var cookieName = $.trim(decodeURIComponent(nameValue[0]));
				if (cookieName.match(pattern)) {
					var cookieValue = decodeURIComponent(nameValue[1]);
					cookies[cookieName] = cookieValue;
				}
			}
		}

		return cookies;
	};

	$.Cookie.Defaults = {
		expires: null,
		path: '/',
		domain: null
	};
})(jQuery);
