function getLeft(varString,Length) {
	return varString.substring(0,Length)
};

function getRight(varString,Length) {
	return varString.substring(varString.length-Length)
};

function getMid(varString,Start,Length) {
	if (arguments.length < 3) Length = getLength(varString);
	return varString.substring(Start-1,(Start+Length)-1)
};

function getUpperCase(varString) {
	return varString.toUpperCase()
};

function getLowerCase(varString) {
	return varString.toLowerCase()
};

function getReverse(varString) {
	var strResult = "";
	for (var i=getLength(varString)-1; i>=0; --i) {
		strResult = strResult + varString.charAt(i);
	};
	return strResult;
};

function getReplace(varString,strRead,strWrite,Start,Sensitivity) {
	var strResult = "";
	if (arguments.length < 5) {
		Sensitivity = 0;
		if (arguments.length < 4) Start = 1;
	};	
	for (var i=Start-1; i<=getLength(varString)-1; ++i) {
		if (Sensitivity) {
			if (getMid(varString,i+1,getLength(strRead))==strRead) {
				strResult = strResult + strWrite; i = i + getLength(strRead) - 1;
			} else strResult = strResult + varString.charAt(i);
		} else {
			if (getUpperCase(getMid(varString,i+1,getLength(strRead)))==getUpperCase(strRead)) {
				strResult = strResult + strWrite; i = i + getLength(strRead) - 1;
			} else strResult = strResult + varString.charAt(i);	
		};
	};
	return getLeft(varString,Start-1) + strResult;	
};

function getLength(varString) {
	return varString.length;
};

function getLeftTrim(varString,StringForTrimed) {
	if (arguments.length < 2) StringForTrimed = " ";
	try {
		for (var i=0; i<=varString.length-1; ++i) {
			if (varString.charAt(i)!=StringForTrimed) {
				return getMid(varString,i+1,getLength(varString))
			};
		};
	} catch(e) { return "" };
	return ""
};

function getRightTrim(varString,StringForTrimed) {
	if (arguments.length < 2) StringForTrimed = " ";
	try {
		for (var i=getLength(varString)-1; i>=0; --i) {
			if (varString.charAt(i)!=StringForTrimed) {
				return getMid(varString,1,i+1)
			};
		};
	} catch(e) {return ""}
	return ""
};

function getTrim(varString,StringForTrimed) {
	if (arguments.length < 2) StringForTrimed = " ";
	return getLeftTrim(getRightTrim(varString,StringForTrimed),StringForTrimed)
};

function getChar(varString,Index) {
	return varString.charAt(Index-1)
};

function getRepeat(varString,Length) {
	var strResult = "";
	for (var i=1; i<=Length; ++i) {
		strResult = strResult + varString;
	};
	return strResult;
};

function getFind(varString,strFind,Start,SearchType,Sensitivity) {
	if (arguments.length < 5) {
		Sensitivity = 0;
		if (arguments.length < 4) {
			SearchType = 0;
			if (arguments.length < 3) Start = 1;
		};
	};
	if (! SearchType) {
		for (var i=Start-1; i<=getLength(varString)-1; ++i) {
			if (Sensitivity) {
				if (getMid(varString,i+1,getLength(strFind))==strFind) return i+1
			} else {
				if (getUpperCase(getMid(varString,i+1,getLength(strFind)))==getUpperCase(strFind)) return i+1;
			};
		};
	} else {
		for (var i=Start-1; i>=0; --i) {
			if (Sensitivity) {
				if (getMid(varString,i+1,getLength(strFind))==strFind) return i+1
			} else {
				if (getUpperCase(getMid(varString,i+1,getLength(strFind)))==getUpperCase(strFind)) return i+1;
			};
		};
	};
	return 0;
};

function getInsert(varString,strInsert,inIndex) {
	if (arguments.length < 3) inIndex = 1;
	return getLeft(varString,inIndex-1) + strInsert + getMid(varString,inIndex);
};

function getRemove(varString,Start,Length) {
	if (arguments.length < 3) Length = getLength(varString);
	return getLeft(varString,Start-1) + getMid(varString,Start+Length);
};

function getCount(varString,strFind,Sensitivity) {
	var Count = 0;	
	if (arguments.length < 3) Sensitivity = 0;
	for (var i=0; i<=getLength(varString)-1; ++i) {
		if (Sensitivity) {
			if (getMid(varString,i+1,getLength(strFind))==strFind) {
				Count++ ; i = i + getLength(strFind) - 1;
			};
		} else {
			if (getUpperCase(getMid(varString,i+1,getLength(strFind)))==getUpperCase(strFind)) {
				Count++ ; i = i + getLength(strFind) - 1;
			};	
		};
	};
	return Count;
};

function getSort(varString,SortType,Start) {
	if (arguments.length < 3) {
		Start = 1;	
		if (arguments.length < 2) SortType = 1;
	};
	var arrResult = new Array();
	for (var i=Start; i<=getLength(varString); ++i) {
		arrResult[i-Start] = getChar(varString,i)
	};
	arrResult.sort();
	if (SortType) { 
		return getLeft(varString,Start-1)+getJoinArray(arrResult.sort(),""); 
	} else {
		return getLeft(varString,Start-1)+getJoinArray(arrResult.reverse(),"");
	};	
}

function getToUp(Expression) {
	try {
		return Math.ceil(eval(getToString(Expression)));
	} catch(e) { };
	return ""	
};

function getToDown(Expression) {
	try {
		return Math.floor(eval(getToString(Expression)));
	} catch(e) { };
	return ""	
};

function getRound(Expression,Decimal) {
	if (arguments.length < 2) Decimal = 2;
	try {	
		if (Decimal > 0) {
			var v_intNumber = parseFloat("1" + getRepeat("0",Decimal));
			strResult = Math.round(Expression * v_intNumber) / v_intNumber;
			return strResult;
		} else { return Math.round(eval(getToString(Expression))) };	
	} catch(e) { };
	return ""	
};

function getAbsolute(Expression) {
	try {
		return Math.abs(eval(getToString(Expression)));
	} catch(e) { };
	return ""	
};

function getExponent(Expression,Deegre) {
	if (arguments.length < 2) Deegre = 2;
	try {
		return Math.pow(eval(getToString(Expression)),Deegre);
	} catch(e) { };
	return ""	
};

function getDecimal(Expression) {
	try {
		var arrNumber = getToArray(getToString(eval(getToString(Expression))),".");
		if (arrNumber.length > 1) return getToNumeric("0."+arrNumber[1]); else return 0;
	} catch(e) { };
	return ""	
};

function getToNumeric(Expression) {
	try {
		return parseFloat(eval(getToString(Expression)));
	} catch(e) { };
	return ""
};

function getToString(Expression) {
	return Expression.toString();
};

function getToDate(Expression,Format) {
	if (arguments.length < 2) Format = 0;
	var arrDate = getToArray(Expression,"/");
	if (getLength(getToString(arrDate[2])) < 3) 
		var strYear = ((getToNumeric(arrDate[2]) > 50) ? "19" : "20") + getRight("0"+arrDate[2],2);
	else var strYear = getToString(arrDate[2]);	
	if (Format==0) 
		var DateResult = new Date(strYear,arrDate[0]-1,arrDate[1]);
	else if(Format==1)
		var DateResult = new Date(strYear,arrDate[1]-1,arrDate[0]);
	if (isNaN(DateResult)) return 0 ; else return DateResult;	
};

function getToArray(varString,Delimiter) {
	var arrResult = new Array();
	if (arguments.length < 2) Delimiter = ",";
	var i = 1, j = 0, k = 0;	
	var l = getLength(Delimiter);
	do {
		j = getFind(varString,Delimiter,i);
		if (j) {
			arrResult[k] = getMid(varString,i,j-i);
			i = j + l;
			k = k + 1;
		} else arrResult[k] = getMid(varString,i);
	} while(j);
	return arrResult;	
}

function getJoinArray(varArray,Delimiter) {
	if (arguments.length < 2) Delimiter = ",";
	return varArray.join(Delimiter);	
}

function getDay(varDate) {
	var GetDate = new Date(varDate);
	return getToNumeric(GetDate.getDate());
};

function getMonth(varDate) {
	var GetDate = new Date(varDate);
	return getToNumeric(GetDate.getMonth()+1);
};

function getYear(varDate,nDigits) {
	if (arguments.length < 2) nDigits = 1;
	var GetDate = new Date(varDate);
	if (GetDate.getFullYear() < 100) var strYear = "19" + getRight("0" + getToString(GetDate.getFullYear()),2);
	else var strYear = getToString(GetDate.getFullYear());
	if (nDigits) return getToNumeric(strYear);else return getToNumeric(getRight(strYear,2));
};

function getWeekDay(varDate) {
	var GetDate = new Date(varDate);
	return getToNumeric(GetDate.getDay());
};

function getMonthName(Month,Type,Length) {
	if (arguments.length < 3) {
		Length = 1;	
		if (arguments.length < 2) Type = 0;
	};
	if (Type==0) 
		var arrMonth = new Array("January","February","March","April","May","June","July","August","September","October","November","December")
	else if(Type==1)
		var arrMonth = new Array("Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember")
	if (Month <= 12 && Month >= 1) {
		if (Length == 0) return getLeft(arrMonth[Month-1],3);
		else if (Length == 1) return arrMonth[Month-1];
	} else return 0
};

function getWeekDayName(Day,Type,Length) {
	if (arguments.length < 3) {
		Length = 1;	
		if (arguments.length < 2) Type = 0;
	};
	if (Type==1) 
		var arrDay = new Array("Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu")
	else if(Type==0)
		var arrDay = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
	if (Day <= 6 && Day >= 0) {
		if (Length == 0) return getLeft(arrDay[Day],3);
		else if (Length == 1) return arrDay[Day]; 
	} else return 0
};

function getHour(varDate) {
	var GetDate = new Date(varDate);
	return getToNumeric(GetDate.getHours());
};

function getMinute(varDate) {
	var GetDate = new Date(varDate);
	return getToNumeric(GetDate.getMinutes());
};

function getSecond(varDate) {
	var GetDate = new Date(varDate);
	return getToNumeric(GetDate.getSeconds());
};

function getNow() {
	var GetDate = new Date();
	return GetDate;
};

function getArrayIndex(varArray,strSearch,Start,Sensitivity) {
	try {
		if (arguments.length < 4) {
			Sensitivity = 0;
			if (arguments.length < 3) Start = 0;
		};
		for (var i=Start; i<=varArray.length-1;++i) {
			if (Sensitivity) {
				if (varArray[i]==strSearch) return i;
			} else {
				if (varArray[i].toUpperCase()==strSearch.toUpperCase()) return i;
			};
   	    };
	} catch(e) { };
	return -1
};

function getArraySort(varArray,SortType) {
	var arrResult = new Array();
	for (var i=0; i<=varArray.length-1;++i)	arrResult[i] = varArray[i];	
	try {
		if (arguments.length < 2) SortType = 1;
		arrResult.sort();
		if (! SortType) arrResult.reverse();
	} catch(e) {};
	return arrResult;
};

function getArrayInsert(varArray,Value,Index) {
	if (varArray.length >= Index || arguments.length < 3) { 
		var arrResult = new Array();
		for (var i=0; i<=varArray.length-1;++i)	arrResult[i] = varArray[i];	
		arrResult[arrResult.length] = "";
		if (arguments.length < 3) {
			Index = arrResult.length-1;
			if (arguments.length < 2) Value = "";
		};
		for (var i=arrResult.length-1; i>=Index+1; --i) {
			arrResult[i] = arrResult[i-1];	
		};
		arrResult[Index] = Value;	
		return arrResult;
	} else {
		return varArray;
	};
};

function getArrayRemove(varArray,Index) {
	if (varArray.length > Index) { 
		var arrResult = new Array();
		for (var i=0; i<=varArray.length-1;++i)	arrResult[i] = varArray[i];
		arrResult[Index] = "~!@#$%^&*()_+";
		if (Index == 0) {
			var strArray = getReplace(getJoinArray(arrResult),"~!@#$%^&*()_+,","");
		} else {
			var strArray = getReplace(getJoinArray(arrResult),",~!@#$%^&*()_+","");
		};
		arrResult = getToArray(strArray);
		varArray = arrResult;
		return arrResult;
	} else {
		return varArray;
	};
};

function isNumeric(Expression) {
	return ! isNaN(Expression)
};

function isDate(Expression,Format) {
	var dtValue = new Date(Expression);
	if (isNaN(dtValue)) return false;
	if (getToString(dtValue) == getToString(Expression)) return true;	
	if (arguments.length < 2) Format = 0;
	var arrDate = getToArray(getToString(Expression),"/");
	if (arrDate.length == 3) {// && vDate != 0) {
		var strYear1,strYear2;
		if (getLength(getToString(arrDate[2])) < 3) 
			strYear1 = ((getToNumeric(arrDate[2]) > 50) ? "19" : "20") + getRight("0"+arrDate[2],2);
		else strYear1 = getToString(arrDate[2]);	
		var vDate = getToDate(getToString(arrDate[0])+"/"+getToString(arrDate[1])+"/"+strYear1,Format);
		if (vDate == 0) return false;
		if (getLength(getToString(getYear(vDate))) < 3) 
			strYear2 = "19" + getRight("0"+getToString(getYear(vDate)),2);
		else strYear2 = getToString(getYear(vDate));

		if (Format==0) {
			if (getMonth(vDate)==arrDate[0] && getDay(vDate)==arrDate[1] && strYear1==strYear2) 
				return true;
		} else if (Format==1) {
			if (getMonth(vDate)==arrDate[1] && getDay(vDate)==arrDate[0] && strYear1==strYear2) 
				return true;
		};
	};
	return false
};

function isTime(Expression) {
	var arrTimer = getToArray(getToString(Expression),":");
	if (arrTimer.length == 3) {
		if (getToNumeric(arrTimer[0]) >= 0 && getToNumeric(arrTimer[0]) <= 23 &&
			getToNumeric(arrTimer[1]) >= 0 && getToNumeric(arrTimer[1]) <= 59 &&
			getToNumeric(arrTimer[2]) >= 0 && getToNumeric(arrTimer[2]) <= 59)	
			 return true
	};
	return false
};

function isArray(Expression) {
	try {
		getJoinArray(Expression); return true
	} catch(e) {};	
	return false
};

function isEmpty(Expression) {
	try {
		if (getLength(getToString(Expression))>0) return false ; else return true
	} catch(e) { return true };	
};

function isStringExist(Expression,Options,Delimiter,MatchType) {
	if (arguments.length < 4) {
		MatchType = 0;
		if (arguments.length < 3) {
			Delimiter = ",";
			if (arguments.length < 2) {
				var Options = "!0@0#0$0%0^0&0*0(0)0-0+0=0`0~0{0}0[0]0:0;0\"0'0<0>0.0?0/0\\0|0,0 ";
				Delimiter = "0";
			};
		};
	};	
	var arrChar = getToArray(Options,Delimiter);

	for (var i=0; i<=arrChar.length-1; ++i) {
		if (MatchType) {
			if (Expression == arrChar[i]) return true
		} else {
			if (getFind(Expression,arrChar[i])) return true
		};
	};
	return false;
};

function isEmail(who) {
	var email=/^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,6}$/i;
	return(email.test(getTrim(who)));
}

function isEmail2(emailStr) {
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	//var matchArray=emailStr.match(emailPat);
	var matchArray=emailStr.toLowerCase();
	matchArray=matchArray.match(emailPat);

	if (matchArray==null) {
		return false;
	}
		
	var user=matchArray[1];
	var domain=matchArray[2];

	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
	  }
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
		}
	}

	if (user.match(userPat)==null) {
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false;
		  }
		}
		return true;
	}

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
		}
	}

	if (checkTLD && domArr[domArr.length-1].length!=2 && 
	domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
	}

	if (len<2) {
		return false;
	}

	return true;
}

/*
function isEmail(Expression) {
	var NotAllowedChar = "!.#.$.%.^.&.*.(.).+.=.`.~.{.}.[.].:.;.\".'.<.>.?./.\\.|.,. ";		
	Expression = getTrim(Expression);	
	if (getCount(Expression,"<") == 1 && getCount(Expression,">") == 1) {
		Expression = getMid(Expression,getFind(Expression,"<")+1,getLength(Expression)-getFind(Expression,"<")-1);	
	};
	if (getCount(Expression,"@") == 1 && ! isStringExist(Expression,NotAllowedChar,".")) { // && ! isStringExist(getLeft(Expression,1))) {
		var arrEmail = getToArray(Expression,"@");
		if (getLength(arrEmail[0]) > 0 && getLeft(arrEmail[1],1) != "." && getRight(arrEmail[1],1) != "." && ! getFind(arrEmail[0],".") && getFind(arrEmail[1],".") && ! getFind(arrEmail[1],"..")) 
			return true
	};
	return false
};
*/

function getIndexInArray(varArray,inArrayIndex,strSearch) {
	for (var i=0; i<=varArray.length-1;++i) {
		if (varArray[i][inArrayIndex].toUpperCase()==strSearch.toUpperCase()) return i;
       };
	return -1
}

function getIndexInArray3Dim(varArray,absoluteIndex,staticIndex,inArrayIndex,strSearch) {
	if (absoluteIndex==0) {
		for (var i=0; i<=varArray.length-1;++i) {
			if (varArray[i][staticIndex][inArrayIndex].toUpperCase()==strSearch.toUpperCase()) return i;
		};
    } else {
		for (var i=0; i<=varArray[staticIndex].length-1;++i) {
			if (varArray[staticIndex][i][inArrayIndex].toUpperCase()==strSearch.toUpperCase()) return i;
		};
    };
	return -1
}
  
function getIndexInArray5Dim(varArray,absoluteIndex,staticIndex1,staticIndex2,staticIndex3,inArrayIndex,strSearch) {
	switch (absoluteIndex) {
		case 0	:
			for (var i=0; i<=varArray.length-1;++i) 
				if (varArray[i][staticIndex1][staticIndex2][staticIndex3][inArrayIndex].toUpperCase()==strSearch.toUpperCase()) return i;
			break;		
		case 1	:
			for (var i=0; i<=varArray[staticIndex1].length-1;++i) 
				if (varArray[staticIndex1][i][staticIndex2][staticIndex3][inArrayIndex].toUpperCase()==strSearch.toUpperCase()) return i;
			break;		
		case 2	:
			for (var i=0; i<=varArray[staticIndex1][staticIndex2].length-1;++i) 
				if (varArray[staticIndex1][staticIndex2][i][staticIndex3][inArrayIndex].toUpperCase()==strSearch.toUpperCase()) return i;
			break;		
		case 3	:
			for (var i=0; i<=varArray[staticIndex1][staticIndex2][staticIndex3].length-1;++i) 
				if (varArray[staticIndex1][staticIndex2][staticIndex3][i][inArrayIndex].toUpperCase()==strSearch.toUpperCase()) return i;
			break;		
	};
	return -1
}
function ShowDateTime(object,ShowDate,ShowTime,ShowFirst,MDY,Separator,TimeSeparator,
	DateSeparator,MonthName,ShowDay,DayPosition,DaySeparator,DayName,NamingType,AutoSizeObject) {

	if (arguments.length < 15) {
		AutoSizeObject = 1;
		if (arguments.length < 14) {
			NamingType = 0;
			if (arguments.length < 13) {
				DayName = 2;
				if (arguments.length < 12) {
					DaySeparator = ", ";
					if (arguments.length < 11) {
						DayPosition = 0;
						if (arguments.length < 10) {
							ShowDay = 0;
							if (arguments.length < 9) {
								MonthName = 0;
								if (arguments.length < 8) {
									DateSeparator = "/";
									if (arguments.length < 7) {
										TimeSeparator = ":";
										if (arguments.length < 6) {
											Separator = "  ";
											if (arguments.length < 5) {
												MDY = 1;
												if (arguments.length < 4) {
													ShowFirst = 1;
													if (arguments.length < 3) {
														ShowTime = 1;
														if (arguments.length < 2) {
															ShowDate = 1;
														};
													};
												};
											};
										};
									};
								};
							};
						};
					};
				};
			};
		};
	};		
	varObject = object;
	varShowDate = ShowDate;
	varShowTime = ShowTime;
	varShowFirst = ShowFirst;
	varMDY = MDY;
	varSeparator = Separator;
	varTimeSeparator = TimeSeparator;
	varDateSeparator = DateSeparator;
	varMonthName = MonthName;
	varShowDay = ShowDay;
	varDayPosition = DayPosition;
	varDaySeparator = DaySeparator;
	varDayName = DayName;
	varNamingType = NamingType;
	varAutoSizeObject = AutoSizeObject;

	DateTime = new Date();
	strTime = "";
	strDate = "";	
	strDateTime = "";
	if (varShowTime) 
		strTime = getRight("0"+(DateTime.getHours()),2) + varTimeSeparator + getRight("0"+(DateTime.getMinutes()),2) + varTimeSeparator + getRight("0"+(DateTime.getSeconds()),2);
	if (varShowDate) {
		if (varMonthName==0) strMonth = getRight("0"+getMonth(DateTime),2);
		else if (varMonthName==1) strMonth = getMonthName(getMonth(DateTime),varNamingType,0);
		else if (varMonthName==2) strMonth = getMonthName(getMonth(DateTime),varNamingType,1);
		else strMonth = "";
		if (varMDY==0 || varMDY==2) strYear = getRight("0"+getToString(getYear(DateTime,0)),2);
		else if (varMDY==1 || varMDY==3) strYear = getToString(getYear(DateTime,1));
		else strYear = "";

		if (varMDY==0 || varMDY==1) 
			strDate = strMonth + varDateSeparator + getRight("0"+getDay(DateTime),2) + varDateSeparator + strYear;
		else if (varMDY==2 || varMDY==3) 
			strDate = getRight("0"+getDay(DateTime),2) + varDateSeparator + strMonth + varDateSeparator + strYear;
		else strDate = "";
		
		if (varShowDay) {
			if (varDayName==0) strDay = getRight("0"+getWeekDay(DateTime),2);
			else if (varDayName==1) strDay = getWeekDayName(getWeekDay(DateTime),varNamingType,0);
			else if (varDayName==2) strDay = getWeekDayName(getWeekDay(DateTime),varNamingType,1);
			else strDay = "";
			if (varDayPosition==0) strDate = strDay + varDaySeparator + strDate;
			else if (varDayPosition==1) strDate = strDate + varDaySeparator + strDay;
		};
	};
	if (varShowFirst==0)
		strDateTime = strTime + varSeparator + strDate;				
	else strDateTime = strDate + varSeparator + strTime;				
	
	varObject.value = strDateTime;
	if (varAutoSizeObject) varObject.size = strDateTime.length;
	varTimer = setTimeout("ShowDateTime(varObject,varShowDate,varShowTime,varShowFirst,varMDY,varSeparator,varTimeSeparator,varDateSeparator,varMonthName,varShowDay,varDayPosition,varDaySeparator,varDayName,varNamingType,varAutoSizeObject)",1000);
};

function getFormatNumber(Expression,Decimal,CDigit,CDec,nSeparating,NegativeSign) {
	if (arguments.length < 6) {
		NegativeSign = 0;
		if (arguments.length < 5) {
			nSeparating = 3;
			if (arguments.length < 4) {
				CDec = ".";
				if (arguments.length < 3) {
					CDigit = ",";
					if (arguments.length < 2) Decimal = 2;
				};
			};
		};
	};
	
	try {
		var isNegative = false;
		var Expression = new String(Expression);
		Expression = getLeftTrim(Expression,"0");
		if (isEmpty(Expression)) Expression = "0";
		if (NegativeSign == "-") NegativeSign = 0; else if (NegativeSign == "()") NegativeSign = 1;
		if (Expression == "-") return "-";
		if (getLeft(getToString(getToNumeric(eval(getToString(Expression)))),1) == "-") {
			Expression = getRemove(Expression,1,1); isNegative = true;
		};
		if (Decimal == 0) Expression = getRound(getToNumeric(eval(getToString(Expression))),0);
		var arrNumber = getToArray(getToString(eval(getToString(Expression))),".");
		var strDigit = getToString(getToNumeric(arrNumber[0])); 
		var strResult = "";

		if (Decimal > 0) {
			var strDec = getToString(getRound(getDecimal(getToNumeric(eval(getToString(Expression)))),Decimal));
			var arrDec = getToArray(strDec,".");
			if (arrDec.length == 2) strDec = arrDec[1] + getRepeat("0",Decimal-getLength(arrDec[1]));
			else strDec = getRepeat("0",Decimal);
			strDigit = getToString(getToNumeric(strDigit)+getToNumeric(arrDec[0]));
		} ;
		
		for (var i=getLength(strDigit); i>0; --i) {
			strResult = getChar(strDigit,i) + strResult;
			if (getLength(getReplace(strResult,CDigit,""))%nSeparating==0) {
				strResult = CDigit + strResult;
			};
		};
		if (getLeft(strResult,1)==CDigit) strResult = getMid(strResult,2);
		if (Decimal > 0) strResult = strResult + CDec + strDec;
	} catch(e) { return "" };

	if (strResult=="NaN") return ""; else {
		if (isNegative) {
			if (NegativeSign == 0) strResult = "-" + strResult;			
			else if (NegativeSign == 1) strResult = "(" + strResult + ")";
		};
		return strResult;
	};	
};

function FormatInputNumber(TextObject,isFormatMoney) {
	var nDec = 0;
	var Value = TextObject.value;
	var intMaxChar = TextObject.maxLength;
	var strNumberOnly
	
	strNumberOnly = getReplace(getReplace(getReplace(Value,",",""),".",""),"-","")
	
	if (arguments.length < 2) isFormatMoney = true;

	if ((window.event.keyCode >= 48 && window.event.keyCode <= 57) || 
		(window.event.keyCode >= 96 && window.event.keyCode <= 105) ||
		((window.event.keyCode == 110 || window.event.keyCode == 190) && getCount(Value,".") == 0) || 
		((window.event.keyCode == 109 || window.event.keyCode == 189) && getLength(Value) == 0)) {
		
		if (window.event.keyCode == 110 || window.event.keyCode == 190) {
			Value += ".";
		} else if (window.event.keyCode == 109 || window.event.keyCode == 189) {
			Value += "-";
		} else if (window.event.keyCode >= 96 && window.event.keyCode <= 105) {
			Value += String.fromCharCode(window.event.keyCode-48);
		} else {
			Value += String.fromCharCode(window.event.keyCode);
		};
		event.returnValue=false
		window.event.keyCode = null;
	} else if (window.event.keyCode >= 65) {
		event.returnValue=false
		window.event.keyCode = null;
		return;
	} else {
		return;
	};
	
	if (getLength(strNumberOnly) < intMaxChar) {
		if (getCount(Value,".") == 0) {
			if (isFormatMoney) {
				TextObject.value = getFormatNumber(getReplace(Value,",",""),nDec);
			} else {
				if (Value != "-") {
					TextObject.value = getToNumeric(getReplace(Value,",",""));	
				} else {
					TextObject.value = Value;	
				};
			};
			if (getToNumeric(getReplace(TextObject.value,",","")) == 0 && getLeft(Value,1) == "-" && getLength(Value) > 1) {
				TextObject.value = "-" + TextObject.value;
			};
		} else {
			TextObject.value = Value;
		};
	
		if (getTrim(TextObject.value) == ".") TextObject.value = "0.";
		if (getTrim(TextObject.value) == "-.") TextObject.value = "-0.";
	};
};

function getIndexInSelect(SelectObject,strSearch,Start,Sensitivity) {
	try {
		if (arguments.length < 4) {
			Sensitivity = 0;
			if (arguments.length < 3) Start = 0;
		};
		for (var i=Start; i<=SelectObject.length-1;++i) {
			if (Sensitivity) {
				if (SelectObject[i].value==strSearch) return i;
			} else {
				if (SelectObject[i].value.toUpperCase()==strSearch.toUpperCase()) return i;
			};
   	    };
	} catch(e) { };
	return -1
};

	function getFormatDateTime(p_dtValue,p_strFormat)
	{
		var v_strDisplay
		var v_strResult

		if (arguments.length < 2) {
			p_strFormat = "MMM-DD-YYYY"
		};
		
		if (isDate(p_dtValue) &&  !isEmpty(p_dtValue))
		{	p_dtValue = new Date(p_dtValue)
			v_strDisplay = p_strFormat
			v_strDisplay.toUpperCase();
			v_strDisplay = getReplace(v_strDisplay, "DD", getRight("0" + getDay(p_dtValue), 2))
			v_strDisplay = getReplace(v_strDisplay, "D$", getDay(p_dtValue))				
			v_strDisplay = getReplace(v_strDisplay, "MMMM", getMonthName(getMonth(p_dtValue),0,1))
			v_strDisplay = getReplace(v_strDisplay, "MMM", getMonthName(getMonth(p_dtValue),0,0))
			v_strDisplay = getReplace(v_strDisplay, "MM", getRight("0" + getMonth(p_dtValue), 2))
			v_strDisplay = getReplace(v_strDisplay, "M$", getMonth(p_dtValue))				
			v_strDisplay = getReplace(v_strDisplay, "YYYY", getYear(p_dtValue))
			v_strDisplay = getReplace(v_strDisplay, "YYY", getYear(p_dtValue))
			
			v_strDisplay = getReplace(v_strDisplay, "YY", getRight(getToString(getYear(p_dtValue)), 2))
			v_strDisplay = getReplace(v_strDisplay, "Y$", getRight(getToString(getYear(p_dtValue)), 2))
			v_strDisplay = getReplace(v_strDisplay, "WWWW", getWeekDayName(getWeekDay(p_dtValue),0,1))
			v_strDisplay = getReplace(v_strDisplay, "WWW", getWeekDayName(getWeekDay(p_dtValue),0,0))
			v_strDisplay = getReplace(v_strDisplay, "WW", getRight("0" + getWeekDay(p_dtValue),2))
			v_strDisplay = getReplace(v_strDisplay, "W$", getWeekDay(p_dtValue))				
				
			v_strDisplay = getReplace(v_strDisplay, "HH", getRight("0" + getHour(p_dtValue), 2))
			v_strDisplay = getReplace(v_strDisplay, "H$", getHour(p_dtValue))
			v_strDisplay = getReplace(v_strDisplay, "NN", getRight("0" + getMinute(p_dtValue), 2))
			v_strDisplay = getReplace(v_strDisplay, "N$", getMinute(p_dtValue))				
			v_strDisplay = getReplace(v_strDisplay, "SS", getRight("0" + getSecond(p_dtValue), 2))
			v_strDisplay = getReplace(v_strDisplay, "S$", getSecond(p_dtValue))				

			v_strResult = v_strDisplay
		}
		else
		{
			v_strResult = p_dtValue
		}
				
		return v_strResult
	}

function InputNumber(TextObject, isDecimalIncluded, isNegativeAllowed, strToEvent) {

	if (arguments.length < 4) {
		strToEvent = "onkeydown";
		if (arguments.length < 3) {
			isNegativeAllowed = true;
			if (arguments.length < 2) {
				isDecimalIncluded = true;
			};
		};
	};	
	
	if (getLowerCase(strToEvent) == "onpropertychange" || getLowerCase(strToEvent) == "onblur") {
		if (!isNumeric(TextObject.value) || (!isDecimalIncluded && getFind(TextObject.value,".") != 0)
			|| (!isNegativeAllowed && getToNumeric(TextObject.value) < 0 )) {

			TextObject.value = "";
		};
	};
	
	if (TextObject.readOnly == true) return;

	if (getLowerCase(strToEvent) != "onkeydown") return;
	
	var Value = TextObject.value;
	var strTemp;

	if (getLowerCase(strToEvent) == "onpaste" && window.clipboardData != "undefined") {
		var strClipboardText = window.clipboardData.getData("Text");
		if (!isNumeric(strClipboardText) || (!isDecimalIncluded && getFind(strClipboardText,".") != 0)
			|| (!isNegativeAllowed && getToNumeric(strClipboardText) < 0 )) {
		
			window.event.returnValue = false;
		};
	};

	if ((window.event.keyCode >= 48 && window.event.keyCode <= 57) || 
		(window.event.keyCode >= 96 && window.event.keyCode <= 105) ||
		(((window.event.keyCode == 110 || window.event.keyCode == 190) && isDecimalIncluded) && getCount(Value,".") == 0) || 
		(((window.event.keyCode == 109 || window.event.keyCode == 189) && isNegativeAllowed) && getCount(Value,"-") >= 0) || 
		((window.event.keyCode == 107) && getCount(Value,"-") > 0)) { 


		if (window.event.altKey) {
			window.event.returnValue = false;
			window.event.keyCode = null;
			return;
		};

		if (window.event.keyCode == 107) {
			TextObject.value = getReplace(TextObject.value,"-","");
		} else if (window.event.keyCode == 110 || window.event.keyCode == 190) {
			Value = ReplaceSelection(TextObject, ".");
		} else if (window.event.keyCode == 109 || window.event.keyCode == 189) {
			if (getCount(Value,"-") == 0) {
				TextObject.value = "-" + TextObject.value;
			} else {
				TextObject.value = getReplace(TextObject.value,"-","");
			};
		} else if (window.event.keyCode >= 96 && window.event.keyCode <= 105) {
			Value = ReplaceSelection(TextObject, String.fromCharCode(window.event.keyCode-48));
		} else {
			Value = ReplaceSelection(TextObject, String.fromCharCode(window.event.keyCode));
		};
		window.event.returnValue = false;
		window.event.keyCode = null;
	} else if (window.event.keyCode >= 65 || window.event.keyCode == 32) {
		if (! window.event.ctrlKey) {
			window.event.returnValue = false;
			window.event.keyCode = null;
			return;
		};
	} else {

	};

	if (window.event.keyCode != 46 && window.event.keyCode != 8) { 
		if (getLeft(TextObject.value,1) == ".") TextObject.value = "0." + getMid(TextObject.value,2);
		if (getLeft(TextObject.value,2) == "-.") TextObject.value = "-0." + getMid(TextObject.value,3);	
		if (getCount(TextObject.value,"-") > 0 && getLeft(TextObject.value,1) != "-") {
			TextObject.value = "-" + getReplace(TextObject.value,"-","");				
		};
		
		strTemp = getToArray(getReplace(TextObject.value,"-","") + ".",".")[0];

		if ((getFind(strTemp,"0")==1 && getFind(TextObject.value,".")==0) ||
			(getLength(strTemp) > 1 && getFind(strTemp,"0")==1 && getFind(TextObject.value,".")!=0)) {

			if (getFind(TextObject.value,".") != 0) {
				if (getFind(TextObject.value,"-") != 0) {
					TextObject.value = ((getLeftTrim(TextObject.value,"0")=="") ? "-0" : "-") + getLeftTrim(getReplace(TextObject.value,"-",""),"0");
				} else {					
					TextObject.value = ((getLeftTrim(strTemp,"0")=="") ? "0" : "") + getLeftTrim(TextObject.value,"0");
				};
			} else {				
				if (getFind(TextObject.value,"-") != 0) {
					TextObject.value = "-" + getLeftTrim(getReplace(TextObject.value,"-",""),"0");
				} else {
					TextObject.value = ((getLeftTrim(TextObject.value,"0")=="") ? "0" : "") + getLeftTrim(TextObject.value,"0");
				};			
			};			
		};												
	};
};

function ReplaceSelection(objSelected, strReplace) {
	var objRange = document.selection.createRange();
	var strSelected = objRange.text;

	if (objRange.parentElement() == objSelected) {
		objRange.text = strReplace;

//		if (strSelected != "") {
			objRange.moveStart('character', 0);
			objRange.select();
//		} 
	};	
};

function checkTextAreaLength(p_objValue,p_intMaxLength){
	if (p_objValue.value.length > p_intMaxLength) {
		p_objValue.value = p_objValue.value.substring(0, p_intMaxLength);
	}
}

function GAB_clickButton(p_strNextFunc)
{ if (document.all) document.all.GabMsg.style.visibility='hidden';
  if (document.layers) document.GabMsg.visibility='hidden';
  if (document.getElementById) document.getElementById('GabMsg').style.visibility='hidden';
}

function getAlertBox(p_strCaption)
{	var ix, strValue;
	var LeftPos,TopPos;
	var MsgBoxWidth,MsgBoxHeight;
	MsgBoxWidth = 300;
	MsgBoxHeight = 100;
	LeftPos = window.screen.width  / 2 - (MsgBoxWidth / 2);
	TopPos = window.screen.height / 2 - (MsgBoxHeight/2) - 100;
		
		
	document.write('<style>')
	document.write('	.GabInput{FONT-SIZE: 8pt;FONT-FAMILY: verdana;WIDTH: 60px;}')
	document.write('	.GabTd{FONT-SIZE: 8pt;FONT-FAMILY: verdana}')
	document.write('</style>')

	document.write('<div id="GabMsg" style="position:absolute; z-index:100; left:'+ LeftPos +'; top:'+ TopPos +'; width:'+ MsgBoxWidth +'; height:'+ MsgBoxHeight +'; border-width:5; border-style:ridge; background-color: #ECE9D8">')
	document.write('		<table width="100%" border="0" cellspacing="0" cellpadding="0">')
	document.write('		  <tr> ')
	document.write('		    <td colspan="2"><div align="center"></div></td>')
	document.write('		  </tr>')
	document.write('		  <tr> ')
	document.write('			<td width="20%" align=center><div align="left"><img src="../Images/info.gif" width="43" border=0 height="37"></div></td>')
	document.write('		    <td width="80%" align=center><div align="left" class="GabTd">'+ p_strCaption +'</div></td>')
	document.write('		  </tr>')
	document.write('		  <tr> ')
	document.write('		    <td colspan="2"><div align="center"></div></td>')
	document.write('		  </tr>')
	document.write('		  <tr> ')
	document.write('		    <td colspan="2">&nbsp;</td>')
	document.write('		  </tr>')
	document.write('		  <tr> ')
	document.write('		    <td colspan=2  align=center>')		
	document.write('				<input class="GabInput" name="GABOk" type="button" value="Ok" onclick="javascript:GAB_clickButton()" >' );				
	document.write('			</td>')
	document.write('		  </tr>')
	document.write('		  <tr> ')
	document.write('		    <td colspan="2"><div align="center"> </div></td>')
	document.write('		  </tr>')
	document.write('		  <tr>')
	document.write('		    <td colspan="2">&nbsp;</td>')
	document.write('		  </tr>')
	document.write('		</table>')
	document.write('		</div>')
	document.all.GABOk.focus()
};

function isMicrosoftIEBrowser() {
	if (getFind(getUpperCase(navigator.appName),"MICROSOFT") != 0 || 
		(getFind(getUpperCase(navigator.appName),"INTERNET") != 0 && 
		getFind(getUpperCase(navigator.appName),"EXPLORER") != 0)) {
				
		return true;
	} else {
		return false;
	};
};

function getURLEncode(strURL, isURLUnicode) {	
	if (arguments.length < 2) {
		isURLUnicode = true;
	};	

	var arrURLDecode = new Array("%", "&", "?", "#", "=");
	var arrURLEncode = new Array("%25", "%26", "%3F", "%23", "%3D");	
	var strResult = strURL;	
	
	for (var intLoop = 0; intLoop < arrURLDecode.length; ++intLoop) {
		strResult = getReplace(strResult, arrURLDecode[intLoop], arrURLEncode[intLoop]);
	};
	
	if (!isURLUnicode) {
		strResult = getReplace(strResult, "+", "%2B");
	};
	
	return strResult;
};

function getDecimalen(p_dblValue) {
	var v_intPos = p_dblValue.lastIndexOf(".")
	var v_intReturn = 0;
		
	if (v_intPos >= 0) {
		v_intReturn = p_dblValue.substr(v_intPos + 1).length;
				
	}
	return v_intReturn;
}

function getSelectedIndexRadio(buttonGroup) 
{
	if (buttonGroup[0]) 
	{	for (var i=0; i<buttonGroup.length; i++) 
		{
			if (buttonGroup[i].checked) 
			{	return i
			}
		}
	} 
	else 
	{
		if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
	}
	return -1;
} 

function convertUniToASCII(p_strLang, p_strUni) { 
	var tmp,results,i
	var tmp2,tmp3;
	results = ""
	p_strLang = p_strLang.toLowerCase()
	if(p_strLang=="ch" || p_strLang=="kr" || p_strLang=="jp" || p_strLang=="cs") {
		//tmp = getReplace(p_strUni,";","")
		tmp = p_strUni;
		tmp = getReplace(tmp,"&quot","\"")
		tmp = tmp.split(";")
		for(var i=0;i<tmp.length;i++) {	
			tmp2 = tmp[i].split("&#")
			
			if (tmp2[0] != "undefined" && tmp2[0] != "") results += tmp2[0]
			if (!isNaN(tmp2[1])) results += String.fromCharCode(tmp2[1])
		
			/*var tmp4 = "";
			var tmp5 = "";
			
			if(parseInt(tmp[i].length) <= 5){
				tmp4 = tmp[i];
			}else{
				tmp4 = tmp[i].substr(0,5);
				tmp5 = tmp[i].substr(5,tmp[i].length);
			}
			
			alert("tmp4=" + tmp4)
			alert("tmp5=" + tmp5)
			
			//results += String.fromCharCode(parseInt(tmp[i]));
			
			if((tmp4!="") && (!isNaN(parseInt(tmp4))) && tmp4.length==5){
				results += String.fromCharCode(parseInt(tmp4));
			}else{
				results += tmp4;
			}
			
			if(tmp5 != ""){results +=tmp5}*/
		}
		return results
	} else if(p_strLang!="en") {
		tmp = getReplace(p_strUni,";","")
		tmp = tmp.split("&#")
		for(var i=0;i<tmp.length;i++) {
			if(tmp[i]!="") {
				tmp2 = tmp[i].substr(0,3);
				tmp3 = tmp[i].substr(3,tmp[i].length-1);
				if (!isNaN(tmp2)) {
					results += String.fromCharCode(parseInt(tmp2)) + tmp3;
				} else {
					results += tmp[i];
				}
			}
		}
		return results;
	} else return p_strUni
} 

function getScrollTop(win) {
	var scrollTop = 0;
	if (win.pageYOffset) {
		scrollTop = win.pageYOffset;
	}
	else if (win.document.documentElement && win.document.documentElement.scrollTop) {
		scrollTop = win.document.body.scrollTop;
	}
	else if (win.document.body) {
		scrollTop = win.document.body.scrollTop;
	}
	return scrollTop;
}

function getScrollLeft(win) {
	var scrollLeft = 0;
	if (win.pageXOffset) {
		scrollLeft = win.pageXOffset;
	}
	else if (win.document.documentElement && win.document.documentElement.scrollLeft) {
		scrollLeft = win.document.body.scrollLeft;
	}
	else if (win.document.body) {
		scrollLeft = win.document.body.scrollLeft;
	}
	return scrollLeft;
}

function isValidAsciiText(text) {

	//var re = /[^a-zA-Z_0-9`~!@#$%\^&\*\(\)_\-\+=\|\\\[\{\]\};:'",<\.>/\?]/;
	var re = /[^\x00-\xFF]/;
	var result;
		
	if (re.test(text)) { 
		//alert("tidak valid") 
		result = false;
	} else { 
		//alert("valid") 
		result = true;
	};

	return result;
};

function isValidAsciiTextByForm(FormName) {
	var objForm = FormName;
	var Expression;
	var msgNonValid = "Not Valid Input";
				
	for (var intLoop=0; intLoop < objForm.elements.length; ++intLoop) {		
		Expression = ((objForm.elements[intLoop].type.toLowerCase() == "text") || 
					(objForm.elements[intLoop].type.toLowerCase() == "password") ||
					(objForm.elements[intLoop].type.toLowerCase() == "textarea")) &&
					(objForm.elements[intLoop].multilanguage != "true");
					
					
		if (Expression) {
			if (! isValidAsciiText(objForm.elements[intLoop].value)) {
				alert(msgNonValid);
				objForm.elements[intLoop].focus();
				
				return false;
			};			
		};
	};		
		
	return true;
};

//eka : 17APR07
function disableAllButton(p_objForm)
{
	with(p_objForm)
	{
		for(i=0; i < elements.length; i++)
		{
			if(typeof(elements[i].type)!= 'undefined')
			{
				if(elements[i].type.toLowerCase() == 'button')
				{
					elements[i].disabled = true;	
				}
			}
			
		}	
	}
}
