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

		if(typeof(gbname) != "string" || gbname == "")
    	throw(new Error(-1, '参数(objName)错误，请重试!'));		

		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
			})			
		}			
		
		//提交表单HTML
		function guestBookForm(){
			var html="<li style='display:block;' class='liGuestBook'><a name='gbform'></a>";
				html+="<form name='form1' id='form1' method='post'>";
				html+="<table class='tblcontent' cellspacing='0' cellpadding='2' border='0'>";
				html+="<tr><td colspan=2 style='text-align:center'>我要留言</td></tr>"
				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>";
	    	return html;
		}
		
		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);
				name=(email==""?"":"<a href='mailto:"+email+"'>"+name+"</a>")
			    var url=getXMLNode(items[i].getElementsByTagName("url")[0].firstChild)
				if(url!=""){
					//url=(url.toLowerCase().indexOf("http://")=="-1"?("<a href='http://"+url+"' target='_blank'><img src='images/home.gif' border=0 style='padding-top:2px;'></a>"):("<a href='"+url+"' target='_blank'><img src='images/home.gif' border=0 style='padding-top:2px;'></a>"))	
					url=("<a href='"+(url.toLowerCase().indexOf("http://")=="-1"?"http://":"")+url+"' target='_blank' style='font-size:12px;'>主页</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]+".*.*";
					//ip="<img src='images/ip.gif' border=0 alt='"+ip+"'>";
					ip="("+ip+")"
					}
				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+="<div class='tblcontent'>";
					rss+="<div class='t3_favor bgg'><span style='padding-right: 10px; float: right;'>"+posttime+"</span><span style='padding-left: 10px; font-weight: bold;'>"+ name + " " +url+ "  "+ip+"</span></div>";
					rss+="<div class='gb_col'>"+XMLEncode(content)+"</div>";
					if(replycontent!=""){
						rss+="<div class='gb_line'></div>";
					}						
					var isAdmin=getCookie(cookiename);
						if(isAdmin=="1"){

						rss+="<div class='gb_reply'><textarea cols='50' rows='4' name='replycontent' id='replycontent_"+postid+"' class='gbinput'>"+XMLDecode(replycontent)+"</textarea></div>";
						rss+="<div class='AdminMenu gb_reply'><a href='#' onclick=\"javascript:{"+this.objName+".delGuestBook('"+postid+"');return false;}\">删除</a> | <a href='#' onclick=\"javascript:{"+this.objName+".replyGuestBook('"+postid+"');return false;}\">回复</a></div>";			
						}
						else{
						rss+=(replycontent==""?"":"<div class='gb_reply'>【回复】"+XMLEncode(replycontent)+"</div>");
						}
					rss+="</div></form></div>";
				    rss+="</li>";	
					}
				catch(e){
					rss+="<div style='display:block'>无内容</div>";
					}			
				}
		    var info = xmldoc.getElementsByTagName('info');				
			var pageHTML="";
			try {
				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);
				}
				catch(e){
					alert("您遇到了错误：\n1.如果是ASP版本，请检查数据库文件是否有写入权限;\n2.如果是PHP版本，请登录http://www.51ajax.com/bbs/详细说明您的出错信息！");
				}
		    $(div).innerHTML=pageHTML+rss+pageHTML+guestBookForm();			   
			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=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(){
		var mdiv=arguments.length==3?arguments[2]: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' align='absmiddle'> ":"")+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.top = '0px';							
			$(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;		
	}	
