
var __isIE = typeof __isIE != 'undefined';

function addClassName(element, className) {
	if (element.className.indexOf(className) >= 0) return;
	var tmp = element.className.split(/\s+/);
	tmp.push(className);
	element.className = tmp.join(' ');
	element.className = element.className.replace(/(^\s+|\s$)/, '').replace(/\s+/, ' ');
}

function removeClassName(element, className) {
	if (element.className.indexOf(className) == -1) return;
	element.className = element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ');
	element.className = element.className.replace(/(^\s+|\s$)/, '').replace(/\s+/, ' ');
}

var _fix_hover_timer = null, _fix_hover_current = null, _fix_hover_default = null;

function _fix_hover_over() {
	clearTimeout(_fix_hover_timer);
	if (_fix_hover_current) __fix_hover_out(_fix_hover_current);
	
//	if (__isIE) 
	addClassName(this, 'hover_fix');

	if (this.className.indexOf('first') >= 0)		addClassName(this, 'first_selected');
	else if (this.className.indexOf('last') >= 0)	addClassName(this, 'last_selected');
	else											addClassName(this, 'selected');
	
	var prev_li = this.previousSibling;
	while (prev_li && (prev_li.nodeType != 1 || prev_li.nodeName.toUpperCase() != 'LI')) prev_li = prev_li.previousSibling;
	if (prev_li) addClassName(prev_li, 'before_selected');

	var next_li = this.nextSibling;
	while (next_li && (next_li.nodeType != 1 || next_li.nodeName.toUpperCase() != 'LI')) next_li = next_li.nextSibling;
	if (next_li) addClassName(next_li, 'after_selected');

	_fix_hover_current = this;
}

function __fix_hover_out(element) {
//	if (__isIE) 
	removeClassName(element, 'hover_fix');

	if (element.className.indexOf('first') >= 0)		removeClassName(element, 'first_selected');
	else if (element.className.indexOf('last') >= 0)	removeClassName(element, 'last_selected');
	else												removeClassName(element, 'selected');

	var prev_li = element.previousSibling;
	while (prev_li && (prev_li.nodeType != 1 || prev_li.nodeName.toUpperCase() != 'LI')) prev_li = prev_li.previousSibling;
	if (prev_li) removeClassName(prev_li, 'before_selected');

	var next_li = element.nextSibling;
	while (next_li && (next_li.nodeType != 1 || next_li.nodeName.toUpperCase() != 'LI')) next_li = next_li.nextSibling;
	if (next_li) removeClassName(next_li, 'after_selected');

	_fix_hover_current = null;
};

function _fix_hover_out() {
	var element = this;
	_fix_hover_timer = setTimeout(
		function() { 
			__fix_hover_out(element); 
			if (_fix_hover_default) _fix_hover_over.call(_fix_hover_default);
		},
		1000
	);
}

function add_menu_hover_fix() {
	var selected_li = null, items = document.getElementById('menu').getElementsByTagName('LI');
	for (var i = 0, l = items.length; i < l; ++i) {
		if (items[i] && items[i].parentNode && items[i].parentNode.id == 'menu') {
			items[i].onmouseover = _fix_hover_over;
			items[i].onmouseout = _fix_hover_out;
		}
		if (items[i].className && items[i].className.indexOf('default') >= 0) selected_li = items[i];
	}
	if (selected_li) {
		if (selected_li.parentNode && selected_li.parentNode.id == 'menu') {
			_fix_hover_default = selected_li;
			_fix_hover_over.call(_fix_hover_default);
		} else {
			_fix_hover_default = selected_li.parentNode.parentNode;
			_fix_hover_over.call(_fix_hover_default);
		}
	}
}


function _toggle_sidebar_item() {
	var div = this.nextSibling;
	while (div && (div.nodeType != 1 || div.nodeName.toUpperCase() != 'DIV')) div = div.nextSibling;
	if (div) div.style.display = div.style.display == 'block' ? 'none' : 'block';
}

function add_sidebar_toggles() {
	var items = document.getElementById('sidebar').getElementsByTagName('H2');
	for (var i = 0, l = items.length; i < l; ++i)
		if (items[i] && items[i].className.indexOf('toggle') >= 0) {
			items[i].onclick = _toggle_sidebar_item;

			var div = items[i].nextSibling;
			while (div && (div.nodeType != 1 || div.nodeName.toUpperCase() != 'DIV')) div = div.nextSibling;
			if (div) {
				div.style.display = 'none';
				items[i].style.cursor = 'pointer';
			}
		}
}
