jQuery(function($)
{
	var gutters, a, gutter, closed, className, ret, closedByDefault, gutterAnimatedLoadClose;
	// 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);
		
		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)
					classAppend(gutter, '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);
		}
	}
	
	function toggleGutter(gutter)
	{
		var id;
		id = gutter.getAttribute('id');
		if (gutter._closed)
		{
			gutter._closed = false;
			if (id)
				createCookie("gutter_" + id, "0", 1);
			
			classRemove(gutter, '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);
			
			classAppend(gutter, '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);
	}
	
	function classAppend(elm, className)
	{
		var a;
		if (!className)
			return;
		
		className = className.split(' ');
		for (a = 0; a < className.length; a++)
		{
			if (!className[a])
				continue;
		
			if (elm.classList) // HTML 5 (Gecko 1.9.2 / Firefox 3.6)
			{
				elm.classList.add(className[a]);
				continue;
			}
		
			if (!classCheck(elm, className[a]))
			{
				elm.className += (elm.className.length ? ' ' : '') + className[a];
			}
		}
	}
	
	function classRemove(elm, className)
	{
		if (!className)
			return;
		if (elm.classList) // HTML 5 (Gecko 1.9.2 / Firefox 3.6)
		{
			elm.classList.remove(className);
			return;
		}
	
	
		var tmpRegex = new RegExp('\\b(' + className + ')\\b', 'gi');
		var tmpclassName = elm.className.replace (tmpRegex,' ');
		elm.className = tmpclassName.replace (/\s+/g,' ').replace (/(^\s+)|(\s+$)/g,'');
	}
	
	function classCheck(elm, className)
	{
		if (!className)
			return false;
		if (elm.classList) // HTML 5 (Gecko 1.9.2 / Firefox 3.6)
		{
			return elm.classList.contains(className);
		}
	
		var tmpclassName = ' ' + elm.className+ ' ';
		return (tmpclassName.indexOf(' ' + className + ' ') > -1);
	}
});
