//checks for completed entries
function ckComplete(arCtls, arDesc)
{
	var idx;
	var sErr = '';
	var oReturnFocus;
	
	//check for completion
	for (idx = 0; idx < arCtls.length; idx++)
	{
		if (arCtls[idx].value == '')
		{
			//set the item to return focus to
			if (!oReturnFocus) oReturnFocus = arCtls[idx];
			//compile the error string
			sErr +=	'       \'' + arDesc[idx] + '\'\n';
		}
	}
	
	//if we encountered a completion error, notify the user
	if (sErr != '')
	{
		alert("The following fields need to be completed\nbefore the form can be submitted:\n\n" + sErr);
		oReturnFocus.focus();		
		oReturnFocus.select();
		return false;
	}
	
	return true;
}

//make sure a description field is not too long
function ckDescr(oTxtArea, iLen)
{
	return ckLen(oTxtArea, iLen, 'description');
}

//make sure a description field is not too long
function ckLen(oTxt, iLen, sLabel)
{
	if (oTxt.value.length > iLen)
	{
		alert('The ' + sLabel + ' cannot be longer than ' + iLen + ' characters!');
		oTxt.focus();
		return false;
	}
	
	return true;
}

//confirms deletion
function jsConfirmDelete(sName)
{
	return confirm("Are you sure you want to delete this " + sName + "?");
}

//confirms deletion
function jsConfirmDeletePl(sName)
{
	return confirm("Are you sure you want to delete these " + sName + "?");
}

//checks for at least one selection in a multi-select list
function ckCompleteSelect(arCtls, arDesc)
{
	var idx;
	var sErr = '';
	
	//check for completion
	for (idx = 0; idx < arCtls.length; idx++)
	{
		if (arCtls[idx].selectedIndex == -1)
		{
			//compile the error string
			sErr +=	'       \'' + arDesc[idx] + '\'\n'
		}
	}
	
	//if we encountered a completion error, notify the user
	if (sErr != '')
	{
		alert("You must select at least one item from each of the following\npick lists before you can continue:\n\n" + sErr);
		return false;
	}
	
	return true;
}


//use regular expressions to validate an email address
function ckEmail(strEmail)
{
	//this function valid only for browsers that support regular expressions
	var str = strEmail;
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
	// valid
	if (!reg1.test(str) && reg2.test(str))
	{
		// if syntax is valid
		return true;
	}
  return false;
}

// verify valid date 
function isValidDate(varDate) 
{
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
	var matchArray = varDate.match(datePat);
	if (matchArray == null)
	{
		return false;
	}
	
	var varMonth = matchArray[1];
	var varDay = matchArray[3];
	var varYear = matchArray[4];
	if (varMonth < 1 || varMonth > 12)
	{
		return false;
	}
	if (varDay < 1 || varDay > 31) 	
	{
		return false;
	}
	if ((varMonth == 4 || varMonth == 6 || varMonth == 9 || varMonth == 11) && varDay == 31) 
	{
		return false;
	}
	if (varMonth == 2) 
	{
		var isleap = (varYear % 4 == 0 && (varYear % 100 != 0 || varYear % 400 == 0));
		if (varDay > 29 || (varDay == 29 && isleap == false)) 
		{
			return false;
		}
	}
	return true;
}

function isNumeric(sInput) {
	var sValidChars = "0123456789.-";
	var sChar;
	var bResult = true;

	if (sInput.length == 0) return false;

   // test strString consists of valid characters listed above
	for (var i = 0; i < sInput.length; i++) {
		sChar = sInput.charAt(i);
		if (sValidChars.indexOf(sChar) == -1) {
			return false;
		}
	}
	return true;
}

