
// ---  reWritten by Albrey at 9:00 9-aug- 2006 for supporting MAC safari

var sPkObjID ="EOSEngineer.abFormValidation";


// These variables can be used globally by the included page.
var sOSVersion="", bMac = false, nIEVersion = 0;

// ------------------- remarked by Albrey on 6 Nov., 2004
 var DateEntryFormat = "MM/DD/YYYY"

var DayInInt =3600 * 24 * 1000
var sColorInvalid = "Khaki";
var sColorRowInvalid = "#ffff00";
var sConfirmSave ="Do you want to save changes?"
var sColorValid = "";
var rowSelected = 0;
var nActionNew=1;
var nActionEdit=2;
var nActionDelete=3;
var nActionComplete=4;
var nActionInvalid=5;
var SelfControl =1;
var AllowDelete=1;
var bFormEdited=false;
var nCurrAction=0;
var rowImage = new Array(10);
var sRootDir="/abPortal"
var sImageDir= sRootDir + "/BtnImages"
var nGoOnly =0;
var nMarkRowCtrl = 0;
rowImage[ 0 ] = sImageDir + "/RowBlank.gif";
rowImage[ nActionNew ] = sImageDir + "/RowNew.gif";
rowImage[ nActionEdit ] = sImageDir + "/RowOK.gif";
rowImage[ nActionDelete ] = sImageDir + "/RowDelete.gif";
rowImage[ nActionComplete ] = sImageDir + "/RowNotComplete.gif";
rowImage[ nActionInvalid ] =  sImageDir + "/RowOK.gif";
try {
  if (!opener && window.dialogArguments) opener = window.dialogArguments;
} catch(e) { }
try {
if (window.dialogArguments)
	var frmParent = dialogArguments;
} catch(e){			// Create local variable e.
	//abAlert(e );
	window.close();
}
function abConvertSChar( sValue) {
	return sValue.replace(/&/g , "!amp!")
}

function abDateConstruct( nYear, nMonth, nDay){
var sDate ="";
if ( nMonth >= 12  || nMonth <= 0)  nMonth = 12 ;
if ( nDay >= 32  || nDay <= 0) nDay = 1;
switch (DateEntryFormat) {
	case "DD/MM/YYYY" :
		sDate = nDay.toString() + "/" +  nMonth.toString() + "/" + nYear.toString();
		break;
	case "MM/DD/YYYY" :
		sDate = nMonth.toString() + "/" + nDay.toString() + "/" +  nYear.toString();
		break;
	default :
		sDate = nYear.toString() + "/" +   nMonth.toString() + "/" + nDay.toString(); 
		break;
}

return sDate;
}

function initTableButton( TableID  ) {
  if (SelfControl == true ) {
	  DisableFuncButton( getTableObj( TableID, "btn","Save"));
	  DisableFuncButton( getTableObj( TableID, "btn","Cancel"));
  }	  
  if (AllowDelete == 1 ) DisableFuncButton( getTableObj( TableID, "btn","DeleteRows"));
}

// ------------------- Table Function  

function rowCheckFlag( TableID, nRowID, nAction) {
	var sActionStr = getTableChildObj(TableID,"tb" , "ActionRow", nRowID, "input", document).value;
	var sAction = sActionStr.substr(nAction , 1)
	if ( sAction == "1" | (nAction == 0 & sActionStr == "000000" ) )
		return true;
	else
		return false;
}	

function rowFlagAction(TableID, nRowID, nAction, bSet) {
	var bTakeAction= false;
	var sAction;
	var sActionStr = getTableChildObj(TableID,"tb" , "ActionRow", nRowID, "input", document).value; 
	var sOrgAction = sActionStr.substr(nAction, 1)
	if ( bSet ) {
			sAction = "1";
	} else {
			sAction = "0";
	}		 
	
	bTakeAction =  ( sOrgAction != sAction ) ;
	if ( bTakeAction ) {
	  // ---------------------- Add by Albrey on 16 Oct., 2002
	  if ( nAction >nActionNew &   nAction < nActionComplete ) {
  	    sActionStr = "0000" +	sActionStr.substr( 4, 2)
		sActionStr = sActionStr.substr(0,nAction  ) + sAction + 
				sActionStr.substr(nAction -1, 3 - nAction ) + "10" ;
	  }  else
		sActionStr = sActionStr.substr(0,nAction ) + sAction + 
			sActionStr.substr(nAction-1 ,5 - nAction ) ;
  	  getTableChildObj(TableID,"tb" , "ActionRow", nRowID, "input", document).value = sActionStr;
	  rowDisplayFlag(TableID, nRowID);
	}		
	  rowShowImage(TableID, nRowID);
}

function rowShowImage(TableID,  nRowID ) {
var sActionStr = getTableChildObj(TableID,"tb" , "ActionRow", nRowID, "input", document).value; 
var sAction =  sActionStr.substr(0,4);
var nImageID = 0;
var objButton = getTableChildObj(TableID,"btn" , "ActionRow", nRowID, "img", document);
var objTableRow = getTableChildObj(TableID,"tr" , "DataRow", nRowID, "tr", document);

if ( rowCheckFlag(TableID, nRowID,nActionComplete)== false ){
	objButton.src = rowImage[ nActionComplete ];
 	objTableRow.bgColor = sColorRowInvalid;
} else {
	switch ( sAction) {
		case "0000" :
			nImageID  = 0;
			break;
		case "0100" :
			nImageID  = nActionNew;
			break;
		case "0010" :
			nImageID  = nActionEdit;
			break;
		case "0001" :
			nImageID  = nActionDelete;
			break;
	}
//	getTableObj( TableID, "btn" , "ActionRow")[nRowID].src = rowImage[ nImageID ];
// 	getTableObj( TableID, "tr" , "DataRow")[nRowID].bgColor = sColorValid;		 
//  Toby - 20060823 - use getTableChildObj instead of getTableObj
	getTableChildObj(TableID, "btn", "ActionRow", nRowID, "IMG", document).src = rowImage[ nImageID ]; 
	getTableChildObj(TableID, "tr", "DataRow", nRowID, "TR", document).bgColor = sColorValid; 
 }
}

function rowDisplayFlag(TableID,  nRowID ) {
	var sActionStr =getTableChildObj(TableID,"tb" , "ActionRow", nRowID, "input", document).value;
	var bSet = false; 
		for (var index = 3; ( index >= 0 & (  bSet == false ) ) ; index-- ) {
			if ( sActionStr.substr( index , 1) == "1" ) bSet = true;
		}	
		try {
			if ( index <= 0 ) EnableFuncButton(getTableChildObj(TableID,"btn" , "EditRow", nRowID, "img", document));
			if ( index == 2  || (index == 0 & bSet ) ) 	
				DisableFuncButton(getTableChildObj(TableID,"btn" , "EditRow", nRowID, "img", document) );
				
			} catch(e){   // Create local variable e.
		}

}


function rowFirstEdit(TableID, nAction, nRowID) {
	RowFirstEdit(TableID, nAction, nRowID);
    rowAnyEdit( TableID, nRowID ) ;
}



function rowPrimaryCheck(TableID, nRowID, ObjectID){
var sPrimaryParam ='';

if ( AutoRun ) {
	rowAnyEdit(TableID,  nRowID );		
	return true;
} else {
	var sValue = RowGetPrimaryValue(TableID, nRowID);
	var borgPrimaryOK = ( getTableChildObj(TableID,"tb" , "PKValueRow", nRowID, "input", document).value.length > 0) ;
	
	var bPrimaryOK = true;
	for (var index = 0; ( index < nNewRow & bPrimaryOK ) ; index++) {
		if ( index != nRowID ) bPrimaryOK = ( sValue.toLowerCase() != RowGetPrimaryValue(TableID, index).toLowerCase()) 
	}	

	if (  bPrimaryOK == false )
		 rowSetPKFlag( TableID, nRowID, "" );
	 else
		 rowSetPKFlag( TableID, nRowID, sValue );
		 
	if ( borgPrimaryOK != bPrimaryOK )  rowAnyEdit( TableID, nRowID );
	
	if ( bPrimaryOK ) {
			RowPrimaryCheck( TableID,  nRowID );	
			rowAnyEdit(TableID,  nRowID );		
			sPrimaryParam = RowFormatParam(TableID, nRowID);	
			// Checking for the '#' symbol which are not allow to enter
            // Added by Jacky Chan on 15/09/2005
            if (sPrimaryParam.indexOf('#') == -1) {
				if (sPrimaryParam !='') {
				var sPrimaryParam = "ID=" +  frmDataEntry.SessionID.value + sPrimaryParam  ;
				sPrimaryParam += "&ObjID=" + ObjectID   ;
				sPrimaryParam += "&Obj=abDictionary.funcValidation&CMD=frmPK";
				ServerCommand("PrimaryKeyCheck" , sPrimaryParam);
				}	
            }           
            else {
                abAlert(sInputSharpMsg);
                RowInvalidPrimaryKey(nRowID);
                //return false;
				return true;
            }
	} else {
			// Skip the alert message if the Row value does not have value
                        // Added by Jacky Chan on 07/09/2005
                        if (sValue != '~~') {
                                    abAlert(sDuplicateMsg);
                        }
			 RowInvalidPrimaryKey(nRowID);
			 //return false; 
			 return true;
	}	  

}	// end of if ( AutoRun ) 

}	  

function rowSetPKFlag(TableID, nRowID, sValue) {
	getTableChildObj(TableID,"tb" , "PKValueRow", nRowID, "input", document).value = sValue;
}


function rowIsValidationOK(TableID, Row){
return (  getTableChildObj(TableID,"tr" , "DataRow", Row, "tr", document).bgColor.toUpperCase( ) != sColorRowInvalid.toUpperCase( ) );
}

function rowHasEdited(TableID, Row){
	var sActionStr = getTableChildObj(TableID,"tb" , "ActionRow", Row, "input", document).value;
	return (sActionStr.substr(5, 1) == "1");
}

function rowIsPrimaryOK ( TableID,  Row ) {
if ( AutoRun ) {
	return  true;
} else {	
	var sPrimaryValue =getTableChildObj(TableID,"tb" , "PKValueRow", Row, "input", document).value;
	return (sPrimaryValue.length > 0 ) ;
}
}


function rowChangeStatus( TableID, Row, bValidOK ) {
getTableChildObj(TableID,"tr" , "DataRow", Row, "tr", document).style.display = "";
rowFlagAction( TableID, Row, nActionInvalid, true);

if ( bValidOK  ) {
	    rowFlagAction( TableID, Row, nActionComplete, true);
}
else {
	    rowFlagAction( TableID, Row, nActionComplete, false);
}
RowChangeStatus( TableID, Row, bValidOK );
}




function rowAnyEdit(TableID,  Row ){
	var bRowOKBefore = ( rowIsValidationOK(TableID, Row) ) ;
	var bValidOK = RowIsDataValid(TableID,Row);
	var bIsPrimaryOK = rowIsPrimaryOK(TableID,  Row );
	var bRowOK = ( bValidOK & bIsPrimaryOK );
	//Set the Last Flag to 1 to indicate the row has been edited
	var objtbActionRow = getTableChildObj(TableID,"tb" , "ActionRow", Row, "input", document) ;
	var sActionStr = objtbActionRow.value;
	
	
	objtbActionRow.value = sActionStr.substring(0,5) + "1";
	sActionStr = objtbActionRow.value;

	var sImage = getTableChildObj(TableID,"btn" , "ActionRow", Row, "img", document).src;

	if ( sActionStr.substring(0,4)  =="0000" ) RowFirstEdit(TableID, nActionEdit, Row); 
	RowAnyEdit(TableID, Row);
	if ( bRowOK != bRowOKBefore ||  sActionStr.substring(0,4)  =="0000" ) {

		rowChangeStatus( TableID, Row, bRowOK ); 
		
	}	

	if  ( sActionStr.substring(0,4 ) == '0000' || nCurrAction == 0 ) {
			if (  sActionStr.substring(0,4 ) == '0100'  ) 
				nCurrAction = nActionNew;
			else
				nCurrAction = nActionEdit;
			rowFlagAction( TableID, Row, nCurrAction, true);
		}
		
		
	if (sImage.replace( "RowBlank.gif", "")!= sImage ) {
		rowShowImage(TableID,  Row )
	}
	// frmAnyEdit(TableID ); 
	if (SelfControl == false ) {
		 frmAnyEdit("frm" ); 
	} else	 {
		 frmAnyEdit(TableID ); 
	} 

	nCurrAction == 0; 	 
}


function tblCalTotal(TableID , objID ){
var nTotal=0;
var nIdx=0;

for (nIdx = 0;  nIdx <= nNewRow ; nIdx++){	if (rowIsValidationOK (TableID, nIdx)) nTotal = nTotal + getAmount( objID[nIdx]);	
}
	setAmountValue(objID[nMaxRow], nTotal);
}
 function tblAddRow(TableID ) {
	tblAddRow(TableID, false );
}  
function tblAddRow(TableID, noChecking ) {
	var objAddRows = getButtonObj( TableID,  "AddRows" );
	var objSave = getButtonObj( TableID,  "Save" );
	var objCancel = getButtonObj( TableID,  "Cancel" );
	
	if (!TblAddRow(TableID))  return;
	if (noChecking || IsButtonEnable(objAddRows )){
	  if ( SelfControl == true	) {
		EnableFuncButton(objSave);
		EnableFuncButton(objCancel);
	   } else
		 frmAnyEdit("frm" );  	
	 
      // --------------- Display a new row
       getTableChildObj(TableID,"tr" , "DataRow", nNewRow, "tr", document).style.display = "";

	  nCurrAction = nActionNew;
	  rowFirstEdit(TableID, nActionNew, nNewRow);
	  rowFlagAction( TableID, nNewRow, nActionNew, true);
	  rowAnyEdit( TableID, nNewRow);
	  
  	  var sActionStr = getTableChildObj(TableID,"tb" , "ActionRow", nNewRow, "input", document).value;



      if ( nNewRow != 0 ) RowChangeAction(TableID, nActionNew, nNewRow);
	 
	  nNewRow++;
	  if (nNewRow == nMaxRow) {
		if ( objAddRows  != null )  abAlert(sMaxRowsMsg);
		DisableFuncButton(objAddRows); 
	  }
	}
 }
 
 // 20090312 Toby
function TblAddRow(TableID)
 {
	 return true;
 }

// Function for DELETE the Record
  function tblDeleteRowsRow(TableID ) {
  
	var objSave = getButtonObj( TableID,  "Save" );
	var objCancel = getButtonObj( TableID,  "Cancel" );
	var objDeleteRows = getButtonObj( TableID,  "DeleteRows" );

  var nLastRow =  nNewRow ;
  var nDeleteAction = 0;
  var sMessage = sSelectRowDelete;
  var objsMarkRow = getTableChildObj(TableID,"cb" , "MarkRow", -1, "input", document)
  
  	 if (IsButtonEnable(objDeleteRows ) ){
		for (var i=0; i< nLastRow & ( nDeleteAction ==  0 )  ;i++ ) {
		  if (objsMarkRow[i].checked == true) {
	 	    if ( rowCheckFlag( TableID, i, nActionDelete ) ){
	 			nDeleteAction = 1;
	 			sMessage= sConfirmUnDelete;
	 		} else {
	 			nDeleteAction = 2;
	 			sMessage= sConfirmDelete;
	 		}	
	 	  }	
	  }
		
	 if (abConfirm(sMessage)) {
	    EnableFuncButton(objSave);
		EnableFuncButton(objCancel );
		
		var objsDeleted = getTableChildObj(TableID,"cb" , "MarkRow", -1, "input", document)
		for (var i=0; i< nLastRow ;i++ ) {
		
		
		  if ( objsDeleted[i].checked == true) {
	 	    if (nDeleteAction == 2 ) {
	 			rowFlagAction( TableID, i, nActionDelete, true);
				RowDeleted(TableID, i,  true);	
			 }	else {
	 			rowFlagAction( TableID, i, nActionDelete, false);
				RowDeleted(TableID, i,  false);	
			 }
			  
		   }
		}
	  }
	}  
  } 

// Function for Edit Mode
  function rowEdit(TableID, nRowID) {
  
  var btnEdit = getTableChildObj(TableID,"btn" , "EditRow", nRowID, "img", document);
  if(  btnEdit == null ) btnEdit =  getButtonObj( TableID,  "EditRow" );
 
  	var objSave = getButtonObj( TableID,  "Save" );
	var objCancel = getButtonObj( TableID,  "Cancel" );

    if (IsButtonEnable(btnEdit)) {
	  disableRowButton(TableID, nRowID);
	  if (SelfControl == true ) {
		  EnableFuncButton(objSave ) ;
		  EnableFuncButton(objCancel);
	  }
	  nCurrAction = nActionEdit;
	  rowFlagAction( TableID, nRowID, nActionEdit, true);
 	  rowFirstEdit(TableID, nActionEdit, nRowID);
      RowChangeAction(TableID, nActionEdit, nRowID);
      rowAnyEdit(TableID,  nRowID);
	}
  }
  
  function rowDelete(TableID, nRowID) {
   rowDelete(TableID, nRowID, false );
  }

// Function for DELETE the Record
  function rowDelete(TableID, nRowID,noChecking) {
  
  var bDelete = rowCheckFlag(TableID, nRowID, nActionDelete );	
  var objDelRow = getTableChildObj(TableID,"btn" , "DeleteRow", nRowID, "img", document) ;	
 
 	if (noChecking || IsButtonEnable( objDelRow )){
	  nCurrAction = nActionDelete;
	  rowFlagAction( TableID, nRowID , nActionDelete, ( ! bDelete ));
//	  rowFlagAction( TableID, nRowID, nActionComplete, ( ! bDelete ));
//      rowAnyEdit(TableID,  nRowID);
	  RowDeleted(TableID, nRowID,  ( ! bDelete ));	


		if (SelfControl == false ) {
			 frmEdit("frm" ); 
		} else	 {
			 frmAnyEdit(TableID ); 
		} 
	  
//	  EnableFuncButton(getTableObj( TableID, "btn" , "Save")) ;
//	  EnableFuncButton(getTableObj( TableID, "btn" , "Cancel"));
  
	}
}

function disableRowButton(TableID, nRowID) {
//	  DisableFuncButton(getTableChildObj(TableID,"btn" , "DeleteRow", nRowID, "img", document));
//	  DisableFuncButton(getTableChildObj(TableID,"btn" , "EditRow", nRowID, "img", document));
	  getTableChildObj(TableID,"cb" , "MarkRow", nRowID, "input", document).disabled = true;
}


// ------------ End of Table Function
	function frmSaveByControl(){
//          if (frmBeforeSave() ){
		document.frmDataEntry.action = sURLSave;
		disableSubmitAgain(document.frmDataEntry);
		convertAllComma();
		document.frmDataEntry.submit();
//	}	
}


// Function for SAVE the Change
  function frmSave(TableID) { 
  // Mark the Value Into Hidden Field
   // If Contain more than One Record in the List

      if (IsButtonEnable(getTableObj( TableID, "btn" , "Save"))) {
		nGoOnly =0;
        if (frmBeforeSave() ){
		  if (PromptInvalidRow()) //IvanChan 20060808, Prompt warning message for incompleted data row (background colour in yellow)
          if (abConfirm(sConfirmSave)) {
			if (frmBeforeSaveAction()) { //action only, i.e. convertcomma
				document.frmDataEntry.action = sURLSave;
//				//frmSaveBeforeAction();
				DisableFuncButton( getTableObj( TableID, "btn","Save"));
				disableSubmitAgain(document.frmDataEntry); 
				convertAllComma();
				document.frmDataEntry.submit();
			}
	  }
	}
      }
  }

function PromptInvalidRow(){ 
	var oTable = document.getElementsByTagName("table");
	var obj;
    var i, j;
    for (i=0;i<oTable.length;i++)
    { 
		obj = oTable[i];
		for (j=0;j<obj.rows.length;j++){
		try{ 
			if (obj.rows[j].bgColor == sColorRowInvalid){
					return abConfirm(sInvalidMsg);
			}
		}catch(e){}
		}
    }
	return true;
}

// Function for CANCEL the Action
  function frmCancel(TableID) {
    if (IsButtonEnable(getTableObj( TableID, "btn" , "Cancel"))) {
      if (abConfirm(sConfirmCancel)) {
//---------------------------Charged by albrey on 23 June 2003
//	    document.frmDataEntry.action = sURLRefresh 
//	    document.frmDataEntry.submit();
		disableSubmitAgain(document.frmDataEntry);
		document.location = sURLRefresh;
	  }
	}
  }


// ------------- Add by Albrey on 4 August 2003 for 
function cbSelectAllOnClick(TableID, nRowID ) {
    var sLabel = divLabelSelectAll.innerText;
   if ( frmDataEntry.cbSelectAll.checked ) 
		rowSelected =0;
   else
	   	rowSelected =nMaxRow;
   
   try {
		for (var i=0; i< nMaxRow  ;i++ ) {
				  getTableObj( TableID, "cb", "MarkRow")[i].checked = frmDataEntry.cbSelectAll.checked
				  cbMarkRowOnClick(TableID, i );
			 }				
 	 }
	catch(e){   // Create local variable e.
	}
  }


  function cbMarkRowOnClick(TableID, nRowID) {
    var bMarked = false;
    var objCtrlButton ;
    var objSelectorCtr = getTableObj( TableID, "tb","RowSelected");
    
    objCtrlButton= getTableObj( TableID, "btn","DeleteRows");

    if  (objCtrlButton== null || nMarkRowCtrl != 0)
 		objCtrlButton= getTableObj( TableID, "btn","Save");
   
    try {
	  if (getTableChildObj(TableID, "cb", "MarkRow", nRowID, "input", document).checked == true)
	    rowSelected ++;
	  else 
		rowSelected--;

		if ( objSelectorCtr  != null )  setAmountValue( objSelectorCtr, rowSelected);
			
		if ( EditMode == 2  && AllowDelete == 1  ) {
			if (rowSelected >  0  ) 
			  EnableFuncButton(objCtrlButton );
			else 
			  DisableFuncButton( objCtrlButton);
		}	
	 }
	catch(e){   // Create local variable e.
	}
	afterMarkRowOnClick(TableID, nRowID)
  }

function afterMarkRowOnClick(TableID, nRowID)
{
}

// Modified by Albrey for Safari Support at 10 Aug., 2006

 function getElementsByTagNames(tagName, ObjectName, Parentobj)
{
	
	var resultArray = new Array();
	var objName ='';
	
		var tags = Parentobj.getElementsByTagName(tagName);
		for (var j=0;j < tags.length;j++)
		{
			try {
				objName = tags[j].id;
			} catch(e) {objName = ''}	
			if  ( objName == ObjectName )  resultArray.push(tags[j]);
		}
	
	return resultArray;
}

function getTableChildObj(TableID, ObjType, ObjID, RowID, tagName, Parentobj) { 
var sObjectID = getTableObjName(TableID, ObjType, ObjID);

// add try to protect error by aw 2008-mar-27
try {
	if ( nIEVersion >= 5 ) {
			var obj = document.all( sObjectID ) ;
	} else {
			
			var obj = getElementsByTagNames(tagName, sObjectID, Parentobj);
	}
	if ( RowID == -1 ) {
				return obj;
	} else {
		return obj[RowID] ;
	}	
	} catch(e) {
	return  null;
	}
}

function getTableObj(TableID, ObjType, ObjID) {
try 
{
	var sObjectID = getTableObjName(TableID, ObjType, ObjID);
	return getObjHandle( sObjectID ) ;
	} catch(e) {
	return  null;
	}
	
}
function getObjHandle(sObjectID) {
	if ( nIEVersion > 5 ) {
			return document.all( sObjectID ) ;
	} else {
			return document.getElementById( sObjectID ) ;
	}
}

function getButtonObj( TableID,  ObjID){

var sObjectID = getTableObjName(TableID, "btn", ObjID);

	if ( nIEVersion > 5 ) {
			var rtnObj =  document.all( sObjectID ) ;
	} else {
		try {
				var rtnObj =  document.getElementById( sObjectID ) ;
			} catch(e) {
			//	alert( ' getButtonObj - >  '  + sObjectID);
				var rtnObj = getTableChildObj(TableID, "btn", ObjID, 1, "img", document)
			}
	}
	return rtnObj;
}
	
	
	

function getTableObjName(TabelID, ObjType, ObjID) {
	return ( ObjType + TabelID + ObjID ) ;
}


function DisableObject(Obj){
try {
    Obj.className = "clsReadOnlyBox"
	Obj.readOnly = true;
	Obj.ro = 1;					// for dispaly format 19
}
catch(e){   // Create local variable e.

	}
}
function EnableObject(Obj){ 
try {
    Obj.className = "clsInputBox"
	Obj.readOnly = false; 
    formatRequire(frmDataEntry, Obj);
    if (Obj.ro == 1) {
		Obj.ro = 0;					// for dispaly format 19
		eval("Obj1 = frmDataEntry." + Obj.db + "[" + Obj.di + "]");
		Obj1.className = "clsInputBox"; 
	}
}
catch(e){   // Create local variable e.

	}
}

function DisableCBObject(Obj){
try {
//    Obj.className = "clsReadOnlyBox"
	Obj.disabled = true;
}
catch(e){   // Create local variable e.

	}
}

function EnableCBObject(Obj){
try {
    if (Obj.type != "checkbox" ) Obj.style.backgroundColor = "white";
	Obj.disabled = false;
}
catch(e){   // Create local variable e.

	}
}

function EnableXBObject(Obj){
try {
	Obj.disabled =false;
}
catch(e){   // Create local variable e.

	}
}

// toby-merge 20050725 function cancelAction (evt) {
//  return false;
//}

function DisableFuncButton( obj ) {
	try {
	if ( nIEVersion >= 5 ) {
	obj.style.filter = "gray";
	} else {
		var sImageSrc = obj.src;
		obj.src = sImageSrc.replace( /_.gif/g, ".gif");
		obj.src = obj.src.replace( /.gif/g, "_.gif");
	}	
	obj.style.cursor="default";
	if (!obj.ButtonDisable) obj.oldOnclick = obj.onclick;
	obj.ButtonDisable = true;
    obj.onclick = "return false";
	}
	catch(e){   // Create local variable e.
	}
}
	
function EnableFuncButton( obj ) {
	try {
	if ( nIEVersion >= 5 ) {
	obj.style.filter = "";
	} else {
		var sImageSrc = obj.src;
		obj.src = sImageSrc.replace( /_.gif/g, ".gif");
	}	
	obj.style.cursor="pointer";
    if (obj.ButtonDisable) obj.onclick = obj.oldOnclick;
	obj.ButtonDisable = false;
	}
	catch(e){   // Create local variable e.
	}
}	

 function IsButtonEnable(obj) { 
   var IsEnable =false;

	try {	
		if ( nIEVersion > 5 ) {
			if (obj.style.filter == "" ) IsEnable = true;
		} else {
			if (obj.style.background == "" ) IsEnable = true;
		}
	}
	catch(e){   // Create local variable e.
	//	alert( 'error  IsButtonEnable(obj) -> ' + e);
		IsEnable = false;
		}

  return IsEnable;
  }

function Today() {
var s ="";
var d = new Date();
var c = ":";
   s = (d.getMonth() + 1) + "/";            //Get month
   s += d.getDate() + "/";                   //Get day
   s += d.getFullYear() +" ";                    //Get year.
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds();

   return(s);                                //Return date.


}

function checkTableInvalid(TableID) {
var Idx=0;
var desc;
var bOK = true;
	for ( Idx= 0 ; Idx <= nNewRow; Idx++ ){
		if ( rowIsValidationOK(TableID, Idx) == false && rowHasEdited(TableID, Idx) ) {
			if ( abConfirm(sInvalidMsg) == false ) {
				bOK = false;
			}
			Idx	= nNewRow + 2;
		}		
	}
return bOK;	
}

// toby - new function to convert all commas for INPUT and TEXTAREA Array before submit form
function convertAllComma()
{ 
var obj = document.getElementsByTagName("INPUT");
for (var Idx= 0 ; Idx < obj.length; Idx++ ){ 
try { 
	if (document.getElementsByName(obj[Idx].name).length > 1)
	if (obj[Idx].value != "")
		if (!obj[Idx].preset)
			obj[Idx].value = obj[Idx].value.replace(/,/g , "!;!");
		else if (obj[Idx].preset.toLowerCase() != 'date')
			 obj[Idx].value = obj[Idx].value.replace(/,/g , "");
} catch (e) {}
}

var obj = document.getElementsByTagName("TEXTAREA");
for (var Idx= 0 ; Idx < obj.length; Idx++ ){ 
try {
	if (document.getElementsByName(obj[Idx].name).length > 1)
	if (obj[Idx].value != "" && !obj[Idx].preset)
	obj[Idx].value = obj[Idx].value.replace(/,/g , "!;!");
} catch (e) {}
}
}

function convertComma( obj) {
var Idx=0;
var desc;
try {
	for ( Idx= 0 ; Idx < nNewRow; Idx++ ){
		desc  = obj[Idx].value;
		desc = desc.replace(/,/g , "!;!")
		obj[Idx].value = desc
		
	}
}
catch(e){   // Create local variable e.

	}	
}


function convertAndSign( desc) {
try {
		return  desc.replace(/&/g , "%26");
}
catch(e){   // Create local variable e.

	}	
}

//------------- Add by Albrey on 11 July 2003 for mask input
function getAmount( obj) {
var sValue  = obj.value

	if  ( sValue.search(/,/i) == -1 )
		var nValue = parseFloat(sValue);
	else	
		 //IvanChan 20051109, replace all "," rather than only the first one.
		 var nValue = parseFloat(sValue.replace(/,/ig,''));

 	// 20090319
	if (isNaN(nValue)) 
		var nValue = 0;

return nValue;
}
function convertAmount( obj) {
var Idx=0;
var desc;


var re;
re = /,/g;

var sValue;

try {
		for ( Idx= 0 ; Idx < nNewRow; Idx++ ){
			/*Mac seems cannot work with the following statement*/
			/*if ( obj[Idx].realValue !='' ) obj[Idx].value  = obj[Idx].realValue;*/
		
			sValue = obj[Idx].value;
			obj[Idx].value = sValue.replace(re, "");
		
		}
	}
catch(e){   // Create local variable e.
		
	}
}

function setAmountValue( obj , Value) {
// modified by aw  --  fixed error if sDecimal not defined
var sDecimal ="0";

try { if (isNaN(obj.Decimal) == false ) sDecimal = obj.Decimal; } catch(e){};

	obj.realValue = Value ;		
	obj.value  =   MaskMoney(Value.toString(), sDecimal);
//	obj.innerText  =  obj.value;
	}
	


function assignAmountValue( objDest , objSource) {

	var sValue =  objSource.value;
	if  ( sValue.search(/,/i) == -1 )
		var nValue = parseFloat(sValue);
	else	
		var nValue = parseFloat( objSource.realValue);

	setAmountValue( objDest, nValue);
}


function MaskMoney(sValue, nDecPlace) 
{
    var sWorkStr  = sValue;
    var sReturnStr  = "";	 
    var sDecimal   = "."; 
    var sTempVal   = ""; 
    var sLeading = "";
    

    if (sValue.length == 0) return "";

	

    if (sValue.charAt(0) == "$")
    {
		sValue = sValue.substring(1,sValue.length);
    }

    if ( sValue.charAt(0) == "-" ) {
		sLeading ="-"
		sValue = sValue.substring(1,sValue.length)
	}

    //  Parse the value into a float number
	var iValue = parseFloat(sValue);
	if (isNaN(nDecPlace)) nDecPlace =0
	
	if (nDecPlace >0 )
		iValue = (Math.round(iValue * ( Math.pow(10, nDecPlace) ))) /  ( Math.pow(10, nDecPlace)  );
	
	//  If the value is not a number, return an error
	if (isNaN(iValue))
	{
	    ReturnError("Not a valid amount");
	    return "";
    }
    
    //  Return the value to a string to apply formatting
    sValue = iValue.toString();
    
    //
    //  Fill in zeros (if necessary) to show two digits to the right 
    //  of the decimal
    //
    if (sValue.indexOf(".") == -1)
    {
        sDecimal = sDecimal + Repeat("0", nDecPlace);
	sWorkStr =  sValue;
    }
    else
    {
	
	sWorkStr =  sValue.substring(0,sValue.indexOf(".") );
        if (sValue.indexOf(".") == sValue.length - 1)
        {
            sDecimal  = sDecimal +  Repeat( "0", nDecPlace);
        }
        else 
        {
            sDecimal  = sDecimal + sValue.substring(sValue.indexOf(".") +1, sValue.length  );
        }
	
	 if ( sDecimal.length <= nDecPlace )   sDecimal  = sDecimal + Repeat( "0", ( nDecPlace - sDecimal.length + 1 ) );  
		
    }
    
    	
    //  Add commas if necessary

	
   while ( sWorkStr.length  >  0) { 

	if (  sWorkStr.length  > 3 ) {
	  sTempVal=  sWorkStr.substring( sWorkStr.length - 3,sWorkStr.length )

	  sWorkStr = sWorkStr.substring( 0, sWorkStr.length - 3)

	} else {
	  sTempVal=  sWorkStr 
	  sWorkStr = ""
	}

	if ( sReturnStr !=""  )  
	   	sReturnStr = sTempVal + "," +  sReturnStr 
	else
	   	sReturnStr = sTempVal
		
   }		
	// modified by aw  --  fixed error if sDecimal not defined
	if ( nDecPlace ==  0 )    
		return sLeading + sReturnStr     ;
	else
		return sLeading + sReturnStr  + sDecimal   ;
}

function Repeat(sChar, nLen) 
{

var Index  = 1;
var sReturn = "";
do {
    sReturn += sChar;	
    Index += 1;	
   }
   while (Index <= nLen);
   return(sReturn );

}
	

// ------------------------  Form Function

function frmSaveBeforeAction(){
}


function FormRefresh() {
try{
	frmGo('frm');
	
} catch(e){	
   	
   	location.reload(true);
}
}


function fillObjectHTML( ObjectID, sContents){
htmlObject = ObjectID;
shtmlContents = sContents;
// setTimeout("refreshObject();", 1);
 refreshObject();

}
var htmlObject;
var shtmlContents = '';

function refreshObject() {

htmlObject.innerHTML =  shtmlContents
}

// 20070710 Toby
function sbReload(FormID, ObjectID, sParam, RowID, DisplayObjectID, bOnchange) {
// RowID - A = All array objects, blank = No array, 0-999 = RowID
	if (RowID != ""  && RowID == 0) RowID = "0"
	sParam = "ID=" + frmDataEntry.SessionID.value + sParam;
	sParam += "&FormID=" + FormID;
	sParam += "&ObjectID=" + ObjectID;
	if (DisplayObjectID) sParam += "&DisplayObjectID=" + DisplayObjectID;
	if (RowID) sParam += "&RowID=" + RowID;
	if (bOnchange) sParam += "&Onchange=1";
	sParam += "&obj=eosEngineer.abFormValidation&CMD=ReloadSelectionBox";
	ServerCommand("ReloadSelectionBox", sParam);
}

// 20070710 Toby
function sbEmptySelection(sbObjectID, RowID){
var sbObject = getObjHandle( sbObjectID );
if (RowID == "A")
  for (i = 0; i < sbObject.length; i++)
	sbObject[i].innerHTML ='';
else if (RowID == "") sbObject.innerHTML ='';
else sbObject[RowID].innerHTML ='';
	
}

// 20070710 Toby
function sbAddSelection( sbObjectID, val, txt, RowID){
var sbObject = getObjHandle( sbObjectID );
var tbObject = getObjHandle( "tb" + sbObjectID.substring(2,100) ); 
if (tbObject == null) tbObject = getObjHandle( "tb" + sbObjectID);

if (RowID == "A")
  for (i = 0; i < sbObject.length; i++) {
	var objO = document.createElement("OPTION");
	var objTxt =document.createTextNode(txt);
	var objVal = document.createAttribute('value'); objVal.value =val;
	objO.setAttributeNode(objVal);
	objO.appendChild(objTxt); 
	if (tbObject[i].value == val) objO.selected = true;
	sbObject[i].appendChild(objO); 
  }
else if (RowID == "") {
	var objO = document.createElement("OPTION");
	var objTxt =document.createTextNode(txt);
	var objVal = document.createAttribute('value'); objVal.value =val;
	objO.setAttributeNode(objVal);
	objO.appendChild(objTxt);
	if (tbObject.value == val) objO.selected = true;
    sbObject.appendChild(objO);
}
else {
	var objO = document.createElement("OPTION");
	var objTxt =document.createTextNode(txt);
	var objVal = document.createAttribute('value'); objVal.value =val;
	objO.setAttributeNode(objVal);
	objO.appendChild(objTxt);
	if (tbObject[RowID].value == val) objO.selected = true;
	sbObject[RowID].appendChild(objO);
}
}

// 20070710 Toby
function sbObjectOnChange(sbObjectID, RowID)
{
var sbObject = getObjHandle( sbObjectID );
if (RowID == "A")
  for (i = 0; i < sbObject.length; i++) {
	sbObject[i].onchange();
  }
else if (RowID == "") sbObject.onchange();
else sbObject[RowID].onchange();

}

function docViewHistory( TableID,  Row,sFileID, DocType) { 
var sURL = "/abPortal/abDocLib/Lists/lstDocHistory.asp" 
	 sURL += "?ID=" +  frmDataEntry.SessionID.value  
	 sURL +=  "&DocumentID=" + sFileID + "&IsPIn=1&A=P";

	var windowID ="docViewHistory";
	newWindows( windowID, sURL , 10,80, 850, 400 ) ;

}

function docViewVersion( TableID,  Row,sFileID, DocType) { 
var sURL = "/abPortal/abDocLib/Lists/lstAllVersions.asp" 
	 sURL += "?ID=" +  frmDataEntry.SessionID.value  
	 sURL +=  "&DocumentID=" + sFileID + "&IsPIn=1&A=P";

	var windowID ="docViewVersion";
	newWindows( windowID, sURL , 10,80, 850, 400 ) ;
}


function frmInitButtons(FormID) {
	DisableFuncButton(getTableObj( FormID, "btn" , "Cancel"));
    DisableFuncButton(getTableObj( FormID, "btn" , "Save"));
}

function frmFirstEdit( FormID,  nAction ) {
	FrmFirstEdit(nAction);

	DisableFuncButton(getTableObj(FormID, "btn" , "Add"));
	DisableFuncButton(getTableObj(FormID, "btn" , "Edit"));
	DisableFuncButton(getTableObj( FormID, "btn" , "Delete"));
    EnableFuncButton(getTableObj( FormID, "btn" , "Cancel"));
	if (SelfControl )  
		frmButtonControl(FormID);
	else
 	    EnableFuncButton(getTableObj( FormID, "btn" , "Save"));
	
}

function frmAdd( FormID) { 
	if (IsButtonEnable(getTableObj( FormID, "btn" , "Add"))) {
		FrmChangeAction( nActionNew ); 
		frmFirstEdit(FormID, nActionNew);
	    frmDataEntry.FormAction.value ="010000";
	}
}

/* change function frmAnyEdit and frmEdit  by albrey on 26 Jan., 2004 */
function frmAnyEdit( FormID) {
try{
var sAction = frmDataEntry.FormAction.value;
	if ( bFormEdited== false ) {
		bFormEdited=true;  
		FrmChangeAction( nActionEdit ); 
		frmFirstEdit(FormID, nActionEdit);
	   if ( sAction.substring(1,4)=='000' ) frmDataEntry.FormAction.value ="001000";
	}	
} catch(e){
}	
}

function frmPrimaryCheck(FormID) {
	var sFormParam = FrmFormatParam(FormID);
	var sParam = "ID=" + frmDataEntry.SessionID.value;

	if (sFormParam.indexOf('#') != -1) {
		abAlert(sInputSharpMsg);
		var sCmd = sFormParam;
		var sValue = ""
		// find the objID with value contains #
		while (sValue.indexOf('#') == -1) {
			//get ObjectID
			var nPos = sCmd.search("&ObjID=");
			var sObj = sCmd.substring(nPos + 7);
			nPos = sObj.search("&");
			sCmd = sCmd.substring(nPos);
			sObj = sObj.substring(0, nPos);
			// Get Object Value
			var sValue = ""
			try {sValue = eval(sObj + ".value");} catch (e) {}
			if (nPos <0) sValue = "#";   //exit loop
		} 
		try {eval(sObj + ".value = '';")} catch (e) {} 
	}
	else {
		sParam += "&Obj=abDictionary.funcValidation&CMD=frmPK";
		sParam += sFormParam;
		abServerCmd("pkChecking" + FormID , sParam);
	}
}

function frmDelete( FormID) {
  // Mark the Value Into Hidden Field
   // If Contain more than One Record in the List
    if (IsButtonEnable(getTableObj( "frm", "btn" , "Delete"))) {
	  if (abConfirm(sConfirmDelete)) {
		if (frmBeforeDelete() ){
		    frmDataEntry.FormAction.value ="000110";
		    document.frmDataEntry.action = sURLSave;
			disableSubmitAgain(document.frmDataEntry); 
			convertAllComma();
		    document.frmDataEntry.submit();
		}
	  }
	}
  }
  
  

function frmEdit(FormID) {
var sAction = frmDataEntry.FormAction.value;

	bFormEdited=true;
	if ( sAction.substring(1,4)=='000' ) frmDataEntry.FormAction.value ="001000";
	FrmChangeAction( nActionEdit ); 
	frmFirstEdit(FormID, nActionEdit);
	frmAnyEdit(FormID);
	}


function frmButtonControl(TableID) {

	EnableFuncButton(getTableObj( TableID, "btn" , "Cancel"));
	if (frmValidSave() == true) {
	  EnableFuncButton(getTableObj( TableID, "btn" , "Save"));
	}
	else {
	  DisableFuncButton(getTableObj( TableID, "btn" , "Save"));
	}
}



function getFieldString( sName , RowID ) {
var obj = document.all(sName)
if ( RowID >= 0 )
	var sValue = obj[RowID].value;
else
	var sValue = obj.value;
return sValue ;
}

function BeforeShowCalendar()
{

}
function abCalendar( objImage, objTextBox ) {
    if (objTextBox.length) objTextBox = objTextBox[0];
    if (objImage.length) objImage = objImage[0];
	if ( objTextBox.disabled == false && objTextBox.readOnly == false ) {	
        BeforeShowCalendar();
		ShowCalendar( objImage , objTextBox , objTextBox ,-3650,3650);
	}
}

//function abSelector(WindowID, objImage, objTextBox, objDisplayBox ) {
//	if ( objTextBox.ro != 1) {	
//		ShowSelector(WindowID, objImage , objTextBox , objDisplayBox );
//	}
//}
function abSelector(objDisplayBox) {
	var nRowID = objDisplayBox.di;
	var WindowID = objDisplayBox.sb; 
    var objImage = document.all(objDisplayBox.name.replace("des","img")); 
    var objTextBox = document.all(objDisplayBox.tb);
	if (nRowID == -1) {
			if ( objTextBox.ro != 1) 
				ShowSelector(WindowID, objImage , objTextBox , objDisplayBox );
	}		
	else 
			if ( objTextBox[nRowID].ro != 1) 
				ShowSelector(WindowID, objImage[nRowID] , objTextBox[nRowID] , objDisplayBox );
	
}

function frmBeforeSave() {
	if  ( FrmBeforeSave())  {
		var sErrMsg= FrmIsDataValid();
		if ((sErrMsg == "") || ( sErrMsg  == undefined ) ){
			return true;
		}else {
			window.abAlert(sErrMsg);
			return false;
		}
	} else {
		return false;
	}	
}

function frmBeforeSaveAction() {
	
	return FrmBeforeSaveAction();

}



function frmBeforeDelete() {
	
	return FrmBeforeDelete();

}

function disableSubmitAgain(formid) {
	try { showLoading() } catch (e) {
    if (document.all || document.getElementById) {
        for (i = 0; i < formid.length; i++) {
                    var tempobj = formid.elements[i];
                    if (tempobj.onchange != '') tempobj.onchange = '';
        }
        var child = document.getElementsByTagName("img")
        for (i = 0; i < child.length; i++) DisableFuncButton(child[i]);
    }
    }
    
    if (bfrmSubmit) {
		sSubmitURL += "&OriginalURL=" + encodeURL(document.frmDataEntry.action)
		document.frmDataEntry.action = sSubmitURL;
	}
    return true;
}

 function encodeURL(url) {
     var encodedHtml = escape(url);
     encodedHtml = encodedHtml.replace(/\//g,"%2F");
     encodedHtml = encodedHtml.replace(/\?/g,"%3F");
     encodedHtml = encodedHtml.replace(/=/g,"%3D");
     encodedHtml = encodedHtml.replace(/&/g,"%26");
     encodedHtml = encodedHtml.replace(/@/g,"%40");
     return encodedHtml;
   } 


function FrmBeforeSaveAction() {

	return true;

}


function FrmBeforeDelete() {

	return true;

}

function  schAnyEdit( FormID) {
}



// ------------------------  Form <<Default >> Function can be overwritten by individual form
function RowInvalidPrimaryKey( TableID, nRowID){
  }
function RowValidate(TableID, nRowID){
return true;
}

function RowIsDataValid(TableID, nRowID){ 
return true;
}

function RowChangeStatus(TableID, Row, bValidOK ){
  }

function RowFirstEdit(TableID, nAction, Row) {
}	

function RowDeleted(TableID, Row, bDeleted) {
}	

 function RowAnyEdit(TableID, Row) {
  }	

function RowFormatParam(TableID, Row) {
	return '';
 }	
  
 function frmValidSave() {

    return true;
  }

function FrmFormatParam(FormID){
return "" ;
}


function FrmValidate(  ){
return true;
}

function FrmChangeAction( nAction ){
return true;
}

//Added by Ka Kui on 7 July for frmEdit function
function EnableNonDicFormObjects(){
return true;
}

function FrmFirstEdit( nAction ){
return true;
}

function RowPrimaryCheck(TableID, nRowID){
}
function FrmBeforeSave() {
return true;
}
function FrmIsDataValid() {
var sMsg ='';
return sMsg;
}

function setDocumentTitle(sTitle)
{
try {document.title = sTitle} catch (e) {}
try {parent.document.title = sTitle} catch (e) {}
}

function frmShowTitle( sTitle , nParentID) {
try{
	
switch (nParentID) {
	case 10 :	
		document.title = sTitle;
		break;
	case 11 :	
		parent.document.title = sTitle;
		break;
	case 0 :
		otitle.innerText= sTitle;
		break;
	case 2 :
		parent.parent.otitle.innerText= sTitle;
		break;
	default :
		parent.otitle.innerText= sTitle; 
		break;
}	
	
} catch(e){
try {
		parent.parent.otitle.innerText= sTitle; 
} catch (e) {}
}	

}	
	
function abIsNull( Obj, IsNumber, sErrorMsg) {

}

// Form validation fucntions add by albrey on 21 June 2003
function checkDateRange( sStart, sEnd ){
var dtStart = stringTOdate(sStart);
var dtEnd = stringTOdate(sEnd);
return ( dtStart <= dtEnd);
}

function stringTOdate( sDateValue ){

var nSlash1 = sDateValue.indexOf("/");
var nSlash2 = sDateValue.indexOf("/", nSlash1 + 1);

if ( DateEntryFormat == "MM/DD/YYYY" ) {
	var sMonth = sDateValue.substr(0,nSlash1 );
	var sDay = sDateValue.substr((nSlash1 + 1),(nSlash2 - nSlash1 - 1));
	var sYear = sDateValue.substr(nSlash2 + 1, 4);
} else {
	var sDay = sDateValue.substr(0,nSlash1);
	var sMonth = sDateValue.substr((nSlash1 + 1), (nSlash2 - nSlash1 - 1));
	var sYear = sDateValue.substr(nSlash2 + 1, 4);
}

var dtValue = new Date( parseFloat(sYear), parseFloat(sMonth)-1 , parseFloat(sDay));

return dtValue;
}		

function dateTOstring( DateValue ){

var nYear = DateValue.getFullYear();
var nMonth = DateValue.getMonth() + 1;  //Toby
var nDay = DateValue.getDate();
var sYear = nYear.toString();
var sMonth = nMonth.toString();
var sDay = nDay.toString();
if ( DateEntryFormat == "MM/DD/YYYY" ) {
	var sDateValue = ((nMonth > 9) ? "" : "0") + sMonth + "/" + ((nDay > 9) ? "" : "0") + sDay + "/" + sYear
} else {
	var sDateValue = ((nDay > 9) ? "" : "0") + sDay + "/" + ((nMonth > 9) ? "" : "0") + sMonth + "/" + sYear
}
return sDateValue;
}		

function dateToYMD(DateValue){	
var nYear;
	try {nYear = DateValue.getFullYear();}
	catch (e) {
		DateValue = stringTOdate(DateValue);
		nYear = DateValue.getFullYear();
	}
	var nMonth = DateValue.getMonth() + 1; 
	var nDay = DateValue.getDate();
	var sYear = nYear.toString();
	var sMonth = nMonth.toString();
	var sDay = nDay.toString();
	var sDateValue = sYear + "/" + ((nMonth > 9) ? "" : "0") + sMonth + "/" + ((nDay > 9) ? "" : "0") + sDay 
	return sDateValue;
}	



function dateMonthBegin( DateVal){
var nYear = DateVal.getFullYear();
var nMonth = DateVal.getMonth();
var nDay = DateVal.getDate();

var dtValue = new Date( nYear ,nMonth, 1);

return dtValue;

}

function dateMonthEnd( DateVal){
var nYear = DateVal.getFullYear();
var nMonth = DateVal.getMonth();
var nDay = DateVal.getDate();

var dtValue = new Date( nYear ,nMonth + 1, 0);

return dtValue;

}


function dateMonthDiff( DateVal1, DateVal2 ){
var nYear1 = DateVal1.getFullYear();
var nMonth1 = DateVal1.getMonth();

var nYear2 = DateVal2.getFullYear();
var nMonth2 = DateVal2.getMonth();

var  ndiff = ( ( nYear1 * 12 + nMonth1 ) - ( nYear2* 12 + nMonth2)  )

return ndiff;

}


function dateAddInterval( DateVal , sIValType, Interval) {
var lcInterVal = sIValType.toLowerCase( );
var nYear = DateVal.getFullYear();
var nMonth = DateVal.getMonth();
var nDay = DateVal.getDate();
 
 if  ( lcInterVal == "e" )
 {
		nMonth = nMonth + 1;
		nDay = 0;
		lcInterVal = "m";
 }
	if ( lcInterVal ==  "d" ) {
		var dtValue = new Date( nYear, nMonth , nDay + Interval);
	} else {
		if ( lcInterVal ==  "m" ) {
			var dtValue = new Date( nYear, nMonth  + Interval  , nDay);
		} else {
			var dtValue = new Date( nYear  + Interval , nMonth   , nDay);
		}	
	}
return dtValue;
}


// Call the browser() function before you call this one!
function browser()
{
    var ua = window.navigator.userAgent;
    var an = window.navigator.appName;
    var sBrowserVerion = navigator.version;

	sOSVersion = ua;
    // Is it IE?
    nIEVersion = 0 ;
    if (sOSVersion.indexOf("MSIE")>=1)
    {
      var sVersion =  abCutString(  sOSVersion, "MSIE", ";" );
      nIEVersion =  parseFloat(sVersion);
 
    } else if ( ua.indexOf('Safari')>= 1 ) {
	    var sVersion =  abCutString(  navigator.appVersion +';', "Safari/", ";" );
		nIEVersion =  parseFloat( sVersion.replace(/./g,""));
		nIEVersion =  ( 10000 +  nIEVersion  ) * -1;
	 }  else  if ( ua.indexOf('Firefox')>=1 ) {
		   var sVersion =  abCutString( ua +';', "Firefox/", ";" );
		   sVersion = sVersion.replace(/\./g,"")
			nIEVersion =  parseFloat(sVersion)  ;
			nIEVersion =  (20000 +  nIEVersion ) * -1;
		} else   {
		  	 nIEVersion =  (70000  ) * -1;
	 }
}

function abCutString( sDataStr, sLeftQuote, sRightQuote)
{ 
	var nStartPos  = sDataStr.indexOf(sLeftQuote) + sLeftQuote.length -1 ; 
	var sReturnVal = '';
	if (nStartPos >=1 ) {
		var sWorkStr  = sDataStr.substring( nStartPos , sDataStr.length )
		var nEndPos = sWorkStr.indexOf(sRightQuote) - sRightQuote.length + 1;
		if ( nEndPos >= 1 ) {
			 sReturnVal =   sWorkStr.substring( 1 , nEndPos );
		}
	}	
   return  sReturnVal ;
 } 

function os()
{
    var ua = navigator.userAgent;
    sOSVersion = ua;
//	alert(sOSVersion);

      bMac = (ua.indexOf("Mac")>=1);
}

//////////////////////////////////////////////////////////////////////////////////
// hide/show section
function showSection(table) {
var sMode;
if (table.rows[1].style.display == '') sMode = 'none';
else sMode = '';
for (var i = 1; i < table.rows.length; i++)
	table.rows[i].style.display = sMode;
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/*

Table Resizing code

*/

/*
Global constants to store elements that may be resized but we
could probably place these into custom table attributes instead.
*/
var TableResize_sResizableElement = "TH";    
var TableResize_iResizeThreshold = 8;
var TableResize_iEdgeThreshold = 8;
var TableResize_iSizeThreshold = 20;
var TableResize_sVBarID = "VBar";
var TableResize_TargetRow = 0;

/*
Global variables to store position and distance moved but we
could probably place these into custom table attributes instead.
*/
var oResizeTarget = null;
var iStartX = null;
var iEndX = null;
var iSizeX = null;

/*
Creates the VBar on document load
*/
function TableResize_CreateVBar()
{
    // Returns a reference to the resizer VBar for the table
    var objItem = document.getElementById(TableResize_sVBarID);

    // Check if the item doesn't yet exist
    if (!objItem) 
    {        
        // and Create the item if necessary
        objItem = document.createElement("SPAN");

        // Setup the bar
        objItem.id = TableResize_sVBarID;
        objItem.style.position = "absolute";
        objItem.style.top = "0px";
        objItem.style.left = "0px";
        objItem.style.height = "0px";
        objItem.style.width = "2px";
        objItem.style.background = "silver";
        objItem.style.borderLeft = "1px solid black";
        objItem.style.display = "none"; 

        // Add the bar to the document
        document.body.appendChild(objItem);
    }
    return objItem;
}

/*
Returns a valid resizable element, even if it contains another element 
which was actually clicked otherwise it returns the top body element.
*/
function TableResize_GetOwnerHeader(objReference) 
{
    var oElement = objReference;

    while (oElement != null && oElement.tagName != null && oElement.tagName != "BODY") 
    {
        if (oElement.tagName.toUpperCase() == TableResize_sResizableElement) 
        {
            return oElement;
        }

        oElement = oElement.parentElement;
    }

    // The TH wasn't found
    return null;
}

/*
Find cell at column iCellIndex in the first row of the table 
needed because you can only resize a column from the first row.
by using this, we can resize from any cell in the table if we want to.
*/
function TableResize_GetFirstColumnCell(objTable, iCellIndex) 
{
	var n = objTable.rows.length
	var i = 0;
	while (i < n && objTable.rows(i).cells(0).tagName != TableResize_sResizableElement) i++;
	
	if (i < n && objTable.rows(i).cells(0).tagName == TableResize_sResizableElement)
		var oHeaderCell = objTable.rows(i).cells(iCellIndex);
	else oHeaderCell = null;
	TableResize_TargetRow = i;
    return oHeaderCell;
}


/*
Clean up - clears out the tracking information if we're not resizing.
*/
function TableResize_CleanUp() 
{
    // Void the Global variables and hide the resizer VBar.
    var oVBar = TableResize_CreateVBar();

    if (oVBar)
    {
        oVBar.style.display = "none";
    }

    iEndX = null;
    iSizeX = null;
    iStartX = null;
    oResizeTarget = null;
    oAdjacentCell = null;

    return true;
}

/*
Main Functions
*/

/*
MouseMove event.
On resizable table This checks if you are in an allowable 'resize start' position. 
It also puts the vertical bar (visual feedback) directly under the mouse cursor. 
The vertical bar may NOT be currently visible, that depnds on if you're resizing.
*/
function TableResize_OnMouseMove(objTable) 
{
    // Change cursor and store cursor position for resize indicator on column
    var objTH = TableResize_GetOwnerHeader(event.srcElement);

    if (!objTH)
        return;
    var oVBar = TableResize_CreateVBar();

    if (!oVBar)
        return;

    var oAdjacentCell = objTH.nextSibling;
    if (oAdjacentCell == null) oAdjacentCell = objTH;

    // Show the resize cursor if we are within the edge threshold.
    if ((event.offsetX >= (objTH.offsetWidth - TableResize_iEdgeThreshold)) && (oAdjacentCell != null)) 
    {
        objTH.style.cursor = "e-resize";
    } 
    else 
    {
            objTH.style.cursor = "";
    }

    // We want to keep the right cursor if resizing and 
    // don't want resizing to select any text elements...
    if (oVBar.style.display == "inline") 
    {
        // We have to add the body.scrollLeft in case the table is wider than the view window
        // where the table is entirely within the screen this value should be zero...
        oVBar.style.left = window.event.clientX + document.body.scrollLeft;

	//Ivan Chan 20061114, Is there any impact if i mark the following statement as comment?
        //document.selection.clear(); //mac

    }

    return true;
}

/*
MouseDown event. 
This fills the globals with tracking information, and displays the 
vertical bar. This is only done if you are allowed to start resizing.
*/
function TableResize_OnMouseDown(objTable) 
{
    // Record start point and show vertical bar resize indicator
    var oTargetCell = event.srcElement;
    var oTargetCell = TableResize_GetOwnerHeader(event.srcElement);

    if (!oTargetCell)
        return;
	
    var oVBar = TableResize_CreateVBar();

    if (!oVBar)
        return;

    if (oTargetCell.parentElement.tagName.toUpperCase() == TableResize_sResizableElement)
    {
        oTargetCell = oTargetCell.parentElement;
    }

    var oHeaderCell = TableResize_GetFirstColumnCell(objTable, oTargetCell.cellIndex);

    if ((oHeaderCell.tagName.toUpperCase() == TableResize_sResizableElement) && (oTargetCell.style.cursor == "e-resize")) 
    {        
        iStartX = event.screenX;
        oResizeTarget = oHeaderCell;

        // Mark the table with the resize attribute and show the resizer VBar.
        // We also capture all events on the table we are resizing because Internet 
        // Explorer sometimes forgets to bubble some events up. 
        // Now all events will be fired on the table we are resizing.
        objTable.setAttribute("Resizing", "true");
        objTable.setCapture();  //mac

        // Set up the VBar for display

        // We have to add the body.scrollLeft in case the table is wider than the view window
        // where the table is entriely within the screen this value should be zero...
        oVBar.style.left = window.event.clientX + document.body.scrollLeft;

        oVBar.style.top = objTable.parentElement.offsetTop + objTable.offsetTop;;
        oVBar.style.height = objTable.parentElement.clientHeight;
        oVBar.style.display = "inline";
    }

    return true;
}

/*
MouseUp event. 
This finishes the resize.
*/
function TableResize_OnMouseUp(objTable) 
{
    // Resize the column and its adjacent sibling if position and size are within threshold values
    var oAdjacentCell = null;
    var iAdjCellOldWidth = 0;
    var iResizeOldWidth = 0;

    if (iStartX != null && oResizeTarget != null) 
    {
        iEndX = event.screenX;
        iSizeX = iEndX - iStartX;

        // Mark the table with the resize attribute for not resizing
        objTable.setAttribute("Resizing", "false");

        if ((oResizeTarget.offsetWidth + iSizeX) >= TableResize_iSizeThreshold) 
        {
            if (Math.abs(iSizeX) >= TableResize_iResizeThreshold) 
            {
                iResizeOldWidth = (oResizeTarget.offsetWidth);
                for (i = 0; i < objTable.rows[TableResize_TargetRow].cells.length; i++)
					if (objTable.rows[TableResize_TargetRow].cells[i]) {
						objTable.rows[TableResize_TargetRow].cells[i].style.width = objTable.rows[TableResize_TargetRow].cells[i].offsetWidth;
						}
                oResizeTarget.style.width = iResizeOldWidth + iSizeX;
				oResizeTarget.style.height = parseInt(objTable.rows[0].cells[0].offsetHeight);

                // change table layout
                objTable.style.tableLayout = "fixed"; 
                objTable.style.width = "100%"
            }
        } 
        else 
        {
            oResizeTarget.style.width = TableResize_iSizeThreshold;
        }
    }

    // Clean up the VBar and release event capture.
    TableResize_CleanUp();
    objTable.releaseCapture();   //mac
    
    return true;
}

//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/*

20051112 toby mutliple views handling   
*/

function Table_View(objTable)
{  
   MView_Current++;	
   var sView = 'View ' + MView_Current;
   if (MView_Current > MView_Max) 
   {
	if (bShowAll) {
		MView_Current = 0;
		sView = 'All';
	}
	else
	{
		MView_Current = 1;
	    sView = 'View ' + MView_Current;
	}
   }
   document.getElementById("MVLink").innerHTML = sView;
   for (var col = 0; col < objTable.rows[TableResize_TargetRow].cells.length; col++)
   {
		var bHide = (MView_Current != 0 && MView[col] != 0 && MView[col] != MView_Current);
		// hide Columns	by setting width = 0
		if (bHide)	
				objTable.rows[TableResize_TargetRow].cells[col].style.width = 0;    
		else	objTable.rows[TableResize_TargetRow].cells[col].style.width = MView_Width[col];  

		// hide Image object - col + 1 since the first column span = 2 in <TH>
		for (var r = 0; r < objTable.rows.length; r++)	
		if (objTable.rows[r].cells[col+1])
		{
			var objIMG = objTable.rows[r].cells[col+1].getElementsByTagName("IMG")
			for (var i = 0; i < objIMG.length; i++)
				if (bHide)	objIMG[i].style.display = 'none';
				else		objIMG[i].style.display = '';
		}
	}
}

function SetTableView(sTable, bisShowAll)
{
if (! bMac )         // not for Mac
try {

	objTable = eval(sTable);
// Get Number of View;
   for (var i =0; i < MView.length; i++)              
      if (MView_Max < MView[i]) MView_Max = MView[i]; 

// set and get default width for columns
   TableResize_GetFirstColumnCell(objTable, 1);
   for (i = 0; i < objTable.rows[TableResize_TargetRow].cells.length; i++)
		if (objTable.rows[TableResize_TargetRow].cells[i]) {
				objTable.rows[TableResize_TargetRow].cells[i].style.width = objTable.rows[TableResize_TargetRow].cells[i].offsetWidth;
				MView_Width[i] = objTable.rows[TableResize_TargetRow].cells[i].offsetWidth;
				if (i == 0) {
					MView_Width[i] = 50;
					objTable.rows[TableResize_TargetRow].cells[i].style.width = 50;
				}
		}
   // change table layout
   objTable.style.tableLayout = "fixed"; 
   objTable.style.width = "100%"
   if (bisShowAll == 0) bShowAll = false
// show Switch view icon		
   if (MView_Max > 0) 
		objTable.rows[TableResize_TargetRow].cells[0].innerHTML = "<a id=MVLink href='javascript:Table_View(" + objTable.name + ")'>All</a>" + objTable.rows[TableResize_TargetRow].cells[0].innerHTML;
} catch (e) {}
}

// 20051112 toby mutliple views handling       
var MView = new Array();                           
var MView_Width = new Array();                     
var MView_Current = 0;                             
var MView_Max = 0;     
var bShowAll = true;

// please add the following statement to dicformscript to enable multiple table view
//MView = [0,0,0,0,1,1,1,1,1,2,2,3,3,4,4,4,0] 
//SetTableView(rptFAM077, 1);                    
                            
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
 
 // hide Tabs
 try {hideTabWork(); } catch(e) {}
 
 browser();
 os();
 
 function disableClick(evnt)
{
	if(document.all)
	{
		abAlert(sRightClickMsg);
		return false;
	}
	if(navigator.appName=="Netscape")
	{
		if(evnt.which==3)
		{
			abAlert(sRightClickMsg);
			return false;
		}
	}
}

function EnableNonDicFormObjects()
{

}
/* document.oncontextmenu = disableClick;
if(!document.all && document.getElementById)
	document.onclick = disableClick;
if(document.layers)
{
	document.captureEvents(Event.MOUSEDOWN);
	document.onmousedown = disableClick;
}
*/


// To be override in abTestWindow.js
function abAlert(sMsg)
{
alert(sMsg);
}
function abConfirm(sMsg)
{
return confirm(sMsg)
}

function checkTextArea(objTextArea) {
var list = objTextArea.value.match(/\n/g);
var br = 0;
if (list != null) 
	br = list.length * 2;

if (objTextArea.value.length > objTextArea.maxlength - br)
objTextArea.value = objTextArea.value.substring(0, objTextArea.maxlength - br);
}

// 20060305 Toby Submit Button
function frmBeforeSubmit(TableID, FormID)
{
}

var bfrmSubmit = false;
var sSubmitURL;
function frmSubmit(TableID, ReportID)
{
	frmBeforeSubmit(TableID, ReportID)

	sSubmitURL = "/abPortal/Forms/frmSubmit.asp";
	sSubmitURL += "?ID=" +  frmDataEntry.SessionID.value  
	sSubmitURL += "&ReportID=" +  ReportID  
	document.frmDataEntry.action = sSubmitURL ;

	disableSubmitAgain(document.frmDataEntry);
	bfrmSubmit = true;
	//document.frmDataEntry.submit();
	frmGo(TableID);
	bfrmSubmit = false;
}

// 20080522 Toby - Language Maintenance
function frmLanguage(TableName, KeyField, KeyValue, CompanyID, DescField, Len)
{
var sURL;
	sURL = "/abPortal/StandardForm/frmStandard.asp?abForm=SYS100A&Popup=1";
	sURL += "&ID=" +  frmDataEntry.SessionID.value;
	sURL += "&CompanyID=" +  CompanyID;
	sURL += "&Table=" +  TableName;
	sURL += "&KeyField=" +  KeyField;
	sURL += "&KeyValue=" +  KeyValue;
	sURL += "&DescField=" +  DescField;
	try {sURL += "&Len=" +  Len;} catch(e) {}

	if (!BeforeFrmLanguage(sURL, KeyValue, '')) return false;
	windowID = "Language"
	newWindows(windowID, sURL, 100, 100, 750, 400);
}

function frmLanguage2Key(TableName, KeyField, KeyValue, Key1Field, Key1Value, CompanyID, DescField, Len)
{

var	sURL = "/abPortal/StandardForm/frmStandard.asp?abForm=SYS100B&Popup=1"
	sURL += "&ID=" +  frmDataEntry.SessionID.value;
	sURL += "&CompanyID=" +  CompanyID;
	sURL += "&Table=" +  TableName;
	sURL += "&KeyField=" +  KeyField;
	sURL += "&KeyValue=" +  KeyValue;
	sURL += "&Key1Field=" +  Key1Field;
	sURL += "&Key1Value=" +  Key1Value;
	sURL += "&DescField=" +  DescField;
	try {sURL += "&Len=" +  Len;} catch(e) {}

	if (!BeforeFrmLanguage(sURL, KeyValue, '')) return false;
	windowID = "Language"
	newWindows(windowID, sURL, 100, 100, 750, 400);
}

// 20090409
function frmLanguage3Key(TableName, KeyField, KeyValue, Key1Field, Key1Value,Key2Field, Key2Value, CompanyID, DescField, Len)
{

var	sURL = "/abPortal/StandardForm/frmStandard.asp?abForm=SYS100C&Popup=1"
	sURL += "&ID=" +  frmDataEntry.SessionID.value;
	sURL += "&CompanyID=" +  CompanyID;
	sURL += "&Table=" +  TableName;
	sURL += "&KeyField=" +  KeyField;
	sURL += "&KeyValue=" +  KeyValue;
	sURL += "&Key1Field=" +  Key1Field;
	sURL += "&Key1Value=" +  Key1Value;	
	sURL += "&Key2Field=" +  Key2Field;
	sURL += "&Key2Value=" +  Key2Value;	
	sURL += "&DescField=" +  DescField;
	try {sURL += "&Len=" +  Len;} catch(e) {}

	if (!BeforeFrmLanguage(sURL, KeyValue, '')) return false;
	windowID = "Language"
	newWindows(windowID, sURL, 100, 100, 750, 400);
}

// 20080801 Toby - Copy function
function frmCopy(SP,CompanyID,Key1,Key2, Key3, Key4, Key5)
{	
	var	sURL = "/abPortal/StandardForm/frmStandard.asp?abForm=SYS101A"
	sURL += "&ID=" +  frmDataEntry.SessionID.value;		
	sURL += "&SP=" +  SP;	
	sURL += "&CompanyID=" +  CompanyID;	
	sURL += "&Key1=" +  Key1;
	sURL += "&Key2=" +  Key2;	
	sURL += "&Key3=" +  Key3;
	sURL += "&Key4=" +  Key4;
	sURL += "&Key5=" +  Key5;
	sURL += "&A=P";

	windowID = "FormCopy"
	newWindows(windowID, sURL, 100, 100, 750, 400);	
}

function BeforeFrmLanguage(sURL, KeyValue, KeyValue1)
{
	return true;
}

function ChangeSysLang(sLang)
{
	var sParam 
	 sParam = "ID=" + frmMain.txtSessionID.value;
	
	 sParam += "&Obj=abPortal.Desktop&CMD=ChangeSysLang";
	 sParam += "&Lang=" + sLang;
	 ServerCommand("ChangeSysLang", sParam);
}


function fnTabClick( nTab )
{  
	nTab = parseInt(nTab);
	var oTab;
	var oFrame;
	var prevTab = nTab-1;
	var nextTab = nTab+1;
	try{
		event.cancelBubble = true;
		el = event.srcElement;
		} catch(e){}
		

	i = 0;

	oFrame = getTableChildObj('','', 'tabWork',  i, 'tr', document);
	while (oFrame) 
	{	
	if (nTab != i) {
		oTab = getTableChildObj('','', 'tabs',  i, 'td', document);
		oTab.className = "clsTab";
		oTab.style.borderLeftStyle = "";
		oTab.style.borderRightStyle = "";
		try{		
		var oFrame1 = oFrame.getElementsByTagName("iframe")[0];
	    var oFrame1 = (oFrame1.contentWindow || oFrame1.contentDocument);
		} catch (e) {}
		if (!oFrame1) {						//mac ie
			oFrame.style.display = "none"
		} 
		else {
			oFrame.style.height = "1";
			oFrame.getElementsByTagName("td")[0].style.height = "1";
			oFrame.getElementsByTagName("iframe")[0].style.height = "1";
		}
//	    if (!oFrame1) oFrame1 = window.frames[i];
//		oFrame1.document.body.style.overflow = "hidden";
	}
		i++;
		oFrame = getTableChildObj('','', 'tabWork',  i, 'tr', document);
	}	

	oFrame = getTableChildObj('','', 'tabWork',  nTab, 'tr', document)
	var nHeight = oFrame.getElementsByTagName("td")[0].Ht;
	
	oFrame1 = oFrame.getElementsByTagName("iframe")[0];
	oFrame1 = (oFrame1.contentWindow || oFrame1.contentDocument);
		if (!oFrame1) {						//mac ie
			oFrame.style.display = "block"
		} 
		else {
			oFrame.style.height = nHeight;
			oFrame.getElementsByTagName("td")[0].style.height = nHeight;
			oFrame.getElementsByTagName("iframe")[0].style.height = nHeight - 10;
		}

//	if (!oFrame1) oFrame1 = window.frames[nTab];  // for mac ie only
//	oFrame1.document.body.style.overflow = "auto";
	
	oTab = getTableChildObj('','', 'tabs',  nTab, 'td', document);
	oTab.className = "clsTabSelected";
	oTab = getTableChildObj('','', 'tabs',  nextTab, 'td', document);
	if (oTab)  if (oTab.tagName == 'TD') oTab.style.borderLeftStyle = "none";
	oTab = getTableChildObj('','', 'tabs',  prevTab, 'td', document);
	if (oTab)  if (oTab.tagName == 'TD') oTab.style.borderRightStyle = "none";
	try{
		event.returnValue = false;
		} catch(e){}
		
	LoadTabPage(nTab)

	return false;
}


function LoadTabPage(nTab){ 
	var oTab = document.getElementsByTagName("iframe");
	var obj = eval(oTab[nTab].name);
	try{obj.frmDataEntry.SessionID==null;}
	catch(e){obj.location = tabLinkAddress[nTab];};
}

///// Selection Filter 
function schHideWindow(){
	var sHideList = ""
	for (i = 0; i < schobj.length; i++)
		if (schobj[i].nHide == 1)
		   sHideList += "1,";
		else
		   sHideList += "0,";

	var sURL = "/abPortal/EOSLib/schFilter.asp?ID=" + frmDataEntry.SessionID.value;
	sURL += "&schLabelList=" + schLabelList 
      sURL +=  "&schHideList=" + sHideList
	sURL +="&A=P"; 
      newProgDialog("",sURL,500,300,500,400);
}
function schHideSelection(i, nHide){
      var aNode = schobj[i];
	var objTR = aNode.parentNode.parentNode.parentNode;
	if(nHide=="1") 	objTR.style.display = "";	
	else objTR.style.display = "none";
     aNode.nHide = nHide;	
	
	try {  parent.resizeFrame(1,12); } catch(e)  {}

}
function schHideSelectionbyObj(aNode, nHide){
	var objTR = aNode.parentNode.parentNode.parentNode;
	if(nHide=="1") 	objTR.style.display = "";	
	else objTR.style.display = "none";
     aNode.nHide = nHide;	
}
function schFindSelectionList(){
   var objsch = new Array();
    var j = 0;
	var obj = frmDataEntry.getElementsByTagName("input");
		for(var i=0;i<obj.length;i++){
			var aNode = obj[i];
			if(aNode.type=="checkbox" && aNode.name.substring(0,3) == "sch" 
               && aNode.name.substring(aNode.name.length - 2,aNode.name.length) == "cb" ){
				objsch[j++] = aNode;
			}
		}

return objsch

}

var schobj = new Array();
var schLabelList = "";

// Enable Filter ?
if (getTableObj("Mst", "btn","Filter")) { 
schobj = schFindSelectionList();
for (i =0; i < schobj.length; i++)
{
schLabelList += schobj[i].parentNode.parentNode.parentNode.cells[0].innerText + ",";
schHideSelection(i,1);
}
}

///////////////////////////
//// DMS  - 20090425 Toby
//////////////////////////
function AddDocument(sObjectID, sDMSDocType, TableID, RowID){
if (frmDataEntry.View) {
   abAlert('View the record only. Cannot change.');
   return;
}
var sValue;
   if (RowID != "0" && (RowID == "" || RowID == -1))
	sObj = sObjectID;
   else
	sObj = sObjectID + "[RowID]";
eval("sValue = frmDataEntry." + sObj + ".value");
if (sValue.substring(0,1) == "*") sValue = sValue.substring(1,20);

var sParam = 'Obj=eosDocLib.docDMSObj&ID=' + frmDataEntry.SessionID.value ;
sParam += '&TableID=' + TableID;
sParam += '&RowID=' + RowID;
sParam += '&isFS=1';
sParam += '&ObjectID=' + sObjectID;
sParam += '&FileID=' + sValue;
sParam += "&DType=" + sDMSDocType;
UploadFile('fileUpLoad', sParam ); 
}

function ShowDoc(DocumentID, DocType)
{
     var sParam = "DocumentID=" + DocumentID;
     sParam += "&ID=" + frmDataEntry.SessionID.value;
     ShowFile('ShowDoc', sParam);
}

function DocDelete(sObjectID, sDocType, TableID, RowID){ 

//if (!confirm("<%errConfirmDelete%>")) return false;
if (!confirm("Are you sure to delete the document?")) return ;
var sObj, sValue; 
   if (RowID != "0" && (RowID == "" || RowID == -1))
	sObj = sObjectID;
   else
	sObj = sObjectID + "[RowID]";
   
   eval("sValue = frmDataEntry." + sObj + ".value");
   sValue = "*" + sValue;
   eval("frmDataEntry." + sObj + ".value = sValue");
   
        sParam = "ID=" +  frmDataEntry.SessionID.value;
        sParam += '&Obj=eosDocLib.docDMSObj&CMD=ReloadObject';
        sParam += '&TableID=' + TableID;
       sParam += '&RowID=' + RowID;
       sParam += '&ObjectID=' + sObjectID;
        sParam += '&FileID=' + sValue;
        sParam += "&DType=" + sDocType;
        ServerCommand('ReloadObject', sParam);

}

function PostReloadDMS(sObjectID, sFileID, sTitle, sRemark, sDocType, TableID, RowID) { return true}
function ReloadDMS(sObjectID, sFileID, sHTML, sTitle, sRemark, sDocType, TableID, RowID)
{ var sObj;  
   if (RowID != "0" && (RowID == "" || RowID == -1))
	sObj = sObjectID;
   else
	sObj = sObjectID + "[RowID]";

   var obj = eval("div" + sObj);
   try {obj.outerHTML = sHTML; } catch (e) {}
   eval("frmDataEntry." + sObj + ".value = sFileID;");
   try {rowAnyEdit(TableID, RowID); }
  catch (e) { frmAnyEdit(TableID)} 
   
   PostReloadDMS(sObjectID, sFileID, sTitle, sRemark, sDocType, TableID, RowID);
}


///////////////////////////
// auto complete - testing  20090515
////////////////////////////

// for search textbox auto-complete
var objDiv = document.createElement('DIV');
var objDoc = '';
var selectedIndex = -1;
function getAbsoluteTop(obj){
	var top = obj.offsetTop;
	while(obj != null && obj.offsetParent != null && obj.offsetParent.tagName != 'BODY'){
		top += obj.offsetParent.offsetTop;
		obj = obj.offsetParent;
	}
	return top;
}
function getAbsoluteLeft(obj){
	var left = obj.offsetLeft;
	while(obj != null && obj.offsetParent != null && obj.offsetParent.tagName != 'BODY'){
		left += obj.offsetParent.offsetLeft;
		obj = obj.offsetParent;
	}
	return left;
}
function getAbsoluteWidth(obj){
	return obj.offsetWidth;
}
function getAbsoluteHeight(obj){
	return obj.offsetHeight;
}
function suggestOut(div_value){
	div_value.className = 'suggest-link';
}
function suggestOver(div_value){
	div_value.className = 'suggest-link-over';
}
function checkAndShow(objDoc,objselDoc){
	var strDoc = objDoc.value;
	if(strDoc != ""){
		//selectedIndex = -1;
		objDiv.innerHTML = "";
		var txt = new RegExp(strDoc,'i');
		for(var i = 0;i<objselDoc.options.length;i++){
			if(strDoc.length>2 && txt.test(objselDoc.options[i].text) && strDoc != objselDoc.options[i].text){
				objDiv.style.display = '';
				addOption(objselDoc.options[i].text);
			}
		}
	}else{
		objDiv.style.display = 'none';
	}
}
function addOption(selValue){
	var suggest = '<div onmousemove="javascript:suggestOver(this);" ';
	suggest += 'onmouseout="javascript:suggestOut(this);" ';
	suggest += 'onmousedown="javascript:setSearch(this.innerHTML);"';
	suggest += 'class=" suggest-link">'+selValue+'</div>';
	objDiv.innerHTML += suggest;
}
function chageSelection(objDoc,isUp){
	if(isUp){
		selectedIndex++;
	}else{
		selectedIndex--;
	}
	var maxIndex = objDiv.children.length-1;
	if(selectedIndex<0){selectedIndex=0;}
	if(selectedIndex>maxIndex){selectedIndex = maxIndex;}
	for(var i=0;i<=maxIndex;i++){
		if(i==selectedIndex){
			objDiv.children[i].className = "suggest-link-over";
			objDoc.value = objDiv.children[i].innerText;
		}else{
			objDiv.children[i].className = "suggest-link";
		}
	}
}
function outSelection(objDoc,selectedIndex){
	objDoc.value = objDiv.children[selectedIndex].innerText;
	selectedIndex = -1;
	objDiv.style.display = 'none';
}
function divPosition(objDoc){
	objDiv.style.left = getAbsoluteLeft(objDoc);
	objDiv.style.top = getAbsoluteTop(objDoc)+getAbsoluteHeight(objDoc);
	objDiv.style.width = getAbsoluteWidth(objDoc);
}
function setSearch(value){
	objDoc.value = value;
	selectedIndex = -1;
	objDiv.innerHTML = '';
	objDiv.style.display = 'none';
}
function checkKeyCode(objDoc,objselDoc){ 
	var ie = (document.all)?true:false;
	if(ie){
		var keyCode = window.event.keyCode;
		if((keyCode == 40 || keyCode == 38) && objDiv.style.display == ''){
			var isUp = false;
			if(keyCode == 40 && objDiv.style.display == ''){isUp = true;}
			chageSelection(objDoc,isUp);
		}else if(keyCode == 13){
			outSelection(objDoc,selectedIndex);
		}else{
			checkAndShow(objDoc,objselDoc);
		}
	}else{
		checkAndShow(objDoc,objselDoc);
	}
}
function detachEvent(){
	checkKeyCode(objDoc,objselDoc);
}
function suggest(objDoc,objselDoc){ 
	divPosition(objDoc);
	objDiv.id = 'search-suggest';
	frmDataEntry.appendChild(objDiv);
    objDiv.style.display = 'none';
    var achEvent = function(){checkKeyCode(objDoc,objselDoc);};
    objDoc.onfocus = function(){
    	if(document.addEventListener){
    		objDoc.addEventListener('keyup',achEvent);
    	}else{
    		objDoc.attachEvent("onkeyup",achEvent);
    	}
    };
    objDoc.onblur = function(){
    	if(document.addEventListener){
    		objDoc.detachEventListener('keyup',achEvent);
    	}else{
    		objDoc.detachEvent("onkeyup",achEvent);
    	}    	
    };	
}
