// <script language="JavaScript" src="../code/searchLogic.js"></script>

function parseSelectionList(list)
{
	var i, query , count;

	if (list.selectedIndex == -1)
		query = "";
	else
	{
		query = new Array();

		for (i = 0, count = 0; i < list.length; i++)
			if (list.options[i].selected) 
			{
				query[count] = list.options[i].value;
				nullQuery = false;
				count++;
			}
	}

	return(query);
}

function numSort(a, b)
{
	return(a - b);
}

function bSearch(index, m, n, searchItem, separator)
{
	var i, l, r, more, match, indexWord;

	l = m;
	r = n;
	match = false;
	more = true;

	while (more)
	{
		i = Math.floor((l + r)/2);
		indexWord = stripString(index[i].split(separator)[0]);
		match = searchItem == indexWord;

		if (searchItem < indexWord)
			r = i - 1;
		else
			l = i + 1;

		more = !(match || l > r); 
	}

	return((match) ? i : -1);
}

function bnSearch(a, b)
{
	var i, l, r, more, match;

	l = 0;
	r = a.length - 1;
	match = false;
	more = true;

	while (more)
	{
		i = Math.floor((l + r)/2);
		match = b == a[i];

		if (b < a[i])
			r = i - 1;
		else
			l = i + 1;

		more = !(match || l > r); 
	}

	return((match) ? i : -1);
}

function intersect(a, b)
{
	var i, k, c;

	if (a == "" && b == "")
		return("");
	else if (a == "")
		return(b);
	else if (b == "")
		return(a);
	else
	{
		c = new Array();

		if (a.length < b.length)
		{
			for (i = 0, k = 0; i < a.length; i++)
				if (bnSearch(b, a[i]) != -1)
				{
					c[k] = a[i];
					k++;
				}
		}
		else
		{
			for (i = 0, k = 0; i < b.length; i++)
				if (bnSearch(a, b[i]) != -1)
				{
					c[k] = b[i];
					k++;
				}
		}

		return((k == 0) ? "" : c);
	}
}

function join(a, b, c)
{
	var i, z;

	if (a == "" && b == "" && c == "")
		return("");
	else if (b == "" && c == "")
		return(a);
	else if (a == "" && c == "")
		return(b);
	else if (a == "" && b == "")
		return(c);
	else if (a == "")
		return(intersect(b, c));
	else if (b == "")
		return(intersect(a, c));
	else if (c == "")
		return(intersect(a, b));
	else
		return(intersect(intersect(a, b), c));
}

function matchQueryAnd(qWord, index)
{
	var i, j, h, hh, record, recNo;

	if (qWord == "")
		return("");
	else
	{
		for (i = 0; i < qWord.length; i++)
		{
			recNo = bSearch(index, 0, index.length - 2, qWord[i], ",");

			if (recNo == -1)
				return(-1);
			else
			{ 
				hh = new Array();
				record = index[recNo].split(",");
				for (j = 1; j < record.length; j++) hh[j - 1] = parseInt(record[j]);
				hh = hh.sort(numSort);
				h = (i == 0) ? hh : intersect(h, hh);
				if (h == "") return(-1);
			}
		}

		return(h);
	}
}

function matchQueryOr(qWord, index)
{
	var i, j, k, record, recNo;

	h = "";

	if (qWord != "")
	{
		h = new Array();

		for (i = 0, k = 0; i < qWord.length; i++)
		{
			recNo = bSearch(index, 0, index.length - 2, qWord[i], ",");

			if (recNo != -1)
			{ 
				record = index[recNo].split(",");
				for (j = 1; j < record.length; j++, k++) h[k] = parseInt(record[j]);
			}
		}
	}

	return(h);
}

function mergeRecList(h)
{
	var i, k, hh, record, recNo;

	hh = "";

	if (h != "")
	{
		hh = new Array();
		hh[0] = h[0];

		for (i = 1, k = 0; i < h.length; i++)
			if (h[i] > hh[k])
			{ 
				k++;
				hh[k] = h[i];
			}
	}

	return(hh);
}
