
// ===================== KCMOVerticalMenuBar Class ======================================

function KCMOVerticalMenuBar (strInstanceName, strCgiPath, strAssetsPath, strShowHome, strStartLevel)
{
	this.m_InstanceName = strInstanceName;
	this.m_CgiPath	    = strCgiPath;
	this.m_AssetsPath   = strAssetsPath;
	this.m_ShowHome	    = false;
	this.m_StartLevel   = 0;
	
	if (strShowHome != null && strShowHome == 'true')
		this.m_ShowHome = true;

	if (strStartLevel != '')
	{
		var value = parseInt(strStartLevel);
		if (value != NaN)
			this.m_StartLevel = value;
	}

	this.m_src_Space = strAssetsPath + 'space.gif';			

	this.m_HeaderTableId = strInstanceName + '_HeaderTable';
	this.m_HeaderMenuId  = strInstanceName + '_HeaderMenu';
	
	this.m_selectedElements = new Array(0);

	this.m_ds = new Array();
	this.m_di = 0;

	// primary display 
	KCMOVerticalMenuBar.prototype.Display = KCMOVerticalMenuBar_Display;
// KCMOVerticalMenuBar.prototype.DisplayNode = KCMOVerticalMenuBar_DisplayNode;
	KCMOVerticalMenuBar.prototype.FindNode = KCMOVerticalMenuBar_FindNode;
	
	
	KCMOVerticalMenuBar.prototype.BuildSingleLinkCell = KCMOVerticalMenuBar_BuildSingleLinkCell
	KCMOVerticalMenuBar.prototype.BuildSections = KCMOVerticalMenuBar_BuildSections
	KCMOVerticalMenuBar.prototype.BuildColumnHtml = KCMOVerticalMenuBar_BuildColumnHtml
	KCMOVerticalMenuBar.prototype.BuildSection =	KCMOVerticalMenuBar_BuildSection
	
}

function KCMOVerticalMenuBar_Display(node)
{
	var foundNode = this.FindNode(node);

	if (foundNode == null || (foundNode.m_subNodes.length == 0 && !this.m_ShowHome))
	{
		document.write('&nbsp;');
		return;				// **** R E T U R N **** 
	}

	// else, we have a node to display

	this.m_ds[this.m_di++] = 
		'<!-- Header Table -->' + 
		'<table id="' + this.m_HeaderTableId + '" style="width:100%" border="0" cellspacing="0" cellpadding="0">' +
		'	<tr>\n' +
		'		<td colspan="3" class="ddv_HeaderSpacerCell"><img src="' + this.m_src_Space + '" width="16" height="1"></td>\n' +
		'	</tr>\n' +
		'	<tr>' +
		'		<td id="' + this.m_HeaderMenuId + '" class="ddv_HeaderMenuCell">' +
		'';

// opening HTML for the Home node... but really binding the whole top level
		this.m_ds[this.m_di++] =
			'<table border="0" cellpadding="0" cellspacing="0">\n' +
			'';
// opening HTML

// core HTML
 	this.m_ds[this.m_di++] = this.BuildSections(foundNode);		// recursive walk...
// core HTML
	
// closing HTML for the Home node...
		this.m_ds[this.m_di++] =
			'</table>\n';
// closing HTML for the Home node...

	this.m_ds[this.m_di++] = 
		'       </td>\n' +
		'	</tr>\n' +
		'</table>\n' +	
		'';


	document.write(this.m_ds.join(''));
}

function KCMOVerticalMenuBar_FindNode (node)
{
	var retNode = null;
    var pathLevel = g_navNode_Path.length - 1;
	if (node.m_level == pathLevel && node.m_id == g_navNode_Path[pathLevel])
	{
		retNode = node;
	}
	else
	if (node.m_level < pathLevel)
	{
		for (var count = 0; count < node.m_subNodes.length; count++)
		{
			retNode = this.FindNode(node.m_subNodes[count]);
			
			if (retNode != null)
				break;
		}
	}
	return retNode;
}


function KCMOVerticalMenuBar_BuildSections(parentElement)
{
	var html = '<table class="ddv_MenuTable">\n';
	var columnHtmlArray = this.BuildColumnHtml(parentElement) ;

	html +=  '<tr>\n';
	html +=    '<td class="ddv_MenuColumn1">\n';
	html +=         columnHtmlArray[0];
	html +=    '</td>\n';
	html +=    '<td class="ddv_MenuColumn2">\n';
	html +=        columnHtmlArray[1];
	html +=    '</td>\n';
	html +=  '</tr>\n';
	
	html +='</table>\n';
	return html;
}

/**
 * returns an array of size two wich will contain the html for each column (in a table for each)
 */
function KCMOVerticalMenuBar_BuildColumnHtml(parentElement)
{
	// Create a variable containing all children of the passed-in element. 
	var childList = parentElement.m_subNodes;
	var columnHtml = new Array(); // contains the html for each column
	columnHtml[0] = '<table>\n';
	columnHtml[1] = '<table>\n';
	
	for(var i=0; i<childList.length; i++)
	{
		var topLevelSectionNode = childList[i];
		columnHtml[i%2] += '<tr>\n<td>\n' + this.BuildSection(topLevelSectionNode) + '</td>\n</tr>\n';
	}
	
	columnHtml[0] += '</table>\n';
	columnHtml[1] += '</table>\n';
	
	return columnHtml;
}

/**
 *  Builds a section and it's direct children and places it all in a table element.
 */
function KCMOVerticalMenuBar_BuildSection(parentElement)
{
	var htmlCode ='<table>\n';
	var parentNodeClass = "boxLinkBig"; // TODO: figure out className
	var childNodeClass = "boxLink";
	htmlCode += this.BuildSingleLinkCell(parentElement,parentNodeClass); 

	// Create a variable containing all children of the passed-in element. 
	var childList = parentElement.m_subNodes;	
	for (var i=0; i<childList.length; i++)
	{		
		var childNode = childList[i];
		htmlCode += '<tr>\n';
		htmlCode += this.BuildSingleLinkCell(childNode, childNodeClass); 
		htmlCode += '</tr>\n';
	}
	
	htmlCode += '</table>\n';
	return htmlCode;
}


function KCMOVerticalMenuBar_BuildSingleLinkCell(element, className){
	var url = element.m_href.replace(/'/g, "\\'");
	var label = element.m_label;
	
	return '<td class="' + className + '">\n\t\t\t<a href="' + url + '">' + label + '</a>\n\t\t\t</td>\n';
}


// // Vestigial  (TODO Remove)
// function KCMOVerticalMenuBar_ClosingHtml(parentElement)
// {
// 	var level = parentElement.m_level;
// 
// 	if (level == this.m_StartLevel) // Home node
// 	{}
// 	else 
// 	{
// 		this.m_ds[this.m_di++] =
// 			'			<tr>\n' +
// 			'				<td>\n' +
// 			'					<img src="' + this.m_src_Space + '" width="1" height="2"></td>\n' +
// 			'			</tr>\n' +
// 			'		</table>\n' +
// 			'	</div>\n' +
// 			'   </td>\n' + // Closing tag for parent cell
// /* bjn */	'</tr>\n' + // Closing tag for parent row.
// 			'';			
// 	}
//}

// ==================== the end ===========================
