/******************************检测浏览器版本******************************/
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
var isFirefox = (navigator.userAgent.indexOf("Firefox") != -1) ? true : false;
var IEVer = getIEVer();
//获取IE版本号
function getIEVer(){
	var iVerNo = 0;
	var sVer = navigator.userAgent;
	if(sVer.indexOf("MSIE")>-1){
		var sVerNo = sVer.split(";")[1];
		sVerNo = sVerNo.replace("MSIE","");
		iVerNo = parseFloat(sVerNo);
	}
	return iVerNo;
}


/******************************时间格式******************************/

//显示格式：年:月:日 时:分:秒
function getLongDateTime(str) {
	var d = new Date(str);
	var year = d.getFullYear().toString();
	var monthInt = d.getMonth() + 1;
	var month = monthInt.toString();
	if (month.length < 2) {
		month = "0" + month;
	}
	var day = d.getDate().toString();
	if (day.length < 2) {
		day = "0" + day;
	}
	var hour = d.getHours().toString();
	if (hour.length < 2) {
		hour = "0" + hour;
	}
	var minute = d.getMinutes().toString();
	if (minute.length < 2) {
		minute = "0" + minute;
	}
	var second = d.getSeconds().toString();
	if (second.length < 2) {
		second = "0" + second;
	}
	return year + "年" + month + "月" + day + "日 " + hour + ":" + minute + ":" + second;
}


//get date  for mysql Date format
function getDateForMysql(str) {
	var d = new Date(str);
	var year = d.getFullYear().toString();
	var monthInt = d.getMonth() + 1;
	var month = monthInt.toString();	
	if (month.length < 2) {
		month = "0" + month;
	}
	var day = d.getDate().toString();
	if (day.length < 2) {
		day = "0" + day;
	}
	var hour = d.getHours().toString();
	if (hour.length < 2) {
		hour = "0" + hour;
	}
	var minute = d.getMinutes().toString();
	if (minute.length < 2) {
		minute = "0" + minute;
	}
	var second = d.getSeconds().toString();
	if (second.length < 2) {
		second = "0" + second;
	}
	return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
}


/******************************去除字符串的头尾空格******************************/
function Trim(TRIM_VALUE){
	if(TRIM_VALUE.length < 1){
		return"";
	}
	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if(TRIM_VALUE==""){
		return "";
	}
	else{
		return TRIM_VALUE;
	}
} //End Function


function RTrim(VALUE, w_spaces){
	if (w_spaces == undefined || w_spaces == null) {
		w_spaces = [];
		w_spaces.push(String.fromCharCode(32));
	}
//	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 0){
		return"";
	}
	var iTemp = v_length -1;

	while(iTemp > -1){
		var ch = VALUE.charAt(iTemp);
		var match = false;
		for (var i = 0; i < w_spaces.length; i++) {
			if (ch == w_spaces[i]) {	
				match = true;
				break;			
			} 
		}
		
		if (!match) {
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;

	} //End While
	return strTemp;

} //End Function

function LTrim(VALUE, w_spaces){
	if (w_spaces == undefined || w_spaces == null) {
		w_spaces = [];
		w_spaces.push(String.fromCharCode(32));
	}
//	var w_space = String.fromCharCode(32);
	if(v_length < 1){
		return"";
	}
	var v_length = VALUE.length;
	var strTemp = "";

	var iTemp = 0;

	while(iTemp < v_length){
		var ch = VALUE.charAt(iTemp);
		var match = false;
		for (var i = 0; i < w_spaces.length; i++) {
			if (ch == w_spaces[i]) {	
				match = true;
				break;			
			} 
		}
		
		if (!match) {
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function


function TrimSBCandDBC(TRIM_VALUE){
	if(TRIM_VALUE.length < 1){
		return"";
	}
	TRIM_VALUE = RTrim(TRIM_VALUE, [String.fromCharCode(32), '　']);
	TRIM_VALUE = LTrim(TRIM_VALUE, [String.fromCharCode(32), '　']);
	if(TRIM_VALUE==""){
		return "";
	}
	else{
		return TRIM_VALUE;
	}
} //End Function


//判断是否为<DIV></DIV>包装下的空串
function isEmptyDiv(str) {
	var trim = Trim(str);
	if (trim == "")
		return true;
	var rep = /^<DIV>(&nbsp;<\/DIV><DIV>)*(&nbsp;)*<\/DIV>$/i;
	if (rep.test(trim)) {
		return true;
	}
	else
		return false;

}

function isEmptyContent(str){
	var trim = Trim(str);
	if (trim == "")
		return true;
	//过滤掉所有的p/span/div
	trim = trim.replace(/<\/?(div|p|span|br).*?>/ig, "");
	trim = trim.replace(/(&nbsp;|\s)*/ig, "");
	if(trim == "")
		return true;
	else
		return false;
}

/******************************DOM操作函数******************************/

function removeAllChild(el){
		var firstChild = el.firstChild;
		var curChild = firstChild;
		while(curChild != null){
			el.removeChild(curChild);
			if(isIE)curChild.outerHTML = '';
			curChild = curChild.nextSibling;
		}
}

function insertAfter(parent, node, referenceNode) {
    parent.insertBefore(node, referenceNode.nextSibling);
}

/******************************字符串输入正确性检查******************************/


function testUrl(str){
	var illegalChar = /^(.*)['"‘“<>](.*)$/;
	if (illegalChar.test(str))
		return false;
	else
		return true;
}

function checkMail(str){
	var mail=/^(.+)@(.+)\.(.+)$/;
	if(!mail.test(str))
		return false;
	if(str.indexOf('@') != str.lastIndexOf('@'))	
		return false;
	var illegalChar = /^(.*)['"‘“\/\\<>](.*)$/;
	if (illegalChar.test(str))
		return false;
	else
		return true;
}

//检查日期格式（xxxx-xx-xx）
function checkDateFormat(str) {
	var format = /^\d{4}\-\d{2}\-\d{2}$/;
	if (format.test(str)) 
		return true;
	else 
		return false;
}

//检查生日是否正确，应该小于今天
function checkBirthday(str) {
	var today = new Date();
	var barray = str.split(new RegExp("-", "g"));
	var birthday = new Date(barray[0], barray[1] - 1 , barray[2]);
	if (parseInt(barray[0]) < 1900) {
		return -1;
	}
	if (birthday.getTime() > today.getTime()) {
		return 1;
	}
	else if (birthday.getFullYear() < 1900) {
		return -1;
	}
	else {
		return 0;
	}
}
function _ge(id){
	return document.getElementById(id);
}
//从html代码中提取文本
function extractHtmlText(content) {
	content = content//.replace(/<[^<>]*>/ig,"")
		.replace(/&nbsp;/ig," ")
		.replace(/&lt;/ig,"<")
		.replace(/&gt;/ig,">")
		.replace(/&#039;/ig,"'")
		.replace(/&quot;/ig,"\"")
		.replace(/&amp;/ig,"&");
	return content;
}

//textarea客户端限制最大输入字符数,用法 onkeyup="textareaLimit(this, 250)"
function textareaLimit(field, maxlen){
	if (field.value.length > maxlen) {		
		field.value = field.value.substring(0, maxlen);
		alert("超过最大字数限制" + maxlen +"个! ");
	}
}

//将字符串中的换行转换成页面显示所需要的<br>换行,使用方法str.nlToBr()
String.prototype.nlToBr=function(){return this.trim().nl2br();}
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"");};
String.prototype.nl2br=function(){return this.split("\n").join("<br />\n");};
String.prototype.trimSQ= function(){return this.replace("&#39;","\\\'");};//把esacpe后的单引号转化为转义的单引号
String.prototype.escape=function(){return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g,"&#34;").replace(/'/g,"&#39;");};
String.prototype.js_escape=function(){return this.replace(/\\/g, "\\\\").replace(/'/g, "\\&#39;").replace(/"/g, "\\&#34;");};
String.prototype.escape_freemark=function(){return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g,"&quot;");};
String.prototype.unescape_freemark=function(){return this.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g,"\"");};

//和trimpath冲突，故注掉
//String.prototype.replace=function(_7,_8){return this.split(_7).join(_8);};

//搜索数组
function searchList(el, list){
	var i=0;
	for(i=0; i<list.length; i++){
		if(el == list[i]){
			return true;
		}
	}
	
	return false;
}
//去掉数组中相同的元素，返回去重后的数组
function removeSameEl(list){
	var newList = new Array();
	var i;
	var el;
	
	for(i=0; i<list.length; i++){
		el = list[i];
		if(el != null){
			var data;
			if(!searchList(el, newList)){
				newList.push(el);
			}	
		}
	}
	
	return newList;
}

//在数组指定位置插入元素，position<0插入最前面，大于数组长度插入最后面。前面元素不变，后面的元素后移
function insertShiftAt(list, el, position){
	if(position < 0){
		position = 0;
	}else if(position > list.length){
		positon = list.length;
	}
	var prevList
	var nextList;
	for(i=list.length; i>position ; i--){
		list[i] = list[i-1];
	}
	list[position] = el;
}

//得到事件发生的元素
var _get_event_src=function(e){
	if(e){
		return e.target;
	}
	if(window.event){
		return window.event.srcElement;
	}
	return null;
};

//为对象添加新的css，覆盖原先的某些值
function appendCss(elem, newCss) {
	$(elem).className += " " + newCss; 
}

//删除class属性中列在最后的css
function removeLastCss(elem, oldCss) {
	$(elem).className = $(elem).className.replace(new RegExp(" " + oldCss + "\\b"), ""); 
}

//关联focus事件，使input元素选中时变色
function attachFocusEvent(focusArray, focusCss) {
	focusArray.each(function(E){ 
		if($(E)){
			$(E).onfocus=function(){ 
				this.className += " " + focusCss; 
			} 
			$(E).onblur=function() { 
				this.className=this.className.replace(new RegExp(" *" + focusCss + "\\b"), ""); 
			}
		} 
	});
}

function applySelectCss(id){
	var _htc_select_reg = /\bselitm\b/g;
   	if(window.$$_last_select != null){
   		window.$$_last_select.className = window.$$_last_select.className.replace(_htc_select_reg,"");
    }
    if($(id)){
	    $(id).className += " selitm";
	    window.$$_last_select = $(id);
    }else{
    	window.$$_last_select = null;
    }
}

//关联focus事件，使input元素选中时变色，同时执行focusFunc事件和blurFunc事件，都以this为参数
function attachFocusEvent2(focusArray, focusCss, focusFunc, blurFunc) {
	focusArray.each(function(E){ 
		if($(E)){
			$(E).onfocus=function(){ 
				this.className += " " + focusCss; 
				if(focusFunc != null){
					focusFunc($(E));
				}
			} 
			$(E).onblur=function() { 
				this.className=this.className.replace(new RegExp(" " + focusCss + "\\b"), ""); 
				if(blurFunc != null){
					blurFunc($(E));
				}
			}
		} 
	});
}

function disable(elem) {
	$(elem).disabled = true;
}

function enable(elem) {
	$(elem).disabled = false;
}


 //复制文本内容，用于引用通告选中引用地址
 function copyText(elemId) {
 	ie = (document.all)? true:false
    if (ie){
	 	var rng = document.body.createTextRange(); //列出所有文本对象内容
	 	rng.moveToElementText($(elemId));//移动文本范围以便范围的开始和结束位置能够完全包含给定元素的文本
	 	rng.scrollIntoView();//scrollIntoView 将对象滚动到可见范围内，将其排列到窗口顶部或底部
	    rng.select();//选择
	    rng.execCommand("Copy");//复制
	    rng.collapse(false);
	    return true;
    } else {
    	alert("你的浏览器安全设置不允许自动执行复制操作，请选中文本使用键盘(Ctrl+C)复制！");	
    	return false;
    }
 }
 
 //检测是否安装了正确的flash player 7
 function detectFlash(){
	// Major version of Flash required
	var reqMajorVer = 7;
	// Minor version of Flash required
	var reqMinorVer = 0;
	// Minor version of Flash required
	var reqRevision = 0;
	
 	reqVer = parseFloat(reqMajorVer + "." + reqRevision);
	if (isIE && isWin && !isOpera) {
		versionStr = VBGetSwfVer();
	} else {
		versionStr = JSGetSwfVer();		
	}
	if (versionStr == -1 ) { 
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			tempArray         = versionStr.split(" ");
			tempString        = tempArray[1];
			versionArray      = tempString .split(",");				
		} else {
			versionArray      = versionStr.split(".");
		}
		versionMajor      = versionArray[0];
		versionMinor      = versionArray[1];
		versionRevision   = versionArray[2];
		
		if(versionRevision <= 0 && versionArray.length > 3) 
			versionRevision = versionArray[3];
		
		versionString     = versionMajor + "." + versionRevision;   // 7.0r24 == 7.24
		versionNum        = parseFloat(versionString);
		
    	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) {
			return true;
		} else {
			return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );	
		}
	}	
}
// JavaScript helper required to detect Flash Player PlugIn version information
function JSGetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			descArray = flashDescription.split(" ");
			tempArrayMajor = descArray[2].split(".");
			versionMajor = tempArrayMajor[0];
			versionMinor = tempArrayMajor[1];
			if ( descArray[3] != "" ) {
				tempArrayMinor = descArray[3].split(/\D/);
			} else {
				tempArrayMinor = descArray[4].split(/\D/);
			}
      		versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
      	} else {
			flashVer = -1;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	// Can't detect in all other cases
	else {
		flashVer = -1;
	}
	return flashVer;
}

/******************************获取对象的定位******************************/
//定位函数
function getBrowserPositionX(obj){
	var res = obj.offsetWidth + 5;
	while (obj != null){
		res += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return res;
}

function getBrowserPositionY(obj){
	var res = 0;
	while (obj != null){
		res += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return res;
}


/******************************逗号分隔的字符串的处理******************************/
//把逗号分隔的tag字符串去重，替换英文逗号和去首尾空格，去掉空串
//tag最长18字符，去掉非法字符
function processTagString(tags) {	
	//把中文逗号全替换成英文逗号
	tags = tags.replace(/，/gi, ",").replace(/“/g,"\"").replace(/”/g,"\"");
	tags = tags.toLowerCase();
	//tags = tags.replace(/[&<>"'\/\\]/g, "");
	
	//去重
	var tagList = tags.split(",");
	//去掉首尾的空格
	for (var i = 0; i < tagList.length; i++) {
		tagList[i] = Trim(tagList[i]);
	}
	tagList = removeSameEl(tagList);
	tags = "";
	for (var i = 0; i < tagList.length; i++) {
		if(tagList[i]!=""){
			if (tags!="")
				tags += ",";		
			tags += tagList[i].substring(0,36);
		}
	}

	return tags;
}

//得到tagUserStatistic对象
function getTagObjByTagname(tagName, tagId, tagList){
	for(var i=0; tagId && i<tagList.length; i++){
		if(tagList[i].id == tagId){
			return tagList[i];
		}
	}

	for(var i=0; tagName && i<tagList.length; i++){
		if(tagList[i].tagName==tagName || tagList[i].tagName==tagName.toLowerCase()
			 || tagList[i].tagName==tagName.escape() || tagList[i].tagName==tagName.escape_freemark()){
			return tagList[i];
		}
	}
	
	return null;
}

//直接去尾
function formatnumber(value,num) 
{
	var a,b,c,i
	a = value.toString();
	b = a.indexOf('.');
	c = a.length;
	if (num==0) {
		if (b!=-1) a = a.substring(0,b);
	} else {
		if (b==-1) {
			a = a + ".";
			for (i=1;i<=num;i++) a = a + "0";
		} else {
			a = a.substring(0,b+num+1);
			for (i=c;i<=b+num;i++) a = a + "0";
		}
	}
	return a;
}

function createJST(jstId, jstContent){
	var textarea = document.createElement('textarea');
	textarea.value = jstContent;
	textarea.id = jstId;
	textarea.style.display = 'none';
	document.body.appendChild(textarea);
}

function createJSTAndParse(jstId, jstContent){
	createJST(jstId, jstContent);
	return TrimPath.parseDOMTemplate(jstId);
}

 
function getInputCharsFromDisplayHTML(sHTML){
		var chars = sHTML;
		chars = chars.replace(/<br>/ig, (Browser.isFirefox() ? "\n" : "\r\n"));
		chars = chars.replace(/&lt;/g, "<");
		chars = chars.replace(/&gt;/g, ">");
		chars = chars.replace(/&quot;/g, "\"");
		chars = chars.replace(/&#039;/g, "'");
		chars = chars.replace(/&amp;/g, "&");
		chars = chars.replace(/&nbsp;/g, " ");
		return chars;
}
	
function toHtmlStr(sChars){
		var html = sChars;
		html = html.replace(/&/g, "&amp;");
		html = html.replace(/</g, "&lt;");
		html = html.replace(/>/g, "&gt;");
		html = html.replace(/"/g, "&quot;");
		html = html.replace(/'/g, "&#039;");
		html = html.replace(/ /g, "&nbsp;");
		html = html.replace(/\n/g, "<br>");
		return html;
}

function formatImageUrl(url){
	if(url !=null && url != "-1000")
		return url;
	return Const.STDomain+"/style/common/user_default.png";
}

//显示关键字过滤的提示信息
//返回值：１：发表并备案，２：不发表，备案, -1:禁止发布
function filterWarning(keywordRuntimeEx, needTip, tips) {
	if (keywordRuntimeEx == undefined || keywordRuntimeEx == null ||
		keywordRuntimeEx.type != "KeyWordRuntimeException") {
		return 0;
	}
	if (needTip == undefined || needTip == false) {
		if (tips == undefined || tips == null)
			alert("你发表的内容包含敏感关键字，不允许发布！");
		else
			alert(tips);
		return -1;
	}
	/*
	var ret = keywordRuntimeEx.result.result;
	if (ret == 2) {//warning
		var fields = keywordRuntimeEx.result.warningFields;
		var fieldStr = "";
		for (var i = 0; i < fields.length; i++) {
			fieldStr += "[" + fields[i] + "]";
		}
		if (confirm("你发表的文字内容" + fieldStr + "包含敏感关键字，我们将会记录你的发表记录，是否继续发表？") == true)
			return 1;
		else 
			return 2;
	} else if (ret == 3) {//error
		alert("你发表的内容包含敏感关键字，不允许发布！");
		return -1;
	}*/
	return -1;
}

//验证码错误警告
function captchaWarning(captchaEx, hintid) {
	if (captchaEx == undefined || captchaEx == null ||
			captchaEx.type != "CaptchaException") {
		return false;
	}
	
	showInfo(hintid, "验证码不正确", "error");
	
	return true;
}

//检查其他站点的url
function checkOtherSiteUrl(content) {
	var match = false;
	var index = 0;
	while ((index = content.indexOf("http://")) != -1) {	    			
		var url = content.substring(index + 7);
		var endIndex = url.indexOf("163.com");
		if (endIndex > -1) {
			var j = index;
			while (j < endIndex) {
				var ch = url.charAt(j);
				if (!((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '.')) {
					match = true;
					break;
				} 
				j++;
			}
			// 匹配例如www.music163.com这样的情况
			if (endIndex > 0 && url.charAt(endIndex - 1) != '.') {
				match = true;
				break;
			}
			
			content = url;
		} else {
			endIndex = url.indexOf(".126.net");
			if (endIndex > -1) {
				var j = index;
				while (j < endIndex) {
					var ch = url.charAt(j);
					if (!((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '.')) {
						match = true;
						break;
					} 
					j++;
				}
				
				content = url;
			} else {			
				match = true;
				break;
			}
		}
		
		if (match == true) {
			break;
		}
	}
	return match;
}

/*在输入按钮旁边显示提示信息*/
function showInfo(id, msg, type) {
	var infodiv = document.getElementById(id);
	if (infodiv == null) {
		alert(msg);
		return false;
	}
	
	infodiv.style.display='inline';
	if (type == "ok")
		infodiv.innerHTML = '<img src="/style/common/ico_alert.gif"/>' + msg;
	else if (type == "info")
		infodiv.innerHTML = '<img src="/style/common/ico_alert.gif"/>' + msg;
	else if (type == "error")
		infodiv.innerHTML = '<img src="/style/common/ico_alert.gif"/>' + msg;
	else
		infodiv.innerHTML = '<img src="/style/common/ico_alert.gif"/>' + msg;
	window.setTimeout(
		function () {
			fadeInfo(id);
		}, 5000);
}
function fadeInfo(id) {
	document.getElementById(id).style.display='none';
}


/*
 *noStripTags参数表示不需要过滤的标记的数组
 */ 
function stripData(content, noStripTags){
	var badContent=["head","script","style","object","applet","noscript","frameset","noframes"];
	var badTag = ["form","meta","body","html","label","select","optgroup","option",
				"textarea","title","script", "xmp", "applet","embed","head","frameset",
				"iframe","noframes","noscript","object","style",
				"input","base","basefont","isindex","link","frame","param","xml","xss","st1:chsdate"];
	var badAction = ["on[a-z]+?","disabled","id","name","class"];
	var badCss = ["position","javascript","vbscript","actionscript", "xmp", "activex"];
	var isHarm=false;
	var regStr;
	var reg = new RegExp("(&#(?!039;))|(&%)","ig");	

	if(reg.test(content)){
		//isHarm = true;
		content = content.replace(reg,"&");			
	}
	delete reg;
	reg = new RegExp("(\t)","ig");
	if(reg.test(content)){
		//isHarm = true;
		content = content.replace(reg," ");
	}
	delete reg;
	regStr = "(<[^<>]*)(\r|\n)([^>]*>)";	
	reg = new RegExp(regStr,"ig");
	while(reg.test(content)){
		//isHarm = true;
		content = content.replace(reg,"$1 $3");
		delete reg;	
		reg = new RegExp(regStr,"ig");
	}
	delete reg;
	regStr = "(<[^<>]*)(\\\\|/\\*.*\\*/)([^>]*>)";
	reg = new RegExp(regStr,"ig");
	while(reg.test(content)){
		//isHarm = true;
		content = content.replace(reg,"$1$3");
		delete reg;	
		reg = new RegExp(regStr,"ig");
	}
	delete reg;		
	for(var i=0;i<badContent.length;i++){
		if (findNoStripTag(badContent[i],noStripTags))
			continue;
		regStr="<\\s*"+badContent[i]+"[^>]*>[\\s\\S]*?<\\s*/\\s*"+badContent[i]+"[^>]*>";
		reg = new RegExp(regStr,"ig");
		while(reg.test(content)){
			isHarm = true;
			content = content.replace(reg,"");
			delete reg;
			reg = new RegExp(regStr,"ig");
		}
		delete reg;				
	}
	for(var i=0;i<badTag.length;i++){
		if (findNoStripTag(badTag[i],noStripTags))
			continue;
		regStr="<\\s*[/\?]?\\s*"+badTag[i]+"[^>]*>";
		reg = new RegExp(regStr,"ig");
		while(reg.test(content)){
			isHarm = true;
			content = content.replace(reg,"");
			delete reg;
			reg = new RegExp(regStr,"ig");
		}
		delete reg;				
	}
	for(var i=0;i<badAction.length;i++){
		if (findNoStripTag(badAction[i],noStripTags))
			continue;
		var attrValueStr = "(?:\"[^\"]*?\")|(?:'[^']*?')|(?:[^\\s'\">]+?(?:[\\s'\"]|(?=>)))";
	    regStr = "(<\\s*\\w+\\s*)((\\w+\\s*=\\s*(?:" + attrValueStr + ")\\s*)*?)" + badAction[i] + "\\s*=\\s*(?:" + attrValueStr + ")([^>]*>)";
		//regStr="(<[^<>]*[\\s'\"])"+badAction[i]+"\\s*=\\s*['\"]?\\s*[^'\">]*\\s*['\"]?([^>]*>)";
		reg = new RegExp(regStr,"ig");
		while(reg.test(content)){
			if(badAction[i]!="allowScriptAccess"&&badAction[i]!="allowNetworking")
				isHarm = true;
			content = content.replace(reg,"$1$2$4");
			delete reg;
			reg = new RegExp(regStr,"ig");
		}
		delete reg;		
	}
	for(var i=0;i<badCss.length;i++){
		if (findNoStripTag(badCss[i],noStripTags))
			continue;
		regStr="(<[^<>]*)"+badCss[i]+"\\s*:\\s*[^\\s;\">]*([^>]*>)";
		reg = new RegExp(regStr,"ig");
		while(reg.test(content)){
			isHarm = true;
			content = content.replace(reg,"$1$2");
			delete reg;
			reg = new RegExp(regStr,"ig");
		}
		delete reg;		
	}
	regStr = "(<[^<>]*)expression\\s*\\([^\\)]*\\)([^>]*>)";	
	reg = new RegExp(regStr,"ig");	
	while(reg.test(content)){
		isHarm = true;
		content = content.replace(reg,"$1$2");
		delete reg;
		reg = new RegExp(regStr,"ig");
	}
	delete reg;
	regStr = "(<[^<>]*)url\\s*\\([^\\)]*\\.(js|do)\\s*\\)([^>]*>)";	
	reg = new RegExp(regStr,"ig");	
	while(reg.test(content)){
		isHarm = true;
		content = content.replace(reg,"$1$3");
		delete reg;
		reg = new RegExp(regStr,"ig");
	}
	delete reg;	
	regStr = "(<[^<>]*[\\s'\"])src\\s*=\\s*['\"]?.*?\\.(js|do)(>)";	
	reg = new RegExp(regStr,"ig");	
	while(reg.test(content)){
		isHarm = true;
		content = content.replace(reg,"$1$3");
		delete reg;
		reg = new RegExp(regStr,"ig");
	}
	delete reg;
	regStr = "(<[^<>]*[\\s'\"])src\\s*=\\s*['\"]?.*?\\.(js|do)[\\s'\"]([^>]*>)";	
	reg = new RegExp(regStr,"ig");	
	while(reg.test(content)){
		isHarm = true;
		content = content.replace(reg,"$1$3");
		delete reg;
		reg = new RegExp(regStr,"ig");
	}
	delete reg;	
	var retobj = {};
	retobj.content = content;
	retobj.isHarm = isHarm;
	return retobj;
}

function findNoStripTag(tag,tags){
	if(tags==null || tags=="")
		return false;
	for(var i=0;i<tags.length;i++){
		if(tags[i]==tag)
			return true;
	}
	return false;
}

///////////////////////////base64////////////////////
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
    -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
    -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
//客户端Base64编码
function base64encode(str) {
    var out, i, len;
    var c1, c2, c3;

    len = str.length;
    i = 0;
    out = "";
    while(i < len) {
 c1 = str.charCodeAt(i++) & 0xff;
 if(i == len)
 {
     out += base64EncodeChars.charAt(c1 >> 2);
     out += base64EncodeChars.charAt((c1 & 0x3) << 4);
     out += "==";
     break;
 }
 c2 = str.charCodeAt(i++);
 if(i == len)
 {
     out += base64EncodeChars.charAt(c1 >> 2);
     out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
     out += base64EncodeChars.charAt((c2 & 0xF) << 2);
     out += "=";
     break;
 }
 c3 = str.charCodeAt(i++);
 out += base64EncodeChars.charAt(c1 >> 2);
 out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
 out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
 out += base64EncodeChars.charAt(c3 & 0x3F);
    }
    return out;
}
//客户端Base64解码
function base64decode(str) {
    var c1, c2, c3, c4;
    var i, len, out;

    len = str.length;
    i = 0;
    out = "";
    while(i < len) {
 /* c1 */
 do {
     c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c1 == -1);
 if(c1 == -1)
     break;

 /* c2 */
 do {
     c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c2 == -1);
 if(c2 == -1)
     break;

 out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

 /* c3 */
 do {
     c3 = str.charCodeAt(i++) & 0xff;
     if(c3 == 61)
  return out;
     c3 = base64DecodeChars[c3];
 } while(i < len && c3 == -1);
 if(c3 == -1)
     break;

 out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));

 /* c4 */
 do {
     c4 = str.charCodeAt(i++) & 0xff;
     if(c4 == 61)
  return out;
     c4 = base64DecodeChars[c4];
 } while(i < len && c4 == -1);
 if(c4 == -1)
     break;
 out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
    }
    return out;
}

function setHomePageUtil(url){
//	UserBean.incrPageView("sethomepage", null);
	if(document.all){
		document.body.style.behavior="url(#default#homepage)";
		document.body.setHomePage(url);
	}else{
		alert("浏览器不支持，请手动设置为首页");
	}
	return false;
}

function addFavoriteUtil(url, desc, descOther){
	if(desc==null || desc=="")
		desc = descOther;
//	UserBean.incrPageView("addfavorite", null);
	if (document.all && window.external){
		window.external.AddFavorite(url, desc+"的网易博客");
	}else if (window.sidebar){
		window.sidebar.addPanel(desc+"的网易博客", url, "");
	}else{
		alert("浏览器不支持，请手动加入收藏夹");
	}
}

function toDHTML(str){
	return str.replace(/&/g, '&amp;')
		.replace(/</g, 	'&lt;'	)
		.replace(/>/g, 	'&gt;'	)
		.replace(/"/g, 	'&quot;')
		.replace(/'/g, 	'&#039;')
		.replace(/ /g, 	'&nbsp;')
		.replace(/\n/g, '<br>'	);
}

function fromDHTML(str){
	return str.replace(/&lt;/g, 	'<'	)
		.replace(/&gt;/g, 	'>'	)
		.replace(/&quot;/g, 	'\"')
		.replace(/&#039;/g, 	'\'')
		.replace(/&nbsp;/g, 	' ')
		.replace(/<br>/g, '\n'	)
		.replace(/&amp;/g, '&');
}
//将一个中文字符算两个英文字符,然后按照英文字符长度截断字符,同时保证汉字不会被截一半
function trimStrByEnLength(str,length){
	if (str==null){
		return "null string";
	}
    var i=0;
    var j=0;
    for (i = 0; i< str.length; i++) {     
	     if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) {
	        j=j+2;  
	     }
	     else {
	        j=j+1;
	     }   
	     if (length<j){
	     	break;
	     }
    }  //结束FOR循环
    var counter=i;
    var needTrim=(str.length>counter);
	if (needTrim){
		return str.substr(0,counter)+'...';	
	}
	else{
		return str;
	}    
}
//将一个中文字符算两个英文字符，得到字符串长度
function getStringEnLength(str){
	if (str==null){
		return "0";
	}
    var i=0;
    var j=0;
    for (i = 0; i< str.length; i++) {     
	     if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) {
	        j=j+2;  
	     }
	     else {
	        j=j+1;
	     }   
    }  //结束FOR循环
   return j;
}

//得到元素内部文本部分
function getInnerTextUtil(el){
	var s = el.innerText;
	if(isIE){
		if(s)return s;
	}
	s = el.text;
	if(s)return s;
	
	s = el.innerHTML;
	if(s)return s;
}

/**
 * 生成帮助tips
 */
function constructHelp(obj,tip){
	obj = $(obj);
	var _h = document.createElement("div");
	_h.className = "g_p_left";
	_h.innerHTML='<span class="n_ n51">&nbsp;</span>';
	obj.appendChild(_h);
	var _i = document.createElement("div");
	_i.className = "g_p_left g_w_85 selitm g_c_spdin bd01 g_t_wrap";
	if (!isIE) {
		_i.style.marginLeft = '25px';
	}
	_i.style.width = '150px';
	_i.style.display='none';
	_i.style.position = 'absolute';
	_i.style.fontSize='14px';
	_i.innerHTML= tip;
	obj.appendChild(_i);
	_h.onmouseover = function(){_i.style.display='block';};	
	_h.onmouseout  = function(){_i.style.display='none';};
	delete _h;delete _i;
}

function constructProfileHelp(obj,tip){
	obj = $(obj);
	var _i = document.createElement("div");
	_i.className = "g_p_left selitm g_c_spdin bd01 g_t_wrap";
	if (!isIE) {
		_i.style.marginLeft = '25px';
	}
	_i.style.width = '110px';
	_i.style.display='none';
	_i.style.position = 'absolute';
	_i.style.fontSize='12px';
	_i.innerHTML= tip;
	obj.appendChild(_i);
	obj.onmouseover = function(){_i.style.display='block';};	
	obj.onmouseout  = function(){_i.style.display='none';};
	delete _i;
}
/**
 * 自动滚屏到某个位置
 * */
function simpleScrollTo(){
	var scrollTarget;
	scrollTarget=arguments.length>0?arguments[0]:'layout_ctrl';
	if(scrollTarget==null)return;
	new Effect.ScrollTo(scrollTarget);
}

function listenMusic(name,author,url,lrc,wapId,music){
	if(music !=null && music.userName!=null && music.id!=null){
		window.open("http://"+DomainMap.getParentDomain(music.userName)+"/m/?t=3&mid="+encodeURIComponent(music.id)+"&aid="+encodeURIComponent(music.albumId),"_blank","resizable=no,scrollbars=no,status=yes,width=772px,height=595px");
	}else{
		window.open("http://blog.163.com/m/?t=2&n="+encodeURIComponent(name)+"&a="+encodeURIComponent(author)+
					"&w="+encodeURIComponent(wapId)+"&l="+base64encode(encodeURIComponent(lrc))+"&u="+base64encode(encodeURIComponent(url)),"_blank","resizable=no,scrollbars=no,status=yes,width=772px,height=595px");
	}
}

function g_previewImg(id,target){
	try{
		$(target).src = $(id).value;
	}catch(ex){}		
}

function g_loadingBar(style){
	return '<p style="'+style+'"><img style="vertical-align:middle;" src="'+Const.STDomain+'/style/common/loading.gif" />&nbsp;&nbsp;&nbsp;数据加载中。。。<p>';
}

function g_setInnerHTML(node, html) {
	var d = document.createElement("div");
	d.innerHTML = html;
	for(var i= node.childNodes.length - 1; i>=0; i--){
		node.removeChild(node.childNodes[i]);
	}
	for(var i= d.childNodes.length - 1; i>=0; i--){
		node.appendChild(d.childNodes[i]);
	}
}

function dynamic_load_javascript(jsurl, onload)
{
    var head = document.getElementsByTagName('head').item(0);
    var script = document.createElement('script');
    jsurl = jsurl.replace(/\*/g,'&');
    script.src = jsurl.replace(/\(([\w]+)\)/g,function(e){return UD[e.substring(1,e.length-1)];});
    script.type = 'text/javascript';
    if(onload) {
    	if(Browser.isIE())
	    	script.onreadystatechange = function(_script, _onload){
	    		if(_script.readyState == "loaded" || _script.readyState == "complete") {
		    		_onload();
		    	}
	    	}.bind(this, script, onload);
    	else
	    	script.onload = onload;
    }
    head.appendChild(script);
}

//得到url里面的参数
function getUrlParam(key){
		var params = {};
		var s = window.location.search;
		if(s){
			s = s.replace(/^\?/,'').replace(/\/$/,'');
			var ps = s.split('&');
			var t;
			for(var i=0;i<ps.length;i++){
				t = ps[i].split('=');
				params[t[0]] = t[1] || '';
			}
		}
		return params[key];
}
