/*
'-----------------------------------------------------------------------
'Developer      Date            Remark
'---------      -----------     ----------------------------------------
'Kelmen         23/Mar/2000     Initial version.
'Kelmen			05/Oct/2000		fixbug TrimEx().
'Kelmen			17/Jan/2001		Modified for HTC.
'Kelmen			22/Jan/2001		Validate_FormatCurrency().
'Kelmen			11/Dec/2001		Conversion to Object-oriented coding.
'jack yap		21/Jan/2002		gf_ValidateDate().
'pclau			24/Jan/2002		formatCurrency().
'jack yap		29/Jan/2002		gf_ValidatePhone() and OpenComboWin().
'teotm			19/Feb/2002		DaysInMonth() and ChangeOptionDays().
'wtleong		9/03/2002		mtdSubmitMenu()
'teotm			21/mar/2002		gfvoid_PopupTable
'teotm			22/May/2002		mtdReloadActMain
'pclau			25/Jun/2002		gf_ValidateDateMMYYYY()
'pclau			10/July/2002	gf_ValidateFrToDateRange()
'-----------------------------------------------------------------------
*/
var mc_strSeparator_Date	= '/';
var mc_strSeparator_Time	= '/';

//---------------------------------------------------------------------
function IsBlank(v_strTxt)
{
	if (v_strTxt == null)
	  return true;
	else
	  return (Trim(v_strTxt) == '');
}5

//---------------------------------------------------------------------
function Trim(v_strTxt)
{
	var lngLoop, lngPos_Front, lngPos_Back;
	var blnChking_Front, blnChking_Back;
	  
	v_strTxt = v_strTxt.toString();
	  
	lngPos_Front    = -1;
	lngPos_Back     = -1;
	  
	blnChking_Front = true;
	for (lngLoop = 0; lngLoop < v_strTxt.length; lngLoop++)
	{
	  blnChking_Front = (v_strTxt.charAt(lngLoop) == ' ');
	  if (!blnChking_Front)
	  {
	    lngPos_Front  = lngLoop;
	    lngLoop       = v_strTxt.length;
	  }
	}
	if (lngPos_Front < 0) return '';
	  
	blnChking_Back = true;
	for (lngLoop = (v_strTxt.length - 1); lngLoop >= 0; lngLoop--)
	{
	  blnChking_Back  = (v_strTxt.charAt(lngLoop) == ' ');
	  if (!blnChking_Back)
	  {
	    lngPos_Back = lngLoop;
	    lngLoop     = -1;
	  }
	}
	  
	if (lngPos_Back < 0)
	  return '';
	else
	  return v_strTxt.substr(lngPos_Front, lngPos_Back - lngPos_Front + 1);
}

//---------------------------------------------------------------------
function AppendQryStr(v_strParamKey, v_strParamVal, v_blnDelimeter)
{
  var strReturn;
  
  strReturn = v_strParamKey + '=' + escape(v_strParamVal);
  if (v_blnDelimeter) strReturn = '&' + strReturn;
  
  return strReturn;
}

//---------------------------------------------------------------------
function MergeWithDelimeter(v_str1, v_strDelimeter, v_str2)
{
  var strReturn;
  var lngLenDelimeter;
  
  strReturn       = v_str1 + v_str2;
  lngLenDelimeter = v_strDelimeter.length;
  if (!( IsBlank(v_str1) || IsBlank(v_str2) ))
  {
    if (!( (Right(v_str1, lngLenDelimeter) == v_strDelimeter) || ( Left(v_str2, lngLenDelimeter) == v_strDelimeter) ))
      strReturn = v_str1 + v_strDelimeter + v_str2;
  }
  
  return strReturn;
  
}

//---------------------------------------------------------------------
function Left(v_str1, v_lngLen)
{
  return v_str1.substr(0, v_lngLen);
}

//---------------------------------------------------------------------
function Right(v_str1, v_lngLen)
{
  return v_str1.substr(v_str1.length - v_lngLen, v_lngLen);
}

//---------------------------------------------------------------------
function MonthName(v_bytMonth, vblnAbbreviate)
{
  var strReturn;
  switch (v_bytMonth)
  {
    case 1  : strReturn = 'January'   ; break;
    case 2  : strReturn = 'February'  ; break;
    case 3  : strReturn = 'March'     ; break;
    case 4  : strReturn = 'April'     ; break;
    case 5  : strReturn = 'May'       ; break;
    case 6  : strReturn = 'June'      ; break;
    case 7  : strReturn = 'July'      ; break;
    case 8  : strReturn = 'August'    ; break;
    case 9  : strReturn = 'September' ; break;
    case 10 : strReturn = 'October'   ; break;
    case 11 : strReturn = 'November'  ; break;
    case 12 : strReturn = 'December'  ; break;
    default : strReturn = '';
  }
  if (vblnAbbreviate) strReturn = Left(strReturn, 3);
  
  return strReturn;
}

//---------------------------------------------------------------------
function VBReplace(v_strExpress, v_strFind, v_strReplaceWith)
{
  var objRegExp = new RegExp(v_strFind, 'gi');

  return v_strExpress.replace(objRegExp, v_strReplaceWith);
}

//---------------------------------------------------------------------
function IsNumber(v_vntVal)
{
	if (IsBlank(v_vntVal))
		return false;
	else
	{
		var strVal = v_vntVal.toString();
		strVal = strVal.replace(/,/g, '');
		return !isNaN(strVal);
	}
}

//---------------------------------------------------------------------
function CNum(v_vntVal)
{
	if (IsNumber(v_vntVal))
	{
		var strVal = v_vntVal.toString();
		strVal = strVal.replace(/,/g, '');
		return Number(strVal);
	}
	else
		return null;
}

/*
---------------------------------------------------------------------
Return new date as string after add new day
---------------------------------------------------------------------
*/
function GetNewDateFromADate(v_strDate, v_strnumDaysToAdd)
{
			
	var curDate			= new Date(v_strDate);
	var numMilliInDay	= 1000 * 60 * 60 * 24;
	var curDateInMilli	= curDate.getTime();
	var newDateInMilli	= curDateInMilli + (v_strnumDaysToAdd * numMilliInDay);
	var newDate			= new Date( newDateInMilli);

    var strReturn;
    strReturn = 
        newDate.getDate() + mc_strSeparator_Date +
        MonthName(newDate.getMonth() + 1, true) + mc_strSeparator_Date +
        newDate.getFullYear();
    return strReturn;
}


/*
---------------------------------------------------------------------
Return today date as string.
---------------------------------------------------------------------
*/
function ToDayDate()
{
    var dtToday = new Date();
    var strReturn;
    
    strReturn = 
        dtToday.getDate() + mc_strSeparator_Date +
        MonthName(dtToday.getMonth() + 1, true) + mc_strSeparator_Date +
        dtToday.getFullYear();
        
    return strReturn;
}

//---------------------------------------------------------------------
function TimeNow()
{
    var dtNow = new Date();
    var strReturn;
    
    strReturn = 
        dtNow.getHours() + mc_strSeparator_Time +
        dtNow.getMinutes();
        
    return strReturn;
}

//---------------------------------------------------------------------
function TrimEx(v_strTxt)
{
    var intLen, intUnicode;
    var strReturn, str1Pos;
      
    strReturn = '';
        
    for (intLen = 0; intLen < v_strTxt.length; intLen++)
    {
        str1Pos     = v_strTxt.charAt(intLen);
        intUnicode  = str1Pos.charCodeAt(0);
        
        if ((intUnicode == 10) || (intUnicode == 13) || (intUnicode == 32)) str1Pos = '';
        
        strReturn = strReturn + str1Pos;
    }
    
    return strReturn;
}

//---------------------------------------------------------------------
function VBString(v_intNum, v_strChr)
{
    var strReturn = '', str1Chr = v_strChr.charAt(0);
    var intLoop;
    
    for (intLoop = 1; intLoop <= v_intNum; intLoop++)
        strReturn = strReturn + str1Chr;
    
    return strReturn;
}

//---------------------------------------------------------------------
function PadNum(v_lngVal, v_intDigit)
{
    var strReturn = String(v_lngVal);

	if (strReturn.length != v_intDigit)
	{
	    if (strReturn.length > v_intDigit)
	    	strReturn = Right(strReturn, v_intDigit);
	    else
	    	strReturn = VBString(v_intDigit - strReturn.length, '0') + strReturn;
	}

    return strReturn;
}

//---------------------------------------------------------------------
function MonthName2VBMonth(v_strMonthName)
{
    v_strMonthName = v_strMonthName.toLowerCase().substr(0, 3);
    switch (v_strMonthName)
    {
        case 'jan': return 1;
        case 'feb': return 2;
        case 'mar': return 3;
        case 'apr': return 4;
        case 'may': return 5;
        case 'jun': return 6;
        case 'jul': return 7;
        case 'aug': return 8;
        case 'sep': return 9;
        case 'oct': return 10;
        case 'nov': return 11;
        case 'dec': return 12;
        default:    return -1;
    }
}

//----------------------------------------------------------------------
function NumPrec_Validate(v_lngNum, v_bytInt, v_bytDec, v_strFldDesc)
{
    var lngInt;
    var strReturn, strDec, strErrInt, strErrDec;
    var blnValidInt, blnValidDec;
    var posDec;
      
    strReturn = '';
    strDec    = '';
    strErrInt = '';
    strErrDec = '';
	
	//Check Integer.
	blnValidInt = true;
    lngInt  = Math.floor(v_lngNum);
    if (lngInt > 0)
      blnValidInt = (lngInt.toString(10).length <= v_bytInt);
	
	//Check Decimal.
	blnValidDec = true;
	strDec = v_lngNum.toString(10);
	posDec = strDec.indexOf('.');
	if (posDec > 0)
	{
		strDec = strDec.substr(++posDec);
		blnValidDec = (strDec.length <= v_bytDec);
	}
	
    if (!(blnValidInt && blnValidDec))
    {
        strReturn = 'Please enter ' + v_strFldDesc + ' in ' + v_bytInt + ' integer and ' + v_bytDec + ' decimal format!';
    }
    return strReturn;
}

//---------------------------------
function FmtNum(v_dblVal, v_lngDec)
{
	var strRet, strDec, strInt, strIntTS, str1, strVal;
	var vntVal;
	var posDec;
	var lngLoop, lng3;
	
	strRet = '';
	strInt = '';
	strDec = '';
	vntVal = CNum(v_dblVal)
	if (vntVal != null)
	{
		strIntTS	= '';
		
		var numVal	= Number(vntVal).Fix();
		strInt		= numVal.toString(10);
		
		lng3		= 0;
		
		for (lngLoop = (strInt.length - 1); lngLoop >= 0; --lngLoop)
		{
			str1 = strInt.substr(lngLoop, 1);
			if(str1 != '-')
			{
				++lng3;
				if (lng3 > 3)
				{
					lng3 = 1;
					str1 = str1 + ',';
				}
				
				strIntTS = str1 + strIntTS;
			}
		}
		
		if(vntVal.Sgn() < 0) strIntTS = '-' + strIntTS;
		
		if (v_lngDec > 0)
		{
			strVal = vntVal.toString(10);
			if(strVal.substr(0, 1) == '.') strVal = '0' + strVal;
			
			posDec = strVal.indexOf('.');
			
			if (posDec > 0)
				strDec = strVal.substr(++posDec);
			
			if (strDec.length > v_lngDec)
				strDec = strDec.substr(0, v_lngDec);
			else
				if (strDec.length < v_lngDec)
				{
					
					do
					{
						strDec = strDec + '0';
					}
					while (strDec.length < v_lngDec);
				}

			strDec = '.' + strDec;
		}
		strRet = strIntTS + strDec;
	}
	
	return strRet;
}

//-----------------------------------------------------
function Validate_FormatCurrency(v_strFmtCur, v_dblVal)
{
    var lngInt, lngDgt_Int, lngDgt_Dec;
    var strRet, strDec;
    var blnValidInt, blnValidDec;
    var posDec;
    
    strRet = '';
    strDec = '';
    strErrInt = '';
    strErrDec = '';


	v_strFmtCur = v_strFmtCur.toString(10);
	lngDgt_Int	= CNum(v_strFmtCur);
	lngDgt_Dec	= 0;
	
	posDec = v_strFmtCur.indexOf('.');
	if (posDec > 0)
	{
		lngDgt_Int = CNum(v_strFmtCur.substr(0, ++posDec));
		lngDgt_Dec = CNum(v_strFmtCur.substr(posDec));
	}
	
	//Check Integer.
	blnValidInt	= true;
    lngInt		= Math.floor(v_dblVal);
    if (lngInt > 0)
		blnValidInt = (lngInt.toString(10).length <= lngDgt_Int);
	
	//Check Decimal.
	blnValidDec	= true;
	strDec		= v_dblVal.toString(10);
	posDec		= strDec.indexOf('.');
	if (posDec > 0)
	{
		strDec		= strDec.substr(++posDec);
		blnValidDec	= (strDec.length <= lngDgt_Dec);
	}
	
    if (!(blnValidInt && blnValidDec))
        strRet = lngDgt_Int + ' integer and ' + lngDgt_Dec + ' decimal';


    return strRet;
}

//================================
function CompareDate(v_dt1, v_dt2)
{
	var strRet = '=';

	strRet = CompareVal(v_dt1.getFullYear(), v_dt2.getFullYear());
	if (strRet == '=')
	{
		strRet = CompareVal(v_dt1.getMonth(), v_dt2.getMonth());
		if (strRet == '=')
		{
			strRet = CompareVal(v_dt1.getDate(), v_dt2.getDate());
		}
	}
	return strRet;
}

//================================
function CompareDateEx(day1, month1, year1, day2, month2, year2)
{
	var strRet = '=';

	strRet = CompareVal(parseInt(year2,10), parseInt(year1,10));
	if (strRet == '=')
	{
		strRet = CompareVal(parseInt(month2,10), parseInt(month1,10));
		if (strRet == '=')
		{
			strRet = CompareVal(parseInt(day2, 10), parseInt(day1,10));
		}
	}
	
	return strRet;
}

//=======================================
function CompareVal(v_vntVal1, v_vntVal2)
{
	var strRet = '=';
	
	if (v_vntVal1 < v_vntVal2)
		strRet = '<';
	else
		if (v_vntVal1 > v_vntVal2)
			strRet = '>';
	
	return strRet;
}

//=====================================================================
function MedDt2Dt(v_strMedDt, v_strDateSeparator)
{
    var aryMedDt = v_strMedDt.split(v_strDateSeparator);
    var dtRet = new Date();
    
    with(dtRet)
    {
		setFullYear(aryMedDt[2]);
		setMonth(MonthName2VBMonth(aryMedDt[1]) - 1);
		setDate(aryMedDt[0]);
    }
    
    return dtRet;
}

//=====================================================================
function Blank2Def(v_vntVal, v_vntDef)
{
	if(IsBlank(v_vntVal))
		return v_vntDef;
	else
		return v_vntVal;
}


//=====================================================================
function JoinDt(v_objName)
{

	return eval(v_objName + "_cboDtMth.value") + mc_strSeparator_Date + eval(v_objName + "_txtDtDay.value") + mc_strSeparator_Date + eval(v_objName + "_txtDtYr.value")
}

/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
New functions!
Kelmen, 11/Dec/2001
The (supposed) best way to code JavaScript! Object-oriented!
;)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/

/*==================================================================
Simulate VBScript Fix() function.
==================================================================*/
Number.prototype.Fix = function()
{
	if(!isNaN(this))
	{
		var strNum = this.toString(10);
		var lngDot = strNum.indexOf('.');
		if(lngDot >= 0)
			strNum = strNum.substr(0, lngDot);
		
		return new Number(strNum);
	}
}

/*==================================================================
Simulate VBScript Sgn() function.
==================================================================*/
Number.prototype.Sgn = function()
{
	if(!isNaN(this))
	{
		if(this < 0)
			return -1;
		else
			if(this == 0) return 0; else return 1;
	}
}

/*==================================================================
	Created By Jack Yap
	DateCreated 21/01/2002
	Edited by teo tm
	Function Purposes to check Valid Date Format

	For Option Selection.
		Case 0 = Allow NULL And Not greater than today date.
		Case 1 = Allow NuLL and Anydate.
		Case 2 = Not Allow NULL and not greater than today date.
		Case 3 = Not Allow NULL and MUST greater than today date.
		Case else = Not ALLOW NULL and anydate. 
==================================================================*/
//-----------------------------------------------------------
//this function check for leap year
function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}
	else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

//-----------------------------------------------------------
function gf_ValidateDate(v_objForm, v_strErrMsg)
{
	with(v_objForm)
	{
		var strErrMsg = "";
		var strErrMsgTemp;
		var Days;
		var Months;
		var Years;
		var lngIdx;
		var FindIndex;
		var Findkey;
		var Option ;
		var blnContinue;
		var Delimeter = '-';
		var RealDate;

		for (lngIdx = 0; lngIdx < elements.length; lngIdx++)
		{
			blnContinue = true;
			Days = elements[lngIdx].name; 
			FindIndex = Days.search("Day");
			if (FindIndex != -1 )
			{
				if ((Days[0] == "D") && (Days[1] == "a") && (Days[2] == "y"))
				{	
					Findkey = Days.substring(3, Days.length);
					Option = elements["Option" + Findkey].value;
					Days = elements["Day" + Findkey].value;
					Months = elements["Month" + Findkey].value;
					Years = elements["Year" + Findkey].value;

					Description = elements[Findkey].attributes["description"];
					if (typeof(Description) == "undefined")
						Description = "Date (no description) ";
					else
						Description = Description.value;
				
					//check for mandatory date
					if ((Days == "") &&  (Months == "") && (Years == ""))
					{
						if ((Option == "0") || (Option == "1"))
						{
							elements[Findkey].value = "";
							blnContinue = false;
						}
						else
						{
							strErrMsgTemp = Description + " is a Mandatory field!";
							strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
							blnContinue = false;
						}
					}

					//check for valid day input
					if ((isNaN(Days) || Days == "") && blnContinue)
					{
						strErrMsgTemp = "Invalid date format for " + Description + "!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}
				
					//check for valid month input
					if ((isNaN(Months) || Months == "") && blnContinue)
					{
						strErrMsgTemp = "Invalid date format for " + Description + "!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}
				
					//check for valid year input
					if ((isNaN(Years) || Years == "") && blnContinue)
					{
						strErrMsgTemp = "Invalid date format for " + Description + "!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}
				
					Days = parseInt(Days, 10);
					Months = parseInt(Months, 10);
					Years = parseInt(Years, 10);

					//check for year range
					if (((Years < 1900) || (Years > 2100)) && blnContinue)
					{
						strErrMsgTemp = "Year format for " + Description + " should be in the range of 1900 - 2100!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}

					//check for month range
					if (((Months > 12) || (Months < 1)) && blnContinue) 
					{
						strErrMsgTemp = "Month format for " + Description + " should be in the range of 1 - 12!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}

					//check for day range
					if (((Months == 1 || Months == 3 || Months == 5 || Months == 7 || Months == 8 || Months == 10 || Months == 12) && (Days > 31 || Days < 1)) && blnContinue)
					{
						strErrMsgTemp = "Day format for " + Description + " should be in the range of 1 - 31!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}
					if (((Months == 4 || Months == 6 || Months == 9 || Months == 11) && (Days > 30 || Days < 1)) && blnContinue)
					{
						strErrMsgTemp = "Day format for " + Description + " should be in the range of 1 - 30!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}
					if ((Months == 2) && blnContinue)
					{
						if ((Days < 1) && blnContinue)
						{
							strErrMsgTemp = "Day format for " + Description + " should not less than 1!";
							strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
							blnContinue = false;
						}
						if ((LeapYear(Years) == true) && blnContinue)
						{
							if ((Days > 29) && blnContinue)
							{
								strErrMsgTemp = "Day format for " + Description + " should not more than 29!";
								strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
								blnContinue = false;
							}
						}
						else 
						{
							if ((Days > 28) && blnContinue)
							{
								strErrMsgTemp = "Day format for " + Description + " should not more than 28!";
								strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
								blnContinue = false;
							}
						}
					}
				
					//check for date greater than today
					if (((Option == "0") || (Option == "2")) && blnContinue)
					{
						var Todate = new Date();
						var ToDay = Todate.getDate();
						var ToMonth = Todate.getMonth() + 1;
						var ToYear = Todate.getFullYear();

						if (Years > ToYear)
						{
							strErrMsgTemp = Description + " should not greater than today Date!";
							strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
							blnContinue = false;
						}
						else if	(Years == ToYear)
						{
							if (Months > ToMonth) 
							{
								strErrMsgTemp = Description + " should not greater than today Date!";
								strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
								blnContinue = false;
							}
							else if (Months == ToMonth)
							{
								if (Days > ToDay)
								{
									strErrMsgTemp = Description + " should not greater than today Date!";
									strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
									blnContinue = false;
								}
							}	
						}
					}	
					
					//check for input date should be greater than today date
					if ((Option == "3") && blnContinue)
					{
						var Todate = new Date();
						var ToDay = Todate.getDate();
						var ToMonth = Todate.getMonth() + 1;
						var ToYear = Todate.getFullYear();

						if (Years < ToYear)
						{
							strErrMsgTemp = Description + " should be greater than today Date!";
							strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
							blnContinue = false;
						}
						else if	(Years == ToYear)
						{
							if (Months < ToMonth) 
							{
								strErrMsgTemp = Description + " should be greater than today Date!";
								strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
								blnContinue = false;
							}
							else if (Months == ToMonth)
							{
								if (Days < ToDay)
								{
									strErrMsgTemp = Description + " should be greater than today Date!";
									strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
									blnContinue = false;
								}
							}	
						}
					}	
					
					if (blnContinue)
					{
						RealDate = Days + Delimeter + MonthName(Months) + Delimeter + Years;
						elements[Findkey].value=RealDate;
					}
				}
			}
		}
		
		if (strErrMsg != null && strErrMsg != "")
		{
			if (v_strErrMsg != null)
			{
				strErrMsg = MergeWithDelimeter(v_strErrMsg, "\n", strErrMsg);
			}
			return strErrMsg;
		}
		else
			return v_strErrMsg;
	}
}


//==================================================================
//--Created By Jack Yap
//--DateCreated 29/01/2002
//--Function Purposes to check Valid Phone Format

function gf_ValidatePhone(v_objForm)
{
	var lngIdx;
	var FindIndex;
	var Findkey; 
	var PhonePrefix;
	var PhonePostfix;
	var Delimeter = '-';
	var RealPhone;
	with(v_objForm)
	{
		for (lngIdx = 0; lngIdx < elements.length; lngIdx++)
		{
			PhonePrefix = elements[lngIdx].name;
			FindIndex = PhonePrefix.search("PhonePrefix");
			if (FindIndex != -1 )
			{
				Findkey = PhonePrefix.substring(11,PhonePrefix.length);
				PhonePrefix = elements["PhonePrefix" + Findkey].value;
				PhonePostfix = elements["PhonePostfix" + Findkey].value;
				if ((PhonePrefix =="") && (PhonePostfix ==""))
				{
					RealPhone = "";
					elements[Findkey].value = RealPhone;
				}
				else
				{
					if (IsNumber(PhonePrefix)== false)
					{
						elements["PhonePrefix" + Findkey].focus();
						return false;
					} 
					if (IsNumber(PhonePostfix)== false)
					{
						elements["PhonePostfix" + Findkey].focus();
						return false;
					} 
					
					RealPhone = PhonePrefix + Delimeter +  PhonePostfix;
					elements[Findkey].value = RealPhone;
				}
			}
		}
	}
}

//==================================================================
//--Created By Jack Yap
//--DateCreated 29/01/2002
//--Function Purpose to open new combo windows
//--Eg Open State Combo base on CountryID
//--eg Open Country COmbo
//StatePopUp = "OpenComboWin('" & gc_strPrefix_LnCif & "perm_mt_country_cd" & "','mt_country_cd','State','" & gc_strPrefix_LnCif & "perm_mt_state_cd" & "','tbl_mt_state',"& "'Span" & gc_strPrefix_LnCif & "perm_mt_state_cd');"
//CountryPopUp = "OpenComboWin('','','Country','" & gc_strPrefix_LnCif & "perm_mt_country_cd" & "','tbl_mt_country',"& "'Span" & gc_strPrefix_LnCif & "perm_mt_country_cd');"


function OpenComboWin(str_InputName,str_FieldName,str_Title,str_HiddenName,str_TableName,str_LayerName,str_HiddenName2,str_LayerName2)
{
	var option = "toolbar=" + "no" + ",location=" + "no" + ",directories=" 
                + "no" + ",status=" + "no" + ",menubar=" + "no" + ",scrollbars="  
                + "no" + ",resizable="  + "no" + ",width=" + "300" + ",height=" 
                + "150";
    

	if (str_InputName != "")
	{
		var Str_ID = eval("document.frmParam." + str_InputName + ".value");             
	}
	else
	{
		var Str_ID = "";
	}
	if (str_FieldName != "") 
	{
		if (Str_ID == "")
		{
			alert("Please Select Country First");
			return;
		}
	}	
	var str_URL = "stdcountrystateCombo.asp?Title=" + str_Title + "&HiddenName=" + str_HiddenName + "&HiddenName2=" + str_HiddenName2  + "&TableName=" + str_TableName + "&LayerName=" + str_LayerName + "&LayerName2=" + str_LayerName2 + "&ViewTableID=" + Str_ID + "&FieldName=" + str_FieldName;
	var new_win = window.open(str_URL, "NewWindow",option);
}


/*==================================================================
Format to 2 decimal point
==================================================================*/
function formatCurrency(num) 
{
	num = num.toString().replace(/\$|\,/g,'');

	if(isNaN(num)) num = "0";
	/*
	  The floor function returns a floating-point value representing the 
	  largest integer that is less than or equal to x.There is no error 
      return.
    */
	cents = Math.floor((num*100+0.5)%100); 
	num = Math.floor(num).toString();

	if(cents < 10) cents = "0" + cents; 

	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
		{
			num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3)); 
		}	
	
	return ('' + num + '.' + cents); 
}//end formatCurrency



/*==================================================================
function for returning how many days there are in a month including leap years
==================================================================*/
function DaysInMonth(WhichMonth, WhichYear)
{

	var DaysInMonth = 31;
	if (WhichMonth == "Apr" || WhichMonth == "Jun" || WhichMonth == "Sep" || WhichMonth == "Nov") DaysInMonth = 30;
	if (WhichMonth == "Feb" && (WhichYear/4) != Math.floor(WhichYear/4))	DaysInMonth = 28;
	if (WhichMonth == "Feb" && (WhichYear/4) == Math.floor(WhichYear/4))	DaysInMonth = 29;
	return DaysInMonth;
	
} // end DaysInMonth

/*==================================================================
function to change the available days in a months
==================================================================*/
function ChangeOptionDays(v_objForm, v_strSelect)
{

	DaysObject = eval("document." + v_objForm.name + ".Day" + v_strSelect);
	MonthObject = eval("document." + v_objForm.name + ".Month" + v_strSelect);
	YearObject = eval("document." + v_objForm.name + ".Year" + v_strSelect);
				
	Month = MonthObject[MonthObject.selectedIndex].text;
	Year = YearObject[YearObject.selectedIndex].text;

	DaysForThisSelection = DaysInMonth(Month, Year);
	CurrentDaysInSelection = DaysObject.length;

	var objParent = document.getElementById("daySelect");

	if (CurrentDaysInSelection > DaysForThisSelection)
	{
		for (i=0; i<(CurrentDaysInSelection-DaysForThisSelection); i++)
		{
			var j = DaysObject.length - 1;
			var child = DaysObject.getElementsByTagName("option");
			with (DaysObject)
			{
				removeChild(child.item(j));
			}
		}
	}

	if (DaysForThisSelection > CurrentDaysInSelection)
	{
		for (i=0; i<(DaysForThisSelection-CurrentDaysInSelection); i++)
		{
			var newDayOption = document.createElement("option");
			var j = DaysObject.length + 1;
			var newText = document.createTextNode(j);
			newDayOption.appendChild(newText);

			var refDayOption = DaysObject.getElementsByTagName("option").item(DaysObject.length);
			DaysObject.insertBefore(newDayOption,refDayOption);
		}
	}

	if (DaysObject.selectedIndex < 0) DaysObject.selectedIndex == 0;
	
} // end ChangeOptionDays


/*==================================================================
function to set options to today
==================================================================*/
function SetToDefaultDate(v_objForm, v_strSelect, v_strDate)
{

	DaysObject = eval("document." + v_objForm.name + ".Day" + v_strSelect);
	MonthObject = eval("document." + v_objForm.name + ".Month" + v_strSelect);
	YearObject = eval("document." + v_objForm.name + ".Year" + v_strSelect);
				
	if (v_strDate == '')
	{
		Now = new Date();
		SelDay = parseInt(Now.getDate());
		SelMonth = parseInt(Now.getMonth());
		SelYear = parseInt(Now.getFullYear());
	}
	else
	{
		splitDate = v_strDate.split('/');
		SelDay = parseInt(splitDate[0]);
		SelMonth = parseInt(splitDate[1] - 1);
		SelYear = parseInt(splitDate[2]);
	}

	for (i=0; i<YearObject.length; i++)
	{
		if (YearObject[i].text == SelYear)
		{
			YearObject[i].selected = true;
		}
	}
	if ((SelYear < parseInt(YearObject[0].text)) || (SelYear > parseInt(YearObject[YearObject.length - 1].text)))
	{
		YearObject[0].selected = true;
	}
	MonthObject[SelMonth].selected = true;
	ChangeOptionDays(v_objForm, v_strSelect);
	DaysObject[SelDay-1].selected = true;
	
} // end SetToDefaultDate


/*---------------------------------------------------------------------------
This function is use to dynamically add a text box if user choose 'other'
created by:		teo tm
date:			09 Mac 2002
example page:	ln_coll_prop_det.asp, ln_coll_prop_det2.asp, ln_coll_prop_det3.asp
---------------------------------------------------------------------------*/
function gfvoid_CheckOthers(v_strSelectNm, v_strOtherTDID, v_strOtherNm, v_strOtherVal, v_strOtherSz, v_strOtherMx, v_strOtherAttr)
{
	var objSelect = eval('document.frmParam.' + v_strSelectNm);
	var objOther = document.getElementById(v_strOtherTDID);
	var strHTMLText;
	var strValue = objSelect.value.split('~');
	if (strValue[1] == 'False' || objSelect.value == '' || strValue[1] == '')
	{
		strHTMLText = '&nbsp;';
	}
	else	
	{
		strHTMLText = '<input ' + 
			'name="' + v_strOtherNm + '" ' +
			'value="' + v_strOtherVal + '" ' +
			'size="' + v_strOtherSz + '" ' +
			'maxlength="' + v_strOtherMx + '" ' +
			v_strOtherAttr + ' >';
	}
	objOther.innerHTML = strHTMLText;
	return;
}

function gf_ValidateEmail(the_emailaddr) 
{
    //a regular expression of a NOT valid e-mailaddress
    var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)"
    
    //a regular expression of a VALID e-mailaddress
    var reg2str ="^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"

    //Create two regular expressions, one a not valid, one a valid email address
    var reg1 = new RegExp(reg1str)
    var reg2 = new RegExp(reg2str)

    // If the_emailaddr is a valid email address, return true
    return ( (!reg1.test(the_emailaddr)) && (reg2.test(the_emailaddr)) )
}

function toAlphaNumber(checkString)
{
    var newString = "";    // REVISED/CORRECTED STRING
    var count = 0;         // COUNTER FOR LOOPING THROUGH STRING
	var strRet;
	 
	strRet = false;
	
    // LOOP THROUGH STRING CHARACTER BY CHARACTER
    for (i = 0; i < checkString.length; i++) 
    {
        ch = checkString.substring(i, i+1);

        // ENSURE CHARACTER IS AN ALPHA OR NUMERIC CHARACTER
        //if ( (ch != '~') && (ch != '`') && (ch != '^') && (ch != '|') && (ch != '\') && (ch != '<') )
        
        
        if ((ch == ",")|| (ch == "%")|| (ch == "+")|| (ch == "-") || (ch == "_") || (ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z") || (ch >= "0" && ch <= "9") || (ch == " ") || (ch == "&") || (ch == "-") || (ch == "@") || (ch == "\/") || (ch == "\\") || (ch == "%") || (ch == ".") || (ch == ",") || (ch == "#") || (ch == "\n") || (ch == "=") || (ch == "(") || (ch == ")") || (ch == "\t") || (ch == "_")  || (ch == "?")  || (ch == "/") || (ch == ":") || (ch == "|") || (ch == "!") || (ch == ";"))
        {
            newString += ch;
        }
    }
    if (checkString != newString) 
    	{
			strRet = false;;
		} 
    else 
		{
			strRet = true;
		}
		
	return strRet;
}


/*==================================================================
function to navigate menu page
==================================================================*/
function mtdSubmitMenu(v_strURL, v_strMenuId, v_strMenuLevel)
{
	with(document.frmParam)
	{				
		menu_tree_id.value = v_strMenuId;
		menu_level_id.value = v_strMenuLevel;
		method = "get";
		action = v_strURL;
		submit();
	}

}

/*---------------------------------------------------------------------------
This function is use to popup window 
created by:		teo tm
date:			20 Mac 2002
example page:	ln_coll_prop_det3.asp
---------------------------------------------------------------------------*/
function gfvoid_PopupTable(v_strURL, v_thisField, v_parentField, v_parentDscp)
{
	var strDefValue = eval("document.frmParam." + v_thisField).value;
	v_strURL = v_strURL + '&strDefValue=' + strDefValue;
	if (v_parentField != "")
	{
		var strFilterValue = eval("document.frmParam." + v_parentField).value;
		if (strFilterValue != "")
			v_strURL = v_strURL + '&strFilterValue=' + strFilterValue;
		else
		{
			alert("Please select an item for " + v_parentDscp + " first.");
			return;
		}
	}
	var strFeatures = 'width=350, height=120, top=100, left=100, toolbar=0, titlebar=0, status=0, menubar=0, location=0, directories=0, scrollbars=1, resizable=1';
	var newWin = window.open(v_strURL, "PopupTable", strFeatures);
}

function gf_ValidateNewIC(v_strIC)
{
	var strIC;
		
	strIC = v_strIC;
	if (strIC.length != 12)
		{
			alert("New IC length must be 12 number");
		}
	else
		{
			var strYr = strIC[0] + strIC[1];
			var strMth = strIC[2] + strIC[3];
			var strDay = strIC[4] + strIC[5];
			var strErr;
			strErr = true;
				
			if ( strMth <= '00' || strMth >='13')
			{
				strErr = false;
			}
			else
			{
				if (strMth == '01' || strMth == '03' || strMth == '05' || strMth == '07' || strMth == '08' || strMth == '10' || strMth == '12')
					{
						if ( strDay <= '00' || strDay >='32')
						{
							strErr = false;
						}
					}
				if (strMth == '04' || strMth == '06' || strMth == '09' || strMth == '11')
					{
						if ( strDay <= '00' || strDay >='31')
						{
							strErr = false;
						}
					}
				if (strMth == '02')
					{
						if (( strYr % 4) == 0)
						{
							if ( strDay <= '00' || strDay >='30')
							{
								strErr = false;
							}
						}
						else
						{ 
							if ( strDay <= '00' || strDay >='29')
							{
								strErr = false;
							}
						}
					}
			}
		}
			
		return strErr;
}



/*==================================================================
	Modification to gf_ValidateDate.
	Function Purposes to check Valid Date Format for MM/YYYY for eCIF
	module.

	For Option Selection.
		Case 0 = Allow NULL And Not greater than today date.
		Case 1 = Allow NuLL and Anydate.
		Case 2 = Not Allow NULL and not greater than today date.
		Case 3 = Not Allow NULL and MUST greater than today date.
		Case else = Not ALLOW NULL and anydate. 
==================================================================*/
function gf_ValidateDateMMYYYY(v_objForm, v_strErrMsg)
{

	with(v_objForm)
	{
		var strErrMsg = "";
		var strErrMsgTemp;
		var Months;
		var Years;
		var lngIdx;
		var FindIndex;
		var Findkey;
		var Option ;
		var blnContinue;
		var Delimeter = '-';
		var RealDate;

		for (lngIdx = 0; lngIdx < elements.length; lngIdx++)
		{
			blnContinue = true;
			Months = elements[lngIdx].name; 
			FindIndex = Months.search("Month");

			if (FindIndex != -1 )
			{
				if ((Months[0] == "M") && (Months[1] == "o") && (Months[2] == "n")  && (Months[3] == "t")  && (Months[4] == "h"))
				{
					Findkey = Months.substring(5, Months.length);

					Option = elements["Option" + Findkey].value;
					Months = elements["Month" + Findkey].value;
					Years = elements["Year" + Findkey].value;

					Description = elements[Findkey].attributes["description"];

					if (typeof(Description) == "undefined")
						Description = "Date (no description) ";
					else
						Description = Description.value;
				
					//check for mandatory date
					if ((Months == "") && (Years == ""))
					{
						if ((Option == "0") || (Option == "1"))
						{
							elements[Findkey].value = "";
							blnContinue = false;
						}
						else
						{
							strErrMsgTemp = Description + " is a Mandatory field!";
							strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
							blnContinue = false;
						}
					}

					//check for valid month input
					if ((isNaN(Months) || Months == "") && blnContinue)
					{
						strErrMsgTemp = "Invalid date format for " + Description + "!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}
				
					//check for valid year input
					if ((isNaN(Years) || Years == "") && blnContinue)
					{
						strErrMsgTemp = "Invalid date format for " + Description + "!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}
				
					Months = parseInt(Months, 10);
					Years = parseInt(Years, 10);

					//check for year range
					if (((Years < 1900) || (Years > 2100)) && blnContinue)
					{
						strErrMsgTemp = "Year format for " + Description + " should be in the range of 1900 - 2100!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}

					//check for month range
					if (((Months > 12) || (Months < 1)) && blnContinue) 
					{
						strErrMsgTemp = "Month format for " + Description + " should be in the range of 1 - 12!";
						strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
						blnContinue = false;
					}

					if (blnContinue)
					{
						RealDate = MonthName(Months) + Delimeter + Years;
						elements[Findkey].value=RealDate;
					}
				}
			}
		}
		
		if (strErrMsg != null && strErrMsg != "")
		{
			if (v_strErrMsg != null)
			{
				strErrMsg = MergeWithDelimeter(v_strErrMsg, "\n", strErrMsg);
			}
			return strErrMsg;
		}
		else
			return v_strErrMsg;
	}
}


/*==================================================================
	This function validates the From Year to To Year range.
	It returns an error message when the To Year is smaller then
	the From Year.
==================================================================*/
function gf_ValidateDateRange(v_strFrDateYear, v_strToDateYear, v_strErrMsg)
{
	var strErrMsg = "";
	var strErrMsgTemp;

	if (v_strToDateYear < v_strFrDateYear)
	{
		strErrMsgTemp = "Invalid Date range!";
		strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
	}

	if (strErrMsg != null && strErrMsg != "")
	{
		if (v_strErrMsg != null)
		{
			strErrMsg = MergeWithDelimeter(v_strErrMsg, "\n", strErrMsg);
		}
		return strErrMsg;
	}
	else
	{
		return v_strErrMsg;
	}
}

/*==================================================================
function to reload action main page
==================================================================*/
function mtdReloadActMain(v_strRefresh, v_strURL)
{
	if (v_strRefresh == "1")
	{
		var objWindow = window.parent[2];
		if (typeof(objWindow) != "undefined")
		{
			if (objWindow.name == "act_sub")
			{
				objWindow.location = v_strURL;
			}
		}
	}

}


/*==================================================================
	This function validates the From Date to To Date range.
	It returns an error message when the To Date is smaller than
	the From Date or the To Date is same as the From Date.
==================================================================*/
function gf_ValidateFrToDateRange(day1, month1, year1, day2, month2, year2, v_strErrMsg)
{
	var strErrMsg = "";
	var strErrMsgTemp = "";
	
	if((CompareDateEx(day1, month1, year1, day2, month2, year2) == "<") || (CompareDateEx(day1, month1, year1, day2, month2, year2) == "="))
	{
		strErrMsgTemp = "Invalid Date range!";
		strErrMsg = MergeWithDelimeter(strErrMsg, "\n", strErrMsgTemp);
	}

	if (strErrMsg != null && strErrMsg != "")
	{
		if (v_strErrMsg != null)
		{
			strErrMsg = MergeWithDelimeter(v_strErrMsg, "\n", strErrMsg);
		}
		return strErrMsg;
	}
	else
	{
		return v_strErrMsg;
	}

}

//============== disabled right click ===============================

<!--

//Disable right click script III- By Renigade (renigade@mediaone.net)
//For full source code, visit http://www.dynamicdrive.com

//var message="";
//var alertMesg="Message ... "
///////////////////////////////////
//function clickIE() {if (document.all) {(message);return false;}}
//function clickNS(e) {if 
//(document.layers||(document.getElementById&&!document.all)) {
//if (e.which==2||e.which==3) {(message);return false;}}}
//if (document.layers) 
//{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
//else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}

//Display message when user right click 
//document.oncontextmenu=new Function("alert(alertMesg); return false")

//
//document.oncontextmenu=new Function("return false")


// --> 

