/**
 * Library to interface with search.sun.com for the HCL.
 *
 * This library utilizes APIs from global sun.com 'sniff.js' for some DOM processing and others.
 * Must be included before this library is loaded.
 *
 * Contact: Robert B. Weeks (robert.weeks@sun.com)
 */

// Global specific for number of returns
var baResultsNumberOfReturns = 30;

function submitHCLQuery(startNumber) {
	var resultBlock = getDocObject('hclSearchResults');
	var hclForm = getDocObject('ba_hcl_form');

	var queryAppend = "";
	var queryURL = "/cgi-bin/sun/bigadmin/initHCLSearch.cgi?col=bigadmin-hcl&getXml=true";
	var errorString = "<p class=\"error\">You must choose some criteria to complete the search.<\/p>";
	
	// Do we have a start number?
	if (startNumber != null) 
		queryURL += "&st=" + startNumber;
	
	if (typeof baResultsNumberOfReturns != "undefined" && baResultsNumberOfReturns != null)
		queryURL += "&nh=" + baResultsNumberOfReturns;
	
	// Build the query
	var hcl_entryType = getFormObject('hcl_entryType',hclForm);
	var hcl_entryTypeValue = hcl_entryType.options[hcl_entryType.options.selectedIndex].value;
	
	var hcl_mfg = getFormObject('hcl_mfg',hclForm).value;
	var hcl_model = getFormObject('hcl_model',hclForm).value;
	var hcl_cpuType = getFormObject('hcl_cpuType',hclForm).value;
	var hcl_chipset = getFormObject('hcl_chipset',hclForm).value;
	var qt = getFormObject('qt',hclForm).value;
	var hcl_techType = getFormObject('hcl_techType',hclForm);
	var hcl_techTypeValue = hcl_techType.options[hcl_techType.options.selectedIndex].value;
	var hcl_cardType = getFormObject('hcl_cardType',hclForm);
	var hcl_cardTypeValue = hcl_cardType.options[hcl_cardType.options.selectedIndex].value;
	
	if (hcl_entryTypeValue != '')
		queryAppend += "&hcl_entryType=" + hclParamEncode(hcl_entryTypeValue);
	if (hcl_model != '')
		queryAppend += "&hcl_model=" + hclParamEncode(hcl_model);
	if (hcl_cpuType != '')
		queryAppend += "&hcl_cpuType=" + hclParamEncode(hcl_cpuType);
	if (hcl_chipset != '')
		queryAppend += "&hcl_chipset=" + hclParamEncode(hcl_chipset);
	if (hcl_techTypeValue != '')
		queryAppend += "&hcl_techType=" + hclParamEncode(hcl_techTypeValue);
	if (hcl_cardTypeValue != '')
		queryAppend += "&hcl_cardType=" + hclParamEncode(hcl_cardTypeValue);
	if (hcl_mfg != '')
		queryAppend += "&hcl_mfg=" + hclParamEncode(hcl_mfg);
	if (qt != '')
		queryAppend += "&qt=" + hclParamEncode(qt);
	
	if ((escape(queryAppend).replace(/^\s+/g,'')) != "") {
		queryURL += queryAppend;
		makeHttpRequest(queryURL,'baHCLParseResult',true,resultBlock);
	} else {
		displayErrorMessage(resultBlock,errorString);
		resultBlock.style.display = "block";
	}
}

function baHCLResultText(responseXML) {
	var contents = getDocObject('hclSearchResults');
	contents.innerHTML = responseXML;	
}

function hclParamEncode(sStr) {
	return escape(sStr).replace(/\\/g, '%5C').replace(/\//g, '%2F').replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27');
}

function baHCLParseResult(responseXML) {
	var introString = "BigAdmin - HCL:";
	var introStringAlt = "Sun Microsystems - BigAdmin - HCL:";
	var resultOut = "";
	var searchResults = responseXML.getElementsByTagName("results")[0];
	var currentCount;
	var splitCount;

	// Clear the HTML list used to display the contents
	var contents = getDocObject('hclSearchResults');
	contents.innerHTML = "";	
	
	// The count, the start and the end
	var count = searchResults.getElementsByTagName("count")[0].firstChild.nodeValue;
	var begin;
	var end;
	
	var results = searchResults.getElementsByTagName("result");
	if (results.length > 0) {
		begin = searchResults.getElementsByTagName("begin")[0].firstChild.nodeValue;
		end = searchResults.getElementsByTagName("end")[0].firstChild.nodeValue;
		resultOut += baHCLResultsPagination(count,begin,end);
		resultOut += "<div style=\"border:1px solid #aaa;padding:10px;\"><b class=\"small\">Search Results</b>";
		
		currentCount = begin;
		resultOut += '<p><table border="0" width="100%" cellspacing="0" cellpadding="6">';
		resultOut += '<tr><td valign="top" width="50%">';
		resultOut += "<ol>";
		for (var I = 0 ; I < results.length ; I++) {
			var result = results[I];
			var title = result.getElementsByTagName("title")[0].firstChild.nodeValue;
			var description = result.getElementsByTagName("description")[0].firstChild.nodeValue;
			var date = result.getElementsByTagName("date")[0].firstChild.nodeValue;
			var url = result.getElementsByTagName("url")[0].firstChild.nodeValue;
			var displayTitle = title;
			
			if (title.indexOf(introStringAlt) != -1) {
				displayTitle = title.substring(introStringAlt.length);
			} else if (title.indexOf(introString) != -1) {
				displayTitle = title.substring(introString.length);
			}
			
			resultOut += "<li value=\"" + currentCount + "\"><a href=\"" + url + "\" target=\"blog_window\">" + displayTitle + "</a></li> \n";
			currentCount++;
			
			// Figure out the split count
			if (parseInt(end) < baResultsNumberOfReturns)
				splitCount = parseInt(end/2) + 1;
			else
				splitCount = parseInt(((parseInt(end)) - (baResultsNumberOfReturns/2))) + 1;

			if (currentCount == splitCount) {
				resultOut += '</ol></td><td valign="top" width="50%"><ol>';
			}
		}
		resultOut += "</ol>";
	} else {
		resultOut += "<b class=\"small\">There were no results</b>";
	}
	resultOut += '</td></tr></table></p></div>';
	
	// Set the display
	contents.innerHTML = resultOut;
	contents.style.display = "block";
}

function baHCLResultsPagination(count,begin,end) {
	var returnString = "";
	var totalCount;
	var beginIndex;
	var endIndex;
	var nextIndex;
	var prevIndex;
	
	// Message the count
	count = count.replace(",","");
	begin = begin.replace(",","");
	end = end.replace(",","");
	
	// And parse it out
	totalCount = parseInt(count);
	beginIndex = parseInt(begin);
	endIndex = parseInt(end);
	
	returnString += '<div style="float:right;padding:10px;">';
	if (beginIndex > baResultsNumberOfReturns) {
		prevIndex = beginIndex - baResultsNumberOfReturns;
		returnString += '<a class="small" href="#" onClick="submitHCLQuery(' + prevIndex + ');return false;">Previous&nbsp;<span class="rightarrowblue">&laquo;</span>&nbsp;</a>&nbsp;|&nbsp;';
	}
	returnString += "<span style=\"font-size:small;\">(" + begin + " - " + end + ") of <b class=\"small\">" + totalCount + "</b></span>";
	if (endIndex < totalCount) {
		nextIndex = endIndex;
		nextIndex++;
		returnString += '&nbsp;|&nbsp;<a class="small" href="#" onClick="submitHCLQuery(' + nextIndex + ');return false;"><span class="rightarrowblue">&raquo;</span>&nbsp;Next</a>';
	}
	returnString += '</div>';
	return returnString;
}
