
/*-------------------- BEGIN STRING FUNCTIONS ------------------------------------------------------------------------*/

function trim(inputString){
	if (typeof inputString != "string"){return inputString; }
		var retValue = inputString;
		var ch = retValue.substring(0, 1);
		while (ch == " "){
			retValue = retValue.substring(1, retValue.length);
			ch = retValue.substring(0, 1);
	}
	ch = retValue.substring(retValue.length-1, retValue.length);
	while (ch == " "){
		retValue = retValue.substring(0, retValue.length-1);
		ch = retValue.substring(retValue.length-1, retValue.length);
	}
	while (retValue.indexOf("  ") != -1){
		retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length);
	}
	return retValue;
}

/*Returns the right portion of an input string of length n.*/
function Right(str, n){
	if (n <= 0)
	   return "";
	else if (n > String(str).length)
	   return str;
	else {
	   var iLen = String(str).length;
	   return String(str).substring(iLen, iLen - n);
	}
}
/*-------------------- END STRING FUNCTIONS ------------------------------------------------------------------------*/


/*-------------------- BEGIN DHTML FUNCTIONS ------------------------------------------------------------------------*/
function displayWindow(url, width, height){
	var Win = window.open(url, "desiplaywindow", 'width=' + width + ',height=' + height + ',resizable=1,scrollbars=auto, menubar=no, location=no, directories=no, toolbar=no');
}

/********************* This function moves the cursor to the next field ******************************/
function phoneJump(objFieldValue, objFieldNext, intLength)
{
	if(objFieldValue.length == intLength)
		objFieldNext.focus();
}

function Hilite(name,over){
  	if(window.document.images) 
  	{
	  if (over)
		  window.document.images[name].src = "images/" + name + "a.gif";
	  else
		  window.document.images[name].src =  "images/" + name + ".gif";
  	}
}
/*-------------------- END DHTML FUNCTIONS ------------------------------------------------------------------------*/


/*-------------------- BEGIN DATE TIME FUNCTIONS ------------------------------------------------------------------*/
function CompareStartDateEndDate(startDate, endDate){
	if(startDate.value.indexOf('-') > 0){
		var arrStartDate = startDate.value.split('-')
	}

	else{
		var arrStartDate = startDate.value.split('/')
	}
	
	var dtStartMonth = parseInt(arrStartDate[0],10);
	var dtStartDay = parseInt(arrStartDate[1],10);
	var dtStartYear = parseInt(arrStartDate[2],10);
	
	if (dtStartYear <= 50 && dtStartYear >= 0){
		dtStartYear = 2000 + dtStartYear;
	}

	else if (dtStartYear > 50 && dtStartYear < 100){
		dtStartYear = 1900 + dtStartYear;
	}

	var dtStartDate = dtStartMonth + '/' + dtStartDay + '/' + dtStartYear
	startDate.value = dtStartDate

	if(endDate.value.indexOf('-') > 0){
		var arrEndDate = endDate.value.split('-')
	}

	else{
		var arrEndDate = endDate.value.split('/')
	}
	
	var dtEndMonth = parseInt(arrEndDate[0],10);
	var dtEndDay = parseInt(arrEndDate[1],10);
	var dtEndYear = parseInt(arrEndDate[2],10);

	if (dtEndYear <= 50 && dtEndYear >= 0){
		dtEndYear = 2000 + dtEndYear;
	}
	else if (dtEndYear > 50 && dtEndYear < 100){
		dtEndYear = 1900 + dtEndYear;
	}
	
	var dtEndDate = dtEndMonth + '/' + dtEndDay + '/' + dtEndYear
	endDate.value = dtEndDate
	
	if (dtStartYear > dtEndYear){
		alert("The End Date is not greater than the Start Date.\nPlease change one or the other.");
		return false;
	}
	else if(dtStartYear == dtEndYear){
		
		if(dtStartMonth > dtEndMonth){
			alert("The End Date is not greater than the Start Date.\nPlease change one or the other.");
			return false;
		}
		
		else if(dtStartMonth == dtEndMonth){
			
			if(dtStartDay >= dtEndDay){
				alert("The End Date is not greater than the Start Date.\nPlease change one or the other.");
				return false;
			}
		}
	}
	return true;
}

function isLeapYear (Year){
    if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)){
        return (true);
    }
    else {
        return (false);
    }
}

function IsDate(strValue){
	blnBad = false;
	strValid = "0123456789/-";
	blnDashes = false;
	blnSlashes = false;
	iNumSeperators = 0;
	strMonth = "";
	strDay = "";
	strYear = "";
	aDaysInMonths = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	
	if (strValue.length == 0)
		return true;
	else {
		//Test for valid characters
		for (var i=0; i < strValue.length; i++){
			cTest = strValue.substring(i, i+1);
			if (cTest == "/"){
				blnSlashes = true;
				iNumSeperators++;
			}
			else if (cTest == "-"){
				blnDashes = true;
				iNumSeperators++;
			}
				
			blnBad = (strValid.indexOf(cTest) < 0);
			if (blnBad) 
				break;
		}
		//There must be 2 Seperators, and they both must be the same character.
		
		// This line caught multiple seperators but didn't break
		// blnBad = (blnBad) && (iNumSeperators != 2);
		
		if (iNumSeperators != 2){return false }
		
		if ((blnSlashes && blnDashes) || (!blnSlashes && !blnDashes))
			blnBad = true;
		
		if (!blnBad){//Characters fall in valid set. Parse for individual values.
			cSeperator = "/";
			if (blnDashes)
				cSeperator = "-";
			cSection = "M";  //start with Month
			for (var i=0; i < strValue.length; i++){
				c = strValue.substring(i, i+1);
				if (c == cSeperator){
					if (cSection == "M")
						cSection = "D";
					else if (cSection == "D")
						cSection = "Y";
				}
				else {
					if (cSection == "M")
						strMonth += c;
					else if (cSection == "D")
						strDay += c;
					else if (cSection == "Y")
						strYear += c;
				}
			}
		}
		//Date values have been parsed.  Check that the values are proper length.
		blnBad = (strMonth.length != 2 && strMonth.length != 1) || (strDay.length != 2 && strDay.length != 1) || ((strYear.length != 2) && (strYear.length != 4));
			
		if (!blnBad){
			iMonth = parseInt(strMonth,10);
			iDay = parseInt(strDay,10);
			iYear = parseInt(strYear,10);
			
			//Convert a 2 digit year to 4 digits - 50 year window.
			if (strYear.length == 2){
			    var now = new Date();
			    iCurrentYear = now.getYear() + 1900;
				iYear += 1900;
				if (iCurrentYear - iYear >= 50 )
					iYear += 100;
			}
			
			//min/max test
			var now = new Date()
			iMaxYear = now.getYear() + 300
			iMinYear = now.getYear() - 300
			if (iYear < iMinYear || iYear > iMaxYear)
				return false;
			
			
			//other tests
			blnBad = ((iMonth < 1) || (iDay < 1));
			if ((iMonth == 2) && (isLeapYear(iYear)))
				blnBad = ((blnBad) || (iDay > 29));
			else
				blnBad = ((blnBad) || (iMonth > 12) || (iDay > aDaysInMonths[iMonth-1]));
		}								
		return !blnBad;
	}
}

function IsTime(value){
	var hasMeridian = false;
	var re = /^\d{1,2}[:]\d{2}([:]\d{2})?( [aApP][mM]?)?$/;
	if (!re.test(value)){return false; }
	if (value.toLowerCase().indexOf("p") != -1){hasMeridian = true; }
	if (value.toLowerCase().indexOf("a") != -1){hasMeridian = true; }
	var values = value.split(":");
	if ( (parseFloat(values[0]) < 0) || (parseFloat(values[0]) > 23) ){return false; }
	if (hasMeridian){
		if ( (parseFloat(values[0]) < 1) || (parseFloat(values[0]) > 12) ){return false; }
	}
	if ( (parseFloat(values[1]) < 0) || (parseFloat(values[1]) > 59) ){return false; }
	if (values.length > 2){
		if ( (parseFloat(values[2]) < 0) || (parseFloat(values[2]) > 59) ){return false; }
	}
	return true;
}

/*-------------------- END DATE TIME FUNCTIONS ------------------------------------------------------------------*/

/*-------------------- BEGIN VALIDATION FUNCTIONS ---------------------------------------------------------------*/
function empty(x){ if (x.length > 0) return false; else return true; }

function stripSpaces(x){
	while (x.substring(0,1) == ' ') x = x.substring(1);
	return x;
}

function chkForIsNumeric (value) {
	var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	if (objRegExp.test(value)) return true; 
	return false;
}

function chkForEmail(value){
	var objRegExp = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
	if (objRegExp.test(value)) return true;
	return false;
}

function chkForNonBlank (value){
	if (! empty(stripSpaces(value))){
	  value = trim(value);
	  return true; 
	}
	  return false;
}

function chkForIsSelected(f,fld){
	var frm = f ;
	var e = f.elements[fld]
	if ( ! e.selectedIndex == 0 ) return true; 
	return false;
}

function checkAll(field){
	//if only one checkbox exists, it is not an array
	if(typeof(field.length) == "undefined")
	{
		field.checked = true;
	}
	else
	{
		for (i = 0; i < field.length; i++)
			field[i].checked = true ;
	}
}

function uncheckAll(field){
	//if only one checkbox exists, it is not an array
	if(typeof(field.length) == "undefined")
	{
		field.checked = false;
	}
	else
	{
		for (i = 0; i < field.length; i++)
			field[i].checked = false ;
	}
}

/* CONFIRMATIONS */
function confirmation(msg)
{
	option = confirm(msg);
	if(option)
		return true;
	else
		return false;	
}

function confirmDeleteRecords(field){
	var checked = false;

	if(typeof(field.length) == "undefined")
	{
		if(field.checked == true)
		{
			checked = true;
		}
	}
	else
	{
		for (i = 0; i < field.length; i++)
			if(field[i].checked == true)
			{
				checked = true;
			}
	}
	
	if(checked)
	{
	var agree = confirm("Are you sure you would like to delete these records?");
	if (agree)
		return true;
	else
		return false;
	}
	else
	{
		alert("Please check at least one checkbox before attempting to delete records.");
		return false;
	}
}

function confirmChecked(field, strMessage, blnConfirm)
{
	var checked = false;
	if(typeof(field.length) == "undefined")
	{
		if(field.checked == true)
		{
			checked = true;
		}
	}
	else
	{
		for (i = 0; i < field.length; i++)
			if(field[i].checked == true)
			{
				checked = true;
			}
	}
	
	if(checked)
	{
		if(blnConfirm)
		{
			var agree = confirm("Are you sure you would like to " + strMessage + '?');
			if (agree)
				return true;
			else
				return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		alert('Please check at least one checkbox before you ' + strMessage);
		return false;
	}
}

function clearVals(form){
	for (var i=0; i < form.elements.length; i++){	
		switch (form.elements[i].type) {
			case "text" :
				form.elements[i].value = '';
				break;
			case "checkbox" :
				form.elements[i].checked = false;
				break;
			case "radio" :
				form.elements[i].checked = false;
				break;
			case "select-one" :
				form.elements[i].selectedIndex = 0;
				break;
			case "hidden" :
				if (form.elements[i].name.indexOf("filter")!=-1){
					form.elements[i].value = ''
					break
				}
		}
	}
	
	for (var i=1; i < form.elements.length; i++) {
		if (form.elements[i].value == "=")	{
			form.elements[i].checked = true
		}
	}
}

function IsInteger(strValue){
	if (strValue.length > 14) {
		return false;
	}

	blnFlag = false;
	var reValid = new RegExp();
	reValid = /^-?(\d+,?)*\d+$/g;
			
	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if(!blnFlag) {
			var i = parseInt(strValue.replace(/,/g, ''));
			if(i > 2147483647 || i < -2147483648) {
				blnFlag = true;
			}
		}
	}
	return !blnFlag;
}

function IsFloat(strValue) {
	if (strValue.length > 15) {
		return false;
	}

	blnFlag = false;
	var reValid = new RegExp();
	reValid = /^-?(\d+,?)*\.?\d+$/g;
					
	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if(!blnFlag) {
			var i = parseFloat(strValue.replace(/,/g, ''));
			if(i > 100000000 || i < -100000000) {
				blnFlag = true;
			}
		}
	}
			
	return !blnFlag;
}

function IsPercent(strValue) {
	if (strValue.length > 17) {
		return false;
	}

	blnFlag = false;
	var reValid = new RegExp();
	reValid = /^-?(\d+,?)*\.?\d+%?$/g;
			
	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if(!blnFlag) {
			var i = parseFloat(strValue.replace(/,/g, ''));
			if(i > 9999999999 || i < -9999999999) {
				blnFlag = true;
			}
		}
	}	
	return !blnFlag;
}

function IsWithinPrecision(Precision, Scale, strValue){
	blnFlag = false;
	var reValid;
	var reReplace;
	var iLength;
	
	reValid = /^-?(\d+,?)*\.?\d+$/g;

	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if (!blnFlag) {
			reReplace = /[-,\.]/g;
			strReplaced = strValue.replace(reReplace, '');
			iLength = Number(Precision) - Number(Scale)
			strFormat = "^\\d{1," + iLength + "}$";
			reValid = new RegExp(strFormat, "g");
			blnFlag = !reValid.test(strReplaced);
			if (!blnFlag) {
					strFormat = "(\\.\\d{0," + Scale + "})?$";
					reValid = new RegExp(strFormat, "g");
					blnFlag = !reValid.test(strValue);
			}
		}
	}
	return !blnFlag;
}

function IsMoney(strValue) {		
	if (strValue.replace(/,/g, '').length > 15) {
		return false;
	}

	blnFlag = false;
	var reValid = new RegExp();
	reValid = /^\$?-?(\d+,?)*\.?\d+?$/g;

	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if(!blnFlag) {
			var i = parseFloat(strValue.replace(/,/g, ''));
			if(i > 10000000000 || i < -10000000000) {
				blnFlag = true;
			}
		}
	}
	return !blnFlag;
}

function IsIntegerNoCommas(strValue){
	if (strValue.length > 14) {
		return false;
	}
	if (strValue.indexOf(",") > 0) {
		return false;
	}
	blnFlag = false;
	var reValid = new RegExp();
	reValid = /^-?(\d+,?)*\d+$/g;
			
	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if(!blnFlag) {
			var i = parseInt(strValue.replace(/,/g, ''));
			if(i > 2147483647 || i < -2147483648) {
				blnFlag = true;
			}
		}
	}
	return !blnFlag;
}	

function IsTinyInt(strValue){
	if (strValue.length > 3) {
		return false;
	}

	blnFlag = false;
	var reValid = new RegExp();
	reValid = /^-?(\d+,?)*\d+$/g;
			
	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if(!blnFlag) {
			var i = parseInt(strValue.replace(/,/g, ''));
			if(i > 255 || i < 0) {
				blnFlag = true;
			}
		}
	}
	return !blnFlag;
}

function IsSmallInt(strValue){
	if (strValue.length > 5) {
		return false;
	}

	blnFlag = false;
	var reValid = new RegExp();
	reValid = /^-?(\d+,?)*\d+$/g;
			
	if (strValue.length > 0) {
		blnFlag = !reValid.test(strValue);
		if(!blnFlag) {
			var i = parseInt(strValue.replace(/,/g, ''));
			if(i > 32767 || i < -32768) {
				blnFlag = true;
			}
		}
	}
	return !blnFlag;
}

function IsSSN(value) {
	var matchArr = value.match(/^(\d{3})-?\d{2}-?\d{4}$/);
	var numDashes = value.split('-').length - 1;
	
	if (value.length > 0) {
		if (matchArr == null || numDashes == 1) {
			return (false);
		}
		else if (parseInt(matchArr[1],10)==0) {
			return (false);
		}
	}
	return (true);
}

function IsSmallDate(strValue){
	if( IsDate(strValue) ){
		datelower = new Date('01/01/1900');
		dateupper = new Date('06/06/2079');
		date = new Date(strValue);
		if (date < datelower || date > dateupper) {
			return false;
		}
		return true;
	}
	else return false;
}

function checkTextLength(txtName,intMaxLen,blnCanBeNull){
	/*  
		submit usage: to use this function as part of a submit function, do the following:
			if(!checkTextLength(formObj.desc,7500,false))
			this will return true or false, and you will need to declare the form element explicitly
		onBlur usage:  onBlur="checkTextLength(this,10,true)"
		txtName - the name of the field
		intMaxLen - the maximum number of characters for this field
		strCanBeNull - t or f for true it can be null, or false it can't be null
	*/
	var intTxtLen = txtName.value.length;
	if((!blnCanBeNull) && trim(intTxtLen) == 0){
		alert("please enter some text");
		txtName.focus();
		return false;
	}
	else if(intTxtLen > intMaxLen){
		alert("You have exceeded the maximum length of this field. Please limit your text to " + intMaxLen + " characters. Your text is " + intTxtLen + " characters long.");
		txtName.focus();
		return false;
	}
	else{
		return true;
	}
}

/********** Validates a numeric and field length *************/
function validateNumericLength(objField, strFieldValue, strError, strLength)
{
	eval("var pattern = /\\d{" + strLength + "}/;")
	if(pattern.test(strFieldValue) == false)
	{
		alert("The " + strError + " should be " + strLength + " digits.")
		objField.focus();
		objField.select();
		return false;
	}
}

/*file type validator*/
function filterFileType(value, ext){
	var flag = true;		
	if (value.indexOf('.' + ext) == -1){
		flag = false;
	}
	if (Right(value, 3) != ext){
		flag = false;
	}
	return flag;
}
/*-------------------- END VALIDATION FUNCTIONS ---------------------------------------------------------------*/
//-->

