var IsNS = document.layers;
var IsIE = document.all;
var IsNS6 = document.getElementById;

function findObj(n, d) { //v4.0
/*
this function can find the obj by name and return the obj.
now, it is work in NS4, IE, NS4+
*/	
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

	function MM_swapImgRestore() { //v3.0
	  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}

	function MM_preloadImages() { //v3.0
	  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
	}

	function MM_findObj(n, d) { //v4.0
	  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	  if(!x && document.getElementById) x=document.getElementById(n); return x;
	}

	function MM_swapImage() { //v3.0
	  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
	   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}

	function MM_jumpMenu(targ,selObj,restore){ //v3.0
		eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
		if (restore) selObj.selectedIndex=0;
	}
	

function js_w(jText){
/*	Simplified document.writeln
*/		
	document.writeln(jText);
}	

function js_swapImg(jOrgImgName, jNewImgPath){
/*	swap the image object to new image. If want to use this function, please set the
		image name in the image object first.
*/		
  var funObj = findObj(jOrgImgName);
	if (funObj != null){
		if (!js_isNum(funObj.length))
			funObj.src=jNewImgPath;
		else{
			for (funJ=0;funJ<funObj.length;funJ++){
				funObj[funJ].src=jNewImgPath;
			}
		}
	}
}

function js_isNum(jVal){
	if (isNaN(parseInt(jVal)))
		return false;
	else
		return true;
}

function js_isInt(jVal){
  var funStr = jVal + "";
  if (funStr.length==0) return false;
    for (var i = 0 ;i < funStr.length;i++){
      if (funStr.charAt(i) <"0" || funStr.charAt(i) > "9") return false;
    }
  return true;
}

function js_isDollar(jVal){
  var funStr = jVal + "";
  var funDotCount = 0;
  if (funStr.length==0) return false;
    for (var i = 0 ;i < funStr.length;i++){
			if (funStr.charAt(i) == "."){
				funDotCount++;
				if (funDotCount >= 2) return false;
			}
			else{
				if (funStr.charAt(i) <"0" || funStr.charAt(i) > "9") return false;
			}
    }
  return true;
}

function IsEmpty(jVal){
/*
	Check is the string has val, but the function still not prefect.
	if val is tab or enter, it also return true		
*/
  var valstr = jVal+"";
//  valstr = valstr.replace(' ', '');
	valstr = LTrim(valstr);
  if (valstr.length == 0) return true;
    else return false;
}

function LTrim(jStr){
	var funRtnStr = ''
	if (jStr.length >= 1){
		if (jStr.substring(0,1) == ' '){
			funRtnStr = LTrim(jStr.substring(1,jStr.length))
		}
		else
			funRtnStr = jStr
	}
	return funRtnStr
}

function RTrim(jStr){
	var funRtnStr = ''
	if (jStr.length >= 1){
		if (jStr.substring(jStr.length-1,jStr.length) == ' '){
			funRtnStr = RTrim(jStr.substring(0, jStr.length-1))
		}
		else
			funRtnStr = jStr
	}
	return funRtnStr
}
	
function js_trim(jStr){
	var funRtnStr = LTrim(jStr);
	funRtnStr = RTrim(funRtnStr)
	return funRtnStr
}

	function js_refreshDiv(jDivID, jText){
		if (IsNS || IsIE){
			funObj = findObj(jDivID)
			if (typeof(funObj) != 'undefined'){
				if (IsNS){
					funObj.document.write(jText);
					funObj.document.close();
				}
				else
				{
					if (js_isInt(funObj.length))
					{
						for (var i=0; i < funObj.length; i++)
						{
							funObj[i].innerHTML=jText;
						}
					}
					else
						funObj.innerHTML=jText;
				}
			}
		}
		else{
			if (IsNS6)
				document.getElementById(jDivID).innerHTML=jText;
		}
	}

function js_drawDiv(jDivID, jTop, jLeft, jHeight, jWidth, jIsAbsolutePosition, jIsVisible, jZIndex, jMoreStyle, jMoreScript, jContent){
	js_openDiv(jDivID, jTop, jLeft, jHeight, jWidth, jIsAbsolutePosition, jIsVisible, jZIndex, jMoreStyle, jMoreScript);
	js_w(jContent);
	js_closeDiv();
}	

function js_openDiv(jDivID, jTop, jLeft, jHeight, jWidth, jIsAbsolutePosition, jIsVisible, jZIndex, jMoreStyle, jMoreScript){
	var funTemp='';
	funTemp += '<span id="' + jDivID + '"'
	if (jIsAbsolutePosition)
		funTemp += ' style="POSITION: absolute;'
	else
		funTemp += ' style="POSITION: relative;'
	funTemp += ' TOP: ' + jTop + 'px;'
	funTemp += ' Height: ' + jHeight + ';'
	funTemp += ' LEFT : ' + jLeft + 'px;'
	funTemp += ' WIDTH: ' + jWidth + ';'
	funTemp += ' visibility: '
	if (jIsVisible){
		if (IsNS)
			funTemp += 'show;';
		else
			funTemp += 'visible;';
	}		
	else{
		if (IsNS)
			funTemp += 'hide;';
		else
			funTemp += 'hidden;';
	}
		
	funTemp += ' z-index:' + jZIndex
	if (!IsEmpty(jMoreStyle))
		funTemp += ';' + jMoreStyle
	funTemp +=  '"'
	if (!IsEmpty(jMoreScript))
		funTemp +=  ' ' + jMoreScript
	funTemp +=  '>'
	js_w(funTemp);
}

function js_closeDiv(){
	var funTemp='';
	funTemp += '</span>'
	js_w(funTemp);
}

function js_changeDivVisible(jDivName, jIsVisible){
	var funObj = findObj(jDivName);
	if (js_isObject(funObj)){
		var funTemp = '';
		if (jIsVisible){
			if (IsNS)
				funTemp += 'show';
			else
				funTemp += 'visible';
		}		
		else{
			if (IsNS)
				funTemp += 'hide';
			else
				funTemp += 'hidden';
		}
	
		funObj.style.display = jIsVisible ? "inline" : "none";
		funObj.style.visibility = funTemp;		
	}
}

function js_rtnJSDateObj(jDate){
/*
jDate format must be dd-mm-yyyy, and use this function will return Obj
mmmm dd, yyyy , this format special for JS to read,
because it is obj, so it can use date.getDay() these method
if the jDate is not Valid then will return NaN
*/
	funTemp = js_rtnJSDate(jDate);
	return new Date(funTemp);
}
	
function js_rtnJSDate(jDate){
/*
if the date format is dd-mm-yyyy, use this function will return
mmm dd, yyyy , this format special for JS to read
*/
	funArrDate = jDate.split("-")
	if (funArrDate.length == 3){
		funMonth = funArrDate[1]*1;
		funTemp = js_ConvertNumToSMonth(funMonth + '') + ' ' + (funArrDate[0]*1) + ', ' + (funArrDate[2]*1)
		return funTemp;
	}
	else
		return '';
}

function js_dayOfMonth(jYear, jMonth){
	var funArr_month = new Array(13);
	var fun_year = jYear * 1;
	var fun_month = jMonth * 1;
	funArr_month[1] = 31;
	if (IsDigit(fun_year/4))
		if (IsDigit(fun_year/400))
			funArr_month[2] = 29;
		else
			if (IsDigit(fun_year/100))
				funArr_month[2] = 28;
			else
				funArr_month[2] = 29;
	else
		funArr_month[2] = 28;
	funArr_month[3] = 31;
	funArr_month[4] = 30;
	funArr_month[5] = 31;
	funArr_month[6] = 30;
	funArr_month[7] = 31;
	funArr_month[8] = 31;
	funArr_month[9] = 30;
	funArr_month[10] = 31;
	funArr_month[11] = 30;
	funArr_month[12] = 31;
	return funArr_month[jMonth];
}

function js_isDate(jDate){
	var funTemp = false;

	funArrDate = jDate.split("/")

	if (funArrDate.length == 3){		
		var funArr_month = new Array(13);
		var fun_year = funArrDate[2] * 1;
		var fun_month = funArrDate[1] * 1
		var fun_day = funArrDate[0] * 1;
		if (IsDigit(fun_year) && IsDigit(fun_month) && IsDigit(fun_day)){
			if (fun_year >= 1800 & fun_year <= 2100){
				funArr_month[1] = 31;
				if (IsDigit(fun_year/4))
					if (IsDigit(fun_year/400))
						funArr_month[2] = 29;
					else
						if (IsDigit(fun_year/100))
							funArr_month[2] = 28;
						else
							funArr_month[2] = 29;
				else
					funArr_month[2] = 28;
				funArr_month[3] = 31;
				funArr_month[4] = 30;
				funArr_month[5] = 31;
				funArr_month[6] = 30;
				funArr_month[7] = 31;
				funArr_month[8] = 31;
				funArr_month[9] = 30;
				funArr_month[10] = 31;
				funArr_month[11] = 30;
				funArr_month[12] = 31;
				if (funArr_month[fun_month] >= fun_day)
					funTemp = true;
			}
		}
	}
	return funTemp;
}

function js_swapDiv(jOrgDivName, jNewDivName){
	var funOrgDiv = findObj(jOrgDivName);
	var funNewDiv = findObj(jNewDivName);
	if (funOrgDiv != null)
		js_changeDivVisible(jOrgDivName, false)
	if (funNewDiv != null)
		js_changeDivVisible(jNewDivName, true)
}

function js_moveDiv(jDivName, jX, jY){
	var funObj = findObj(jDivName);
	if (js_isObject(funObj)){
		funObj.style.top = jY;
		funObj.style.left = jX;
	}
}

function js_resizeDiv(jDivName, jWidth, jHeight){
/*
Dunno is it work at netscape
but if want it work at IE, it must need to set when the div overflow handler, set it to scroll or auto
*/
	var funObj = findObj(jDivName);
	if (js_isObject(funObj)){
		if (!IsEmpty(jHeight))
			funObj.style.height = jHeight;
		if (!IsEmpty(jWidth))
			funObj.style.width = jWidth;
	}
}

function js_isObject(jObj){
	if (jObj != null){
		return true;
	}
	else{
		return false;
	}
}

function js_divScroll(jDivName, jTop, jLeft){
/*
Can use program to control the scroll bar of DIV
*/
	var funObj = findObj(jDivName);
	if (js_isObject(funObj)){
		if (!IsEmpty(jTop))
			funObj.scrollTop = jTop;
		if (!IsEmpty(jLeft))
			funObj.scrollLeft = jLeft;
	}
}

function js_changeDivOverflow(jDivName, jOverflowEnum){
/*
jOverflowEnum
1 = ''
2 = 'visible'
3 = 'hidden'
4 = 'scroll'
5 = 'auto'
*/
	var funObj = findObj(jDivName);
	if (js_isObject(funObj)){
		var funOverflow = '';
		switch (jOverflowEnum+''){	
			case '1':
				funOverflow = '';
				break;
			case '2':
				funOverflow = 'visible';
				break;
			case '3':
				funOverflow = 'hidden';
				break;
			case '4':
				funOverflow = 'scroll';
				break;
			case '5':
				funOverflow = 'auto';
				break;
		}
		funObj.style.overflow = funOverflow;
	}
}

function js_ConvertNumToSMonth(jNumMonth){
	switch (jNumMonth+'') {
		case '1':
			return 'Jan';
			break;
		case '2':
			return 'Feb';
			break;
		case '3':
			return 'Mar';
			break;
		case '4':
			return 'Apr';
			break;
		case '5':
			return 'May';
			break;
		case '6':
			return 'Jun';
			break;
		case '7':
			return 'Jul';
			break;
		case '8':
			return 'Aug';
			break;
		case '9':
			return 'Sep';
			break;
		case '10':
			return 'Oct';
			break;
		case '11':
			return 'Nov';
			break;
		case '12':
			return 'Dec';
			break;
	}
}
				

function IsDigit(jVal){
/*
if the jVal contain any none numeric like "." or other char then will return false
*/
  var funValStr = jVal + "";
  if (funValStr.length==0) return false;
    for (var i = 0 ;i < funValStr.length;i++){
      if (funValStr.charAt(i) <"0" || funValStr.charAt(i) > "9") return false;
    }
  return true;
}

function js_isChecked(jObj){
/*
check the checkbox or radiobox is checked or not
*/
	var funTemp = false;
	try{
		funTemp = jObj.checked;
		if (!funTemp){
			for (var i=0;i<jObj.length;i++){
				if (jObj[i].checked){
					funTemp = true;
					i = jObj.length
				}
			}
		}
	}
	catch(e){
//		alert(e)
	}
	return funTemp;		
}	

function js_isPressEnter(e)
{
	if (e != null)
	{
		if (e.keyCode == 13)
			return true;
		else
			return false;
	}
	
	return true;
}

function js_checkedNo(jObj){
/*
return how many check box is checked
*/
	var funTemp = false;
	var funChecked = 0;
	try{
		funTemp = jObj.checked;
		if (!funTemp){
			for (var i=0;i<jObj.length;i++){
				if (jObj[i].checked){
					funChecked++;
				}
			}
		}
	}
	catch(e){
//		alert(e)
	}
	return funChecked;
}	


function js_isDateObj(jObj){
	var funTemp = true;
	js_normalObjColor(jObj);

	if (!js_isDate(jObj.value)){
		js_errObjColor(jObj);
		funTemp = false;
		jObj.focus();
	}
	return funTemp;
}

function js_isEmptyObj(jObj){
/*
check the Object is empty or not, if yes, check the backgroud color to yellow
*/
	var funTemp = false;
	js_normalObjColor(jObj);	

	if (IsEmpty(jObj.value)){
		js_errObjColor(jObj);
		funTemp = true;
		jObj.focus();
	}
	return funTemp;
}

function js_normalObjColor(jObj){
	jObj.style.background = 'white';	
}

function js_errObjColor(jObj){
	jObj.style.background = 'yellow';
}

function js_checkAllBox(jCheckBoxNameObj, jChecked){
/*	
Common function, use it when you can to have a check box that after click will click all other check box
Remember the other box name must same, given the box obj, for example document.fr.checkbox,
and you want to check it or not
*/
	if (jCheckBoxNameObj != null){
		var funLength = jCheckBoxNameObj.length;
		if (funLength == undefined)
			jCheckBoxNameObj.checked = jChecked;
		else{
			for (var i=0;i<funLength;i++){
			  jCheckBoxNameObj[i].checked = jChecked;
			}
		}
	}
}

function js_isEmail(jVal){
  var valstr = jVal+"";
  if (valstr.indexOf("@") != 0 &&valstr.indexOf("@") != "-1" && valstr.indexOf(".",valstr.indexOf("@")) != "-1" && jVal != "" && valstr.indexOf(".",valstr.indexOf("@"))!=valstr.indexOf("@") + 1 &&valstr.indexOf(".",valstr.indexOf("@"))!=valstr.length-1 ) return true; 
  else return false;
}

function js_isEmailObj(jObj){
	var funTemp = true;
	js_normalObjColor(jObj);

	if (!js_isEmail(jObj.value)){
		js_errObjColor(jObj);
		funTemp = false;
		jObj.focus();
	}
	return funTemp;
}

function js_convertPX2Num(jPxNum){
	var funTemp = jPxNum
	if (!IsEmpty(jPxNum)){
		funTemp = funTemp.toLowerCase();
		funTemp = funTemp.replace('px', '');
		funTemp = funTemp * 1;
	}
	return funTemp;
}

	function onClickActionRadio() {
		var value = "";
		for (var i = 0; i < document.theform.actionPerformed.length; i++) {
			if(document.theform.actionPerformed[i].checked == "1") {
				value = document.theform.actionPerformed[i].value;
			}
		}
		if(value == "approve" || value == "reject") {
			showActionRemark();
		} else if (value == "assignTo") {
			showAssignTo();
		} else {
			showNothing();
		}
	}

	function showNothing() {
		document.all.divActionRemark.style.visibility = "hidden";
		document.all.divActionRemark.style.height = "1";
		document.all.divAssignTo.style.visibility = "hidden";
		document.all.divAssignTo.style.height = "1"
	}
	
	function showActionRemark() {
		document.all.divActionRemark.style.visibility = "visible";
		document.all.divActionRemark.style.height = "130";
		document.all.divAssignTo.style.visibility = "hidden";
		document.all.divAssignTo.style.height = "1"
	}

	function showAssignTo() {
		document.all.divActionRemark.style.visibility = "hidden";
		document.all.divActionRemark.style.height = "1";
		document.all.divAssignTo.style.visibility = "visible";
		document.all.divAssignTo.style.height = "150"
	}

	function js_request_login()
	{
		location.href = '../login/default.aspx?url=' + window.location + '&popup=http%3A%2F%2Fwww%2Ecp1897%2Ecom%2Ehk%2Fcgi%2Dbin%2Fal%5Fshoplog%2Ecgi%3Fshopid%3D52%26d%5Furl%3Dhttp%3A%2F%2Fwww%2Ecp1897%2Ecom%2Ehk%2Falliance%2Fbupa%2Fbooklist%2Ehtml';
	}	

//*** By Ray Wong on 2003-11-06
function checkDate4Control(source, arguments)
{
	if(arguments.Value == "")
	{
		arguments.IsValid = true;
		return;	
	}
	arguments.IsValid = checkDate(arguments.Value, "dmy", "-", "2049/12/31", "1900/1/1");
}

function checkDate(txt, format, separator, max, min){
	var arrTmp = txt.split(separator);
	if(arrTmp.length != 3)return false;
	for(var i = 0; i < 3; i++)
	{
		if(isNaN(arrTmp[i] = parseInt(arrTmp[i], 10)))return false;
	}
	var dateTmp = new Date("2004/1/1");
	var arrFormat = format.toLowerCase().split("");
	for(var i = 0; i < arrFormat.length; i++){
		if(arrFormat[i] == "d"){
			dateTmp.setDate(arrTmp[i]);
		}else if(arrFormat[i] == "m"){
			dateTmp.setMonth(arrTmp[i] - 1);
		}else if(arrFormat[i] == "y"){
			// Set year range
			// if(arrTmp[i] < 1950 || arrTmp[i] > 2050)return false;
			dateTmp.setYear(arrTmp[i]);
		}
	}
	for(var i = 0; i < arrFormat.length; i++){
		if(arrFormat[i] == "d"){
			if(arrTmp[i] != parseInt(dateTmp.getDate()))return false;
		}else if(arrFormat[i] == "m"){
			if(arrTmp[i] - 1 != parseInt(dateTmp.getMonth()))return false;
		}else if(arrFormat[i] == "y"){
			if(arrTmp[i] < 2000)
			{
				if(arrTmp[i] != 1900 + parseInt(dateTmp.getYear()))return false;
			}
			else
			{
				if(arrTmp[i] != parseInt(dateTmp.getYear()))return false;
			}
		}
	}	
	if(max != "")
	{
		var maxD = new Date(max);
		if(dateTmp > maxD)
			return false;
	}
	if(min != "")
	{
		var minD = new Date(min);
//		alert(dateTmp + "[]" + minD + "[]" + (dateTmp < minD))
		if(dateTmp < minD)
			return false;
	}
	
	return true;
}

	function js_construct_querystring()
	{
		var myQueryString = "";
		
		for (var i=0; i < document.forms[0].elements.length; i++)
		{
			if (!IsEmpty(document.forms[0].elements[i].id))
			{
				var myIdString = new String();
				
					
				myIdString = document.forms[0].elements[i].id.toString();
				myIdString = myIdString.replace(mSearch_Form_Client_ID + "_", "");
					
				if (myIdString.substring(0,4) == "rdo_") 
				{
					if (document.forms[0].elements[i].checked)
						myQueryString += "&" + escape(myIdString.substring(0, myIdString.lastIndexOf ("_"))) + "=" + escape(document.forms[0].elements[i].value);
				}
				else 
				{
					myQueryString += "&" + escape(myIdString) + "=" + escape(document.forms[0].elements[i].value);
				}
				
			}
		}
		
		if (!IsEmpty(myQueryString))
			myQueryString = myQueryString.substring (1);
		
		var myQS1 = js_get_querystring('receive_select_id_function_name');
		var myQS2 = js_get_querystring_in_case_sensitive('assign_id_obj_name');
		var myQS3 = js_get_querystring('mode');
		
		if (myQS1 != '')
			myQueryString += '&receive_select_id_function_name=' + myQS1;
			
		if (myQS2 != '')
			myQueryString += '&assign_id_obj_name=' + myQS2;
			
		if (myQS3 != '')
			myQueryString += '&mode=' + myQS3;
		
		return myQueryString;	
	}
	
	function js_get_key_in_querystring(jQuerystring, jKey)
	{
		if (!IsEmpty(jKey))
		{
			var myArrQS = jQuerystring.split("&");
			for (var i=0; i < myArrQS.length; i++)
			{
				if (myArrQS[i].indexOf("=") != -1)
				{
					var myQS_Key = myArrQS[i].substring(0, myArrQS[i].indexOf("="));
					
					if (myQS_Key.toLowerCase() == js_trim(jKey.toLowerCase()))
					{
						if (myArrQS[i].indexOf("=") < myArrQS[i].length)
						
						var myQS_Value = myArrQS[i].substring(myArrQS[i].indexOf("=") + 1);
						
						if (myQS_Value.indexOf("#") >= 0)
							myQS_Value = myQS_Value.substring(myQS_Value.indexOf("="));
						
						return myQS_Value;
					}
				}
			}
		}
		return "";
	}

	function js_get_querystring_in_case_sensitive(jKey)
	{
		var myPath = location.href;
		var myQueryString = "";
		
		if (myPath.indexOf("?") != -1)
		{
			if (myPath.indexOf("?") < myPath.length)
				myQueryString = myPath.substring(myPath.indexOf("?") + 1);
		}

		if (!IsEmpty(jKey))
			return js_get_key_in_querystring(myQueryString, jKey);
		
		return myQueryString;
	}

	
	function js_get_querystring(jKey)
	{
//		var myPath = location.href.toLowerCase();
		var myPath = location.href;
		var myQueryString = "";
		
		if (myPath.indexOf("?") != -1)
		{
			if (myPath.indexOf("?") < myPath.length)
				myQueryString = myPath.substring(myPath.indexOf("?") + 1);
		}

		if (!IsEmpty(jKey))
			return js_get_key_in_querystring(myQueryString, jKey);
		
		return myQueryString;
	}
	
	function js_search()
	{
		var myPath = location.pathname;
			
		location.href = myPath + "?" + js_construct_querystring();
	}

	/*
	this function clear search form value
	created by : Andy @ 22-Sep-2006
	*/
	function js_clear(jClientID)
	{
		if (js_isObject(document.forms[0]["txt_Keyword"]))
			document.forms[0]["txt_Keyword"].value = '';
			
		for (var i=0; i < document.forms[0].length; i++)
		{
			if (document.forms[0][i].id.indexOf(jClientID) >= 0)
			{
				if (js_Is_Equal_Str(document.forms[0][i].tagName, "select"))
					document.forms[0][i].selectedIndex = 0;
				else
					document.forms[0][i].value = '';
					
			}
		}
	}	

// add jQuerystring by Andy @08-Apr-2005
	function js_edit(jEdit_Form_Path, jID, jAction, jQuerystring)
	{
		
		var myPath = jEdit_Form_Path;
		
		if (IsEmpty(jEdit_Form_Path))
		{
			myPath = js_Get_Module_Name() + "_edit.aspx";
		}
		
		var myQS = '';

		if (!IsEmpty(jID))
			myQS += "&id=" + jID;
		
		if (!IsEmpty(jAction))
			myQS += "&action=" + jAction;
			
//  add extra query by andy @ 08-Apr-2005
		if (!IsEmpty(jQuerystring) && jQuerystring != 'undefined')
			myQS += '&' + jQuerystring;

		window.open(myPath + js_Get_Back_Link() + myQS, '_self');
		
	}

	function js_change_page(jPN_Combo_ClientID)
	{
		var myQS = js_remove_key_from_querystring(js_get_querystring(""), jPN_Combo_ClientID + "_pn");

		if (IsEmpty(myQS))
			myQS = "?";
		else
			myQS = "?" + myQS + "&";
			
		myQS += jPN_Combo_ClientID + "_pn=" + document.forms[0].elements[jPN_Combo_ClientID + "_pn"].value;
		
		location.href = location.pathname + myQS;
	}
	

	function js_remove_key_from_querystring(jQueryString, jKey)
	{
		if (!IsEmpty(jKey))
		{
			var myArrQS = jQueryString.split("&");
			jQueryString = "";
			
			for (var i=0; i < myArrQS.length; i++)
			{
				if (myArrQS[i].indexOf("=") != -1)
				{
					var myQS_Key = myArrQS[i].substring(0, myArrQS[i].indexOf("="));

					if (myQS_Key.toLowerCase() != js_trim(jKey.toLowerCase()))
						jQueryString += "&" + myArrQS[i];
				}
			}
			
			if (jQueryString.length >= 1)
				jQueryString = jQueryString.substring(1);
		}
		
		return jQueryString;
		
	}


	function js_Get_Current_Language_Index()
	{
		var myLangIndex = 0;
		var myScript_Name = location.pathname;

		if (myScript_Name.length >= 1)
		{
			if (myScript_Name.toLowerCase().indexOf("/tc/") >= 0)
				myLangIndex = 1;
		
		}	
		return myLangIndex;
	}

	function js_del_one_record(jID, jData_Name, jForm_ID, jButton_Name)
	{
		var myConfirm_Message = "Are you sure delete data";
		
		if (js_Get_Current_Language_Index() == 1)
			myConfirm_Message = document.all["chinese_confirm_delete_message"].value;
		
		if (confirm(myConfirm_Message + ' "' + jData_Name + '"?'))
		{
			document.forms[0]["del_id"].value = jID;
			document.forms[0]["data_name"].value = jData_Name;
			__doPostBack(jForm_ID + "$" + jButton_Name, '');
		}
	}

	function js_delete_one_record(jDel_ID, jData_Name, jDelete_Form)
	{
		var myConfirm_Message = "Are you sure delete data";
		
		if (js_Get_Current_Language_Index() == 1)
			myConfirm_Message = document.all["chinese_confirm_delete_message"].value;
	
		if (confirm(myConfirm_Message + ' "' + jData_Name + '"?'))
		{
			if (IsEmpty(jDelete_Form))
				jDelete_Form = js_Get_Module_Name() + "_Delete.aspx";
			
			var myQS = js_Get_Back_Link();
			myQS += "&del_id=" + escape(jDel_ID);
			myQS += "&data_name=" + escape(jData_Name);
			location.href = jDelete_Form + myQS;
		}
	}

	function js_delete_record_at_edit_form(jDel_ID, jData_Name, jDelete_Form)
	{
		var myConfirm_Message = "Are you sure delete data";
		
		if (js_Get_Current_Language_Index() == 1)
			myConfirm_Message = document.all["chinese_confirm_delete_message"].value;
	
		if (confirm(myConfirm_Message + ' "' + jData_Name + '"?'))
		{
			if (IsEmpty(jDelete_Form))
				jDelete_Form = js_Get_Module_Name() + "_Delete.aspx";
			
			var myQS = "?back_link=" + js_get_querystring('back_link');
			myQS += "&del_id=" + escape(jDel_ID);
			myQS += "&data_name=" + escape(jData_Name);
			location.href = jDelete_Form + myQS;
		}
	}

	function js_Get_Back_Link()
	{
	// Add by Andy @ 08-Apr-2005		
		if (IsEmpty(js_get_querystring('back_link')))
			return "?back_link=" + escape(location.href);		
		else
			return "?back_link=" + js_get_querystring('back_link');
	
/* remarked by Andy @ 08-Apr-2005		
		var myQS = js_get_querystring('');
		
		if (!IsEmpty(myQS))
			myQS = escape("?" + myQS);

		if (!IsEmpty(js_get_querystring('back_link')))
			return "?" + myQS;
		else
			return "?back_link=" + escape(location.pathname) + myQS;*/
	}
	
	function js_Get_Module_Name()
	{
		var myScript_Name = location.pathname;
		
		if (myScript_Name.lastIndexOf("/") != -1)
			if (myScript_Name.lastIndexOf("/") < myScript_Name.length)
				myScript_Name = myScript_Name.substring(myScript_Name.lastIndexOf("/") + 1);
		
		if (myScript_Name.lastIndexOf("_") != -1)
			if (myScript_Name.lastIndexOf("_") < myScript_Name.length)
				myScript_Name = myScript_Name.substring(0, myScript_Name.lastIndexOf("_"));

		return myScript_Name;
	}
	
	function js_back()
	{
		var myLocation = unescape(js_get_querystring('back_link'));
		if (IsEmpty(myLocation))
			myLocation = location.pathname.toLowerCase().replace('_edit.aspx', '_list.aspx');
		
		location.href = myLocation;
	}

	function js_edit_form()
	{
		location.href = location.pathname + "?" + js_remove_key_from_querystring(js_get_querystring(''), "action") + "&action=edit&from_view=yes";
	}
	
	function js_edit_tab(jEdit_Action)
	{
		location.href = location.pathname + "?" + js_remove_key_from_querystring(js_get_querystring(''), "action") + "&action=" + escape(jEdit_Action);
	}
	
	function js_cancel_edit()
	{
		// back to data list if id is empty
		var myLocation = unescape(js_get_querystring('back_link'));
		
		if (!IsEmpty(js_get_querystring('from_view')))
		{
			//back to data view
			location.href = location.pathname + "?action=view&" + js_remove_key_from_querystring(js_get_querystring(''), "action");
		}
		else
		{
			if (IsEmpty(js_get_querystring('id')) || !IsEmpty(myLocation))
			{
				if (IsEmpty(myLocation))
					myLocation = location.pathname.toLowerCase().replace('_edit.aspx', '_list.aspx');
				
				location.href = myLocation;
			}
		}
	}

	function js_check_date_input_date(source, arguments)
	{
		if (!IsEmpty(arguments.Value))
		{
//			arguments.IsValid = js_check_date(arguments.Value, "d/m/y", "/");
			arguments.IsValid = js_isDate(arguments.Value);
		}
	}

	// format = date format, d/m/y is normal use
	function js_check_date(jDate, format, separator)
	{
		
		var arrTmp = jDate.split(separator);
		if(arrTmp.length != 3)return false;
		for(var i = 0; i < 3; i++)
			if(isNaN(arrTmp[i] = parseInt(arrTmp[i],10)))return false;
			//if(isNaN(arrTmp[i]))return false;
			
		var dateTmp = new Date();
		var arrFormat = format.toLowerCase().split(separator);
		dateTmp.setYear(2004);		// This line must not be removed
		for(var i = 0; i < arrFormat.length; i++){
			if(arrFormat[i] == "d"){
				dateTmp.setDate(arrTmp[i]);
			}else if(arrFormat[i] == "m"){
				dateTmp.setMonth(arrTmp[i] - 1);
			}else if(arrFormat[i] == "y"){
				// Set year range
				if(arrTmp[i] < 1950 || arrTmp[i] > 2050)return false;
				dateTmp.setYear(arrTmp[i]);
			}
		}

		for(var i = 0; i < arrFormat.length; i++){
			if(arrFormat[i] == "d"){
				if(arrTmp[i] != parseInt(dateTmp.getDate()))return false;
			}else if(arrFormat[i] == "m"){
				if(arrTmp[i] - 1 != parseInt(dateTmp.getMonth()))return false;
			}else if(arrFormat[i] == "y"){
				if(arrTmp[i] != parseInt(dateTmp.getYear()))return false;
			}
		}
		
		return true;
	}

	function js_get_radio_selectedIndex(jRadio_Name)
	{
		myRadio = document.forms[0][jRadio_Name];
		if (js_isObject(myRadio))
		{
			for (var i=0; i< myRadio.length; i++)
			{
				if (myRadio[i].checked)
					return i;
			}
		}
		return -1;
	}

	function js_Sorting_Listbox(jAction, jObj_Name)
	{
		if(document.forms.length < 1)return;
		if(document.forms[0].elements.length < 1)return;
		var obj = document.forms[0].elements["lst_" + jObj_Name];
		if(obj == undefined)return;
		if(obj.options == undefined)return;
		var obj2 = document.forms[0].elements["rtn_" + jObj_Name];
		if(obj2 == undefined)return;
		if(obj2.value == undefined)return;
		if(obj.options.length < 1)return;
		for(var i=0; i<obj.options.length; i++)
			if(obj.options[i].selected)
			{
				var dest = i;
				switch(jAction)
				{
					case 1:
						if(i == 0)return;
						dest = 0;
						break;
					case 2:
						if(i == 0)return;
						dest = i - 1;
						break;
					case 3:
						if(i == obj.options.length - 1)return;
						dest = i + 1;
						break;
					case 4:
						if(i == obj.options.length - 1)return;
						dest = obj.options.length - 1;
						break;
					default:
						return;
				}
		
				var j = i, k = i; 
				var l=0;
				
				var temp = obj.options[i].value, temp2 =obj.options[i].text;
				if(i < dest)
					for(l=i; l<dest; l++)
					{
						obj.options[l].value = obj.options[l+1].value;
						obj.options[l].text = obj.options[l+1].text;
					}
				else
					for(l=i; l>dest; l--)
					{
						obj.options[l].value = obj.options[l-1].value;
						obj.options[l].text = obj.options[l-1].text;
					}
				obj.options[l].value = temp;
				obj.options[l].text = temp2;
				obj.options[dest].selected = true;
				break;
			}
		if(i==obj.options.length)
			return;
		obj2.value = "";
		for(var i=0; i<obj.options.length; i++)
			obj2.value += "," + obj.options[i].value;
		obj2.value = obj2.value.substring(1);
		
	}

/*
if (IsIE)
	if(document.onmousemove == null)
		document.onmousemove = function (e) {
			if (document.all)
			{
				xMousePos = window.event.x + window.screenLeft + document.body.clientLeft;
				yMousePos = window.event.y + window.screenTop + document.body.clientTop;
			}
		}

function openWindow(url, target, attribute, width, height)
{
	var left = xMousePos, top = yMousePos;
	
	if(left > screen.width - width)left = screen.width - width;
	if(top > screen.height - height)top = screen.height - height;
	var temp = "width=" + width + ",height=" + height + ",left=" + left + ",top=" + top;
	if(attribute == "")
		attribute = temp;
	else
		attribute = temp + "," + attribute;
	var ow = window.open(url, target, attribute);
	if(ow != undefined)
		if(ow != null)
		{
			ow.moveTo(left, top);
			ow.window.focus();
		}
}
*/

function js_Is_Equal_Str(jStr1, jStr2)
{
	return (js_trim(jStr1.toLowerCase()) == js_trim(jStr2.toLowerCase()));
}

function js_Replace_All(jOrgStr, jReplace_Word, jNew_Word)
{
	jOrgStr = jOrgStr.replace(jReplace_Word, jNew_Word);
	if (jOrgStr.indexOf(jReplace_Word) >= 0)
		jOrgStr = js_Replace_All(jOrgStr, jReplace_Word, jNew_Word);
		
	return jOrgStr;
}

// written by jeff@13-Mar-2004, mainly for currency textbox use
function js_Convert_2_Currency(jNum)
{
	var myStr = jNum+ "";
	var isNegative = false;
	var myResult = '';
	
	if (myStr.indexOf("-") == 0)
	{
		myStr = myStr.substring(1);
		isNegative = true;
	}	
	
	if (myStr.indexOf(".") != -1)
	{
		var myStr1 = myStr.substring(0,myStr.indexOf("."));
		var myStr2 = myStr.substring(myStr.indexOf(".") + 1);
	
		if (IsDigit(myStr1) && (myStr2.length ==0))
			myResult = myStr1 + '.' + '00';
		else if (IsDigit(myStr1) && (myStr2.length >0) && IsDigit(myStr2))
		{
			if (myStr2.length ==1)
				myResult =  myStr + '0';
			else if (myStr2.length == 2)
				myResult = myStr;
			else if (myStr2.length > 2)
			{
				//myResult = myStr1 + '.' + myStr2.substring (0,2);
				//myStr3 = Math.round(parseInt(myStr2.substring (0,3),10)/10) + "";
				//myResult = myStr1 + '.' + myStr3 ;
				
				//var myStrMath = parseInt(myStr, 10) * 1000;
				
				var myStrMath = parseFloat (myStr) * 1000;
				
				myStrMath = Math.round(myStrMath /10);
				
				myStrMath = myStrMath / 100;
				myStr_Result = myStrMath + "" ;
				
				if (myStr_Result.indexOf(".") == -1)
				{
					myResult =	myStr_Result + '.00';
				}
				else if (myStr_Result.indexOf(".") != -1)	
				{
					var myStr_Result2 = myStr_Result.substring (myStr_Result.indexOf(".") + 1)
					
					if (myStr_Result2.length == 1)
						myResult = myStr_Result + '0';
					else 
						myResult = myStr_Result;
				}
			}
		}
			
	}
	else 
	{	
		if (IsDigit(myStr))
		{
			myResult = myStr + ".00";
		}
	}
	
	if (myResult == '0.00')
		isNegative = false;
	
	if ((isNegative == true) && (myResult != ''))
		return '-' + myResult;
	else if ((isNegative == false) && (myResult != ''))
		return myResult;
	else 
		return jNum;
}

function js_Focus_On_First_Object()
{
	try
	{
		for (var i=0; i < document.forms[0].length; i++)
		{
			var myObj_Type = document.forms[0][i].type.toLowerCase();
			if (myObj_Type == "text" || myObj_Type == "select-one" || myObj_Type == "password" || myObj_Type == "textarea")
			{
				document.forms[0][i].focus();
				return;
			}	
		}
	}
	catch (e) {}
}

/*
 these function for select the value from popup window
 created by : Andy @ 2-Apr-2004
 
 3 querystring for this function
 receive_select_id_function_name: what function will use to receive id
 assign_id_obj_name: usually will has a object to get the return id
 mode: has 2 value, "one" or "multi", if mode=one then the window will close automatically when selected
*/
													//
function js_Get_One_ID(jURL, jAssign_ID_Obj_Name, jForce_Post_Back)
{
	var myPath = '';
	if (jURL.indexOf("?") > 0)
		myPath += '&';
	else
		myPath += '?';
	
	//	myPath += 'receive_select_id_function_name=js_Assign_One_ID&assign_id_obj_name=' + escape(jAssign_ID_Obj_Name) + '&mode=one' ;
	myPath += 'receive_select_id_function_name=js_Assign_One_ID&assign_id_obj_name=' + escape(jAssign_ID_Obj_Name) + '&mode=one' + '&force_post_back=' + jForce_Post_Back ;
	window.open(jURL + myPath , '_blank', 'height=500, width=700, top=0, left=0, resizable = yes, scrollbars = yes');
}

function js_Assign_One_ID(jID, jAssign_ID_Obj_Name, jText, jForce_Post_Back)
{
	try
	{
		jAssign_ID_Obj_Name = unescape(jAssign_ID_Obj_Name);
		if (js_Is_Equal_Str(document.all[jAssign_ID_Obj_Name].type, 'text'))
		{
			document.all[jAssign_ID_Obj_Name].value = jText;
		}
		else
			js_Set_Combo_Box_Selected_Value(jID, unescape(jAssign_ID_Obj_Name), jText, jForce_Post_Back);
			
		js_Select_Next_Obj(null, document.all[jAssign_ID_Obj_Name].sourceIndex);
	}
	catch (e)
	{
		alert(e.message);
	}
}

function js_Set_Combo_Box_Selected_Value(jID, jCombo_Box_Name, jText, jForce_Post_Back)
{
	try
	{
	
		var myObj = document.all[jCombo_Box_Name];
		for (var i=0; i < myObj.length; i++)
		{
			if (myObj[i].value == jID)
			{
				myObj.selectedIndex = i;
				
				if (jText != myObj[i].text)
					myObj[i].text = jText;
				
				if (jForce_Post_Back == '1')
					__doPostBack(jCombo_Box_Name.replace(':', '$'),'');
				
				return;
			}
		}
		
		myObj.options[myObj.options.length] = new Option(jText, jID);
		myObj.selectedIndex = myObj.options.length-1;
		
		//__doPostBack(jCombo_Box_Name.replace(':', '$'),'');
	}
	catch (e)
	{
		alert(e.message);
	}
}

function js_Rtn_ID(jID, jText)
{
	try
	{
		var myFunc = 'window.opener.' + js_get_querystring('receive_select_id_function_name');
		eval(myFunc)(jID, js_get_querystring_in_case_sensitive('assign_id_obj_name'), jText, js_get_querystring('force_post_back'));
		
		if (js_get_querystring('mode') == "one")
			window.close();
	}
	catch (e)
	{
		alert(e.message);
	}
}

function js_Select_Next_Obj(e, jSource_Index)
{
	if (js_isPressEnter(e))
	{
		var myFound_Next_Control = false;
		for (var i=jSource_Index + 1; i < document.all.length;i++)
		{
			if (document.all[i].type == 'text' || document.all[i].type == 'textarea' || document.all[i].type == 'password')
			{
				document.all[i].select();
				document.all[i].focus();
				
				if (e != null)
					e.keyCode = '';
					
				myFound_Next_Control = true;
				break;
			}
			else
			{
				if (document.all[i].type == 'select-one' || document.all[i].type == 'radio' || document.all[i].type == 'checkbox')
				{
					document.all[i].focus();
					myFound_Next_Control = true;
					break;
				}
			}
		}
		
		if (myFound_Next_Control)
			document.all[jSource_Index].blur();
		
		if (!myFound_Next_Control)
			js_Focus_On_Save_Button(jSource_Index)

		return false;
	}		
}

function js_Focus_On_Save_Button(jSource_Index)
{
	for (var i=jSource_Index + 1; i < document.all.length;i++)
	{
		if (document.all[i].id.indexOf("RI_Save") >= 0)
		{
			document.all[i].focus();
			return false;
		}
	}
}

function js_Focus_On_Action_Button(jSource_Index, jEvent)
{

	if (jEvent.keyCode == 37 || jEvent.keyCode == 38)
	{
		for (var i=jSource_Index-1; i >= 0; i--)
		{
			if (jEvent.keyCode == 37)
			{
				if (document.all[i].id.indexOf("Action_Button") >= 0)
				{
					document.all[i].focus();
					return false;
				}
			}
			else
			{
				if (document.all[i].id == document.all[jSource_Index].id)
				{
					document.all[i].focus();
					return false;
				}
			}
		}
	}
	else
	{
		if (jEvent.keyCode == 39 || jEvent.keyCode == 40)
		{
			for (var i=jSource_Index+1; i < document.all.length; i++)
			{
				if (jEvent.keyCode == 39)
				{
					if (document.all[i].id.indexOf("Action_Button") >= 0)
					{
						document.all[i].focus();
						return false;
					}
				}
				else
				{
					if (document.all[i].id == document.all[jSource_Index].id)
					{
						document.all[i].focus();
						return false;
					}
				}
			}
		}
	}
}

//start function for search area
	function js_Search_Area()
	{
		try
		{
			var funObj = findObj('search_area_icon');
			var myDiv = findObj('span_search_area');
		
			if (funObj != null && myDiv != null)
			{
				if (mSearch_Area_Opened)
				{
					funObj.src = '../../images/icon/close_search_area.gif';
					js_changeDivVisible('span_search_area', true);
					js_Focus_Keyword();
				}
				else
				{
					funObj.src = '../../images/icon/open_search_area.gif';
					js_changeDivVisible('span_search_area', false);
				}
				mSearch_Area_Opened = !mSearch_Area_Opened;
			}
			else
			{
				alert('No search area in this form.');
			}
		}
		catch (e)	
		{}
	}
	
	function js_Focus_Keyword()
	{
		try
		{
			var myObj = document.forms[0]['txt_Keyword'];
			if (myObj != null)
			{
				myObj.select();
				myObj.focus();
				return;
			}
		}
		catch (e) 
		{
			alert(e.Message);
		}
	}
	
	function js_Quick_Access_Focus_Next_Obj(jEvent, jSource_Index)
	{
		js_Select_Next_Obj(jEvent, jSource_Index);
	}
	
	function js_Quick_Access_Focus_On_Action_Button()
	{
		var myFirst_Action_Button_Index = 0;
		
		if (document.all['Action_Button_View'] == '[object]')
		{
			if (document.all['Action_Button_View'].length >= 1)
				myFirst_Action_Button_Index = document.all['Action_Button_View'][0].sourceIndex;
		}
		
		for (var i=myFirst_Action_Button_Index; i < document.all.length; i++)
		{
			if (document.all[i].id.toString() != '[object]')
			{		
				if (document.all[i].id.indexOf("Action_Button") >= 0)
				{
					document.all[i].focus();
					return false;
				}
			}
		}
	}

	function js_Quick_Access_On_Keypress(jEvent, jSourceIndex, jValue)
	{
		if (jEvent.keyCode == 13) 
		{
			if (jValue == 5)
			{
				js_Quick_Access_Focus_Next_Obj(jEvent, jSourceIndex);
			}
			else
			{
				if (jValue == 8)
				{
					js_Quick_Access_Focus_On_Action_Button();
				}
				else
					location.href = jValue;
			}
		}
		return false;
	}
	
//end function for search area

// function for TreeView Menu Start
	function js_ExpandAll()
	{
		for (var i=0; i < document.all.length; i++)
		{
			if (js_Is_Equal_Str(document.all[i].tagName, 'treeview'))
			{
				document.all[i].innerHTML = js_Replace_All(document.all[i].innerHTML, "Expanded=\"False", "Expanded=\"True");				
				document.all[i].expandAll();
			}
		}
	}
	
	function js_CollapseAll()
	{
		for (var i=0; i < document.all.length; i++)
		{
			if (js_Is_Equal_Str(document.all[i].tagName, 'treeview'))
			{
				document.all[i].innerHTML = js_Replace_All(document.all[i].innerHTML, "Expanded=\"True", "Expanded=\"False");
				document.all[i].collapseAll();
			}
		}
	}

// function for TreeView Menu End

// function for open print page start
	function js_Open_Print_Page(jURL)
	{
		window.open('../../include/common_page/direct_print.aspx?print_page=' + jURL, '_blank', 'height=141, width=170, top=0, left=0, resizable = no, scrollbars = no');
	}

// function for open print page end


function js_Is_Object(jObj)
{
	return (jObj == '[object]');
}

/*
 this function for content preview
 created by : Andy @ 07-Feb-2006
*/
function js_Content_Preview(jURL)
{
	var myWin = window.open(jURL, 'preview', 'height=700, width=1000, top=0, left=0, resizable = yes, scrollbars = yes, toolbar=yes, location=yes');	
	myWin.focus();
}

/*
 this function for Check HKID format
 created by : Andy @ 24-Aug-2006
*/
function js_Is_Valid_HKID(jHKID){
	// make format regular
	jHKID = jHKID.replace(" ", "");
	jHKID = jHKID.toUpperCase();

	var mySumTemp;
	// check the length
	switch(jHKID.length){
		case 8: 
			mySumTemp = 324 + (jHKID.charCodeAt(0) - 55) * 8; 
			break;
		case 9:
			mySumTemp = 297 + (jHKID.charCodeAt(1) - 55) * 8; 
			break;
		default:
			return false;
	}

	// check format

	var myTempID = jHKID.split("");
	for(i=jHKID.length-7; i<jHKID.length-1; i++)
		if(!((myTempID[i] = parseInt(myTempID[i])) > -1))return false;
	for(i=0; i<jHKID.length-7; i++)
		if(jHKID.charCodeAt(i) < 65 || jHKID.charCodeAt(i) > 90)return false;

	var myMultiTemp = 7;
	for(; i<jHKID.length-1; i++){
		mySumTemp += (myTempID[i] * myMultiTemp)
		myMultiTemp--;
	}

	return ((11 - mySumTemp % 11) % 11 == parseInt(myTempID[i], 16));
}	


