//<script>

var xmlTemplates = null;
var xmlSearches = null;

function init()
{
	Compat.addKeyHandler(document.body, "keydown", 13, sendQuery);			// call sendQuery() when Enter is pressed
	//initCombos();
	//document.getElementById("sortField").selectedIndex = 0;
	initSearches();
}

function initSearches()
{
	if (document.readyState != "complete" || xmlSearches == null)
		return;
		
	//var queries = document.getElementById("savedQueries");
	//loadQueriesList(queries);
	//queries.onchange = function() { loadQuery(queries.value); queries.selectedIndex = 0; }	
}

function onLoginRequired()
{
	var oTopbar = Compat.getFrame("topbar");
	if (oTopbar.isResultListProtected())
	{
		alert(MSG_LOGIN_FIRST);
		q.showLogin("search", true);
	}
}

function createQuery()
{
	var q = new NetisQuery();
	var topbar = Compat.getFrame("topbar");
	topbar.initQuery("results", q);
	q.newSearch();
	return q;
}

function loadQuery(terms)
{
	if (terms == null || terms == "")
		return;
	
	var qTemp = createQuery();
	terms = terms.replace(/^<query><queryDef[^>]*>/, "");
	terms = terms.replace(/<\/queryDef><\/query>$/, "");
	qTemp.terms = terms;
	
	// Excerpt parameters
	var oComboHighlight = document.getElementById("documentExcerpt");
	var iSelected = oComboHighlight.selectedIndex;
	qTemp.hl = oComboHighlight[iSelected].value;
	// Template parameters
	qTemp.resultsPerPage = document.getElementById("recordPerPage").value;
	qTemp.template = document.getElementById("CBTemplates").value;
	qTemp.sortBy(document.getElementById("sortField").value, document.getElementById("sortOrder").value);
	
	qTemp.showResultsDRM();
	if (qTemp.resultsCount > 0)
		Compat.getFrame("topbar").setResultListTab();
}

function loadQueriesList(savedQueries)
{
	try
	{
		savedQueries.options.length = 0;
		savedQueries.options.add(new Option("Choose saved query", ""));
		var doc = xmlSearches.responseXML;
		var root = doc.documentElement;
		switch (root.tagName)
		{
			case "root":
				break;
			case "login":
				onLoginRequired();
				return;
				break;
			case "error":
				alert(root.text);
				return;
				break;
			default:
				alert(root.xml);
				return;
		}
		var oSearchFields = root.selectNodes("/root/item");
		var numSearches = oSearchFields.length;
		for (var i = 0; i < numSearches; i++)
		{
			var o = oSearchFields.item(i);
			var sDescription = o.getAttribute("Description");
			var sQueryTerm = o.getAttribute("QueryTerm");
			savedQueries.options.add(new Option(sDescription, sQueryTerm));
		}		
	}
	catch(e) {
		alert(e.description);
	}
}

function onSearchesLoaded(doc)
{
	xmlSearches = doc;
	initSearches();
}

function onTemplatesLoaded(doc)
{
	xmlTemplates = doc;
	//initCombos();
}

function prepareQuery()
{
	q.newSearch();
    var oForm = document.getElementById(sFormSelected);
	var textFields = oForm.elements;
	for (var i = 0; i < textFields.length; ++i)
	{
		textField = textFields.item(i);
		var fieldName = textField.getAttribute("field");
		if (fieldName != null)
			q.addTerm(fieldName, textField.value, textField.getAttribute("flags"));
	}

	if (q.terms.length == 0)
		throw "Please enter search term(s)";

    q.addTerm("type",sFormSelected);
    q.sortBy(textFields.item(0).id, 1);
	q.template = sFormSelected.toLowerCase();		
}

var bIgnore = false;

function sendQuery(evt)
{
	evt = Compat.getEvent(evt);
	evt.stopPropagation();
	evt.preventDefault();
	if (!bIgnore)
	{
		bIgnore = true;
		doSendQuery();
		bIgnore = false;
	}
}

function doSendQuery()
{
	try
	{
		prepareQuery();
		var oTopbar = Compat.getFrame("topbar");
		if (!oTopbar)
		{
			q.showResultsDRM();
			return;
		}		
		// Get the NetisQuery object properly initialized for search.
		var qTemp = createQuery();
		qTemp.copyFrom(q, searchSettings + resultSettings);
		if (oTopbar.isResultListProtected() && !oTopbar.isLoggedIn())
		{
			oTopbar.showLogin("search", false);
		}
		else
		{
			qTemp.showResultsDRM();
			if (qTemp.resultsCount > 0)
				oTopbar.setResultListTab();
		}
	}
	catch (error) {
		alert(error.toString());
	}
}

function initCombos()
{
	if (document.readyState != "complete" || xmlTemplates == null)
		return;

	var CBTemplates = document.getElementById("CBTemplates");
	var sortField = document.getElementById("sortField");

	loadTemplateList(CBTemplates);
	// select the right template before loading sort fields
	if (q.template.length)
		CBTemplates.value = q.template;

	// otherwise select the first template
	if (CBTemplates.selectedIndex < 0)
		CBTemplates.selectedIndex = 0;

	var templateName = CBTemplates.value;
	loadSortList(sortField, templateName);

	// Reload sort field combo depending on current template
	CBTemplates.onchange = function() { loadSortList(sortField, CBTemplates.value); }
	
	sortField.value = q.sortField;
	setSortImage(document.getElementById("sortOrder"), q.sortOrder);
	document.getElementById("recordPerPage").value = q.resultsPerPage;
	
	//init doc excerpt combo
	var oDocumentExcerpt = document.getElementById("documentExcerpt");
	oDocumentExcerpt.selectedIndex = 0;
	if(q.hl == 1)
		for (var i=0;  i<oDocumentExcerpt.length; i++)
			if(oDocumentExcerpt[i].value == q.queryType)
			{
				oDocumentExcerpt.selectedIndex = i;
				break;
			}			
}

function loadTemplateList(oCBTemplates)
{
	try{
			
		var oTemplateFields = xmlTemplates.selectNodes("/templates/template");
		var numTemplates = oTemplateFields.length;
		oCBTemplates.options.length = 0;			// empty list first
		if (numTemplates == 0)			// return Default if no templates
			oCBTemplates.options.add(new Option("Default", "Default"));
		else
			for (var i = 0; i < numTemplates; i++) {
				var o = oTemplateFields.item(i);
				var sName = o.getAttribute("name");
				var sTitle = o.getAttribute("title");
				if (sTitle == null || sTitle == "")
					sTitle = sName;
				oCBTemplates.options.add(new Option(sTitle, sName));
			}
	}
	catch(e) {
		alert(e.description);
	}
}

function loadSortList(oCBSortFields, templateName)
{
	try {	
		var oTemplateFields = xmlTemplates.selectNodes("/templates/template[@name = '" + templateName + "']/field");
		oCBSortFields.options.length = 0;			// empty list first
		for (var i = 0; i < oTemplateFields.length; i++) {
			var oField = oTemplateFields.item(i);
			var sFieldSortable = oField.getAttribute("sortable");
			// Add only fields that are sortable
			if (sFieldSortable == 0)
				continue;
			// If sort field is specified explicitly, use it
			var sFieldName = oField.getAttribute("sort");
			if (sFieldName == null)
				// Otherwise, sort by the field itself.
				sFieldName = oField.getAttribute("name");
			var sFieldTitle = oField.getAttribute("title");
			oCBSortFields.options.add(new Option(sFieldTitle, sFieldName));
		}
	}	
	catch(e) {
		alert(e.description);
	}
}

function openDictionary(sFieldName, sFieldTitle, bNumeric)
{
	var sStart = (bNumeric) ? "0" : "a";
	var sType = (bNumeric) ? "num" : "text";
	var oParams = {
		dbID : q.dbID,
		field : sFieldName,
		title : sFieldTitle,
		type : sType,
		firstLetter : sStart
	};
	var ar = new Array();
	Compat.for_each(oParams, function(key, value) { ar.push(key + "=" + value); });
	var sParams = ar.join("&");
	var oInput = document.getElementById(sFieldName);
	var features = Compat.fixDialogSize({ height: 345, width: 502, heightIE7: 360, heightIE: 390 });
	
	Compat.showModalDialog("NetisUtils/srvrutil_dictionary.aspx?" + sParams, oInput, features);
}

function openProximity(sFieldName)
{
	var oInput = document.getElementById(sFieldName);
	Compat.showModalDialog("NetisUtils/clntutil_proximity.html", oInput, { height: 220, width: 400 });
}

function open_yearRange(sFieldName)
{		
	var oInput = document.getElementById(sFieldName);
	Compat.showModalDialog("yearRange.html", oInput, { height: 150, width: 300 });
}
