function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}
function GetCheckedIDs(sPrefix)
{
	return GetIDs(sPrefix, 1);
}
function GetUncheckedIDs(sPrefix)
{
	return GetIDs(sPrefix, 2);
}
function GetIDs(sPrefix, iCheck)
{
	//If 1 or TRUE is passed in - it returns all checked IDs.
	//If 0 FALSE is passed in - it returns ALL IDs for ALL Checkboxes.
	//If 2 is passed in - it returns all unchecked IDs
	//If the box is disabled - it is NOT returned in any count.
	iCheck = iCheck == true ? 1 : iCheck == false ? 0 : iCheck;
	var bCheck = iCheck == 1;
	var a = new Array();
	var iLen = sPrefix.length;
	var oInputs = document.getElementsByTagName("input");
	for (var i = 0;i < oInputs.length;i++) 
	{
		if (oInputs[i].id.substr(0, iLen) == sPrefix)
		{
			if (oInputs[i].disabled == false)
			{
				if (iCheck == 0 || oInputs[i].checked == bCheck)
					a.push(oInputs[i].id.substr(iLen));
			}		
		}
	}
	if (a.length > 0)
	{
			var s = a.join(',');
			return s;
	}
	return "";
}

function CompareDates(sStartDate, sEndDate)
{
	var dtStartDate	= new Date(sStartDate)
	var dtEndDate	= new Date(sEndDate)
	
	return (dtEndDate < dtStartDate);
}
function ValidateDate(sDate)
{
	var regDate = /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/;
	var regDate98 = /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2})$/;
	var bDate, bDate98;
	bDate = false;
	bDate98 = false;
	
	if (regDate.test(sDate))
		bDate = true;
		
	if (regDate98.test(sDate))
		bDate98 = true;
	
	if (!bDate && !bDate98)
		return false;
		
	if (bDate)
		var arrDate = regDate.exec(sDate);
	else if (bDate98)
		var arrDate = regDate98.exec(sDate);
	
	var month = arrDate[1];
	var day = arrDate[2];
	var year = arrDate[3];
	
	if (bDate98)
	{
		var dte98 = new Date(month + "/" + day + "/" + year);
		year = dte98.getFullYear();
	}
	
	if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1000)
		return false;
		
	switch (parseInt(month))
	{
		case 2:
			var days = (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28);

			if (day > days)
				return false;

			break;
		case 4:
		case 6:
		case 9:
		case 11:
			if (day > 30)
				return false;
	}

	return true;
}

function IsEmpty(oCtl)
{
	var sTemp = new String(oCtl.value);
	for (var i = 0; i < sTemp.length; i++)
	{
		if (sTemp.substr(i, 1) != ' ')
		{
			return false;
		}
	}
	oCtl.value = '';
	return true;
}
function ValidateNumeric(oElement)
{
	var sValue = String(oElement.value).replace(/\,/g,'');
	if (sValue.length > 0 && isNaN(sValue))
		return false;

	return true;
}
function ValidateNumericPositive(oElement)
{
	var sValue = String(oElement.value).replace(/\,/g,'');
	if (sValue.length > 0 && isNaN(sValue))
		return false;
	if (parseInt(sValue) < 0)
	    return false;

	return true;
}
function ValidateMoney(oElement) 
{
	var str = Trim(oElement.value);
	return RegExp(/^\$?[0-9\,]+(\.\d{2})?$/).test(String(str).replace(/^\s+|\s+$/g, ""));
}
function checkPhone(sVal)
{
	if (String(sVal).length == 0)
		return true;
	var oRegEx = /^\d{3}-\d{3}-\d{4}$/;

	//var oRegEx = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,3})|(\(?\d{2,3}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext) ?\d{1,5}){0,1}$/;
	var aMatch = String(sVal).match(oRegEx);

	return (aMatch != null)
}

function DisplayMessage(oCtl, sMsg)
{
	alert(sMsg);
	oCtl.focus();
}

function Trim(str)
{
	return TrimLeft(TrimRight(str));
}

function TrimLeft(sText)
{
	sText = ('' + sText == 'undefined') ? '' : '' + sText;

	while (sText.charAt(0) == ' ')
	{
		sText = sText.substr(1);
	}

	return sText;
}

function TrimRight(sText)
{
	sText = ('' + sText == 'undefined') ? '' : '' + sText;

	while (sText.charAt(sText.length - 1) == ' ')
	{
		sText = sText.substr(0, sText.length - 1);
	}

	return sText;
}
function checkPhoneArea(strVal)
{
	return checkDigits(strVal, 3);
}

function checkZipDigits(strVal)
{
	return checkDigits(strVal, 5);
}
function checkDigits(sVal, iNumDigits)
{
	if (String(sVal).length == 0)
		return true;

	if (iNumDigits == null)
		iNumDigits = String(sVal).length;

	var sRegEx = '^\\d{' + iNumDigits + '}$';
	var oRegEx = new RegExp(sRegEx);

	return oRegEx.test(sVal);
}
function ValidEmail(sEmail)
{
	var re=/([a-zA-Z0-9_\-`~!#$%^&*+='|?])+(\.[a-zA-Z0-9_\-`~!#$%^&*+='|?]+)*\@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)+/;
	var bOK = re.exec(sEmail);
	if (!bOK)
		return false;
	return (bOK[0].length == sEmail.length);
}
