/* ////////////////////////////////////////
  Collapsing Tree Nav Functions
  
  Change Date: 2007/07/30
  JS Requirements:
	  ss.global.js (1.0)
	  scriptaculous.js?load=effects, prototype.js (1.7.0)
  
  Interface Design and Programming: Brian Sage, semaphorellc.com
	
	
// DOM Requirements:

	<ul class="ssnav_collapsetree" id="foo">
		<li><a>Home Page</a></li>
		<li><a>Lorem Ipsum</a>
			<ul>
				<li><a class="active">Dolor Sit Amet</a></li>
			</ul>
		</li>
	</ul><!-- /#foo -->

	<script type="text/javascript">
	// <![CDATA[
		ss.colnav.init('foo');
	// ]]>
	</script>


// Turns the above basic structure above into this:
	
	<ul class="ssnav_collapsetree" id="foo">
		<li><a><span class="navnode_none" onclick="ss.colnav.mouseclick(e);"></span>Home Page</a></li>
		<li><a><span class="navnode_open" onclick="ss.colnav.mouseclick(e)"></span>Lorem Ipsum</a>
			<span class="ssnav_childmenu" id="ssnav_childmenu_[n]">
				<ul>
					<li><a class="active"><span class="navnode_closed" onclick="ss.colnav.mouseclick(e)"></span>Dolor Sit Amet</a>
						<span class="ssnav_childmenu" id="ssnav_childmenu_[n]">
							<ul>
								<li><a class="active"><span class="navnode_none" onclick="ss.colnav.mouseclick(e)"></span>Dolor Sit Amet</a></li>
							</ul>
						</span>
					</li>
				</ul>
			</span>
		</li>
	</ul>
	
	
// Basic structure may be modified anyway fit, as long as the	parenting order of tags remains the same:

		<div><ul class="nav_collapsing">
			<li><img /><div><a href="#"><p><span><img /><img /></span></p></a></div>
				<span><div><ul>
					<li><p><a><img /></a></p></li>
				</ul></div></span>
			</li>
		</ul></div>
//////////////////////////////// */





/* ////////////////////////////////////////
  Nav Global Vars
//////////////////////////////// */

ss.colnav = new Array();




/* ////////////////////////////////////////
  Nav Handy Functions
//////////////////////////////// */

ss.colnav.newNavnode = function( type, id ) {
	// Builds: <span class="navnode navnode_none" onclick="return false;" title="Click arrows to expand &amp; collapse the menu."></span>
	var newNavnode = document.createElement( 'span' );
	    newNavnode.className = 'navnode';
	    newNavnode.title = 'Click arrows to expand &amp; collapse the menu.';
	    if( type ) newNavnode.className += ' navnode_' + type;
			if( id ) newNavnode.id = id;
	return newNavnode;
}
ss.colnav.newChildmenu = function( id ) {
	// Builds: <span class="ssnav_childmenu" id="ssnav_childmenu_[n]"></span>
	var newChildmenu = document.createElement( 'span' );
	    newChildmenu.className = 'ssnav_childmenu';
			newChildmenu.style.cssText = 'display: none;';
			if( id ) newChildmenu.id = id;
	return newChildmenu;
}


ss.colnav.mouseover = function(e){
	var elementRef = solveForE(e);
	ss.dbo.value += "ss.colnav.mouseover( e.id = "+elementRef.id+" )\n";
}


ss.colnav.mouseclick = function( e, called, effectsOff ) {
	if (!called){
		var elementId = solveForE(e);
	} else {
		var elementId = e;
	}
	var childMenuId = 'ssnav_childmenu_' + elementId.id.slice(8);
	ss.dbo.value += "ss.colnav.mouseclick( e.id = "+elementId.id+" )\n";

	if ( elementId.className.indexOf('open') > 1 ) {
		// if the node is open, close it and change the className.
		ss.dbo.value += '	closed '+ childMenuId +"\n"; 
		elementId.className = 'navnode navnode_closed';
		if (!effectsOff) {
			Effect.SlideUp( childMenuId, {duration:0.25} );
		} else {
			$( childMenuId ).style.display = 'none';
		}

	} else if ( elementId.className.indexOf('closed') > 1 ) {
		// if the node is closed, open it and change the className.
		ss.dbo.value += '	opening '+ childMenuId +"\n"; 
		elementId.className = 'navnode navnode_open';
		if (!effectsOff) {
			Effect.SlideDown( childMenuId, {duration:0.25} );
		} else {
			$( childMenuId ).style.display = 'block';
		}
	}
}




/* ////////////////////////////////////////
  Nav Governing Functions
//////////////////////////////// */

ss.colnav.init = function ( n ) {
	ss.dbo.value += "ss.colnav.init()\n";

	if (!ss.omitcss) {
		// Append new document CSS for the working nav
		ss.colnavCSS = document.createElement( 'link' );
		ss.colnavCSS.rel = 'stylesheet';
		ss.colnavCSS.type = 'text/css';
		ss.colnavCSS.media = 'all';
		ss.colnavCSS.href = ss.global.cssRoot + $(n).className + '.css';
		document.getElementsByTagName( "head" )[0].appendChild( ss.colnavCSS );
	}
	
	if (isIe6) {
		ss.colnavCSS6fix = document.createElement( 'link' );
		ss.colnavCSS6fix.rel = 'stylesheet';
		ss.colnavCSS6fix.type = 'text/css';
		ss.colnavCSS6fix.media = 'all';
		ss.colnavCSS6fix.href = ss.global.cssRoot + $(n).className + '.ie6fix.css';
		document.getElementsByTagName( "head" )[0].appendChild( ss.colnavCSS6fix );
		
		ss.dbo.value += 'ie6fixed!';
	}
	
	

	/* ////////////////////////////////
	 Build a usable dynamic nav structure
	
	Turn:
		<li><a>Foo</a></li>
		<ul>...</ul>

	Into:
		<li><a><span class="navnode_none" onclick="ss.colnav.mouseclick(e)"></span>Dolor Sit Amet</a></li>
		<span class="ssnav_childmenu" id="ssnav_childmenu_[n]"><ul></ul></span>

	//////////////////////////////// */

	// Identify nav <a>s
	var colnavAs = $(n).getElementsByTagName( 'A' );
	
	// Add navnodes, ssnav_childmenus, and navnode mouse events
	for ( var i=0; i < colnavAs.length; i++ ) {
		// add the node
		colnavAs[i].insertBefore( ss.colnav.newNavnode('none', 'navnode_'+i ), colnavAs[i].childNodes[0] );

		// determine if A[i] has a child UL in its care
		if ( getFirstParentNodeByTagName( $( 'navnode_'+i ), 'LI' )[0].getElementsByTagName('UL').length > 0 ) {
			// If so, change the class to "navnode_closed"
			$( 'navnode_'+i ).className = 'navnode navnode_closed';

			// and wrap UL in <span class="ssnav_childmenu" id="ssnav_childmenu_[n]"></span>
			var newChildspan = ss.colnav.newChildmenu( 'ssnav_childmenu_'+i );
			var oldChildUL = getFirstParentNodeByTagName( $( 'navnode_'+i ), 'LI' )[0].getElementsByTagName('UL')[0];
			var parentLI = getFirstParentNodeByTagName( $( 'navnode_'+i ), 'LI' )[0]; 

			parentLI.insertBefore( newChildspan, oldChildUL );
			newChildspan.appendChild( oldChildUL );
			
			// and change the navNode graphic to closed
		}
		
		$( 'navnode_'+i ).onclick = function() { return false; }
		ss.addEvent( $( 'navnode_'+i ), 'mouseover', mouseover = function(e){ ss.colnav.mouseover(e) }, false );
		ss.addEvent( $( 'navnode_'+i ), 'click', mouseclick = function(e){ return ss.colnav.mouseclick(e); }, false );
	}
	
	

	
	/* ////////////////////////////////
	 Identify <a class="active">, and display the <ul><li> path to it
	//////////////////////////////// */

	// Identify <a class="active">
	theActiveNode = $(n).getElementsByClassName('active')[0];
	ss.dbo.value += 'Found A.active, a.innerHTML = '+ theActiveNode.innerHTML +"\n";

	/*
	// Does it have a navnode to open?
	if ( getFirstParentNodeByTagName( theActiveNode, 'LI' )[0].getElementsByClassName('navnode').length > 0 ) {
		ss.dbo.value += '	child UL found, UL > LI > A.innerHTML = '+ getFirstParentNodeByTagName( theActiveNode, 'LI' )[0].getElementsByTagName('UL')[0].getElementsByTagName('LI')[0].getElementsByTagName('A')[0].innerHTML +"\n";

		// ...if so, "click" to open it.
		ss.colnav.mouseclick( getFirstParentNodeByTagName( theActiveNode, 'LI' )[0].getElementsByClassName('navnode')[0], 1, 1);
	}
	*/
		
	// Then add the trail of <span class="navnode">s for clicking all the way to the head UL

	// first, figgure out the <li>s
	var parentLIs = getParentNodesByTagName( theActiveNode, 'LI' );
	ss.dbo.value += '	parent LI found, LI.innerHTML = '+ parentLIs.innerHTML +"\n";
	
	// then, add the <span>s under those LIs
	var cascadingSpans = new Array();
	for ( i=0; i <= (parentLIs.length-1); i++ ) {
		cascadingSpans.push( parentLIs[i].getElementsByClassName('navnode')[0] );
	}
	ss.dbo.showArray( cascadingSpans );
	
	// "click" all child <span class="navnode">s it to open them
	for ( i=0; i < cascadingSpans.length; i++ ) {
		ss.colnav.mouseclick( cascadingSpans[i], 1, 1 );
	}


/*
	
	// Identify <a class="active">
	theActiveNode = $(n).getElementsByClassName('active')[0];
	theSelectedNode = ss.colnav.theActiveNode;
	
	// Does it have a child <ul> in its care?
	if( theSelectedNode.parentNode.childNodes.length >= 3 ) {
		if( theSelectedNode.parentNode.childNodes[2].tagName == 'UL' ) {
		
			// ...if so, set the class thus: <ul class="open">
			theSelectedNode.parentNode.childNodes[2].className = 'open';
			
			// and wrap the link in an open navNode graphic
			var newNavnode = ss.colnav.newNavnode('open', mustid );			
		
			
			theSelectedNode.parentNode.insertBefore( newNavnode, theSelectedNode.parentNode.childNodes[0] );
			$( newNavnode.id ).appendChild( theSelectedNode );
		}
	}
	
	//now trail back through the parent <ul>s
	var parentUls = getParentNodesByTagName( theSelectedNode, 'UL' );
	
	for( i=0; i < (parentUls.length - 1); i++ ) {
	
		//and set their classes thus: <ul class="open">
		parentUls[i].className = 'open';
	
		// and wrap the link in an open navNode graphic
		var newNavnode = ss.colnav.newNode('open');
		var oldFirstChild = parentUls[i].parentNode.firstChild;
		parentUls[i].parentNode.insertBefore( newNavnode, oldFirstChild );
		$( newNavnode.id ).appendChild( oldFirstChild );
	}
	
*/
}


// Load Announce
ss.dbo.value += ("ss.colnav_collapsetree.js loaded\n");
