﻿var siteSection = {
	addMenuToggles: function(items) {
		var child,
			childCount,
			children,
			item,
			itemCount,
			parent,
			parents,
			submenu,
			toggle,
			grandchild;

		parents = [];

		for ( itemCount = items.length; itemCount-- > 0; ) {
			item = items[itemCount];
			parent = item.parentNode;

			if ( item.nodeName.toLowerCase() == 'a' ) {

					submenu = parent.getElementsByTagName('ul');

					if ( submenu.length == 0 ) {
						submenu = parent.getElementsByTagName('p');
						
						for ( childCount = submenu.length; childCount-- > 0; ) {

							if ( helper.cssjs('check', submenu[childCount], 'description') ) {
								break;
							} else {
								submenu.pop();
							}
						}
					}

					if ( submenu.length > 0 ) {
						toggle = document.createElement('span');
						toggle.appendChild(document.createTextNode('open'));
						item.appendChild(toggle);
						helper.addEvent(toggle, 'click', siteSection.clickMenuToggle, false);						
						parents.push(parent);

						children = submenu[0].getElementsByTagName('li');
						child = null;

						if ( child !== null ) {
							helper.cssjs('remove', parent, 'hide');
							helper.cssjs('add', parent, 'show');
						} else {
							helper.cssjs('remove', parent, 'show');
							helper.cssjs('add', parent, 'hide');
						}
					}
			} else {

				if ( item.childNodes.length > 0 ) {
					siteSection.addMenuToggles(item.childNodes);
				}
			}
		}
	},

	clickMenuToggle: function(evt) {

		var count,
			curstats,
			ele;

		ele = siteSection.getTarget(evt);
		
		while ( ele.nodeName.toLowerCase() != 'li' && ele.parentNode !== null ) {
			ele = ele.parentNode;
		}

		if ( ele.nodeName.toLowerCase() == 'li' ) {

			if ( helper.cssjs('check', ele, 'hide') ) {
				curstats = "hide";
			} else {
				curstats = "show";
			}

			menu = document.getElementById('site-sections');

			if ( menu && menu.nodeName.toLowerCase() == 'ul' ) {
				siteSection.closeAllToggles(menu.childNodes);
			}

			menu = document.getElementById('subsection-panels');

			if ( menu && menu.nodeName.toLowerCase() == 'div' ) {

				for ( count = menu.childNodes.length; count-- > 0; ) {

					if ( menu.childNodes[count].nodeName.toLowerCase() == 'ul' ) {
						siteSection.closeAllToggles(menu.childNodes[count].childNodes);
					}
				}
			}

			if ( curstats == "hide" ) {
				helper.cssjs('remove', ele, 'hide');
				helper.cssjs('add', ele, 'show');
			} else {
				helper.cssjs('remove', ele, 'show');
				helper.cssjs('add', ele, 'hide');
			}

			siteSection.haltEvent(evt);
		}
	},

	closeAllToggles: function(items) {
		var child,
			childCount,
			children,
			item,
			itemCount,
			parent,
			submenu,
			toggle,
			grandchild;

		for ( itemCount = items.length; itemCount-- > 0; ) {
			item = items[itemCount];
			parent = item.parentNode;

			if ( item.nodeName.toLowerCase() == 'a' ) {

				submenu = parent.getElementsByTagName('ul');

				if ( submenu.length == 0 ) {
					submenu = parent.getElementsByTagName('p');
					
					for ( childCount = submenu.length; childCount-- > 0; ) {

						if ( helper.cssjs('check', submenu[childCount], 'description') ) {
							break;
						} else {
							submenu.pop();
						}
					}
				}

				if ( submenu.length > 0 ) {				
					helper.cssjs('remove', parent, 'show');
					helper.cssjs('add', parent, 'hide');
				}
			} else {

				if ( item.childNodes.length > 0 ) {
					siteSection.closeAllToggles(item.childNodes);
				}
			}
		}
	},

	closeMenus: function() {
		var all,
			count,
			item,
			items,
			menu;

		all = arguments.length > 0 && arguments[0] === true;

		menu = document.getElementById('site-sections');

		if ( menu && menu.nodeName.toLowerCase() == 'ul' ) {
			items = menu.getElementsByTagName('li');

			for ( count = items.length; count-- > 0; ) {
				item = items[count];

				if ( helper.cssjs('check', item, 'show') && ( all || item.parentNode === menu ) ) {
					helper.cssjs('remove', item, 'show');
					helper.cssjs('add', item, 'hide');
				}
			}
		}
	},

	getTarget: function(evt) {
		var target;
		
		target = window.event ? window.event.srcElement : evt ? evt.target : null;

		if ( target ) {

			while ( target.nodeType != 1 && target.nodeName.toLowerCase() != 'body' ) {
				target = target.parentNode;
			}
		}

		return target;
	},

	haltEvent: function(evt) {

		if ( evt && evt.preventDefault ) {
			evt.preventDefault();
		}

		if ( evt && evt.stopPropagation ) {
			evt.stopPropagation();
		}

		if ( window.event && window.event.cancelBubble ) {
			window.event.cancelBubble = true;
		}

		if ( window.event ) {
			window.event.returnValue = false;
		}
	},

	init: function() {
		var count,
			item,
			items,
			menu;

		if ( document.getElementById && document.getElementsByTagName && document.createElement ) {
			menu = document.getElementById('site-sections');

			if ( menu && menu.nodeName.toLowerCase() == 'ul' ) {
				siteSection.addMenuToggles(menu.childNodes);
			}

			menu = document.getElementById('subsection-panels');

			if ( menu && menu.nodeName.toLowerCase() == 'div' ) {

				for ( count = menu.childNodes.length; count-- > 0; ) {

					if ( menu.childNodes[count].nodeName.toLowerCase() == 'ul' ) {
						siteSection.addMenuToggles(menu.childNodes[count].childNodes);
					}
				}
			}
		}
	},

	toggles: []
};

if ( helper !== undefined ) {
	helper.addEvent(window, 'load', siteSection.init, false);
}

