/*------------------------------------------------------------
	PNL: Panel
	Author: Nguyen Truong Sinh
	Date: 2003-06-18
	Usage:
		PNL_Init(ico_max,ico_min);
		PNL_Draw(ttl,dat,wid,cls,flg);
--------------------------------------------------------------*/
var _pnl_iid = 0;
var _pnl_img;

/*------------------------------------------------------------
	Function PNL_init
	Description:
		Init the library
	Syntax: 
		PNL_draw(ico_max,ico_min)
	Parameters:
		ico_max: button icon when the panel is in the minimized status
		ico_min: button icon when the panel is in the maximized status
	Return:
		Nothing
--------------------------------------------------------------*/
function PNL_init(ico_max,ico_min){
	if(!_pnl_img){
		ico_max = ico_max ? ico_max : "/_ico/ico_expand.gif";
		ico_min = ico_min ? ico_min : "/_ico/ico_collapse.gif";
		
		_pnl_img = new Array(2);
		_pnl_img[0] = new Image();
		_pnl_img[0].src = ico_max;
		_pnl_img[1] = new Image();
		_pnl_img[1].src = ico_min;
	}
};
/*------------------------------------------------------------
	Function PNL_draw
	Description:
		This function constructs a panel and write it to webpage
	Syntax: 
		PNL_draw(ttl,dat,wid,cls,flg,ico)
	Parameters:
		ttl: Panel title (if null then there is no title bar)
		dat: Data to put in the client area of the panel
		wid: Panel width (default is 100%)
		cls: Class prefix (default is pnl). Classes used include:
			table.<cls>_bdr: used for panel border
			td.<cls>_dat: used for the client area
			table.<cls>_ttl: used for title bar
		flg: type of panel
			0 - (collapse/expand) panel in the closed state
			1 - (collapse/expand) panel in the opened state
			2 - panel always in the opened state
		ico: panel icon (displayed on the left of title)
	Return:
		Nothing
--------------------------------------------------------------*/
function PNL_draw(){

	var v_arg = arguments[0];
	var v_toa = typeof(v_arg) == 'object';
	var v_ttl = v_toa ? v_arg.ttl : arguments[0];
	var v_dat = v_toa ? v_arg.dat : arguments[1];
	var v_wid = v_toa ? v_arg.wid : arguments[2];
	var v_cls = v_toa ? v_arg.cls : arguments[3];
	var v_flg = v_toa ? v_arg.flg : arguments[4];
	var v_ico = v_toa ? v_arg.ico : arguments[5];

	var v_htm = PNL_make(v_ttl,v_dat,v_wid,v_cls,v_flg,v_ico);
	if(v_htm){
		document.write(v_htm);
	}
};

function PNL_make(p_ttl,p_dat,p_wid,p_cls,p_flg,p_ico){
	if(!p_dat) return '';
	PNL_init();

	p_wid = p_wid ? p_wid : '100%';
	p_cls = p_cls ? p_cls : 'def';
	p_flg = typeof(p_flg) == 'number' ? ((p_flg < 0 || p_flg > 2) ? 0 : p_flg) : 0;
	var v_ret = '<table class="pnl_' + p_cls + '_bdr" width="' + p_wid + '" border=0 cellspacing=1 cellpadding=1>';
	v_ret += '<tr><td class="pnl_' + p_cls + '_dat" width=100%>';
	if(p_ttl != null || p_flg < 2){
		p_ttl = p_ttl ? p_ttl : '';
		p_ico = p_ico ? '<img src="' + p_ico + '" border="0">&nbsp;' : '';
		v_ret += '<table class="pnl_' + p_cls + '_ttl" width=100% border=0 cellpadding=1 cellspacing=0>';
		v_ret += '<tr><td align=left valign=top>&nbsp;' + p_ico + p_ttl + '</td>';
		if(p_flg < 2){
			v_ret += '<td align=right valign=top>';
			v_ret += '<img src="' + _pnl_img[p_flg].src + '" border=0 width=15 height=15 onclick="_pnl_toggle(this,' + _pnl_iid + ')">';
			v_ret += '</td>';
		}
		v_ret += '</tr></table>';
	}
	v_ret += '<div id=_pnl_' + _pnl_iid + ' style="display:' + (p_flg > 0 ? 'block' : 'none') +';">';
	v_ret += p_dat;
	v_ret += '</div></td></tr>';
	v_ret += '</table>';
	_pnl_iid++;
	return v_ret;
};
/*------------------------------------------------------------
	Function PNL_tbl_val
	Description:
		This function constructs a data table. Each row of the table
		consists of two fields: title and value
	Syntax: 
		PNL_tbl_val(dat,cls,flg)
	Parameters:
		dat: An array of data in the form of [[ttl,val],[ttl,val]..]
		cls: Class prefix (default is pnl). Classes used include:
			table.<cls>_dat: used for the table border
			td.<cls>_dat: used for the table cell
		flg: type of alignment (default is 1)
			0 - left alignment
			1 - center alignment
			2 - right alignment
	Return:
		Result string 
--------------------------------------------------------------*/
function PNL_tbl_val(p_arg){
	if(typeof(p_arg) != 'object')
		return;
	var v_dat = p_arg.dat;
	var v_cls = p_arg.cls;
	var v_alg = p_arg.alg;

	v_cls = v_cls ? v_cls : 'def';
	v_alg = ['left','center','right'][(typeof(v_alg) == 'number') ? (v_alg % 3) : 1];
	var v_str = '';
	for(var v_idx = 0; v_idx < v_dat.length; v_idx++){
		var v_itm = v_dat[v_idx];
		var v_ttl = v_itm.ttl ? v_itm.ttl : '';
		var v_val = v_itm.val ? v_itm.val : '';
		if(v_ttl && v_val){
			v_str += '<tr>';
			v_str += '<td class="pnl_' + v_cls + '_dat" align=left valign=top>' + v_ttl + '</td>';
			v_str += '<td class="pnl_' + v_cls + '_dat" align="' + v_alg + '" valign=top>' + v_val + '</td>';
			v_str += '</tr>';
		}
	}
	if(v_str)
		v_str = '<table class="pnl_' + v_cls + '_dat" width="100%" border=0 cellpadding=1 cellspacing=1>' 
			+ v_str + '</table>';
	return v_str;
};
/*------------------------------------------------------------
	Function PNL_txt_lnk
	Description:
		This function constructs a table of text links.
	Syntax: 
		PNL_txt_lnk(dat,cls,ico)
	Parameters:
		dat: An array of data in the form of [[ttl,lnk],[ttl,lnk]..]
		cls: Class prefix (default is pnl). Classes used include:
			table.<cls>_dat: used for the table border
			td.<cls>_dat: used for the table cell
			span.<cls>_hit: used for links in hilite state
			span.<cls>_itm: used for links in normal state
		ico: icon (default is null)
	Return:
		Result string 
--------------------------------------------------------------*/
function PNL_txt_lnk(p_arg){
	if(typeof(p_arg) != 'object')								
		return;
	var v_dat = p_arg.dat;

	var v_cls = p_arg.cls;
	var v_ico = p_arg.ico;
	v_cls = v_cls ? v_cls : 'def';
	v_ico = v_ico ? '<td class="pnl_' + v_cls + '_dat" width=1% align="center" valign="top"><img src="' + v_ico + '" border=0></td>' : '';
	var v_str = '';
	for(var v_idx = 0; v_idx < v_dat.length; v_idx++){
		var v_itm = v_dat[v_idx];
		var v_ttl = v_itm.ttl ? v_itm.ttl : '&nbsp;';
		var v_lnk = v_itm.lnk ? v_itm.lnk : '';
		var	v_dst = v_itm.dst ? v_itm.dst : '_self';
		if(v_ttl){
			if(v_lnk){
				v_ttl = '<span class="pnl_' + v_cls + '_lnk"'
					+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
					+ ' onmouseover="this.className=\'pnl_' + v_cls + '_hit\'"'
					+ ' onmouseout="this.className=\'pnl_' + v_cls + '_lnk\'"'
					+ '>' + v_ttl + '</a>';
			}
			v_str += '<tr>' + v_ico;
			v_str += '<td width="*" class="pnl_' + v_cls + '_dat" align="justify" valign=top>' + v_ttl + '</td>';
			v_str += '</tr>';
		}
	}
	if(v_str)
		v_str = '<table class="pnl_' + v_cls + '_dat"'
			+ ' width="100%" border=0 cellpadding=1 cellspacing=1>' 
			+ v_str + '</table>';
	return v_str;
};
/*------------------------------------------------------------
	Function PNL_img_lnk
	Description:
		This function constructs a table of image links.
	Syntax: 
		PNL_img_lnk(dat,cls,col,wid,hei)
	Parameters:
		dat: An array of data in the form of [[img,lnk],[img,lnk]..]
		cls: Class prefix (default is pnl). Classes used include:
			table.<cls>_dat: used for the table border
			td.<cls>_dat: used for the table cell
			a.<cls>_lnk: used for links		
		col: number of columns (default is 1)
		wid: image width (default is fullsize, 'auto': autosize)
		hei: image height
	Return:
		Result string 
--------------------------------------------------------------*/
function PNL_img_lnk(p_arg){
	if(typeof(p_arg) != 'object')
		return;
	var v_dat = p_arg.dat;
	var v_cls = p_arg.cls;
	var v_col = p_arg.col;
	var v_wid = p_arg.wid;
	var v_hei = p_arg.hei;

	v_cls = v_cls ? v_cls : 'def';
	v_col = (typeof(v_col) == 'number') ? (v_col > 0 ? v_col : 1) : 1;
	var v_att = ' border="0"';
	if(v_wid){
		if(v_wid == 'auto')
			v_wid = '100%';
		v_att += ' width="' + v_wid + '"';
	}
	if(v_hei){
		v_att += ' height="' + v_hei + '"';
	}
	v_wid = 100/v_col;
	var v_str = '';
	var v_num = 0;
	for(var v_idx = 0; v_idx < v_dat.length; v_idx++){
		var v_itm = v_dat[v_idx];
		var	v_pic = v_itm.ico ? v_itm.ico : null;
		var v_lnk = v_itm.lnk ? v_itm.lnk : '';
		var	v_dst = v_itm.dst ? v_itm.dst : '_self';
		if(v_pic){
			var flg = v_pic.indexOf('.swf');
			if(flg==-1)
			{
				v_pic = '<img src="' + v_pic + '"' + v_att + ' >';
			}
			else
			{
				v_pic = '<embed src="' + v_pic + '"' + v_att + ' width=144 height=128>';			
			}
			if(v_lnk){
				v_pic = '<span class="pnl_' + v_cls + '_lnk"'
					+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
					+ ' onmouseover="this.className=\'pnl_' + v_cls + '_hit\'"'
					+ ' onmouseout="this.className=\'pnl_' + v_cls + '_lnk\'"'
					+ '>' + v_pic + '</span>';
			}

			if(v_num % v_col == 0)
				v_str += '<tr>';
			v_str += '<td class="pnl_' + v_cls + '_dat" width="' + v_wid + '%" align="center" valign="center">' + v_pic + '</td>';
			if(v_num % v_col == v_col - 1)
				v_str += '</tr>';
			v_num++;
		}
	}
	v_num %= v_col;
	if(v_num){
		for(; v_num < v_col; v_num++){
			v_str += '<td class="pnl_' + v_cls + '_dat" width="' + v_wid + '%"></td>';
		}
		v_str += '</tr>';
	}
	if(v_str) 
		v_str = '<table class="pnl_' + v_cls + '_dat" width="100%" border=0 cellpadding=1 cellspacing=1>' 
			+ v_str + '</table>';
	return v_str;
};
/*------------------------------------------------------------
	Function PNL_t_i_lnk
	Description:
		this function create a table contains text and image link
	Syntax: 
		PNL_t_i_lnk(dat,cls,flg,wid,hei)
	Parameters:
		dat: array of items; each item is an array in the form of
			[text,image,link]
		cls: class prefix (default is pnl)
		flg: type of layout 
			0 - text is on the left
			1 - text is on the right
			2 - text is below image
			3 - text is above image
		wid: image width (default is fullsize)
		hei: image height 
	Return:
		Result string
--------------------------------------------------------------*/
function PNL_t_i_lnk(p_arg){
	if(typeof(p_arg) != 'object')
		return;
	var v_dat = p_arg.dat;
	var v_cls = p_arg.cls;
	var v_flg = p_arg.flg;
	var v_wid = p_arg.wid;
	var v_hei = p_arg.hei;

	v_cls = v_cls ? v_cls : 'def';
	v_flg = v_flg ? (v_flg % 4) : 0;
	var v_att = ' border="0"';
	if(v_wid)
		v_att += ' width="' + v_wid + '"';
	if(v_hei)
		v_att += ' height="' + v_hei + '"';
	var v_str = '';
	for(var v_idx = 0; v_idx < v_dat.length; v_idx++){
		var v_itm = v_dat[v_idx];
		var	v_pic = v_itm.ico ? v_itm.ico : null;
		var v_txt = v_itm.ttl ? v_itm.ttl : '&nbsp;';
		var v_lnk = v_itm.lnk ? v_itm.lnk : '';
		var	v_dst = v_itm.dst ? v_itm.dst : '_self';
		if(v_txt && v_pic){
			v_pic = '<img src="' + v_pic + '"' + v_att + '>';
			if(v_lnk){
				v_txt = '<span class="pnl_' + v_cls + '_lnk"'
					+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
					+ ' onmouseover="this.className=\'pnl_' + v_cls + '_hit\'"'
					+ ' onmouseout="this.className=\'pnl_' + v_cls + '_lnk\'"'
					+ '>' + v_txt + '</span>';
				v_pic = '<span class="pnl_' + v_cls + '_lnk"'
					+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
					+ ' onmouseover="this.className=\'pnl_' + v_cls + '_hit\'"'
					+ ' onmouseout="this.className=\'pnl_' + v_cls + '_lnk\'"'
					+ '>' + v_pic + '</span>';
			}
			if(v_flg < 2){
				v_str += '<tr>';
				if(v_flg == 1){ /* text is on the left */
					v_str += '<td width=99% class="pnl_' + v_cls + '_dat" align="justify" valign=top>' + v_txt + '</td>';
					v_str += '<td width=1% class="pnl_' + v_cls + '_dat" align="center" valign="top">' + v_pic + '</td>';
				} else { /* text is on the right */
					v_str += '<td width=1% class="pnl_' + v_cls + '_dat" align="center" valign=top>' + v_pic + '</td>';
					v_str += '<td width=99% class="pnl_' + v_cls + '_dat" align="justify" valign="top">' + v_txt + '</td>';
				}
				v_str += '</tr>';
			} else {
				if(v_str != ''){
					v_str += '<tr><td height=1 bgcolor=black></td></tr>';
				}
				if(v_flg == 2){ /* text is below image */
					v_str += '<tr><td class="pnl_' + v_cls + '_dat" align="center">' + v_pic + '</td></tr>';
					v_str += '<tr><td class="pnl_' + v_cls + '_dat" align="justify">' + v_txt + '</td></tr>';
				} else { /* text is above image */
					v_str += '<tr><td class="pnl_' + v_cls + '_dat" align="justify">' + v_txt + '</td></tr>';
					v_str += '<tr><td class="pnl_' + v_cls + '_dat" align="center">' + v_pic + '</td></tr>';
				}
			}
		}
	}
	if(v_str) 
		v_str = '<table class="pnl_' + v_cls + '_dat" width="100%" border=0 cellpadding=1 cellspacing=1>' + v_str + '</table>';
	return v_str;
};
/*------------------------------------------------------------
	Function PNL_lst_lnk
	Description:
		This function constructs a table of image links.
	Syntax: 
		PNL_lst_lnk(dat,cls,flg,col)
	Parameters:
		dat: An array of data in the form of [item,item,...,item]
			each item has the form of [ttl,lnk,ico,dst,lst]
			where lst is an array of [l_item,l_item,...,l_item] and each
			l_item has the form of [ttl,lnk,ico,dst]
		cls: Class prefix (default is lst). Classes used include:
			table.pnl_<cls>_dat: used for the table border
			td.pnl_<cls>_dat: used for the table cell
			a.pnl_<cls>_ttl: used for title links		
			a.pnl_<cls>_itm: used for item links		
			span.pnl_<cls>_ttl: used for title text
			span.pnl_<cls>_itm: used for item text
		flg: type of layout 
			0: items separated by commas (default)
			1: each item is on a line
		col: number of columns (default is 1)
	Return:
		Result string 
--------------------------------------------------------------*/
function PNL_lst_lnk(p_arg){
	if(typeof(p_arg) != 'object')
		return;
	var v_dat = p_arg.dat;
	var v_cls = p_arg.cls;
	var v_flg = p_arg.flg;
	var v_col = p_arg.col;
	
	if(!v_dat) return '';
	v_cls = v_cls ? v_cls : 'def';
	v_col = (typeof(v_col) == 'number') ? (v_col > 0 ? v_col : 1) : 1;
	v_flg = (typeof(v_flg) == 'number') ? v_flg % 2 : 0;
	var v_wid = 100/v_col;
	var v_str = '';
	var v_num = 0;
	for(var v_idx = 0; v_idx < v_dat.length; v_idx++){
		var v_itm = v_dat[v_idx];
		var	v_ico = v_itm.ico;
		var v_ttl = v_itm.ttl ? v_itm.ttl : '';
		var v_lnk = v_itm.lnk ? v_itm.lnk : '';
		var	v_dst = v_itm.dst ? v_itm.dst : '_self';
		var	v_sub = v_itm.sub;

		if(v_ttl || v_ico){
			v_ico = v_ico ? '<img src="' + v_ico + '" border="0">&nbsp;' : '';
			v_ttl = v_ico + v_ttl;
			if(v_lnk){
				v_ttl = '<span class="pnl_' + v_cls + '_lnk_0"'
					+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
					+ ' onmouseover="this.className=\'pnl_' + v_cls + '_hit_0\'"'
					+ ' onmouseout="this.className=\'pnl_' + v_cls + '_lnk_0\'"'
					+ '>' + v_ttl + '</span>';
			} else {
				v_ttl = '<span class="pnl_' + v_cls + '_itm_0">' + v_ttl + '</span>';
			}

			switch(v_flg){
				case 0:
					v_sub = _lst_itm_0(v_sub,v_cls);
					if(v_sub) v_ttl += "<br>" + v_sub;
					break;
				case 1:
					v_sub = _lst_itm_1(v_sub,v_cls);
					v_ttl += v_sub;
					break;
			}
			
			if(v_num % v_col == 0)
				v_str += '<tr>';
			v_str += '<td class="pnl_' + v_cls + '_dat" width="' + v_wid + '%" align="left" valign="top">' + v_ttl + '</td>';
			if(v_num % v_col == v_col - 1)
				v_str += '</tr>';
			v_num++;
		}
	}
	v_num %= v_col;
	if(v_num){
		for(; v_num < v_col; v_num++){
			v_str += '<td class="pnl_' + v_cls + '_dat" width="' + v_wid + '%"></td>';
		}
		v_str += '</tr>';
	}
	if(v_str) 
		v_str = '<table class="pnl_' + v_cls + '_dat" width="100%" border=0 cellpadding=2 cellspacing=0>' + v_str + '</table>';
	return v_str;

	/* PRIVATE FUNCTIONS */
	function _lst_itm_0(p_dat,p_cls){
		var v_ret = '';
		if(p_dat){
			for(var v_idx = 0; v_idx < p_dat.length; v_idx++){
				var v_itm = p_dat[v_idx];
				var	v_ico = v_itm.ico;
				var v_ttl = v_itm.ttl ? v_itm.ttl : '';
				var v_lnk = v_itm.lnk ? v_itm.lnk : '';
				var	v_dst = v_itm.dst ? v_itm.dst : '_self';

				if(v_ttl || v_ico){
					v_ico = v_ico ? '<img src="' + v_ico + '" border="0">&nbsp;' : '';
					v_ttl = v_ico + v_ttl;
					if(v_lnk){
						v_dst = v_dst ? ' target="' + v_dst + '"' : '';
						ttl = '<span class="pnl_' + p_cls + '_lnk_1"'
							+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
							+ ' onmouseover="this.className=\'pnl_' + p_cls + '_hit_1\'"'
							+ ' onmouseout="this.className=\'pnl_' + p_cls + '_lnk_1\'"'
							+ '>' + v_ttl + '</span>';
					} else {
						v_ttl = '<span class="pnl_' + p_cls + '_itm_1">' + v_ttl + '</span>';
					}
					v_ret += (v_ret ? ', ' : '') + v_ttl;
				}
			}
		}
		return v_ret;
	}
	function _lst_itm_1(p_dat,p_cls){
		var v_ret = '';
		if(p_dat){
			for(var v_idx = 0; v_idx < p_dat.length; v_idx++){
				var v_itm = p_dat[v_idx];
				var	v_ico = v_itm.ico;
				var v_ttl = v_itm.ttl ? v_itm.ttl : '';
				var v_lnk = v_itm.lnk ? v_itm.lnk : '';
				var	v_dst = v_itm.dst ? v_itm.dst : '_self';
				if(v_ttl || v_ico){
					v_ico = v_ico ? '<img src="' + v_ico + '" border="0">&nbsp;' : '';
					v_ttl = v_ico + v_ttl;
					if(v_lnk){
						v_ttl = '<span class="pnl_' + p_cls + '_lnk_1"'
							+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
							+ ' onmouseover="this.className=\'pnl_' + p_cls + '_hit_1\'"'
							+ ' onmouseout="this.className=\'pnl_' + p_cls + '_lnk_1\'"'
							+ '>' + v_ttl + '</span>';
					} else {
						v_ttl = '<span class="pnl_' + p_cls + '_itm_1">' + v_ttl + '</span>';
					}
					v_ret += '<li>' + v_ttl + '</li>';
				}
			}
		}
		return v_ret;
	}
};
/*------------------------------------------------------------
	Function PNL_nav_bar
	Description:
		This function constructs a navigation bar.
	Syntax: 
		PNL_nav_bar(dat,cls)
	Parameters:
		dat: An array of data in the form of [item,item,...,item]
			each item has the form of [ttl,lnk,ico,dst,lst]
			where lst is an array of data
		cls: Class prefix (default is nav). Classes used include:
			table.pnl_<cls>_dat: used for the table border
			tr.pnl_<cls>_itm_<lvl>: used for item in normal mode
			tr.pnl_<cls>_hit_<lvl>: used for item in hilite mode
			tr.pnl_<cls>_sep_<lvl>: used for seperator
			where lvl is the level of pnl
	Return:
		Result string 
--------------------------------------------------------------*/
function PNL_nav_bar(p_dat,p_cls,p_lvl){
	if(!p_dat) return '';
	p_cls = p_cls ? p_cls : 'def';
	p_lvl = p_lvl ? p_lvl : 0;
	var v_ret = '';
	var v_num = 0;
	var v_sep = 0;
	for(var v_idx = 0; v_idx < p_dat.length; v_idx++){
		var v_itm = p_dat[v_idx];
		var	v_ico = v_itm.ico;
		var v_ttl = v_itm.ttl ? v_itm.ttl : '';
		var v_lnk = v_itm.lnk ? v_itm.lnk : '';
		var	v_dst = v_itm.dst ? v_itm.dst : '_self';
		var v_sub = v_itm.sub;
		if(v_ttl || v_ico){
			if(v_ttl == '-'){
				v_sep = 1;
			} else {
				v_ico = v_ico ? '<img src="' + v_ico + '" border="0">&nbsp;' : '';
				v_dst = v_dst ? v_dst : '_self';
				v_ret += v_sep ? '<tr class="pnl_' + p_cls + '_sep_' + p_lvl + '"><td colspan="3"></td></tr>' : '';
				v_ret += '<tr class="pnl_' + p_cls + '_itm_' + p_lvl + '"'
					+ ' onmouseover="this.className=\'pnl_' + p_cls + '_hit_' + p_lvl + '\'"'
					+ ' onmouseout="this.className=\'pnl_' + p_cls + '_itm_' + p_lvl + '\'"'
					+ ' onclick="_pnl_on_click(\'' + str2str(v_lnk) + '\',\'' + v_dst + '\')"'
					+ '><td width="1%" valign="top">' + v_ico + '<td width="99%">' + v_ttl + '</td></tr>';
				v_sep = 0;
				v_ret += PNL_nav_bar(v_sub,p_cls,p_lvl + 1);
			}
		}
	}
	if(v_ret && p_lvl == 0){
		v_ret = '<table class="pnl_' + p_cls + '_dat" width="100%" border=0 cellpadding=3 cellspacing=0>' + v_ret + '</table>';
	}
	return v_ret;
};
/* PRIVATE FUNCTIONS */
function _pnl_toggle(p_pic,p_iid){
	var v_obj = get_element('_pnl_' + p_iid);
	if(v_obj.style.display == 'none'){
		v_obj.style.display = 'block';
		p_pic.src = _pnl_img[1].src;
	} else {
		v_obj.style.display = 'none';
		p_pic.src = _pnl_img[0].src;
	}
};

function _pnl_on_click(p_req,p_dst){
	if(p_req){
		if(p_req.match(/^([^:]*):(.*)/)){
			v_tol = RegExp.$1;
			p_req = RegExp.$2;
			switch(v_tol){
				case 'dat':
					p_req = str2dat(p_req);
					break;
				case 'ext':
					break;
			}
		}
		doAct(null,p_req,null,null,null,p_dst);
	}
};
