﻿var isIE, isOpr, isFox, isMoz;
var agent = (navigator.userAgent) ? navigator.userAgent.toLowerCase() : "";
isOpr = agent.indexOf("opera") > -1;
isFox = (agent.indexOf("firefox") > -1) && !isOpr;
isIE = (agent.indexOf("msie") > -1) && !isOpr && !isFox;

String.prototype.RealLength = function()
{
	return (this.replace(/[^\x00-\xff]/g, "aa")).length;
}
String.prototype.Trim = function()
{
	return this.replace(/^\s*|\s*$/g, "")
}

function ResponseReader(response)
{
	/*
		<response>
			<error>错误号（0 无错误）</error>
			<message>返回信息</message>
			<responsebody>返回结构</responsebody>
		</response>
	*/
	this.hasError = false;
	this.errorCode = 0;
	this.errorMessage = "";
	this.responseBody = null;
	this.responseText = "";

	if ( response != null )
	{
		var errcode, message, rbody, bodytext;
		
		try
		{
			var resobj = response.getElementsByTagName("response")[0];
			errcode = parseInt(resobj.getElementsByTagName("error")[0].firstChild.nodeValue);
			message = (resobj.getElementsByTagName("message")[0].firstChild) ? resobj.getElementsByTagName("message")[0].firstChild.nodeValue : "";
			rbody = resobj.getElementsByTagName("responsebody")[0].firstChild;
			bodytext = (rbody) ? rbody.nodeValue : "";
			
			this.hasError = (errcode != 0);
			this.errorCode = errcode;
			this.errorMessage = message;
			this.responseBody = rbody;
			this.responseText = bodytext;
		}
		catch(e)
		{
			alert(e.message);
			//alert(response);
		}
	}
}

function WebRequest(url)
{
	this.Method = "GET";
	this.Url = url;
	this.Async = true;
	this.onReady = null;
	this.onLoad = null;
	this.onError = null;
	this.Response = null;
	this.ResponseXml = null;
	
	var req = GetRequest();
	var headers = new Array();

	function GetRequest()
	{
		var req = null;
		
		if ( window.XMLHttpRequest )
		{
			req = new XMLHttpRequest();
		}
		else if ( window.ActiveXObject )
		{
			try
			{
				req = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e)
			{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		
		return req;
	}
	
	
	
	this.SetRequestHeader = function(name, value)
	{
		for ( var i = 0, j = headers.length; i < j; i++ )
		{
			if ( headers[i].Name = name )
			{
				headers[i].Value = value;
				return;
			}
		}
		
		var _header = new Object();
		_header.Name = name;
		_header.Value = value;
		
		headers.push(_header);
	}
	
	this.Send = function(obj)
	{	
		if ( req == null ) req = GetRequest();
		if ( this.Async )
		{
			var ohttp = this;
			req.onreadystatechange = function()
			{
				if (  req.readyState == 4 )
				{
					ohttp.Response = req.responseText;
					ohttp.ResponseXml = req.responseXML;
					
					if ( ohttp.onReady )
						ohttp.onReady();
				}
				else
				{
					if ( ohttp.onLoad )
						ohttp.onLoad();
				}
			}
		}
		try
		{
			req.open(this.Method, this.Url, this.Async);
			
			for ( var i = 0, j = headers.length; i < j; i++ )
			{
				var header = headers[i];
				req.setRequestHeader(header.Name, header.Value);
			}
			
			req.send(obj);
			if ( !this.Async )
			{
				this.Response = req.responseText;
				this.ResponseXml = req.responseXML;
			}
		}
		catch(e)
		{
			if ( this.onError )
				this.onError(e);
			else
				alert(e.message);
		}
	}
	
	this.Abort = function()
	{
		if ( req != null ) req.abort();
	}
}

var loaderimg = root + "script/loading.gif";
function PageLoader(id)
{
	this.ID = id;
	this.Icon = loaderimg;
	this.Show = function(text)
	{
		var loader = GetLoader(this.ID);
		loader.innerHTML = "<img src=\"" + this.Icon + "\" align=\"absmiddle\"> " + ((text) ? text : "loading...");
		loader.style.left = document.documentElement.scrollLeft + "px";
		loader.style.top = document.documentElement.scrollTop + "px";
		loader.style.display = "block";
	}
	
	this.Clear = function()
	{
		var loader = GetLoader(this.ID);
		loader.style.display = "none";
	}
	
	function GetLoader(id)
	{
		var l = document.getElementById(id);
		if ( !l )
		{
			CreateLoader(id);
			l = document.getElementById(id);
		}
		return l;
	}
	
	function CreateLoader(id)
	{
		var loading = document.createElement("div");
		loading.setAttribute("id", id);
		loading.style.position = "absolute";
		loading.style.top = (document.all) ? document.documentElement.scrollTop : window.pageYOffset + "px";
		loading.style.left = (document.all) ? document.documentElement.scrollLeft : window.pageXOffset + "px";
		loading.style.fontWeight = "bold";
		loading.style.border = "1px solid #999";
		loading.style.padding = "5px 10px 5px 5px";
		loading.style.textAlign = "left";
		loading.style.backgroundColor = "#FFFFC0";
		loading.innerHTML = "";
		document.body.appendChild(loading);
	}
}

function Message()
{
	var cssfile = "/service/style/message.css";
	var flashfile = "/images/flashbg.swf";
	var _obj = this;
	// 背景层
	var bgfilter = document.getElementById("bgwarpper");
	// 对话框层
	var msgdialog = document.getElementById("bgmsg");
	var ele_body = document.body;
	
	// 按钮类型
	// 1 确认
	// 2 取消
	// 4 OK
	var btnType = 0;
	
	// 确认关闭事件
	this.onOK = null;
	// 确认事件
	this.onConfirm = null;
	// 取消事件
	this.onCancel = null;
	
	// 初始化
	this.Initialize = function()
	{
		if ( !bgfilter )
		{
			var emsg = document.createElement("div");
			emsg.setAttribute("id", "bgwarpper");
			ele_body.insertBefore(emsg, ele_body.firstChild);
			bgfilter = document.getElementById("bgwarpper");
		}
		if ( !msgdialog )
		{
			var ebg = document.createElement("div");
			ebg.setAttribute("id", "bgmsg");
			ele_body.insertBefore(ebg, ele_body.firstChild);
			msgdialog = document.getElementById("bgmsg");
		}
		
		var csslink = document.createElement("link");
		csslink.setAttribute("type", "text/css");
		csslink.setAttribute("rel", "stylesheet");
		csslink.setAttribute("href", cssfile);
		var head = document.getElementsByTagName("head")[0];
		head.appendChild(csslink);
	}
	
	// 显示对话框
	function _showdialog()
	{
		bgfilter.style.top = "0px";
		bgfilter.style.left = "0px";
		var h = (document.documentElement.scrollHeight >= document.documentElement.clientHeight) ? document.documentElement.scrollHeight : document.documentElement.clientHeight;
		bgfilter.style.height = h + "px";
		bgfilter.style.width = document.documentElement.clientWidth + document.documentElement.scrollLeft + "px";
		
		if ( !document.all )
		{
			bgfilter.style.backgroundColor = "";
			bgfilter.innerHTML = "<embed src=" + flashfile + " quality=high scale=noborder wmode=transparent style=width:100%;height:100%;position:absolute;left:0;top:0 align=middle allowScriptAccess=sameDomain type=application/x-shockwave-flash /><div style=position:absolute;left:0;top:0;width:100%;height:100%;background:url()>&nbsp;</div>";
		}
		
		msgdialog.style.left = document.documentElement.clientWidth / 2 - 150 + document.documentElement.scrollLeft + "px";
		msgdialog.style.top = document.documentElement.clientHeight / 2 - 50 + document.documentElement.scrollTop + "px";
		
		bgfilter.style.display = "block";
		msgdialog.style.display = "block";
	}
	
	// 关闭对话框
	function _closedialog()
	{
		bgfilter.style.display = "none";
		msgdialog.style.display = "none";
	}
	
	this.CallOK = function()
	{
		if (_obj.onOK)
			_obj.onOK();
		_closedialog();
	}
	this.CallConfirm = function()
	{
		if (_obj.onConfirm)
			_obj.onConfirm();
		_closedialog();
	}
	
	this.CallCancel = function()
	{
		if ( _obj.onCancel )
			_obj.onCancel();
		_closedialog();
	}
	
	this.ShowDialog = function(text, title, btn)
	{
		// 标题行
		var etitle = document.createElement("div");
		etitle.setAttribute("id", "bgtitle");
		etitle.innerHTML = (title && title.length > 0) ? title : "对话框";
		
		// 文字行
		var etext = document.createElement("div");
		etext.setAttribute("id", "bgtext");
		etext.innerHTML = text;
		
		// 按钮行
		var ebtnline = document.createElement("div");
		ebtnline.setAttribute("id", "bgbtnline");
		
		// 确认按钮
		if ( (btn & 0x1) == 0x1 )
		{
			var confirmbtn = document.createElement("a");
			confirmbtn.setAttribute("href", "#");
			confirmbtn.innerText = "确定";
			confirmbtn.onclick = this.CallConfirm;
			
			ebtnline.appendChild(confirmbtn);
		}
		
		// 取消按钮
		if ( (btn & 0x2) == 0x2 )
		{
			var cancelbtn = document.createElement("a");
			cancelbtn.setAttribute("href", "#");
			cancelbtn.innerText = "取消";
			cancelbtn.onclick = this.CallCancel;
			
			ebtnline.appendChild(cancelbtn);
		}
		
		// OK按钮
		if ( (btn & 0x4) == 0x4 )
		{
			var okbtn = document.createElement("a");
			okbtn.setAttribute("href", "#");
			okbtn.innerText = "确定";
			okbtn.onclick = this.CallOK;
			
			ebtnline.appendChild(okbtn);
		}
		
		msgdialog.innerHTML = "";
		msgdialog.appendChild(etitle);
		msgdialog.appendChild(etext);
		msgdialog.appendChild(ebtnline);
	}
	
	this.Show = function(text, title)
	{
		this.ShowDialog(text, (title && title.length > 0) ? title : "", 4);
		_showdialog();
	}
	
	this.Confirm = function(text, title)
	{
		this.ShowDialog(text, (title && title.length > 0) ? title : "请确认", 3);
		_showdialog();
	}
	
	this.Wait = function(text, title)
	{
		this.ShowDialog(text, (title && title.length > 0) ? title : "请等待", 2)
		_showdialog();
	}
	
	// 初始化
	this.Initialize();
}

function Calendar()
{
	var prefix = "cal_";
	this.Previous = null;
	this.Next = null;
	this.Bar = null;
	
	function getFirstDayOfMonth(y, m)
	{
		var date = new Date(y, m - 1, 1);
		var day = date.getDay();
		if ( day == 0 ) return 7
		return parseInt(day);
	}
		
	function getLastDayOfMonth(y, m)
	{
		var LastDayOfMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
		if ( m == 2 ) return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0))? 29: 28);
		return LastDayOfMonth[m - 1];
	}
	
	this.Initialize = function(target)
	{
		var WeekName = new Array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");
		var i = 0;
		var j = 0;
		
		var frame = document.createElement("div");
		frame.className = "cal_f";
		
		var btn1 = document.createElement("a");
		btn1.setAttribute("id", "btnpre");
		btn1.setAttribute("href", "#cozyfriday");
		btn1.className = "cal_leftbtn";
		btn1.innerHTML = "&lt;&lt;";
		frame.appendChild(btn1);
		this.Previous = btn1;
		
		var text = document.createElement("a");
		text.setAttribute("id", "calname");
		text.setAttribute("href", "#cozyfriday");
		text.className = "cal_text";
		frame.appendChild(text);
		this.Bar = text;
		
//		var text = document.createElement("div");
//		text.setAttribute("id", "calname");
//		text.className = "cal_text";
//		frame.appendChild(text);
//		this.Bar = text;
		
		var btn2 = document.createElement("a");
		btn2.setAttribute("id", "btnnext");
		btn2.setAttribute("href", "#cozyfriday");
		btn2.className = "cal_rightbtn";
		btn2.innerHTML = "&gt;&gt;";
		frame.appendChild(btn2);
		this.Next = btn2;
		
		
		
		var table = document.createElement("table");
		table.setAttribute("cellspacing", "0");
		table.className = "cal_t";
		
		var tbody = document.createElement("tbody");
		table.appendChild(tbody);
		
		var th = document.createElement("tr");
		for ( i = 0, j = WeekName.length; i < j; i++ )
		{
			var td = document.createElement("td");
			td.innerHTML = WeekName[i];
			th.appendChild(td);
		}
		tbody.appendChild(th);
		
		for ( i = 0; i < 6; i++ )
		{
			var tr = document.createElement("tr");
			for ( j = 0; j < 7; j++ )
			{
				var td =document.createElement("td");
				var id = prefix + "cell_" + (7 * i + j + 1).toString();
				td.setAttribute("id", id);
				tr.appendChild(td);
			}
			tbody.appendChild(tr);
		}
		
		frame.appendChild(table);
		target.appendChild(frame);
	}
	
	this.Refresh = function(y, m)
	{
		var today = new Date();
		var cur = (today.getFullYear() == y) && ((today.getMonth() + 1) == m);
		var i = 0, j = 1;
		var d = getFirstDayOfMonth(y, m);
		var de = getLastDayOfMonth(y, m);
		var MonthName = new Array("January","February","March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
		
		var obj = this;
		this.Bar.innerHTML = MonthName[m-1] + " " + y;
		//this.Bar.setAttribute("href", "javascript:LoadPostByDate(" + y + ", " + m + ")");
		this.Bar.setAttribute("href", "#cozyfriday");
		this.Bar.onclick = function()
		{
			LoadPostByDate(y, m);
		}
		this.Previous.onclick = function()
		{
			if ( m == 1 )
				obj.Refresh(y - 1, 12);
			else
				obj.Refresh(y, m - 1);
		}
		this.Next.onclick = function()
		{
			if ( m == 12 )
				obj.Refresh(y + 1, 1);
			else
				obj.Refresh(y, m + 1);
		}
		
		for ( i = 1; i <= 42; i++ )
		{
			var cell = document.getElementById(prefix + "cell_" + i.toString());
			cell.className = "";
			if ( i < d || j > de )
			{
				cell.innerHTML = "";
			}
			else
			{
				if ( cur && j == today.getDate())
					cell.style.fontWeight = "bold";
				else
					cell.style.fontWeight = "normal";
				cell.innerHTML = j;
				j++;
			}
		}
		
		var rnd = Math.random();
		var url = root + "service/blogservice.aspx?temp=" + rnd + "&t=3&y=" + y + "&m=" + m;
		var req = new WebRequest(url);
		req.onReady = function()
		{
			var res = req.ResponseXml;
			var rr = new ResponseReader(res);
			if ( !rr.hasError )
			{
				var str = rr.responseText;
				var ds = str.split(",");
				for ( var i = 0, j = ds.length; i < j; i++ )
				{
					var offset = d - 1;
					//var dd = parseInt(ds[i]);
					var dd = ds[i] * 1;
					if ( !isNaN(dd) )
					{
						var cell = document.getElementById(prefix + "cell_" + (dd + offset).toString());
						cell.className = "content";
						cell.onclick = function()
						{
							LoadPostByDate(y, m, this.innerHTML);
						}
						cell.style.cursor = "pointer";
					}
				}
			}
		}
		req.Send();
	}
}

//function PlayerModel(id, scr)
function PlayerModel()
{
	var innerobj = this;
	var mscreen = null;
	var mplayer = null;
	var mplaylist = null;
	var timer = null;
	var holdingstring = "Music Player";
	var bufferstring = holdingstring;
	
	this.Playlist = new Playlist();
	this.Loop = true;
	this.CurrentMedia = null;
	this.CurrentPosition = -1;
	
	this.Play = function(pos)
	{
		var music = null;
		
		if ( innerobj.Playlist.ValidatePosition(pos) )
		{
			// 设置播放列表位置
			music = innerobj.Playlist.Item(pos);
			innerobj.CurrentPosition = pos;
		}
		else
		{
			// 没有设置播放列表位置
			if ( innerobj.Playlist.Count > 0 )
			{
				if ( innerobj.CurrentPosition > -1 )
				{
					// 播放当前默认曲目
					music = innerobj.Playlist.Item(innerobj.CurrentPosition);
				}
				else
				{
					// 播放第一首曲目
					music = innerobj.Playlist.Item(0);
					innerobj.CurrentPosition = 0;
				}
			}
		}
		
		if ( music )
			innerobj.SetNewMedia(music);
	}
	
	this.PLayDefault = function()
	{
		var idx = 0;
		for ( var i = 0, j = innerobj.Playlist.Count; i < j; i++ )
		{
			var m = innerobj.Playlist.Item(i);
			if ( m && m.Default )
			{
				idx = i;
				break;
			}
		}
		innerobj.Play(idx);
	}
	
	this.Stop = function()
	{
		mplayer.controls.stop();
		
		bufferstring = holdingstring;
		innerobj.Show(bufferstring);
	}
	
	this.Mute = function()
	{
		mplayer.settings.mute = true;
		if ( bufferstring.indexOf("(mute)") < 0 )
			bufferstring = "(mute)" + bufferstring;
		this.Show(bufferstring);
	}
	
	this.UnMute = function()
	{
		mplayer.settings.mute = false;
		bufferstring = bufferstring.replace("(mute)", "");
		this.Show(bufferstring);
	}
	
	this.Previous = function()
	{
		var index = innerobj.CurrentPosition - 1;
		if ( innerobj.Playlist.ValidatePosition(index) )
			innerobj.Play(index);
		else
			if ( innerobj.Loop ) innerobj.Play(innerobj.Playlist.LastIndex());
	}
	
	this.Next = function()
	{
		var index = innerobj.CurrentPosition + 1;
		if ( innerobj.Playlist.ValidatePosition(index) )
			innerobj.Play(index);
		else
			if ( innerobj.Loop ) innerobj.Play(0);
	}
	
	this.VolumeUp = function()
	{
		ClearTimer();
		
		var cv = mplayer.settings.volume;
		if ( cv >= 100 )
			cv = 100;
		else
			cv += 1;
		mplayer.settings.volume = cv;
					
		mscreen.innerHTML = "volume: " + cv;
		timer = window.setTimeout("ShowMessage('" + bufferstring + "')", 1000);
	}
	this.VolumeDown = function()
	{
		ClearTimer();
		
		var cv = mplayer.settings.volume;
		if ( cv <= 0 )
			cv = 0;
		else
			cv -= 1;
		mplayer.settings.volume = cv;
			
		mscreen.innerHTML = "volume: " + cv;
		timer = window.setTimeout("ShowMessage('" + bufferstring + "')", 1000);
	}
	
	this.Show = function(message)
	{
		if ( mscreen )
			mscreen.innerHTML = message;
	}
	
	this.SetNewMedia = function(music)
	{
		innerobj.CurrentMedia = music;
		mplayer.URL = music.Url;
		mplayer.controls.play();
		
		bufferstring = "playing: " + music.Artist + " - " + music.Name;
		innerobj.Show(bufferstring);
	}
	
	this.LoadList = function(xml)
	{
		var list = xml.getElementsByTagName("t_Music");
		for ( var i = 0, j = list.length; i < j; i++ )
		{
			var art = list[i].getElementsByTagName("MArtist")[0].firstChild.nodeValue;
			var url = list[i].getElementsByTagName("MUrl")[0].firstChild.nodeValue;
			var name = list[i].getElementsByTagName("MName")[0].firstChild.nodeValue;
			var id = list[i].getElementsByTagName("MID")[0].firstChild.nodeValue;
			var def = list[i].getElementsByTagName("MDefault")[0].firstChild.nodeValue;
			
			this.Playlist.Add(new Music(id, art, name, url, def));
		}
		this.PLayDefault();
	}
	
	this.Render = function(target)
	{
		var scr = document.createElement("div");
		scr.className = "mb";
		
		var d_mar = document.createElement("marquee");
		d_mar.setAttribute("id", "PlayerScreen");
		d_mar.setAttribute("scrollmount", "1");
		d_mar.setAttribute("direction", "left");
		d_mar.setAttribute("loop", "-1");
		d_mar.setAttribute("scrolldelay", "0");
		d_mar.onmouseover = function() { this.stop(); }
		d_mar.onmouseout = function() { this.start(); }
		scr.appendChild(d_mar);
		mscreen = d_mar;
		
		target.appendChild(scr);
		
		var btnline = document.createElement("div");
		btnline.setAttribute("id", "sctrlpanel");
		
		var btn1 = document.createElement("img");
		with(btn1)
		{
			setAttribute("src", root + "images/mp_control/prev.gif");
			setAttribute("width", "13");
			setAttribute("height", "13");
			onclick = innerobj.Previous;
			className = "playercontrol";
		}
		btnline.appendChild(btn1);
		
		var btn2 = document.createElement("img");
		with(btn2)
		{
			setAttribute("src", root + "images/mp_control/play.gif");
			setAttribute("width", "13");
			setAttribute("height", "13");
			onclick = innerobj.Play;
			className = "playercontrol";
		}
		btnline.appendChild(btn2);
		
		var btn3 = document.createElement("img");
		with(btn3)
		{
			setAttribute("src", root + "images/mp_control/stop.gif");
			setAttribute("width", "13");
			setAttribute("height", "13");
			onclick = innerobj.Stop;
			className = "playercontrol";
		}
		btnline.appendChild(btn3);
		
		var btn4 = document.createElement("img");
		with(btn4)
		{
			setAttribute("src", root + "images/mp_control/next.gif");
			setAttribute("width", "13");
			setAttribute("height", "13");
			onclick = innerobj.Next;
			className = "playercontrol";
		}
		btnline.appendChild(btn4);
		
		var btn5 = document.createElement("img");
		with(btn5)
		{
			setAttribute("src", root + "images/mp_control/list.gif");
			setAttribute("width", "28");
			setAttribute("height", "13");
			onclick = this.ShowList;
			className = "playercontrol";
		}
		btnline.appendChild(btn5);
		
		target.appendChild(btnline);
		
		var d_list = document.createElement("div");
		d_list.setAttribute("id", "slist");
		d_list.style.display = "none";
		target.appendChild(d_list);
		mplaylist = d_list;
		
		var d_obj = document.createElement("object");
		d_obj.setAttribute("id", "bgs");
		d_obj.setAttribute("classid", "CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6");
		d_obj.setAttribute("width", "0");
		d_obj.setAttribute("height", "0");
		d_obj.setAttribute("codebase", "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701");
		d_obj.setAttribute("type", "application/x-oleobject");
		
		if ( d_obj.settings )
		{
			if ( d_obj.settings.autoStart )
				d_obj.settings.autoStart = true;
			if ( d_obj.settings.balance )
				d_obj.settings.balance = 50;
			if ( d_obj.settings.volume )
				d_obj.settings.volume = 50;
		}
		
		try
		{
		if ( d_obj.uiMode )
			d_obj.uiMode = "invisible";
		}
		catch(e)
		{
		}
		
		
		d_obj.style.display = "none";
		
		target.appendChild(d_obj);
		mplayer = d_obj;

		// 初始操作
		this.Show(bufferstring);
	}
	
	this.ShowList = function()
	{
		if ( mplaylist.style.display == "none" )
		{
			mplaylist.innerHTML = "";
			
			var frm = document.createElement("div");
			frm.className = "plistcontainer";
			
			var ul = document.createElement("ul");
			frm.appendChild(ul);
			
			for ( var i = 0, j = innerobj.Playlist.Count; i < j; i++ )
			{
				var m =  innerobj.Playlist.Item(i);
				if ( m )
				{
					var li = document.createElement("li");
					li.className = "plist";
					
					var a = document.createElement("a");
					//a.className = "music";
					a.setAttribute("href", "#cozyfriday");
					a.setAttribute("alt", i);
					var text = i;
					a.onclick = function()
					{
						innerobj.Play(this.getAttribute("alt"));
					}
					var cont = (i+1) + ": " + m.Artist + " - " + m.Name;
					a.setAttribute("title", cont);
					if ( cont.length > 23 )
						cont = cont.substr(0, 20) + "...";
					a.innerHTML = cont;
					li.appendChild(a);
					ul.appendChild(li);
				}
			}
			mplaylist.appendChild(frm);
			mplaylist.style.display = "block";
		}
		else
		{
			mplaylist.innerHTML = "";
			mplaylist.style.display = "none";
		}
	}
	
	function ClearTimer()
	{
		if ( timer )
		{
			window.clearTimeout(timer);
			timer = null;
		}
	}
}

function Music(id, artist, name, url, def)
{
	this.ID = id;
	this.Artist = artist;
	this.Url = url;
	this.Name = name;
	this.Default = def;
}

function Playlist()
{
	var _innerList = new Array();
	var _innerIndex = -1;
	
	this.CurrentPosition = -1;
	this.Count = 0;
	
	// 添加音乐
	this.Add = function(music)
	{
		if ( music )
		{
			_innerList[++_innerIndex] = music;
			this.Count++;
		}
	}
	
	this.LastIndex = function()
	{
		return _innerIndex;
	}
	
	this.Item = function(index)
	{
		if ( this.ValidatePosition(index) )
			return _innerList[index];
		return null;
	}
	
	this.ValidatePosition = function(pos)
	{
		pos = parseInt(pos);
		if ( !isNaN(pos) )
			return (pos > -1 && pos < _innerList.length);
		return false;
	}
}

// Block
var mp = null;
function Block(title, type, data, style)
{
	this.Title = title;
	this.Type = type;
	this.Data = data;
	this.Style = style;
	
	this.Render = function(target)
	{
		var d_title = document.createElement("h1");
		d_title.innerHTML = this.Title;
		var d_frame = document.createElement("div");
		d_frame.className = "block";
		
		target.appendChild(d_title);
		target.appendChild(d_frame);
		LoadContent(d_frame, this.Type, this.Data, this.Style);
	}
	
	function LoadContent(target, type, data, style)
	{
		switch(type)
		{
			case "About":
				var req = new WebRequest(data);
				req.onReady = function()
				{
					var xml = req.ResponseXml;
					LoadAboutBlock(target, xml);
				}
				req.Send();
				break;
			case "Calendar":
				LoadCalendarBlock(target);
				break;
			case "Latest":
				var ul = document.createElement("ul");
				target.appendChild(ul);
				var req = new WebRequest(data);
				req.onReady = function()
				{
					var xml = req.ResponseXml;
					var rr = new ResponseReader(xml);
					if ( rr.hasError )
						ul.innerHTML = rr.errorMessage;
					else
						LoadLatestBlock(ul, rr.responseBody);
				}
				req.onLoad = function()
				{
					ul.innerHTML = "loading...";
				}
				req.Send();
				break;
			case "Comment":
				var ul = document.createElement("ul");
				target.appendChild(ul);
				var req = new WebRequest(data);
				req.onReady = function()
				{
					var xml = req.ResponseXml;
					var rr = new ResponseReader(xml);
					if ( rr.hasError )
						ul.innerHTML = rr.errorMessage;
					else
						LoadCommentBlock(ul, rr.responseBody);
				}
				req.onLoad = function()
				{
					ul.innerHTML = "loading...";
				}
				req.Send();
				break;
			case "Rss":
				var req = new WebRequest(data);
				req.onReady = function()
				{
					var xml = req.ResponseXml;
					LoadRssBlock(target, xml);
				}
				req.Send();
				break;
			case "Music":
				if ( isIE )
				{
					var mp = new PlayerModel();
					mp.Render(target);
					
					var req = new WebRequest(data);
					req.onReady = function()
					{
						var xml = req.ResponseXml;
						var rr = new ResponseReader(xml);
						if ( rr.hasError )
							mp.Show("error");
						else
						{
							mp.LoadList(rr.responseBody);
							mp.ShowList();
						}
					}
					req.Send();
					break;
				}
				else
				{
					target.innerHTML = "Sorry, but your browser don't support playing music in this site."
				}
			case "Tag":
				var ul = document.createElement("ul");
				ul.className = "tag";
				target.appendChild(ul);
				var req = new WebRequest(data);
				req.onLoad = function() { ul.innerHTML = "loading..."; }
				req.onReady = function()
				{
					var xml = req.ResponseXml;
					var rr = new ResponseReader(xml);
					if ( rr.hasError )
						ul.innerHTML = rr.errorMessage;
					else
						LoadTagBlock(ul, rr.responseBody);
				}
				req.Send();
				break;
			default:
				break;
		}
	}
	
	function LoadAboutBlock(target, xml)
	{
		var name = xml.getElementsByTagName("name")[0].firstChild.nodeValue;
		var img = xml.getElementsByTagName("photo")[0].firstChild.nodeValue;
		var gender = xml.getElementsByTagName("gender")[0].firstChild.nodeValue;
		var age = xml.getElementsByTagName("age")[0].firstChild.nodeValue;
		var location = xml.getElementsByTagName("location")[0].firstChild.nodeValue;
		var job = xml.getElementsByTagName("job")[0].firstChild.nodeValue;
		
		var html = "";
		html += "<div class=\"myimg\"><img src=\"" + img + "\" /></div>";
		html += "<table class=\"MyInfoTable\">";
		html += "<tr>";
		html += "<td class=\"MyInfoTitle\">Name：</td>";
		html += "<td class=\"MyInfoValue\">" + name + "</td>";
		html += "</tr>";
		html += "<tr>";
		html += "<td class=\"MyInfoTitle\">Gender：</td>";
		html += "<td class=\"MyInfoValue\">" + gender + "</td>";
		html += "</tr>";
		html += "<tr>";
		html += "<td class=\"MyInfoTitle\">Age：</td>";
		html += "<td class=\"MyInfoValue\">" + age + "</td>";
		html +=	"</tr>";
		html += "<tr>";
		html += "<td class=\"MyInfoTitle\">Location：</td>"
		html += "<td class=\"MyInfoValue\">" + location + "</td>";
		html += "</tr>";
		html += "<tr>";
		html += "<td class=\"MyInfoTitle\">Job：</td>";
		html += "<td class=\"MyInfoValue\">" + job + "</td>";
		html += "</tr>";
		html += "</table>";
		
		var list = xml.getElementsByTagName("line");
		for ( var i = 0, j = list.length; i < j; i++ )
		{
			html += "<div class=\"myline\">" + list[i].firstChild.nodeValue + "</div>";
		}		
		
		target.innerHTML = html;
	}
	
	function LoadCalendarBlock(target)
	{
		var date = new Date();
		var cal = new Calendar();
		cal.Initialize(target);
		cal.Refresh(date.getFullYear(), date.getMonth() + 1);
	}
	
	function LoadRssBlock(target, xml)
	{
		if ( xml != null )
		{
			var list = xml.getElementsByTagName("feed");
			for ( var i = 0, j = list.length; i < j; i++ )
			{
				var name = list[i].getElementsByTagName("name")[0].firstChild.nodeValue;
				var url  = (list[i].getElementsByTagName("url")[0].firstChild) ? list[i].getElementsByTagName("url")[0].firstChild.nodeValue : "";
				if ( url == "" )
					url = (list[i].getElementsByTagName("url")[0].firstChild) ? list[i].getElementsByTagName("link")[0].firstChild.nodeValue : "";
				var rss  = (list[i].getElementsByTagName("rss")[0].firstChild) ? list[i].getElementsByTagName("rss")[0].firstChild.nodeValue : "";
				var desc = (list[i].getElementsByTagName("description")[0].firstChild) ? list[i].getElementsByTagName("description")[0].firstChild.nodeValue : "";
				
				var channel = document.createElement("div");
				channel.className = "rss";
				
				var a = document.createElement("a");
				if ( rss == "" )
				{
					a.setAttribute("href", url);
					a.setAttribute("target", "_blank");
					a.className = "rssn";
					a.innerHTML = name;
				}
				else
				{
					a.setAttribute("href", "#cozyfriday");
					a.setAttribute("alt", rss);
					a.className = "rssn";
					a.innerHTML = name;
					a.onmouseover = function()
					{
						var e = window.event;
						callrss(e, this.getAttribute("alt"));
					}
					a.onmouseout = function()
					{
						cancelrss();
						clearrss();
					}
				}
				channel.appendChild(a);
				
				var text = document.createElement("span");
				text.className = "text";
				text.innerHTML = desc;
				channel.appendChild(text);

				var sep = document.createElement("div");
				sep.className = "sep";
				channel.appendChild(sep);
				
				target.appendChild(channel);
			}
		}
	}
	
	function LoadLatestBlock(target, xml)
	{
		target.innerHTML = "";
		
		var list = xml.getElementsByTagName("t_Blog");
		for ( var i = 0, j = list.length; i < j; i++ )
		{
			var title = list[i].getElementsByTagName("BTitle")[0].firstChild.nodeValue;
			var date = list[i].getElementsByTagName("BDate")[0].firstChild.nodeValue;
			var id = list[i].getElementsByTagName("BID")[0].firstChild.nodeValue;
			var li = document.createElement("li");
			li.innerHTML = "<a href=\"#cozyfriday\" onclick=\"LoadPostById(" + id + ");\" title=\"" + title + "\">" + title + " (" + date + ")" + "</a>";
			target.appendChild(li);
		}
	}
	
	function LoadCommentBlock(target, xml)
	{
		target.innerHTML = "";
		
		var list = xml.getElementsByTagName("t_Comment");
		for ( var i = 0, j = list.length; i < j; i++ )
		{
			var title = list[i].getElementsByTagName("CContent")[0].firstChild.nodeValue;
			var date = list[i].getElementsByTagName("CDate")[0].firstChild.nodeValue;
			var blog = list[i].getElementsByTagName("BID")[0].firstChild.nodeValue;
			
			var li = document.createElement("li");
			li.innerHTML = "<a href=\"#cozyfriday\" onclick=\"LoadPostById(" + blog + ", true);\" title=\"" + title + "\">" + title + " (" + date + ")" + "</a>";
			target.appendChild(li);
		}
	}
	
	function LoadTagBlock(target, xml)
	{
		target.innerHTML = "";
		
		var list = xml.getElementsByTagName("Table");
		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;
			var count = list[i].getElementsByTagName("Cnt")[0].firstChild.nodeValue;
			
			var li = document.createElement("li");
			//li.className = "tag";
			li.innerHTML = "<a href=\"" + root + "tag/" + code + "\" target=\"_blank\">" + name + "(" + count + ")" + "</a>";
			target.appendChild(li);
		}
	}
}