var Browser={};
Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
Browser.isIE = window.ActiveXObject ? true : false;
Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
Browser.isSafari = (navigator.userAgent.toLowerCase().indexOf("safari")!=-1);
Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
function $(Element){
	return document.getElementById(Element);
}
var Tobj = new Object();
Tobj.addEvent = function( obj, type, fn ) {
    if ( obj.attachEvent ) {		
      obj['e'+type+fn] = fn;
      obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
      obj.attachEvent( 'on'+type, obj[type+fn] );
    } else {
      obj.addEventListener( type, fn, false );
    }
};

Tobj.addEvent(window,"load",onloadaction);

function onloadaction() {
	thisurl=String(this.location);
	if (thisurl.indexOf("#") > -1){
		var thisurlcache = thisurl.split("#");
		thisurl=thisurlcache[0];
	}
	jsget("commenttemplet","/comment/comment_templet.js");
}
function xmlget(url){
	if (window.XMLHttpRequest){
		xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET",url,false)
		xmlhttp.send(null);
	}else if (window.ActiveXObject){
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		xmlhttp.open("GET",url,false)
		xmlhttp.send(null);
	}
	if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
		return xmlhttp.responseXML; 
	}else{ 
		return false;
	}	
}

function htmlget(url){
	if (window.XMLHttpRequest){
		htmlHttp = new XMLHttpRequest();
		htmlHttp.open("GET",url,false)
		htmlHttp.send(null);
	}else if (window.ActiveXObject){
		htmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		htmlHttp.open("GET",url,false)
		htmlHttp.send(null);
	}
	if (htmlHttp.readyState == 4 && htmlHttp.status == 200){ 
		return htmlHttp.responseText; 
	}else{ 
		return false;
	}
}

function jsget(tname,turl){
	var s = document.createElement("script");
	document.getElementsByTagName("head")[0].appendChild(s);
	s.onload=eval(tname+"Succ");
	s.onerror=eval(tname+"Err");
	s.onreadystatechange=function(){
		if(s.readyState!="loaded") return;
		try{
			eval(tname+"Succ")()
		} catch(e) {
			eval(tname+"Err")()
		};
	}
	s.type="text/javascript";
	s.src=turl;
}

String.prototype.getCode=function getCode(tag){
	var templetHTML = this;
	templetHTML=templetHTML.replace(/[\t\n\r]/g,"");
	var re = new RegExp('\<!--[ \t]*' + tag + '开始--\>(.+?)\<!--[ \t]*' + tag + '结束--\>','ig');//By Newskyline 2006-12-01
	templetHTML = templetHTML.match(re,"$1");
	if(templetHTML==this){
		return '';
	}else{
		return RegExp.$1;
	}
}

String.prototype.inCode=function getCode(tag,str){
	var templetHTML = this;
	templetHTML=templetHTML.replace(/[\t\n\r]/g,"");
	var re = new RegExp('\<!--[ \t]*' + tag + '开始--\>(.+?)\<!--[ \t]*' + tag + '结束--\>','ig');//By Newskyline 2006-12-01
	templetHTML = templetHTML.match(re,"$1");
	templetHTML=this.replace(RegExp.$1,str);
	if(templetHTML==this){
		return '';
	}else{
		return templetHTML;
	}
}

Array.prototype.remove = function(index){
	if (typeof index == "undefined" || typeof index != "number"){
		return;
	}
	var fArray = this.slice(0,index);
	var bArray = this.slice(index+1,this.length);
	return [].concat(fArray,bArray)
}

function commenttempletSucc(){
	commentpagenow=1;
	commentnum=50;//30的基数
	try{
		jsget("CommentJson","/comment/comment_data_js.php?pagelink="+thisurl+"&page="+commentpagenow+"&randomkey="+UTCTime());
	}catch(e){
		document.getElementById("comment").innerHTML="对不起，评论模板加载失败";
	}
}

function commenttempletErr(){
	document.getElementById("comment").innerHTML="对不起，评论模板加载失败";
}
function MakePage(commentpagenow,commentpagemax){
	var str='<div class="all">PAGE:'+commentpagenow+'/'+commentpagemax+'</div>'
	str+='<div class="each">'
	if (commentpagenow!=1) str+=' <a href="#the_net_comment" onclick="pagechange('+(commentpagenow-1)+');return false;">&lt;</a> '
	for (var i=0;i<commentpagemax;i++){
		if (commentpagenow==(i+1)){
			str+=' <span class="now">'+(i+1)+'</span> '
		}else{
			str+=' <a href="#the_net_comment" onclick="pagechange('+(i+1)+');">'+(i+1)+'</a> '
		}
	}
	if (commentpagenow!=commentpagemax) str+=' <a href="#the_net_comment" onclick="pagechange('+(commentpagenow+1)+');return false;">&gt;</a> '
	str+='</div>'
	$("commentpage").innerHTML=str;	
	$("commentpage").style.display="block";
};
function pagechange(commentgo){
	var pagego = Math.floor((commentgo - 1) / 3) + 1;
	if (pagego == pagenow) {
		commentpagedata = commentdata.Clone();
		commentgonum = ((commentgo - 1) % 3) * commentnum;
		commentpagedata.rss.channel.item.splice(0, commentgonum);
		fillDIV("comment", commentpagedata, commentHttp, commentnum);
		MakePage(commentgo, commentpagemax)
	}
	else {
		try {
			jsget("comment.json", "/comment/comment_data_js.php?pagelink=" + thisurl + "&page=" + pagego + "&randomkey=" + UTCTime())
		} 
		catch (e) {
			$("comment").innerHTML = "对不起，评论数据加载失败"
		};
		$("top").innerHTML = ("/comment/comment_data_js.php?pagelink=" + thisurl + "&page=" + pagego + "&randomkey=" + UTCTime());
		commentpagenow = commentgo
	}
}
function submitcomment(){
    var comment_title=$("comment_title").value;
    var comment_link=thisurl;
    var comment_author=$("comment_author").value;
    var comment_mood=""//document.getElementById("comment_mood").value;
    var comment_guid=$("comment_guid").value;
    var comment_description=$("comment_description").value;
    var comment_reply=$("comment_reply").value;
    var xmlhttp;
	if (comment_title=="") {
		alert("请输入您的名字。");
		$("comment_title").focus();
		return false;
	}
	if (comment_author=="" || !comment_author.isEmail){
		alert("请输入正确的邮箱地址。");
		$("comment_author").focus();
		return false;
	}
	if (comment_description==""){
		alert("请输入您要发表的评论。");
		$("comment_description").focus();
		return false;
	}
	if (window.XMLHttpRequest){
		xmlhttp = new XMLHttpRequest();
		xmlhttp.open("post","/comment/comment_add.php", true);
	}else if (window.ActiveXObject){
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		xmlhttp.open("post","/comment/comment_add.php", true);
	}
    xmlhttp.onreadystatechange=function(){
    	if (4==xmlhttp.readyState && 200==xmlhttp.status){
			var date=xmlhttp.responseText;
			try{jsget("CommentJson","/comment/comment_data_js.php?pagelink="+thisurl+"&randomkey="+UTCTime());}catch(e){$("comment").innerHTML="对不起，评论数据加载失败";}
			$("comment_submit").disabled="";
		}else{
			return false;
		}
	}
	xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	xmlhttp.send("comment_title="+comment_title+"&comment_link="+comment_link+"&comment_author="+comment_author+"&comment_mood="+comment_mood+"&comment_guid="+comment_guid+"&comment_description="+comment_description+"&comment_reply="+comment_reply);
	$("comment_submit").disabled="disabled";
	return false;
}
function commentreply(id){
	var citename=$("cm_"+id+"_name").innerHTML;
	citename=String(citename).replace("&nbsp;"," ");
	var citeemail=$("cm_"+id+"_email").innerHTML;
	var citedescription=String($("cm_"+id+"_description").innerHTML);
	citedescription=citedescription.replace(/<cite>((.|\n|\r)*)<\/cite>/g,"[cite]$1[/cite]");
	citedescription=citedescription.replace(/<cite>((.|\n|\r)*)<\/cite>/g,"[cite]...[/cite]");
	citedescription=citedescription.replace(/<br>/gi,"\r").replace(/&nbsp;/gi," ").replace(/<strong[^>]*>(.*?)<\/strong[^>]*>/ig,"[strong]$1[/strong]").replace(/&gt;/gi,">").replace(/&lt;/gi,"<"); 
	$("comment_description").value='[cite][strong]'+citename+':[/strong]\r'+citedescription+'[/cite]\r';
	$("comment_description").focus();
}
function CommentJsonSucc(){
	try{
		pagenow=objSelectSingleNode(commentdata,"/rss/channel/page");
		pagemax=objSelectSingleNode(commentdata,"/rss/channel/pagemax");
		commentpagemax=Math.floor((objSelectSingleNode(commentdata,"/rss/channel/commentmax")-1)/commentnum)+1;
		commentHttp = commenttmp.getCode("评论");
		var nodelength=objSelectNodes(commentdata,"/rss/channel/item").length;
		for (var i=0;i<nodelength;i++){//引用预处理
			commentdata.rss.channel.item[i].description=commentdata.rss.channel.item[i].description.replace(/\[cite\]/gi,"<cite>").replace(/\[\/cite\]/gi,"</cite>").replace(/\[strong\]/gi,"<strong>").replace(/\[\/strong\]/gi,"</strong>"); 
		}
		commentpagedata= commentdata.Clone();
		if(commentpagenow%3!=1){
			commentgonum=((commentpagenow-1)%3)*commentnum;
			commentpagedata.rss.channel.item.splice(0, commentgonum);
		}
		if(objSelectSingleNode(commentdata,"/rss/channel/item")!=null){
			fillDIV("comment",commentpagedata,commentHttp,commentnum);
			if (commentpagemax>1) MakePage(commentpagenow,commentpagemax);
		}else{
			fillDIV("comment",commentdata,commentHttp,commentnum);
		}
		$("commentform").onsubmit=function(){submitcomment();return false;}
	}catch(e){
		document.getElementById("comment").innerHTML="对不起，评论数据加载失败";
	}
}

function CommentJsonErr(){
	document.getElementById("comment").innerHTML="对不起，评论数据加载失败";
}

function UTCTime(){
   var d, s = "";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}
// check for XPath implementation Optimize By EMU
if(!Browser.isIE){
// prototying the Element
	Element.prototype.selectNodes = function(cXPathString){
		if(this.ownerDocument.selectNodes){
			return this.ownerDocument.selectNodes(cXPathString, this);
		}else{
			throw "For XML Elements Only";
		}
	}
// prototying the Element
	Element.prototype.selectSingleNode = function(cXPathString){
		if(this.ownerDocument.selectSingleNode){
			return this.ownerDocument.selectSingleNode(cXPathString, this);
		}else{
			throw "For XML Elements Only";
		}
	}
}

if(Browser.isFirefox){
// prototying the XMLDocument
	XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; }
		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++){
			aResult[i] = aItems.snapshotItem(i);
		}
		return aResult;
	}
// prototying the XMLDocument
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; }
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){
			return xItems[0];
		}else{
			return null;
		}
	}
// prototying the insertAdjacentHTML
	HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
		var df;  var r = this.ownerDocument.createRange();
		switch (String(sWhere).toLowerCase()) {
			case "beforebegin":
			r.setStartBefore(this);
			df = r.createContextualFragment(sHTML);
			this.parentNode.insertBefore(df, this);
			break;
			case "afterbegin":
			r.selectNodeContents(this);
			r.collapse(true);
			df = r.createContextualFragment(sHTML);
			this.insertBefore(df, this.firstChild);
			break;
			case "beforeend":
			r.selectNodeContents(this);
			r.collapse(false);
			df = r.createContextualFragment(sHTML);
			this.appendChild(df);
			break;
			case "afterend":
			r.setStartAfter(this);
			df = r.createContextualFragment(sHTML);
			this.parentNode.insertBefore(df, this.nextSibling);
			break;
		}
	}
}

if(Browser.isOpera){
// prototying the Document
	Document.prototype.selectNodes = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; }
		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++){
			aResult[i] = aItems.snapshotItem(i);
		}
		return aResult;
	}
// prototying the Document
	Document.prototype.selectSingleNode = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; }
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){
			return xItems[0];
		}else{
			return null;
		}
	}
}

function getTextByClassName(obj,cName){
	var str = obj.innerHTML;
	if (Browser.isIE) var re = new RegExp("<\\w[^>]+class="+cName+"[^>]*>(.*?)<\\/\\w[^>]*>","ig")
	else var re = new RegExp('<\\w[^>]+class="'+cName+'"[^>]*>(.*?)<\\/\\w[^>]*>',"ig")
	var arrReturn = [];
	while ((arr = re.exec(str)) != null)
	arrReturn.push(arr[1]);
	return arrReturn;
}
Object.prototype.Clone = function(){
    var objClone;
    if ( this.constructor == Object ) objClone = new this.constructor(); 
    else objClone = new this.constructor(this.valueOf()); 
    for ( var key in this ){
        if ( objClone[key] != this[key] ){ 
            if ( typeof(this[key]) == 'object' ){ 
                objClone[key] = this[key].Clone();
            }else{
                objClone[key] = this[key];
            }
        }
    }
    objClone.toString = this.toString;
    objClone.valueOf = this.valueOf;
    return objClone; 
}

String.prototype.toUC = function(){
	var leftword=this.Left(1);
	var rightword=this.Right(this.length-1);
	leftword=leftword.toUpperCase()
	return (leftword+rightword);
}
String.prototype.isEmail = function(){
	return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(this);
}
String.prototype.Left = function(len){
	if(isNaN(len)||len==null){
		len = this.length;
	}else{
		if(parseInt(len)<0||parseInt(len)>this.length){
			len = this.length;
		}
	}	
	return this.substr(0,len);
}
String.prototype.Right = function(len){
	if(isNaN(len)||len==null){
		len = this.length;
	}else{
		if(parseInt(len)<0||parseInt(len)>this.length){
			len = this.length;
		}
	}	
	return this.substring(this.length-len,this.length);
}

/*
仅以此JS文件向僵尸王EMU致敬！
任何人等使用、派生、转载此文档不包含此标注信息将受到全中国JS写手之唾弃！
*/

// json支持
function objSelectNodes(obj,oPath){
	if(/^\//.test(oPath)) oPath = oPath.substr(1);
	var a = oPath.split("/");
	var p = a.shift();
	var r=/(\w+)\[@(\w+)='?"?([^'"\]]*)'?"?\]/
	if(r.test(p)){
		p=p.match(r);
		p.shift();
	}else{
		p=[p]
	}
	var o = obj[p[0]];
	if(!o) return [];
	if(!o.sort) o = [o];
	if(p.length>0){
		var tmpar = [];
		for(var i=0;i<o.length;i++){
			if(o[i][p[1]]==p[2])
			tmpar[tmpar.length]=o[i];
		}
		o=tmpar;
	}
	if(a.length==0)	return o;
	var subPath = a.join("/");
	var result = [];
	for(var i=0;i<o.length;i++){
		var a = objSelectNodes(o[i],subPath);
		if(a && a.length>0)
			result = result.concat(a)
	}
	return result;
}

function objSelectSingleNode(obj,oPath){
	var o = objSelectNodes(obj,oPath);
	return (o.length>=1)?(o[0]):(null);
}


function obj2str(o){
	var r = [];
	if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
	if(typeof o == "object"){
		if(!o.sort){
			r[0]="{"
			for(var i in o){
				r[r.length]=i;
				r[r.length]=":";
				r[r.length]=obj2str(o[i]);
				r[r.length]=",";
			}
			if(!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)){
				r[r.length]="toString:"+o.toString.toString();
				r[r.length]=",";
			}
			r[r.length-1]="}"
		}else{
			r[0]="["
			for(var i =0;i<o.length;i++){
				r[r.length]=obj2str(o[i]);
				r[r.length]=",";
			}
			r[r.length-1]="]"
		}
		return r.join("");
	}
	return o.toString();
}

var r_index = /<%=index%>/g
var r_text = /<%=text%>/g
var r_attribute_global = /<%=@(\w+)%>/g
var r_attribute = /<%=@(\w+)%>/

function fillDIV(divId,xDoc,tHtml,limit,display){
	var div = document.getElementById(divId);
	if (!div) {alert("指定的模版容器不"+divId+"存在");return;}
	var templetHTML;
	if(tHtml){
		div.oldHTML=tHtml;
	}
	if (div.oldHTML) {
		templetHTML = div.oldHTML;
	}else{
		templetHTML = div.oldHTML = div.innerHTML;
	}
	templetHTML = templetHTML.replace(/\[%/g,"<%").replace(/%\]/g,"%>")
		.replace(/\{%/g,"<%").replace(/%\}/g,"%>").replace(/\<!--%/g,"<%")
		.replace(/%-->/g,"%>").replace(/\/\*%/g,"<%").replace(/%\*\//g,"%>");

     var reExp = /\(%(.[^\)]*)%\)/
	 var r
	 while ((r = reExp.exec(templetHTML))!=null )
	 {
        templetHTML=templetHTML.replace(reExp,eval(r[1]))
	 }
	div.innerHTML = doFill(templetHTML,xDoc,0,limit);
	div.style.display = display?"none":"block"
}
function doFill(templetHTML,xDoc,xLevel,limit){
	var isXML = !!xDoc.xml;
	var stRegPrefix = "<%repeat_"+xLevel+"\\s*match=\"([^\"]+)\"[^%]*%>";
	var stRegContent = "<%repeat_"+xLevel+"[^>]*%>((.|\\n)+)<%_repeat_"+xLevel+"%>";

	var r_repeat_match = new RegExp(stRegPrefix);
	var r_repeat_match_global = new RegExp(stRegPrefix,"g");
	var r_repeat_content = new RegExp(stRegContent);
	var r_repeat_match_next_level = new RegExp("<%repeat_"+(xLevel+1)+" match=\"([^\"]+)\"");
	if (templetHTML.match(r_repeat_match)==null){
		alert("没有找到节点<!--%repeat_"+(xLevel)+"%-->");
		return;
	}

	var arPrefix = templetHTML.match(r_repeat_match_global);
	var startPosition = 0;
	for (var i=0;i<arPrefix.length;i++){
		var st = arPrefix[i];
		var nodePath = st.replace(/^.*match=\"|\".*$/g,""); //获得xml节点路径
		if (st.indexOf("callback")>0)
			var fnCallBack = eval(st.replace(/^.*callback=\"|\".*$/g,"")); //获得回调函数
		startPosition = templetHTML.indexOf(st);
		var endPosition = templetHTML.indexOf("<%_repeat_"+xLevel+"%>",startPosition);
		var replaceContent = templetHTML.substring(startPosition,endPosition+13)
		startPosition += st.length;
		var repeatContent = templetHTML.substring(startPosition,endPosition).replace(/\x0a|\x09/g,""); //获得内容模板
		var nodes = isXML?xDoc.selectNodes(nodePath):objSelectNodes(xDoc,nodePath); //获得xml节点点
		if (st.indexOf("repeat_num")>0){
			//获得该段循环次数
			var	repeatTimes = (st.replace(/^.*repeat_num=\"*|\".*$/g,"")); 
		}else{
			var	repeatTimes=nodes.length;		
		}
		if(limit!=null){
			var	repeatTimes=limit;	
		}
		if(repeatTimes==0 || nodes.length<repeatTimes){//但最大不得超过XML结点数
			repeatTimes=nodes.length;
		}
		var arContent = [];
		var attributes = repeatContent.match(r_attribute_global);
		if (attributes == null) attributes = [];
		for (var j=0;j<repeatTimes;j++){
			var node = nodes[j];
			var content = repeatContent;
			if (repeatContent.match(r_repeat_match_next_level)!=null) //处理子节点
				content = doFill(repeatContent,node,xLevel+1)
			var s = content.replace(r_index,(j+1)).replace(r_text,isXML?node.text:node);
			for (var k=0;k<attributes.length;k++){
				var attrTag = attributes[k].replace(/\W/g,"");
				var attrValue = isXML?nodes[j].getAttribute(attrTag):nodes[j][attrTag];
				if (attrValue==null && isXML && nodes[j].selectSingleNode(attrTag)!=null)
					attrValue = nodes[j].selectSingleNode(attrTag).text;
				if (attrValue==null) attrValue = "";
				s = s.replace(attributes[k],attrValue);
			}
			arContent[j] = s;
			if (fnCallBack) fnCallBack(node,arContent,j);
		}
		templetHTML = templetHTML.replace(replaceContent,arContent.join(""));
	}
	return templetHTML;
}