/**
 * @author 海量
 * 海量延伸阅读嵌入js代码
 */

//延伸阅读JS的所有配置项在此更改
function HLRelationConfig()
{
	//必须修改项：是否允许记录用户点击日志，及记录日志的apache的http地址（必须是外网地址）
	this.m_bAllowClickLog = true;
	this.m_strClickLogSvr = 'http://ClickSvrApacheUrl/';
	
	//必须修改项：HLRes文件夹的网络访问路径，此设置影响下面三个文件路径
	//例：http://50.25.14.36:8080/RelationWebDemo/
	var m_ResPathPrefixal = 'http://210.82.31.23/RelationWebDemo/';
	
	//包含需要的css，如果不使用默认的5套模板，此行可删掉
	//document.write('<link href="' + m_ResPathPrefixal + 'HLRes/HLRelation.css" rel="stylesheet" type="text/css" />');
	document.write('<link href="./text-ysyd.css" rel="stylesheet" type="text/css" />');
	//等待gif动画的路径
	this.m_strWaitGifFile	= m_ResPathPrefixal + 'HLRes/wait.gif';
	// 服务端脚本文件的路径
	this.m_strSvrFile		= m_ResPathPrefixal + 'HLRes/HLRelationSearch.jsp';


	//获取网页的标题
	this.m_strUrl			= document.URL;	
	//取出网页中第一组h1标签下的标题文本，没有h1标题的时候，取网页标题，可根据客户网页情况修改
	this.m_strTitle 		= (document.getElementsByTagName("h1")[0])?document.getElementsByTagName("h1")[0].innerHTML:document.title;
	
	//延伸阅读要嵌入的div的定位标识
	//（id定位）例：<div id="hl-RelationDiv"></div>
	this.m_strRelationDivId	= 'hl-RelationDiv'; 	
	//要嵌入html页面的div代码（可以根据页面情况改为ul或其他标签，或添加class属性）
	this.m_strRelationDivHtml = '<div id="' + this.m_strRelationDivId + '"></div>';
	//全局屏蔽功能:屏蔽显示延伸阅读区域的div的定位标识
	//（id定位）例:<div id="hl-HideRelation"></div>
	this.m_strHideSignDivId	= 'hl-HideRelation'; 	


	//页面展示效果相关参数
	
	//demo页面显示类型 可选：1-5
	//默认显示效果2、3、5，会强制指定"this.m_nField"的设定值为4（需要摘要）
	this.m_strShowType 		= '1';
	//主div宽度（显示效果4、5的情况下推荐350px，请自行调节）
	this.m_strMainBoxWidth	= '600px';
	//显示时标题最大字数限制(置0为不限制)
	//（js截取字数,单位：汉字字数。两个字母或数字相当于一个汉字）
	this.m_nMaxTitleLen		= 20;
	//日期格式
	this.m_strOutDateFormat	= 'yyyy-MM-dd hh:mm';		
	//是否将置顶的资讯标题变红
	this.m_bIsMakeTopRed		= true;


	//服务器搜索参数（填入-1则使用服务器默认值）
	//需要的结果条数
	this.m_nRecordCnt	= 10;
	//需要哪个频道内的延伸阅读结果(在网关配置的频道编号)
	this.m_nChannel 	= -1;
	//排序方式:相关度排序=1, 时间排序=2, 最近时间优先排序=3, 新型时间排序=4（推荐此效果）
	this.m_nOrderBy		= 4;
	//需要哪些额外字段:正文 = 2, 摘要 = 4, 扩展字段 = 8  可叠加：6=正文+摘要
	//默认-1为不需要额外字段，但默认显示效果2、3、5，会强制指定为4（需要摘要）
	this.m_nField		= -1;
	//摘要字数下限(单位：字节，一个汉字=两个字节；范围[0,上限])
	this.m_nAbsLenLow 	= 120;		
	//摘要字数上限(单位：字节；范围[下限,300])
	this.m_nAbsLenHigh 	= 150;	
	//检索命令默认编码 可选：'UTF-8'或'GBK',一般无需改动
	this.m_strLangCode	= 'UTF-8';
	
	
	//是否使用post方式发送命令（false:Get方式，无跨域问题；true:Post方式，不可跨域）
	this.m_bIsPostCmd	= false;
	//发送给服务器的汉字长度限制：Get方式最大设置100，Post方式可以传输更长的文字，但建议请不要超过1000
	//字数限制设置超过100时js会自动改用Post方式，而无视m_bIsPostCmd参数
	//设置为0则为无限制，且强制Post方式
	this.m_nTextLimit	= 100;
	
	//存住自身指针，供后面函数内使用
	var _this = this;	
	
	//获取比标题更长的文本，供二次请求使用，须根据用户网页手动修改，此为较通用版本
	//原理：获取全部<p>元素内部的文字，进行简单的html过滤（取出“<>”内所有文字）后，和标题拼接
	_this.m_strText	= '';
	_this.GetReqText = function()
	{
		var allp = document.getElementsByTagName("p");
		var strTextT = '';
		for (var i=0; i<allp.length; i++)
		{
			//	if(allp[i].className='content')
			strTextT += allp[i].innerHTML.replace(/<.*?>/g,'');		
			if(	_this.m_nTextLimit != 0 && strTextT.length > _this.m_nTextLimit)
			{//获取到足够字数的文字后结束
				break;
			}
		}
		//文字整理
		strTextT = strTextT.replace(/[。\n][。\s\n]*/g,'。');
		//拼接标题
		strTextT = _this.m_strTitle + '。' + strTextT;
		//注：发送给服务器的文字内容会在strTextT基础上截取 m_nTextLimit 个汉字
		return strTextT;
	}
	
	//显示效果相关的模板，可以自行修改显示效果
	
	//强制指定需要字段，自行修改模板后可删除这行
	if(_this.m_strShowType == '2' || _this.m_strShowType == '3' || _this.m_strShowType == '5') _this.m_nField = 4;
	
	//等待条
	_this.m_strWaitHtml = '<div class="hl-RelationBox hl-RelationWaitWord" style="width:'+_this.m_strMainBoxWidth+';" ><img src="' + _this.m_strWaitGifFile + '" /><br><br>请等待...</div>';
	
	//选择两种demo的标题和边框效果(延伸阅读列表的外圈边框)
	_this.GetHeadTemplate = function()
	{
		var str = '';
		//最内圈定位id，在其中嵌入延伸阅读的body部分
		_this.m_strBodyDivId = 'hl-ShowRelation';
		//为不同的channel值增加不同的后缀，一般无需改动
		_this.m_strBodyDivId += _this.m_nChannel == -1 ? '' : _this.m_nChannel;
		if(_this.m_strShowType == '4' || _this.m_strShowType == '5'){//目前第4和第5个提供蓝色边框的效果
			str		=	'<div class="hl-RelationBox" style="width:'+_this.m_strMainBoxWidth+';" >';
			str		+=	'<div class="hl-RelationHead" ><span class="hl-RelationHeadTitle">延伸阅读</span></div>';
			str		+=	'<div class="hl-RelationBody"><ul id="' + _this.m_strBodyDivId + '" class="hl-Ul hl-Ul-'+_this.m_strShowType+'"></ul></div>';
			str		+=	'</div>';
		}else{//第1至第3个展示的无边框效果

			/*str		=	'<div class="hl-RelationBox" style="width:'+_this.m_strMainBoxWidth+';" >';
			str		+=	'<div class="hl-RelateTitle">延伸阅读</div>';
			str		+=	'<div class="hl-RelationBody"><ul id="' + _this.m_strBodyDivId + '" class="hl-Ul hl-Ul-'+_this.m_strShowType+'"></ul></div>';
			str		+=	'</div>';*/
			str = '<div class="right-item1" >';
			str +='<h1><a>延伸阅读</a> >></h1>';
			str +='<ul id="' + _this.m_strBodyDivId + '" ></ul>';
			str +='</div>'
		}
		
		//不需要外圈边框时，可以如此改写
		/*
			_this.m_strBodyDivId = _this.m_strRelationDivId;
			str = '';
		*/
		return str;
	}
	
	//选择5种demo的内容展示效果，嵌入时可以根据需要删减无用的case段
	//占位符含义请参考使用手册
	_this.GetBodyTemplate = function()
	{
		_this.m_regNoAbs = null;
		var strTemplate = '';
		switch(_this.m_strShowType){
			case '1':
				//		效果样式如下
				//		# 频道 图文-康师傅主场击败金德 曹阳威风八面立下头功  腾旬新闻 2000-04-05 04:33
				/*strTemplate +=	'<li class="hl-Li">';
				strTemplate +=	'<span class="hl-Channel">#attr_channelName</span>&nbsp;';
				strTemplate	+=	'<a #clickAction class="hl-Cite" style="#topSign" href="#attr_url" target="_blank">#attr_title</a>';
				strTemplate +=	'&nbsp;<span class="hl-TextRef">#attr_from</span>';
				strTemplate +=	'&nbsp;<span class="hl-Date">#attr_date</span>';
				strTemplate +=	'</li>';*/
				strTemplate +='<li><a href="#attr_url" target="_blank">#attr_title</a></li>';	
				break;
			case '2':
				//		# 图文-康师傅主场击败金德 曹阳威风八面立下头功  2000-04-05 04:33
				//			摘要...
				strTemplate +=	'<li class="hl-Li">';
				strTemplate +=	'<a #clickAction class="hl-Cite hl-StrongBlack" style="#topSign" href="#attr_url" target="_blank">#attr_title</a>';
 				strTemplate +=	'&nbsp;<span class="hl-Date">#attr_date</span>';
 				strTemplate +=	'<p class="hl-Abs">#attr_abs</p>';
				strTemplate +=	'</li>';
				//没有摘要时要删掉的部分，比如此处是<p class="hl-Abs"></p>，代码后面会执行 replace(m_regNoAbs,'')，为null是不执行replace
				_this.m_regNoAbs = '<p class="hl-Abs"></p>'; 
				break;
			case '3':
				//		# 频道 图文-康师傅主场击败金德 曹阳威风八面立下头功  腾旬新闻 2000-04-05 04:33 
				//			摘要...
				strTemplate +=	'<li class="hl-Li">';
 				strTemplate +=	'<span class="hl-Channel">#attr_channelName</span>&nbsp;';
 				strTemplate +=	'<a #clickAction class="hl-Cite hl-StrongRed" style="#topSign" href="#attr_url" target="_blank">#attr_title</a>';
 				strTemplate +=	'&nbsp;<span class="hl-TextRef">#attr_from</span>';
 				strTemplate +=	'&nbsp;<span class="hl-Date">#attr_date</span>';
 				strTemplate +=	'<p class="hl-Abs">#attr_abs</p>';
				strTemplate +=	'</li>';	
				_this.m_regNoAbs = '<p class="hl-Abs"></p>'; 
				break;
			case '4':
				//		#  图文-康师傅主场击败金德 曹阳威风八面立下头功  
				strTemplate +=	'<li class="hl-Li">';
				strTemplate +=	'<a #clickAction class="hl-Cite" style="#topSign" href="#attr_url" target="_blank">#attr_title</a>';
				strTemplate +=	'</li>';	
				break;
			case '5':
				//		# 频道 图文-康师傅主场击败金德 曹阳威风八面立下头功  
				//		摘要。。
				strTemplate +=	'<li class="hl-Li">';
 				strTemplate +=	'<span class="hl-Channel">#attr_channelName</span>&nbsp;';
 				strTemplate +=	'<a #clickAction class="hl-Cite" style="#topSign" href="#attr_url" target="_blank">#attr_title</a>';
 				strTemplate +=	'<p class="hl-Abs hl-Abs-noLeftPadding">#attr_abs</p>';
				strTemplate +=	'</li>';
				_this.m_regNoAbs = '<p class="hl-Abs hl-Abs-noLeftPadding"></p>'	
				break;
		}
		return strTemplate;
	}
	
	//是否启用调试模式，启用后会在失败时弹出alert信息，外网部署时慎用！
	this.m_bIsDebugger = false;
}

//延伸阅读demo的主功能类，负责进行延伸阅读的检索和结果的展示
function HLRelationBooster(objConfig)
{
	var m_this=this;//存住自身指针

	//存储配置
	var m_config = objConfig;
	var m_strHeadTemplate	= '';		//存储展示效果的边框模板
	var m_strBodyTemplate	= '';		//存储展示效果的内容模板
	var m_bFirstNoRet		= false;	//第一次请求是否没有结果
	//显示等待条
	var m_funShowWaitGif = function()
	{
		var objShowDiv = document.getElementById(m_config.m_strRelationDivId);
		if(objShowDiv)
			//objShowDiv.innerHTML = m_config.m_strWaitHtml;
		objShowDiv.innerHTML = '';
		else
			m_funOnRequestFail('没有找到m_strRelationDivId');
	}
	
	//各种失败的情况，包括检测到隐藏标记后，延伸阅读的区域不显示
	var m_funOnRequestFail = function(strMsg)
	{
		if(m_config.m_bIsDebugger == true) alert(strMsg);
		var objShowDiv = document.getElementById(m_config.m_strRelationDivId);
		if(objShowDiv) objShowDiv.style.display = "none";	
	}
	
	//以下部分代码为负责向延伸阅读服务器发送请求的代码	
	
	//检查隐藏标记，查看是否可以发出请求
	var m_funCheckShow = function()
	{
		var objHideSign = document.getElementById(m_config.m_strHideSignDivId);
		if(objHideSign)
			return false;
		else 
			return true;
	}
	
	//将js嵌入网页
	var m_funInclude = function(strTag,strType,strScriptSrc,strCharset,funSucCallBack,funFailCallBack)
	{
		var head = document.getElementsByTagName("head")[0];
		var script = document.createElement(strTag);
		if(head && script)
		{
			script.type = strType;
			script.src = strScriptSrc;
			if (strCharset)	script.charset = strCharset;
			var done = false;
			// Attach handlers for all browsers
			script.onload = script.onreadystatechange = function()
			{
				if ( !done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") ) {
					done = true;
					if(funSucCallBack) funSucCallBack();

					// Handle memory leak in IE
					script.onload = script.onreadystatechange = script.onerror = null;
					head.removeChild( script );
				}
			};
			
			script.onerror=function()
			{
				done = true;
				if(funFailCallBack) funFailCallBack();
				script.onload = script.onreadystatechange = script.onerror = null;
				head.removeChild(script);
			};
			head.appendChild(script);
		}
	}
		
	//xml编码
	var m_funXMLEncode = function(str)
	{
		return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&apos;").replace(/\"/g,"&quot;");
	}
	
	//拼写请求延伸阅读服务器的xml
	var m_funMakeRelationRequest = function()
	{
		var strRequestXml = '';
		strRequestXml	+=	'<?xml version="1.0" encoding="'+m_config.m_strLangCode+'"?>';
		strRequestXml	+=	'<command name="search">';
		strRequestXml	+=	'<param';
		strRequestXml	+=	' url="' + m_funXMLEncode(m_config.m_strUrl.replace(/%20/g,' ')) + '"';
		strRequestXml	+=	' text="' + m_funXMLEncode(m_config.m_strText) + '"';
		strRequestXml	+=	(m_config.m_nOrderBy == -1)		? '' : (' orderBy="'+m_config.m_nOrderBy+'"');
		strRequestXml	+=	(m_config.m_nRecordCnt == -1)	? '' : (' recordCnt="'+m_config.m_nRecordCnt+'"');
		strRequestXml	+=	(m_config.m_nField == -1)		? '' : (' field="'+m_config.m_nField+'"');
		strRequestXml	+=	(m_config.m_nAbsLenLow == -1)	? '' : (' absLow="'+m_config.m_nAbsLenLow+'"');
		strRequestXml	+=	(m_config.m_nAbsLenHigh == -1)	? '' : (' absHigh="'+m_config.m_nAbsLenHigh+'"');
		strRequestXml	+=	(m_config.m_nChannel == -1)		? '' : (' channel="'+m_config.m_nChannel+'"');
		strRequestXml	+=	' /></command>';
		return strRequestXml;
	}
	
	//请求延伸阅读服务器(Get方式)
	var m_funSendRequestToSvr = function()
	{
		var strRequest = m_funMakeRelationRequest();
		var strTargetUrl = m_config.m_strSvrFile + '?charset=' + m_config.m_strLangCode + '&cmd='+encodeURIComponent(encodeURIComponent(strRequest))+'&norepeat='+(new Date).getTime();
		m_funInclude("script","text/javascript",strTargetUrl,m_config.m_strLangCode,null,function(){m_funOnRequestFail('加载服务器结果失败');});
	}
	
	//Post方式发送数据，跨域限制，但可传输全文
	var m_funPostRequestToSvr = function()
	{
		var strRequest = m_funMakeRelationRequest();
		var strPostData = 'charset=' + m_config.m_strLangCode + '&cmd='+encodeURIComponent(encodeURIComponent(strRequest))+'&norepeat='+(new Date).getTime();
		var http_request = false;
		//开始初始化XMLHTTPRequest对象
		if(window.XMLHttpRequest)//如果是window.XMLHttpRequest对象
		{
			//Mozilla,netscape 浏览器
			http_request = new XMLHttpRequest();    
			if (http_request.overrideMimeType) 
			{//设置MiME类别
			//有些版本的浏览器在处理服务器返回的未包含XML mime-type头部信息的内容时会报错，因此，要确保返回的内容包含text/xml信息。
				http_request.overrideMimeType("text/xml");
			}
		}else if(window.ActiveXObject){//如果是window.ActiveXObject
			//IE浏览器
			try
			{
				http_request = new ActiveXObject("Msxml2.XMLHTTP");//IE较新版本
			}catch (e){
				try
				{
					http_request = new ActiveXObiect("Microsoft.XMLHTTP"); //ie旧版本
				}catch (e){}
			}
		}
		if(!http_request)
		{
			//异常，创建对象实例失败
			m_funOnRequestFail('不能创建XMLHttpRequest对象实例。');
			return false;
		}
		http_request.open('POST', m_config.m_strSvrFile, true);
		http_request.setRequestHeader("Content-Length", strPostData.length);
		http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		http_request.onreadystatechange=function()
		{
			if(http_request.readyState==4){
				if(http_request.status==200){
					//alert(http_request.responseText);
					eval(http_request.responseText);
				}else{
					m_funOnRequestFail('服务器处理POST请求失败');
				}
			}
		}
		http_request.send(strPostData);
	}
	
	//如果限制字数超过100自动切换post模式
	if(m_config.m_bIsPostCmd == true || m_config.m_nTextLimit == 0 || m_config.m_nTextLimit > 100)
	{
		m_config.m_bIsPostCmd	= true;
		m_funSendRequestToSvr	= m_funPostRequestToSvr;
	};
	
	//加入延伸阅读div，显示滚动条，检查隐藏标记
	m_this.InitBooster = function()
	{
		var objShowDiv = document.getElementById(m_config.m_strRelationDivId);
		if(objShowDiv){}else{document.write(m_config.m_strRelationDivHtml);}
		m_funShowWaitGif();
		if(m_funCheckShow()){
			m_funSendRequestToSvr();
		}else{
			m_funOnRequestFail('发现隐藏标记');
		}
	}
	
	//日期格式化输出
	var m_funFormatDate = function(objDate,strOutFormat)
	{
		/*
		* eg:strOutFormat="yyyy-MM-dd hh:mm:ss";
		*/
		var o = {
					"M+" :  objDate.getMonth()+1,  //month
					"d+" :  objDate.getDate(),     //day
					"h+" :  objDate.getHours(),    //hour
					"m+" :  objDate.getMinutes(),  //minute
					"s+" :  objDate.getSeconds(), //second
					"q+" :  Math.floor((objDate.getMonth()+3)/3),  //quarter
					"S"  :  objDate.getMilliseconds() //millisecond
				};
	 
		if(/(y+)/.test(strOutFormat)) 
		{
			strOutFormat = strOutFormat.replace(RegExp.$1, (objDate.getFullYear()+"").substr(4 - RegExp.$1.length));
		}
	 
		for(var k in o) 
		{
			if(new RegExp("("+ k +")").test(strOutFormat)) 
			{
			  strOutFormat = strOutFormat.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
			}
		}
		return strOutFormat;
	}

	/* 
	   将String类型解析为Date类型. 
	   parseDate('2006-1-1') return new Date(2006,0,1) 
	   parseDate(' 2006-1-1 ') return new Date(2006,0,1) 
	   parseDate('2006-1-1 15:14:16') return new Date(2006,0,1,15,14,16) 
	   parseDate(' 2006-1-1 15:14:16 ') return new Date(2006,0,1,15,14,16); 
	   parseDate('2006-1-1 15:14:16.254') return new Date(2006,0,1,15,14,16,254) 
	   parseDate(' 2006-1-1 15:14:16.254 ') return new Date(2006,0,1,15,14,16,254) 
	   parseDate('不正确的格式') retrun null 
	*/  
	var m_funParseDate = function(strDate)
	{
		if(typeof strDate == 'string')
		{  
			var results = strDate.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) *$/);  
			if(results && results.length>3)  
				return new Date(parseInt(results[1],10),parseInt(results[2],10) -1,parseInt(results[3],10));   
			results = strDate.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);  
			if(results && results.length>6)  
				return new Date(parseInt(results[1],10),parseInt(results[2],10) -1,parseInt(results[3],10),parseInt(results[4],10),parseInt(results[5],10),parseInt(results[6],10));   
			results = strDate.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);  
			if(results && results.length>7)  
				return new Date(parseInt(results[1],10),parseInt(results[2],10) -1,parseInt(results[3],10),parseInt(results[4],10),parseInt(results[5],10),parseInt(results[6],10),parseInt(results[7],10));   
	   }
	   //不符合规则的日期字符串
	   return null;  
	}

	//将日期字符串更改为统一格式格式
	var m_funFormateDateString = function(strDateSrc)
	{
		var curDate = m_funParseDate(strDateSrc);
		return ((curDate==null) ? '' : m_funFormatDate(curDate,m_config.m_strOutDateFormat));
	}	

	//截取字符串，strlen要截取的汉字数，每个汉字按照2个字节计算
	var m_funMaxStrlen = function(str,strlen)
	{
		if(strlen == 0){ return str;}
		if(!str || !strlen) { return ''; }
		//预期计数：中文2字节，英文1字节
		strlen *= 2;
		var a = 0;
		var len = strlen;
		//临时字串
		var temp = '';
		for (var i=0;i<str.length;i++)
		{
			var nCode = str.charCodeAt(i);
			a += (nCode > 255 || nCode == 183)? 2 : 1;
			//如果增加计数后长度大于限定长度，就直接返回临时字符串
			if(a > len) break;
			//将当前内容加到临时字符串
			temp += str.charAt(i);
		}
		//如果全部是单字节字符，就直接返回源字符串
		return temp;
	}
		
	//将一段字符串转换为xmldom对象，兼容ie和firefox
	var m_funGetXmlObjByString = function(strXml)
	{
		var rs;
		if(window.ActiveXObject)
		{//ie
			rs = new ActiveXObject("Msxml.DOMDocument");
			rs.async = false; 
			if(false == rs.loadXML(strXml))
				rs = null;
		}
		else
		{//firefox
			var parser = new DOMParser();
			rs = parser.parseFromString(strXml, "text/xml");
		}
		return rs;
	}

	//使用xmlItem内的相应属性内容替换模板的对应位置
	var m_funPushContentToTemplate = function(xmlItem)
	{
		var strItem = m_strBodyTemplate;
		//从xml节点中获取信息并替换展示模板中的相应占位符
		strItem = strItem.replace("#clickAction"		,m_config.m_bAllowClickLog ? ('onclick="HLRelationClickLog(\''+xmlItem.getAttribute("url")+'\')"') : '' );
		strItem	= strItem.replace("#attr_url"			,xmlItem.getAttribute("url"));						//url
		strItem	= strItem.replace("#attr_title"		,m_funMaxStrlen(xmlItem.getAttribute("title"),m_config.m_nMaxTitleLen));//标题（并使用js强行截取指定字数）
		strItem	= strItem.replace("#attr_from"		,xmlItem.getAttribute("from"));						//出处   
		strItem	= strItem.replace("#attr_author"		,xmlItem.getAttribute("author"));					//作者
		strItem	= strItem.replace("#attr_picurl"		,xmlItem.getAttribute("picurl"));					//图片url
		strItem	= strItem.replace("#attr_extra1"		,xmlItem.getAttribute("extra1"));					//扩展1
		strItem	= strItem.replace("#attr_extra2"		,xmlItem.getAttribute("extra2"));					//扩展2
		strItem	= strItem.replace("#attr_channelNum"	,xmlItem.getAttribute("channel"));					//频道编号
		strItem	= strItem.replace("#attr_channelName"	,xmlItem.getAttribute("channelName"));				//频道名称
		strItem	= strItem.replace("#attr_date"		,m_funFormateDateString(xmlItem.getAttribute("date")));	//日期（并进行日期格式转换）
		strItem	= strItem.replace("#attr_abs"			,xmlItem.getAttribute("abs"));						//摘要
		if(m_config.m_regNoAbs)
			strItem	= strItem.replace(m_config.m_regNoAbs,'');											//对没有摘要的,要将空白的<p>段去掉
		
		strItem	= strItem.replace("#topSign"			,((m_config.m_bIsMakeTopRed==true)&&xmlItem.getAttribute("top")=='1') ? 'color:red' : '');//置顶的信息标题字体变红色
		return strItem;
	}
	
	//获取模板
	var m_funGetTemplate = function()
	{
		m_strHeadTemplate	= m_config.GetHeadTemplate();
		m_strBodyTemplate	= m_config.GetBodyTemplate();
	}
	

	//分析服务器返回的xml信息，并将信息嵌入模板中
	var m_funParseResultXml = function(strResultXml)
	{	var strTemp = '';
		var strErr = '';
		if(strResultXml && strResultXml != '')
		{
			var objXml = m_funGetXmlObjByString(strResultXml);
			if (objXml != null)
			{
				var nodeResult = objXml.getElementsByTagName('result')[0];
				if(nodeResult)
				{
					var records = nodeResult.childNodes;
					var len = records.length;
					if(len>0)
					{	//从结果xml中找到有效的结果信息	
						var strValue = '';
						for(var i=0; i<len; i++)
						{	strTemp = m_funPushContentToTemplate(records[i]);
							//将节点信息嵌入模板中
							if(strTemp.indexOf('/ggtz/') == -1 && strTemp.indexOf('/xinwen/xinwen/') == -1 && strTemp.indexOf('/test/') == -1 && strTemp.indexOf('无标题文档') == -1 )
							strValue += strTemp;
						}
							
						return strValue;
					}else{
						strErr = '服务器返回了0条结果';
					}
				}else{
					var nodeMessage = objXml.getElementsByTagName('record')[0];
					if(nodeMessage)
					{
						//服务器返回“没有搜索结果”
						strErr = nodeMessage.childNodes[0].nodeValue;
						if(m_bFirstNoRet == false)
							m_bFirstNoRet = true;
						else
							m_bFirstNoRet = false;
					}else{
						strErr = '服务器返回的xml格式不正确';
					}					
				}
			}else{
				strErr = '服务器返回的不是标准xml';
			}
		}else{
			strErr = '服务器返回的xml为空';
		}
		if(m_bFirstNoRet == false)
			m_funOnRequestFail(strErr);
		return null;
	}
	
	//在界面中显示延伸阅读结果
	m_this.ShowResult = function(strResultXml)
	{
		m_funGetTemplate();
		var strRelationBodyHtml = m_funParseResultXml(strResultXml);
		if(strRelationBodyHtml)
		{
			var objShowDiv = document.getElementById(m_config.m_strRelationDivId);
			if(objShowDiv)
			{
				objShowDiv.innerHTML = m_strHeadTemplate;
				var objBodyDiv = document.getElementById(m_config.m_strBodyDivId);
				if(objBodyDiv)
				{
					objBodyDiv.innerHTML = strRelationBodyHtml;
				}else{
					m_funOnRequestFail('没有找到要嵌入的对象m_strBodyDivId');
				}
			}else{
				m_funOnRequestFail('没有找到m_strRelationDivId');
			}
		}else{
			if(m_bFirstNoRet == true)
			{//一次请求未得到有效结果
				var strText = m_config.GetReqText();
				if(strText && strText != '')
				{
					m_config.m_strText = m_funMaxStrlen(strText,m_config.m_nTextLimit);
					strText = '';
					m_funSendRequestToSvr();
				}else{
					m_funOnRequestFail('没有取到导读文本');
				}
			}
		}
	}
	m_this.SendClickLog = function(strClickUrl)
	{
		var strTargetUrl = m_config.m_strClickLogSvr + 'HLRelationLog'+strClickUrl.replace(/^http:\/\//i,'/');
		m_funInclude("script","text/javascript",strTargetUrl,m_config.m_strLangCode,null,null);
	}
}

var g_objHLRelationConfig = new HLRelationConfig();
if(typeof(HLRe_InitConfigFromHttpParam)=="function")
{	//使用url中传入的参数对demo对象进行设置(测试页面使用,嵌入时无需)
	HLRe_InitConfigFromHttpParam();
}
var g_objHLRelationBooster = new HLRelationBooster(g_objHLRelationConfig);
//初始化延伸阅读js，向服务器请求延伸阅读结果
g_objHLRelationBooster.InitBooster();
//显示延伸阅读查询结果
function HLRelationShowResult(strResult)
{
	g_objHLRelationBooster.ShowResult(strResult);
}
function HLRelationClickLog(strClickUrl)
{
	g_objHLRelationBooster.SendClickLog(strClickUrl);
}

