(function($) {
	$.fn.extend({
		cssSwap: function(options) {
			// Enable|disable css according newstyle. If omitted, use cookie.
			function setStyles(newstyle) {
				newstyle = (newstyle) ? newstyle : cookie;
				var currentstyle;
				$('link[@rel*=style][title]' + options.classGroup + ':enabled').each(function(i) {
					currentstyle = ($.inArray($(this).attr('title'), styles));
				});
				switch (newstyle) {
					case "+":
						if (currentstyle == undefined) {
							newstyle = styles[0];
						} else {
							newstyle = (currentstyle < styles.length - 1) ? styles[currentstyle + 1] : styles[currentstyle];
						}
						break;
					case "-":
						if (currentstyle == undefined) {
							newstyle = styles[0];
						} else {
							newstyle = (currentstyle > 0) ? styles[currentstyle - 1] : styles[currentstyle];
						}
						break;
					case "!":
						break;
					default:						
						break;
				}
				$('link[@rel*=style][title]' + options.classGroup).each(function(i) {
					this.disabled = ($(this).attr('title') == newstyle) ? false : true;
				});
				$(options.classGroup + '[href$="#' + newstyle + '"]').addClass(options.classActive);
				$(options.classGroup + ':not([href$="#' + newstyle + '"])').removeClass(options.classActive);

				if (styles[styles.length - 1] == newstyle) {
					$(options.classGroup + '[href$="#+"]').addClass('noShow');
				} else {
					$(options.classGroup + '[href$="#+"]').removeClass('noShow');
				}
				if (styles[0] == newstyle) {
					$(options.classGroup + '[href$="#-"]').addClass('noShow');
				} else {
					$(options.classGroup + '[href$="#-"]').removeClass('noShow');
				}

				$.cookie('cssswap' + options.classGroup, newstyle, { expires: 365, path: '/' });
			}
			// Set any defaults
			var defaults = {
				classGroup: '',
				classActive: 'active'
			};
			options = $.extend(defaults, options);
			// Store styles for simple style looping
			var styles = new Array();
			$('link[@rel*=style][title]' + options.classGroup).each(function(i) {
				styles.push(this.title);
				this.disabled = true;
			});
			var cookie = $.cookie('cssswap' + options.classGroup);
			if (cookie) { setStyles(); }
			// Parse href on selected items and set stylesheets
			return this.each(function() {
				$(this).click(function() {
					var newstyle = $(this).attr('href').replace(/[^!a-zA-Z0-9+\-_]/g, '');
					setStyles(newstyle);
					return false;
				});
			});
		}
	});
})(jQuery);
