﻿var loader = new PageLoader("loader");
var requesttime = 0;
var leftdata = root + "data/left.xml";
var rightdata = root + "data/right.xml";

function LoadPostById(id, comm)
{
	var url = root + "service/blogservice.aspx?t=4&id=" + id;
	doLoadPost(url, comm);
}
function LoadPostLatest()
{
	var url = root + "service/blogservice.aspx?t=6";
	doLoadPost(url);
}
function LoadPostByDate(y, m, d)
{
	var url = root + "service/blogservice.aspx?t=1&y=" + y + "&m=" + m + "&d=" + d;
	doLoadPost(url);
}
function doLoadPost(url, comm)
{
	loader.Show();
	var req = new WebRequest(url);
	req.onReady = function()
	{
		var middiv = document.getElementById("middle");
		var xml = req.ResponseXml;
		var rr = new ResponseReader(xml);
		if ( !rr.hasError )
		{
			middiv.innerHTML = "";
			GeneratePost(middiv, rr.responseBody, comm);
		}
		else
			alert(rr.errorMessage);
		loader.Clear();
	}
	req.Send();
}
function LoadTag(target, id)
{
	var rnd = Math.random();
	var url = root + "service/blogtagservice.aspx?t=1&temp=" + rnd + "&id=" + id;
	var req = new WebRequest(url);
	req.onReady = function()
	{
		var xml = req.ResponseXml;
		var rr = new ResponseReader(xml);
		if ( !rr.hasError )
		{
			doLoadTag(target, rr.responseBody);
		}
		else
			alert(rr.errorMessage);
		loader.Clear();
	}
	req.Send();
}
function doLoadTag(target, xml)
{
	var list = xml.getElementsByTagName("Table");
	var html = "";
	for ( var i = 0, j = list.length; i < j; i++ )
	{
		var name = list[i].getElementsByTagName("Tag")[0].firstChild.nodeValue;
		var code = list[i].getElementsByTagName("TagCode")[0].firstChild.nodeValue;
		if ( html == "" )
			html += "<a href=\"" + root + "tag/" + code + "\" target=\"_blank\">" + name + "</a>";
		else
			html += ", <a href=\"" + root + "tag/" + code + "\" target=\"_blank\">" + name + "</a>";
	}
	
	if ( html != "" )
		html = " Posted in " + html;
	target.innerHTML += html;
}
function ShowUrl(id, text)
{
	var target = document.getElementById("linkline_" + id);
	if ( target )
	{
		if ( target.style.display == "none" )
		{
			target.style.display = "block";
			target.innerHTML = text;
			target.onclick = function() { clipboardData.setData('text', text); alert("地址已经复制到您的剪贴板中，请在地址栏或使用位置选择“粘贴”或者按Ctrl+V"); }
		}
		else
		{
			//alert(target.innerHTML + "\r\n\r\n" + urltext);
			if ( target.innerHTML.toLowerCase() == text.toLowerCase() )
			{
				target.onclick = null;
				target.style.display = "none";
			}
			else
			{
				target.onclick = function() { clipboardData.setData('text', text); alert("地址已经复制到您的剪贴板中，请在地址栏或使用位置选择“粘贴”或者按Ctrl+V"); }
				target.innerHTML = text;
			}
		}
	}
}
function GeneratePost(target, xml, comm)
{
	var list = xml.getElementsByTagName("t_Blog");
	for ( var i = 0, j = list.length; i < j; i++ )
	{
		var c_title = list[i].getElementsByTagName("BTitle")[0].firstChild.nodeValue;
		var c_date = list[i].getElementsByTagName("BDate")[0].firstChild.nodeValue;
		var c_content = list[i].getElementsByTagName("BContent")[0].firstChild.nodeValue;
		var c_id = list[i].getElementsByTagName("BID")[0].firstChild.nodeValue;
		var c_ccnt = list[i].getElementsByTagName("BComments")[0].firstChild.nodeValue;
		var c_tcnt = list[i].getElementsByTagName("BTracks")[0].firstChild.nodeValue;
		
		var d_post = document.createElement("div");
		d_post.className = "post";
		
		var d_title = document.createElement("div");
		d_title.className = "title";
		var d_titlea = document.createElement("a");
		d_titlea.setAttribute("href", root + "archive/" + c_id + ".htm");
		d_titlea.setAttribute("target", "_blank");
		d_titlea.innerHTML = c_title;
		d_title.appendChild(d_titlea);
		
		d_post.appendChild(d_title);
		
		var d_tag = document.createElement("div");
		d_tag.className = "tag";
		d_tag.innerHTML = c_date
		LoadTag(d_tag, c_id);
		
		d_post.appendChild(d_tag);
		
		var d_content = document.createElement("div");
		d_content.className = "content";
		d_content.innerHTML = c_content;
		
		d_post.appendChild(d_content);
		
		var d_comment = document.createElement("div");
		d_comment.className = "commentblock";
		d_comment.setAttribute("id", "comm" + c_id);
		d_comment.style.display = "none";
		
		d_content.appendChild(d_comment);
		
		var d_trackback = document.createElement("div");
		d_trackback.className = "commentblock";
		d_trackback.setAttribute("id", "track" + c_id);
		d_trackback.style.display = "none";
		
		d_content.appendChild(d_trackback);
		
		var d_menu = document.createElement("p");
		d_menu.className = "linkinfo";
		
		var linkhtml = "";
		linkhtml += "<a href=\"#cozyfriday\" onclick=\"ShowUrl(" + c_id + ", 'http://www.cozyfriday.com/archive/" + c_id + ".htm');\">Permalink</a> | ";
		linkhtml += "<a href=\"#cozyfriday\" onclick=\"ShowUrl(" + c_id + ", 'http://www.cozyfriday.com/archive/" + c_id + ".tb');\">Trackback Ping</a> | ";
		linkhtml += "<a href=\"#cozyfriday\" onclick=\"LoadComment(" + c_id + ", false, true);\">Comments (<span id=\"cmcnt_" + c_id + "\">" + c_ccnt + "</span>)</a> | ";
		linkhtml += "<a href=\"#cozyfriday\" onclick=\"LoadTrackback(" + c_id + ", true);\">TrackBacks (" + c_tcnt + ")</a>";
		linkhtml += "<span id=\"linkline_" + c_id + "\" style=\"display:none;cursor:pointer;text-decoration:underline;font-weight:normal;\"></span>";
		d_menu.innerHTML = linkhtml;
		
		d_content.appendChild(d_menu);
		
		target.appendChild(d_post);
		
		if ( comm )
			LoadComment(c_id, true);
	}
}

function LoadComment(b, ref)
{
	var target = document.getElementById("comm" + b);
	target.innerHTML = "";
	target.style.display = "block";
	
	var h1 = document.createElement("h1");
	h1.innerHTML = "Comments";
	target.appendChild(h1);
	
	var h2 = document.createElement("a");
	h2.className = "h2";
	h2.setAttribute("href", "#cozyfriday");
	h2.innerHTML = "Close";
	h2.onclick = function() { HideComment(this); }
	target.appendChild(h2);
	
	var block = document.createElement("div");
	block.innerHTML = "loading...";
	target.appendChild(block);
	
	ref = true;
	var rnd = (ref) ? Math.random() : "";
	var url = root + "service/BlogCommentService.aspx?temp=" + rnd + "&t=1&id=" + b;
	var req = new WebRequest(url);
	req.onLoad = function()
	{
		block.innerHTML = "loading...";
	}
	req.onReady = function()
	{
		var xml = req.ResponseXml;
		var rr = new ResponseReader(xml);
		if ( rr.hasError )
			alert(rr.errorMessage);
		else
			doLoadComment(block, rr.responseBody, b);
	}
	req.Send();
}

function doLoadComment(target, xml, id)
{
	target.innerHTML = "";
	
	var list = xml.getElementsByTagName("t_Comment");
	for ( var i = 0, j = list.length; i < j; i++ )
	{
		var c_site = (list[i].getElementsByTagName("CSite")[0].firstChild) ? list[i].getElementsByTagName("CSite")[0].firstChild.nodeValue : "";		
		var c_name = (list[i].getElementsByTagName("CName")[0].firstChild) ? list[i].getElementsByTagName("CName")[0].firstChild.nodeValue : "";
		var c_date = list[i].getElementsByTagName("CDate")[0].firstChild.nodeValue;
		var c_content = list[i].getElementsByTagName("CContent")[0].firstChild.nodeValue;
		
		var comm = document.createElement("div");
		comm.className = "comment";
		
		var user = document.createElement("div");
		user.className = "user";
		var url = c_site;
		
		if ( url == "" )
			user.innerHTML = "<a>" + c_name + "</a> Posted at " + c_date;
		else
			user.innerHTML = "<a href=\"" + url + "\">" + c_name + "</a> Posted at " + c_date;
		comm.appendChild(user);
		
		var content = document.createElement("div");
		content.className = "content";
		content.innerHTML = c_content;
		comm.appendChild(content);
		
		target.appendChild(comm);
	}
	
	var ph = document.createElement("div");
	ph.innerHTML = "Leave your feedback below";
	ph.className = "postheader";
	target.appendChild(ph);
	
	var obj = GetUserInfo();
	
	var pl1 = document.createElement("div");
	pl1.innerHTML = "<span class=\"posttitle\">Your Name: </span>";
	pl1.className = "postline";
	var txt1 = document.createElement("input");
	txt1.setAttribute("type", "text");
	txt1.setAttribute("id", "txtCommUser_" + id);
	txt1.className = "inputbox";
	if ( obj != null )
		txt1.value = obj.Name;
	pl1.appendChild(txt1);
	pl1.innerHTML += "(Required)";
	target.appendChild(pl1);
	
	var pl2 = document.createElement("div");
	pl2.innerHTML = "<span class=\"posttitle\">Your Blog: </span>";
	pl2.className = "postline";
	var txt2 = document.createElement("input");
	txt2.setAttribute("type", "text");
	txt2.setAttribute("id", "txtCommSite_" + id);
	txt2.className = "inputbox";
	if ( obj != null )
		txt2.value = obj.Site;
	pl2.appendChild(txt2);
	target.appendChild(pl2);
	
	var pl3 = document.createElement("div");
	pl3.innerHTML = "<span class=\"posttitle\">Your Words: </span>";
	pl3.className = "postline";
	var pl31 = document.createElement("div");
	pl31.className="postline";
	var txt3 = document.createElement("textarea");
	txt3.setAttribute("id", "txtCommContent_" + id);
	txt3.className = "inputbox";
	pl3.appendChild(txt3);
	pl3.innerHTML += "(Required)";
	target.appendChild(pl3);
	var imgbtn1 = document.createElement("img");
	imgbtn1.setAttribute("src", root + "images/editor1/bold.gif");
	imgbtn1.className = "editor1_out";
	imgbtn1.onmouseover = function() { this.className = 'editor1_ovr'; }
	imgbtn1.onmouseout = function() { this.className = 'editor1_out'; }
	imgbtn1.onclick = function() { ShowFont('b', document.getElementById("txtCommContent_" + id)); }
	pl31.appendChild(imgbtn1);
	var imgbtn2 = document.createElement("img");
	imgbtn2.setAttribute("src", root + "images/editor1/italic.gif");
	imgbtn2.className = "editor1_out";
	imgbtn2.onmouseover = function() { this.className = 'editor1_ovr'; }
	imgbtn2.onmouseout = function() { this.className = 'editor1_out'; }
	imgbtn2.onclick = function() { ShowFont('i', document.getElementById("txtCommContent_" + id)); }
	pl31.appendChild(imgbtn2);
	var imgbtn3 = document.createElement("img");
	imgbtn3.setAttribute("src", root + "images/editor1/underline.gif");
	imgbtn3.className = "editor1_out";
	imgbtn3.onmouseover = function() { this.className = 'editor1_ovr'; }
	imgbtn3.onmouseout = function() { this.className = 'editor1_out'; }
	imgbtn3.onclick = function() { ShowFont('u', document.getElementById("txtCommContent_" + id)); }
	pl31.appendChild(imgbtn3);
	var imgbtn4 = document.createElement("img");
	imgbtn4.setAttribute("src", root + "images/editor1/hyperlink.gif");
	imgbtn4.className = "editor1_out";
	imgbtn4.onmouseover = function() { this.className = 'editor1_ovr'; }
	imgbtn4.onmouseout = function() { this.className = 'editor1_out'; }
	imgbtn4.onclick = function() { ShowLink(document.getElementById("txtCommContent_" + id)); }
	pl31.appendChild(imgbtn4);
	var imgbtn5 = document.createElement("img");
	imgbtn5.setAttribute("src", root + "images/editor1/image.gif");
	imgbtn5.className = "editor1_out";
	imgbtn5.onmouseover = function() { this.className = 'editor1_ovr'; }
	imgbtn5.onmouseout = function() { this.className = 'editor1_out'; }
	imgbtn5.onclick = function() { ShowImage(document.getElementById("txtCommContent_" + id)); }
	pl31.appendChild(imgbtn5);
	var imgbtn6 = document.createElement("img");
	imgbtn6.setAttribute("src", root + "images/editor1/emotion.gif");
	imgbtn6.className = "editor1_out";
	imgbtn6.onmouseover = function() { this.className = 'editor1_ovr'; }
	imgbtn6.onmouseout = function() { this.className = 'editor1_out'; }
	imgbtn6.onclick = function() { ShowEmotion(document.getElementById("txtCommContent_" + id), document.getElementById("emo" + id)); }
	pl31.appendChild(imgbtn6);
	target.appendChild(pl31);
	
	var imgbtn6pan = document.createElement("div");
	imgbtn6pan.setAttribute("id", "emo" + id);
	imgbtn6pan.style.width = "290px";
	imgbtn6pan.style.height = "175px";
	imgbtn6pan.style.border = "1px solid #000";
	imgbtn6pan.style.position = "absolute";
	imgbtn6pan.style.backgroundColor = "#fff";
	imgbtn6pan.style.display = "none";
	target.appendChild(imgbtn6pan);
	
	var pl4 = document.createElement("div");
	pl4.className = "postline";
	var btn = document.createElement("input");
	btn.setAttribute("type", "button");
	btn.setAttribute("name", "btnFeedback_" + id);
	btn.setAttribute("value", "Send");
	btn.onclick = function(){PostComment(this, id);}
	pl4.appendChild(btn);
	target.appendChild(pl4);
}
function HideComment(b)
{
	var comm = b.parentNode;
	comm.style.display = "none";
}
function PostComment(sender, b)
{
	var c_site = document.getElementById("txtCommSite_" + b);
	var c_name = document.getElementById("txtCommUser_" + b);
	var c_content = document.getElementById("txtCommContent_" + b);
	if ( !c_site || !c_name || !c_content || !sender ) return;
	var ip = GetUserIP();
	
	if (  c_name.value == "" )
	{
		alert("Your name is required for posting this comment...");
		return;
	}
	
	if ( c_content.value == "" )
	{
		alert("Please leave some words for this comment...");
		return;
	}
	
	var xml = "";
	xml += "<comment>";
	xml += "<user><![CDATA[" + JsEncode(c_name.value) + "]]></user>";
	xml += "<site><![CDATA[" + JsEncode(c_site.value) + "]]></site>";
	xml += "<content><![CDATA[" + JsEncode(c_content.value) + "]]></content>";
	xml += "<ip>" + ip + "</ip>";
	xml += "</comment>";
	
	sender.disabled = c_site.disabled = c_name.disabled = c_content.disabled = true;
	
	var rnd = Math.random();
	var url = root + "service/BlogCommentService.aspx?t=0&temp=" + rnd + "&id=" + b;
	var req = new WebRequest(url);
	req.Method = "POST";
	req.onReady = function()
	{
		var xml = req.ResponseXml;
		var rr = new ResponseReader(xml);
		if ( rr.hasError )
		{
			alert(rr.errorMessage);
			sender.disabled = c_site.disabled = c_name.disabled = c_content.disabled = false;
		}
		else
		{
			SetUserInfo(c_name.value, c_site.value);
			alert("Thank your for your comment...");
			LoadComment(b, true);
			var cnt = document.getElementById("cmcnt_" + b);
			if ( cnt )
			{
				var n = parseInt(cnt.innerHTML);
				if ( !isNaN(n) ) cnt.innerHTML = (n + 1).toString();
			}
		}
	}
	req.Send(xml);
}

function LoadTrackback(b, canClose)
{
	var target = document.getElementById("track" + b);
	target.innerHTML = "";
	target.style.display = "block";
	
	var h1 = document.createElement("h1");
	h1.innerHTML = "Trackbacks";
	target.appendChild(h1);
	
	var h2 = document.createElement("a");
	h2.className = "h2";
	h2.setAttribute("href", "#cozyfriday");
	if ( canClose )
	{
		h2.onclick = function() { HideComment(this); }
		h2.innerHTML = "Close";
	}
	else
	{
		h2.innerHTML = "&nbsp;";
	}
	
	target.appendChild(h2);
	
	var ul = document.createElement("ul");
	target.appendChild(ul);
	
	var rnd = Math.random();
	var url = root + "service/trackbackservice.aspx?t=1&temp=" & rnd + "&id=" + b;
	var req = new WebRequest(url);
	req.onLoad = function()
	{
		ul.innerHTML = "loading...";
	}
	req.onReady = function()
	{
		var xml = req.ResponseXml;
		var rr = new ResponseReader(xml);
		if ( rr.hasError )
			alert(rr.errorMessage);
		else
			doLoadTrackback(ul, rr.responseBody);
	}
	req.Send();
}

function doLoadTrackback(target, xml)
{
	target.innerHTML = "";

	var list = xml.getElementsByTagName("t_Trackback");
	var j = list.length;
	if ( j > 0 )
	{
		for ( var i = 0; i < j; i++ )
		{
			var li = document.createElement("li");
			li.innerHTML = "<a href=\"" + list[i].getElementsByTagName("TUrl")[0].firstChild.nodeValue + "\" target=\"_blank\">" + list[i].getElementsByTagName("TTitle")[0].firstChild.nodeValue + "</a>";
			
			target.appendChild(li);
		}
	}
	else
	{
		var li = document.createElement("li");
		li.innerHTML = "No trackback for this post yet...";
		li.style.listStyleType = "none";
		target.appendChild(li);
	}
}

var rsstimer = null;
function callrss(e, feed)
{
	if ( e )
	{
		rsstimer = window.setTimeout("showrss('" + feed + "', " + (e.clientX - e.offsetX) + ", " + (e.clientY - e.offsetY) + ", 0, 10)", 500);
	}
}
function cancelrss()
{
	if ( rsstimer != null )
		window.clearTimeout(rsstimer);
}
function showrss(feed, x, y, offx, offy)
{
	var rss = document.getElementById("rssdisp");
	if ( !rss )
	{	
		var rssdiv = document.createElement("div");
		rssdiv.setAttribute("id", "rssdisp");
		rssdiv.style.display = "none";
		rssdiv.onmouseover = showrssim;
		rssdiv.onmouseout = clearrss;
		document.getElementsByTagName("body")[0].appendChild(rssdiv);
		
		rss = document.getElementById("rssdisp");
	}
	
	rss.style.display = "block";
	getrssMessage(rss, feed);
	var x = (document.documentElement.scrollLeft + x + offx);
	if ( (x + 300) > document.documentElement.clientWidth )
		x = document.documentElement.clientWidth - 320;
	rss.style.top = (document.documentElement.scrollTop + y + offy) + "px";
	rss.style.left = x + "px";
}
function showrssim()
{
	var rss = document.getElementById("rssdisp");
	if ( rss )
		rss.style.display = "block";
}
function clearrss()
{
	var rss = document.getElementById("rssdisp");
	if ( rss )
		rss.style.display = "none";
}
function getrssMessage(target, feed)
{
	var url = root + "service/rssservice.aspx?t=latest&f=" + escape(feed);
	var req = new WebRequest(url);
	req.onLoad = function()
	{
		target.innerHTML = "loading...";
	}
	req.onReady = function()
	{
		var xml = req.ResponseXml;
		var rr = new ResponseReader(xml);
		if ( rr.hasError )
		{
			target.innerHTML = errorMessage;
		}
		else
		{
			target.innerHTML = doRssResponse(rr.responseBody);
		}
	}
	req.Send();
}
function doRssResponse(res)
{
	var url = (res.getElementsByTagName("url")[0].firstChild) ? res.getElementsByTagName("url")[0].firstChild.nodeValue : "";
	var channel = (res.getElementsByTagName("channel")[0].firstChild) ? res.getElementsByTagName("channel")[0].firstChild.nodeValue : "";
	var desc = (res.getElementsByTagName("description")[0].firstChild) ? res.getElementsByTagName("description")[0].firstChild.nodeValue : "";
	var lnk = (res.getElementsByTagName("link")[0].firstChild) ? res.getElementsByTagName("link")[0].firstChild.nodeValue : "";
	var title = (res.getElementsByTagName("title")[0].firstChild) ? res.getElementsByTagName("title")[0].firstChild.nodeValue : "";
	var abst = (res.getElementsByTagName("abstract")[0].firstChild) ? res.getElementsByTagName("abstract")[0].firstChild.nodeValue : "";
	
	var html = "";
	html += "<a href=\"" + url + "\" class=\"site\" target=\"_blank\">" + channel + "</a>";
	html += desc;
	html += "<div class=\"sep\"></div>";
	html += "<a href=\"" + lnk + "\" class=\"blog\" target=\"_blank\"><span class=\"bold\">" + title + "</span></a>";
	html += "<a href=\"" + lnk + "\" class=\"blog\" target=\"_blank\"><span class=\"normal\">" + abst + "</span></a>";
	html += "</div>";
	
	return html;
}

function LoadBlock(target, data)
{
	var req = new WebRequest(data);
	req.onReady = function()
	{
		var xml = req.ResponseXml;
		
		var list = xml.getElementsByTagName("block");
		for ( var i = 0, j = list.length; i < j; i++ )
		{
			var title = list[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			var type = (list[i].getElementsByTagName("type")[0].firstChild) ? list[i].getElementsByTagName("type")[0].firstChild.nodeValue : "";
			var data = (list[i].getElementsByTagName("data")[0].firstChild) ? list[i].getElementsByTagName("data")[0].firstChild.nodeValue : "";
			var style = (list[i].getElementsByTagName("style")[0].firstChild) ? list[i].getElementsByTagName("style")[0].firstChild.nodeValue : "";
			
			var block = new Block(title, type, data, style);
			block.Render(target);
		}
	}
	req.Send();
}