function callclip(param)
{
	eval(param).focus();
	eval(param).document.execCommand("selectAll");
	eval(param).document.execCommand('Copy');
}

var UBBrange;

function storeCaret(textEl){
	if(textEl.createTextRange){
		textEl.caretPos = document.selection.createRange().duplicate();
	}
}

function insertAtCaret(textEl, text){
	if (textEl.createTextRange && textEl.caretPos){
		var caretPos = textEl.caretPos;
		caretPos.text += caretPos.text.charAt(caretPos.text.length - 2) == ' ' ? text + ' ' : text;
	} else if(textEl) {
		textEl.value += text;
	} else {
		textEl.value = text;
	}
}

function get_textarea()	//获取文本
{
	var post = main_editer;
	var selected = '';
	if(post.isTextEdit){ 
			post.focus();
			var sel= document.selection;
			var rng= sel.createRange();
			rng.colapse;
			if((sel.type =="Text" || sel.type == "None") && rng !=null){
					if(rng.text.length > 0)        selected = rng.text;
			}
	}        
	return selected;
}

function set_textarea(str)		//应用文本
{
	var r=document.selection.createRange();
	if(r.text==''){
		document.all ? insertAtCaret(main_editer, str) : main_editer.value += str;
	}else{
		r.text=str;
	}
	previw(0);
}
function show_win(win_name,flag){
	if(flag==0){
		if(document.all[win_name].style.display==''){
			document.all[win_name].style.display='none';
		}else{
			document.all[win_name].style.display='';
		}
	}else if(flag==1){
		document.all[win_name].style.display='';
	}else if(flag==2){
		document.all[win_name].style.display='none';
	}
}
function set_color(s_col,s_col2,flag,s)	//设置颜色
{
	if(s=='') s = get_textarea();
	if(flag){
		s = '[ffg,'+s_col+','+s_col2+']'+s+'[/ft]'
	}else{
		s = '[ftc='+ s_col + ']' + s + '[/ft]';
	}
	set_textarea(s);
}
function set_rainbow(){	//设置彩虹文字
	
	var wr_text = win_rainbow_text.value;
	var wr_code,wr_rgb,r,g,b,i,j,istep
	var wr_rgb1,wr_rgb2,r1,g1,b1,r2,g2,b2
	
	r1=g1=b1=r2=g2=b2=0;
	r=0;g=0;b=0;istep=0;
	wr_code='';
	
	if(wr_text==''){
		show_win('win_rainbow',0);
		return;
	}
	
	if(win_rainbow_style1.checked){
		istep=40;
		r=255;i=1;j=0;
		do{
			if(wr_text.charCodeAt(j) != 32){
				if(g+istep<256){
					if(i==1)g+=istep;
				}else if(i==1){
					i=2;g=255;
				}
				if(r-istep>-1){
					if(i==2)r-=istep;
				}else if(i==2){
					i=3;r=0;
				}
				if(b+istep<256){
					if(i==3)b+=istep;
				}else if(i==3){
					i=4;b=255;
				}
				if(g-istep>-1){
					if(i==4)g-=istep;
				}else if(i==4){
					i=5;g=0;
				}
				if(r+istep<256){
					if(i==5)r+=istep;
				}else if(i==5){
					i=6;r=255;
				}
				if(b-istep>-1){
					if(i==6)b-=istep;
				}else if(i==6){
					i=1;b=0;
				}
				wr_rgb='';
				wr_rgb+=parseInt(r).toString(16).length==1 ? 0+parseInt(r).toString(16) : parseInt(r).toString(16);
				wr_rgb+=parseInt(g).toString(16).length==1 ? 0+parseInt(g).toString(16) : parseInt(g).toString(16);
				wr_rgb+=parseInt(b).toString(16).length==1 ? 0+parseInt(b).toString(16) : parseInt(b).toString(16);
				wr_rgb=wr_rgb.toUpperCase();
				wr_code+='[ftc='+ wr_rgb +']'+wr_text.charAt(j)+'[/ft]';
			}else{
				wr_code+=wr_text.charAt(j);
			}
			j++;
		}while (j<wr_text.length);
	}else if(win_rainbow_style2.checked){
		istep=255/wr_text.length;
		for(i=1;i<wr_text.length+1;i++){
			if(wr_text.charCodeAt(i-1)!=32){
				r+=istep;
				g+=istep;
				b+=istep;
				if(r>255) r=255;
				if(g>255) g=255;
				if(b>255) b=255;
				wr_rgb='';
				wr_rgb+=parseInt(r).toString(16).length==1 ? 0+parseInt(r).toString(16) : parseInt(r).toString(16);
				wr_rgb+=parseInt(g).toString(16).length==1 ? 0+parseInt(g).toString(16) : parseInt(g).toString(16);
				wr_rgb+=parseInt(b).toString(16).length==1 ? 0+parseInt(b).toString(16) : parseInt(b).toString(16);
				wr_rgb=wr_rgb.toUpperCase();
				wr_code+='[ftc='+ wr_rgb +']'+wr_text.charAt(i-1)+'[/ft]';
			}else{
				wr_code+=wr_text.charAt(i-1);
			}
		}
	}else if(win_rainbow_style3.checked){
		istep=255/wr_text.length;
		for(i=1;i<wr_text.length+1;i++){
			if(wr_text.charCodeAt(i-1)!=32){
				r+=istep;
				g=29;
				b=36;
				if(r>255) r=255;
				if(g>255) g=255;
				if(b>255) b=255;
				wr_rgb='';
				wr_rgb+=parseInt(r).toString(16).length==1 ? 0+parseInt(r).toString(16) : parseInt(r).toString(16);
				wr_rgb+=parseInt(g).toString(16).length==1 ? 0+parseInt(g).toString(16) : parseInt(g).toString(16);
				wr_rgb+=parseInt(b).toString(16).length==1 ? 0+parseInt(b).toString(16) : parseInt(b).toString(16);
				wr_rgb=wr_rgb.toUpperCase();
				wr_code+='[ftc='+ wr_rgb +']'+wr_text.charAt(i-1)+'[/ft]';
			}else{
				wr_code+=wr_text.charAt(i-1);
			}
		}
	}else if(win_rainbow_style4.checked){
		istep=255/wr_text.length;
		for(i=1;i<wr_text.length+1;i++){
			if(wr_text.charCodeAt(i-1)!=32){
				r=0;
				g=174;
				b+=istep;
				if(r>255) r=255;
				if(g>255) g=255;
				if(b>255) b=255;
				wr_rgb='';
				wr_rgb+=parseInt(r).toString(16).length==1 ? 0+parseInt(r).toString(16) : parseInt(r).toString(16);
				wr_rgb+=parseInt(g).toString(16).length==1 ? 0+parseInt(g).toString(16) : parseInt(g).toString(16);
				wr_rgb+=parseInt(255-b).toString(16).length==1 ? 0+parseInt(255-b).toString(16) : parseInt(255-b).toString(16);
				wr_rgb=wr_rgb.toUpperCase();
				wr_code+='[ftc='+ wr_rgb +']'+wr_text.charAt(i-1)+'[/ft]';
			}else{
				wr_code+=wr_text.charAt(i-1);
			}
		}
	}else if(win_rainbow_style5.checked){
		if(win_rainbow_A.value.length!=6||win_rainbow_B.value.length!=6){
			alert('颜色代码错误！');
			return;
		}else{
			wr_rgb1=win_rainbow_A.value;
			wr_rgb2=win_rainbow_B.value;
			r1=parseInt("0x"+String(wr_rgb1).substr(0,2));
			g1=parseInt("0x"+String(wr_rgb1).substr(2,2));
			b1=parseInt("0x"+String(wr_rgb1).substr(4,2));
			r2=parseInt("0x"+String(wr_rgb2).substr(0,2));
			g2=parseInt("0x"+String(wr_rgb2).substr(2,2));
			b2=parseInt("0x"+String(wr_rgb2).substr(4,2));;
			if(isNaN(r1)) r1=0
			if(isNaN(g1)) g1=0
			if(isNaN(b1)) b1=0
			if(isNaN(r2)) r2=0
			if(isNaN(g2)) g2=0
			if(isNaN(b2)) b2=0
			istep=255/wr_text.length;
			for(i=1;i<wr_text.length+1;i++){
				if(wr_text.charCodeAt(i-1)!=32){
					wr_rgb='';
					wr_rgb+=parseInt(r1).toString(16).length==1 ? 0+parseInt(r1).toString(16) : parseInt(r1).toString(16);
					wr_rgb+=parseInt(g1).toString(16).length==1 ? 0+parseInt(g1).toString(16) : parseInt(g1).toString(16);
					wr_rgb+=parseInt(b1).toString(16).length==1 ? 0+parseInt(b1).toString(16) : parseInt(b1).toString(16);
					wr_rgb=wr_rgb.toUpperCase();
					wr_code+='[ftc='+ wr_rgb +']'+wr_text.charAt(i-1)+'[/ft]';
					r1>r2?r1-=istep:r1+=istep;
					g1>g2?g1-=istep:g1+=istep;
					b1>b2?b1-=istep:b1+=istep;
					if(r1>255) r1=255;
					if(r1<0) r1=0;
					if(g1>255) g1=255;
					if(g1<0) g1=0;
					if(b1>255) b1=255;
					if(b1<0) b1=0;
				}else{
				wr_code+=wr_text.charAt(i-1);
				}
			}
		}
	}
	set_textarea(wr_code);
	show_win("win_rainbow",0);
}

var me_value;
function previw(flag) {
	if(flag==1||auto_preview.checked){
		if(me_value!=main_editer.value){
			pr.innerHTML=ubbReplace(main_editer.value,'all');
			me_value=main_editer.value;
			move_all_div();
		}
	}
}

//**********************************
var imgcacheDomain='imgcache.qq.com';
var isIE=1;
	
function ubbReplace(srcString, replacewhat) {
	
	srcString =	Text2HTML(entityReplace(srcString));
	srcString = srcString.replace(/([ -!:-@\[-`\{-~、。·ˉˇ¨〃々～‖…‘’“”〔〕〈〉！＂＃￥％＆＇（）＊＋，－．／０１２３４５６７８９：；＜＝＞？＠ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ［＼］＾＿｀ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ｛｜｝ˊˋ﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡﹢﹣﹤﹥﹦﹨﹩﹪﹫]{18})/g,"$1<wbr>")

	//quote
	if(/(all)|(quote)/.test(replacewhat)){
			var srcString = srcString.replace(/\[quote=([^\]]*)\]/g,"\x00$1<br />\x02").replace(/\[\/quote\]/g,"\x01").replace(/\[quote\]/g,"\x00");
			var maxQuote = 2;
			for(var i=0;i<maxQuote;i++)
				srcString = srcString.replace(/\x00([^\x00\x01\x02]*)\x02?([^\x00\x01\x02]*)\x01/g, function(a,b,c){
					if(c=="")//alert("["+b+"]"+"\n"+"["+c+"]");
						return "<div class=\"mode_table_quote\"><span class=\"mode_table_quote_title\">引用内容：</span><br/>"+b+"</div>";
					else
						return "<div class=\"mode_table_quote\"><span class=\"mode_table_quote_title\">"+b+"引用内容：</span><br/>"+c+"</div>";
				});
			srcString=srcString.replace(/[\x00\x02\x01]/g,"");
	}
	//font
	var fontCount = 0;var a;

	//glow
	if(/(all\b)|(glow\b)/.test(replacewhat) && isIE){
		var regstr = /\[ffg,([a-zA-z#0-9]{1,10}),([a-zA-z&#=;0-9]{1,10})\]/g
		if(a = srcString.match(regstr)){
			fontCount+=a.length;
			srcString = srcString.replace(regstr, '<font style="filter: glow(color=$1,strength=3); height:10px; color:$2; padding:1px">');
		}
	}else	if(/glow_limit/.test(replacewhat) && isIE){
		var regstr = /\[ffg,([a-zA-z#0-9]{1,10}),([a-zA-z&#=;0-9]{1,10})\](.{1,30})\[\/ft\]/
		if(a = srcString.match(regstr)){
			if(!/\[f/.test(a[3]))
				srcString = srcString.replace(regstr, '<font style="filter: glow(color=$1,strength=3); height:10px; color:$2; padding:1px">$3</font>');
		}
	}

	//glow For msg
	if(/(all\b)|(glow_msg\b)/.test(replacewhat) && isIE){
		srcString = srcString.replace(/\[cx1\]([^\r]*?)\[\/cx1\]/g, '<span class="title_cx1">$1</span>');
		srcString = srcString.replace(/\[cx2\]([^\r]*?)\[\/cx2\]/g, '<span class="title_cx2">$1</span>');
	}

	var regstr = /\[ffg,([a-zA-z#0-9]{1,10}),([a-zA-z&#=;0-9]{1,10})\]/g
	if(a = srcString.match(regstr)){
		fontCount+=a.length;
		srcString = srcString.replace(regstr, "<font color='$1'><wbr>");
	}
	// color
	var regstr = new RegExp("\\[ftc=([a-zA-z#0-9]{1,10})\\]", "g");
	if(a = srcString.match(regstr)){
		fontCount+=a.length;
		srcString = srcString.replace(regstr, "<font color='$1'><wbr>");
	}
	// font familly
	var regstr = new RegExp("\\[ftf=([\u4E00-\u9FFFa-zA-Z_0-9\,&#=;\\ ]{1,})\\]", "g");
	if(a = srcString.match(regstr)){
		fontCount+=a.length;
		srcString = srcString.replace(regstr, "<font face='$1'><wbr>");
	}


	var regstr = /\[\/ft\]/g;
	if(a = srcString.match(regstr)){
		fontCount-=a.length;
		srcString = srcString.replace(regstr, "</font><wbr>");
	}
	if(fontCount>0){
		srcString += (new Array(fontCount+1)).join("</font><wbr>");
	}

	//<j> replace font style

		var regstr = new RegExp("\\[B\\]", "g");
		srcString = srcString.replace(regstr, "<B><wbr>");

		var regstr = new RegExp("\\[\\/B\\]", "g");
		srcString = srcString.replace(regstr, "</B><wbr>");

		var regstr = new RegExp("\\[M\\]", "g");
		srcString = srcString.replace(regstr, "<center>");

		var regstr = new RegExp("\\[\\/M\\]", "g");
		srcString = srcString.replace(regstr, "</center>");

		var regstr = new RegExp("\\[R\\]", "g");
		srcString = srcString.replace(regstr, "<center style='text-align: right'>");

		var regstr = new RegExp("\\[\\/R\\]", "g");
		srcString = srcString.replace(regstr, "</center>");

		var regstr = new RegExp("\\[U\\]", "g");
		srcString = srcString.replace(regstr, "<U><wbr>");

		var regstr = new RegExp("\\[\\/U\\]", "g");
		srcString = srcString.replace(regstr, "</U><wbr>");

		var regstr = new RegExp("\\[I\\]", "g");
		srcString = srcString.replace(regstr, "<I><wbr>");

		var regstr = new RegExp("\\[\\/I\\]", "g");
		srcString = srcString.replace(regstr, "</I><wbr>");


	if(/(all)|(audio)/.test(replacewhat)){
    //audio For New Ubb
	srcString=srcString.replace(/\[audio,(true|false),(true|false)(\]|,true\]|,false\])([\u2E80-\u9FFF0-9a-zA-Z&#=;.:_\-?\%/+\/]{1,})\[\/audio\]/ig,function(a,a1,a2,a3,a4,b){return '<EMBED allowscriptaccess="never" src="'+a4+'" loop="'+a1+'" autostart="'+a2+'"'+((a3==',true]')?' height="0" width="0"':'')+' showstatusbar="1" /><wbr>';});
	}

	return srcString;
}

function entityReplace(str)
{
	return str.replace(/&#38;?/g,"&amp;").replace(/&#(\d+);?/g,function(a,b){return String.fromCharCode(b)}).replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,"\"").replace(/&nbsp;/g," ").replace(/&#13;/g,"\n").replace(/(&#10;)|(&#x\w*;)/g,"").replace(/&amp;/g,"&");
}
function Text2HTML(str){
	return str.replace(/\x0a/g,"<br>").replace(/ /g,"&nbsp;")
}

function picsize(obj,MaxWidth,MaxHeight){
	obj.onload=null;
	img=new Image();
	img.src=obj.src;
	if (img.width>MaxWidth && img.height>MaxHeight){
		if (img.width/img.height>MaxWidth/MaxHeight) {
			obj.height=MaxWidth*img.height/img.width;
			obj.width=MaxWidth;
		}else {
			obj.width=MaxHeight*img.width/img.height;
			obj.height=MaxHeight;
		}
	}else if (img.width>MaxWidth) {
		obj.height=MaxWidth*img.height/img.width;
		obj.width=MaxWidth;
	}else if (img.height>MaxHeight) {
		obj.width=MaxHeight*img.width/img.height;
		obj.height=MaxHeight;
	}else{
		obj.width=img.width;
		obj.height=img.height;
	}
}

// 以 <img src="about:blank" onerror=regImg(this,"http://...gif") /> 的方式定义图片可以避
// 免重复加载和图片堵塞页面问题。建议在发现图片下载造成页面延迟的情形下使用。
function regImg(e,src)
{
	if(!window.imgHash) window.imgHash = new Object();
	if(src.indexOf("[%")>0)return;
	src = src.replace(/<%.*%>/g,"")
	var a = imgHash[src];
	e.onerror=null;
	if(a==null) {
		e.style.display="none";
		a=imgHash[src]=[];
		a[0]=new Image();
		a[1]=e;
		a[0].onload=function(){setImges(a)};
		a[0].src=src;
	}else{
		if(a[0].readyState=="complete")
			e.src=src;
		else{
			e.style.display="none";
			a[a.length]=e;
		}
	}
}

function setImges(a){
	for(var i=1;i<a.length;i++){
		a[i].src=a[0].src;
		a[i].style.display="";
	}
	a.length=1;
	a[0].onload=null;
}