/////////////////////////////////////////////////////////////////////////////
// Function : searchItem
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////				
function searchItem(contentID, sectionID, linkTitle, linkAbstract, score, docFormat, contentDate, contentItemType, friendlyURL) {
	this.m_ContentID = contentID;
	this.m_SectionID = sectionID;
	this.m_LinkTitle = linkTitle;
	this.m_LinkAbstract = linkAbstract;
	this.m_Score = score;
	this.m_ParentNode = 0;
	this.m_DocFormat = docFormat;
	this.m_ContentDate = contentDate;
	this.m_ContentItemType = contentItemType;
	this.m_FriendlyURL = friendlyURL;
}

/////////////////////////////////////////////////////////////////////////////
// Function : parentNode
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////				
function parentNode(nodeID, friendlyURL, label) {
	this.m_NodeID = nodeID;
	this.m_FriendlyURL = friendlyURL;
	this.m_Label = label;
	this.m_SearchItems = new Array();
	this.m_AverageRevelancy = 0;
}

/////////////////////////////////////////////////////////////////////////////
// Function : calculateScores
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////						
function calculateScores(parentNodeObj) {
	var searchItemObj = null;
	var count = 0;
	var total = 0;
	var i = 0;

	count = parentNodeObj.m_SearchItems.length;
	for (i = 0 ; i < count ; i++) {
		searchItemObj = parentNodeObj.m_SearchItems[i];
		total = (total + searchItemObj.m_Score);	
	}
	
	if ( count > 0 ) {
		parentNodeObj.m_AverageRevelancy = total / count;
	}
}

/////////////////////////////////////////////////////////////////////////////
// Function : addSearchItemsToParentNodes
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////					
function addSearchItemsToParentNodes(searchItems, parentNodes, scoreDisplayMinimum) {
	var searchItemObj = null;
	var parentNodeObj = null;
	var di = 0;
	var i = 0;
	var j = 0;
	var targetNode = null;
	
	
	// Loop through each element in parentNodes and add searchItem
	// elements from searchItems in each associated parentNode. 
													
	for (j = 0 ; j < parentNodes.length ; j++) {
		parentNodeObj = parentNodes[j];
		di = 0;
		for (i = 0 ; i < searchItems.length ; i++) {
			searchItemObj = searchItems[i];
			if ( searchItemObj.m_ParentNode == 0 ) {
				if ( isSearchItemWithinParentNode(parentNodeObj, searchItemObj) ) {
					searchItemObj.m_ParentNode = parentNodeObj.m_NodeID;
					if ( searchItemObj.m_Score >= scoreDisplayMinimum ) {
						parentNodeObj.m_SearchItems[di++] = searchItemObj;
					}
				}
			}
		}
		calculateScores(parentNodeObj);
	}
	
	// Loop through all the searchItems looking for the elements
	// that were not associated with any of the user specified 
	// parentNodes. For each unassociated searchItem, add it to the 
	// "Un-categorized" parentNode, which is always the last element
	// in parentNodes.
	parentNodeObj = parentNodes[parentNodes.length -1];
	di = 0;
	for (i = 0 ; i < searchItems.length ; i++) {
		searchItemObj = searchItems[i];
		if ( searchItemObj.m_ParentNode == 0 ) {
			if ( searchItemObj.m_Score >= scoreDisplayMinimum ) {
				parentNodeObj.m_SearchItems[di++] = searchItemObj;
			}
		}
	}
	calculateScores(parentNodeObj);
}

/////////////////////////////////////////////////////////////////////////////
// Function : isSearchItemWithinParentNode
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////					
function isSearchItemWithinParentNode(parentNodeObj, searchItemObj) {
	var targetNode = null;
	var childNode = null;
	
	targetNode = walkNode(g_navNode_Root, parentNodeObj.m_NodeID);
	if ( targetNode == null ) {
		return false;
	}
	
	childNode = walkNode(targetNode, searchItemObj.m_SectionID);
	if ( childNode == null ) {
		return false;
	}
	
	return true;
}

/////////////////////////////////////////////////////////////////////////////
// Function : sortParentNodes
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////					
function sortParentNodes(parentNodes) {
	var ds = new Array()
	var di = 0;
	var i = 0;
	var parentNodeObj = null;
	var newParentNodes = new Array();
	var elementNumber = 0;
	var score = 0;
	
	for (i = 0 ; i < parentNodes.length ; i++) {
		parentNodeObj = parentNodes[i];
		if ( parentNodeObj.m_AverageRevelancy > 0) {
			score = parseInt(parentNodeObj.m_AverageRevelancy * 10000000000);

			if ( parentNodeObj.m_AverageRevelancy < 1 ) {
				score = "0" + score;
			}

		} else {
			score = "00000000000";
		}
		ds[di++] = score + "~" + i;
	}
	ds = ds.sort();

	di = 0

	for (i = 0 ; i < ds.length ; i++) {
		elementNumber = ds[i].substring(ds[i].indexOf("~", 0)+1);
		newParentNodes[di++] = parentNodes[elementNumber];
	}

	return newParentNodes;

}

/////////////////////////////////////////////////////////////////////////////
// Function : buildResultsMessage
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////						
function buildResultsMessage(baseResultMessage, keywords, categoryLabel) {
	var ds = new Array()
	var di = 0;
	var resultsMessage = "";
		
	// Build results table
	resultsMessage = baseResultMessage.replace("<KEYWORDS>", "<strong><em>\"" + keywords + "\"</em></strong>");
							
	if ( categoryLabel != null ) {
		resultsMessage = resultsMessage.replace("<CATEGORY>", "<strong><em>" + categoryLabel + "</em></strong>");
	}
						
	ds[di++] = "<table width=100% cellspacing=0 cellpadding=0 align=left border=0>";
	ds[di++] = "<tr height=15 valign=bottom>";
	ds[di++] = "<td colspan=2>" + resultsMessage + "</TD>";
	ds[di++] = "</tr>";
	return ds.join('');
}

/////////////////////////////////////////////////////////////////////////////
// Function : removeParmValue
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////						
function removeParmValue(url, parmName) {
	var parmValue = "";
	var newUrl = "";
	
	parmValue = getParmValue(url, parmName);
	newUrl = url.replace("&" + parmName + "=" + parmValue,"");
	
	return newUrl;
}

/////////////////////////////////////////////////////////////////////////////
// Function : numberOfReturnedCategories
// Comments : 
//
/////////////////////////////////////////////////////////////////////////////						
function numberOfReturnedCategories(parentNodes) {
	var i = 0;
	var parentNodeObj = null;
	var categoryCount = 0;
	
	for (i = 0 ; i < parentNodes.length ; i++) {
		parentNodeObj = parentNodes[i];
		if ( parentNodeObj.m_SearchItems.length > 0 ) {
			categoryCount++;
		}
	}	
	
	return categoryCount;
}
