//***********************************************************************************************
// Author		: Alex Law
// Company		: Joyce Network Ltd. (HK)
// Intent		: All Checking and common control
//
// returnURL(wingURL)  - i.e. returnURL (%{link to="/processCGI.cgi?A=1&B=2"} ) and that
//                            will return http://localhost:8080/HMS/processCGI.cgi
//
// isEMailAddr(elem)   - i.e. isEMailAddr(form.inputbox1)
// isNumber(elem)      - i.e. isNumber(form.inputbox1)
// isPositiveNumber(elem) - i.e. isPositiveNumber(form.inputbox1)
// isNegativeNumber(elem) - i.e. isNegativeNumber(form.inputbox1)
// autoTab(field, limit, next, evt) 
//                     - field -> i.e. form.inputBox1
//                     - limit -> i.e. 4 .. 4 characters is allowed to input
//                     - next  -> next element you want to tab to
//                     - evt   -> usually work with onkeyup
// checkDate2(InputTextElem)
//                     - validate the date with format dd/mm/yyyy
// formatNumber (num, decplaces)
//                     - 94.49384938 -> 94.49   (if decplaces == 2)
// formatCurrency (num)
//					   - $84,484.00
// Debug :
// printArray(myArray) - i.e. to print out a list of array
//***********************************************************************************************

//***********************************************************************************************
//  MSSQL Date JavaScript functions
//  getSQLHour(sqlDateStr)
//            - return integer value of hour from sql date str getSQLHour("1992-9-9 13:01:00.0")
//              will return 13
//  getSQLMintue(sqlDateStr)
//            - return integer value of Minute
//  getSQLSecond(sqlDateStr)
//            - return integer value of Second
//  getSQLDay(sqlDateStr)
//            - return integer value of Day
//  getSQLMonth(sqlDateStr)
//            - return integer value of Month
//  getSQLYear(sqlDateStr)
//            - return integer value of Year
//  compareDate(date1, date2)
//           - if date1 > date2 return  1
//             if date1 = data2 return  0
//             if date1 < date2 return -1
//	roundFloating(value,digit)
//***********************************************************************************************

//***********************************************************************************************
//  Formatting Wing RecordList value
//  SQLDateTime2Date(str)
//           - "1992-9-9 13:01:00.0"  --> "09/09/1992" print & return
//  SQLDateTime2Time(str)
//           - "1992-9-9 13:01:00.0"  --> "13:01:00" print & return
//  SQLDateTime2DateTime(str)
//           - "1992-9-9 13:01:00.0"  --> "09/09/1992 13:01:00" print & return
//  fromSQLText2Short(str, length)
//           - str = "Hello, I am there",  length =8
//             will result in printing "Hello, I.....", also return the whole string
//***********************************************************************************************
//
//***********************************************************************************************
//  zeroPrefixRemover(str)
//           - to remove all the zero at prefix of a numeric string and return the result
//             str = "00000320300.10203"
//             will return "320300.10203"
//***********************************************************************************************

//***************************************************************************************************************
//Function Name:	ReplaceSpace(str)
//Aims:				To convert the space character to "%20" in a string 
//Composed by:		BeNNyPP Chan
//Composed on:		2005/07/21 12:40
//***************************************************************************************************************	

//***************************************************************************************************************
//Function:			HideColumn(tableId,columnHeaderTdName,columnSortingId,columnName,columnTdWidth,toHide)
//Aims:				To hide or show a colume of details in a table
//Composed by:		BeNNyPP Chan
//Composed on:		2005/06/27 18:30
//
//Variable definitions:
//	columnId				- to hold an ID of a detail's td
//	hiddedColumnId			- to hold an ID of a detail's hidden td
//	mainTable 				- to hold the main table in the element format
//	hiddenColumnSortingId	- to hold an ID of the td tab of the hidden cell with the sorting buttons
//	hiddenColumnHeaderTdName- to hold a Name of the td tabs of the hidden cells with the details
//***************************************************************************************************************

//***********************************************************************************************
//Function:			SortTable(tableId,sortOn,ordering,dataType,evenClassName,oddClassName)
//Aims:				Table Sorting on Client Side
//Composed by:		BeNNyPP Chan
//Composed on:		2005/07/20 18:00
//
//Variable definitions:
//			-	tableId		- Id of the target table
//			-	sortOn		- Number of target Column which will be sorted
//			-	ordering	- 0 = order by asc
//							- 1 = order by desc
//			-	type		- 0 = sort the other data, e.g. String
//							- 1 = sort the Integer data
// 							- 2 = sort the Float data
// 							- 3 = sort the Currency data with one dollar sign at begin of the data,
//								  e.g. $150, &yen;520.23
//							- 4 = sort the Date data with the format DD/MM/YYYY,
//								  e.g. 28/02/2004 , 13_12_1989
//			-	evenClassName
//							- Class name of the <tr> of even number rows
//			-	oddClassName
//							- Class name of the <tr> of odd number rows
//
//***********************************************************************************************
//	SortTableWithoutType(tableId,sortOn,ordering,evenClassName,oddClassName)
//			-	Same of SortTable(), but no need to input the "dataType" value
//			-	Only will sort as Floating or String data automatically
//***********************************************************************************************
//	RecolorTableRows(tableId,evenClassName,oddClassName)
//			- Re-print the color of the rows' background in a html table
//***********************************************************************************************

//***********************************************************************************************
//Function:			prepareToSendConvertChineseTextToServer(convertText,zhCode,OutputElementID)
//Aims:				Big5 and GB encoding convertion
//Composed by:		BeNNyPP Chan
//Composed on:		2005/09/28 11:30
//
//Variable definitions:
//			-	convertText		- text which need to convert
//			-	zhCode			- encoding, e.g. Big5, GB
//			-	OutputElementID	- return the value to the element with this variable
//***********************************************************************************************

var DateDelim = "/"
var TimeDelim = ":"

//** Trim function for String
String.prototype.LTrim=new Function("return this.replace(/^\\s+/,'')")
String.prototype.RTrim=new Function("return this.replace(/\\s+$/,'')")
String.prototype.Trim =new Function("return this.replace(/^\\s+|\\s+$/g,'')")

/* getting parameters which better than wing's method*/
function getURLResults() {
   var results = new Object( );
    if (location.search.substr) {
        var input = unescape(location.search.substr(1));
        if (input) {
            var srchArray = input.split("&");
            var tempArray = new Array( );
            for (var i = 0; i < srchArray.length; i++) {
                tempArray = srchArray[i].split("=");
                results[tempArray[0]] = tempArray[1];
            }
        }
    }
    return results;
}

function SQLDateTime2Date(str) {
	if (str == "")	return;
	var re = new RegExp ('&nbsp;', 'gi') ;
	str = str.replace(re, ' ') ;
    var day  = getSQLDay(str) 
    var month= getSQLMonth(str)
    var year = getSQLYear(str)
    
    var newFormat = (day < 10 ? "0" + day : day ) + "/" +  (month < 10 ? "0" + month : month) + "/" + year
	document.write(newFormat);
	return newFormat;
}

function _SQLDateTime2Date(str) {
	if (str == "")	return;
	var re = new RegExp ('&nbsp;', 'gi') ;
	str = str.replace(re, ' ') ;	
    var day  = getSQLDay(str) 
    var month= getSQLMonth(str)
    var year = getSQLYear(str)
    
    var newFormat = (day < 10 ? "0" + day : day ) + "/" +  (month < 10 ? "0" + month : month) + "/" + year
	
	return newFormat;
}

function SQLDateTime2Time(str) {
	if (str == "")	return;
	var re = new RegExp ('&nbsp;', 'gi') ;
	str = str.replace(re, ' ') ;	
    var day   = getSQLDay(str) 
    var month = getSQLMonth(str)
    var year  = getSQLYear(str)
    var hour  = getSQLHour(str)
    var minute= getSQLMinute(str)
    var second= getSQLSecond(str)
    
    var newFormat = ( hour < 10 ? "0" + hour : hour ) + ":" + ( minute < 10 ? "0" + minute : minute )
        + ":" + ( second < 10 ? "0" + second : second )
	document.write(newFormat);
	return newFormat;
}

function _SQLDateTime2Time(str) {
	if (str == "")	return;
	var re = new RegExp ('&nbsp;', 'gi') ;
	str = str.replace(re, ' ') ;	
    var day   = getSQLDay(str) 
    var month = getSQLMonth(str)
    var year  = getSQLYear(str)
    var hour  = getSQLHour(str)
    var minute= getSQLMinute(str)
    var second= getSQLSecond(str)
    
    var newFormat = ( hour < 10 ? "0" + hour : hour ) + ":" + ( minute < 10 ? "0" + minute : minute )
        + ":" + ( second < 10 ? "0" + second : second )
	
	return newFormat;
}

function SQLDateTime2DateTime(str) {
	if (str == "")	return;
	var re = new RegExp ('&nbsp;', 'gi') ;
	str = str.replace(re, ' ') ;	
    var day   = getSQLDay(str) 
    var month = getSQLMonth(str)
    var year  = getSQLYear(str)
    var hour  = getSQLHour(str) 
    var minute= getSQLMinute(str)
    var second= getSQLSecond(str)
   
    var newFormat = (day < 10 ? "0" + day : day ) + "/" +  (month < 10 ? "0" + month : month) + "/" + year 
        + " " + ( hour < 10 ? "0" + hour : hour ) + ":" + ( minute < 10 ? "0" + minute : minute )
        + ":" + ( second < 10 ? "0" + second : second )
	document.write(newFormat);
	
	return newFormat;
}

function SQLText2Short(str, length) {
	if (str == "")	return;
	var re = new RegExp ('&nbsp;', 'gi') ;
	str = str.replace(re, ' ') ;	
	str ="This a stupid pig's home, i am the best"
	length = 10;
	document.write(str.substring(0, length) + "......" );
    return str;
}

function compareDate(date1, date2){
	if (date1.getTime() == date2.getTime()){
		return 0;
	}
	return (date1.getTime() < date2.getTime() ? -1 : 1);
}

/* block common key control */

// Enter, Up, Down, Left, Right, Blackspace, Home, END, Delete
function isCommonKeyCode (charCode) {
   return (charCode ==  8)  || (charCode ==  13)
}

// [0-9]
function isNumbericKey(charCode) {
   return (charCode >= 48 && charCode <=  57)
}

// [a-z]
function isSmallAlphabetKey(charCode) {
   return (charCode >= 97 && charCode <=  122)
}

// block key event for input date
function blockDateInputEvent(evt) {
    evt = (evt) ? evt : ((window.event) ? event : null);
    var charCode = evt.keyCode
	
    if (  (!evt.shiftKey || !evt.ctrlKey || !evt.altKey) && ( isNumbericKey(charCode) || charCode == 47 || charCode==48) || charCode == 35 || charCode==37) {
    	return true;
    }
	return false;
}

// block key event for input number
function blockNumberInputEvent(evt) {
    evt = allEve(evt);
	
	//evt = (evt) ? evt : ((window.event) ? event : null);
	
    var charCode = evt.key; 
    	
    if ((!evt.shiftKey || !evt.ctrlKey || !evt.altKey) && (isNumbericKey(charCode) || isCommonKeyCode (charCode))) {
		return true;
    } 
    return false;
}

function isBrowser(type){
	var bname = navigator.appName;	
	if (bname == type){
		return true;
	}else{
		return false;
	}	
}

function allEve(e){
	var ev= (window.event)? window.event: e;
	
	if(!ev || !ev.type) return false;
	var ME= ev;
	
	if(ME.type.indexOf('key')!= -1){
		if(isBrowser('Microsoft Internet Explorer') || ME.type.indexOf('keypress')!= -1){
			ME.key= (ev.keyCode)? ev.keyCode: ((ev.charCode)? ev.charCode: ev.which);
		}
		else{
			ME.key= ev.charCode;			
		}
		if(ME.key) ME.letter= String.fromCharCode(ME.key);
	}	
	return ME;
}


// block key event for non user Id char
function blockNonUserIdInputEvent(evt) {
    evt = (evt) ? evt : ((window.event) ? event : null);
    var charCode = evt.keyCode  
    if ((!evt.shiftKey || !evt.ctrlKey || !evt.altKey) && ((charCode==46) || (charCode==95) || isNumbericKey(charCode) || isSmallAlphabetKey(charCode) || isCommonKeyCode (charCode))) {
		return true;
    } 
    return false;
}

// auto tab for input text
function autoTab(field, limit, next, evt) {
    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
    if (charCode > 31 && field.value.length == limit) {
        //field.form.elements[next].focus( );
        document.getElementsByName(next)[0].focus();
    }
}

// check for Email address
function isEMailAddr(elem){
    var str = elem.value;
    var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
    	
    if (!str.match(re)){
        return false;
    }else{
        return true;
    }
}

function isNumber(elem) {
    var str = elem.value;

    var re = /^[-]?\d*\.?\d*$/;
    str = str.toString( );
    if (!str.match(re) || str == null || str == "" ) {
        return false;
    }
    return true;
}

function isNumberByValue(str) {
    var re = /^[-]?\d*\.?\d*$/;
    if (str == undefined ) 
    	return false;
    str = str.toString( );
    if ( str == null || !str.match(re) || str == "" ) {
        return false;
    }
    return true;
}

function isNumber_acceptValue(str) {
    var re = /^[-]?\d*\.?\d*$/;
    str = str.toString( );
    if (!str.match(re) || str == null || str == "" ) {
        return false;
    }
    return true;
}

function isPositiveNumber(elem) {
	if(isNumber(elem)) {
		var f=parseFloat(elem.value)
		return f>0
	}
	else
		return false;
}

function isNegativeNumber(elem) {
	if(isNumber(elem)) {
		var f=parseFloat(elem.value)
		return f<0
	}
	else
		return false;
}

function isCheckboxesChecked(elemName) {
	var checkboxes = document.getElementsByName(elemName);
	var checkboxesCheckedFlag = false;
	for (var i=0;(checkboxes[i]!=null&&!checkboxesCheckedFlag);i++){
		if (checkboxes[i].checked){
			checkboxesCheckedFlag = true;
		}
	}
	return checkboxesCheckedFlag;
}

/*check the date of a textfield */
function checkDate1(InputTextElem, MsgElem, evt) {
    if ( event.keyCode!=46 &&  ((event.keyCode== 47)|| (event.keyCode==48) || (event.keyCode == 35 || (event.keyCode==37)  || (event.keyCode==39)) ) ){
 	 return false;
    }
    
	var strDateValue = InputTextElem.value;

	switch (strDateValue.length) {
 		case 1 : break
  		case 2:    
      		if (strDateValue.substring(1,2) == "/") {
				InputTextElem.value = "0" + strDateValue.substring(0,1) + "/";	
			}
			if  (strDateValue.substring(0,1) == "0" && strDateValue.substring(1,2) == "0" ) {
				InputTextElem.value = "0";
			}
			
			break;
  		case 3:
      		if (strDateValue.substring(2,3) != "/") {
				InputTextElem.value = strDateValue.substring(0,2) + "/" + strDateValue.substring(2,3);
			}
			break;
		case 4 : {
			if (strDateValue.substring(3,4) == "/") {
				InputTextElem.value = strFieldName.value.substring(0,3);
				return false;
			}
			break;
		}
		case 5 : {
			if (strDateValue.substring(4,5) == "/") {
				InputTextElem.value = strDateValue.substring(0,3) + "0" + strDateValue.substring(3,4) + "/";
			}
			if  (strDateValue.substring(3,4) == "0" && strDateValue.substring(4,5) == "0" ) {
				InputTextElem.value = strDateValue.substring(0,3) + "0";
			}
			break;
		}
		case 6 : {
			if (strDateValue.substring(5,6) != "/") {
				InputTextElem.value = strDateValue.substring(0,5) + "/"  + strDateValue.substring(5,6);
			}
			break;
		}
		default:
			if (strDateValue.substring(strDateValue.length-1, strDateValue.length) == "/") {
 				InputTextElem.value = strDateValue.substring(0, strDateValue.length-1)
			}    
	}
	
	strDateValue = InputTextElem.value;
	if (strDateValue.length > 0) {
		var dateregex = /^[ ]?[\d{1}|\d{2}][\/]?[ ]*$|^[ ]?[\d{1}|\d{2}]\/[\d{1}|\d{2}][\/]?[ ]*$|^[ ]?(\d{1}|\d{2})\/(\d{1}|\d{2})\/(\d{1}|\d{2}|\d{3}|\d{4})[ ]*$/;
		var match = strDateValue.match(dateregex);
		if (match) {
			if (match.length==4 && match[3].length==4) {
				var tmpDate = new Date(parseInt(match[3], 10), parseInt(match[2], 10)-1, parseInt(match[1], 10));

			  	if (tmpDate.getFullYear() == parseInt(match[3],10) && 
				    tmpDate.getMonth()+1 == parseInt(match[2],10) && 
				    tmpDate.getDate() == parseInt(match[1],10 ) )
				{
					form1.test.value = tmpDate ;
					return true;
				}else{
				     InputTextElem.select();
					 form1.test.value = "Wrong Format"
		
					 return false;
				}
			}
		}
	}

	return false;	
}
/*end of the date of a textfield */

function checkDate2(entry) {
    var mo, day, yr;
//    var entry = InputTextElem.value;
    var reLong = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/;
    var reShort = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{2}\b/;
    var valid = (reLong.test(entry)) || (reShort.test(entry));
    if (valid) {
        var delimChar = (entry.indexOf("/") != -1) ? "/" : "-";
        var delim1 = entry.indexOf(delimChar);
        var delim2 = entry.lastIndexOf(delimChar);
        day = parseInt(entry.substring(0, delim1), 10);
        mo = parseInt(entry.substring(delim1+1, delim2), 10);
        yr = parseInt(entry.substring(delim2+1), 10);
        // handle two-digit year
        if (yr < 100) {
            var today = new Date( );
            // get current century floor (e.g., 2000)
            var currCent = parseInt(today.getFullYear( ) / 100) * 100;
            // two digits up to this year + 15 expands to current century
            var threshold = (today.getFullYear( ) + 15) - currCent;
            if (yr > threshold) {
                yr += currCent - 100;
            } else {
                yr += currCent;
            }
        }
        var testDate = new Date(yr, mo-1, day);
        if (testDate.getDate() == day) {
            if (testDate.getMonth() + 1 == mo) {
                if (testDate.getFullYear() == yr) {
                    // fill field with database-friendly format
                    entry = (day < 10 ? '0' + day : day ) + "/" + (mo < 10 ? '0' + mo : mo ) + "/" + yr;
                    return true;
                } else {
                    alert("There is a problem with the year entry.");
                }
            } else {
                alert("There is a problem with the month entry.");
            }
        } else {
            alert("There is a problem with the date entry.");
        }
    } else {
        alert("Incorrect date format. Enter as mm/dd/yyyy.");
    }
    return false;
}

function checkDate(l_dateObj1,l_dateObj2,l_dateObj3,allowNull){
	if(allowNull==undefined){
		allowNull=false
	}

	if(allowNull && l_dateObj1.value=='' && l_dateObj2.value=='' && l_dateObj3.value=='') {
		return true
	}

	var date = parseInt(getRawObject(l_dateObj1).value, 10)
	var month = parseInt(getRawObject(l_dateObj2).value, 10)
	var year = parseInt(getRawObject(l_dateObj3).value, 10)

	var testDate = new Date(year, month-1, date);
	if(isNaN(testDate)){
		return false;
	}
	if(year<1880){
		return false;
	}
	if (testDate.getDate() == date && testDate.getMonth() + 1 == month  && testDate.getFullYear() == year){
		return true;
	}
	return false;
}
	
function checkDateById(l_dateObj1,l_dateObj2,l_dateObj3,allowNull){
	if(allowNull==undefined){
		allowNull=false
	}
	
	dayElement = document.getElementById(l_dateObj1);
	monthElement = document.getElementById(l_dateObj2);
	yearElement = document.getElementById(l_dateObj3);

	return checkDate(dayElement,monthElement,yearElement,allowNull);
}

function checkTime(l_timeObj1,l_timeObj2,allowNull){
	if(allowNull==undefined) {
		allowNull=false
	}

	if(allowNull && l_timeObj1.value=='' && l_timeObj2.value=='') {
		return true
	}

	var hour = parseInt(getRawObject(l_timeObj1).value, 10)
	var minute = parseInt(getRawObject(l_timeObj2).value, 10)

	var testTime = new Date(1900, 0, 1, hour, minute);

	if (testTime.getHours() == hour && testTime.getMinutes() == minute){
		return true;
	}
	return false;
}
	
function checkTimeById(l_timeObj1,l_timeObj2,allowNull){
	if(allowNull==undefined){
		allowNull=false
	}
	
	hourElement = document.getElementById(l_timeObj1);
	minuteElement = document.getElementById(l_timeObj2);

	return checkDate(hourElement,minuteElement,allowNull);
}

/**********************************************************************
To place all pair values in URL to array and use it as hash tables;
***********************************************************************/
function getPairArray() {
	var strPairs = unescape(location.search.substring(1, location.search.length));
	var newPairs = strPairs.split("&");
	var getPairValue = new Array();
	var newPairsLength=newPairs.length;
	for (var i=0;i<newPairsLength;i++) {
		var onepair = newPairs[i].split("=");	
		getPairValue[onepair[0]] = onepair[1];		
	}	
	return getPairValue;
}

/**********************************************************************
To pass value from current document to the dest. document object id
and this funtion below will co-operate with the callCalculator() function.
***********************************************************************/
function passback(docObject,returnID, newValue) {
	//alert(returnID + " , " + newValue)

	var theObj = getRawObjectFromDoc(window.dialogArguments, returnID);
	theObj.value = newValue;
}

/**********************************************************************
To show up a modal dialog for the calculator and this function will
co-operate with passback() function above.
***********************************************************************/
function callCalculator(objID, doc) {
  //var result = window.showModalDialog("/HMS/pages/pCommon/newcal.page?mode=noframe&return=" + objID, doc, "dialogWidth:400px; dialogHeight:300px; center:yes; status:no");
  var url = returnURL("/pages/pCommon/newcal.page?mode=noframe&returnID=" + objID);
  var result = window.showModalDialog(url, doc, "dialogWidth:400px; dialogHeight:300px; center:yes; status:no");
}


// utility function to retrieve an expiration date in proper
// format; pass three integer parameters for the number of days, hours,
// and minutes from now you want the cookie to expire (or negative
// values for a past date); all three parameters are required,
// so use zeros where appropriate
function getExpDate(days, hours, minutes) {
    var expDate = new Date( );
    if (typeof days == "number" && typeof hours == "number" && typeof hours == "number") {
        expDate.setDate(expDate.getDate( ) + parseInt(days));
        expDate.setHours(expDate.getHours( ) + parseInt(hours));
        expDate.setMinutes(expDate.getMinutes( ) + parseInt(minutes));
        return expDate.toGMTString( );
    }
}
   
// utility function called by getCookie( )
function getCookieVal(offset) {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1) {
        endstr = document.cookie.length;
    }
    return unescape(document.cookie.substring(offset, endstr));
}
   
// primary function to retrieve cookie by name
function getCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg) {
            return getCookieVal(j);
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break; 
    }
    return "";
}
   
// store cookie value with optional details as needed
function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape (value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}
   
// remove the cookie by setting ancient expiration date
function deleteCookie(name,path,domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" + ((path) ? "; path=" + path : "") +
        	 ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}



//*************************************************************************************************
//returnURL(wingURL) - ie.	returnURL (%{link to="/processCGI.cgi?A=1&B=2"} ) and that
//                          will  return http://localhost:8080/HMS/processCGI.cgi
//*************************************************************************************************/
function returnURL(wingURL) {

//  return location.protocol +  "//" + location.hostname + ":" +  (location.port == "80" ? "" : location.port) + wingURL
  
  var pathname=location.pathname.split('/');
  var directoryName="";
  if(pathname.length>=3){
  	directoryName=location.pathname.split('/')[1];
  	if(directoryName=="pages"){
  		directoryName="";
  	}else{
  		directoryName='/'+directoryName;
  	}
  }
  
  return location.protocol+'//'+location.host+directoryName + wingURL
}



//**************************************************
// Debug functions
// printArray(Array)	: to print list of array
//***************************************************/

function printArray(myArray) {
	var str =""
	var myArrayLength=myArray.length;
	for (var i=0;i<myArrayLength;i++) 
		str += myArray[i] + ","

	alert(str);
}

function toDDMMYYYYDateFormat(entry) {

	if(entry.length <10)
		return "";
	var re = new RegExp ('&nbsp;', 'gi') ;
	entry = entry.replace(re, ' ') ;
	var inValue=entry.substring(0,10);

    var delimChar = (inValue.indexOf("/") != -1) ? "/" : "-";
        
    var delim1 = inValue.indexOf(delimChar);
    var delim2 = inValue.lastIndexOf(delimChar);
       
    yr = parseInt(inValue.substring(0, delim1), 10);
    mo = parseInt(inValue.substring(delim1+1, delim2), 10);
    day = parseInt(inValue.substring(delim2+1), 10);

	
	var date = new Date(yr, mo-1, day);
	var year = date.getFullYear();
	var month = date.getMonth()+1;
    var day = date.getDate();
		
//	return (year + "-" + (month < 10 ? '0' + month : month) + "-" + (day < 10 ? '0' + day : day));
	return ((day < 10 ? '0' + day : day) + "/" + (month < 10 ? '0' + month : month) + "/" + year);

}

function toWingDateFormat(entry) {

    if (!checkDate2(entry)) 
      return "";
	var re = new RegExp ('&nbsp;', 'gi') ;
	entry = entry.replace(re, ' ') ;
    var delimChar = (entry.indexOf("/") != -1) ? "/" : "-";
        
    var delim1 = entry.indexOf(delimChar);
    var delim2 = entry.lastIndexOf(delimChar);
       
    day = parseInt(entry.substring(0, delim1), 10);
    mo = parseInt(entry.substring(delim1+1, delim2), 10);
    yr = parseInt(entry.substring(delim2+1), 10);

	
	var date = new Date(yr, mo-1, day);
	var year = date.getFullYear();
	var month = date.getMonth() + 1;
    var day = date.getDate();
		
	return (year + "-" + (month < 10 ? '0' + month : month) + "-" + (day < 10 ? '0' + day : day));

}


//***********************************************************************************************
//	MSSQL Date function converter
//  getSQLHour(sqlDateStr)
//            - return integral part of hour from sql date str getSQLHour("1992-9-9 13:01:00.0")
//              will return 13
//  getSQLMinute(sqlDateStr)
//  getSQLSecond(sqlDateStr)
//  getSQLDay(sqlDateStr)
//  getSQLMonth(sqlDateStr)
//  getSQLYear(sqlDateStr)
//***********************************************************************************************

function getSQLHour(sqlDateStr) {
	var re = new RegExp ('&nbsp;', 'gi') ;
	sqlDateStr = sqlDateStr.replace(re, ' ') ;
   var tmp = parseInt(sqlDateStr.split(' ')[1].split(':')[0], 10)
   if (isNaN(tmp))
   	return "";
   return tmp;

}
function getSQLMinute(sqlDateStr) {
	var re = new RegExp ('&nbsp;', 'gi') ;
	sqlDateStr = sqlDateStr.replace(re, ' ') ;
	var tmp =  parseInt(sqlDateStr.split(' ')[1].split(':')[1], 10);
	if (isNaN(tmp))
   		return "";
	return tmp;
	
}
function getSQLSecond(sqlDateStr) {
	var re = new RegExp ('&nbsp;', 'gi') ;
	sqlDateStr = sqlDateStr.replace(re, ' ') ;
	var tmp = parseInt(sqlDateStr.split(' ')[1].split(':')[2], 10);

	if (isNaN(tmp))
   	return "";
	return tmp;
}
function getSQLDay(sqlDateStr) {
	var re = new RegExp ('&nbsp;', 'gi') ;
	sqlDateStr = sqlDateStr.replace(re, ' ') ;
	var tmp = parseInt(sqlDateStr.split(' ')[0].split('-')[2], 10);
		if (isNaN(tmp))
		
   	return "";
	return tmp;
}
function getSQLMonth(sqlDateStr) {
	var re = new RegExp ('&nbsp;', 'gi') ;
	sqlDateStr = sqlDateStr.replace(re, ' ') ;
	var  tmp = parseInt(sqlDateStr.split(' ')[0].split('-')[1], 10);
	if (isNaN(tmp))
   	return "";
	return tmp;
}
function getSQLYear(sqlDateStr) {
	var re = new RegExp ('&nbsp;', 'gi') ;
	sqlDateStr = sqlDateStr.replace(re, ' ') ;
	var tmp = parseInt(sqlDateStr.split(' ')[0].split('-')[0], 10);
    if (isNaN(tmp))
    	return "";
	return tmp;
}

function formatNumber (num, decplaces) {
    // convert in case it arrives as a string value
    num = parseFloat(num);
    // make sure it passes conversion
    if (!isNaN(num)) {
        // multiply value by 10 to the decplaces power;
        // round the result to the nearest integer;
        // convert the result to a string
        var str = "" + Math.round (eval(num) * Math.pow(10,decplaces));
        // exponent means value is too big or small for this routine
        if (str.indexOf("e") != -1) {
            return "Out of Range";
        }
        // if needed for small values, pad zeros
        // to the left of the number
        while (str.length <= decplaces) {
            str = "0" + str;
        }
        // calculate decimal point position
        var decpoint = str.length - decplaces;
        // assemble final result from: (a) the string up to the position of
        // the decimal point; (b) the decimal point; and (c) the balance
        // of the string. Return finished product.
        var newString = str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
        //document.write(newString)
        
        return newString
    } else {
        return ""//"NaN";
    }
}


function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

<!-- check12HrTime(hour, min) --> 
function check12HrTime(hour, minute)
{	
	if ((hour >= 0 && hour <= 12) && (minute >= 0 && minute <= 59))
	{
		return true;  
	}
	
	return false;
}

<!-- check24HrTime(hour, min) --> 
function check24HrTime(hour, minute)
{	
	if ((hour >= 0 && hour <= 23) && (minute >= 0 && minute <= 59) )
	{
		return true;  
	}
	
	return false;
}


function zeroPrefixRemover(NumericString)
{
	var result=NumericString;

	if (NumericString!=null){
		var numericStringLength=NumericString.length-1;
		for (i=0;i<numericStringLength;i++){
			if (NumericString.charAt(i)=="0"){
				if (NumericString.charAt(i+1)=="."){
					break
				}
				else{
					result=NumericString.substring(i+1,NumericString.length)
				}
			}
			else {
				break;
			}
		}
		
		return result;
	}
}

/*
function roundFloating(value,digit){
	var factor = 1;
	if(arguments.length == 1)    {
		factor = 1000
	}
	else {
		for(i=1; i<digit+1; i++) {
			factor = factor *10;
		} 
	}
	return parseFloat(Math.round(value*factor))/factor;
} 
*/



function roundFloatingOld(value,digit){
	
	var factor;
	
	if(isNaN(parseFloat(value))){
		value=0;
	}
	
	if(arguments.length == 1)    {
		factor = 1000
		digit = 3;
	}
	else {
		factor = Math.pow(10,digit);
	}
	
	if (value != "0")	{
		value=""+Math.round(factor*(value));  
		dec_point=value.length-digit;  
		if(dec_point>0){
			first_part=value.substring(0,dec_point);  
		}else{
			first_part="0";
		}
		
		if(first_part=="") {
			first_part="0";
		}
		if(dec_point>0){
			second_part=value.substring(dec_point,value.length);  
		}else{
			second_part=value;
			for(i=0;i>dec_point;i--){
				second_part="0".concat(second_part);
			}
		}
		if(second_part=="0"){
			factor = factor.toString();
			second_part = factor.substring(1, factor.length);
		}

	}
	else {
		first_part = value;
		factor = factor.toString();
		second_part = factor.substring(1, factor.length);
		//alert(second_part);
	}	

	if(digit<=0){
		result=first_part;
	} 
	else{
		result=first_part+"."+second_part;
	}
	return result;
}


function roundFloatingPattern(value){
	var rtn = roundFloatingOld(value,2);
	if(rtn.toString().indexOf('e')==-1){
		//dollar part
		var dollar = parseInt(rtn.split('.')[0]);
		var firstComma = (dollar.toString().length%3) ;
		var dollarWithoutComma = dollar.toString().substring(0,firstComma);
		
		var dollarWithComma = dollar.toString().substring(firstComma);
		var dollarWithCommaLength = (dollarWithComma.length);
		var tmpStr = dollarWithComma;
		dollarWithComma = '';
		while (tmpStr!=''){
			dollarWithComma += ','+tmpStr.substring(0,3);
			tmpStr = tmpStr.substring(3);
		}
		dollar = dollarWithoutComma+((dollarWithoutComma!=null&&dollarWithoutComma!='')?dollarWithComma:dollarWithComma.substring(1,dollarWithComma.length) );
		
		//decimal part
		var decimal = parseInt(rtn.split('.')[1]);
		if (decimal==null || decimal==''){
			decimal ='00';
		}
		else if (decimal.toString().length == 1) {
			decimal = decimal+'0';
		}
		rtn = dollar+'.'+decimal;
	}	
	return rtn;
}

function roundFloating(value,digit){
/*
	//for Little Academy
	factor = 1;
	digit = 0;
*/


	var factor;
	
	if(isNaN(parseFloat(value))){
		value=0;
	}
	
	if(arguments.length == 1)    {
		factor = 1000
		digit = 3;
	}
	else {
		factor = Math.pow(10,digit);
	}
	
	if (value != "0")	{
		value=""+Math.round(factor*(value));  
		dec_point=value.length-digit;  
		if(dec_point>0){
			first_part=value.substring(0,dec_point);  
		}else{
			first_part="0";
		}
		
		if(first_part=="") {
			first_part="0";
		}
		if(dec_point>0){
			second_part=value.substring(dec_point,value.length);  
		}else{
			second_part=value;
			for(i=0;i>dec_point;i--){
				second_part="0".concat(second_part);
			}
		}
		if(second_part=="0"){
			factor = factor.toString();
			second_part = factor.substring(1, factor.length);
		}

	}
	else {
		first_part = value;
		factor = factor.toString();
		second_part = factor.substring(1, factor.length);
		//alert(second_part);
	}	

	if(digit<=0){
		result=first_part;
	} 
	else{
		result=first_part+"."+second_part;
	}
	return result;

	//return roundFloatingTenCeiling(value,digit)	
}


function roundFloatingTenCeiling(value,digit){
	if(arguments.length == 1)    {
		digit = 2;
	}
	
	if (digit == 0){
		var decmial_part ="";
	}
	else {	
		var zerosWithHeaderOne = Math.pow(10,digit);
		var decmial_part = "."+zerosWithHeaderOne.toString().substring(1, zerosWithHeaderOne.length);
	}

	var result = "0"+decmial_part;
	if( (value!=null) && (!isNaN(parseFloat(value))) && (parseFloat(value)!=0) ){
		var	increment = parseInt(0);
		var value_tmp = parseInt(value/10); 
		if ( (parseFloat(value)>0)  && ((parseFloat(value_tmp)*10)!=parseFloat(value)) ){
			increment = parseInt(1);
		}	
		result = (((value_tmp+increment)*10).toString()+decmial_part);
	}
	return result;
}


function NotGreaterThan(elem, maxIntDigits){
	if(parseFloat(elem.value)> parseFloat(Math.pow(10,maxIntDigits))){
		if (document.getElementById("Label_InputNumberHasExceeded")==null || document.getElementById("Label_IntegerDigits")==null )
			alert("Input number has exceeded " + maxIntDigits + " Integer Digits");
		else
			alert(Label_InputNumberHasExceeded() + " " + maxIntDigits + " " + Label_IntegerDigits());
		elem.select();
	}
}
/*
function formatAsMoney(mnt) { 
mnt -= 0; 
mnt = (Math.round(mnt*100))/100; 
return (mnt == Math.floor(mnt))? mnt + '.00' 
: ( (mnt*10 == Math.floor(mnt*10))? 
mnt + '0' : mnt); 
} 
*/


//***************************************************************************************************************
//Function Name:	ReplaceSpace(str)
//Aims:				To convert the space character to "%20" in a string
//Composed by:		Benny Chan
//Composed on:		2005/07/21 12:40
//***************************************************************************************************************	
function ReplaceSpace(str){

	var charNum = 0;

	while (str.length > charNum) {
    	if ((str.substr(charNum, 1))==" "){
    		str = str.substr(0, charNum) + "\%20" + str.substring(charNum+1, str.length);
   		}else{
    		charNum++;
    	}
	}
	
	return str;
}

//***************************************************************************************************************
//Function Name:		HideColumn
//Parameters needed:	6 (tableId,columnHeaderTdName,columnSortingId,columnName,columnTdWidth,toHide)
//Aims:				To hide or show a colume of details in a table
//Composed by:		Benny Chan
//Composed on:		2005/06/27 18:30
//
//Parameters definitions:
//	tableId				- ID of main table's table tab
//	columnHeaderTdName	- Name of the td tab of the title cell
//	columnSortingId		- ID of the td tab of the cell with the sorting buttons
//	columnName			- Name of the td tabs of the cells with the details
//	columnTdWidth		- Width of the target column
//	toHide				- 'true' to hide the column, false to show the column
//	index				- Number of detail records
//	
//Variable definitions:
//	columnId				- to hold an ID of a detail's td
//	hiddedColumnId			- to hold an ID of a detail's hidden td
//	mainTable 				- to hold the main table in the element format
//	hiddenColumnSortingId	- to hold an ID of the td tab of the hidden cell with the sorting buttons
//	hiddenColumnHeaderTdName- to hold a Name of the td tabs of the hidden cells with the details
//
//Pre-setting in the .page:
//	Before to call this function, the column must consists of 3 parts,
//		Header Row(Title), Sorting Row(keep the sorting buttons) and Details(to keep a several rows of detail records).
//	In each of parts, need to build two different cells(td), named as "XXX" and "XXXHidden",
//		e.g. "invoiceNumberHeader" and "invoiceNumberHeaderHidden".
//	For the details' part, also need to add an ID with the index in the cells,
//		e.g. "invoiceNumberHeader-%{=index.Now}" and "invoiceNumberHeaderHidden-%{=index.Now}".
//	Add the display style in each of the related td, opposite setting was required for each pair of cells,
//		e.g. style="display:block;" for the td which needed to display as the default,
//		and style="display:none;" for the td which needed to hide as the default.
//	Remember to set the width of the main table in the table tab by the format of width="100".
//	
//Example:	Please refer to "/pages/purchaseOrder/PurchaseOrderSearchResult.page" of INV
//***************************************************************************************************************
function HideColumn(tableId,columnHeaderTdName,columnSortingId,columnName,columnTdWidth,toHide,index){
	var columnId;
	var hiddedColumnId;
	var mainTable = document.getElementById(tableId);
	var hiddenColumnSortingId = columnSortingId+"Hidden";
	var hiddenColumnHeaderTdName = columnHeaderTdName+"Hidden";

	// to set the styles for each rows of details
	var indexValue=parseInt(index)+1;
	for(var i=1;i<indexValue;i++){
		columnTdId = columnName+"-"+i;
		hiddedColumnId = columnName+"Hidden-"+i;
		blocking(columnTdId);
		blocking(hiddedColumnId);
	}
	
	// to calculate teh table width
	if (toHide){
		mainTable.width=parseInt(mainTable.width)+23-parseInt(columnTdWidth);
	}else{
		mainTable.width=parseInt(mainTable.width)-23+parseInt(columnTdWidth);
	}

	// to set the styles for the sorting cells
	blocking(columnSortingId);
	blocking(hiddenColumnSortingId);
	
	// to set the styles for the header cells
	blocking(columnHeaderTdName);
	blocking(hiddenColumnHeaderTdName);
}
	
	
	
//** Table Sorting on Client Side
//
// tableId		- Id of the target table
// sortOn		- Number of target Column which will be sorted
// ordering		- 0 = order by asc
//				  1 = order by desc
// type			- 0 = sort the other data, e.g. String
//				  1 = sort the Integer data
// 				  2 = sort the Float data
// 				  3 = sort the Currency data with one dollar sign at begin of the data, e.g. $150, &yen;520.23

function SortTable(tableId,sortOn,ordering,dataType,evenClassName,oddClassName) {
	document.body.style.cursor='wait';
	SortTableWithTBodyLocation(tableId,sortOn,ordering,dataType,evenClassName,oddClassName,0);
	document.body.style.cursor='auto';
}

function SortTableWithTBodyLocation(tableId,sortOn,ordering,dataType,evenClassName,oddClassName,tbodyLocation) {
	var table = document.getElementById(tableId);
	var tbody = table.getElementsByTagName('tbody')[tbodyLocation];
	var rows = tbody.getElementsByTagName('tr');
	var rowArray = new Array();
	var rowsLength=rows.length;
	for (var i=0; i<rowsLength; i++) {
		rowArray[i] = new Object;
		rowArray[i].oldIndex = i;
		if (rows[i].getElementsByTagName('td')[sortOn].firstChild!=null){
			rowArray[i].value = rows[i].getElementsByTagName('td')[sortOn].firstChild.nodeValue;
			if (dataType==4){
				rowArray[i].value = RebuildDateStringDDMMYYYYtoYYYYMMDD(rowArray[i].value);
			}
		}else{
			if (dataType!=0){
				rowArray[i].value = 0;
			}else{
				rowArray[i].value = "0";
			}
		}
	}
	
	if (dataType == 1) {
		rowArray.sort(RowCompareInt);
	}
	else if (dataType == 2) {
		rowArray.sort(RowCompareFloat);
	}
	else if (dataType == 3) {
		rowArray.sort(RowCompareDollars);
	}
	else if (dataType == 4) {
		rowArray.sort(RowCompareInt);
	}
	else {
		rowArray.sort(RowCompare);
	}
	
	if (ordering==1){
		rowArray.reverse();
	}
	
	var newTbody = document.createElement('tbody');
	var even = false;
	var rowArrayLength=rowArray.length
	for (var i=0; i<rowArrayLength; i++) {
		var newElem=rows[rowArray[i].oldIndex].cloneNode(true);
		
		if (even) {
			newElem.className = evenClassName;
			even = false;
		} else {
			newElem.className = oddClassName;
			even = true;
		}
		
		newTbody.appendChild(newElem);
	}
	
	table.replaceChild(newTbody, tbody);

	rowsRecolor(table.getElementsByTagName('tbody')[0].firstChild);
}

function SortGeneralContainerTable(tableId,sortOn,ordering,dataType,evenClassName,oddClassName) {
	document.body.style.cursor='wait';
	SortGeneralContainerTableWithTBodyLocation(tableId,sortOn,ordering,dataType,evenClassName,oddClassName,1);
	document.body.style.cursor='auto';
}

function CreateSortGeneralContainerTableRowArray(rowArray,tableRow,sortOn,dataType){
	rowArray.push(tableRow);
	
	var currentIndex = rowArray.length-1;
	
	var tempTd = rowArray[currentIndex].firstChild.nextSibling;
	
	for (var i=1;i<sortOn;i++){
		tempTd = tempTd.nextSibling;
	}
	
	rowArray[currentIndex].oldIndex = currentIndex;
	
	if (tempTd.firstChild.firstChild.firstChild.firstChild.firstChild!=null){
		rowArray[currentIndex].value = tempTd.firstChild.firstChild.firstChild.firstChild.firstChild.innerText;
		if (dataType==4){
			rowArray[currentIndex].value = RebuildDateStringDDMMYYYYtoYYYYMMDD(rowArray[currentIndex].value);
		}
	}else{
		if (dataType!=0){
			rowArray[currentIndex].value = 0;
		}else{
			rowArray[currentIndex].value = "0";
		}
	}
	
	if (tableRow.nextSibling!=null){
		return CreateSortGeneralContainerTableRowArray(rowArray,tableRow.nextSibling,sortOn,dataType)
	}else{
		return rowArray;
	}
}

function SortGeneralContainerTableWithTBodyLocation(tableId,sortOn,ordering,dataType,evenClassName,oddClassName,tbodyLocation) {
	var table = document.getElementById(tableId);
	var cellsBody = table.firstChild.nextSibling;
	var rowArray = new Array();
	var oldRowArray = new Array();
	
	rowArray = CreateSortGeneralContainerTableRowArray(rowArray,cellsBody.firstChild,sortOn,dataType);
	oldRowArray = CreateSortGeneralContainerTableRowArray(oldRowArray,cellsBody.firstChild,sortOn,dataType);

	if (dataType == 1) {
		rowArray.sort(RowCompareInt);
	}
	else if (dataType == 2) {
		rowArray.sort(RowCompareFloat);
	}
	else if (dataType == 3) {
		rowArray.sort(RowCompareDollars);
	}
	else if (dataType == 4) {
		rowArray.sort(RowCompareInt);
	}
	else {
		rowArray.sort(RowCompare);
	}
	
	if (ordering==1){
		rowArray.reverse();
	}
	
	var newCellsBody = document.createElement('TBODY');
	var even = false;
	var rowArrayLength=rowArray.length;
	for (var i=0; i<rowArrayLength; i++) {
		var newElem=oldRowArray[rowArray[i].oldIndex].cloneNode(true);
		if (even) {
			newElem.className = evenClassName;
			even = false;
		} else {
			newElem.className = oddClassName;
			even = true;
		}
		
		newCellsBody.appendChild(newElem);
	}
	
	table.replaceChild(newCellsBody, cellsBody);
	
	rowsRecolor(table.firstChild.nextSibling.firstChild);
}

function SortTableWithoutType(tableId,sortOn,ordering,evenClassName,oddClassName) {

	var table = document.getElementById(tableId);
	var tbody = table.getElementsByTagName('tbody')[0];
	var rows = tbody.getElementsByTagName('tr');
	var rowArray = new Array();
	var typeIsNum = CheckDataTypeIsNum(tableId,sortOn);
	var dataType;
	
	if (typeIsNum){
		dataType = 2;
	}else{
		dataType = 0;
	}
	var rowsLength=rows.length;
	for (var i=0; i<rowsLength; i++) {
		rowArray[i] = new Object;
		rowArray[i].oldIndex = i;
		var tdElement=rows[i].getElementsByTagName('td');
		if (tdElement[sortOn].firstChild!=null){
			rowArray[i].value = tdElement[sortOn].firstChild.nodeValue;
			if (dataType==4){
				rowArray[i].value = RebuildDateStringDDMMYYYYtoYYYYMMDD(rowArray[i].value);
			}
		}else{
			if (typeIsNum){
				rowArray[i].value = 0;
			}else{
				rowArray[i].value = "0";
			}
		}
	}
	
	if (dataType == 1) {
		rowArray.sort(RowCompareInt);
	}
	else if (dataType == 2) {
		rowArray.sort(RowCompareFloat);
	}
	else if (dataType == 3) {
		rowArray.sort(RowCompareDollars);
	}
	else if (dataType == 4) {
		rowArray.sort(RowCompareInt);
	}
	else {
		rowArray.sort(RowCompare);
	}
	
	if (ordering==1){
		rowArray.reverse();
	}
	
	var newTbody = document.createElement('tbody');
	var even = false;
	var  rowArrayLength=rowArray.length;
	for (var i=0; i<rowArrayLength; i++) {
		var newElem=rows[rowArray[i].oldIndex].cloneNode(true);
		
		if (even) {
			newElem.className = evenClassName;
			even = false;
		} else {
			newElem.className = oddClassName;
			even = true;
		}
		
		newTbody.appendChild(newElem);
	}
	
	table.replaceChild(newTbody, tbody);
	
	rowsRecolor(table.getElementsByTagName('tbody')[0].firstChild);
}

function rowsRecolor(targetTableRow){
	if (targetTableRow != null) {
		targetTableRow.onmouseover();
		targetTableRow.onmouseout();
		
		if (targetTableRow.nextSibling!=null){
			rowsRecolor(targetTableRow.nextSibling)
		}
	}	
}

function RowCompare(a, b) {
	var aVal = a.value;
	var bVal = b.value;
	return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
}

function RowCompareInt(a, b) {
	var aVal = parseInt(a.value);
	var bVal = parseInt(b.value);
	return (aVal - bVal);
}

function RowCompareFloat(a, b) {
	var aVal = parseFloat(a.value);
	var bVal = parseFloat(b.value);
	return (aVal - bVal);
}

function RowCompareDollars(a, b) {
	var aVal = parseFloat(a.value.substr(1));
	var bVal = parseFloat(b.value.substr(1));
	return (aVal - bVal);
}

function RebuildDateStringDDMMYYYYtoYYYYMMDD(str) {
	str = parseInt(str.substr(6, 4) + str.substr(3, 2) + str.substr(0, 2));
	return str;
}

//** End of Table Sorting on Client Side

//** Re-print the color of the rows' background in a html table
function RecolorTableRows(tableId,evenClassName,oddClassName) {
	var table = document.getElementById(tableId);
	var tbody = table.getElementsByTagName('tbody')[0];
	var rows = tbody.getElementsByTagName('tr');
	var even = false;
	var rowsLength=rows.length;
	for (var i=0; i<rowsLength; i++) {
		if (even) {
			rows[i].className = evenClassName;
			even = false;
		} else {
			rows[i].className = oddClassName;
			even = true;
		}
	}  
}

//** To check data in a table is numeric or not
//   is numeric return true, otherwise return false
function CheckDataTypeIsNum(tableId,sortOn) {

	var table = document.getElementById(tableId);
	var tbody = table.getElementsByTagName('tbody')[0];
	var rows = tbody.getElementsByTagName('tr');
	var rowArray = new Array();
	var typeIsNum = true;
	var rowsLength=rows.length;
	for (var i=0; i<rowsLength; i++) {
		rowArray[i] = new Object;
		rowArray[i].oldIndex = i;
		var tdElement=rows[i].getElementsByTagName('td');
		if (tdElement[sortOn].firstChild!=null){
			rowArray[i].value = tdElement[sortOn].firstChild.nodeValue;
		}else{
			rowArray[i].value = 0;
		}

		if(isNaN(rowArray[i].value)){
			typeIsNum = false;
			break;
		}
	}
	
	return typeIsNum;
}

function  checkPercentageValid(element){
	if ((isNaN(element.value))||parseFloat(element.value)<0 || parseFloat(element.value)>100 ){
		alert("Input value is not valid");
		element.value="0";
		element.select();
	}
}

function  checkQuantityValid(element){
	if ((isNaN(element.value))||parseInt(element.value)<0){
		alert("Input value is not valid");
		element.value="0";
		
		element.select();
	}
}

function blockNonDigit(evt) {
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode :
		((evt.which) ? evt.which : evt.keyCode);
	if ((charCode >= 48 && charCode <= 57) ){
		return true;
	} else if( (charCode == 46)&&evt.srcElement.value.indexOf('.')==-1){
		return true;
	} else {
		return false;
	}
}

function blockNonInteger(evt) {
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode :
		((evt.which) ? evt.which : evt.keyCode);
	if ((charCode >= 48 && charCode <= 57) || (charCode == 13)){
		return true;
	} else {
		return false;
	}
}

function blockDoubleQuote(evt) {
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode :
		((evt.which) ? evt.which : evt.keyCode);
	if ((charCode == 34)){
		return false;
	} 
	return true;
}


//***********************************************************************************************
//Function:			prepareToSendConvertChineseTextToServer(convertText,zhCode,OutputElementID)
//Aims:				Big5 and GB encoding convertion
//
//Variable definitions:
//			-	convertText		- text which need to convert
//			-	zhCode			- encoding, e.g. Big5, GB
//			-	OutputElementID	- return the value to the element with this variable
//***********************************************************************************************
function prepareToSendConvertChineseTextToServer(convertText,zhCode,OutputElementID){
	convertText=encodeURI(convertText);
	StartRemoting(returnURL("/ConvertChiAction.cgi?ConvertText="+convertText+"&ZhCode="+zhCode+"&Title="+OutputElementID),updateChineseText,null,null,null);
}

//return the value to the element
updateChineseText=function(updateText,status){
	if (status=="arrayList"){
		if (updateText[0][1]=="toBig5"){
			document.getElementById(updateText[0][2]).value=updateText[1][0];
		}
		if (updateText[0][1]=="toGB"){
			document.getElementById(updateText[0][2]).value=updateText[1][0];
		}
	}
}




function changeButtonLang(updateText,userLang){
	if (changeUserLangButtonLables!=null){
		changeUserLangButtonLables(updateText[2],userLang)
	}
	loadingText=updateText[2][3];
	doneText=updateText[2][4];
	timeoutText1=updateText[2][5];
	timeoutText2=updateText[2][6];
	timeoutText3=updateText[2][7];
}


function prepareToSendConvertTextAreaChineseTextToServer(convertText,zhCode,OutputElementID){

		window.frames["TextAreaChineseConvertFrame"].document.getElementById("OutputElementID").value=OutputElementID;
		window.frames["TextAreaChineseConvertFrame"].document.getElementById("ZhCode").value=zhCode;
		window.frames["TextAreaChineseConvertFrame"].document.getElementById("ConvertText").innerText=convertText;
	
		window.frames["TextAreaChineseConvertFrame"].document.submitForm.submit();
			
}



function clientPrinting(reportUrl,printSuccessMessage,printFailMessage){
		if(arguments.length >= 3){
			findBaseWindow(this.window).opener.frames["appletHolder"].document.Report.setPrintFailMessage(printFailMessage);
		}
		if(arguments.length >= 2){
			findBaseWindow(this.window).opener.frames["appletHolder"].document.Report.setPrintSucessMessage(printSuccessMessage);
		}
		if(arguments.length >= 1){
			findBaseWindow(this.window).opener.frames["appletHolder"].document.Report.setPrintRequest(reportUrl,"");
		}
}

function clientPreview(reportUrl,reportParameter){

	var width = 800;
    var height = 600;
    var left = parseInt((screen.availWidth/2) - (width/2));
    var top = parseInt((screen.availHeight/2) - (height/2));
    var windowFeatures = "width=" + width + ",height=" + height + 
        ",status=yes,resizable=1,toolbar=no,left=" + left + ",top=" + top + 
        ",screenX=" + left + ",screenY=" + top;
        
    REPORT_URL=(reportUrl);
    REPORT_PARAMETER=(reportParameter);
    REPORT_SHOWSAVE=("1");// 1: show 	0: not show
    REPORT_SHOWPRINT=("1");// 1: show 	0: not show
    
    window.open(returnURL("/pages/pCommon/PreviewApplet.page?mode=noframe&IsCache=N"), "_blank", windowFeatures);			

}

function clientPreview(reportUrl,reportParameter,showSave,showPrint){

	var width = 800;
    var height = 600;
    var left = parseInt((screen.availWidth/2) - (width/2));
    var top = parseInt((screen.availHeight/2) - (height/2));
    var windowFeatures = "width=" + width + ",height=" + height + 
        ",status=yes,resizable=1,toolbar=no,left=" + left + ",top=" + top + 
        ",screenX=" + left + ",screenY=" + top;
        
    REPORT_URL=(reportUrl);
    REPORT_PARAMETER=(reportParameter);
    REPORT_SHOWSAVE=(showSave);// 1: show 	0: not show
    REPORT_SHOWPRINT=(showPrint);// 1: show 	0: not show

    window.open(returnURL("/pages/pCommon/PreviewApplet.page?mode=noframe&IsCache=N"), "_blank", windowFeatures);			

}
function getReportURL(){
	return opener.REPORT_URL;
}

function getReportParameter(){
	return opener.REPORT_PARAMETER;
}

function getReportShowSave(){
	return opener.REPORT_SHOWSAVE;
}

function getReportShowPrint(){
	return opener.REPORT_SHOWPRINT;
}


	function refocusOnChildWindow() {	
	  if (window.childWindow!=null&&window.childWindow && window.childWindow.open && !window.childWindow.closed)
	    window.childWindow.focus();
	}

//to find inv_as window
function findBaseWindow(currentWindow){
		if(currentWindow.parent.opener!=null&&currentWindow.parent.name!="inv_as"){
			return findBaseWindow(currentWindow.parent.opener);
		}else{
			return currentWindow.parent;
		}
}
	
//to find top popup window	
function findTopWindow(currentWindow){
	  	if (currentWindow.childWindow && currentWindow.childWindow.open && !currentWindow.childWindow.closed){
		    return findTopWindow(currentWindow.childWindow);
		}else{
			return currentWindow
		}

}
	
function alertTimeoutMessage(){
		var activeWindow=findTopWindow(this.window);
//		activeWindow.alert(timeoutText);
		var width = 400;
	    var height = 100;
	    var left = parseInt((screen.availWidth/2) - (width/2));
	    var top = parseInt((screen.availHeight/2) - (height/2));
	    var windowFeatures = "width=" + width + ",height=" + height + 
	        ",status=no,resizable=no,toolbar=no,left=" + left + ",top=" + top + 
	        ",screenX=" + left + ",screenY=" + top;

		activeWindow.childWindow=activeWindow.open(returnURL("/pages/pCommon/DisplayTimeout.html"),'DiplayTimeout',windowFeatures);
}


function updateOpenerField(reocrdType){
	
	 	var mainWind = this.parent.window.opener;
		var xml;
   		if(mainWind!=null){
	 	   					//instantiate the W3C DOM Parser
			var parser = new DOMImplementation();
			
			//load the XML into the parser and get the DOMDocument
			var domDoc = parser.loadXML(document.getElementById("xml").innerText);
			
			//get the root node 
			var docRoot = domDoc.getDocumentElement();
 	   		mainWind.updateRelateFieldFromNewRecord(reocrdType,docRoot);	
   		}
	 	this.parent.window.jn_WindowClose();
}


function decodeURIComponentString(value){

	return decodeURIComponent(value).replace(/\|BlAnK-sPaCe\|/g," ")
	
}

function encodeURIComponentString(value){
//	return encodeURIComponent(value.replace(/ /g,"\|BlAnK-sPaCe\|"));
	return encodeURIComponent(value);
	
}


//***************************************************************************************************************
//
//	The following functions being used for the pages of commonUI
//
//***************************************************************************************************************


//---------------------------------------------------------------------------------------------------------------
//Function Name:	setDefaultRadioButton(elementName,hasDefault)
//Aims:				To set the default checked button of radio buttons
//Composed by:		Benny Chan
//Composed on:		2007/01/18
//---------------------------------------------------------------------------------------------------------------	

function setDefaultRadioButton(elementName,hasDefault){
	if (hasDefault){
		document.getElementsByName(elementName)[0].checked = true;
	}
}


//---------------------------------------------------------------------------------------------------------------
//Function Name:	datePickerFillDateTimeValues(DateTimePickerID,DatePickerID,TimePickerID,ErrorMessage)
//Aims:				To set the DateTimePicker value and DatePicker value
//Composed by:		Benny Chan
//Composed on:		2007/01/18
//---------------------------------------------------------------------------------------------------------------	

function datePickerFillDateTimeValues(DateTimePickerID,DatePickerID,TimePickerID,ErrorMessage){
	TimePickerFillTimeValues(DatePickerID,TimePickerID,ErrorMessage);
	document.getElementById(DateTimePickerID).value=document.getElementById(DatePickerID).value;
}

function datePickerFillDateTimeValues12Hr(DateTimePickerID,DatePickerID,TimePickerID,ErrorMessage){
	TimePickerFillTimeValues12Hr(DatePickerID,TimePickerID,ErrorMessage);
	document.getElementById(DateTimePickerID).value=document.getElementById(DatePickerID).value;
}

//---------------------------------------------------------------------------------------------------------------
//Function Name:	timePickerFillDateTimeValues(DateTimePickerID,TimePickerID,DatePickerID,HaveDate,ErrorMessage)
//Aims:				To set the DateTimePicker value and TimePicker value
//Composed by:		Benny Chan
//Composed on:		2007/01/18
//---------------------------------------------------------------------------------------------------------------	

function timePickerFillDateTimeValues(DateTimePickerID,TimePickerID,DatePickerID,HaveDate,ErrorMessage){
	TimePickerFillTimeValues(TimePickerID,DatePickerID,HaveDate,ErrorMessage);
	document.getElementById(DateTimePickerID).value=document.getElementById(TimePickerID).value;
}

function timePickerFillDateTimeValues12Hr(DateTimePickerID,TimePickerID,DatePickerID,HaveDate,ErrorMessage){
	TimePickerFillTimeValues12Hr(TimePickerID,DatePickerID,HaveDate,ErrorMessage);
	document.getElementById(DateTimePickerID).value=document.getElementById(TimePickerID).value;
}


//***************************************************************************************************************
//
//	The above functions being used for the pages of commonUI
//
//***************************************************************************************************************


//***************************************************************************************************************
//
//	The following functions being used for the pages of DatePicker
//
//***************************************************************************************************************

function assignDateToDatePicker(DatePickerID,date){
	//Only accept yyyy-mm-dd
	var d_obj = document.getElementById(DatePickerID+"1");
	var m_obj = document.getElementById(DatePickerID+"2");
	var y_obj = document.getElementById(DatePickerID+"3");
	var d_part = date.substr(8,2)
	var m_part = date.substr(5,2)
	var y_part = date.substr(0,4)
	d_obj.value = d_part;
	m_obj.value = m_part;
	y_obj.value = y_part;

	var elem = document.getElementById(DatePickerID);

	var year =  parseInt(document.getElementById(DatePickerID+"3").value, 10);
	var month = parseInt(document.getElementById(DatePickerID+"2").value, 10);
	var day =   parseInt(document.getElementById(DatePickerID+"1").value, 10);
	elem.value = year + "-" + (month<10 ?'0' + month : month) + "-" + (day<10? '0' + day : day) ;
}

function assignDateToDatePickerddmmyyyy(DatePickerID,date){
	//Only accept dd/mm/yyyy
	var d_obj = document.getElementById(DatePickerID+"1");
	var m_obj = document.getElementById(DatePickerID+"2");
	var y_obj = document.getElementById(DatePickerID+"3");
	var d_part = date.substr(0,2)
	var m_part = date.substr(3,2)
	var y_part = date.substr(6,4)
	d_obj.value = d_part;
	m_obj.value = m_part;
	y_obj.value = y_part;

	var elem = document.getElementById(DatePickerID);

	var year =  parseInt(document.getElementById(DatePickerID+"3").value, 10);
	var month = parseInt(document.getElementById(DatePickerID+"2").value, 10);
	var day =   parseInt(document.getElementById(DatePickerID+"1").value, 10);
	elem.value = year + "-" + (month<10 ?'0' + month : month) + "-" + (day<10? '0' + day : day) ;
}

function DatePickerIsNull(DatePickerID){
	return (document.getElementById(DatePickerID+"1").value=='' &&
			document.getElementById(DatePickerID+"2").value=='' &&
			document.getElementById(DatePickerID+"3").value=='')
}

function DatePickerCheckDate(DatePickerID,allowNull){
	if(allowNull && DatePickerIsNull(DatePickerID)){
		return true
	}else{
		return checkDate(document.getElementById(DatePickerID+'1'), document.getElementById(DatePickerID+'2'), document.getElementById(DatePickerID+'3'))
	}
}

function DatePickerGetDate(DatePickerID){
	var year =  parseInt(document.getElementById(DatePickerID+"3").value, 10);
	var month = parseInt(document.getElementById(DatePickerID+"2").value, 10);
	var day =   parseInt(document.getElementById(DatePickerID+"1").value, 10);

	var date = new Date(year, month-1, day);

	return date;
}

function DatePickerFillZero(DatePickerID){			
	var month = document.getElementById(DatePickerID+"2");
	var day =   document.getElementById(DatePickerID+"1");
	if(month.value.length == 1){
		month.value = "0" + month.value;
	}
	if(day.value.length == 1){
		day.value = "0" + day.value;
	}
		
}

function DatePickerFillDateValues(DatePickerID,TimePickerID,ErrorMessage){

	if (DatePickerCheckDate(DatePickerID)){
		var elem = document.getElementById(DatePickerID);
	
		var year =  parseInt(document.getElementById(DatePickerID+"3").value, 10);
		var month = parseInt(document.getElementById(DatePickerID+"2").value, 10);
		var day =   parseInt(document.getElementById(DatePickerID+"1").value, 10);
		elem.value = year + "-" + (month<10 ?'0' + month : month) + "-" + (day<10? '0' + day : day) ;

		if (TimePickerID!=""){

			var timePicker = document.getElementById(TimePickerID);
			
			var hour = parseInt(document.getElementById(TimePickerID+"hr").value, 10);
			var minu = parseInt(document.getElementById(TimePickerID+"min").value, 10);
			var sec = document.getElementById(TimePickerID+"sec").value;
			var ap = document.getElementById(TimePickerID+"ap").value;
			
			if(check12HrTime(hour, minu)){
				if (ap == "PM")	{
					if (hour == 12)
						hour = 0;
					else
						hour = hour + 12;	
				}
		
				if (HaveDate == "Yes"){
					timePicker.value = elem.value.substr(0,10) + " " + (hour<10?'0' + hour: hour) + ":" + (minu<10?'0' + minu: minu) + ":" + sec;
				}else{
					timePicker.value = (hour<10?'0' + hour: hour) + ":" + (minu<10?'0' + minu: minu) + ":" + sec;
				}
			}
		}
	}else{
		if (isFillDateAllFill(DatePickerID)) {
			if (ErrorMessage!=""&&ErrorMessage!=null){
				alert(ErrorMessage);
			}else{
				if (document.getElementById("Label_InvalidDate")==null)
					alert("Invalid Date");
				else
					alert(Label_InvalidDate());
			}
			if (TimePickerID!=""){
				TimePickerClearTime(TimePickerID);
			}
			//DatePickerClear(DatePickerID);
			document.getElementById(DatePickerID+"").value = ""
			
			
		}
	}
	DatePickerFillZero(DatePickerID);
}

function isFillDateAllFill(DatePickerID){
	var elemdd   = document.getElementById(DatePickerID+"1");
	var elemmm   = document.getElementById(DatePickerID+"2");
	var elemyyyy = document.getElementById(DatePickerID+"3");
	return ( elemdd.value!='' &&
			 elemmm.value!='' &&
			 elemyyyy.value.length == 4
	)
}

function isDateAllFill(DatePickerID){
	var elemdd = document.getElementById(DatePickerID.name+"1");
	var elemmm = document.getElementById(DatePickerID.name+"2");
	var elemyyyy = document.getElementById(DatePickerID.name+"3");
	return (elemdd.value!='' &&
			elemmm.value!='' &&
			elemyyyy.value.length == 4
		   )
}


function DatePickerClear(DatePickerID){
	document.getElementById(DatePickerID+"3").value = ""
	document.getElementById(DatePickerID+"2").value =""
	document.getElementById(DatePickerID+"1").value = ""
	document.getElementById(DatePickerID+"").value = ""
	var focusElem = document.getElementById(DatePickerID+"1")
	if (focusElem){
		focusElem.select();
	}
}

function DatePickerSetDateValues(DatePickerID){
	var elem = document.getElementById(DatePickerID);

	if (elem.value != "") {
		var year = getSQLYear(elem.value)
		var month = getSQLMonth(elem.value)
		var day = getSQLDay(elem.value)			
		document.getElementById(DatePickerID+"3").value = year
		document.getElementById(DatePickerID+"2").value = month<10 ?'0' + month : month
		document.getElementById(DatePickerID+"1").value = day<10? '0' + day : day
	}
}

function DatePickerDisable(showButton,showClear) {
	var element3=document.getElementById(DatePickerID+"3");
	applyStyle(element3, "INPUT.disabledText"); 
	element3.disabled = true;

	var element2=document.getElementById(DatePickerID+"2");
	applyStyle(element2, "INPUT.disabledText"); 
	element2.disabled = true;

	var element1=document.getElementById(DatePickerID+"1");
	applyStyle(element1, "INPUT.disabledText"); 
	element1.disabled = true;
	
	applyStyle(document.getElementById(DatePickerID+"_dash1"), ".disabledLabel");
	applyStyle(document.getElementById(DatePickerID+"_dash2"), ".disabledLabel");
	if (showButton){
		var btnElement=document.getElementById("btn_"+DatePickerID);
		btnElement.disabled = true
		applyStyle(btnElement, "INPUT.disabledButton"); 
	}
	if (showClear){
		 var btnClearElement=document.getElementById("btn_clear_"+DatePickerID);
	  	 btnClearElement.disabled = true;
   		 applyStyle(btnClearElement, "INPUT.disabledButton");
    }
}

function DatePickerEnable(DatePickerID,showButton,showClear){
	document.getElementById(DatePickerID+"3").disabled = false;
	document.getElementById(DatePickerID+"2").disabled = false;
	document.getElementById(DatePickerID+"1").disabled = false;
	applyStyle(document.getElementById(DatePickerID+"1"), "INPUT.Text"); 
	applyStyle(document.getElementById(DatePickerID+"2"), "INPUT.Text"); 
	applyStyle(document.getElementById(DatePickerID+"3"), "INPUT.Text"); 
		    
	applyStyle(document.getElementById(DatePickerID+"_dash1"), ".Label");
	applyStyle(document.getElementById(DatePickerID+"_dash2"), ".Label");

	if (showButton){
		var btnElement=document.getElementById("btn_"+DatePickerID);
		btnElement.disabled = false;
		applyStyle( btnElement, "INPUT.button"); 	
	}
	if (showClear){
		 var btnClearElement=document.getElementById("btn_clear_"+DatePickerID);
		 btnClearElement.disabled = false;
   		 applyStyle( btnClearElement, "INPUT.button");
    }
}
	
//***************************************************************************************************************
//
//	The above functions being used for the pages of DatePicker
//
//***************************************************************************************************************


//***************************************************************************************************************
//
//	The following functions being used for the pages of TimePicker
//
//***************************************************************************************************************

function TimePickerFillTimeValues12Hr(TimePickerID,DatePickerID,HaveDate,ErrorMessage){
	var date;
	var time;
	if (HaveDate == "Yes") 
		date = document.getElementById(DatePickerID);
		
	time=document.getElementById(TimePickerID);	
	var hour = parseInt(document.getElementById(TimePickerID+"hr").value, 10);
	var minu = parseInt(document.getElementById(TimePickerID+"min").value, 10);
	var ap = document.getElementById(TimePickerID+"ap").value;
	
	if(check12HrTime(hour, minu)){
		if (ap == "PM")	{
			if (hour == 12)
				hour = 0;
			else
				hour = hour + 12;	
		}

		if (HaveDate == "Yes"){
			time.value = date.value.substr(0,10) + " " + (hour<10?'0' + hour: hour) + ":" + (minu<10?'0' + minu: minu) + ":00";
		}else{
			time.value = (hour<10?'0' + hour: hour) + ":" + (minu<10?'0' + minu: minu) + ":00";
		}
		document.getElementById(TimePickerID+"sec").value="00";
	}else{
		if (isFillTimeAllFill(TimePickerID)) {
			if (ErrorMessage!=""&&ErrorMessage!=null){
				alert(ErrorMessage);
			}else{
				alert("Invalid Time");
			}
			TimePickerClearTime(TimePickerID);
		}
	}
}

function TimePickerFillTimeValues(TimePickerID,DatePickerID,HaveDate,ErrorMessage){
	var date;
	var time;
	if (HaveDate == "Yes") 
		date = document.getElementById(DatePickerID);
		
	time=document.getElementById(TimePickerID);	
	var hour = parseInt(document.getElementById(TimePickerID+"hr").value, 10);
	var minu = parseInt(document.getElementById(TimePickerID+"min").value, 10);
//	var ap = document.getElementById(TimePickerID+"ap").value;
	
	if(check24HrTime(hour, minu)){
	/*
		if (ap == "PM")	{
			if (hour == 12)
				hour = 0;
			else
				hour = hour + 12;	
		}
*/
		if (HaveDate == "Yes"){
			time.value = date.value.substr(0,10) + " " + (hour<10?'0' + hour: hour) + ":" + (minu<10?'0' + minu: minu) + ":00";
		}else{
			time.value = (hour<10?'0' + hour: hour) + ":" + (minu<10?'0' + minu: minu) + ":00";
		}
		document.getElementById(TimePickerID+"sec").value="00";
	}else{
		if (isFillTimeAllFill(TimePickerID)) {
			if (ErrorMessage!=""&&ErrorMessage!=null){
				alert(ErrorMessage);
			}else{
				alert("Invalid Time");
			}
			TimePickerClearTime(TimePickerID);
		}
	}
}

function isFillTimeAllFill12Hr(TimePickerID){
	var elemhr   = document.getElementById(TimePickerID+"hr");
	var elemmin   = document.getElementById(TimePickerID+"min");
	var elemap = document.getElementById(TimePickerID+"ap");
	return ( elemhr.value!='' &&
			 elemmin.value!='' &&
			 elemap.value != ''
	)
}

function isFillTimeAllFill(TimePickerID){
	var elemhr   = document.getElementById(TimePickerID+"hr");
	var elemmin   = document.getElementById(TimePickerID+"min");
	//var elemap = document.getElementById(TimePickerID+"ap");
	return ( elemhr.value!='' &&
			 elemmin.value!='' /*&&
			 elemap.value != ''*/
	)
}


function TimePickerCheckTime12Hr(TimePickerID){
	var hour = document.getElementById(TimePickerID+"hr").value;
	var minu = document.getElementById(TimePickerID+"min").value;

	return check12HrTime(hour, minu);
}
function TimePickerCheckTime(TimePickerID){
	var hour = document.getElementById(TimePickerID+"hr").value;
	var minu = document.getElementById(TimePickerID+"min").value;

	return check24HrTime(hour, minu);
}

function TimePickerClearTime(TimePickerID){
	document.getElementById(TimePickerID+"hr").value = "";
	document.getElementById(TimePickerID+"min").value = "";
	document.getElementById(TimePickerID+"sec").value="00";

	document.getElementById(TimePickerID).value = "";
	var focusElem = document.getElementById(TimePickerID+"hr")
	if (focusElem){
		focusElem.select();
	}
}

function assignTimeToTimePicker12Hr(TimePickerID,time){
	//Only accept yyyy-mm-dd
	
	var hr_obj = document.getElementById(TimePickerID+"hr");
	var min_obj = document.getElementById(TimePickerID+"min");
	var ap_obj = document.getElementById(TimePickerID+"ap");
	var hr_part = time.substr(0,2)
	var min_part = time.substr(3,2)
	var ap_part = time.substr(6,2)
	hr_obj.value = hr_part;
	min_obj.value = min_part;
	ap_obj.value = ap_part;

	var elem = document.getElementById(TimePickerID);

	elem.value = time;
}
function assignTimeToTimePicker(TimePickerID,time){
	//Only accept yyyy-mm-dd
	
	var hr_obj = document.getElementById(TimePickerID+"hr");
	var min_obj = document.getElementById(TimePickerID+"min");
//	var ap_obj = document.getElementById(TimePickerID+"ap");
	var hr_part = time.substr(0,2)
	var min_part = time.substr(3,2)
//	var ap_part = time.substr(6,2)
	hr_obj.value = hr_part;
	min_obj.value = min_part;
//	ap_obj.value = ap_part;

	var elem = document.getElementById(TimePickerID);

	elem.value = time;
}

function assign24TimeToTimePicker12Hr(TimePickerID,time){
	//Only accept yyyy-mm-dd
	var hr_obj = document.getElementById(TimePickerID+"hr");
	var min_obj = document.getElementById(TimePickerID+"min");
	var ap_obj = document.getElementById(TimePickerID+"ap");
	var hr_part = parseInt(time.substr(0,2));
	var min_part = time.substr(3,2);
	min_obj.value = min_part;
	if(hr_part>="12"){
		if(hr_part>12){
			hr_part=hr_part-12;
		}
		hr_obj.value = hr_part;
		ap_obj.value = "PM";
	}else{
		if(hr_part==0){
			hr_part=12;
		}			
	hr_obj.value = hr_part;
		ap_obj.value = "AM";
	}

	var elem = document.getElementById(TimePickerID);

	elem.value = time;
}

function assign24TimeToTimePicker(TimePickerID,time){
	//Only accept yyyy-mm-dd
	var hr_obj = document.getElementById(TimePickerID+"hr");
	var min_obj = document.getElementById(TimePickerID+"min");
//	var ap_obj = document.getElementById(TimePickerID+"ap");
	var hr_part = parseInt(time.substr(0,2));
	var min_part = time.substr(3,2);
	hr_obj.value = hr_part;
	min_obj.value = min_part;
/*	if(hr_part>="12"){
		if(hr_part>12){
			hr_part=hr_part-12;
		}
		hr_obj.value = hr_part;
		ap_obj.value = "PM";
	}else{
		if(hr_part==0){
			hr_part=12;
		}			
	hr_obj.value = hr_part;
		ap_obj.value = "AM";
	}
*/
	var elem = document.getElementById(TimePickerID);

	elem.value = time;
}
	
//***************************************************************************************************************
//
//	The above functions being used for the pages of TimePicker
//
//***************************************************************************************************************

//***************************************************************************************************************
//
//	The following functions being used for the pages of CPCD
//
//***************************************************************************************************************

//---------------------------------------------------------------------------------------------------------------
//Function Name:	OpenCPCDMasterDetail(cpcdLevel,elementId)
//Aims:				To open the master detail from CPCDElementsSet.page
//Composed by:		Benny Chan
//Composed on:		2007/01/23
//---------------------------------------------------------------------------------------------------------------	
function OpenCPCDMasterDetail(cpcdLevel,elementId){
	var pathString = "/masterDetailSearch.cgi";
	var titleNameString = "titleName=City.City";
	var tableNameString = "";
	var fieldNameString = "";
	var fieldCodeString = "";
	var labelNameString = "";
	var labelCodeString = "";
	var nameElementIdString = "";
	var codeElementIdString = "";
	var hideColumnString = "";
	
	if ((cpcdLevel>0) && (cpcdLevel<=4)){
		switch(cpcdLevel){
			case 1:
				tableNameString = "txt_tbl_name=tbl_Country";
				break;
			case 2:
				tableNameString = "txt_tbl_name=vw_getCountryProvince";
				break;
			case 3:
				tableNameString = "txt_tbl_name=vw_getCountryProvinceCity";
				break;
			case 4:
				tableNameString = "txt_tbl_name=vw_getCountryProvinceCityDistrict";
				break;
		}
		
		if (cpcdLevel==1){
			fieldNamesString = "txt_field_names=fld_Name_Eng,fld_Name_TChi,fld_Name_SChi";
			fieldCodeString = ",fld_Code"
			labelNameString = "txt_field_mask_names=Country.Name_Eng,Country.Name_TChi,Country.Name_SChi";
			labelCodeString = "Country.Code";
			nameElementIdString = "txt_input_ids=" + elementId + "_Country_Eng," + elementId + "_Country_TChi," + elementId + "_Country_SChi,";
			codeElementIdString = "," + elementId + "_CountryCode";
		}else{
			for (var levelCount = 1;levelCount<=cpcdLevel;levelCount++){
				if (levelCount==1){
					fieldNamesString = "txt_field_names=*Country_Name";
					fieldCodeString = ",Country_Code";
					labelNameString = "txt_field_mask_names=Country.CountryName";
					labelCodeString = ",Country.CountryCode";
					nameElementIdString = "txt_input_ids=" + elementId + "_Country";
					codeElementIdString = "," + elementId + "_CountryCode";
					hideColumnString = "&HideColumn=|5|";
				}
				if (levelCount==2){
					fieldNamesString = fieldNamesString + ",*Province_Name";
					fieldCodeString = fieldCodeString + ",Province_Code";
					labelNameString = labelNameString + ",Province.ProvinceName";
					labelCodeString = labelCodeString + ",Province.ProvinceCode";
					nameElementIdString = nameElementIdString + "," + elementId + "_Province";
					codeElementIdString = codeElementIdString + "," + elementId + "_ProvinceCode";
					hideColumnString = hideColumnString + "6|";
				}
				if (cpcdLevel==3){
					fieldNamesString = fieldNamesString + ",*City_Name";
					fieldCodeString = fieldCodeString + ",City_Code";
					labelNameString = labelNameString + ",City.CityName";
					labelCodeString = labelCodeString + ",City.CityCode";
					nameElementIdString = nameElementIdString + "," + elementId + "_City";
					codeElementIdString = codeElementIdString + "," + elementId + "_CityCode";
					hideColumnString = hideColumnString + "7|";
				}
				if (levelCount==4){
					fieldNamesString = fieldNamesString + ",*District_Name";
					fieldCodeString = fieldCodeString + ",District_Code";
					labelNameString = labelNameString + ",District.DistrictName";
					labelCodeString = labelCodeString + ",District.DistrictCode";
					nameElementIdString = nameElementIdString + "," + elementId + "_District";
					codeElementIdString = codeElementIdString + "," + elementId + "_DistrictCode";
					hideColumnString = hideColumnString + "8|";
				}
			}
		}
	
		pathString = pathString  + "?" + titleNameString + "&" + tableNameString + "&" + fieldNamesString + fieldCodeString;
		pathString = pathString  + "&" + labelNameString + labelCodeString + "&" + nameElementIdString + codeElementIdString;
		pathString = pathString  + "&NeedSearch=true" + hideColumnString;
		
		openMasterDetailDialog(window, pathString);
	}
}
	
//***************************************************************************************************************
//
//	The above functions being used for the pages of CPCD
//
//***************************************************************************************************************

//***************************************************************************************************************
//
//	The following functions being used for the pages of SearchResultTable
//
//***************************************************************************************************************

//---------------------------------------------------------------------------------------------------------------
//Function Name:	searchResultRecordAction(pageReEnableArray,cgiLink,action,code,currentState)
//Aims:				To call the cgi link from SearchResultTableElement.page
//Composed by:		Benny Chan
//Composed on:		2007/01/26
//---------------------------------------------------------------------------------------------------------------	

function searchResultRecordAction(pageReEnableArray,cgiLink,action,code,currentState){
	PageDisable(pageReEnableArray);
	window.location(cgiLink + "?Action=" + action + "&Code=" + code + "&CurrentState=" + currentState);
}


//---------------------------------------------------------------------------------------------------------------
//Function Name:	changeSearchResultRecordPage(pageReEnableArray,cgiLink,changePageAction,currentState)
//Aims:				To call the cgi link to change the page of result table in SearchResultTableElement.page
//Composed by:		Benny Chan
//Composed on:		2007/01/26
//---------------------------------------------------------------------------------------------------------------	

function changeSearchResultRecordPage(pageReEnableArray,cgiLink,changePageAction,currentState){
	PageDisable(pageReEnableArray);
	if(cgiLink.indexOf("?")==-1){
		window.location=cgiLink + "?Action=Search&ChangePage=" + changePageAction + "&CurrentState=" + currentState;
	}else{
		window.location=cgiLink + "&Action=Search&ChangePage=" + changePageAction + "&CurrentState=" + currentState;	
	}
}
	
//***************************************************************************************************************
//
//	The above functions being used for the pages of SearchResultTable
//
//***************************************************************************************************************



//***************************************************************************************************************
//
//	The following functions being used for the report printing
//
//***************************************************************************************************************

//---------------------------------------------------------------------------------------------------------------
//Function Name:	returnElementNameValue(formElement)
//Aims:				To return names and values of elements in the form
//Composed by:		Benny Chan
//Composed on:		2007/01/29
//---------------------------------------------------------------------------------------------------------------	

function returnElementNameValue(formElement,selectElementNameList){
	if(formElement==null){
		return null;
	}
	var inputElements = formElement.getElementsByTagName("INPUT");
	var selectElements = formElement.getElementsByTagName("SELECT");
	var textareaElements = formElement.getElementsByTagName("TEXTAREA");
	var returnString = "";

	if(inputElements!=null)
	{
		var inputElementsLength=inputElements.length;
		
		for(var i=0;i<inputElementsLength;i++){
			var isWantElement=true;
			var tempElement=inputElements[i];
			if (tempElement.name!=""){
				if (tempElement.type!="button"){
					
			
					if (tempElement.type=="checkbox"||tempElement.type=="radio"){
						if(!tempElement.checked){
							isWantElement = false;
						}
					}
	
					if(isWantElement){
						if(selectElementNameList==null||selectElementNameList==""){
							returnString = returnString + "&";
							returnString = returnString +tempElement.name + "="+ encodeURIComponentString(tempElement.value);
						}else if(selectElementNameList.indexOf("'"+tempElement.name+"'")!=-1){
							returnString = returnString + "&";
							returnString = returnString +tempElement.name + "="+ encodeURIComponentString(tempElement.value);
						}
					}
					
				}
			}
		}
	
	}


	if(selectElements!=null)
	{
		var selectElementsLength=selectElements.length;
		
		for(var i=0;i<selectElementsLength;i++){
			var selectElement=selectElements[i];
			
			var selectElementOptionElement=selectElement.options;
			var selectElementOptionLength=selectElementOptionElement.length;
			for(var j=0;j<selectElementOptionLength;j++){
				var selectElementOption=selectElementOptionElement[j];
				if(selectElementOption.selected){
					returnString = returnString + "&";
					if(selectElementNameList==null||selectElementNameList==""){
						returnString = returnString +selectElement.name + "="+ encodeURIComponentString(selectElementOption.value);
					}else if(selectElementNameList.indexOf("'"+selectElement.name+"'")!=-1){
						returnString = returnString +selectElement.name + "="+ encodeURIComponentString(selectElementOption.value);
					}
				}
			}
			
		}
	
	}	

	if(textareaElements!=null)
	{
		var textareaElementsLength=textareaElements.length;
		for(var i=0;i<textareaElementsLength;i++){
			var textareaElement=textareaElements[i];
			if(selectElementNameList==null||selectElementNameList==""){
				returnString = returnString + "&";
				returnString = returnString +textareaElement.name + "="+ encodeURIComponentString(textareaElement.innerText);
			}else if(selectElementNameList.indexOf("'"+textareaElement.name+"'")!=-1){
				returnString = returnString + "&";
				returnString = returnString +textareaElement.name + "="+ encodeURIComponentString(textareaElement.innerText);
			}
		}
	}

	return returnString;
}

//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------	

function setElementNameEqualID(formElement){
	if(formElement==null){
		return null;
	}
	var inputElements = formElement.getElementsByTagName("INPUT");
	var selectElements = formElement.getElementsByTagName("SELECT");
	var textareaElements = formElement.getElementsByTagName("TEXTAREA");
	
	if(inputElements!=null)
	{
		var inputElementsLength=inputElements.length;
		
		for(var i=0;i<inputElementsLength;i++){
			var isWantElement=true;
			var tempElement=inputElements[i];
			if (tempElement.name!=null&&tempElement.id!=null){
				tempElement.name=tempElement.id;
			}
		}
	
	}


	if(selectElements!=null)
	{
		var selectElementsLength=selectElements.length;
		
		for(var i=0;i<selectElementsLength;i++){
			var selectElement=selectElements[i];
			if (selectElement.name!=null&&selectElement.id!=null){
				selectElement.name=selectElement.id;
			}
			
		}
	
	}	

	if(textareaElements!=null)
	{
		var textareaElementsLength=textareaElements.length;
		for(var i=0;i<textareaElementsLength;i++){
			var textareaElement=textareaElements[i];
			if (textareaElement.name!=null&&textareaElement.id!=null){
				textareaElement.name=textareaElement.id;
			}
		}
	}

}

function returnElementIDValue(formElement,selectElementNameList){
	if(formElement==null){
		return null;
	}
	var inputElements = formElement.getElementsByTagName("INPUT");
	var selectElements = formElement.getElementsByTagName("SELECT");
	var textareaElements = formElement.getElementsByTagName("TEXTAREA");
	var returnString = "";
	
	if(inputElements!=null)
	{
		var inputElementsLength=inputElements.length;
		
		for(var i=0;i<inputElementsLength;i++){
			var isWantElement=true;
			var tempElement=inputElements[i];
			if (tempElement.name!=""){
				if (tempElement.type!="button"){
					
			
					if (tempElement.type=="checkbox"||tempElement.type=="radio"){
						if(!tempElement.checked){
							isWantElement = false;
						}
					}
	
					if(isWantElement){
						if(selectElementNameList==null||selectElementNameList==""){
							returnString = returnString + "&";
							returnString = returnString +tempElement.id + "="+ encodeURIComponentString(tempElement.value);
						}else if(selectElementNameList.indexOf("'"+tempElement.name+"'")!=-1){
							returnString = returnString + "&";
							returnString = returnString +tempElement.id + "="+ encodeURIComponentString(tempElement.value);
						}
					}
					
				}
			}
		}
	
	}


	if(selectElements!=null)
	{
		var selectElementsLength=selectElements.length;
		
		for(var i=0;i<selectElementsLength;i++){
			var selectElement=selectElements[i];
			if(selectElementNameList==null||selectElementNameList==""){
				returnString = returnString + "&";
				returnString = returnString +selectElement.id + "="+ encodeURIComponentString(selectElement.value);
			}else if(selectElementNameList.indexOf("'"+selectElement.name+"'")!=-1){
				returnString = returnString + "&";
				returnString = returnString +selectElement.id + "="+ encodeURIComponentString(selectElement.value);
			}
		}
	}	

	if(textareaElements!=null)
	{
		var textareaElementsLength=textareaElements.length;
		for(var i=0;i<textareaElementsLength;i++){
			var textareaElement=textareaElements[i];
			if(selectElementNameList==null||selectElementNameList==""){
				returnString = returnString + "&";
				returnString = returnString +textareaElement.id + "="+ encodeURIComponentString(textareaElement.innerText);
			}else if(selectElementNameList.indexOf("'"+textareaElement.name+"'")!=-1){
				returnString = returnString + "&";
				returnString = returnString +textareaElement.id + "="+ encodeURIComponentString(textareaElement.innerText);
			}
		}
	}

	return returnString;
}

	

	
//***************************************************************************************************************
//
//	The following functions being used for the report printing
//
//***************************************************************************************************************


function updateElementWidth(elementID, width){

	var element =document.getElementById(elementID);
	if(element!=null){
		if(width!="0"){
			element.width=width;
		}
	}

}


//***************************************************************************************************************
//
//	The following functions being used for Chinese convert
//
//
//***************************************************************************************************************

function makeConvertChineseRequest(convertText,zhcode,target) {
    
    url = returnURL("/ClientHttpRequestBase.cgi") + "?RequestName=ChineseConversion&ConvertText=" +encodeURIComponentString(convertText) + "&ZhCode=" +zhcode+"&Target="+target;
    
    makeRequest(url,null,setConvertChinese,false);
}



function setConvertChinese(http_request) {
    if (http_request.readyState == 4) {
      if (http_request.status == 200) {
	        var xmldoc = http_request.responseXML;
	        if(xmldoc.getElementsByTagName("ConvertText")[0].childNodes[0]!=null&&xmldoc.getElementsByTagName("Target")[0].childNodes[0]!=null){
				var convertText = xmldoc.getElementsByTagName("ConvertText")[0].childNodes[0].nodeValue;
				var target = xmldoc.getElementsByTagName("Target")[0].childNodes[0].nodeValue;
		        document.getElementById(target).value=decodeURIComponentString(convertText);
	        }
      } else {
        alert('There was a problem with the request.');
      }
    }
}


//***************************************************************************************************************
//
//	The following functions being used for close the popup window
//
//
//***************************************************************************************************************


function closePopupWindow(currentWindow,windowName){
	if(currentWindow.parent.opener!=null&&currentWindow.parent.name!=windowName){
		parentWindow=currentWindow.parent.opener;
		parentWindow.closeChildWindow(currentWindow);
		return closePopupWindow(parentWindow,windowName);
								
	}else{
		return baseWindow=currentWindow.parent;
	}
}

//***************************************************************************************************************
//
//	The following functions being used for display name format
//
//
//***************************************************************************************************************


function convertFullEngNameWithCode(FirstName,MiddleName, LastName, Code){
	var rtnName = convertFullEngName(FirstName,MiddleName, LastName) + " ("+ Code + ")";
	return rtnName;
}


function convertFullEngName(FirstName,MiddleName, LastName){
	var rtnName = "";
	if (FirstName==null|| FirstName==""){
		if (MiddleName==null|| MiddleName==""){
			if(LastName ==null|| LastName ==""){
				rtnName = "";
			}else{
				rtnName = LastName;
			}
		}else{
			if(LastName ==null|| LastName ==""){
				rtnName = MiddleName;
			}else{
				rtnName = LastName + " " + MiddleName;
			}
		}
	}else {
		if (MiddleName ==null||MiddleName==""){
			if(LastName ==null||LastName ==""){
				rtnName = FirstName;
			}else{
				rtnName = LastName + " " + FirstName;
			}
		}else{
			if(LastName ==null||LastName ==""){
				rtnName = FirstName + " " + MiddleName;
			}else{
				rtnName = LastName + " " + FirstName + " " + MiddleName;
			}
		}
	}	
	return rtnName;
}

function convertFullTChiNameWithCode(SurName,OtherName, Code){
	var rtnName = convertFullTChiName(SurName,OtherName) + " ("+ Code + ")";
	return rtnName;
}

function convertFullTChiName(SurName,OtherName){
	var rtnName = "";
	if(OtherName == null || OtherName==""){
		if (SurName ==null||SurName==""){
			rtnName="";
		}else{
			rtnName=SurName;
		}
	}else{
		if (SurName ==null||SurName==""){
			rtnName=OtherName;
		}else{	
			rtnName=SurName+" "+OtherName;
		}	
	}
	return rtnName;
}

function convertFullSChiNameWithCode(SurName,OtherName, Code){
	var rtnName = convertFullSChiName(SurName,OtherName) + " ("+ Code + ")";
	return rtnName;
}

function convertFullSChiName(SurName,OtherName){
	var rtnName = "";	
	if(OtherName == null || OtherName==""){
		if (SurName ==null||SurName==""){
			rtnName="";
		}else{
			rtnName=SurName;
		}
	}else{
		if (SurName ==null||SurName==""){
			rtnName=OtherName;
		}else{	
			rtnName=SurName+" "+OtherName;
		}	
	}
	return rtnName;
}

//***************************************************************************************************************
//
//	The following functions being used for Ajax Request
//
// url : the link to request the server
// form: the form object to sumbit to server
// callFunction: the function name of function for response the request
//
//***************************************************************************************************************


function makeRequest(url,parameterList,callFunction,asynchronous,jnHtmlRecord) {
    var http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
      http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
      try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
      }
    }

    if (!http_request) {
      alert('Giving up :( Cannot create an XMLHTTP instance');
      return false;
    }
    if(callFunction!=null||callFunction!=""){
	    http_request.onreadystatechange = function() { makeRequestReturn(callFunction,http_request,jnHtmlRecord); };
    }else{
	    http_request.onreadystatechange = function() {};    
    }
    http_request.open('POST', url, asynchronous==null?true:asynchronous);
    http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    http_request.setRequestHeader("Content-length", (parameterList==null?0:parameterList.length));
    http_request.send(parameterList);
}

function makeRequestReturn(callFunction, http_request,jnHtmlRecord){
	//readyState: 0=uninitialized,1=loading,2=loaded,3=interactive,4=complete

	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			if (http_request.responseText!=null&&http_request.responseText.indexOf("SystemTimeOut")!=-1){
				window.location = returnURL("/pages/common/PreInvalidAccess.page");
			}else{
				if(callFunction!=""){
					callFunction(http_request,jnHtmlRecord);
				}
			}
		}
		else {
			alert('There was a problem with the request.');
		}	
	}
}


function getFirstValueOfXMLTage(xmldoc,tagName){
	var nodes=xmldoc.getElementsByTagName(tagName);
    if(nodes!=null&&nodes.length>0&&nodes[0].childNodes[0]!=null){
		return decodeURIComponentString(xmldoc.getElementsByTagName(tagName)[0].childNodes[0].nodeValue);
    }
    	return null;
}


function getValueListOfXMLTage(xmldoc,tagName){
	var valueList=new array();
	var nodes=xmldoc.getElementsByTagName(tagName);
    if(tag!=null){
    	var nodesLength=nodes.length;
    	for(var i=0;i<nodesLength;i++){
    	 valueList.push(nodes[i].firstChild.nodeValue);
    	
    	}
		return valueList;
    }else{
    	return null;
    }
	

}

function jn_WindowClose(checkOpener){
	if(checkOpener==null||checkOpener){
		if(opener){
			opener.childWindow=null;
		}	
	}
	window.close();
}



//***************************************************************************************************************
//
//	The following functions being used for getting the first selected value of select box
//
//***************************************************************************************************************
function getSelectBoxFirstSelectedValue(selectBoxElement){

		var selectOptions=selectBoxElement.options;
		for(var j=0;selectOptions!=null;j++){
			if(selectOptions[j].selected){
				return selectOptions[j].value;
			}
		}
		return null;

}


function logout(){
				window.location = returnURL("/ProcessLogout.cgi");
}



//***************************************************************************************************************
//
//	
//
//***************************************************************************************************************

function replaceLastString(value,replaceFrom, replaceTo){

	if(replaceFrom==null || replaceFrom==""){
		return value;
	}
    var re = new RegExp(replaceFrom+'$');
    return value.replace(re,replaceTo);
    
}


function generateXML(tagObject,selectElementNameList,replaceIndex)
{
    
    
	if(tagObject==null){
		return null;
	}

	var inputElements = tagObject.getElementsByTagName("INPUT");
	var selectElements = tagObject.getElementsByTagName("SELECT");
	var textareaElements = tagObject.getElementsByTagName("TEXTAREA");
	var xml = "";
	
	if(inputElements!=null)
	{
		var inputElementsLength=inputElements.length;
		
		for(var i=0;i<inputElementsLength;i++){
			var isWantElement=true;
			var tempElement=inputElements[i];
			if (tempElement.name!=""){
				if (tempElement.type!="button"){
					
			
					if (tempElement.type=="checkbox"||tempElement.type=="radio"){
						if(!tempElement.checked){
							isWantElement = false;
						}
					}
	
					if(isWantElement){
						var tagName=replaceLastString(tempElement.name,replaceIndex,'');
						if(selectElementNameList==null||selectElementNameList==""){
							xml += '<'+ tagName + '>' + encodeURIComponentString(tempElement.value) + '</' + tagName+ '>'
						}else if(selectElementNameList.indexOf("'"+tempElement.name+"'")!=-1){
							xml += '<'+ tagName + '>' + encodeURIComponentString(tempElement.value) + '</' + tagName + '>'
						}
					}
					
				}
			}
		}
	
	}


	if(selectElements!=null)
	{
		var selectElementsLength=selectElements.length;
		
		for(var i=0;i<selectElementsLength;i++){
			var selectElement=selectElements[i];
			var tagName=replaceLastString(selectElement.name,replaceIndex,'');
			if(selectElementNameList==null||selectElementNameList==""){
				xml += '<'+ tagName + '>' + encodeURIComponentString(selectElement.value) + '</' + tagName + '>'
			}else if(selectElementNameList.indexOf("'"+selectElement.name+"'")!=-1){
				xml += '<'+ tagName + '>' + encodeURIComponentString(selectElement.value) + '</' + tagName + '>'
			}
		}
	}	

	if(textareaElements!=null)
	{
		var textareaElementsLength=textareaElements.length;
		for(var i=0;i<textareaElementsLength;i++){
			var textareaElement=textareaElements[i];
			var tagName=replaceLastString(textareaElement.name,replaceIndex,'');
			if(selectElementNameList==null||selectElementNameList==""){
				xml += '<'+ tagName+ '>' + encodeURIComponentString(textareaElement.innerText) + '</' + tagName + '>'
			}else if(selectElementNameList.indexOf("'"+textareaElement.name+"'")!=-1){
				xml += '<'+ tagName + '>' + encodeURIComponentString(textareaElement.innerText) + '</' +tagName + '>'
			}
		}
	}


	return xml;
    
}



//***************************************************************************************************************
//
//	
//
//***************************************************************************************************************

function updateUIAjaxSaved(docNode,parentIndex,uiIndex){
	var nodeList=docNode.childNodes;
	var nodeLength=nodeList.length;
	if(uiIndex==null){
		uiIndex="";
	}
	if(parentIndex==null){
		parentIndex="";
	}
	for(var i=0;i<nodeLength;i++){
		var node=nodeList.item(i);
		var nodeAttributeList=node.attributes;
		var typeValue=nodeAttributeList.getNamedItem("Type").value;
		if(typeValue=="Bean"){
			var uiIndexElement=nodeAttributeList.getNamedItem("UiIndex");
			var newUIIndex="";
			var newParentIndex="";
			if(uiIndexElement!=null&&uiIndexElement.value!=""){
				newUIIndex=uiIndexElement.value;
				if(uiIndex!=""){
					if(parentIndex==""){
						newParentIndex=uiIndex;
					}else{
						newParentIndex=parentIndex+"|"+uiIndex;
					}
				}
			}
			updateUIAjaxSaved(node,newParentIndex,newUIIndex);
			
		}else if(typeValue=="Field"||typeValue=="Label"){
			var childNodeList=node.childNodes;
			var nodeValue="";
			if(childNodeList.length>0){
//				nodeValue=childNodeList[0].nodeValue;
				nodeValue=node.getFirstChild().getNodeValue();
			}
			var tempIndex=parentIndex+(uiIndex==""?"":("-"+uiIndex));
			var tempElement=document.getElementById(node.nodeName+tempIndex);
			if(tempElement!=null){
				if(typeValue=="Field"){
					tempElement.value=decodeURIComponentString(nodeValue);
				}else{
					tempElement.innerText=decodeURIComponentString(nodeValue);
				}
			}
			
/*			var uiCallFunctionElement=nodeAttributeList.getNamedItem("UICallFunction");
			if(uiCallFunctionElement!=null&&uiCallFunctionElement.value!=null&&uiCallFunctionElement.value!=""){
				var func1=eval(uiCallFunctionElement.value);
				parent.window.testFunction(uiCallFunctionElement.value)					
			}
*/
		}
	}


/*

update action
update currentstate
update mode

update header data, UI
update item data, UI
update subitem data, UI



uiindex jnhtml parent

sub functin for jhtml child
u



*/
}







//***************************************************************************************************************
//
//	
//
//***************************************************************************************************************

