///////////////////////////////////////////////////////////////////////////
// 版權所有，盜用必究
// All Right Reserved by Yam Digital Co. Ltd. 2000
// http://www.yam.com
// Modified by Julia Huang. 2000/09/28
// 修改說明：1.關閉ansi變色功能(原模擬BBS畫面用)
//           2.關閉自動將網址加上超連結標籤功能(會與ref的參數相衝突)
//           3.加上判斷keyword是否在tag中，若keyword在tag之中則不變色
//           4.原先多個keyword以逗號分隔，改為以空格分隔(配合搜尋引擎語法)
// 使用說明：1.要變色的範圍請以<div id="block"></div>包起來
//           2.在</body>之前加上
//             <font color="#FFFFFF"><div id="key">關鍵字</div></font>
//             font color要設成和背景顏色一樣
///////////////////////////////////////////////////////////////////////////

function BrowserCheck() {
	var b = navigator.appName
	if (b=="Netscape") this.b = "ns"
	else if (b=="Microsoft Internet Explorer") this.b = "ie"
	else this.b = b
	this.v = parseInt(navigator.appVersion)
	this.ns = (this.b=="ns" && this.v>=4)
	this.ns4 = (this.b=="ns" && this.v==4)
	this.ns5 = (this.b=="ns" && this.v==5)
	this.ie = (this.b=="ie" && this.v>=4)
	this.ie4 = (navigator.userAgent.indexOf('MSIE 4')>0)
	this.ie50 = (navigator.userAgent.indexOf('MSIE 5.0')>0)
	this.ie55 = (navigator.userAgent.indexOf('MSIE 5.5')>0)
	if (this.ie50) this.v = 5
	this.min = (this.ns||this.ie)
}

is = new BrowserCheck()

onload=init

function init() {
	var undefined;
	if ( (is.ie4 || is.ie50) && document.all["block"]!=undefined ) {
		var content = document.all["block"].innerHTML;
		var key = document.all["key"].innerHTML;
		// 把key組成regular expression
		if ( key!='' ) {
			// 將在常規表示法中有特殊意義的字元escape掉
			key = key.replace(/([\/\\\.\*\+\?\|\(\)\[\]\{\}])/g, "\\"+"$1");
			key = "(" + key + ")";		  
			//key = key.replace(/,/g,")|(");
			key = key.replace(/\s/g,")|(");
			key = "(" + key + ")";
		}
		/*
		re = /<pre ID=(\"){0,1}bbs(\"){0,1}>|<\/pre>/gi;
		content = content.replace( re, "");
		content = content.replace( /,/g, "HGGKJKJHJHJKJ");
		state = -1;
		term = '';
		light=0;
		an = '<font color="" class="">';
		o=0;
		m=0;
		for ( n=0;n<content.length;n++ )
		{
			switch ( state )
			{
				case -1 :
					while (n < content.length && content.charCodeAt(n) != 0x1B) {
						n = n + 1;
					}
					if (content.charCodeAt(n)== 0x1B) {	
						state = 9;
						m = n;
					}
					term = content.charAt(n);
					break;
				case 9:
					term = term + content.charAt(n);
					if( content.charAt(n)=='[' ) {				
						state = 0;	
					}
					else {
						state = -1;			
					}
					break;
				case 0 :
					term = term + content.charAt(n);
					if (content.charAt(n) >= '0' && content.charAt(n) <= '9' ) {
						state = 1;	
					}
					else {
						if ( content.charAt(n)=='m' ) {
							state = 4;				
						}
						else {	
							if ( content.charAt(n)==';' ) {
								state = 3;
							}
							else{	
								state = -1;
							}
						}
					}
					break;
				case 1 :
					term = term + content.charAt(n);
					if (content.charAt(n) >= '0' && content.charAt(n) <= '9' ) {
						state = 2;
					}
					else {
						if (content.charAt(n)==';') {
							state = 3;
						}
						else {
						 	if (content.charAt(n)=='m') {
						 		state = 4;
						 	}
						 	else {	
						 		state = -1;
						 	}
						}
					}
					break;
				case 2 :
					term = term + content.charAt(n);
					if (content.charAt(n)==';') {
						state = 3;
					}
					else {
						if (content.charAt(n)=='m') {
							state = 4;
						}
						else {
							if (content.charAt(n) >= '0' && content.charAt(n) <= '9' ) {
								state = 1;
							}
							else { 
								state = -1;
							}
						}							
					}
					break;
				case 3 :
					term = term + content.charAt(n);
					if (content.charAt(n) >= '0' && content.charAt(n) <= '9' ) {
						state = 1;
					}
					else {		
						if (content.charAt(n)=='m') {
							state = 4;
						}
						else {
							state = -1;
						}
					}
					break;
				case 4 :
					Ansi =new replaceAnsi(term);
					content = content.replace(term,tag);
					o = n;
					n = m + tag.length-1;
					term = '';
					state = -1;
					break;
			}
		}
	 	re = /((((http)|(ftp)|(gopher)|(news)|(telnet)|(nntp)):(\/\/)(([\w$-_\.+!\*'\(\),;?&=]+(:[\w$-_\.+!\*'\(\),;?&=]+){0,1}@){0,1}){0,1}(((\w|(\w[\w-]*\w))\.)*(([a-zA-Z][\w-]*\w))|((\d+)\.(\d+)\.(\d+)\.(\d+))))(:\d+){0,1}(\/(([\w$-_\.+!\*'\(\),;\/?:@&=~#])|(%[A-Fa-f0-9][A-Fa-f0-9]))*){0,1})/gi;
		content = content.replace( re, "<a href=\"$1\">$1</a>");
		re = /(([\w\$\-\_\.\+\!\*\'\(\)\,\/\?\:\@\&\=])+@((\w|(\w[\w-]*\w))\.)+(([a-zA-Z][\w-]*\w)))/gi;
		content = content.replace( re, "<a href=\"mailto:$1\">$1</a>");
		*/
		if ( key!='' ) {
			var reg = new RegExp(key,"gi");
			//content=content.replace( reg, "<font color=dd0000>$1</font>");
			var result;
			var content1 = content;
			var content_right;
			content = "";
			while((result=reg.exec(content1))!=null) {
				
				content_right = content1.substring(result.lastIndex,content1.length);	//content_right:keyword之後的document內容
				content1 = content1.substring(0, result.lastIndex);
				
				var pl = content_right.indexOf("<");	//尋找第一個<符號
				var pr = content_right.indexOf(">");	//尋找第一個>符號
				if( pl < pr ) {	// "<"符號在前，表示找到的keyword不在某一個tag裡，將keyword變色
					//content1 = content1.replace( reg, "<font color=ff6666>$1</font>");
					content1 = content1.replace( reg, "<b>$1</b>");
				}
				
				content += content1;
				content1 = content_right;
				
			}
			content += content1;
		}
		/*
		repp2 = /<a href\=\"((http)|(ftp)|(gopher)|(news)|(telnet)|(nntp)):(\/\/)([\w$-_\.+!\*'\(\),;?&=~]*)((<font color=dd0000>)([\w$-_\.+!\*'\(\),;?&=~]*)(<\/font>)([\w$-_\.+!\*'\(\),;?&=~]*))*([\w$-_\.+!\*'\(\),;?&=~]*)"/gi;
		re2 = /<a href\=\"mailto:(([\w$-_\.+!\*'\(\),;?&=~]*)((<font color=dd0000>)([\w$-_\.+!\*'\(\),;?&=~]*)(<\/font>)([\w$-_\.+!\*'\(\),;?&=~]*))*([\w$-_\.+!\*'\(\),;?&=~]*)@([\w$-_\.+!\*'\(\),;?&=~]*)((<font color=dd0000>)([\w$-_\.+!\*'\(\),;?&=~]*)(<\/font>)([\w$-_\.+!\*'\(\),;?&=~]*))*([\w$-_\.+!\*'\(\),;?&=~]*))"/gi;
		X = content.match(repp2);
		if(X != null) 
		{
			X = X.toString();
			X = X.replace( /<font color=dd0000>|<\/font>/gi,"");
			XArray = X.split(",");
			sRep = content.match(repp2).toString();
			sRepArray = sRep.split(",");
			for(var i=0 ; i<XArray.length;i++)
			{				content = content.replace(sRepArray[i], XArray[i]);			}
		}
		Y=content.match(re2);
		if(Y != null) 
		{
			Y = Y.toString();
			Y = Y.replace( /<font color=dd0000>|<\/font>/gi,"");
			YArray = Y.split(",");
			tRep = content.match(re2).toString();
			tRepArray = tRep.split(",");
			for(var j=0 ; j<YArray.length;j++)
			{				content = content.replace(tRepArray[j], YArray[j]);			}
		}
		comma=new RegExp("HGGKJKJHJHJKJ","g");
		content = content.replace( comma,",");
		document.all["block"].outerHTML = "<pre ID=bbs class=bbs style=\"font-size:medium;line-height:1.2;background:#ffffff\">" + content +"</pre>";
		*/
		document.all["block"].innerHTML = content;
	}
}

function replaceAnsi(term)
{
	var c=new Array(), h=new Array(), back=new Array() ;
	c[0] = /30/gi;
	c[1] = /31/gi;
	c[2] = /32/gi;
	c[3] = /33/gi;
	c[4] = /34/gi;
	c[5] = /35/gi;
	c[6] = /36/gi;
	c[7] = /37/gi; 
	c[8] = /1;.*30|30.*;1/gi;
	c[9] = /1;.*31|31.*;1/gi;
	c[10] = /1;.*32|32.*;1/gi;
	c[11] = /1;.*33|33.*;1/gi;
	c[12] = /1;.*34|34.*;1/gi;
	c[13] = /1;.*35|35.*;1/gi;
	c[14] = /1;.*36|36.*;1/gi;
	c[15] = /1;.*37|37.*;1/gi;
	c[16] = /38|39/gi;
	back[0] = '40';
	back[1] = '41';
	back[2] = '42';
	back[3] = '43';
	back[4] = '44';
	back[5] = '45';
	back[6] = '46';
	back[7] = '47';
	back[8] = /48|49/gi;
	h[0] = '"Black"';
	h[1] = '"Maroon"';
	h[2] = '"Green"';
	h[3] = '"Olive"';
	h[4] = '"Navy"';
	h[5] = '"Purple"';
	h[6] = '"Teal"';
	h[7] = '"Silver"';
	h[8] = '"Gray"';
	h[9] = '"Red"';
	h[10] = '"Lime"';
	h[11] = '"Yellow"';
	h[12] = '"Blue"';
	h[13] = '"Pink"';
	h[14] = '"Aqua"';
	h[15] = '"White"';
	EscB=String.fromCharCode(27);
	tag = term.replace(EscB,'');
	if (tag=='[m' || tag=='[0m' || tag=='[1m' || tag=='[4m' || tag=='[5m' || tag=='[7m') {
		if (tag.indexOf('[m')!=-1 || tag.indexOf('[0m')!=-1) {
			tag = '</font>';
			an = an.replace(/font .*color=\".*\" class=\".*\"/,'font color=\"\" class=\"\"');
			light = 0;
		}
		else {
			tag = tag.replace('[4m','');
			tag = tag.replace('[5m','');
			tag = tag.replace('[7m','');
			if (tag=='[1m') {
				tag = '';
				light = 1 ;
			}
		}
	}
	else {
		tag = tag.replace( /\[5;|\[7;/gi,"[");
		tag = tag.replace( /;5;|;7;/gi,";");
		tag = tag.replace( /;5m|;7m/gi,"m");
		tag = tag.replace('[','</font>[');
		if ( tag.search(/\[;|\[0;/)!=-1) {
			an = an.replace(/font .*color=\".*\" class=\".*\"/,'font color=\"\" class=\"\"');
			light = 0;
		}
		if ( tag.search(/;1;|\[1;|;1m/)!=-1) {
			light = 1;
		}
		t = /\[.*m/gi;
		var amatch = t.exec(tag);
		ammmm=amatch;
		for (j=0; j<9;j++) {
			if ( tag.search(back[j])!=-1) {
				if(j!=8) {
					an = an.replace(/class=\".*\"/,'class='+h[j]);
				}
				else {
					an = an.replace(/class=\".*\"/,'class=\"\"');
				}
			}		
		}
		for (i=0; i<17;i++) {
			if ( tag.search(c[i])!=-1) {
				if (light==1 && i<8) {
					an = an.replace(/color=\".*\" class/,'color='+h[i+8]+' class');
				}
				else {
					if(i!=16) {
						an = an.replace(/color=\".*\" class/,'color='+h[i]+' class');
					}
					else {
						an=an.replace(/color=\".*\" class/,'color="White" class');
					}
				}
				if (i>=8 && i<16) {
					light = 1;
				}							
			}
		}					
		for (i=0; i<16;i++) {
			if ( tag.search(/3\d{1};|3\d{1}m/)==-1 && light==1 && i<16 ) {
				if(an.indexOf('color='+h[i]+' class')!=-1 && i<8) {
					an = an.replace('color='+h[i]+' class','color='+h[i+8]+' class');
				}
			}
		}	
		if (an=='<font color="White" class="">') {
		}
		under=/\[4;|;4;/gi;
		if ( tag.search(under)!=-1) {
			an = an.replace('font color','font style=\"text-decoration:underline;\" color');
		}
		amatch = an;
		tag = tag.replace(t,amatch);
	}
}