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':'offset[0]', 'top':'offset[3]'};
	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;
	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.onmouseover=function(){
		this.mover=1;
		this.showhide();
	}
	dropdown.onmouseout=function(){
		this.mover=0;
//		this.showhide();
		setTimeout("document.getElementById('"+this.mp_name+"').showhide();", 100);

	}
	dropdown.posleft=position.left;
	dropdown.postop=position.top;
	dropdown.showhide=function(){
		var offset=getoffset(this.mp_button);
		eval('this.style.left='+this.posleft+';');
		eval('this.style.top='+this.postop+';');
		showhide(this, this.mover || this.mp_button.mover);
	}
	button.links=button.getElementsByTagName('a');
	button.onmouseover=function(){
		this.mover=1;
		this.style.cursor='pointer';
		if(this.links){
			for(var i=0;i<this.links.length;i++){
				if(this.links[i].style.color!='#ccc'){
					this.links[i].style.color_o=this.links[i].style.color;
					this.links[i].style.color='#ccc';
				}
			}
		}
		this.mp_dropdown.showhide();
	}
	button.onmouseout=function(){
		this.mover=0;
		this.style.cursor='default';
		if(this.links){
			for(var i=0;i<this.links.length;i++){
				if(this.links[i].style.color_o || 1){
					this.links[i].style.color=this.links[i].style.color_o;
				}
			}
		}
//		this.mp_dropdown.showhide();
		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);}');
	}
}