//<script>

var xmlTemplates = null;
var xmlSearches = null;

function init()
{
	Compat.addKeyHandler(document.body, "keydown", 13, sendQuery);	
	initCombos();
	// fill CreditCard Expiration Years combo box with the next 10 years
	try{loadComboYears("publishedYear");}catch(e){}
	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); }	
}

function onLoginRequired()
{
	var oTopbar = Compat.getFrame("topbar");
	if (oTopbar.isResultListProtected())
	{
		alert(MSG_LOGIN_FIRST);
		q.showLogin("search", false);
	}
}

function createQuery()
{
	var q = new NetisQuery();
	var topbar = Compat.getFrame("topbar");
	return topbar.initQuery("results", q);
}

function loadQuery(terms)
{
	if (terms == null || terms == "")
		return;
	
	var q = createQuery();
	terms = terms.replace(/^<query><queryDef[^>]*>/, "");
	terms = terms.replace(/<\/queryDef><\/query>$/, "");
	q.terms = terms;
	
	// Excerpt parameters
	var oComboHighlight = document.getElementById("documentExcerpt");
	var iSelected = oComboHighlight.selectedIndex;
	q.hl = oComboHighlight[iSelected].value;
	// Template parameters
	q.resultsPerPage = document.getElementById("recordPerPage").value;
	q.template = document.getElementById("CBTemplates").value;
	q.sortBy(document.getElementById("sortField").value, document.getElementById("sortOrder").value);
	
	q.showResultsDRM();
	if (q.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 getPubDate()
{
	var month = document.getElementById("publishedMonth").value;
	var year = document.getElementById("publishedYear").value;
	if (month == "" && year != "")
		throw getMsg("To search by implementation date, you must specify both month and year");
	if (year == "" && month != "")
		throw getMsg("To search by implementation date, you must specify both month and year");
	if (month != "" && year != "")
		return month + "/" + year;
	else
		return "";
}

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 = 1;
	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 isOneOf(arValues, value)
{
	for (var i in arValues)
		if (arValues[i]==value)
			return true;
	return false;
}

function openDictionary(sFieldName, sFieldTitle, bNumeric)
{
	var sStart = (bNumeric) ? "0" : "a";
	var sType = (bNumeric) ? "num" : "text";
	var oInput = document.getElementById(sFieldName);
	if (sFieldName == "CorrectionDate")
		sStart = "";
	var multiLangFields = ["Title", "sectiontitle", "subsectiontitle", "CorrectionDate", "MolecularWeight"];
	if (isOneOf(multiLangFields, sFieldName))
	{
		var sLang = document.getElementById("language").value;
		if (sLang != "")
			sFieldName += "_" + sLang;
	}
	var oParams = {
		dbID : q.dbID,
		field : sFieldName,
		title : encodeURIComponent(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 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: 230, width: 400 });
}

function loadComboYears(cbName)
{
	try{
		var oOption;
		var sDate = new Date();
		// Lets go back 2 years
		var sYear = sDate.getFullYear() - 1;
		var shortYear;
		// add first empty line to CB
		oOption = document.createElement("option");
		oOption.text = getMsg("Year");
		oOption.value = "";	
		document.getElementById(cbName).options.add(oOption);
			
		// now, lets add 3 years in the past & future
		for (var i = 0; i < 3; ++i)
		{
			oOption = document.createElement("option");
			oOption.text = sYear;
			oOption.value = sYear;
			document.getElementById(cbName).options.add(oOption);
			sYear++;
		}
	}catch(e){}
}

function getMolecularWeight()
{
	var state = document.getElementById("weighttype").value;
	var from = document.getElementById("MolecularWeightFrom").value;
	var to = document.getElementById("MolecularWeightTo").value;
	if (from == "")
	{
		if (state == "3" && to != "")	// If Range and 'To' is not empty
			;							// allow 'From' to be empty
		else
			return "";
	}
			
	switch (state)
	{
		case "0"://=
			return from;
		case "1"://<
			return "-" + from;
		case "2"://>
			return from + "-";
		case "3":// Range
			return from + "-" + to;
	}
}

