(function($) {
	$.fn.textSize = function(options) {
		var config = {
				sizes: {
					small: "textsize-small",
					normal: "textsize-normal",
					large: "textsize-large"
				},
				widget : "#article-textsize",
				cookieName : "gmTextsize",
				container : "article"
		};
		var opts = $.extend(config, options);
		var widget = $(opts.widget);
		var contentGroup = [];
		var removeSizeClass = function(docObj, size) {
			docObj.removeClass(size);
		};
		var changeWidgetState = function(widgetBtn, size) {
			widget.attr("class", size);
			$.cookie(opts.cookieName, size, {
					expires: 1825,
					path: "/",
					domain: (function(win) {
						var hostNameArr = win.location.hostname.split(".");
						return hostNameArr[hostNameArr.length-2]+"."+ hostNameArr[hostNameArr.length-1];
					})(window)
			});
			$.each(contentGroup, function(key, value) {
				sizeIterHasClass(value, removeSizeClass);
				value.addClass(size);
			});
		};
		var sizeIterHasClass = function(docObj, func) {
			$.each(opts.sizes, function(key, value){
				if (docObj.hasClass(value))
					func(docObj, value);
			});
		};
		var addEventsToLinks = function(event) {
			event.preventDefault();
			var widgetBtn = $(this);
			sizeIterHasClass(widgetBtn, changeWidgetState);
		};
		var enqueueContentGroup = function(docObj) {
			contentGroup.push(docObj);
			if(!!$.cookie) {
				var sizeCookie = $.cookie(opts.cookieName);
				if(!!sizeCookie) {
					docObj.addClass(sizeCookie);
					widget.attr("class", sizeCookie);
				} else {
					docObj.addClass(opts.sizes.small);
				}
			} else {
				docObj.addClass(opts.sizes.small);
			}
		};
		widget.delegate("a", "click", addEventsToLinks);
		
		return this.each(function() { 
			enqueueContentGroup($(this));
		});
	};
})(jQuery);
