var foldAreaIDs = new Array (

	'search',

	'categories',

	'archives',

	'blogroll',

	'photos',

	'sidenotes',

	'feeds',

	'blog-meta'

);



var areaFolded = new Array();



function trim(whitespaceString) {

	while (whitespaceString.search(' ') != -1) {

		whitespaceString = whitespaceString.replace(' ', '');

	}

	return whitespaceString;

}



function setCookie(areaID, areaIDFolded) {

	expirationDate = new Date();

	expirationDate.setDate(30);

	document.cookie = areaID + '=' + areaIDFolded + ';expires='+ expirationDate;

}



function isCookieSet() {

	return document.cookie.length > 0;

}



function retrieveValuesFromCookie() {

	cookieString = document.cookie;

	cookieList = cookieString.split(';');

	for (loop = 0; loop < cookieList.length; ++loop) {

		indexOfEqualsSign = cookieList[loop].indexOf('=');

		areaID = trim(cookieList[loop].substring(0, indexOfEqualsSign));	

		areaIDFolded = trim(cookieList[loop].substring(indexOfEqualsSign + 1, cookieList[loop].length));

		if (areaIDFolded == 'true') {

			areaFolded[areaID] = true;

		} else {

			areaFolded[areaID] = false;

		}

	}

}



function toggle(e) {

	buttonID = null;

	if (e.currentTarget) {

		buttonID = e.currentTarget.id;

	} else if (e.srcElement) {

		buttonID = e.srcElement.id;

	}

	button = document.getElementById(buttonID);

	if (button == null) {

		return ;

	}	

	areaID = buttonID.substring(0, buttonID.indexOf('-toggleButton'));

	classValue = (areaFolded[areaID] ? 'foldButton' : 'unfoldButton');

	button.className = classValue;

	area = document.getElementById(areaID);

	divs = area.getElementsByTagName('div');

	for (loop = 0; loop < divs.length; ++loop) {

		div = divs[loop];

		classValue = div.className;

		if (classValue == 'unfold') {

			div.className = 'fold';

		} else if (classValue == 'fold') {

			div.className = 'unfold';

		}

	}

	areaFolded[areaID] = !areaFolded[areaID];		

	setCookie(areaID, areaFolded[areaID]);	

}



function attachToggleButton(areaID, area) {

	headers = area.getElementsByTagName('h2');

	if (headers.length == 0) {

		return ;

	}

	targetHeader = headers[0];

	button = document.createElement('div');

	button.className = (areaFolded[areaID] ? 'unfoldButton' : 'foldButton');

	button.id = areaID + '-toggleButton';

	addEvent(button, 'click', toggle);

	divs = area.getElementsByTagName('div');

	for (loop = 0; loop < divs.length; ++loop) {

		div = divs[loop];

		div.className = (areaFolded[areaID] ? 'fold' : 'unfold');

	}

	targetHeader.appendChild(button);

}



function prepare() {

	for (loop = 0; loop < foldAreaIDs.length; ++loop) {

		areaID = foldAreaIDs[loop];	

		areaFolded[areaID] = false;

	}	

	if (isCookieSet()) {

		retrieveValuesFromCookie();

	}

	for (i = 0; i < foldAreaIDs.length; ++i) {

		areaID = foldAreaIDs[i];	

		area = document.getElementById(areaID);

		if (area != null) {

			attachToggleButton(areaID, area);

		}

	}

	

}



/**

 * The new and enhanced addEvent methods

 */

function addEvent(obj, type, fn) {

	if (obj.attachEvent) {

		obj['e'+type+fn] = fn;

		obj[type+fn] = function(){obj['e'+type+fn](window.event);}

		obj.attachEvent('on'+type, obj[type+fn]);

	} else {

		obj.addEventListener(type, fn, false);

	}

}



function removeEvent(obj, type, fn) {

	if ( obj.detachEvent ) {

		obj.detachEvent('on'+type, obj[type+fn]);

		obj[type+fn] = null;

	} else {

		obj.removeEventListener(type, fn, false);

	}

}



addEvent(window, 'load', prepare);

