jQuery(function($)
{
	var gutters, a, gutter, closed, className, ret, closedByDefault, gutterAnimatedLoadClose, closedByAllClicks;
	// gutters are open by default
	
	$('.gutterbutton').click(function(e)
	{
		if (window.ItemMan && ItemMan.isEditing()) return;
		toggleGutter(this.parentNode);
	});
	
	gutters = $('.gutter');
	for (a = 0; a < gutters.length; a++)
	{
		gutter = gutters.get(a);
		
		className = ' ' + gutter.className + ' ';
		ret = /\s+gutterSize(\d+)\s+/.exec(className);
		gutter._size = ret ? ret[1] : '200';
		ret = /\s+gutterMinSize(\d+)\s+/.exec(className);
		gutter._minSize = ret ? ret[1] : '1';
		gutter._verticalGutter = /\s+gutterVertical\s+/.test(className);
		closedByDefault = /\s+gutterClosed\s+/.test(className);
		closedByAllClicks = /\s+gutterClosedByAllClicks\s+/.test(className);
		
		gutterAnimatedLoadClose = /\s+gutterAnimatedLoadClose\s+/.test(className);
		
		gutter.style.overflow = "hidden"; // needed for jquery
		
		if (gutter.getAttribute('id'))
		{
			closed = readCookie("gutter_" + gutter.getAttribute('id'), closedByDefault ? "1" : "0") == "1";
			
			if (gutter._verticalGutter)
				gutter.style.height = (closed ? gutter._minSize : gutter._size) + "px";
			else
				gutter.style.width = (closed ? gutter._minSize : gutter._size) + "px";
			
			if (closed != gutter._closed)
			{
				if (closed)
					$(gutter).addClass('gutterClosed');
				
				gutter._closed = closed;
			}
		}
		else
		{
			if (closedByDefault)
			{
				if (gutter._verticalGutter)
					gutter.style.height = gutter._minSize + "px";
				else
					gutter.style.width = gutter._minSize + "px";
				
				gutter._closed = true;
			}
		}
		
		if (!gutter._closed && gutterAnimatedLoadClose)
		{
			toggleGutter(gutter);
		}
		
		if (closedByAllClicks)
		{
			$(window).bind('click', {gutter: gutter}, function(e) // would rather do this in the capture phase, however IE support is required
			{
				var node;
				if (e.data.gutter._closed)
					return;
				
				if (window.ItemMan && ItemMan.isEditing())
					return;
				
				node = e.target;
				while (node)
				{
					if ($(node).hasClass('gutter'))
						return;
					node = node.parentNode;
				}
				
				toggleGutter(e.data.gutter);
				
			});
		}
	}
	
	
	
	function toggleGutter(gutter)
	{
		var id;
		id = gutter.getAttribute('id');
		if (gutter._closed)
		{
			gutter._closed = false;
			if (id)
				createCookie("gutter_" + id, "0", 1);
			
			$(gutter).removeClass('gutterClosed');
			
			if (gutter._verticalGutter)
			{
				$(gutter).animate({
					height: gutter._size + "px"
				}, 500, "swing");
			}
			else
			{
				$(gutter).animate({
					width: gutter._size + "px"
				}, 500, "swing");
			}
		}
		else
		{
			gutter._closed = true;
			if (id)
				createCookie("gutter_" + id, "1", 1);
			
			$(gutter).addClass('gutterClosed');
			if (gutter._verticalGutter)
			{
				$(gutter).animate({
					height: gutter._minSize + "px"
				}, 500, "swing");
			}
			else
			{
				$(gutter).animate({
					width: gutter._minSize + "px"
				}, 500, "swing");
			}
			
		}
	}
	
	
	
	// http://www.quirksmode.org/js/cookies.html
	function createCookie(name,value,days) 
	{
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}
	
	function readCookie(name, def) 
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		if (!def)
			def = null;
		
		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) return c.substring(nameEQ.length,c.length);
		}
		return def;
	}
	
	function eraseCookie(name) 
	{
		createCookie(name,"",-1);
	}

});
