<!--
///////////////////////////////////
// PAGE GENERATOR LIBRARY
// WRITTEN BY MINH, HOANG 9/2001
///////////////////////////////////
var sys_unload_function='';
var sys_unload_message='';
var sys_unload_suppress=1;
var sys_page_lock=0;
var sys_lock_message='';
var SA_NLS_DIRTY_MSG='You have modified some fields, please save your data first. To stay on the page and save, please click on Cancel. To ignore the changes and move to the desired location, click Ok.';
var SA_NLS_DT_SEP='/';
var SA_NLS_TM_SEP=':';
 


function doPageUnload(){
	//nothing is used here	
}

function doPageBeforeUnload(){
	if (sys_unload_suppress == 0 && sys_unload_function != ''){
		eval(sys_unload_function+'()');
		sys_unload_suppress = 0;
	}
	if (sys_unload_suppress == 0 && sys_unload_message != ''){
		event.returnValue=sys_unload_message;
		sys_unload_suppress = 0;
	}
	if (sys_unload_suppress == 0 && sys_page_lock == 1){
		event.returnValue=sys_lock_message;
		sys_unload_suppress = 0;
	}
}

function setFormDirtyFlag(ele, prt_name){
	var frm = ele.form;
	if (frm && frm.elements['dirty_yn']){
		frm.elements['dirty_yn'].value='1';
		sys_unload_message=SA_NLS_DIRTY_MSG;
	}
	if (frm && frm.elements[prt_name+'_dirty_yn']){
		frm.elements[prt_name+'_dirty_yn'].value='1';
		sys_unload_message=SA_NLS_DIRTY_MSG;
	}
}


function UnsetFormDirtyFlag(ele, prt_name){
	var frm = ele.form;
	if (frm && frm.elements['dirty_yn']){
		frm.elements['dirty_yn'].value='0';
		//sys_unload_message=SA_NLS_DIRTY_MSG;
	}
	if (frm && frm.elements[prt_name+'_dirty_yn']){
		frm.elements[prt_name+'_dirty_yn'].value='0';
		//sys_unload_message=SA_NLS_DIRTY_MSG;
	}
}

function validateFieldByMask(f,m,t){
	if (f && f.value && m && m.length) {
	    v = f.value;
		nv = '';
		for (i=0; i<v.length; i++) {
			for (j=0; j<m.length; j++) {
				error_count=0;
			    if (v.charAt(i) != m.charAt(j)) {
					error_count++;
			    }else{
					nv = nv + v.charAt(i);
				}
				if (error_count>=m.length) {
					alert('Invalid characters in field');
					f.value = '';
					return false;
				}
			}
		}
		f.value=nv;
		if (t=='int') {
			r=parseInt(f.value,10);
			if (isNaN(r)) {
				alert('Invalid characters in field');
				f.value = '';
				return false;
			}else{
				f.value = r;
			}
		}
	}
	return true;
}
//Combo sensing field
//Usage: input type="text" name="hint" id="hint" onkeyup="return sys_combo_refresh(this.value,this.form.elements['combo']);"
function sys_combo_refresh(v_hint, e_combo){
	if (v_hint && e_combo && e_combo.type=="select-one"){
		//Use Lowercase for case insensitive comparison
		v_hint=v_hint.toLowerCase();
		//0 is Select from list
		for (i=1; i<e_combo.options.length; i++){
			//Use Lowercase for case insensitive comparison
			v_text=e_combo.options[i].innerHTML.toLowerCase();
			//Contains rule
			//if (v_text.indexOf(v_hint)>-1){
			//Starts with rule
			if (v_text.substring(0,v_hint.length)==v_hint){
				e_combo.selectedIndex=i;
				return true;
			}
		}
	}
	return false;
}

function limitInputSize(which, maxsize){
	which.value = which.value.substring(0, maxsize);
}

function check_date(ele){
	var frm = ele.form;
	var ename = ele.name.substr(0,3);
	var dd = frm.elements[ename + '_dd'].value;
	var mm = frm.elements[ename + '_mm'].value;
	var yy = frm.elements[ename + '_yy'].value;

	var validDate = new Date(yy,mm,dd);

	if (!validDate){
		alert("<?= SYS_PAGE_FORM_JS_MSG_01; ?>");
		return false;
	}else{
		return true;
	}
	
	//check if date is future;
	/*
	user_date = new Date(yy,mm,dd);
	today_date = new Date();
	
	if (user_date > today_date){
		alert("<?= SYS_PAGE_FORM_JS_MSG_02; ?>");
	}
	*/
}

function check_text(frm,ele,type){
	if (frm.elements[ele].value == ''){
		switch(type){
			case 'INT':
				alert("<?= SYS_PAGE_FORM_JS_MSG_03; ?>");
				break;
			case 'DECIMAL':
				alert("<?= SYS_PAGE_FORM_JS_MSG_04; ?>");
				break;
			case 'TIME':
				alert("<?= SYS_PAGE_FORM_JS_MSG_09; ?>");
				break;
			case 'DATE':
				alert("<?= SYS_PAGE_FORM_JS_MSG_10; ?>");
				break;
			case 'CHAR':
			default:
				alert("<?= SYS_PAGE_FORM_JS_MSG_05; ?>");
		}
		if (!frm.elements[ele] || frm.elements[ele].disabled || frm.elements[ele].type=="hidden"){
			alert("<?= SYS_PAGE_FORM_JS_MSG_08; ?>");
			return false;
		}
		frm.elements[ele].focus();
		return false;
	}
	return true;
}

function check_combo(frm,ele,type){
	if (frm.elements[ele].selectedIndex == -1 || frm.elements[ele].options[frm.elements[ele].selectedIndex].value==''){
		alert("<?= SYS_PAGE_FORM_JS_MSG_06; ?>");
		if (!frm.elements[ele] || frm.elements[ele].type=="hidden"){
			return false;
		}
		frm.elements[ele].focus();
		return false;
	}
	if (frm.elements[ele].options[frm.elements[ele].selectedIndex].value == ''){
		alert("<?= SYS_PAGE_FORM_JS_MSG_06; ?>");
		if (!frm.elements[ele] || frm.elements[ele].type=="hidden"){
			return false;
		}
		frm.elements[ele].focus();
		return false;
	}

	return true;
}

function check_tick(frm,ename){
	ele=frm.elements[ename];
	if(!ele.checked){
		alert("Please tick the check box!");
	}
	return ele.checked;
}

function check_upload(frm,ele){
	if (!frm.elements[ele] || frm.elements[ele].disabled || frm.elements[ele].type=="hidden"){
		alert("<?= SYS_PAGE_FORM_JS_MSG_08; ?>");
		return false;
	}
	if (frm.elements[ele].value == ''){
		alert("<?= SYS_PAGE_FORM_JS_MSG_07; ?>");
		return false;
	}

	return true;
}

function key_press(ele){
	var keycode = window.event.keyCode;

	if (keycode == 13){
		submit_form(ele);
	}
}

function check_click(ele){
	if (ele.checked){
		submit_form(ele);
	}
}

function urldecode(frm,ele){
	frm.elements[ele].value=unescape(frm.elements[ele].value);
	return true;
}

///////////////////////////////////
// REPORT SPECIFIC FUNCTONS
///////////////////////////////////

function add_group2list(lst, gnum, gname, flag){
	//outblank?
	if (lst.options.length>0 && lst.options[0].value==""){
		lst.options[0] = null;
	}
	//remove?
	for (i=0; i<lst.options.length; i++){
		if (lst.options[i].value == gnum){
			if (flag == false){
				lst.options[i] = null;
				return lst.options.length;
			}else{
				return lst.options.length;
			}
		}
	}
	//add?
	if (flag == true){
		lst.options[lst.options.length] = new Option(gname, gnum);
		return lst.options.length;
	}
}

function move_group(lst, dir){
	if (lst.options.length>0 && lst.options[0].value != ""){
		gnum = lst.selectedIndex;
		if (gnum != -1){
			//up?
			if (dir == -1){
				if (gnum > 0){
					temp = new Option(lst.options[gnum-1].text,lst.options[gnum-1].value);
					temp0= new Option(lst.options[gnum].text,lst.options[gnum].value);
					lst.options[gnum-1] = temp0;
					lst.options[gnum] = temp;
					lst.selectedIndex = gnum-1;
				}
			}
			//down?
			if (dir == 1){
				if (gnum < lst.options.length-1){
					temp = new Option(lst.options[gnum+1].text,lst.options[gnum+1].value);
					temp0= new Option(lst.options[gnum].text,lst.options[gnum].value);
					lst.options[gnum+1] = temp0
					lst.options[gnum] = temp;
					lst.selectedIndex = gnum+1;
				}
			}
		}
	}
	return true;
}
function list_copy(frome, toe, to_hidden, dir){
	if (frome && frome.form) {
               if (toe && frome.selectedIndex>0) {
			saved = frome.options[frome.selectedIndex];
			if (saved != null) {
			    frome.options[frome.selectedIndex] = null;
				toe.options[toe.options.length] = saved;

				hiddene = frome.form.elements[to_hidden];
				if (hiddene) {
					hiddene.value = '';
					if (dir > 0) {
						for (i=1; i<toe.options.length; i++) {
							if (i>1) {
								hiddene.value += ',';
							}
							hiddene.value += toe.options[i].value;
						}
					}else{
						for (i=1; i<frome.options.length; i++) {
							if (i>1) {
								hiddene.value += ',';
							}
							hiddene.value += frome.options[i].value;
						}
					}
				}
			}
		}
	}
}

function remove_all(lst){
	for (i=lst.options.length-1;i>=0;i--){
		lst.options[i] = null;
	}
	return true;
}

function uncheck_all(lst){
	for (i=0;i<lst.length;i++){
		lst[i].checked = false;
	}
	return true;
}

function check_all(lst){
	for (i=0;i<lst.length;i++){
		lst[i].checked = true;
		lst[i].onclick();
	}
	return true;
}

function checkJS(formName){

    if (typeof check == 'function' ) {
        return check(formName);
    }

    return true;

}


function calculate_consolidation(frm){
	nchk = -1;
	//Dont execute if no consol allowed
	if (frm.r_con && !frm.r_con.disabled){
		for (i=0; i<frm.r_con.length; i++){
			if (frm.r_con[i].checked){
				nchk = i;
				break;
			}
		}
		if (nchk == -1){
			frm.consolidate.value=frm.group_order.length;
		}else{
			frm.consolidate.value=frm.r_con[nchk].value;
		}
		temp = "";
		for (i=0; i<frm.group_order.options.length; i++){
			if (i>0){
				temp += ",";
			}
			temp += frm.group_order.options[i].value;
		}
		frm.group_sequence.value=temp;
	}
	return true;
}

function restore_groups(){
	frm = document.forms[form_cd];
	//Dont execute if no consol allowed
	if (frm.r_con && !frm.r_con.disabled){
		frm.r_con[0].checked=true;
		for (i=0; i<frm.tmp_grp.length; i++){
			frm.tmp_grp[i].checked=false;
		}
	}
	return ;
}

function milestone_strtodate(dat, tim)
{
	dd = dat.substring(0,2);
	mm = dat.substring(3,5);
	yyyy = dat.substring(6,10);
	hh = tim.substring(0,2);
	min = tim.substring(3,5);

	rtnDate = new Date();
	rtnDate.setDate(parseInt(dd, 10));
	rtnDate.setMonth(parseInt(mm, 10)-1);
	rtnDate.setYear(parseInt(yyyy, 10));
	rtnDate.setHours(parseInt(hh, 10));
	rtnDate.setMinutes(parseInt(min, 10));

	return rtnDate;

}
function milestone_calculate(frm,prefix,postfix){
	has_date = false;

	if (frm.elements[prefix+'date'+postfix].value != '' || frm.elements[prefix+'time'+postfix].value != ''){
		if (frm.elements[prefix+'date'+postfix].value == ''){
			alert('Time has been entered. Date is missing.');
			frm.elements[prefix+'date'+postfix].focus();
			return false;
		}

		if (frm.elements[prefix+'time'+postfix].value == '')
			frm.elements[prefix+'time'+postfix].value = '00:00';
/*
		if (milestone_strtodate(frm.elements[prefix+'date'+postfix].value, frm.elements[prefix+'time'+postfix].value)<	new Date()){
			alert('date/time cannot be before today\'s date/time.');
			frm.elements[prefix+'date'+postfix].focus();
			return false;
		}
*/
		has_date = true;
	}

	if ((frm.elements[prefix+'hours'+postfix].value != '') || (frm.elements[prefix+'days'+postfix].value != '') || 
		(frm.elements[prefix+'weeks'+postfix].value != '') || (frm.elements[prefix+'months'+postfix].value != ''))
	{
		//calculate future date
		next_date = new Date();
		hours = parseFloat(frm.elements[prefix+'hours'+postfix].value);
		days = parseFloat(frm.elements[prefix+'days'+postfix].value);
		weeks = parseFloat(frm.elements[prefix+'weeks'+postfix].value);
		months = parseFloat(frm.elements[prefix+'months'+postfix].value);

		if (isNaN(hours)) hours=0;
		if (isNaN(days)) days=0;
		if (isNaN(weeks)) weeks=0;
		if (isNaN(months)) months=0;
					
		next_date.setHours(next_date.getHours()+hours);
		next_date.setDate(next_date.getDate()+days);
		next_date.setDate(next_date.getDate()+(weeks*7));
		next_date.setMonth(next_date.getMonth()+months);

/*
		//get date in one year
		future_date = new Date();
		future_date.setYear (future_date.getYear() + 1);

		if (next_date>future_date)
		{
			frm.elements[prefix+'hours'+postfix].focus();
			alert("New date cannot be greater than " + future_date.toLocaleString() + ". ");
			return false;
		}
*/
		frm.elements[prefix+'date'+postfix].value = next_date.getDate()+  SA_NLS_DT_SEP + (next_date.getMonth()+1) +  SA_NLS_DT_SEP + next_date.getFullYear();
		frm.elements[prefix+'time'+postfix].value = next_date.getHours()+  SA_NLS_TM_SEP + next_date.getMinutes();

		has_date = true;
	}
	return has_date;
}

/**
 * Object PHP_Serializer
 * 	JavaScript to PHP serialize / unserialize class.
 * This class is designed to convert php variables to javascript
 * and javascript variables to php with a php serialize unserialize
 * compatible way.
 *
 * PARSABLE PHP TO JAVASCRIPT VARIABLES:
 * 	[ PHP TYPE ]			[ JAVASCRIPT TYPE ]
 * 	array				Array
 * 	class				Object (*)
 * 	string				String
 * 	boolean				Boolean
 * 	undefined or null		null
 * 	integer / double 		Number
 *
 * PARSABLE JAVASCRIPT TO PHP VARIABLES:
 *	[ JAVASCRIPT TYPE ]		[ PHP TYPE ]
 *	Array				array
 *	Object				class (*)
 *	String				string
 *	Boolean				boolean
 *	null				null
 *	Number				int or double
 *	Date				class
 *	Error				class
 *	Function			anything (*)
 *	__class				anything (*)
 *
 * (*) NOTE:
 * Any PHP serialized class requires the native PHP class to be used, then it's not a
 * PHP => JavaScript converter, it's just a usefull serilizer class for each
 * compatible JS and PHP variable types.
 * However is possible to change public parameters.
 * Lambda, Resources or other dedicated PHP variables are not usefull for JavaScript.
 * (i.e.
 * 	$v = create_function('', 'return 1;'); serialize($v);
 *	$conn = mydb_connect(); serialize($conn);
 * )
 * There are same restrictions for javascript functions too then these will not be sent
 * (but will be filtered / ignored automatically).
 *
 * NEW ON V 1.6a and greater:
 * You can use experimental version of utf8 compatible serialized / unserialized strings
 * with true while you declare your php_serializer var:
 * var php = new PHP_Serializer(true); // enable experimental multybyte convertion
 * _____________________________________________
 *
 * EXAMPLE:
 *	var php = new PHP_Serializer();
 *	alert(php.unserialize(php.serialize(somevar)));
 *	// should alert the original value of somevar
 * ---------------------------------------------
 * @author              Andrea Giammarchi
 * @site		www.devpro.it
 * @date                2005/11/26
 * @lastmod             2006/01/13 07:00 [updated experimental UTF-8 compatible header and utf8_encode php function]
 * @credits		Special thanks to Fabio Sutto for some ideas and some debug
 *			Special thanks to kentaromiura for a faster loop idea while unserialize
 * @version             1.6b, tested on FireFox 1.5, IE 6 SP2 and Opera 8
 */
function PHP_Serializer() {
	this.__cut = (String(Object).indexOf('(')!=16)?9:10;
	if(arguments.length == 1 && arguments[0] == true) {
		this.__m = Math;
		PHP_Serializer.prototype.encode = PHP_Serializer__Encoded_length;
		PHP_Serializer.prototype[String] =
		PHP_Serializer.prototype.__string = PHP_Serializer__String__2;
		PHP_Serializer.prototype.s = PHP_UnSerializer__String_2;
	}
	else {
		PHP_Serializer.prototype[String] =
		PHP_Serializer.prototype.__string = PHP_Serializer__String__1;
		PHP_Serializer.prototype.s = PHP_UnSerializer__String_1;
	}
}
function PHP_Serializer__String__1(__s) {
	return ('s:'+__s.length+':"'+__s+'";');
}
function PHP_UnSerializer__String_1() {
	this.__c += 2;
	var sls = this.__s.substr(this.__c,(this.__s.indexOf(':',this.__c)-this.__c));
	var sli = parseInt(sls);
	sls = this.__c + sls.length + 2;
	this.__c = sls + sli + 2;
	return this.__s.substr(sls,sli);
}
function PHP_Serializer__Encoded_length(__s) {
	__s = __s.replace(/\r\n/g, '\n');
	var a = b = c = 0;
	var len = __s.length;
	while(a < len) {
		c = __s.charCodeAt(a++);
		b += (c<128)?1:((c<2048)?2:((c<65536)?3:4));
	}
	return b;
}
function PHP_Serializer__String__2(__s) {
	//Modified by MH added escape
	//return ('s:'+this.encode(__s)+':"'+__s+'";');
	return ('s:'+(__s.length)+':"'+__s+'";');
}
function PHP_UnSerializer__String_2() {
	this.__c += 2;
	var sls = this.__s.substr(this.__c,(this.__s.indexOf(':',this.__c)-this.__c));
	var sli = parseInt(sls);
	sls = this.__c + sls.length + 2;
	if(sli > 0) {
		var a = sli > 4 ? this.__m.floor(sli/4) : 1;
		while(a > 0) {
			if(this.encode(this.__s.substr(sls,a++)) === sli) {
				sli = a - 1;
				a = 0;
			}
		}
	}
	this.__c = sls + sli + 2;
	return this.__s.substr(sls,sli);
}
function PHP_Serializer__Boolean(__s) {
	return ('b:'+(__s==false?'0':'1')+';');
}
function PHP_UnSerializer__Boolean() {
	var tmp = (this.__s.substr((this.__c+2),1)=='1'?true:false);
	this.__c += 4;
	return tmp;
}
function PHP_Serializer__Number(__s) {
	__s = String(__s);
	return ((__s.indexOf('.')==-1)?'i:'+__s+';':'d:'+__s+';');
}
function PHP_UnSerializer__Number() {
	var sli = this.__s.indexOf(';',(this.__c+1))-2;
	var tmp = Number(this.__s.substr((this.__c+2),(sli-this.__c)));
	this.__c = sli + 3;
	return tmp;
}
function PHP_Serializer__Function() {
	return '';
}
function PHP_Serializer__Undefined() {
	return 'N;';
}
function PHP_UnSerializer__Undefined() {
	this.__c += 2;
	return null;
}
function PHP_Serializer__Common_ArrayObject(__s) {
	var n;
	var a = 0;
	var ser = new Array();
	for(var b in __s) {
		n = (__s[b] == null);
		if(n || (__s[b].constructor != Function && b != '__class')) {
			ser[a++]=((!isNaN(b))?this.__number(b):this.__string(b))+
			(n?this.__undefined():this[__s[b].constructor](__s[b]));
		}
	}
	return [a,ser.join('')];
}
function PHP_UnSerializer__Common_ArrayObject(tmp) {
	this.__c += 2;
	var a = this.__s.indexOf(':',this.__c);
	var k = parseInt(this.__s.substr(this.__c,(a-this.__c))) + 1;
	this.__c = a + 2;
	while(--k)
		tmp[this[this.__s.substr(this.__c,1)]()] = this[this.__s.substr(this.__c,1)]();
	return tmp;
}
function PHP_Serializer__Object(__s) {
	var o = String(__s.constructor);
	var oname = o.substr(this.__cut,o.indexOf('(')-this.__cut);
	var ser = this.__common_array_object(__s);
	return ('O:'+oname.length+':"'+oname+'":'+ser[0]+':{'+ser[1]+'}');
}
function PHP_UnSerializer__Object() {
	var tmp = 's'+this.__s.substr(++this.__c,(this.__s.indexOf(':',(this.__c+3))-this.__c))+';';
	var a = tmp.substr(2,(tmp.indexOf(':',2)-2));
	var o = tmp.substr((a.length+4),parseInt(a));
	if(eval("typeof("+o+") == 'undefined'"))
		eval('function '+o+'(){}');
	this.__c += (tmp.length-3);
	eval('tmp = this.__common(new '+o+'());');
	++this.__c;
	return tmp;
}
function PHP_Serializer__Array(__s) {
	var ser = this.__common_array_object(__s);
	return ('a:'+ser[0]+':{'+ser[1]+'}');
}
function PHP_UnSerializer__Array() {
	var tmp = this.__common(new Array());
	++this.__c;
	return tmp;
}
function PHP_Serializer__serialize(what) {
	if(what==null){
		var ser = this.__undefined();
	}else if(!this[what.constructor]){
		var ser = this[Object](what);
	}else{
		var ser = this[what.constructor](what);
	}
	return ser;
}
function PHP_UnSerializer__unserialize(what) {
	this.__c = 0;
	this.__s = what;
	delete what;
	return this[this.__s.substr(this.__c,1)]();
}
PHP_Serializer.prototype[Boolean] = PHP_Serializer__Boolean;
PHP_Serializer.prototype[Number] =
PHP_Serializer.prototype.__number = PHP_Serializer__Number;
PHP_Serializer.prototype[Function] = PHP_Serializer__Function;
PHP_Serializer.prototype[Date] = 
PHP_Serializer.prototype[Error] = 
PHP_Serializer.prototype[Object] = PHP_Serializer__Object;
PHP_Serializer.prototype[Array] = PHP_Serializer__Array;
PHP_Serializer.prototype.__common_array_object = PHP_Serializer__Common_ArrayObject;
PHP_Serializer.prototype.__undefined = PHP_Serializer__Undefined;
PHP_Serializer.prototype.serialize = PHP_Serializer__serialize;
PHP_Serializer.prototype.b = PHP_UnSerializer__Boolean;
PHP_Serializer.prototype.i =
PHP_Serializer.prototype.d = PHP_UnSerializer__Number;
PHP_Serializer.prototype.N = PHP_UnSerializer__Undefined;
PHP_Serializer.prototype.__common = PHP_UnSerializer__Common_ArrayObject;
PHP_Serializer.prototype.O = PHP_UnSerializer__Object;
PHP_Serializer.prototype.a = PHP_UnSerializer__Array;
PHP_Serializer.prototype.unserialize = PHP_UnSerializer__unserialize;

//Enable experimental UTF-8
var sys_default_php_serializer = new PHP_Serializer(true);

// -->
