var dnPosObj;

var tweenAtt;
var tweenTarget;


docNav = {};

//-------------------------------------------------------------------------------

docNav.ulPos = function( rObj )
{

	// Set Doc Nav open/closed
	if( $$("#nav2-space").getStyle( "height" ) != "0px" )
	{
		$$("#nav2, #nav2-space").each(function(elm,i)
		{
			elm.get('tween', {duration:1200,transition:'pow:out',onComplete:function()
			{
				dnPosObj = 0;
				if (i) {
					dnPosObj = $("nav3-ul").getStyle("margin-left").toInt();
				} 
				
				// If there is already a parameter at the end of the URL, then add &+parameter else ?+parameter
				if (rObj.indexOf("?") < 0) {
					window.location = rObj+"?dnPos="+ dnPosObj;
				} else {
					window.location = rObj+"&dnPos="+ dnPosObj;
				}

			}}).start("height", 0 )
		});
		isOpen=false;
	}

	dnPosObj = 0;
	if (rObj != $$("#nav3-ul li")[0].getElement('a').get('href')) {
		dnPosObj = $("nav3-ul").getStyle("margin-left").toInt();
	}

	// If there is already a parameter at the end of the URL, then add &+parameter else ?+parameter
	if (rObj.indexOf("?") < 0) {
		window.location = rObj+"?dnPos="+ dnPosObj;
	} else {
		window.location = rObj+"&dnPos="+ dnPosObj;
	}
}

//-------------------------------------------------------------------------------

docNav.init = function()
{
	
	dnPosObj = parseInt(window.location.search.substring(window.location.search.indexOf("dnPos=")+6));
	
	//$("nav3").addClass(" js");

	//setup Dock Nav
	//-------------------------------------------------------------------------------
	if( Browser.Engine.trident4 )
	{
		$("nav3").setStyle("position","absolute");
	}
	//-------------------------------------------------------------------------------

	docNav.unseenSpace = "";
	docNav.scrollMode = "expo:out";
	docNav.scrollMode = "quart:out";
	docNav.scrollDuration = 5000;
	docNav.hiddenHeight = 59; //amount of docnav showing when it's hidden
	docNav.hiddenHeight = Browser.Engine.trident4 ? 61 : 59;
	docNav.shownHeight = $("nav3").getSize().y;

	// Add Show and Hide events
	docNav.setShowEvent();
	docNav.setHideEvent();
	
	/* Set up the Left and Right Doc Navigation */
	//docNav.createHorizontalNavigation.pass('right')();
	//docNav.createHorizontalNavigation.pass('left')();
	
	/* Left scroll */
	
	var leftArrow = new Element('div', {
    'class': 'left',
    'events': {
        'mouseover': function()
		{
            docNav.scrollLeft();
        },
		'mouseout': function()
		{
			if($("nav3-ul").getStyle("margin-left").toInt() < docNav.leftLimit - 30 )
			{
				$("nav3-ul").get('tween', {duration:500,transition:"quad:out"}).start('margin-left', $("nav3-ul").getStyle("margin-left"),$("nav3-ul").getStyle("margin-left").toInt() +10 + "px");
			}
			else
			{
				$("nav3-ul").get('tween', {duration:500,transition:"quad:out"}).start('margin-left', $("nav3-ul").getStyle("margin-left"),docNav.leftLimit);
			}
        }			
   	}});
	leftArrow.inject($("nav3"));
	
	/* Right scroll */
	
	var rightArrow = new Element('div', {
    'class': 'right',
    'events': {
        'mouseover': function()
		{
            docNav.scrollRight();
        },
		'mouseout': function()
		{
			if( $("nav3-ul").getStyle("margin-left").toInt() > docNav.rightLimit + 30 )
			{
				//$("nav3-ul").get('tween').cancel();
				$("nav3-ul").get('tween', {duration:500,transition:"quad:out"}).start('margin-left', $("nav3-ul").getStyle("margin-left"),$("nav3-ul").getStyle("margin-left").toInt() -10 + "px");
			}
			else
			{
				//$("nav3-ul").get('tween').cancel();
				$("nav3-ul").get('tween', {duration:500,transition:"quad:out"}).start('margin-left', $("nav3-ul").getStyle("margin-left"),docNav.rightLimit);
			}
        }
	}});
	rightArrow.inject($("nav3"));
	
	/* Fire resize */
	window.addEvent('resize', function()
	{

		if( Browser.Engine.gecko || Browser.Engine.trident || Browser.Engine.webkit || Browser.Engine.presto)
		{
			docNav.sizer( dnPosObj );
		}
		else
		{
			docNav.sizer( dnPosObj );
		}
		
	});

	// IE6 docNav Pos 
	if( Browser.Engine.gecko || Browser.Engine.trident || Browser.Engine.webkit || Browser.Engine.presto)
	{
		docNav.sizer( dnPosObj );
	}
	else
	{
		docNav.sizer( dnPosObj );
	}

	docNav.arrowChopper.periodical( 500 );

}//end init

/* Fired to resize if browser window changes size */
docNav.sizer = function ( dnPosObj )
{

	//setBorder and Width
	docNav.navWidth = document.body.clientWidth;
	$$("#nav3")[0].setStyle("margin-left", "6px");
	$$("#nav3")[0].setStyle("width", ( docNav.navWidth - 12 ) + "px");

	docNav.liLength = $$("#nav3-links li").length;
	docNav.liWidth = $$("#nav3-links li")[0].getStyle("width").toInt() + $$("#nav3-links li")[0].getStyle("margin-left").toInt();
	docNav.totalWidth = ( docNav.liLength * docNav.liWidth );
	
	docNav.container = $("nav3-links").getSize().x - 130;
	$("nav3-links").setStyles("width", docNav.container + "px");
	
	// docNav.middle =  "-" + (docNav.totalWidth / 2);
	docNav.middle = (docNav.totalWidth / 2) - docNav.totalWidth ;
	docNav.unseenSpace =  ( docNav.totalWidth - docNav.container );
	docNav.rightLimit = docNav.middle - ( docNav.unseenSpace / 2 );
	//docNav.leftLimit = docNav.middle - ( "-" + ( docNav.unseenSpace / 2 ));
	docNav.leftLimit = docNav.middle - (( docNav.unseenSpace / 2 ) - docNav.unseenSpace );

	$$("#nav3-links ul")[0].setStyle("width", docNav.totalWidth + "px" );

	// Set ReSize vars
	/*
	if( !dnPosObj )
	{
		if( docNav.totalWidth <= $("nav3-links").getSize().x )
		{
			$$("#nav3-links ul")[0].setStyle("margin-left", docNav.middle+"px");
		}
		else
		{
			$$("#nav3-links ul")[0].setStyle("margin-left", docNav.leftLimit + "px");
		}
	}
	*/
	/*
	* SThorne: 
	* 	!dnPosObj: If we don't have a URL query parameter of 'dnPos', then when the page loads it will evaluate the the doc nav list items and center them. This is awesomely correct
	*	dnPosObj: If we do have a URL query parameter of 'dnPos', I can't see it being used to actually set the position of the doc nav. Additionally, this position is being set
	*				by the previous page, although theoretically the nav may not confirm to the same rules, nav items may have changed at the HTTP request, and so the dnPosObj 
	*				may be wrong?? 
	*	Solution: Just evaluate the doc nav list items and center them on page load, ignoring any URL query parameters 
	*/
	if(docNav.totalWidth <= $("nav3-links").getSize().x)
	{
		$$("#nav3-links ul")[0].setStyle("margin-left", docNav.middle+"px");
	}
	else
	{
		$$("#nav3-links ul")[0].setStyle("margin-left", docNav.leftLimit + "px");
	}
	
	var iLi = 0;
	docNav.liLength.each(
						 
		function( iLi )
		{
			//-------------------------------------------------------------------------------
			docNav.noLiSelect = iLi+1;

			if( $$("#nav3-links li")[iLi].hasClass("selected") )
			{
				
				docNav.posLeft = ( docNav.liWidth * iLi );
				docNav.noLiOnScreen = ( docNav.container / docNav.liWidth ).toInt();
				docNav.spTxtLen = $$( "#nav3-links span" )[iLi].get('text').length;

				if( docNav.spTxtLen <= 23 )
				{
					if( Browser.Engine.trident4 )
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "7px");
					}
					else
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "10px");
					}
				}
				else
				{
					if( Browser.Engine.trident4 )
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "0px");
					}
					else
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "18px");
					}
				}

				if( dnPosObj )
				{
					
					
					//alert("init" + dnPosObj);

					if( docNav.noLiSelect == docNav.liLength )
					{
						
						//Last LI
						if( docNav.totalWidth < $("nav3-links").getSize().x )
						{
							$$("#nav3-links ul")[0].setStyle("margin-left", docNav.middle+"px");
						}
						else
						{
							$$("#nav3-links ul")[0].setStyle("margin-left", docNav.rightLimit + "px");
						}
						
					}
					else if( docNav.noLiSelect == 1 )
					{
						
						//First LI
						if( docNav.totalWidth < $("nav3-links").getSize().x )
						{
							$$("#nav3-links ul")[0].setStyle("margin-left", docNav.middle+"px");
						}
						else
						{
							$$("#nav3-links ul")[0].setStyle("margin-left", docNav.leftLimit + "px");
						}
						
					}
					else
					{
						
						
						
						var scWid = 75; // Width of Scroll tab + 6px border
						
						var co_ordsLeft = $$("#nav3-links li")[iLi].getCoordinates().left;
						var co_ordsRight = $$("#nav3-links li")[iLi].getCoordinates().left;
						

						if( co_ordsLeft <= scWid )
						{
							
							/*  Please look at left and right co-ord's */
							/*
							alert("l");
							//Pos left overlap
							var putInPlaceLeft = ( ( docNav.liWidth - co_ordsLeft ) + dnPosObj.toInt() );
							*/
							
							$$("#nav3-links ul")[0].setStyle("margin-left", dnPosObj + "px");	
						}
						else if( co_ordsRight >= ( docNav.container - scWid ) )
						{
							/*
							alert("r");
							//Pos right overlap
							
							co_ordsRight = co_ordsRight - ( docNav.container - scWid - 30);
							var putInPlaceRight = dnPosObj.toInt() - ( co_ordsRight );
							
							*/

							$$("#nav3-links ul")[0].setStyle("margin-left", dnPosObj + "px");
						}
						else
						{
							$$("#nav3-links ul")[0].setStyle("margin-left", dnPosObj + "px");
						}

					}
					
					
					// Center if no needed to scroll
					if( docNav.totalWidth < docNav.navWidth )
					{
						$$("#nav3-links ul")[0].setStyle("margin-left", docNav.middle+"px");
					}
					
				}
			}
			else
			{
				//------------------------------------------
				// Set Psuedo Class fix for <IE6
				//------------------------------------------
				$$("#nav3-links li")[iLi].onmouseover=function()
				{
					this.className+="liHover";
				}
				$$("#nav3-links li")[iLi].onmouseout=function()
				{
					this.className=this.className.replace(new RegExp("liHover\\b"), "");
				}
				//------------------------------------------
				
				docNav.spTxtLen = $$( "#nav3-links span" )[iLi].get('text').length;
				
				if( docNav.spTxtLen > 23 )
				{
					if( Browser.Engine.trident4 )
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "0px");
					}
					else
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "18px");
					}
				}
				else
				{
					if( Browser.Engine.trident4 )
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "7px");
					}
					else
					{
						$$("#nav3-links span")[iLi].setStyle("bottom", "10px");
					}
				}
			}
			iLi++
		}
	);

}

/* scroll left do */

docNav.scrollLeft = function ()
{
	var currentOffset = $("nav3-ul").getStyle("margin-left").toInt();
	$("nav3-ul").get('tween', {duration:docNav.scrollDuration,transition:docNav.scrollMode,onComplete:docNav.arrowChopper}).start('margin-left', currentOffset, docNav.leftLimit + "px");
}
/* scroll right do */

docNav.scrollRight = function()
{
	var currentOffset = $("nav3-ul").getStyle("margin-left");
	$("nav3-ul").get('tween', {duration:docNav.scrollDuration,transition:docNav.scrollMode, onComplete:docNav.arrowChopper}).start('margin-left', currentOffset, docNav.rightLimit + "px");
}

/* chop arror off if no need to scroll do */
docNav.arrowChopper = function()
{
	//chops the arrows off
	var liWidth= $$("#nav3-links li")[0].getStyle("width").toInt() + $$("#nav3-links li")[0].getStyle("margin-left").toInt();
	var totalWidth = ($$("#nav3-links li").length ) * liWidth;
	if ($("nav3-links").getSize().x < totalWidth)
	{
		if ( $("nav3-ul").getStyle("margin-left").toInt() < (docNav.rightLimit + 40 ) )
		{
			$$("#nav3 .right").fade("out");
		}
		else
		{
			$$("#nav3 .right").setStyle("display","block");
			$$("#nav3 .right").fade("in");
		}
		if ( $("nav3-ul").getStyle("margin-left").toInt() >  (docNav.leftLimit - 40) ){
			$$("#nav3 .left").fade("out");
		}
		else
		{
			$$("#nav3 .left").setStyle("display","block");
			$$("#nav3 .left").fade("in");
		}			
	}
	else
	{
		$$("#nav3 .left, #nav3 .right").fade("out", {onComplete:function(){$$("#nav3 .left, #nav3 .right").setStyle("display","none")} });
	} 
	
}


docNav.setShowEvent = function() {
	$('show').addEvent('click', function() {			 
		docNav.state="up";
		tweenAtt = Browser.Engine.trident4 ? "height" : "bottom";
		tweenTarget = Browser.Engine.trident4 ? docNav.shownHeight : "0px";
		
		$('nav3').get('tween', {
			duration:200,
			transition:'linear',
			onComplete:function() {
				$('hide').setStyle('display','block');
				$('show').setStyle('display','none');
				$$("#nav3-links div.unSelected div").setStyle("bottom", "0px");
				$$("#nav3-links div.selected div").setStyle("bottom", "0px");
				$$(".nav3")[0].setStyle("border-top", "1px solid #9d2c1e");
				$$(".nav3")[0].setStyle("background", "#dc291e");
				$$(".header-buttons h2").setStyle("display", "block");
				$$(".nav3 div.left").removeClass('nav3-left-hide').addClass('nav3-left-show');
				$$(".nav3 div.right").removeClass('nav3-right-hide').addClass('nav3-right-show');
			}
		}).start(tweenAtt, tweenTarget)
		//create space at bottom of page so that we can see the footer even when docnav is up
		$$(".container")[0].setStyle("padding-bottom","140px");
	});
}

docNav.setHideEvent = function() {
	$("hide").setStyle("display","block").addEvent('click', function() {
		docNav.state = "down";
		tweenAtt = Browser.Engine.trident4 ? "height" : "bottom";
		tweenTarget = Browser.Engine.trident4 ? docNav.hiddenHeight : docNav.hiddenHeight-$("nav3").getSize().y +"px";
		if(Browser.Engine.trident4) {
			$("nav3").getStyle("top").toInt() + ($("nav3").getSize().y - docNav.hiddenHeight ) + "px";
		}
		$('nav3').get('tween', {
			duration:400,
			transition:'quart:in',
			onComplete:	function() {
				$('hide').setStyle('display','none'); 
				$('show').setStyle('display','block'); 
				$$("#nav3-links div.unSelected div").setStyle("bottom", "58px");
				$$("#nav3-links div.selected div").setStyle("bottom", "58px");
				$$(".nav3")[0].setStyle("border-top", "0px solid #9d2c1e");
				$$(".nav3")[0].setStyle("background", "transparent");
				$$(".header-buttons h2").setStyle("display", "none");
				$$(".nav3 div.left").removeClass('nav3-left-show').addClass('nav3-left-hide');
				$$(".nav3 div.right").removeClass('nav3-right-show').addClass('nav3-right-hide');
				if(Browser.Engine.trident4) {
					$$(".container")[0].setStyle('padding-bottom','0px');
				}
			}
		}).start(tweenAtt, tweenTarget)
	});
}

/* Scroll the Doc Nav*/
docNav.scrollDocNavigation = function() {
	//if(!Browser.Engine.trident4) console.log("docNav.scrollDocNavigation() : arguments[0]: "+arguments[0]);
	$("nav3-ul").get('tween', {duration:docNav.scrollDuration,transition:docNav.scrollMode,onComplete:docNav.arrowChopper}).start('margin-left', $("nav3-ul").getStyle("margin-left").toInt(), arguments[0] + "px");
}

/* Create the Left and Right Doc Navigation */
docNav.createHorizontalNavigation = function() {
	/*
	*	arguments[0]: String: CSS Class
	*/
	docNav.horizontalNavCssClass = arguments[0];
	new Element('div', {
		'id': docNav.horizontalNavCssClass+'-horizontal-navigation',
    	'class': docNav.horizontalNavCssClass,
    	'events': {
        	'mouseover': function() {
	            docNav.scrollDocNavigation.pass(docNav.horizontalNavCssClass == 'right' ? docNav.rightLimit : docNav.leftLimit)();
	        },
			'mouseout': function() {
				docNav.directionLimit = (docNav.horizontalNavCssClass=='right') ? docNav.rightLimit : docNav.leftLimit;
				docNav.ulElementMargin = (docNav.horizontalNavCssClass=='right') ? $("nav3-ul").getStyle("margin-left").toInt() - 10 : $("nav3-ul").getStyle("margin-left").toInt() + 10
				if($("nav3-ul").getStyle("margin-left").toInt() > (docNav.rightLimit + 30) || $("nav3-ul").getStyle("margin-left").toInt() < (docNav.leftLimit - 30)) {
					$("nav3-ul").get('tween', {duration:500,transition:"quad:out"}).start('margin-left', $("nav3-ul").getStyle("margin-left"),docNav.ulElementMargin + "px");
				} else {
					$("nav3-ul").get('tween', {duration:500,transition:"quad:out"}).start('margin-left', $("nav3-ul").getStyle("margin-left"),docNav.directionLimit + "px");
				}
	        }
		}
	}).inject($("nav3"));
}

//if(!Browser.Engine.trident4) console.log("Debug r0.0001");