//-----------------------------------------------------------------------------
// LeftNavigation.js
// 2007.09.12 - written by rk7138 for AT&T Communications
// 2007.10.17 - added REDIRECT check for PIDs not directly within the nav menu
// 2007.10.29 - added patch to hide .main until page is completely loaded, onload = show .main
//-----------------------------------------------------------------------------
// ASSUMES
// -- writeHTML.js is loaded
// -- PID.js is loaded
//
// METHODS
//
// USAGE
// -- LeftNavigation.init() is invoked on window.load
//
// INFORMATION
//   1. Acquires PID from querystring where ?pid=XXXXX
//   2. Retrieves page context according to pid
//   3. Builds parent and children links in result tree accordingly
//   4. Sets style of currently viewed pid as selected
//   5. Overwrites existing left navigation element if it exists thereby
//      ensuring unobtrusive javascript behavior.
//   6. Makes the parent container for the navigation visible after inserting HTML

var LeftNavigation = {
	getNavTopHtml: function (){
		var htmlStr = '';

		htmlStr += '<ul>\n';	
		
		return htmlStr;		
	},
		
	getNavBottomHtml: function (){
		var htmlStr = '';
		
		htmlStr += '			</ul>\n';
		
		return htmlStr;		
	},
	
	getBasicEntry: function (detailsObj, givenNodeId, nodeId){
		var entryTarget = PID.getDestinationUrl(detailsObj);
		var entryLabel = detailsObj['label'];
		var entryTooltip = detailsObj['tooltip'];		
		var entryLevel = detailsObj['level'];
		var entryPid = detailsObj['pid'];
		var entryDuplicate = detailsObj['duplicate'];
		var htmlStr = '';
		
		if (entryDuplicate){ entryTarget += '&last=' + nodeId; }
		htmlStr += '<a href="' + entryTarget + '" ';
		
		if (givenNodeId == nodeId){ htmlStr += 'id="selected-link" '; }						
		htmlStr +=  'title="' + entryTooltip + '">' + entryLabel ;
	    if((entryPid == 'NNNN4')||(entryLabel == 'Sign Up Now')) { htmlStr += '<br><br><img src="/Common/webhosting/images/Serchen_Award_Webhostdir.com.jpg" height="129" width="160" alt="Webhost Award" /> ';}
		htmlStr +=  '</a>\n';
	
		return htmlStr;		
	},
		
	getEntryHtml: function (givenNodeList, givenNodeId){
		var htmlStr = '';
		var numNodes = givenNodeList.length;

		for (var i = 0; i < numNodes; i++){
			var nodeId = givenNodeList[i];
			var detailsObj = PID.getInfo(nodeId, false);
			
			var myLevel = PID.getInfo(givenNodeList[i], false)['level'];
			var nextLevel = 0;
			var nextIndex = i + 1;
						
			if (nextIndex < numNodes){ nextLevel = 	PID.getInfo(givenNodeList[nextIndex], false)['level']; }	
			
			var outputStr = LeftNavigation.getBasicEntry (detailsObj, givenNodeId, nodeId);
			
			if (myLevel == nextLevel){ outputStr = '<li>' + outputStr + '</li>\n'; }
			else if (myLevel < nextLevel){ outputStr = '<li>' + outputStr + '<ul>'; }
			else if (myLevel > (nextLevel + 1)){ outputStr = '<li>' + outputStr + '</li></ul></li></ul></li>'; }
			else if (myLevel > nextLevel){ outputStr = '<li>' + outputStr + '</li></ul></li>'; }
			
			htmlStr += outputStr;
		}
		
		return htmlStr;
	},
		
	getCurrent: function (){
		var pid = getQueryParameter('pid');
		var lastNodeId = getQueryParameter('last'); 
		var hash = document.location.hash;
		var key = pid + hash;		
		var infoObj;
		var externalPID = -1;
		
		if (!pid){ pid = '10229'; }
		if (lastNodeId){
			infoObj = PID.getInfo(lastNodeId, false);
		}
		else {			
			var redirectPID = PID.REDIRECTS[pid];
			
			if (redirectPID){
				externalPID = pid;
				infoObj = PID.getInfo(redirectPID['pid'], true);
			}
			else {
				infoObj = PID.getInfo(key, true);
			}
		}
		
		return { infoObj:infoObj, externalPID: externalPID };		
	},
		
	getRenderList: function (){
		var renderList = [];	
		var infoObj = LeftNavigation.getCurrent().infoObj;		
		var nodeId = infoObj['nodeId'];		
				
		var nodeParentId = PID.getParentId(nodeId, false);
		var parentSiblings = PID.getSiblingIds(nodeParentId, false);
		var parentList = PID.getAllParentIds(nodeId, false);
		var siblingList = PID.getSiblingIds(nodeId, false);
		var childList = PID.getChildrenIds(nodeId, false);
		var numEntries = PID.infoArray.length;

		for (var i = 0; i < numEntries; i++){
			var entryObj = 	PID.infoArray[i];
			var entryDetail = entryObj['detail'];
			var entryLevel = entryDetail['level'];
						
			if (entryLevel != 1){ 
				if (listContains(parentList, i)){ 
					renderList.push(i);					
				}
				else if (listContains(parentSiblings, i)){
					renderList.push(i);	
				}
				if (listContains(siblingList, i)){
					renderList.push(i);
				}
				if (listContains(childList, i)){
					renderList.push(i);	
				}										
			}
			else {
				renderList.push(i);	
			}			
		}
		
		return {list: renderList, id: nodeId};
	},
		
	drawNavigation: function (){
		var replaceTargetClass = 'navigation autoselect';
		var valueObj = LeftNavigation.getRenderList();
		
		var htmlStr = '';
		htmlStr += LeftNavigation.getNavTopHtml();
		htmlStr += LeftNavigation.getEntryHtml(valueObj.list, valueObj.id);	
		htmlStr += LeftNavigation.getNavBottomHtml();	
		
		var replaceObj = getFilteredElementsByClassName(replaceTargetClass, "div");
		
		if (replaceObj){
			setInnerHTML(replaceObj[0], htmlStr); 
			replaceObj[0].parentNode.parentNode.style.display = 'block';
		}
	},
		
	init: function(){
		PID.init();
		LeftNavigation.drawNavigation();
		$('section1').style.display = 'block';	
	}
}

addEvent(window, 'load', LeftNavigation.init);