function getChildOfName(inNode,inName)
{
	if (inNode === null)
		return (null);

	for (inNode = inNode.firstChild; inNode != null; inNode = inNode.nextSibling)
	{
		if (inNode.tagName == inName)
			return (inNode);
	}

	return (null);
}


function compareInnerText(inFunction)
{
	return (function(inArg1,inArg2)
		{
			return (inFunction(inArg1.innerText,inArg2.innerText));
		});
}


function compareArrayElements(inIndex,inFunction)
{
	return (function(inArg1,inArg2)
		{
			return (inFunction(inArg1[inIndex],inArg2[inIndex]));
		});
}


function compareDescending(inFunction)
{
	return (function(inArg1,inArg2)
		{
			return (inFunction(inArg2,inArg1));
		});
}


function compareNumericConversion(inFunction)
{
	return (function (inArg1,inArg2)
		{
			return (inFunction(parseFloat(inArg1),parseFloat(inArg2)));
		});
}


function compareFirstChild(inFunction)
{
	return (function (inArg1,inArg2)
		{
			return (inFunction(inArg1.firstChild,inArg2.firstChild));
		});
}


function compareFirstChildOfName(inName,inFunction)
{
	return (function (inArg1,inArg2)
		{
			var theChild1;
			var theChild2;

			theChild1 = getChildOfName(inArg1,inName);
			theChild2 = getChildOfName(inArg2,inName);
			if (theChild1 === theChild2)
				return (0);
			if (theChild1 === null)
				return (-1);
			if (theChild2 === null)
				return (1);
			return (inFunction(theChild1,theChild2));
		});
}


function compareAttribute(inAttributeName,inFunction)
{
	return (function (inArg1,inArg2)
		{
			return (inFunction(inArg1.getAttribute(inAttributeName),inArg2.getAttribute(inAttributeName)));
		});
}


function compareStringReplace(inRegex,inReplacement,inFunction)
{
	return (function (inArg1,inArg2)
		{
			return (inFunction(inArg1.replace(inRegex,inReplacement),inArg2.replace(inRegex,inReplacement)));
		});
}


function compareValues(inLeft,inRight)
{
	if (inLeft == inRight)
		return (0);
	if (inLeft < inRight)
		return (-1);
	return (1);
}

/* used to compare <TR> elements */
function compareRowElements(inIndex,inFunction)
{
	return (function(inArg1,inArg2)
		{
			return (inFunction(inArg1[0].cells[inIndex],inArg2[0].cells[inIndex]));
		});
}
function compareIssueDateConversion(inFunction)
{
	return (function (inArg1,inArg2)
		{
			return (inFunction(convertIssueDateToString(inArg1),convertIssueDateToString(inArg2)));
		});
}

/* handles dates in the MM/YYYY format */
function convertIssueDateToString(inIssueDate) {
	return (inIssueDate.substring(3) + inIssueDate.substring(0,3))
}


function compareUpperConversion(inFunction) {
	return (function (inArg1,inArg2)
		{
			return (inFunction(inArg1.toString().toUpperCase(),inArg2.toString().toUpperCase()));
		});
}
