	/*
	____________________________________________________________________
	
	//WHAT:		SIDE NAVIGATION AND BREADCRUMB TRAIL LOGIC.
	//WHEN:		DECEMBER, 20 2001
	//WHO:		CURTIS JACKSON
	//REQUIRED: MUST INCLUDE THE "sideNavArray.js" AND "funcBubbleSort.js" FILES
	//			BEFORE THIS LOGIC.
	//COMMENTS: DISPLAY LOGIC for BOTH BREADCRUMB AND SIDE NAV IN COMMENTS AT BOTTOM.
	//HISTORY:  NONE.
	____________________________________________________________________
	*/
		
	//ID OF CLICKED PAGE CATEGORY (SHOULD BE PASSED IN):
	//var navID=211;
	if (navID == 'undefined' || navID == null) 
	{
		var navID = null;
	}
	else
	{
	
	//*REQIRED PARENT ID SET TO 0:
	var parentID=0;
	//ARRAY VARIABLE INITIALIZATIONS:
	var upStreamArray = new Array();
	var upStreamArrayCount = 0;
	var breadCrumbArray = new Array();
	var sortedDisplayNavArray = new Array();
	var tempSortedDisplayNavArray = new Array();
	var displayNavArray = new Array();
	var navIdHasChild = false;
		
	//READ THROUGH SIDE NAV ARRAY AND GET ALL LEVEL IDs INCLUDING BREADCRUMB TRAIL:
	//NOTE: THIS ONLY GETS THE IDs OF ALL THE LEVELS IN THE NAV, NOT ALL THE BRANCHES IN EACH LEVEL.
	for (x = 0; x < sideNavArray.length; x++)
	{
		if (sideNavArray[x][0] == navID)
		{
			parentID = sideNavArray[x][3];
			var navParentID = parentID; //Need this variable for navigation display.
			upStreamArray[upStreamArrayCount] = navID;
			upStreamArrayCount++;
			upStreamArray[upStreamArrayCount] = parentID;
			upStreamArrayCount++;
			//upStreamArray.push(navID);
			//upStreamArray.push(parentID);
			breadCrumbArray[breadCrumbArray.length] = new Array(numOfNavItemElements);			
			breadCrumbArray[breadCrumbArray.length - 1] = sideNavArray[x];
			var rootIDPage = 1;
			var navGrandparentID = -1;
			while (parentID != 0)
			{	
				for (y = 0; y < sideNavArray.length; y++)
				{
					rootIDPage = 0;
					if (sideNavArray[y][0] == parentID)
					{
						parentID = sideNavArray[y][3];
						upStreamArray[upStreamArrayCount] = parentID;
						upStreamArrayCount++;
						//upStreamArray.push(parentID);
						breadCrumbArray[breadCrumbArray.length] = new Array(numOfNavItemElements);			
						breadCrumbArray[breadCrumbArray.length - 1] = sideNavArray[y];
						
						//GET THE GRANDPARENT ONE TIME FOR DISPLAY PURPOSES:
						if (navGrandparentID == -1)
						{
							navGrandparentID = parentID;
						}
						
						break;
					}
				}
			}
			if (rootIDPage == 1 ) var y = x;
			//SET ROOT ITEM IN SORTED DISPLAY ARRAY - USED FOR FINAL DISPLAY ON SCREEN:
			sortedDisplayNavArray[sortedDisplayNavArray.length] = new Array(numOfNavItemElements);			
			sortedDisplayNavArray[sortedDisplayNavArray.length - 1] = sideNavArray[y];
			break;				
		}
	}

	//READ THROUGH SIDE NAV ARRAY AND GET ALL IDs INCLUDING BRANCH IDs:
	for (a = 0; a < sideNavArray.length; a++)
	{
		//CMJ (01/18/02): ADDED THIS IF STATEMENT TO SEE IF THERE ARE CHILDREN BELOW THE
		//NAV ID LEVEL FOR DISPLAY PURPOSES:
		if ((!(navIdHasChild)) && (sideNavArray[a][3] == navID) ) navIdHasChild = true;
		
		for (b = 0; b < upStreamArray.length; b++)
		{
			if ((sideNavArray[a][0] == upStreamArray[b]) || (sideNavArray[a][3] == upStreamArray[b]))
			{
				displayNavArray[displayNavArray.length] = new Array(numOfNavItemElements);			
				displayNavArray[displayNavArray.length - 1] = sideNavArray[a];
				break;
			}
		}
	}
	
	//REVERSE THE BREADCRUMB AND UPSTREAM ARRAYS FOR PROCESSING AND DISPLAY PURPOSES.
	//SHOULD NOW BE IN ORDER FROM HIGHEST LEVEL DOWN TO THE CURRENT LEVEL OF THE PAGE DISPLAYED:
	breadCrumbArray.reverse();
	upStreamArray.reverse();
	
	//GET ALL DISPLAY IDs FROM TOP DOWN BY LEVEL AND SORT WITHIN EACH LEVEL BY SET ORDER.
	//AT EACH LEVEL DOWN, DO THE SAME AND INSERT IT INTO THE DISPLAY ARRAY IN THE CORRECT
	//BRANCH LOCATION BASES ON CHILD-PARENT RELATIONSHIPS.
	for (c = 0; c < breadCrumbArray.length; c++)
	{
		var tempSortedDisplayNavArray = new Array();
		var tempSortedDisplayNavArrayCount = 0;

		for (d = 0; d < displayNavArray.length; d++)
		{
			if ((displayNavArray[d][3] == breadCrumbArray[c][0]))
			{
				tempSortedDisplayNavArray[tempSortedDisplayNavArray.length] = new Array(numOfNavItemElements);			
				tempSortedDisplayNavArray[tempSortedDisplayNavArray.length - 1] = displayNavArray[d];
			}
		}
		//NEED bubbleSortIndex FUNCTION TO SORT MULTI-DIMENTIONAL ARRAY BE SPECIFIC INDEX (4 IS SORT ORDER):
		//FUTURE: COULD DO ADDITIONAL SORT PROCESSING FOR EQUAL SORT ORDERS TO SHOW ALPHABETICALLY.
		tempSortedDisplayNavArray = bubbleSortIndex(tempSortedDisplayNavArray, 4);
				
		if (tempSortedDisplayNavArray.length > 0)
		{
			var sortLength = sortedDisplayNavArray.length;
			
			//INCREASE THE SIZE OF THE SORTED DISPLAY ARRAY FOR THE NEW BRANCH ABOUT TO BE ADDED:
			for (e = 0; e < tempSortedDisplayNavArray.length; e++)
			{
				sortedDisplayNavArray[sortedDisplayNavArray.length] = new Array(numOfNavItemElements);			
			}

			//MOVE BRANCHES DOWN TO INSERT NEW BRANCH BASED ON CHILD-PARENT RELATIONSHIPS.
			//THIS ALSO WORKS AT THE ROOT LEVEL WHEN THERE IS NOTHING TO MOVE AROUND.
			for (f = 0; f < sortedDisplayNavArray.length; f++)
			{
				if (sortedDisplayNavArray[f][0] == tempSortedDisplayNavArray[0][3])
				{
					var itemsMoving = ((sortLength - 1) - f) ;
					var moveCount = 1;
					for (g = sortLength; g > (sortLength - itemsMoving); g--)
					{
						sortedDisplayNavArray[sortedDisplayNavArray.length - moveCount] = sortedDisplayNavArray[g - 1];
						moveCount++;		
					}
					break;
				}
			}
			
			//INSERT THE SORTED BRANCH IN THE NAVIGATION:
			var insertStart = sortLength - itemsMoving;
			for (h = 0; h < tempSortedDisplayNavArray.length; h++)
			{			
				sortedDisplayNavArray[insertStart] = tempSortedDisplayNavArray[h];
				insertStart++;
			}	
		}
	}
	}
	
	