//*******************************************
//   留言板
//*******************************************	
	function GuestBook(gbname){

		if(typeof(gbname) != "string" || gbname == "")
    	throw(new Error(-1, 'Error,Please Tell Me Your Name!'));		

		this.objName=gbname
		//取得留言列表
		this.getGuestBook=function(page){
			postMsg("数据载入中，请稍等...","loading")			
			dojo.io.bind({
				url:url+"?action=get&page="+page+"&num="+num+"&rnd="+Math.random()*1000,
				handle: function(type, data, evt){ 
    			    if(type == "load"){ 
            			responseXML(data)
		        	 }else if(type == "error"){ 
						postMsg(data,"error")
			         }else{ 
						postMsg(data,"error")        	
			   	     }
	    		 },
				mimetype:"text/xml",
				preventCache: false,
				useCache: false
			})			
		}			
		
		function responseXML(data){
		   var xmldoc = data
		   var items = xmldoc.getElementsByTagName('item');
	 	   var rss="";
		   var rssnum=items.length;		

		   var totalnum=0
      	   for(i=0;(totalnum<num && i<rssnum);i++){		
				var postid=getXMLNode(items[i].getElementsByTagName("postid")[0].firstChild);  
				var name=getXMLNode(items[i].getElementsByTagName("name")[0].firstChild);
				var email=getXMLNode(items[i].getElementsByTagName("email")[0].firstChild);
				email=(email==""?"":"<a href='mailto:"+email+"'>"+email+"</a>")
			    var url=getXMLNode(items[i].getElementsByTagName("url")[0].firstChild)
				url=(url.toLowerCase().indexOf("http://")=="-1"?("<a href='http://"+url+"' target='_blank'>"+url+"</a>"):("<a href='"+url+"' target='_blank'>"+url+"</a>"))	
				var posttime=getXMLNode(items[i].getElementsByTagName("posttime")[0].firstChild)
				var ip=getXMLNode(items[i].getElementsByTagName("ip")[0].firstChild)
				var arrip=ip.split(".")
				if(arrip.length>=1){ip=arrip[0]+"."+arrip[1]+".*.*"}else{ip=""}
				var content=getXMLNode(items[i].getElementsByTagName("content")[0].firstChild)
				var replycontent=getXMLNode(items[i].getElementsByTagName("replycontent")[0].firstChild)
					totalnum+=1;			
								
				try {
				    rss+="<li id='li_"+postid+"' style='display:block' class=\"liGuestBook\">"				
					rss+="<div class='gbcontent'>"					
					rss+="<form name='frm_"+postid+"' id='frm_"+postid+"' method='post'>"
					rss+="<table class='tblcontent' cellspacing='0' cellpadding='2' border='0'>";
					rss+="<tr><td class='spanTitle' width='30%'>留言ID：</td><td>"+postid+"</td></tr>"
					rss+="<tr><td class='spanTitle'>作　者：</td><td>"+name+"</td></tr>"
					rss+="<tr><td class='spanTitle'>Email：</td><td>"+email+"</td></tr>"
					rss+="<tr><td class='spanTitle'>主　页：</td><td>"+url+"</td></tr>"
					rss+="<tr><td class='spanTitle'>时　间：</td><td>"+posttime+"</td></tr>"
					rss+="<tr><td class='spanTitle'>IP地址：</td><td>"+ip+"</td></tr>"
					rss+="<tr><td class='spanTitle'>内　容：</td><td>"+XMLEncode(content)+"</td></tr>"
					var isAdmin=getCookie(cookiename)					
					if(isAdmin=="1"){
					rss+="<tr><td class='fred spanTitle'>回　复：</td><td><textarea cols='50' rows='4' name='replycontent' id='replycontent_"+postid+"' class='gbinput'>"+XMLDecode(replycontent)+"</textarea></td></tr>";
					rss+="<tr class='AdminMenu'><td></td><td><a href='#' onclick=\"javascript:{"+this.objName+".delGuestBook('"+postid+"');return false;}\">删除</a> | <a href='#' onclick=\"javascript:{"+this.objName+".replyGuestBook('"+postid+"');return false;}\">回复</a></td></tr>"					
					}
					else
					{
					rss+=(replycontent==""?"":"<tr><td class='fred spanTitle'>回　复：</td><td>"+XMLEncode(replycontent)+"</td></tr>");
					}
					rss+="</table></form></div>	"
				    rss+="</li>"					
					}
				catch(e){
					rss+="<div style='display:block'>无内容</div>"}	
					rss+="";						
				}
		    var info = xmldoc.getElementsByTagName('info');				
			var pageHTML=""
			var pagecount=getXMLNode(info[0].getElementsByTagName("pagecount")[0].firstChild);	
			var page=getXMLNode(info[0].getElementsByTagName("page")[0].firstChild);				
			var nums=getXMLNode(info[0].getElementsByTagName("num")[0].firstChild);	
			var totalnum=getXMLNode(info[0].getElementsByTagName("totalnum")[0].firstChild);	
			currpage=page;
			if(pagecount.length==0)	{pagecount=1}			
			

			pageHTML=showPageNoList(totalnum,pagecount,currpage)
		    $(div).innerHTML=pageHTML+rss+pageHTML;			   
			postMsg("","") 		
		}					

		//显示提交表单
		this.showGuestBookForm=function(){
			var html="<li style='display:block;' class='liGuestBook'>";
				html+="<form name='form1' id='form1' method='post'>";
				html+="<table class='tblcontent' cellspacing='0' cellpadding='2' border='0'>";
				html+="<tr><td class='spanTitle'>作　者：</td><td><input type='text' id='name' name='name' size='50' class='gbinput' style='width:300px;'> <span class='fred' id='msg_name'>*</span></td></tr>"
				html+="<tr><td class='spanTitle'>Email：</td><td><input type='text' id='email' name='email' size='50' class='gbinput' style='width:300px;'> <span class='fred' id='msg_email'>*</span></td></tr>"
				html+="<tr><td class='spanTitle'>主　页：</td><td><input type='text' id='url' name='url' size='50' class='gbinput' style='width:300px;'></td></tr>"
				html+="<tr><td class='spanTitle'>内　容：</td><td><textarea rows='6' id='content' name='content' cols='40' class='gbinput' style='width:300px;'></textarea> <span class='fred' id='msg_content'>*</span></td></tr>"				
				html+="<tr><td class='spanTitle'></td><td>内容不支持HTML语法</td></tr>"
				html+="<tr><td class='spanTitle'></td><td><input id='btnPost' type='button' value='　提　交　' onclick=\"javascript:"+this.objName+".postGuestBook('1');\" class='button'></td></tr>"		
				html+="</table></form></li>"
	    	$(div).innerHTML=html;	
		}		
		
	    //提交留言
		this.postGuestBook=function(){	
		 	var errMsg=""	
			var errNum=0;
			if($("name").value==""){
				$("msg_name").innerHTML="请输入姓名!";
				errNum+=1;
			}else{$("msg_name").innerHTML="";}
			if($("email").value=="" || isEmail($("email").value)==false){
				$("msg_email").innerHTML="Email地址有误!";
				errNum+=1;		
			}else{$("msg_email").innerHTML="";}
			if($("content").value==""){
				$("msg_content").innerHTML="请输入留言内容！";
				errNum+=1;				
			}else{$("msg_content").innerHTML="";}				

			if(chkStrLen($("content").value)>255){alert('留言内容最长不能超过255个字符！');return false}		
			//By hopesoft @ 2006-9-20
			//escape Ascii(ascii code < 32 )
			$("content").value=escapeAscii($("content").value)		
			if(errNum>0){return false}
			$("btnPost").disabled=true;
			$("btnPost").value='正在提交,请稍候...'	
			currpage=1;
			dojo.io.bind({
				url:url+"?action=post"+"&rnd="+Math.random()*1000,
				handle: function(type, data, evt){ 
    		    	if(type == "load"){ 
            			processReturnMsg(data)
			         }else if(type == "error"){ 
						postMsg(data,"error")
			         }else{ 
						postMsg(data,"error")        	
		   	    	 }
		    	 },
				method:"post",
				formNode: $("form1"),
				mimetype:"text/xml",
				preventCache: false,
				useCache: false				
			})
		}		

		//删除留言
		this.delGuestBook=function(postid){	
			var tmpname=this.objName
			if(confirm("您确认要删除此留言吗？")){
				dojo.io.bind({
					url:url+"?action=del&postid="+postid+"&page="+currpage+"&rnd="+Math.random()*1000,
					handle: function(type, data, evt){ 
    				    if(type == "load"){ 
							eval(tmpname+".getGuestBook(currpage)")
			        	 }else if(type == "error"){ 
							postMsg(data,"error")
				         }else{ 
							postMsg(data,"error")        	
		   		    	 }
		    		 },
					mimetype:"text/xml",
					preventCache: false,
					useCache: false
				})		
			}
		}

		//回复留言
		this.replyGuestBook=function(postid){
				//var replycontent=$("replycontent_"+postid.toString()).value
				var replycontent=eval("document.frm_"+postid.toString()+".replycontent")
				//By hopesoft @ 2006-9-20
				//escape Ascii(ascii code < 32 )
				replycontent.value=escapeAscii(replycontent.value)		
				if(chkStrLen(replycontent.value)>255){alert('回复内容最长不能超过255个字符！');return false}
				postMsg("正在提交数据，请稍等！","loading")
				dojo.io.bind({
					url:url+"?action=reply&postid="+postid+"&page="+currpage+"&rnd="+Math.random()*1000,
					handle: function(type, data, evt){ 			
    				    if(type == "load"){ 
							processReturnMsg(data)
			    	     }else if(type == "error"){ 
							postMsg(data,"error")
				         }else{ 
							postMsg(data,"error")        	
			   	    	 }
		    		 },
					method:"post",
					formNode: $("frm_"+postid),					 
					mimetype:"text/xml",
					preventCache: false,
					useCache: false
				})	
		 }  	 

		//处理返回信息
		function processReturnMsg(data){
		   var xmldoc = data;
		   var items = xmldoc.getElementsByTagName('guestbook');
		   var msg=items[0].getElementsByTagName("msg")[0].firstChild.nodeValue;  
		   postMsg(msg,"")			   
		   setTimeout("eval("+this.objName+".getGuestBook(currpage))",1000)
		}			 
	
		//显示页码 参数:总记录，总页数，当前页码，共显示多少页 totalnum,totalpage,cpage,showpagenum
		function showPageNoList(){
			totalnum=arguments[0];
			totalpage=arguments[1];			
			cpage=arguments[2];
			if(arguments.length==4){var shownum=arguments[3];}else{var showpagenum=maxpagenum;}
						
			var pstart,pend
			pstart=pend=1
			totalpage=parseInt(totalpage)
			cpage=parseInt(cpage)
			if(cpage>totalpage){cpage=totalpage}
				
			if(totalpage<=showpagenum){pstart=1;pend=totalpage;}		
			else{
				var movestep=Math.round(showpagenum/2)
				if(cpage>movestep){pstart=cpage-movestep
					pend=cpage+movestep
					if(pend>totalpage){
						pstart=totalpage-showpagenum
						pend=totalpage
					}				
				}
				else{
					pstart=1
					pend=showpagenum
				}			
			}		
			if(pstart<1){pstart=1}
			if(pend<1){pend=1}			
		   	var str_page=""		
			if(totalpage>1){
				str_page="<div class='pagelist'><a class=p_total>"+totalnum+"</a> <a class=p_pages>&nbsp;"+cpage+"/"+totalpage+"&nbsp;</a> "
				str_page+="<a href='#' onclick='javascript:"+this.objName+".getGuestBook(1);return false;' class='p_num'>|&lsaquo;</a> <a href='#' onclick='javascript:"+this.objName+".getGuestBook(\""+(cpage-1)+"\");return false;' class='p_num'>&lsaquo;&lsaquo;</a> "
				for(var k=pstart;k<=pend;k++){
					str_page+=((k==cpage)?("<a class='p_curpage'>"+k+"</a> "):("<a href='#' class='p_num' onclick='javascript:"+this.objName+".getGuestBook(\""+k+"\");return false;'>"+k+"</a> "))
				}
				str_page=str_page+" <a href='#' onclick='javascript:"+this.objName+".getGuestBook(\""+((cpage==totalpage)?cpage:cpage+1)+"\");return false;' class='p_num' >&rsaquo;&rsaquo;</a> <a href='#' onclick='javascript:"+this.objName+".getGuestBook(\""+totalpage+"\");return false;' class='p_num'>&rsaquo;|</a>"
				str_page+="</div><div class='clear'></div>"
			}
			return str_page
		}
		
	}
	
//*******************************************
//   用户
//*******************************************	
	function User(){
	
		//判断是否是管理员，并显示相应链接
		this.chkAdmin=function(){
			var isAdmin=getCookie(cookiename)
			if(isAdmin=="1"){$("span_admin").innerHTML="<a href='#' onclick='javascript:user.logout();return false;' id='adminLink'>管理员注销</a>"}
			else{$("span_admin").innerHTML="<a href='#' onclick='javascript:user.login();return false;' id='adminLink'>管理员登录</a>"		}
		}			

		//管理登录
		this.login=function(){
			var html="<li style='display:' class='liGuestBook'><form name='form1' id='form1' method='post'>"
				html+="<P><table class='tblcontent' cellspacing='0' cellpadding='2' border='0'>";
				html+="<tr><td class='spanTitle'>用户名：</td><td><input type='text' id='username' name='username' size='20' style='width:150px;' class='gbinput'> <span class='fred' id='msg_username'>*</span></td></tr>"
				html+="<tr><td class='spanTitle'>密　码：</td><td><input type='password' id='password' name='password' size='20' style='width:150px;' class='gbinput'> <span class='fred' id='msg_password'>*</span></td></tr>"
				html+="<tr><td class='spanTitle'></td><td style='padding-top:6px;'><input id='btnLogin' type='button' value='　提　交　' onclick='javascript:user.chkLogin()' class='button'></td></tr>"		
				html+="</table></P></form></li>"
	    	$(div).innerHTML=html;	
		}	
	
		//检查登录
		this.chkLogin=function(){
	 		var errMsg="";	
			var errNum=0;
			if($("username").value==""){
				$("msg_username").innerHTML="请输入您的用户名!";
				errNum+=1;
			}else{$("msg_username").innerHTML=""}
			if($("password").value==""){
				$("msg_password").innerHTML="请输入您的密码!";
				errNum+=1;			
			}else{$("msg_password").innerHTML=""}
			if(errNum>0){return false}
			$("btnLogin").disabled=true;
			$("btnLogin").value="正在提交，请稍等..."
			dojo.io.bind({
				url:url+"?action=login"+"&rnd="+Math.random()*1000,
				handle: function(type, data, evt){ 
	    		    if(type == "load"){ 
    	        		processLogin(data);	
			         }else if(type == "error"){ 
						postMsg(data,"error")
		        	 }else{ 
						postMsg(data,"error")        	

			   	     }
	    		 },
				method:"post",
				formNode: $("form1"),
				mimetype:"text/xml",
				preventCache: false,
				useCache: false
			})	
		}

		//处理登录

		function processLogin(data){
		   var xmldoc = data;
		   var items = xmldoc.getElementsByTagName('guestbook');		   
		   var msg=items[0].getElementsByTagName("msg")[0].firstChild.nodeValue;  		   
   		   postMsg(msg,"");
		   var user=new User();
		   user.chkAdmin();	   
		   setTimeout("eval("+this.objName+".getGuestBook(currpage))",1000)
		}		
			
		//退出登录
		this.logout=function(){
			postMsg("正在提交，请稍等！","loading")					
			dojo.io.bind({
				url:url+"?action=logout"+"&rnd="+Math.random()*1000,
				handle: function(type, data, evt){ 
    			    if(type == "load"){ 
            			processLogin(data);	
		        	 }else if(type == "error"){ 
						postMsg(data,"error")
			         }else{ 
						postMsg(data,"error")        	
			   	     }
	    		 },
				mimetype:"text/xml",
				preventCache: false,
				useCache: false
			})	
		}			
	}
	
//*******************************************
//   公共函数
//*******************************************	
	//提示信息
	function postMsg(){
		if(arguments.length==3){var mdiv=arguments[2];}	else{var mdiv=msgdiv}	
		var msg=arguments[0];
		var imgtype=arguments[1]
		var imgtype=imgtype.toLowerCase();
		var img="";		
		switch(imgtype){
			case "loading":
				img="images/loading.gif";
				break;
			case "ok":
				img="";
				break;			
			case "error":
				img="";
				break;		
			default:
				img=""
				break;	
		}
		$(mdiv).innerHTML="<div id='loading'>"+(img!=""?"<img src='"+img+"' border='0' width='20' height='20'> ":"")+msg+"</div>";	
		if(msg!="")	{
			//By hopesoft@2006-11-19
			var navUserAgent = navigator.userAgent
			if (navUserAgent.indexOf("Firefox") >= 0 || navUserAgent.indexOf("Opera") >= 0) {
				$(mdiv).style.top = (document.body.scrollTop?document.body.scrollTop:document.documentElement.scrollTop) + ((document.body.clientHeight > document.documentElement.clientHeight)?document.documentElement.clientHeight:document.body.clientHeight) - 70 + 'px';
			}
			else{
				$(mdiv).style.top = (document.body.scrollTop?document.body.scrollTop:document.documentElement.scrollTop) + ((document.documentElement.clientHeight == 0)?document.body.clientHeight:document.documentElement.clientHeight) - 70 + 'px';
			}
			$(mdiv).style.display="block"			
		}
		else{$(mdiv).style.display="none"}					
	}	

	function escapeAscii(s){
		var ss=s
		var strNew=""
		for(var i=0;i<s.length;i++)	{
			strNew+=(ss.charCodeAt(0,1)<32?(escape(ss.substring(0,1))):(ss.substring(0,1)))
			ss=ss.substring(1,ss.length)
		}
		return strNew
	}
	
	function $(obj){return document.getElementById(obj)}
	function getXMLNode(obj){return (eval(obj)!==null)?obj.nodeValue:""}
	function isEmail(s){var re = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;return (re.test(s));}			   
	function XMLEncode(str){
	   str=unescape(str);
//       str=str.replace(/\&/g,"&amp;");
       str=str.replace(/\</g,"&lt;");
       str=str.replace(/\>/g,"&gt;");
//       str=str.replace(/\'/g,"&apos;");
       str=str.replace(/\\/g,"&quot;");	   
	   str=str.replace(/\n/g,'<br>');	   
       return str;
	}
	
	//By hopesoft@2006-11-25
	function XMLDecode(str){
	   str=unescape(str);
       str=str.replace(/\&amp;/g,"&");
       str=str.replace(/\&lt;/g,"<");
       str=str.replace(/\&gt;/g,">");
       str=str.replace(/\&apos;/g,"'");
       return str;
	}

　　
　　function chkStrLen(msg){
	    var str=msg;
		var len=0;
		for(var i=0; i<str.length; i++){
			var c=str.charCodeAt(i);
		     //半角
    		 if(c<256||(c>=0xff61&&c<=0xff9f)){
		       len=len+1;
		     }
		     //全角
		     else{
		       len=len+2;
		     }
	   }
	   return len;
	}

    //from dojo.io.cookie.getCookie
	function getCookie(name){
		var idx = document.cookie.lastIndexOf(name+'=');
		if(idx == -1) { return null; }
		var value = document.cookie.substring(idx+name.length+1);
		var end = value.indexOf(';');
		if(end == -1) { end = value.length; }
		value = value.substring(0, end);
		value = unescape(value);
		return value;		
	}	