function $init(p_url,p_lng){
	var v_lib = ['mnu','rol','box','rss'];
	if(p_lng == 'vie'){
		v_lib.unshift('kbv');
	}
	for(var v_idx in v_lib){
		document.write('<script type="text/javascript" src="' + 
			p_url + '/_lib/_' + v_lib[v_idx] + '.js"></script>')
	}
	var v_app = [p_lng];
	for(var v_idx in v_app){
		document.write('<script type="text/javascript" src="' + 
			p_url + '/scripts/usr/' + v_app[v_idx] + '.js"></script>')
	}
	/*---*/
	delete $init;
}
/*---*/
CAPP.prototype.ttl = function(p_ttl){
	var v_obj = getElementById('ttlsec');
	if(p_ttl && v_obj){
		v_obj.innerHTML = p_ttl;
		v_obj.style.display = 'block';
	}
};
CAPP.prototype.dtm = function(){
	if(CAPP.DOW){
		var v_dtm = new Date();
		v_dtm = CAPP.DOW[v_dtm.getDay()] + ', ' + 
			v_dtm.getDate() + '-' + (v_dtm.getMonth() + 1) + '-' + v_dtm.getYear(); 
		SYS.out(dat_xml({
			span: [{CLASS:'datetime'},v_dtm]
		}),'dtmsec');
	}
};
CAPP.prototype.prn = function(p_arg){
	if(p_arg){
		p_arg.tpl = 'out';
		window.open(this.$url(p_arg),"APP_PRN");
	}
};
CAPP.prototype.fdb = function(p_arg){
	this.dlg({wca:'fdbmng',wci:'s_itm',lnk:escape(this.$url(p_arg))},'APP_FDB');
};
CAPP.prototype.fwd = function(p_arg){
	if(p_arg){
		var v_url = fullURL(this.$url(p_arg));
		this.dlg({wca:'auxmng',wci:'s_itm',lnk:v_url},'APP_FWD');
	}
};
CAPP.prototype.dlg = function(p_arg,p_win){
	if(p_arg){
		p_arg.tpl = 'dlg';
		window.open(this.$url(p_arg),p_win ? p_win : 'APP_DLG',
			"width=640,height=440,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no"
		);
	}
};
CAPP.prototype.win = function(p_url,p_wid,p_hei){
	window.open(p_url,'APP_WIN',
		"location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width=" + p_wid + ",height=" + p_hei
	);
};
CAPP.prototype.gui = function(p_arg){
	if(CMNU && p_arg.iid && p_arg.dat){
		var v_obj = new CMNU({iid:p_arg.iid,cls:p_arg.cls,flg:p_arg.flg}); 
		v_obj.draw({iid:p_arg.iid,dat:p_arg.dat});
	}
};
CAPP.prototype.lng = function(){
	var v_lst = SYS.sys('lng.usr') || [];
	var v_len = v_lst.length;
	if(v_len){
		var v_old = SYS.cki('ETC','lng') || v_lst[0];
		var v_idx = 0;
		for(; v_idx < v_len; v_idx++){
			if(v_old == v_lst[v_idx]){
				v_idx = v_idx < v_len - 1 ? v_idx + 1 : 0;
				var v_new = v_lst[v_idx];
				if(v_old != v_new){
					this.etc('lng',v_new,true);
				}
				break;
			}
		}
	}
};
CAPP.prototype.rol = function(p_arg){
	if(p_arg.iid && p_arg.dat){
		if((p_arg.flg == 1) && CROL){
			var v_len = p_arg.len ? p_arg.len : 80;
			SYS.reg(function(){
				new CROL({iid:p_arg.iid,spd:100,pau:1000,max:v_len,cls:'rol',dat:p_arg.dat}).run();			
			});
		} else {
			SYS.reg(function(){
				SYS.out('<marquee>' + p_arg.dat.join(' >>> ') + '</marquee>',p_arg.iid);
			});
		}
	}
};
CAPP.prototype.etc = function(p_key,p_val){
	if(p_key && p_val){
		SYS.etc(p_key,p_val,true);
	}
};
CAPP.prototype.qry = function(p_fld){
	var v_qry = {};
	for(var v_fld in p_fld){
		var v_obj = getElementById(v_fld);
		if(v_obj){
			var v_val = v_obj.value;
			if(v_val != ''){
				switch(p_fld[v_fld]){
					case 'd':
						v_val = this.fmt(v_val,true);
						break;
				}
				v_qry[v_fld] = v_val;
			}
		}
	}
	SYS.app({qry:null});
	SYS.app({qry:v_qry});
};
CAPP.prototype.cbo = function(p_arg){
	var v_dat = p_arg.dat;
	if(p_arg.flg){
		v_dat.unshift({iid:'',ttl:''});
	}
	var v_ret = cboBox({
		dat: v_dat,
		def: p_arg.def,
		att: p_arg.att
	});
	if(p_arg.flg){
		v_dat.shift();
	}
	return v_ret;
};
CAPP.prototype.img = function(p_img){
	var v_pnl = getElementById('APP_IMG');
	if(!v_pnl){
		SYS.out(dat_xml({
			div: [{
				id: 'APP_IMG',
				onclick: "this.style.display='none'",
				style: 'position:absolute;display:none;border:1px solid;padding:5px;background:white;'
			}]
		}),null,true);
		v_pnl = getElementById('APP_IMG');
	}
	if(v_pnl){
		v_pnl.innerHTML = dat_xml({
			img: {src: p_img.src}
		});
		v_pnl.style.display = 'block';
		var v_bdy = document.body;
		v_pnl.style.left = v_bdy.scrollLeft + (v_bdy.clientWidth - v_pnl.offsetWidth)/2;
		v_pnl.style.top = v_bdy.scrollTop + (v_bdy.clientHeight - v_pnl.offsetHeight)/2;
	}
};
CAPP.prototype.esc = function(){
	if(ECART){
		return new ECART(join('_',SYS.sys('sys'),SYS.sys('sid'),SYS.sys('web'),'ESC'));
	} else {
		return null;
	}
};
CAPP.prototype.fmt = function(p_dtm,p_flg,p_his){
	var v_fmt = SYS.sys('fmt.dtm','d-m-y');
	p_his = p_his ? ' h:i:s' : '';
	if(p_flg){
		return dtm2str(p_dtm,'y-m-d' + p_his,v_fmt);
	} else {
		return dtm2str(p_dtm,v_fmt + p_his,'y-m-d');
	}
};

CAPP.prototype.$url = function(p_arg){
	var v_qry = this.$qry(p_arg);
	return this.get('cgi') + (v_qry ? '?' + v_qry : '');
};

CAPP.prototype.$qry = function(p_arg){
	var v_ret = '';
	for(var v_key in p_arg){
		var v_val = p_arg[v_key];
		if(v_val){
			v_ret += (v_ret ? '&' : '') + escape(v_key) + '=' + escape(v_val);
		}
	}
	return v_ret;
};

CAPP.prototype.all = function(p_arg){
	var v_ret = [];
	var v_cls = p_arg.cls || 'lst';
	var v_sep = p_arg.sep || {hr: {CLASS:'sep'}};
	var v_lst = p_arg.lst || [];
	for(var v_idx in v_lst){
		var v_grp = v_lst[v_idx];
		if(v_ret.length){
			v_ret.push(v_sep);
		}
		v_ret.push({
			div: [{
				CLASS:'grp',
				style: "cursor:pointer;",
				onclick : v_grp.lnk,
				onmouseout: "this.className='grp'",
				onmouseover: "this.className='grp hit'"
			},v_grp.ttl]
		},this.itm(v_grp.itm),this.rel(v_grp.rel));
	}
	if(v_ret.length){
		v_ret = {
			div: [{
				CLASS: v_cls
			},v_ret]
		};
	}
	return v_ret;
};

CAPP.prototype.lst = function(p_arg,p_flg){
	var v_ret = [];
	var v_cls = p_arg.cls || 'lst';
	var v_sep = p_arg.sep || {hr: {CLASS:'sep'}};
	var v_alg = p_arg.alg || 'left';
	var v_wid = p_arg.wid || '120';
	var v_hei = p_arg.hei;
	var v_lst = p_arg.lst || [];
	for(var v_idx in v_lst){
		if(v_ret.length){
			v_ret.push(v_sep);
		}
		var v_itm = v_lst[v_idx];
		v_itm.alg = v_alg;
		v_itm.wid = v_wid;
		v_itm.hei = v_hei;
		v_ret.push(this.itm(v_itm));
	}
	if(v_ret.length && p_flg){
		v_ret = {
			div: [{
				CLASS: v_cls
			},v_ret]
		};
	}
	return v_ret;
};

CAPP.prototype.itm = function(p_arg,p_flg){
	var v_ret = null;
	if(p_arg.ttl){
		var v_cls = p_arg.cls || 'itm';
		v_ret = [];
		if(p_arg.lnk){
			v_ret.push({
				div : [{
					CLASS: 'ttl',
					style: "cursor:pointer;",
					onclick : p_arg.lnk,
					onmouseout: "this.className='ttl'",
					onmouseover: "this.className='ttl hit'"
				}, p_arg.ttl]
			});
		} else {
			v_ret.push({
				div : [{
					CLASS: 'ttl'
				}, p_arg.ttl]
			});
		}
		if(p_arg.dtm){
			v_ret.push({
				div: [{
					CLASS: 'dtm'
				}, p_arg.dtm]
			});
		}
		if(p_arg.abs){
			var v_img = null;
			if(p_arg.img){
				var v_des = p_arg.des ? {div: [{CLASS:'des'},p_arg.des]} : null;
				v_img = {
					div: [{
						CLASS: 'img'
					},{
						table: [{
							border: 0,
							width: '1%'
						},{
							tr: [null,{
								td: [null,{
									img: {
										CLASS: 'img',
										src: p_arg.img,
										width: p_arg.wid,
										height: p_arg.hei
									}
								},v_des]
							}]
						}]
					}]
				}
			}
			v_ret.push({
				div: [{
					CLASS: 'abs'
				},v_img,p_arg.abs]
			});
		}
		if(p_arg.cnt){
			v_ret.push({
				div: [{
					CLASS: 'cnt'
				}, p_arg.cnt]
			});
		}
		if(p_flg){
			v_ret = {div: [{CLASS: v_cls}, v_ret]};
		}
	}
	return v_ret;
};

CAPP.prototype.rel = function(p_arg){
	var v_ret = this.uls(p_arg);
	if(v_ret){
		v_ret = {
			div: [{
				CLASS: p_arg.cls || 'rel'
			},!p_arg.ttl ? null : {
				div: [{
					CLASS: 'ttl',
					onclick: p_arg.lnk,
					style: p_arg.lnk ? 'cursor:pointer' : null,
					onmouseout: p_arg.lnk ? "this.className='ttl'" : null,
					onmouseover: p_arg.lnk ? "this.className='ttl hit'" : null
				},p_arg.ttl]
			},v_ret]
		};
	}
	return v_ret;
};

CAPP.prototype.uls = function(p_arg){
	var v_ret = null;
	var v_lst = p_arg.lst || [];
	if(v_lst && v_lst.length){
		v_ret = [];
		for(var v_idx in v_lst){
			v_itm = v_lst[v_idx];
			if(v_itm.lnk){
				v_ret.push({
					li: [{
						CLASS: 'itm',
						title: v_itm.abs,
						onclick: v_itm.lnk,
						style: 'cursor:pointer',
						onmouseout: "this.className='itm'",
						onmouseover: "this.className='itm hit'"
					},v_itm.ttl]
				});
			} else {
				v_ret.push({
					li: [{
						CLASS: 'itm',
						title: v_itm.abs
					},v_itm.ttl]
				});
			}
		}
		v_ret = {
			ul: [{
				CLASS: p_arg.cls
			}, v_ret]
		};
	}
	return v_ret;
};

CAPP.prototype.vot = function(p_iid,p_flg){
	var v_arg = {wca:'votmng',wci:'v_itm',wce:'dtl',iid:p_iid};
	if(p_flg && !SYS.cki('VOT',p_iid)){
		var v_obj = getElementById('APP_FRM');
		if(v_obj){
			var v_col = v_obj.elements('vot_' + p_iid);
			for(var v_idx = 0; v_idx < v_col.length; v_idx++){
				v_obj = v_col.item(v_idx);
				if(v_obj.checked){
					v_arg.opt = v_obj.value;
					var v_cki = {};
					v_cki[p_iid] = 1;
					SYS.cki('VOT',v_cki);
					break;
				}
			}
		}
	}
	this.dlg(v_arg,'APP_VOT');
};

CAPP.prototype.out = function(p_arg){
	var v_out = null;
	switch(p_arg.toc){
		case 'btn':
			v_out = $btn(p_arg);
			break;
		case 'itm':
			v_out = $itm(p_arg.dat);
			break;
		case 'tbl':
			v_out = $tbl(p_arg);
			break;
		case 'mix':
			v_out = $mix(p_arg);
			break;
		case 'lst':
		default:
			v_out = $lst(p_arg);
	}
	if(v_out){
		v_out = dat_xml({div: [{CLASS: p_arg.cls},v_out]});
		if(p_arg.elm){
			var v_elm = getElementById(p_arg.elm);
			if(v_elm){
				v_elm.innerHTML = v_out;
			}
		} else {
			document.write(v_out);
		}
	}
	/*---*/
	function $btn(p_arg){
		return !p_arg ? null : {
			button: [{
				title: p_arg.tip,
				onclick: p_arg.lnk
			},!p_arg.ico ? null : {
				img: {src: p_arg.ico,align:'absbottom'}	
			},p_arg.ttl]
		}
	}
	function $lst(p_dat){
		var v_out = [];
		var v_dat = p_arg.dat || [];
		var v_flg = p_arg.flg || 0;
		for(var v_idx in v_dat){
			var v_itm = v_dat[v_idx];
			var v_ttl = v_flg & 1 ? v_itm.abs : v_itm.ttl;
			var v_tip = v_flg & 1 ? null : v_itm.abs;
			var v_dtm = APP.fmt(v_itm.dtm,false);
			v_out.push({
				li: [{
					title: (v_tip || '').replace(/<[^>]*>/g,''),
					onclick: v_itm.lnk,
					onmouseover: "this.className='hover'",
					onmouseout: "this.className=''"
				},v_ttl,v_dtm ? ' (' + v_dtm + ')' : '']
			});
		}
		if(v_out.length){
			return {ul: [null,v_out]};	
		} else {
			return null;
		}
	}
	function $mix(p_arg){
		var v_out = [];
		var v_dat = p_arg.dat || [];
		var v_flg = p_arg.flg || 5;
		for(var v_idx in v_dat){
			var v_itm = v_dat[v_idx];
			var v_txt,v_img;
			var v_tip = (v_itm.abs || '').replace(/<[^>]*>/g,'');
			if(v_flg & 3){
				var v_ttl = v_flg & 1 ? {div:[{CLASS:'title'},v_itm.ttl]} : null;
				var v_abs = v_flg & 2 ? {div:[{CLASS:'brief'},v_itm.abs]} : null;
				v_txt = {
					div: [{
						CLASS: 'text'
					},v_ttl,v_abs]
				};
				v_tip = null;
			}
			if(v_flg & 4){
				v_img = {
					div: [{
						CLASS: 'image'
					},{
						img: {src: v_itm.img || '/_ico/ico_spacer.gif'}
					}]
				}; 
			}
			if(v_img || v_txt){
				if(v_out.length){
					v_out.push({
						div: [{CLASS:'spacer'},'']
					});
				}
				v_out.push({
					div: [{
						CLASS: 'entry',
						title: v_tip,
						onclick: v_itm.lnk,
						onmouseover: "this.className='entry hover'",
						onmouseout: "this.className='entry'"
					},v_img,v_txt]
				});
			}
		}
		return v_out.length ? v_out : null;
	}
	function $tbl(p_arg){
		var v_out = [];
		var v_flg = p_arg.flg || 5;
		var v_col = p_arg.col || 4;
		var v_wid = 100/v_col + '%';
		var v_dat = p_arg.dat || [];
		var v_len = v_dat.length;
		var v_idx = 0;
		while(v_idx < v_len){
			var v_img = [];
			var v_txt = [];
			var v_jdx = 0;
			for(; v_jdx < v_col && v_idx < v_len; v_jdx++, v_idx++){
				var v_itm = v_dat[v_idx];
				v_img.push({
					td: [{
						CLASS: v_itm.lnk ? 'image link' : 'image',
						align: 'center',
						valign: 'middle',
						width: v_wid,
						title: (v_itm.abs || '').replace(/<[^>]*>/g,''),
						onclick: v_itm.lnk
					},{
						img: {
							CLASS: 'thumb',
							src: v_itm.img || '/_ico/ico_spacer.gif'
						}
					}]
				});
				v_txt.push({
					td: [{
						CLASS: v_itm.lnk ? 'title link' : 'title',
						align: 'center',
						valign: 'top',
						title: (v_itm.abs || '').replace(/<[^>]*>/g,''),
						onclick: v_itm.lnk
					},v_itm.ttl]
				});
			}
			for(; v_jdx < v_col; v_jdx++){
				v_img.push({
					td: [{width: v_wid},'&nbsp;']
				});
				v_txt.push({
					td: [null,'&nbsp;']
				});
			}
			v_out.push([{tr: [null,v_img]},{tr: [null,v_txt]}]);
		}
		return v_out.length ? {table: [{CLASS:'layout'},v_out]} : null;
	}
	function $itm(p_arg){
		var v_ret = [];
		if(p_arg.lnk){
			v_ret.push({
				div : [{
					CLASS: 'title',
					onclick : p_arg.lnk,
					onmouseout: "this.className='title'",
					onmouseover: "this.className='title hover'"
				}, p_arg.ttl]
			});
		} else {
			v_ret.push({
				div : [{
					CLASS: 'title'
				}, p_arg.ttl]
			});
		}
		if(p_arg.dtm){
			v_ret.push({
				div: [{
					CLASS: 'date'
				}, p_arg.dtm]
			});
		}
		if(p_arg.abs){
			var v_img = null;
			if(p_arg.img){
				var v_des = p_arg.des ? {div: [{CLASS:'des'},p_arg.des]} : null;
				v_img = {
					div: [{
						CLASS: 'img'
					},{
						table: [{
							border: 0,
							width: '1%'
						},{
							tr: [null,{
								td: [null,{
									img: {
										CLASS: 'img',
										src: p_arg.img,
										width: p_arg.wid,
										height: p_arg.hei
									}
								},v_des]
							}]
						}]
					}]
				}
			}
			v_ret.push({
				div: [{
					CLASS: 'abs'
				},v_img,p_arg.abs]
			});
		}
		if(p_arg.cnt){
			v_ret.push({
				div: [{
					CLASS: 'cnt'
				}, p_arg.cnt]
			});
		}
		return v_ret;
	}
}
