function TextEditor(ta){
	this.ta=ta;

	this.addurl=function(){
		var u=prompt("Pls enter the url:", 'http://');
		if(u=='' || u==null) return 0;
		var t=prompt("pls enter the link text:", 'Link');
		if(t!='' && t!=null) this.insertstr("[url="+u+"]"+t+"[/url]");
	}
	this.addimg=function(){
		var u=prompt("Pls enter the url:", 'http://');
		if(u=='' || u==null) return 0;
		this.insertstr("[img]"+u+"[/img]");
	}
	this.addtag=function(t){
		var l, r;
		l='['+t;
		r='[/'+t+']';
		if(arguments[1])l+="="+arguments[1]
		l+=']';
		this.insertstr(l, r);
	}

	this.matchnum=function(exp, st){
		var reg=new RegExp(exp, 'gi');
		var r=st.match(reg);
		return (r && r.length) ? r.length : 0;
	}

	this.closealltag=function(){
		var c=this.ta.value;
		var a=['u', 'i', 'b', 'font=(?:\\w*?)', 'size=(?:\\w*?)', 'color=(?:\\w*?)'];
		var endt, d, d1;

		for(var i in a){
			endt=a[i].split('=', 2);
			d=matchnum('\\['+a[i]+'\\]', c)-matchnum('\\[/'+endt[0]+'\\]', c);
			if(d>0){
				for(d1=d; d1>0; d1--)c+='[/'+endt[0]+']';
			}
		}
		this.ta.value=c;
		this.insertstr('');
	}

	this.insertstr=function(str){
		this.ta.focus();
		var str1='';
		if(arguments[1])str1=arguments[1];
		if(document.selection){
			var range=document.selection.createRange();
			range.text=str+str1;
			if(str1){
				range.moveStart('character', -str1.length);
				range.moveEnd('character', -str1.length);
			}
			range.select();
		}
		else if(this.ta.selectionStart!=null){
			var sstart=this.ta.selectionStart;
			this.ta.value=this.ta.value.substr(0, this.ta.selectionStart)+str+str1+this.ta.value.substr(this.ta.selectionEnd);
			this.ta.selectionStart=this.ta.selectionEnd=sstart+str.length;

		}
		else{
			this.ta.value+=str+str1;
		}
	}
}

function DropMenu(box, link, menu){
	this.box=box;
	this.link=link;
	this.menu=menu;

	this.postshowhide=function(){}

	this.showhide=function(){
		var offset=getoffset(this.box);
		this.menu.style.left=offset[0];
		this.menu.style.top=offset[3];
		this.menu.sh=(arguments[0]!==undefined ? arguments[0] : (this.menu.sh ? 0 : 1));
		showhide(this.menu, this.menu.sh);
		this.postshowhide();
	}

}
function DropMenu_create(vname, box, link, menu){
	menu=document.getElementById(menu);
	menu.style.visibility='hidden';
	menu.style.display='none';
	menu.style.zIndex=3;
	menu.style.position='absolute';
	box=document.getElementById(box);
	link=document.getElementById(link);

	eval(vname+"=new DropMenu(box, link, menu);");
	eval("link.onclick=function(){ this.focus();}");
	eval("link.href='javascript:"+vname+".showhide();';");
	eval("link.onblur=function(){ if(!"+vname+".menu.mouseon)"+vname+".showhide(0);}");
	menu.onmouseover=function(){this.mouseon=1;}
	menu.onmouseout=function(){this.mouseon=0;}
	eval("menu.onclick=function(){"+vname+".link.focus();}");

}

function Menupair(button, dropdown){
	var bname=button, dname=dropdown;
	var position={'left':'button.left', 'top':'button.bottom'};
	if(arguments[2] && arguments[2].posleft) position.left=arguments[2].posleft;
	if(arguments[2] && arguments[2].postop) position.top=arguments[2].postop;

	if(!(button && dropdown && (button=document.getElementById(button)) && (dropdown=document.getElementById(dropdown)))) return;
	this.dropdown=dropdown;
	this.button=button;
	dropdown.mp_button=button;
	button.mp_name=bname;
	dropdown.mp_name=dname;
	button.mp_dropdown=dropdown;
	var o={position:'absolute', 'z-index':300, 'visibility':'hidden', 'display':'none'};
	for(var i in o) dropdown.style[i]=o[i];

	dropdown.movero=dropdown.onmouseover;
	dropdown.onmouseover=function(){
		if(this.movero)this.movero();
		this.mover=1;
		this.showhide();

	}
	dropdown.mouto=dropdown.onmouseout;
	dropdown.onmouseout=function(){
		if(this.mouto)this.mouto();
		this.mover=0;
		setTimeout("document.getElementById('"+this.mp_name+"').showhide();", 100);

	}

	dropdown.posleft=position.left;
	dropdown.postop=position.top;
	dropdown.showhide=function(){
		showhide(this, this.mover || this.mp_button.mover);
		var button=getoffset(this.mp_button);
		var menu=getoffset(this.mp_button);

		eval('this.style.left='+this.posleft+';');
		eval('this.style.top='+this.postop+';');

	}
	button.movero=button.onmouseover;
	button.onmouseover=function(){
		if(this.movero)this.movero();
		this.mover=1;
		this.style.cursor='pointer';

		this.mp_dropdown.showhide();
	}

	button.mouto=button.onmouseout;
	button.onmouseout=function(){
		if(this.mouto)this.mouto();
		this.mover=0;
		this.style.cursor='default';

		setTimeout("document.getElementById('"+this.mp_dropdown.mp_name+"').showhide();", 100);
	}

}
function SortTb(obj){
	this.tb=obj;
	this.rows=[];
	this.vname='tsobj';
	this.rowoffset=1;
	this.getcmptxt=function (o){
		if(o.comparetxt)return o.comparetxt;
		var a=o.getAttribute('comparetxt');
		if(a!==null && a!==undefined) return o.comparetxt=a;
		else o.comparetxt=o.innerHTML.replace(/<.*?>/g, '');
		return o.comparetxt;
	}
	this.docompare=function (a, b){
		var st=a.sortobj;
		var ca, cb;
		if(st.headcol.getcmptxt){
			ca=st.headcol.getcmptxt(a.cells[st.colindex]);
			cb=st.headcol.getcmptxt(b.cells[st.colindex]);
		}
		else{
			ca=st.getcmptxt(a.cells[st.colindex]);
			cb=st.getcmptxt(b.cells[st.colindex]);
		}
		return ca>cb ? 1 : (ca<cb ? -1 : 0);
	}
	this.dosort=function (o){

		if(this.headcol.arrowspan) this.headcol.arrowspan.innerHTML='';
		for(var i=0; o && o.previousSibling && (o.tagName==o.previousSibling.tagName); i++, o=o.previousSibling);
		this.setcolindex(i);
		if(!this.rows || !this.rows.length){
			for(i=this.rowoffset;i<this.tb.rows.length;i++) this.rows[i-this.rowoffset]=this.tb.rows[i];
		}
		for(i=0;i<this.rows.length;i++) this.rows[i].sortobj=this;
		this.rows.sort(this.docompare);
		if(this.headcol.sdir=='u')this.rows.reverse();
		for(i=0;i<this.rows.length;i++){
			this.tb.rows[0].parentNode.appendChild(this.rows[i]);
		}
		if(!this.headcol.arrowspan){
			var e=document.createElement('span');
			this.headcol.appendChild(e);
			this.headcol.arrowspan=e;
		}
		if(this.headcol.sdir!='u') this.headcol.sdir='u';
		else this.headcol.sdir='d';
		this.headcol.arrowspan.innerHTML='&nbsp;&'+this.headcol.sdir+'arr;';
	}
	this.setcolindex=function (i){
		this.colindex=i;
		this.headcol=this.tb.rows[0].cells[i];
	}
	this.setcolindex(0);
	for(i=0;i<this.tb.rows[0].cells.length;i++){
		this.tb.rows[0].cells[i].style.cursor='pointer';
	}
}
function SortTb_create(vname, obj){
	eval(vname+'=new SortTb(obj);'+vname+'.vname=vname;');
	for(i=0;i<obj.rows[0].cells.length;i++){
		eval('obj.rows[0].cells[i].onclick=function(){'+vname+'.dosort(this);}');
	}
}


function ActSelect(select, act, opt){

	this.loadOptions1=function(ops){
		var o=this.select.options;
		for(var i=o.length; i>0; i--)o[i]=null;
		if(ops!=null)addOptions(this.select, ops);
		else {
			if(this.predecessor==null) addOptions(this.select, this.opt);
			else {
				var v=this.predecessor.select.value;
				if(v!='') addOptions(this.select, this.opt[v]);
			}
		}
		this.selectChanged();
	}
	this.loadOptions=function(ops){this.loadOptions1(ops);}

	this.setSelect1=function(v){
		setSelect(this.select, v);
		this.selectChanged();
	}
	this.setSelect=function(v){this.setSelect1(v);}

	this.refreshSelect1=function(id, name){
		var a=this.select.value;
		refreshSelect(this.select, id, name);
		if(this.select.value!=a) this.selectChanged();
	}
	this.refreshSelect=function(id, name){this.refreshSelect1(id, name);}

	this.editSelect1=function(){
		if(this.act==null) return;
		var v=this.select.value, a=this.act.value;
		var rv;

		switch(a){
			case 'new':
				var extra=this.predecessor==null ? '' : "&"+this.predecessor.select.name+"="+this.predecessor.select.value;
				rv=showModalDialog('?w=modal&act=form&o='+this.select.name+extra, window,'status:0;resizable:1;');
				break;
			case 'edit':
				rv=showModalDialog('?w=modal&act=form&o='+this.select.name+'&id='+v,window,'status:0;resizable:1;');
				break;
			case 'delete':
				if(confirm("Are you sure to delete \""+this.select.options[this.select.selectedIndex].text+"\" ?")) rv=showModalDialog('?w=modal&act=delete&id='+v+'&o='+this.select.name,window,'status:0;resizable:1;dialogWidth:250px;dialogHeight:150px;');
				break;
			default:
				return;
		}
		if(rv!=null) {
			this.modalvalue=rv;
			this.selectEdited(rv);
		}
		this.act.selectedIndex=0;
		this.act.blur();
	}
	this.editSelect=function(){this.editSelect1();}

	this.selectEdited1=function(obj){
		if(this.act==null)return;
		var i=this.select.value, iname=this.select.options[this.select.selectedIndex].text, j=this.act.value;
		if(this.loadframe!='')document.frames(this.loadframe).history.go(0);
		var opt;
		if(this.predecessor==null) opt=this.opt;
		else{
			if(this.opt[this.predecessor.select.value]==null) this.opt[this.predecessor.select.value]=new Array();
			opt=this.opt[this.predecessor.select.value];
		}

		if(j=='delete'){
			var k=keySearch(opt, i);
			if(k>=0)opt.splice(k, 2);
			this.select.options[this.select.selectedIndex]=null;
		}
		else{
			if(obj.id==null)return;

			if(j=='new')opt.push(obj.id, obj.name);
			else if(obj.name!=iname){
				var k=keySearch(opt, i);
				if(k>=0)opt[k+1]=obj.name;
			}
			this.refreshSelect(obj.id, obj.name);
		}
		if(i!=this.select.value)this.selectChanged();
	}
	this.selectEdited=function(obj){this.selectEdited1(obj);}

	this.refreshAct1=function(){
		if(this.act==null)return;
		var o=this.act.options, i=this.select.selectedIndex;
		if(this.select.value==''){
			o[3]=null;
			o[2]=null;
		}
		else{
			if(o[2]==null)o[2]=new Option('Edit', 'edit');
			if(o[3]==null)o[3]=new Option('Delete', 'delete');
		}
		if(this.predecessor!=null){
			if(this.predecessor.select.value=='')this.act.options[1]=null;
			else if(this.act.options[1]==null)this.act.options[1]=new Option('New', 'new');
		}
	}
	this.refreshAct=function(){this.refreshAct1();}

	this.selectChanged1=function(){
		this.preChange();
		this.refreshAct();
		if(this.successor!=null) this.successor.loadOptions();
		this.postChange();
	}
	this.selectChanged=function(){this.selectChanged1();}

	this.preChange=function(){};
	this.postChange=function(){};

	this.select=select;
	this.act=act;
	this.opt=opt;
	this.predecessor=null;
	this.successor=null;
	this.vname='';
	this.handler='general.php';
	this.loadframe='';
	if(this.act!=null){
		this.act.options[0]=new Option('(Action)', '');
		this.act.options[1]=new Option('New', 'new');
	}
	if(this.select.options.length<1)this.select.options[0]=new Option('', '');
	this.modalvalue=null;
}
function ActSelect_create(vn, select, act, opt){
	eval(vn+'=new ActSelect(select, act, opt);'+vn+'.vname=vn;');
	eval("select.onchange=function(){"+vn+'.selectChanged();}');
	if(act!=null)eval("act.onchange=function(){"+vn+'.editSelect();}');
	if(arguments[4]!=null) eval(vn+".handler=arguments[4];");
}
function ActSelect_link(pre, suc){
	pre.successor=suc;
	suc.predecessor=pre;
}
loopcount=0;
function ActionSelect(select, act, dt){
	this.dt=dt;
	this.select=select;
	this.act=act;
	this.predecessor=null;
	this.successor=[];
	this.loadframe='';
	this.linkextra='';

	this.optionmargin=this.select.options.length;
	this.o=this.select.name;

	this.optiontxt=function(key){
		return this.dt[key].name;
	}
	this.addoption=function(key){
		var a=[], select=this.select, i;
		if(!key){
			for(i in this.dt){
				if(!(this.dt[i].parent>0)) a.push(i);
			}
		}
		else{
			if(this.dt[key].child==null){
				this.dt[key].child=[];
				for(i in this.dt){
					if(this.dt[i].parent==key) this.dt[key].child.push(i);
				}
			}
			a=this.dt[key].child;
		}
		for(i=0;i<a.length;i++){
			select.options[select.options.length]=new Option(this.optiontxt(a[i]), this.dt[a[i]].id);
		}
	}
	this.loadoption=function(){
		var o=this.select.options;
		for(var i=o.length-1; i>=this.optionmargin; i--)o[i]=null;
		if(this.predecessor==null) this.addoption(arguments[0]);
		else {
			var v=this.predecessor.select.value;
			if(v!='') this.addoption(v);
		}
		this.selectchanged();
	}
	this.setselect=function(v){
		setSelect(this.select, v);
		this.selectchanged();
	}

	this.setvalue=function(v){
		if(!(loopcount>0)) loopcount=1;
		if(loopcount++>50000) {alert(this.select.name+''+loopcount);  return;}
		if(v && this.predecessor && this.dt[v] &&  (p=this.dt[v].parent)) this.predecessor.setvalue(p);
		this.setselect(v);
	}
	this.refreshselect=function(id, name){
		var a=this.select.value;
		refreshSelect(this.select, id, name);
		if(this.select.value!=a) this.selectchanged();
	}
	this.editlink=function(a, v){
		switch(a){
			case 'new':
				var extra=this.predecessor==null ? '' : "&parent="+this.predecessor.select.value;
				return '?w=modal'+this.linkextra+'&act=getform&parentfixed=1&o='+this.o+extra;
			case 'edit':
				return '?w=modal'+this.linkextra+'&act=getform&parentfixed=1&o='+this.o+'&id='+v;
			case 'delete':
				return '?w=modal'+this.linkextra+'&act=tbdelete&id='+v+'&o='+this.o;
		}
	}
	this.editselect=function(){
		if(!this.act) return;
		var v=this.select.value, a=this.act.value;
		var rv;

		var link=this.editlink(a, v);
		if(!link)return;
		if(a=='delete'){
			if(confirm("Are you sure to delete \""+this.select.options[this.select.selectedIndex].text+"\" ?")) rv=showModalDialog(link,window,'status:0;resizable:1;dialogWidth:250px;dialogHeight:150px;');
		}
		else rv=showModalDialog(link, window,'status:0;resizable:1;');
		if(rv!=null) {
			this.modalvalue=rv;
			this.selectedited(rv);
		}
		this.act.selectedIndex=0;
		this.act.blur();
	}
	this.selectedited=function(obj){
		if(!this.act)return;
		var i=this.select.value, iname='', j=this.act.value;
		if(this.select.options && this.select.options.length>0 &&  this.select.options[this.select.selectedIndex])iname=this.select.options[this.select.selectedIndex].text;

		if(this.loadframe!='')document.frames(this.loadframe).history.go(0);

		if(j!='edit' && i && this.dt && this.dt[i] && (p=this.dt[i].parent) && this.dt[p]){
	 		this.dt[p].child=null;
		}
		if(j=='delete'){
			delete(this.dt[i]);
			this.loadoption();
		}
		else{
			if(obj.id==null)return;
			if(!this.dt[i])this.dt[i]={};
			if(j=='new') {
				if(this.predecessor && !obj.parent) obj.parent=this.predecessor.select.value;
				this.dt[obj.id]=obj;
			}
			else if(obj.name!=iname){
				this.dt[i].name=obj.name;
			}
			this.refreshselect(obj.id, obj.name);
		}
		if(i!=this.select.value)	this.selectchanged();
	}
	this.refreshact=function(){
		if(!this.act)return;
		var o=this.act.options, i=this.select.selectedIndex;
		if(this.select.value==''){
			o[3]=null;
			o[2]=null;
		}
		else{
			if(o[2]==null)o[2]=new Option('Edit', 'edit');
			if(o[3]==null)o[3]=new Option('Delete', 'delete');
		}
		if(this.predecessor!=null){
			if(this.predecessor.select.value=='')this.act.options[1]=null;
			else if(this.act.options[1]==null)this.act.options[1]=new Option('New', 'new');
		}
	}
	this.selectchanged1=function(){
		this.refreshact();
		if(this.successor){
			for(var i=0;i<this.successor.length;i++) this.successor[i].loadoption();
		}
	}
	this.selectchanged=function(){this.selectchanged1();}

	if(this.act){
		this.act.options[0]=new Option('(Action)', '');
		this.act.options[1]=new Option('New', 'new');
	}
}
function ActionSelect_create(vn, select, act, dt){
	if(!select)return;
	eval(vn+'=new ActionSelect(select, act, dt);'+vn+'.vname=vn;');
	eval("select.onchange=function(){"+vn+'.selectchanged();}');
	if(act!=null)eval("act.onchange=function(){"+vn+'.editselect();}');
}
function ActionSelect_link(pre, suc){
	pre.successor.push(suc);
	suc.predecessor=pre;
}
function ActionSelect_createchain(par, dt){
	for(var i=0;i<par.length;i++){
		ActionSelect_create(par[i].vname, par[i].select, par[i].act, dt);
		if(i==0 && par[i].loadoption!=null) eval(par[i].vname+'.loadoption(par[i].loadoption);');
		if(i>0) eval('ActionSelect_link('+par[i-1].vname+', '+par[i].vname+');');
		if(par[i].setselect) eval(par[i].vname+'.setselect(par[i].setselect);');
	}
	if((i=par.length-1) && par[i].setvalue) eval(par[i].vname+'.setvalue(par[i].setvalue);');
}

function SetallTb(obj){
	this.tb=obj;
	this.rows=[];
	this.vname='tsobj';
	this.rowoffset=1;

	this.doset=function(o){
		var i,i2;
		var v=prompt('please input the value the this column', '');
		if(v===null)return;
		for(var i=0; o && o.previousSibling && (o.tagName==o.previousSibling.tagName); i++, o=o.previousSibling);
		this.setcolindex(i);
		if(!this.rows || !this.rows.length){
			for(i=this.rowoffset;i<this.tb.rows.length;i++) this.rows[i-this.rowoffset]=this.tb.rows[i];
		}
		for(i=0;i<this.rows.length;i++) {
			var e=this.rows[i].cells[this.colindex];
			if(!(e && (e=e.getElementsByTagName('input'))))continue;
			if(!e)continue;
			for(i2=0;i2<e.length;i2++){
				if(e[i2].getAttribute('type')=='text') e[i2].value=v;
			}
		}
	}
	this.setcolindex=function (i){
		this.colindex=i;
		this.headcol=this.tb.rows[0].cells[i];
	}
	this.setcolindex(0);
	for(i=0;i<this.tb.rows[0].cells.length;i++){
		this.tb.rows[0].cells[i].style.cursor='pointer';
	}
}
function SetallTb_create(vname, obj){
	eval(vname+'=new SetallTb(obj);'+vname+'.vname=vname;');
	for(i=0;i<obj.rows[0].cells.length;i++){
		eval('obj.rows[0].cells[i].onclick=function(){'+vname+'.doset(this);}');
	}
}

function SetallTr(obj){
	this.tb=obj;
	this.rows=[];
	this.vname='trsobj';
	this.rowoffset=1;

	this.doset=function(o){
		var i,i2;
		var v=prompt('please input the value the this row', '');
		if(v===null || v===undefined)return;

		for(o=o.nextSibling;o;o=o.nextSibling){
			var e=o;
			if(!(e && (e=e.getElementsByTagName('input'))))continue;
			if(!e)continue;
			for(i2=0;i2<e.length;i2++){
				if(e[i2].getAttribute('type')=='text') e[i2].value=v;
			}
		}
	}
	for(i=this.rowoffset;i<this.tb.rows.length;i++){
		this.tb.rows[i].cells[0].style.cursor='pointer';
	}
}
function SetallTr_create(vname, obj){
	eval(vname+'=new SetallTr(obj);'+vname+'.vname=vname;');
	for(i=1;i<obj.rows.length;i++){
		eval('obj.rows[i].cells[0].onclick=function(){'+vname+'.doset(this);}');
	}
}


function CodeEditor(t){
	this.t=t;
	this.t.onkeydown=function(){
		return this.tae.keyed(window.event);
	}

	this.keyed=function(e){
	//alert(e.keyCode);
		this.t.focus();
		if(e.keyCode==9){
			var s=this.getselection();
			if(s!=='')s=this.getselection(1);
			if(e.shiftKey==1){
				this.insertstr(s.replace(/(^|\n)\t/g,"$1"),s!=='');
			}
			else {
				this.insertstr(s.replace(/(^|\n)/g,"$1\t"),s!=='');
			}
			e.returnValue=false;
			return false;
		}
		else if(e.keyCode==13){
			var tab=this.lasttabs();
			if(tab){
				this.insertstr("\n"+tab);
				e.returnValue=false;
				return false;
			}
		}

	}


	this.insertstr=function(str){
		if(document.selection){
			var range=document.selection.createRange();
			var on=range.text.length;
			range.text=str;

			if(arguments[1]){
				range.moveStart('character',-this.strlenadjusted(str));
			}

			range.select();
		}
	}

	this.strlenadjusted=function(str){
		var a=str.split(/\r/);
		return str.length-a.length+1;
	}


	this.getprevstr=function(){
			var range=document.selection.createRange();
			var range1=range.duplicate();
			range1.moveToElementText(this.t);
			range1.setEndPoint('EndToStart',range);
			return range1.text;
	}
	this.getselection=function(){
		if(document.selection){
			var range=document.selection.createRange();
			if(arguments[0]){
//				var s=this.getprevstr();
//				if((s.length+range.text.length)==this.t.value.length){
//					nn=s.lastIndexOf("\n");
//					s=s.substring(nn+1,s.length);
//					range.moveStart('character',-this.strlenadjusted(s));
//					range.select();
//				}
			}
			return range.text;
		}
	}
	this.lasttabs=function(){
		if(document.selection){
			var range=document.selection.createRange();
			var range1=range.duplicate();
			range1.moveStart('character',-500);
			return this.gettab(range1.text);
		}

	}

	this.gettab=function(str){
		var m=str.match(/(?:^|\n)(\t*)[^\n]*$/);
		return m[1] ? m[1] : '';
	}
	this.t.value=this.t.value.replace(/\r/g,'');
}
function CodeEditor_create(vname,t){
	eval(vname+"=new CodeEditor(t);");
	eval("t.tae="+vname+";");
	eval(vname+".vname=vname;");
}



function CodeEditor2(t){
	this.t=t;
	this.t.onkeydown=function(){
		if(window.event) return this.tae.keyed(window.event);
	}
	this.t.onkeypress=function(e){
		if(e)return this.tae.keyed(e);
	}


	this.keyed=function(e){
	//alert(e.keyCode);
		this.t.focus();
		if(e.keyCode==9){
			var s=this.getselection();
			if(s!==''){
				this.setselection(this.t.selectionStart,this.t.selectionEnd,1);
				s=this.getselection();
			}
			if(e.shiftKey==1){
				this.insertstr(s.replace(/(^|\n)\t/g,"$1"),s!=='');
			}
			else {
				this.insertstr(s.replace(/(^|\n)/g,"$1\t"),s!=='');
			}

			this.cursorfocus();
			e.returnValue=false;
			return false;
		}
		else if(e.keyCode==13){
			var tab=this.lasttabs();
			if(tab){
				this.insertstr("\n"+tab);
				this.cursorfocus();
				e.returnValue=false;
				return false;
			}
		}

	}

	this.cursorfocus=function(){
		var n=this.nextlines();

		var n1=3;
		if(n1>n)n1=n;
		if(!(n1>0))n1=0;
		this.presskey(37,0);
		this.presskey(39,0);
		for(var i=0;i<n;i++)this.presskey(40,0);
		for(var i=0;i<n;i++)this.presskey(38,0);
		this.t.focus();
		this.t.selectionStart=this.sstart;
		this.t.selectionEnd=this.send;

	}
	this.presskey=function(keycode,ch){
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
		var e=document.createEvent('KeyEvents');
		var c=ch ? ch.charCodeAt(0) : 0;
		e.initKeyEvent('keypress',true,true,null,false,false,false,false,keycode,c);
		this.t.dispatchEvent(e);

	}

	this.insertstr=function(str){
		if(document.selection){
			var range=document.selection.createRange();
			range.text=str;
			range.select();
		}
		else if(this.t.selectionStart!=null){
			var start=this.t.selectionStart,end=this.t.selectionEnd;
			this.t.value=this.t.value.substr(0, this.t.selectionStart)+str+this.t.value.substr(this.t.selectionEnd);
			if(!arguments[1]){
				this.setselection(start+str.length,start+str.length);
			}
			else{
				this.setselection(start,start+str.length);
			}
		}
	}

	this.setselection=function(start,end){
		if(arguments[2]){
			var ss=this.t.value.substring(0,this.t.selectionStart);
			var li=ss.lastIndexOf("\n");
			if(li>=0){
				start=li+1;
			}
		}
		this.sstart=this.t.selectionStart=start;
		this.send=this.t.selectionEnd=end;
	}
	this.getselection=function(){
		if(document.selection){
			var range=document.selection.createRange();
			return range.text;
		}
		else if(this.t.selectionStart1!==null){
			if(!(this.t.selectionStart<this.t.selectionEnd)) return '';
			var r=this.t.value.substring(this.t.selectionStart,this.t.selectionEnd);
			if(!(r && r.length))r='';
			return r;
		}
	}
	this.lasttabs=function(){
		if(document.selection){
			var range=document.selection.createRange();
			var range1=range.duplicate();
			rang1.moveStart('character',-500);
			return this.gettab(range1.text);
		}
		else if(this.t.selectionStart!=null){
			var n=this.t.selectionStart-500;
			if(!(n>0))n=0;
			return this.gettab(this.t.value.substring(n,this.t.selectionStart));
		}

	}

	this.nextlines=function(){
		if(document.selection){

		}
		else if(this.t.selectionStart!=null){
			var n=this.t.selectionStart+500;
			if(n>=this.t.value.length)n=this.t.value.length;
			var s=this.t.value.substring(this.t.selectionStart,n);
			var a=s.split("\n");
			return a.length-1;

		}

	}

	this.gettab=function(str){
		var m=str.match(/(?:^|\n)(\t*)[^\n]*$/);
		return m[1] ? m[1] : '';
	}
}
function CodeEditor2_create(vname,t){
	eval(vname+"=new CodeEditor(t);");
	eval("t.tae="+vname+";");
	eval(vname+".vname=vname;");
}



function CellMover(){
	this.obj;
	this.select=function(obj){
		if(this.obj)this.obj.style.backgroundColor='';
		this.obj=obj;
		this.obj.style.backgroundColor='#ccc';
	}

	this.move=function(dir){
		var u=this.getneibr(this.obj,'up'),d=this.getneibr(this.obj,'down');
		if(!(u || d))return;

		var p=this.obj.parentNode;
		p.removeChild(this.obj);

		if(dir=='down'){
			if(d ){
				var dd=this.getneibr(d,'down')
				if(dd) p.insertBefore(this.obj,dd);
				else p.appendChild(this.obj);
			}
			else p.insertBefore(this.obj,p.firstChild);
		}
		else{
			if(u) p.insertBefore(this.obj,u);
			else p.appendChild(this.obj);
		}

	}

	this.getneibr=function(obj,dir){
		var tag='TR';
		if(!obj)return null;
		if(dir=='up'){
			for(var e=obj.previousSibling;e;e=e.previousSibling) {
				if(e.tagName==tag) return e;
			}
		}
		else if(dir=='down'){
			for(var e=obj.nextSibling;e;e=e.nextSibling) {
				if(e.tagName==tag) return e;
			}
		}
	}


}

function DateChooser(par){
	this.vname=par.vname;
	if(par.divid)this.dc=new CalendarPopup(par.divid);
	else this.dc=new CalendarPopup();
	this.fld=par.fld;
	this.fldid=par.fldid;
	this.display=par.display;
	this.displayid=par.displayid;

	this.datechanged=function(y,m,d){
		if(!this.fld){
			if(this.fldid)this.fld=document.getElementById(this.fldid);
		}
		if(this.fld){
			var s=''+y+'-'+LZ(m)+'-'+LZ(d);
			this.fld.value=s;
			this.reflectchange();
		}
	}
	this.reflectchange=function(){
		if(!this.display){
			if(this.displayid) this.display=document.getElementById(this.displayid);
		}
		if(this.display && this.fld){
			this.display.innerHTML=this.fld.value;
		}
	}

	this.dc.setReturnFunction(this.vname+'.datechanged');

}

function DateChooser_create(par){
	var vname=par.vname;

	if(par.divid){
		var e=document.getElementById(par.divid);
		if(!e)document.write("<div id='"+par.divid+"'></div>");

	}

	eval(vname+"=new DateChooser(par);");
	var vobj;
	eval("vobj="+vname+";");
	if(par.displayid){
		var e=document.getElementById(par.displayid);
		if(!e)document.write("<span id='"+par.displayid+"'>&nbsp;</span>");
	}
	if(par.buttonid){
		var e=document.getElementById(par.buttonid);
		if(e){
			eval("e.onclick=function(){"+vname+".dc.select(document.getElementById('"+par.fldid+"'),'"+par.buttonid+"','yyyy-MM-dd');return false; }");
		}

	}

}

function DateSelect(par){
	this.oy=par.year;
	this.om=par.month;
	this.od=par.day;
	this.fld=par.fld;
	this.strictformat=par.strictformat;
	this.yrstart=parseInt(par.yrstart) ? parseInt(par.yrstart) : -1;
	this.yrend=parseInt(par.yrend) ? parseInt(par.yrend) : 3;

	this.getdatestr=function (){
		var y=this.oy.value,a=this.om.value, b=this.od.value;
		if(this.strictformat){
			if(!(a>0 && b>0 && this.oy.value>0))return '';
		}
		if(!(a>0))a='0';
		if(!(b>0))b='0';
		if(!(y>0))y='0000';
		if(a<10) a='0'+a;
		if(b<10) b='0'+b;
		return y+'-'+a+'-'+b;
	}
	this.init=function(){
		var today=new Date();
		var ty=today.getFullYear();
		var tm=today.getMonth();
		var td=today.getDate();
		var sy=ty+this.yrstart,ey=ty+this.yrend;
		if(!(ey>sy && ey-sy<200))return;
		for(i=ey; i>=sy; i--) this.oy.options[this.oy.options.length]=new Option(i, i);
		for(i=0; i<12; i++) this.om.options[this.om.options.length]=new Option(i+1, i+1);
		for(i=0; i<31; i++) this.od.options[this.od.options.length]=new Option(i+1, i+1);
	}
	this.setdate=function(dd){
		var y, m, d;

		if(dd!=''){
			y=dd.substr(0,4)-0;
			m=dd.substr(5,2)-0;
			d=dd.substr(8,2)-0;
		}
		else return;
		if(!setSelect(this.oy, y) && y>1000) {
			this.oy.options[this.oy.length]=new Option(y, y);
			this.oy.selectedIndex=this.oy.length-1;
		}
		setSelect(this.om, m);
		setSelect(this.od, d);
		this.reflectchange();
	}
	this.reflectchange=function(){
		this.adjustday();
		this.datechanged();
	}
	this.datechanged=function(){
		if(this.fld)this.fld.value=this.getdatestr();
	}
	this.adjustday=function (){
		var days=[31,28,31,30,31,30,31,31,30,31,30,31];
		var y=this.oy.value, m=this.om.value;
		if(!(y>0) || !(m>0))m=1;
		if(y%4==0)days[1]=29;

		var mn=days[m-1];
		var d=this.od.value;
		var md=parseInt(this.od.options[this.od.options.length-1].value);
		for(var i=this.od.options.length-1;i>0;i--){
			if(this.od.options[i].value>mn)this.od.options[i]=null;
		}

		if(md<mn){
			for(var i=md+1;i<=mn;i++) {
				this.od.options[this.od.options.length]=new Option(i,i);
			}
		}
		if(d>mn)this.od.selectedIndex=this.od.options.length-1;
	}
}
function DateSelect_create(par){
	var vn=par.vname,e;
	if(!par.fld){
		if(par.fldid){
			par.fld=document.getElementById(par.fldid);
		}
	}
	if(!par.year){
		if(par.yearid){
			par.year=document.getElementById(par.yearid);
		}
	}
	if(!par.month){
		if(par.monthid){
			par.month=document.getElementById(par.monthid);
		}
	}
	if(!par.day){
		if(par.dayid){
			par.day=document.getElementById(par.dayid);
		}
	}
	eval(vn+'=new DateSelect(par);');
	eval(vn+".init();");

	if(par.year)eval("par.year.onchange=function(){"+vn+'.reflectchange();}');
	if(par.month)eval("par.month.onchange=function(){"+vn+'.reflectchange();}');
	if(par.day)eval("par.day.onchange=function(){"+vn+'.datechanged();}');
	if(par.fld){
		eval(vn+".setdate(par.fld.value);");
	}
}