function Trim(TheString)
{
	var len;
	len = TheString.length;
 	while((TheString.substring(0,1) == " ") || (TheString.substring(0,1) == "\r")
			|| (TheString.substring(0,1) == "\n")){ //trim left
 		TheString = TheString.substring(1, len);
  		len = TheString.length;
	}
 	while((TheString.substring(len-1, len) == " ") || (TheString.substring(len-1, len) == "\r")
			|| (TheString.substring(len-1, len) == "\n")){ //trim right
 		TheString = TheString.substring(0, len-1);
  		len = TheString.length;
 	}

 	return TheString;
}

function checkFld(fldThis, sName, bMsg, nMinLen, nMaxLen)
{
	if (checkFld.arguments.length<3)
		bMsg = true;

	if (checkFld.arguments.length<4)
		nMinLen = 0;

	if (checkFld.arguments.length<5)
		nMaxLen = 0;

	if (fldThis)
	{
		var sTemp = Trim(fldThis.value);
		if (sTemp == "")
		{
			if (bMsg)
			{
				if (sName == "")
				{
					sName = fldThis.name;
				}

				alert("Please input " + sName + " first!");
				if (fldThis.type.toLowerCase() != "hidden")
					fldThis.focus();
			}

			return false;
		}

		if (nMinLen > 0)
		{
			if (sTemp.length < nMinLen)
			{
				if (bMsg)
				{
					alert("The length of " + sName + " can not less than " + nMinLen + "!");
					if (fldThis.type.toLowerCase() != "hidden")
						fldThis.focus();
				}

				return false;
			}
		}

		if (nMaxLen > 0)
		{
			if (sTemp.length > nMaxLen)
			{
				if (bMsg)
				{
					alert("The length of " + sName + " can not bigger than " + nMaxLen + "!");
					if (fldThis.type.toLowerCase() != "hidden")
						fldThis.focus();
				}

				return false;
			}
		}
	}

	return true;
}

function IsEmailValid(ElemName)
{
	var EmailOk  = true;

	var AtSym    = ElemName.value.indexOf('@');
	var Period   = ElemName.value.lastIndexOf('.');
	var Space    = ElemName.value.indexOf(' ');
	var Length   = ElemName.value.length - 1;	// Array is from 0 to length-1

	if ((AtSym < 1) ||						// '@' cannot be in first position
			(Period <= AtSym + 1) ||		// Must be atleast one valid char btwn '@' and '.'
			(Period == Length ) ||			// Must be atleast one valid char after '.'
			(Space  != -1))					// No empty spaces permitted
	{
		EmailOk = false;
		alert('Please enter a valid e-mail address!');
		ElemName.focus();
	}

	return EmailOk;
}

function IsNumber(fldNum, sName)
{
	var bMsg = (IsNumber.arguments.length==2);
	var strNumber = "+-0123456789."

	var strNum = Trim(fldNum.value);
	var i;
	for (i = 0; i < strNum.length; i++)
	{
		if (strNumber.indexOf(strNum.charAt(i)) < 0)
		{
			if (bMsg)
			{
				if (sName == "")
				{
					sName = fldNum.name;
				}

				alert("Please enter a valid number for " + sName + ".");
			}
			
			fldNum.focus();
			return false;
		}
	}

	return true;
}

function IsInteger(fldInt, sName)
{
	var bMsg = (IsInteger.arguments.length==2);
	var strNum = Trim(fldInt.value);
	
	if (strNum != "")
	{
		var nTemp = parseInt(strNum);

		if (nTemp != strNum)
		{
			if (bMsg)
			{
				if (sName == "")
				{
					sName = fldInt.name;
				}

				alert('Please enter a valid integer for ' + sName + '!');
			}

			fldInt.focus();
			return false;
		}
	}

	return true;
}

function IsPhoneNumber(fldNum)
{
	var strNumber = "0123456789."

	var strNum = Trim(fldNum.value);
	//alert (strNum);
	var i;
	for (i = 0; i < strNum.length; i++)
	{
		if (strNumber.indexOf(strNum.charAt(i)) < 0)
		{
			//alert('Please enter a valid number for ' + fldNum.name + '!');
			fldNum.focus();
			return false;
		}
	}

	return true;
}

function IsFormComplete(frmThis)
{
	var x       = 0;
	var FormOk  = true;

	while ((x < frmThis.elements.length) && (FormOk))
	{
		if ((frmThis.elements[x].type.toUpperCase() == 'CHECKBOX') || (frmThis.elements[x].type.toUpperCase() == 'RADIO') || (frmThis.elements[x].type.toUpperCase() == 'HIDDEN')
				|| (frmThis.elements[x].type.toUpperCase() == 'RESET') || (frmThis.elements[x].type.toUpperCase() == 'SUBMIT')
				 || (frmThis.elements[x].type.toUpperCase() == 'IMAGE'))
		{
			x ++;
			continue;
		}

		if (frmThis.elements[x].value == '' && frmThis.elements[x].type.toUpperCase() != 'TEXTAREA')
		{
			alert('Please enter the ' + frmThis.elements[x].name + ' and try again.');
			frmThis.elements[x].focus();
			FormOk = false;
		}

		x ++;
	}

	return FormOk;
}

function ShowPopWnd(sPage, nWidth, nHeight, bShowMenuBar)
{
	if (ShowPopWnd.arguments.length<4)
		bShowMenuBar = false;

	var sTemp = "";
	if (bShowMenuBar)
		sTemp = ",menubar=yes";

	if ((nWidth == 0) || (nHeight == 0))
	{
		return window.open(sPage, null,
				"resizable=yes,toolbar=yes,status=yes,scrollbars=yes" + sTemp);
	}
	else
	{
		var nTop = (screen.height - nHeight) / 2;
		var nLeft = (screen.width - nWidth) / 2;

		return window.open(sPage, null,
				"top=" + nTop + ",left=" + nLeft + ",width=" + nWidth + ",height=" +
				nHeight + ",resizable=yes,toolbar=no,status=yes,scrollbars=yes" + sTemp);
	}
}

function moveNodeFromList(lstFrom, lstTo, bRemove)
{
	if (lstFrom.selectedIndex == 0)
	{
		alert("Please select an item first!");
		lstFrom.focus();
		return;
	}

	var nLen = lstTo.options.length;
	lstTo.options.length = nLen + 1;
	
	var nSel = lstFrom.selectedIndex;
	lstTo.options[nLen].value = lstFrom.options[nSel].value;
	lstTo.options[nLen].text = lstFrom.options[nSel].text;
	lstTo.selectedIndex = nLen;
	
	if (bRemove)
	{
		nLen = lstFrom.options.length;
		for (var i = nSel; i < nLen - 1; i++)
		{
			lstFrom.options[i].value = lstFrom.options[i + 1].value;
			lstFrom.options[i].text = lstFrom.options[i + 1].text;
		}
		lstFrom.options.length = nLen - 1;

		if ((nLen - 1) == nSel)
			lstFrom.selectedIndex = nSel - 1;
		else
			lstFrom.selectedIndex = nSel;
	}
}

function moveNodeAllFromList(lstFrom, lstTo, bRemove)
{
	var nLen = lstTo.options.length;
	lstTo.options.length += lstFrom.options.length - 1;

	for (var i = 1; i < lstFrom.options.length; i++)
	{
		lstTo.options[nLen + i - 1].value = lstFrom.options[i].value;
		lstTo.options[nLen + i - 1].text = lstFrom.options[i].text;
	}

	lstTo.selectedIndex = 0;

	if (bRemove)
	{
		lstFrom.options.length = 1;
		lstFrom.selectedIndex = 0;
	}
}

function isValidDate(dateStr) {
	//(in MM/DD/YYYY format)  
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	// Also separates date into month, day, and year variables

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

	// To require a 4 digit year entry, use this line instead:
	// var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null) {
		alert("Date is not in a valid format.")
		return false;
	}
	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	if (month < 1 || month > 12) { // check month range
		alert("Month must be between 1 and 12.");
		return false;
	}
	if (day < 1 || day > 31) {
		alert("Day must be between 1 and 31.");
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		alert("Month "+month+" doesn't have 31 days!")
		return false
	}
	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			alert("February " + year + " doesn't have " + day + " days!");
			return false;
	   }
	}
	return true;  // date is valid
}

function checkPwd(frmThis)
{
	if (Trim(frmThis.pwd.value) == "")
	{
		alert("Password can not be set empty!");
		if (frmThis.pwd.type != "hidden")
			frmThis.pwd.focus();
		return false;
	}

	if (Trim(frmThis.repwd.value) == "")
	{
		alert("Please re-confirm your Password!");
		if (frmThis.repwd.type != "hidden")
			frmThis.repwd.focus();
		return false;
	}

	if (Trim(frmThis.pwd.value) != Trim(frmThis.repwd.value))
	{
		alert("Please input password correctly!")

		if (frmThis.pwd.type != "hidden")
			frmThis.pwd.focus();
		return false;
	}

	return true;
}

function checktxtlen (strTemp, desc, limit)
{
	if (strTemp.length > limit)
	{
		alert("The "+desc+" cannot excessed "+limit+"characters");
		return false;
	}
	return true;
}

function FormatDate(dtDate)
{
	var sRet;
	if (dtDate == null)
		sRet = "";
	else
		sRet = MakeDate(dtDate.getFullYear(), dtDate.getMonth()+1, dtDate.getDate());

	return sRet;
}

function MakeDate(iYear, iMonth, iDay)
{
	if (g_sDateFormat=="dd/mm/yyyy")
		return iDay+"/"+iMonth+"/"+iYear;
	else if (g_sDateFormat=="mm/dd/yyyy")
		return iMonth+"/"+iDay+"/"+iYear;
	else if (g_sDateFormat=="dd mmm, yyyy")
		return iDay+" "+gShortMonths[iMonth-1]+", "+iYear;
	else if (g_sDateFormat=="mmm dd, yyyy")
		return gShortMonths[iMonth-1]+" "+iDay+", "+iYear;
	else if (g_sDateFormat=="dd mmmm, yyyy")
		return iDay+" "+gMonths[iMonth-1]+", "+iYear;
	else if (g_sDateFormat=="mmmm ddd, yyyy")
		return gMonths[iMonth-1]+" "+iDay+", "+iYear;
	else
		return iYear+"-"+iMonth+"-"+iDay;
}
