/**
 * @name        Global Initialisation
 * @overview    An automated documentation publishing system for JavaScript.
 * @version        0.1
 * @revision    2007-06-01 00:00:00
 * @author        Michael Ord <a href="mailto:michael.ord@think.eu">michael.ord@think.eu</a>
 */

/**
 * @function    PageLoad_Init
 * @description    Toggles the class of elements either on or off
 */
 
 
 
var $DOM	= YAHOO.util.Dom
var $EVENT	= YAHOO.util.Event 
var $CREATE	= YAHOO.util.Dom.create;

// get relative path for js/images folder via iPathFinder
var jsPath = fGetRelativePath();
function fGetRelativePath(){
	var s = document.getElementById("iPathFinder");
	if(s == null) return "/_assets/js/"; // play safe, should never need to hard code this but just incase.
	return String(s.src).match(/.*[/]/gi);
}

function PageLoad_Init () {
	
	var searchInput			= $DOM.getElementsBySelector ( 'input#frmSiteSearch' )
	
	var clearInput = function (ev,obj )
	{
			if(this.value=='Search'){
				this.value='';
			}
			this.onfocus = function()
			{
				if(this.value=='Search')
				{
					this.value='';
				}
			}
			this.onblur = function()
			{
				if(this.value=='')
				{
					this.value='Search';
				}
			}
	}
	
	for ( var i = 0; i < searchInput.length; i++ )
	{
		$EVENT.addListener ( searchInput, "click", clearInput );
	}
	

	var navL2Here	= $DOM.getElementsBySelector ( 'div#iNavL2 ul li.here' );
	if ( navL2Here ) {
		for ( var i = 0; i < navL2Here.length; i++ )
			{
				var lnks	= navL2Here[i].getElementsByTagName('a')

				if(lnks.length>1)
				{	
					var span	= $CREATE('span',{className:''}, []);
					lnks[0].appendChild(span);
				}
			}
	}

	
	var formcheck			= $DOM.getElementsBySelector ( 'div#iSearchFilters select#frmContent' );
	var formtog			= $DOM.getElementsBySelector ( 'div#iSearchFilters div.frmRow' );
	
	$DOM.addClass ( formtog, 'toggled' );
	

	
	var switcher = function (ev,obj )
	{
		if(this.value == 'frmReports') {
			$DOM.removeClass ( formtog, 'toggled' );
			
		}
		
		else{
			$DOM.addClass ( formtog, 'toggled' );
		}
	}
	
	for ( var i = 0; i < formcheck.length; i++ )
	{
		$EVENT.addListener ( formcheck, "change", switcher );
	}
	

	var newstog			= $DOM.getElementsBySelector ( 'div.newsToggle dl dt' );
		
	if ( newstog ) {
		
		var switcher = function ( ev, obj )
		{
			
			if ($DOM.hasClass(this.parentNode, 'toggled'))
			{
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Hide';
				$DOM.removeClass ( this.parentNode, 'toggled' );
			}
			else{	
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Show';
				$DOM.addClass ( this.parentNode, 'toggled' );
			}
		}
		
		for ( var i = 0; i < newstog.length; i++ )
			{
				var newstogitem	= newstog [ i ];
				
				var span		= $CREATE('span',{className:'hideBox'}, [$CREATE('span',{className:'hideBoxInner'},'Hide')]);
				newstogitem.appendChild(span);
				
				$DOM.addClass ( newstogitem, 'toggled' );	
				
				$EVENT.addListener ( newstogitem, "click", switcher );
			}
		
	}
	
	
	var els			= $DOM.getElementsBySelector ( 'div.toggleListItems dl dd h3');
		
	if ( els ) {
		
		var switcher = function ( ev, obj )
		{
			if ($DOM.hasClass(this.parentNode, 'toggled'))
			{
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Hide';
				$DOM.removeClass ( this.parentNode, 'toggled' );
				$DOM.addClass ( this.parentNode, 'unToggled' );
			}
			else{
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Show';
				$DOM.removeClass ( this.parentNode, 'unToggled' );
				$DOM.addClass ( this.parentNode, 'toggled' );
			}
		}
		
		for ( var i = 0; i < els.length; i++ )
			{
				var el	= els [ i ];
				$DOM.addClass ( el.parentNode, 'toggled' );
				
				var span		= $CREATE('span',{className:'hideBox'}, [$CREATE('span',{className:'hideBoxInner'},'Show')]);
				el.appendChild(span);			
				
				$EVENT.addListener ( el, "click", switcher );
			}
		
	}


	var els			= $DOM.getElementsBySelector ( 'div.toggle dl dt' );

	if ( els ) {
		
		var switcher = function ( ev, obj )
		{
			
			if ($DOM.hasClass(this.parentNode, 'toggled'))
			{
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Hide Filter';
				var icon		= $DOM.getElementsByClassName('arrow-toggled', 'span', this )
				$DOM.removeClass ( icon, 'arrow-toggled' );
				$DOM.addClass ( icon, 'arrow' );
				$DOM.removeClass ( this.parentNode, 'toggled' );
			}
			else{	
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Show Filter';
				var icon		= $DOM.getElementsByClassName('arrow', 'span', this )
				$DOM.removeClass ( icon, 'arrow' );
				$DOM.addClass ( icon, 'arrow-toggled' );
				$DOM.addClass ( this.parentNode, 'toggled' );
			}
		}
		
		for ( var i = 0; i < els.length; i++ )
			{
				var el	= els [ i ];
				
				var span		= $CREATE('span',{className:'hideBox'}, [$CREATE('span',{className:'hideBoxInner'},'Hide Filter')]);
				var arrow		= $CREATE('span',{className:'arrow'},'');
				el.appendChild(span);
				el.appendChild(arrow);
				
				$DOM.addClass ( el, 'toggled' );
				
				$EVENT.addListener ( el, "click", switcher );
			}
		
	}
	
	
	
	var els			= $DOM.getElementsBySelector ( 'div.togglePeople dl dt' );

	if ( els ) {
		
		var switcher = function ( ev, obj )
		{
			
			if ($DOM.hasClass(this.parentNode, 'toggled'))
			{
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Hide people';
				var icon		= $DOM.getElementsByClassName('arrow-toggled', 'span', this )
				$DOM.removeClass ( icon, 'arrow-toggled' );
				$DOM.addClass ( icon, 'arrow' );
				$DOM.removeClass ( this.parentNode, 'toggled' );
			}
			else{
				var box			= $DOM.getElementsByClassName('hideBoxInner', 'span', this )
				box[0].innerHTML= 'Show people';
				var icon		= $DOM.getElementsByClassName('arrow', 'span', this )
				$DOM.removeClass ( icon, 'arrow' );
				$DOM.addClass ( icon, 'arrow-toggled' );
				$DOM.addClass ( this.parentNode, 'toggled' );
			}
			
		}
		
		for ( var i = 0; i < els.length; i++ )
			{
				var el	= els [ i ];
				
				var span		= $CREATE('span',{className:'hideBox'}, [$CREATE('span',{className:'hideBoxInner'},'Show people')]);
				var arrow		= $CREATE('span',{className:'arrow-toggled'},'');
				el.appendChild(span);
				el.appendChild(arrow);
				$DOM.addClass ( el, 'toggled' );
				$DOM.addClass ( el.parentNode, 'toggled' );
				$EVENT.addListener ( el, "click", switcher );
				
				
				if($DOM.hasClass(el.parentNode, 'visible')){
					var box			= $DOM.getElementsByClassName('hideBoxInner', 'span' )
					box[0].innerHTML= 'Hide people';
					var icon		= $DOM.getElementsByClassName('arrow-toggled', 'span' )
					$DOM.removeClass ( icon, 'arrow-toggled' );
					$DOM.addClass ( icon, 'arrow' );
					$DOM.removeClass ( el.parentNode, 'toggled' );

				}
				
			}
		
	}
	
	
	var els			= $DOM.getElementsBySelector ( 'dd.jsHide' );
	
	for ( var i = 0; i < els.length; i++ )
		{
			$DOM.addClass ( els[i], 'hidden' );
		}
	
	
	var els			= $DOM.getElementsBySelector ( 'div.tabbedMenu ul.nav li a' );

	if ( els ) {
		
		var hiden			= $DOM.getElementsBySelector ( 'h2.jsHide' );
			if ( hiden ) {
				for ( var i = 0; i < hiden.length; i++ )
					{
						var hid	= hiden [ i ];
						$DOM.addClass( hid, 'hidden' );
					}
			}

		var switcher = function ( ev, obj )
		{
			var els	= $DOM.getElementsBySelector ( 'div.tabbedMenu ul.nav li a' );
			for ( var i = 0; i < els.length; i++ )
			{
				var el	= els [ i ];
				var ref	= el.hash.substr ( 1 );
				var div	= $DOM.get ( ref );

				if ( el == this ) {
					$DOM.addClass ( el.parentNode, 'here' );
					$DOM.removeClass ( div, 'jsHide' );
				} else {
					$DOM.addClass ( div, 'jsHide' );
					$DOM.removeClass ( el.parentNode, 'here' );
				}
				
				
				
			}
			if ( ev ) {
				$EVENT.stopEvent (ev);
			}
		}

		var found		= false;

		for ( var i = 0; i < els.length; i++ )
		{
			var el	= els [ i ];
			var ref	= el.hash.substr ( 1 );
			var div	= $DOM.get ( ref );

			$EVENT.addListener ( el, "focus", switcher );
			$EVENT.addListener ( el, "click", switcher );
			//$EVENT.addListener ( el, "mouseover", switcher );

			if ( div )
			{
				if ( !found )
				{
					/* add in class = here to the srating li */
					//$DOM.addClass ( el.parentNode, 'here' );
					$DOM.addClass ( div, 'jsHide' );
					found	= true;
				} else {
					$DOM.addClass ( div, 'jsHide' );
				}
				
				if ($DOM.hasClass(div, 'here')) {
					$DOM.removeClass ( div, 'jsHide' );
				}
				
				
			}
		}
	}
	
	 /* news archive show/hide nav */
    /*var els			= $DOM.getElementsBySelector ( 'ul.collapseNav li' );

	if ( els ) {
		var switcher = function ( ev, obj )
		{
			$DOM.addClass ( els, 'toggled' );
			if ($DOM.hasClass(this, 'toggled'))
			{
				$DOM.removeClass ( this, 'toggled' );
			}
			else{
				$DOM.addClass ( this, 'toggled' );
			}
		}
		
		for ( var i = 0; i < els.length; i++ )
			{
				var el	= els [ i ];
				if (!$DOM.hasClass(el, 'here')){
					$DOM.addClass ( el, 'toggled' );
				}
				$EVENT.addListener ( el, "click", switcher );
			}
	}*/
	
	
	core.corners.wrapExternally ( 'div.video ul li img', 4, 'div', 'jsCornered' );
	

	var siteMapNodes			= $DOM.getElementsBySelector ( 'ul.siteMap ul li' );
	var siteMapNodeLists			= $DOM.getElementsBySelector ( 'ul.siteMap ul ul' );

	var siteMapToggle = function (ev,obj )
	{
		if ($DOM.hasClass(this, 'expand'))
		{
			$DOM.removeClass ( this, 'expand' );
			$DOM.addClass ( this, 'contract' );
			$DOM.removeClass ( this.parentNode, 'toggled' );
			$DOM.addClass ( this.parentNode, 'untoggled' );
		}
		else{
			$DOM.removeClass ( this, 'contract' );
			$DOM.addClass ( this, 'expand' );
			$DOM.removeClass ( this.parentNode, 'untoggled' );
			$DOM.addClass ( this.parentNode, 'toggled' );
		}
	}
	
	
	
	if(siteMapNodes){
		for ( var i = 0; i < siteMapNodes.length; i++ )
		{
			$DOM.addClass ( siteMapNodes[i], 'untoggled' );
			
			var ul = siteMapNodes[i].getElementsByTagName('ul')
			if(ul.length){	
				var span	= $CREATE('span',{className:'contract'}, ["Contract"]);
				siteMapNodes[i].appendChild(span);
				$EVENT.addListener ( span, "click", siteMapToggle );
			}

			
		}
	}
	

	
	
	if(siteMapNodeLists){
		for ( var i = 0; i < siteMapNodeLists.length; i++ )
		{
			$DOM.addClass ( siteMapNodeLists[i], 'jsHide' );
			
		}
	}

	
	// add first and lat classes to lists...
    var tmp_lists        = document.getElementsByTagName ( 'ul' );
    for ( var i = 0; i < tmp_lists.length; i++ )
    {
        var tmp_list    = tmp_lists [ i ].getElementsByTagName ( 'li' );
        if ( tmp_list.length )
        {
            $DOM.addClass ( tmp_list [ 0 ], 'first' );
            $DOM.addClass ( tmp_list [ tmp_list.length - 1 ], 'last' );
        }
    };
    var tmp_lists        = document.getElementsByTagName ( 'ol' );
    for ( var i = 0; i < tmp_lists.length; i++ )
    {
		if(tmp_lists [ i ].parent().hasClass("pagination") == false)
		{
	        var tmp_list    = tmp_lists [ i ].getElementsByTagName ( 'li' );
	        if ( tmp_list.length )
	        {
	            $DOM.addClass ( tmp_list [ 0 ], 'first' );
	            $DOM.addClass ( tmp_list [ tmp_list.length - 1 ], 'last' );
	        }
		}
    };
    
   

	
}

YAHOO.util.Event.onDOMReady ( PageLoad_Init );
