var m_timerID = 0;
var m_bSearchPending = 0;
var m_bRequestValid = 0;

/////////////////////////////////////////////////////////////
// GLOBAL - This is a global keypress handler for any pages
// using this script. It intercepts key presses and returns
// a false result if the user presses return in a text box.
// This prevents the return key from submitting ajax forms.
function checkCR(evt) {
  var evt  = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text")) {return false;}
}
document.onkeypress = checkCR;


/////////////////////////////////////////////////////////////
// INIT - Set the global objects which we use throughout the
// life of this search. 
/////////////////////////////////////////////////////////////
var m_sTarget = '';
var m_sStatus = '';
var m_sComplete = '';
var m_sSearch = '';
var m_sFormat = '';
var m_nLimit = '';

function init(sTarget, sStatus, sComplete, sFormat, nLimit)
{
	m_sTarget = sTarget;
	m_sStatus = sStatus;
	m_sComplete = sComplete;
	m_sFormat = sFormat;
	m_nLimit = nLimit;
}



/////////////////////////////////////////////////////////////
// FORMAT - Set this to control the look and feel of the
// article results.
/////////////////////////////////////////////////////////////
function getFormat()
{
	// Option to provide a gui control over the format.
	var vxElements = document.getElementsByName("element_format");
	for (var i=0; i<vxElements.length; i++)
	{
		if (vxElements[i].checked) {
			return(vxElements[i].value);
		}
	}

	// No score, default to the default format
	return(m_sFormat);
}


/////////////////////////////////////////////////////////////
// LIMIT - Articles per page
/////////////////////////////////////////////////////////////
function getLimit()
{
	// Option to provide a gui control over the format.
	var vxElements = document.getElementsByName("element_limit");
	for (var i=0; i<vxElements.length; i++)
	{
		if (vxElements[i].checked) {
			return(vxElements[i].value);
		}
	}

	// No score, default to the default format
	return(m_nLimit);
}

/////////////////////////////////////////////////////////////
// FILTER - Constructs a pipe delimited list of filter
// options from the tagged checkboxes.
/////////////////////////////////////////////////////////////
function getFilter()
{
	var sList = new Array();	

	var vxElements = document.getElementsByName("element_filter");
	for (var i=0; i<vxElements.length; i++)
	{
		if (vxElements[i].checked) {
			sList.push(vxElements[i].value);
		}
	}
	return(sList.join("|"));
}



/////////////////////////////////////////////////////////////
// Search Triggers - Either of these can be used to trigger
// a search using the timer driven ajax search caller.
/////////////////////////////////////////////////////////////
function wordSearch(sSearch)
{
	m_sSearch = sSearch || document.email.body.value;
	doSearch();
}

function doSearch()
{
	m_bSearchPending = 1;
	updatePage();
}



/////////////////////////////////////////////////////////////
// Searching - Timer driven to limit requests
/////////////////////////////////////////////////////////////
function updatePage()
{
	if (m_bRequestValid == 0) {

		AjaxRequest.get(
			{
				'url':'/cgi-bin/publ/ajaxKbase.cgi',
				'parameters':{ 'search':m_sSearch, 'format':getFormat(), 'filter':getFilter(), 'limit':getLimit()  },
			    'onLoading':function(req){ 
					if (m_sStatus) {
						document.getElementById(m_sStatus).innerHTML = 'Fetching Articles from Server';
					}
				},
				'onSuccess':function(req){ 
					if (m_sStatus) {
						document.getElementById(m_sStatus).innerHTML = m_sComplete;
					}
					if (m_sTarget) {
						document.getElementById(m_sTarget).innerHTML = req.responseText; 
					}
					m_timerID = setTimeout("UpdateTimer()", 500)
				}
			}
		);

		m_bRequestValid = 1;
		m_bSearchPending = 0;
    }
	return true;
}

function UpdateTimer()
{
	if (m_timerID) {
		clearTimeout(m_timerID);
		m_timerID = 0;

		m_bRequestValid = 0;
		
		if (m_bSearchPending) {
			updatePage();
		}
	}
	return true;
}



/////////////////////////////////////////////////////////////
// VOTE - Unrelated standalone article rating call
/////////////////////////////////////////////////////////////
function voteArticle(nArticleId, sVote) {
  AjaxRequest.get(
    {
      'url':'/cgi-bin/publ/ajaxKbase.cgi',
      'parameters':{ 'id':nArticleId, 'vote':sVote },
      'onLoading':function(req){ 
		  document.getElementById('xVote').innerHTML = 'Sending your vote...';
	   },
      'onSuccess':function(req){ 
		  document.getElementById('xVote').innerHTML = req.responseText; 
	   }
    }
  );
}


/////////////////////////////////////////////////////////////
// POLL - Unrelated standalone article poll
/////////////////////////////////////////////////////////////
function pollArticle(sVote) {
  AjaxRequest.get(
    {
      'url':'/cgi-bin/publ/ajaxKbase.cgi',
      'parameters':{ 'poll':sVote },
      'onLoading':function(req){ 
		  document.getElementById('poll').innerHTML = 'Sending your vote...';
	   },
      'onSuccess':function(req){ 
		  document.getElementById('poll').innerHTML = req.responseText; 
	   }
    }
  );
}
