/**
 *@fileoverview ubbreplace
 *@author scorpionxu
 */

function ubbReplace(srcString, replacewhat,imageLimit,imageOnloadFn,icdm) {
	var regstr;
	var as;

	if(!imageOnloadFn){
		imageOnloadFn="picsize";
		as="adjustSize";
	}
	else
		as=imageOnloadFn;

	 srcString = srcString.replace(/([\.\? -!:-@\[-`\{-~、。·ˉˇ¨〃々～‖…‘’“”〔〕〈〉！＂＃￥％＆＇（）＊＋，－．／０１２３４５６７８９：；＜＝＞？＠ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ［＼］＾＿｀ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ｛｜｝ˊˋ﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡﹢﹣﹤﹥﹦﹨﹩﹪﹫]{18})/g,"$1<wbr>")
	//表情
	if(/(all)|(face)/.test(replacewhat))
		srcString = srcString.replace(/\[em\]e(\d{1,3})\[\/em\]/g, "<img src='http://"+icdm+"/qzone/em/e$1.gif'><wbr>");

	//超链接
	if(/(all)|(anchor)/.test(replacewhat))
		srcString = srcString.replace(/\[url(|=([^\]]+))\](.+?)\[\/url\]/g,function(){
			var args = arguments;
			var REG_HTTP = /^http:\/\//i;
			var INVALID_HREF_STRING = /[\"\']/i;
			var INVALID_EXPLAIN_STRING = /\[(em|video|flash|audio|quote|ffg|url|marque|email)/i;

			var explain = "";
			var href = "";

			if (!args[1]){//[url][/url] 模式
				if (REG_HTTP.test(args[3])){
					explain = href = args[3];
				}
			}else{//[url=][/url] 模式
				if (REG_HTTP.test(args[2])){ //第一个参数是超链接
					explain = args[3];
					href = args[2];
				}else if (REG_HTTP.test(args[3])){ //第二个参数是超链接
					explain = args[2];
					href = args[3];
				}
			}

			if (!href || !explain || INVALID_HREF_STRING.test(href) || INVALID_EXPLAIN_STRING.test(explain))
				return args[0]; //匹配不上
			else
				return '<a href="' + href + '" target="_blank">' + explain + '</a><wbr>';
		});
	if(/all/.test(replacewhat))
		srcString = srcString.replace(/\[ppk_url=(http[^\]\"\']+)]([^\[]+)\[\/ppk_url\]/g, "<a href='$1' target='_blank' style='color:#EF6EA8'>$2</a><wbr>").replace(/\[url=([^\]\"\']+)](http[^\[]+)\[\/url\]/g, "<a href='$2' target='_blank'>$1</a><wbr>").replace(/\[url]([^\[\"\']+)\[\/url\]/g, "<a href='$1' target='_blank'>$1</a><wbr>");

	//图片
	if(/(all)|(image)/.test(replacewhat))	{
 		var w = /sign/.test(replacewhat)?"540,160":((/all/.test(replacewhat))?"670,999":"540,999");
		if(!!imageLimit)
			w=imageLimit;
        if (/imageLimit/.test(replacewhat)) {
        	var limitCount=0
			regstr = /\[img\]http(.[^\]\'\"]*)\[\/img\]/i;		
        	while (regstr.exec(srcString) != null) {
        		if (limitCount>=1)
					srcString = srcString.replace(regstr, " <a href='http$1' target='_blank'>{点击查看贴图}</a> ");
 				  else
 					srcString = srcString.replace(regstr, "<wbr><a href='http$1' target='_blank'><img onload='"+imageOnloadFn+"(this,"+w+")'  src='about:blank' onerror=\"regImg(this,'http$1')\" border='0'></a><wbr> ");
	       		limitCount++
        	}
        }else if (/imageHide/.test(replacewhat)) {
			regstr = /\[img\]http(.[^\]\'\"]*)\[\/img\]/ig;		
			srcString = srcString.replace(regstr, " <a href='http$1' target='_blank'>{点击查看贴图}</a> ");
        }else {
			srcString = srcString.replace(/\[img,(\d{1,3}),(\d{1,3})\]http(.[^\]\'\"]*)\[\/img\]/ig, "<wbr><img src='http$3' border='0' width='$1' height='$2' onload='"+as+"(this,520,1024,true)'><wbr>");
			srcString = srcString.replace(/\[img\]http(.[^\]\'\"]*)\[\/img\]/ig, "<wbr><a href='http$1' target='_blank'><img onload='"+imageOnloadFn+"(this,"+w+")'  src='about:blank' onerror=\"regImg(this,'http$1')\" border='0'></a><wbr>");
		}
	}
	 //flash
	if(/(all)|(flash)/.test(replacewhat))
	{
		regstr = /\[flash(,(\d{1,3}),(\d{1,3})|)\]([^\[]+?)\[\/flash\]/ig;
		srcString = srcString.replace(regstr, function(){
			var args = arguments;
			var url = args[4];
			var isQQVideo = /^http:\/\/((\w+\.|)video|v).qq.com/i.test(url);
			var isImgCache = /^http:\/\/imgcache.qq.com/i.test(url);
			var isComic = /^http:\/\/comic.qq.com/i.test(url);

			var netWorking = isQQVideo|isImgCache|isComic?"all":"internal";
			var fullScreen = isQQVideo?"true":"false";
			var scriptaccess = isQQVideo|isImgCache|isComic?"always":"never";
			if (args[1])
				return '<EMBED allowscriptaccess="' + scriptaccess + '" allownetworking="'+netWorking+'" allowFullScreen="' + fullScreen + '" src="'+url+'" width="'+args[2]+'" height="'+args[3]+'"/><wbr>';
			else
				return '<EMBED allowscriptaccess="' + scriptaccess + '" allownetworking="'+netWorking+'" allowFullScreen="' + fullScreen + '" src="'+url+'"/><wbr>';
		});
		
		regstr = /\[flasht,(\d{1,4}),(\d{1,4}),(\d{1,4}),(\d{1,4})\]([^\[]+?)\[\/flasht\]/ig;
		srcString = srcString.replace(regstr, "<EMBED allownetworking='internal' wmode='transparent' menu='false' src='$5' width='$1' height='$2' type='application/octet-stream' wmode='transparent' quality='high' style='position: absolute; left: $3; top: $4'/><wbr>");
	}
	 //video
	if(/(all)|(video)/.test(replacewhat))
	{
		regstr = new RegExp("\\[video,([0-9]{1,3}),([0-9]{1,3}),([truefals]{4,5}),([truefals]{4,5})\\](http:\\/\\/video\\.qq\\.com\\/res\\/[\u2E80-\u9FFF0-9a-zA-Z&#=;.:_\\-?\%/+\/]{1,})\\[\\/video\\]", "ig");
		srcString = srcString.replace(regstr, "<EMBED allowNetworking='all' enableContextMenu='False' src='$5' width='$1' height='$2' loop = '$3' autostart='$4' showstatusbar='1'/><wbr>");
		regstr = new RegExp("\\[video,([0-9]{1,3}),([0-9]{1,3}),([truefals]{4,5}),([truefals]{4,5})\\]([\u2E80-\u9FFF0-9a-zA-Z&#=;.:_\\-?\%/+\/]{1,})\\[\\/video\\]", "g");
		srcString = srcString.replace(regstr, "<EMBED allowNetworking='internal' enableContextMenu='False' src='$5' width='$1' height='$2' loop = '$3' autostart='$4' showstatusbar='1'/><wbr>");

		regstr = new RegExp("\\[video,([truefals]{4,5}),([truefals]{4,5})\\](http:\\/\\/video\\.qq\\.com\\/res\\/[\u2E80-\u9FFF0-9a-zA-Z&#=;.:_\\-?\%/+\/]{1,})\\[\\/video\\]", "ig");
		srcString = srcString.replace(regstr, "<EMBED allowNetworking='all' enableContextMenu='False' src='$3' loop = '$1' autostart='$2' showstatusbar='1'/><wbr>");
		regstr = new RegExp("\\[video,([truefals]{4,5}),([truefals]{4,5})\\]([\u2E80-\u9FFF0-9a-zA-Z&#=;.:_\\-?\%/+\/]{1,})\\[\\/video\\]", "g");
		srcString = srcString.replace(regstr, "<EMBED allowNetworking='internal' enableContextMenu='False' src='$3' loop = '$1' autostart='$2' showstatusbar='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;
	srcString=srcString.replace(/\[\/?quote[^\]]*\]/g,"");
	//glow
	if(/(all\b)|(glow\b)/.test(replacewhat) && Browser.isIE){
		regstr = /\[ffg,([#\w]{1,10}),([#\w]{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) && Browser.isIE){
		regstr = /\[ffg,([#\w]{1,10}),([#\w]{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) && Browser.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>');
	}
	//font 
	if(/(all)|(font)/.test(replacewhat)){

		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>");
		}

		regstr = new RegExp("\\[ft=([^\\]]+)\\]", "g");
		if(a = srcString.match(regstr)){
			fontCount+=a.length;
			srcString = srcString.replace(regstr, function(){
				var s = arguments[1].split(",");
				var color = s[0]?' color='+s[0]:'';
				var size = s[1]?' size='+s[1]:'';		
				var face = s[2]?' face='+s[2]:'';
				return '<font'+color+size+face+' style="line-height:1.3em">'
			});
		}
		
		// color
		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>");
		}
		// size
		regstr = new RegExp("\\[fts=([1-6]{1,1})\\]", "g");
		if(a = srcString.match(regstr)){
			fontCount+=a.length;
			srcString = srcString.replace(regstr, "<font size='$1' style='line-height:1.3em'><wbr>");
		}
		// font familly
		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>");
		}
		regstr = new RegExp("\\[B\\]", "g");
		srcString = srcString.replace(regstr, "<B><wbr>");

		regstr = new RegExp("\\[\\/B\\]", "g");
		srcString = srcString.replace(regstr, "</B><wbr>");

		regstr = new RegExp("\\[M\\]", "g");
		srcString = srcString.replace(regstr, "<center>");

		regstr = new RegExp("\\[\\/M\\]", "g");
		srcString = srcString.replace(regstr, "</center>");

		regstr = new RegExp("\\[R\\]", "g");
		srcString = srcString.replace(regstr, "<center style='text-align: right'>");

		regstr = new RegExp("\\[\\/R\\]", "g");
		srcString = srcString.replace(regstr, "</center>");

		regstr = new RegExp("\\[U\\]", "g");
		srcString = srcString.replace(regstr, "<U><wbr>");

		regstr = new RegExp("\\[\\/U\\]", "g");
		srcString = srcString.replace(regstr, "</U><wbr>");

		regstr = new RegExp("\\[I\\]", "g");
		srcString = srcString.replace(regstr, "<I><wbr>");

		regstr = new RegExp("\\[\\/I\\]", "g");
		srcString = srcString.replace(regstr, "</I><wbr>");
	}

	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>");
	}
	srcString = srcString.replace(/\[\/?f[tf][^\]]*\]/g,"").replace(/\[\/?[BMRUI]\]/g,"")
	//email
	if(/(all)|(email)/.test(replacewhat))
	{
		regstr = new RegExp("\\[email\\](.*?)\\[\\/email\\]", "g");
		srcString = srcString.replace(regstr, "<a href='mailto:$1' target='_blank'>$1</a><wbr>");
		regstr = new RegExp("\\[email=(.*?)\\](.*?)\\[\\/email\\]", "g");
		srcString = srcString.replace(regstr, "<a href='mailto:$2' target='_blank'>$1</a><wbr>");
	}

	//<j> replace font style


	//marquee
	if(/(all)|(marquee)/.test(replacewhat))
	{
		regstr = new RegExp("\\[marque\\]", "g");
		srcString = srcString.replace(regstr, "<marquee><wbr>");

		regstr = new RegExp("\\[\\/marque\\]", "g");
		srcString = srcString.replace(regstr, "</marquee><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 allowNetworking="internal" src="'+a4+'" loop="'+a1+'" autostart="'+a2+'"'+((a3==',true]')?' height="0" width="0"':'')+' showstatusbar="1" /><wbr>';});
	}

	return srcString;
}

function adjustSize(obj,w, h,openWindows) {
	var w0=obj.width,h0=obj.height,r=false;
	if(w0<1){var i = new Image();i.src=obj.src;w0=i.width;h0=i.height;}
	if((w0/h0)>(w/h)){
		if(w0>w){obj.style.width = w;r=true;}
	}else {
		if(h0>h){obj.style.height = h;r=true;}
	}
	if (openWindows && r) { 
		obj.style.cursor = "pointer";
		obj.title = "点击预览原图";
		obj.onclick = function(){
			window.open(obj.src)
		}
	}
	obj.onload=null;
}

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;
	}
}

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;
}

