String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') }

var mpr = 'icon_preview';
var mcpr = 'icon_close_preview';
var psize = '300';
var pwidth = '800';
var MONTH_STRING  = new Array("Jan", "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec"); 
var isDebug = true;

function blog_item_ext(sid, startv, link, title, n, en, googleP, technoratiP, delP, keyP, serverTime, createdTime, blogName, blogUrl, rssurl, atomurl, userName, hasphoto, thumbnailPicture, description)
{
	document.write('<TABLE><TR><td></td>');
	if(googleP>0)
	{
		document.write('<td><img src="/images/google.gif" alt="Google"></td><td>&nbsp;' + (googleP + startv) + '</td>');
	}
	if(technoratiP>0)
	{
		document.write('<td><img src="/images/technorati.gif" alt="Technorati"></td><td>&nbsp;' + (technoratiP + startv) + '</td>');
	}
	if(delP>0)
	{
		document.write('<td><img src="/images/del.gif" alt="Del.icio.us"></td><td>&nbsp;' + delP + '</td>');
	}
	if(keyP>0)
	{
		document.write('<td><img src="/images/365key.gif" alt="www.365key.com"></td><td>&nbsp;' + (keyP + startv) + '</td>');
	}
	document.write('<td>&nbsp;&nbsp;</td>');

	if(blogName.length>1)
	{
		if(blogUrl.length>3)
		{
			document.write('<td><a class="nolink" ');
			document.write(' target="_blank" href="' + unescape(blogUrl) + '">' + unescape(blogName) + '</a></td>');
		}else{
			document.write('<td>' + unescape(blogName) + '</td>');
		}
		document.write('<td>&nbsp;</td>');
	}

	if(createdTime.length>4)
	{
		var odays = 0;
		var ohours = 0;
		var ominutes = 0;
		var ctime;
		/*2006-03-14 02:33:32 GMT*/
		/*2005-11-19T08:54:19Z*/
		/*2006-03-13 08:57:50*/
		var datePat = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT$/;
		if(createdTime.match(datePat))
		{
			var a = createdTime.replace(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}) GMT$/, '$3 _ $1 $4:$5:$6 GMT');
			a = a.replace('_', MONTH_STRING[parseInt(RegExp.$2)-1]);

			ctime = new Date(Date.parse(a));
		}else if(createdTime.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/))
		{
			var a = createdTime.replace(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/, '$3 _ $1 $4:$5:$6 GMT');
			a = a.replace('_', MONTH_STRING[parseInt(RegExp.$2)-1]);

			ctime = new Date(Date.parse(a));
		}else if(createdTime.match(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/))
		{
			var a = createdTime.replace(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/, '$3 _ $1 $4:$5:$6 GMT');
			a = a.replace('_', MONTH_STRING[parseInt(RegExp.$2)-1]);

			ctime = new Date(Date.parse(a));
		}else{
			ctime = new Date(Date.parse(createdTime));
		}

		if(ctime)
		{
			//alert("Paser:" + ctime);
			var ntime = new Date(Date.parse(serverTime));
			var offset = Math.abs(ntime.getTime()-ctime.getTime());
			//alert("Offset:" + offset);
			odays = 0;
			ohours = 0;
			ominutes = 0;
			if(offset<60*1000)
			{
				ominutes = 1;
			}else if(offset<60*60*1000)
			{
				ominutes = Math.round((offset/(60*1000))-0.5);
			}else if(offset<24*60*60*1000)
			{
				ohours = Math.round((offset/(60*60*1000))-0.5);
				ominutes = Math.round((offset-ohours*60*60*1000)/(60*1000)-0.5);
			}else{
				odays = Math.round(offset/(24*60*60*1000)-0.5);
				var noff = offset-odays*24*60*60*1000;
				ohours = Math.round(noff/(60*60*1000)-0.5);
				//var noff = noff-ohours*60*60*1000;
				//ominutes = Math.round(noff/(60*1000)-0.5);
			}
		}

		if(odays>0)
		{
			document.write('<td class="updateTime">' + odays + ' ' + (en==0? unescape('%u5929'):(odays>1? 'days':'day')));
			//if(ohours>0)
			//	document.write(' ' + ohours + ' ' + (en==0? unescape('%u5C0F%u65F6'):(ohours>1? 'hours':'hour')));
			document.write(' ' + (en==0? unescape('%u4EE5%u524D'):'ago') + '</td>');
		}else if(ohours>0)
		{
			document.write('<td class="updateTime">' + ohours + ' ' + (en==0? unescape('%u5C0F%u65F6'):(ohours>1? 'hours':'hour')));
			//if(ominutes>0)
			//	document.write(' ' + ominutes + ' ' + (en==0? unescape('%u5206%u949F'):(ominutes>1? 'minutes':'minute')));
			document.write(' ' + (en==0? unescape('%u4EE5%u524D'):'ago') + '</td>');
		}else if(ominutes>0){
			document.write('<td class="updateTime">' + ominutes + ' ' + (en==0? unescape('%u5206%u949F'):(ominutes>1? 'minutes':'minute')));
			document.write(' ' + (en==0? unescape('%u4EE5%u524D'):'ago') + '</td>');
		}else{
			document.write('<td class="updateTime">' + createdTime + '</td>');
		}
		document.write('<td>&nbsp;</td>');
	}

	if(userName.length>0)
	{
		document.write('<td>' + (en==0? (unescape('%u4F5C%u8005')+':'):'By ') + unescape(userName) + '</td>');
	}

	if(rssurl.length>4)
	{
		document.write('<td><a target="_blank" href="' + unescape(rssurl) + '"><img src="rss.gif"></a></td>');
		document.write('<td>&nbsp;</td>');
	}

	if(atomurl.length>4)
	{
		document.write('<td><a target="_blank" href="' + unescape(atomurl) + '"><img src="atom.gif"></a></td>');
		document.write('<td>&nbsp;</td>');
	}

	bookmark(en, link, title);

	document.write('<td></td><td>' + pv(link,sid+n,en) + '</td>');

	document.write('</TR></TABLE>');

	document.write('<div id="previewlk' + sid + n + '" style="display:none"></div>');
}


function bookmark(en, link, title)
{
	if(en==0)
	{
		document.write('<td><img src="/images/bookmark.gif" alt="' + unescape('%u7F51%u6458') + '" title="' + unescape('%u7F51%u6458') + '"></td>');
		document.write('<td><a class="nolink" href="javascript:void(delicious(\'' + link + '\', \'' + title + '\'));" title="'+ unescape('%u6536%u85CF%u5230%u7F8E%u5473%u4E66%u7B7E') + '">[<strong style=\'color:#0000FF\'>del.icio.us</strong>]</a>&nbsp;</td>');
		document.write('<td><a class="nolink" href="javascript:void(bm365(\'' + link + '\', \'' + title + '\'));">[<strong style=\'color:#a287be\' title="' + unescape('%u6536%u85CF%u5230%u5929%u5929%u7F51%u6458') + '">365k</strong><strong style=\'color:#00CC00\'>e</strong><strong style=\'color:#9575B6\'>y</strong>]</a>&nbsp;</td>');
	}else{
		document.write('<td>Add to:&nbsp;&nbsp;</td>');
		document.write('<td>');
		document.write('<a class="nolink" href="javascript:void(delicious(\'' + link + '\', \'' + title + '\'));" title="Bookmark it at Del.icio.us"><img src="/images/delicious.png"></a>');
		document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="nolink" href="javascript:void(digg(\'' + link + '\', \'' + title + '\'));" title="Digg it"><img src="/images/diggman.png"></a>');
		document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="nolink" href="javascript:void(furl(\'' + link + '\', \'' + title + '\'));" title="Bookmark it at furl.net"><img src="/images/furl.png"></a>');
		document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="nolink" href="javascript:void(spurl(\'' + link + '\', \'' + title + '\'));" title="Bookmark it at spurl.net"><img src="/images/spurl.png"></a>');
		document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="nolink" href="javascript:void(yahooMyweb(\'' + link + '\', \'' + title + '\'));" title="Bookmark it at yahoo myweb"><img src="/images/yahoomyweb.png"></a>');
		document.write('&nbsp;&nbsp;&nbsp;&nbsp;</td>');
	}
}

function yahooMyweb(url, title)
{
	window.open('http://myweb2.search.yahoo.com/myresults/bookmarklet?t=' + title + '&u=' + url, '','');
}

function furl(url, title)
{
	window.open('http://www.furl.net/storeIt.jsp?t=' + title + '&u=' + url, '','');
}

function spurl(url, title)
{
	window.open('http://www.spurl.net/spurl.php?title=' + title + '&url=' + url, '','');
}

function digg(url, title)
{
	window.open('http://digg.com/submit?phase=2&amp;url=' + url, '','');
}

function bm365(url, title)
{
	keyit=window.open('http://www.365key.com/storeit.aspx?t=' + title + '&u=' + url + '&c=','keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes');
	keyit.focus();
}

function delicious(url, title)
{
	keyit=window.open('http://del.icio.us/post?url=' + encodeURIComponent(unescape(url)) + '&title=' + encodeURIComponent(unescape(title)) + '&extended=','delicious', 'toolbar=no, width=800, height=600');
	keyit.focus();
}

function pv(url, id, en) {
  if(document.all || document.getElementById) {
	return '<a class="nolink" href="'+unescape(url)+'" id="lk'+id+'" onClick="pview(this, ' + en + ');return false;"><img alt="' + (en==0? unescape('%u6211%u8981%u9884%u89C8%uFF01'):'Preview') + '" border=0 src=/images/'+mpr+'.gif>' + (en==0? unescape('%u9884%u89C8'):'Preview') + '</a>';
  }
  return '';
}

function pview(link, en) {
  var ie4 = (document.all && !document.getElementById) ? true : false;
  if (ie4 == 1) {
	var iframe = document.all['if'+link.id];
  }
  else {
	var iframe = document.getElementById('if'+link.id);
  }

  if(link.innerHTML.indexOf(mpr) > -1) {  
	link.innerHTML = '<img alt="' + (en==0? '关闭预览':'Close preview') + '" border=0 src=/images/'+mcpr+'.gif>' + (en==0? '关闭预览':'Close Preview');
	if(iframe) {                         
	  iframe.src = link.href;
	  iframe.style.height = psize;
	  iframe.style.visibility = 'visible';
	} else {
	  myIframe = '<iframe id=if'+link.id + ' width=' + pwidth + ' height=' + psize + ' src="' + link.href + '"></iframe><br /><table border=0 width="' + pwidth + '"><tr><td align=right>' + '<a class="nolink" href="' + link.href + '"  onClick="close_preview_and_open_new_window(\'' + link.id + '\', ' + en + ');return false;">' + '<img src="/images/icon_new.gif"><font size=-1>' + (en==0? '在新窗口中打开':'Open in new window') + '</font></a>' + '</td></tr></table>';
	  var sdiv = document.getElementById('preview' + link.id);
	  //alert(myIframe);
	  sdiv.innerHTML=myIframe;
	  sdiv.style.display='';

	  var sdiv2 = document.getElementById('preview' + link.id + 'two');
	  sdiv2.style.display='';

	}
  } else if(iframe) {
	link.innerHTML = '<img alt="' + (en==0? '预览':'Preview') + '" border=0 src=/images/'+mpr+'.gif>' + (en==0? '预览':'Preview');
	var sdiv = document.getElementById('preview' + link.id);
	sdiv.innerHTML='';
	//sdiv.removeChile(iframe);
	sdiv.style.display='none';
  
  	  var sdiv2 = document.getElementById('preview' + link.id + 'two');
	  sdiv2.style.display='none';

  }
}

function close_preview(lid, en)
{
	//alert(lid);
	var link = document.getElementById(lid);
	if(link)
	{
		link.innerHTML = '<img alt="' + (en==0? unescape('%u6211%u8981%u9884%u89C8%uFF01'):'Preview') + '" border=0 src=/images/'+mpr+'.gif>' + (en==0? unescape('%u9884%u89C8'):'Preview');
	}
	var sdiv = document.getElementById('preview' + lid);
	sdiv.innerHTML='';
	sdiv.style.display='none';

	var sdiv2 = document.getElementById('preview' + lid + 'two');
	sdiv2.style.display='none';

}

function close_preview_and_open_new_window(lid, en)
{
	var link = document.getElementById(lid);
	if(link)
	{
		window.open(link.href);
		link.innerHTML = '<img alt="' + (en==0? unescape('%u6211%u8981%u9884%u89C8%uFF01'):'Preview') + '" border=0 src=/images/'+mpr+'.gif>' + (en==0? unescape('%u9884%u89C8'):'Preview');
	}
	var sdiv = document.getElementById('preview' + lid);
	sdiv.innerHTML='';
	sdiv.style.display='none';

	var sdiv2 = document.getElementById('preview' + lid + 'two');
	sdiv2.style.display='none';

}

function showOnly(link, s)
{
	var selectDiv = document.getElementById("selectResult");
	if(selectDiv)
	{
		var alist = selectDiv.childNodes;
		for(i=0; i<alist.length; i++)
		{
			var aelement = alist.item(i);
			if(aelement.tagName=='A')
				aelement.className = "ass";
		}
		link.className = "assa";
	}

	var dlist = document.getElementsByTagName('div');

	for(i=0; i<dlist.length; i++)
	{
		var node = dlist.item(i);
		var ids;
		try{
			ids = node.getAttribute('id');
		}catch(e){
		}
		if('itemWrap'!=ids)
			continue;

		if('all'==s)
		{
			node.style.display='';
			continue;
		}

		var v;
		try{
			v = node.getAttribute(s);
			if(v)
			{
				if(v!='0')
					node.style.display='';
				else
					node.style.display='none';
			}
		}catch(e)
		{
		}
	}
}

function showTow(link, s, t)
{
	var selectDiv = document.getElementById("selectResult");
	if(selectDiv)
	{
		var alist = selectDiv.childNodes;
		for(i=0; i<alist.length; i++)
		{
			var aelement = alist.item(i);
			if(aelement.tagName=='A')
				aelement.className = "ass";
		}
		link.className = "assa";
	}

	var dlist = document.getElementsByTagName('div');

	for(i=0; i<dlist.length; i++)
	{
		var node = dlist.item(i);
		var v;
		var vt;
		try{
			v = node.getAttribute(s);
			vt = node.getAttribute(t);
			if(v && vt)
			{
				if(v!='0' && vt!='0')
					node.style.display='';
				else
					node.style.display='none';
			}
		}catch(e)
		{
		}
	}
}

function setHighLightText(kw)
{
	setHighLightTextNoEscape(unescape(kw), '#CC0033', '');
}

function setHighLightTextNoEscape(kw, fcolor, bcolor)
{
	try{
		if(kw.length<1)return;

		var separater = ' ';

		var div = document.getElementById('mainbox');
		
		var m_Range = document.body.createTextRange();
		//var m_Range = div;

		kw = kw.replace('"', ' ');
		kw = kw.replace('+', ' ');

		var keywords = kw.split(' ');

		var bookmark = m_Range.getBookmark();
		for ( var i=0 ; i < keywords.length ; ++i )
		{
			var keyword = keywords[i];
			if ( keyword && keyword.length > 1 )
			{
				while(m_Range.findText(keywords[i]))
				{
					//m_Range.execCommand('ForeColor', 'false', '#FF0000');
					//m_Range.execCommand('BackColor', 'false', '#FFFFaa'); 

					m_Range.execCommand('ForeColor', 'false', fcolor);
					m_Range.execCommand('BackColor', 'false', bcolor); 
					m_Range.collapse(false);
				}
				m_Range.moveToBookmark(bookmark);
			}
		}
	}catch(e)
	{
	}
}

var allDictChecks;
var allDictLists;

function initAllDictChecks(num)
{
	allDictChecks = new Array(num+1);

	for(i=1; i<allDictChecks.length; i++)
	{
		allDictChecks[i] = false;
	}
}

function showAllDictList(keys, nums)
{
	allDictLists = keys;
	//alert(keys);
	document.write('<div class="dictTitle">聚合分类</div><ul>');
	
	for(i=1; i<keys.length; i++)
	{
		if(i==18)
		{
			document.write('</ul><div class="dictMore"><a href="#top" onclick="metaKeywordsMore()">更多...</a></div><ul id="moreKeywordsUl" style="display:none">');
		}
		document.write('<li class="dict_unselected" id="li_' + i + '"><A class="dict_unselected_a" href="#top" onclick="metaSelectKeywords(this, ' + i + ', \'' + keys[i] + '\')">' + keys[i] + '&nbsp;&nbsp;[' + nums[i] + ']</A></li>');
	}

	document.write('</ul>');
}

var itemFirstCheck = true;
var itemDictLists;
var itemDisplays;


function initItemDictLists(num)
{
	//alert('initItemDictLists:' + num);

	itemDictLists = new Array(num+1);
	itemDisplays = new Array(num+1);

	itemDisplays[0] = false;

	for(i=1; i<itemDisplays.length; i++)
	{
		itemDisplays[i] = true;
	}

	//alert('itemDisplays.length:' + itemDisplays.length);
}

function setItemDictLists(n, list)
{
	itemDictLists[n] = list;
}

function metaSelectKeywords(href, dictN, key)
{
	//alert('dictN:' + dictN + '\r\nkey:' + key);

	allDictChecks[dictN] = !allDictChecks[dictN];

	//alert('itemDictLists:' + itemDictLists);

	var li = document.getElementById('li_' + dictN);
	
	li.className = (allDictChecks[dictN] ? 'dict_selected':'dict_unselected');
	href.className = (allDictChecks[dictN] ? 'dict_selected_a':'dict_unselected_a');

	var isAllFalse = true;
	var selectDictNum = 0;
	var selectDictLists;

	for(i=1; i<allDictChecks.length; i++)
	{
		if(allDictChecks[i])
		{
			isAllFalse = false;
			selectDictNum++;
		}
	}

	if(selectDictNum>0)
	{
		selectDictLists = new Array(selectDictNum);
		n=0;
		for(i=1; i<allDictChecks.length; i++)
		{
			if(allDictChecks[i])
			{
				selectDictLists[n] = allDictLists[i];
				n++;
			}
		}
	}

	//alert('xx selectDictLists:' + selectDictLists);

	//alert('xx itemDisplays:' + itemDisplays);


	if(isAllFalse)
	{
		for(i=0; i<itemDisplays.length; i++)
		{
			itemDisplays[i] = true;
		}
	}else
	{
		//alert('dictN:' + dictN + '\r\nkey:' + key + '\r\nallDictChecks[dictN]:' + allDictChecks[dictN] + '\r\nitemFirstCheck:' + itemFirstCheck);
		//if(itemFirstCheck)
		{
			for(i=1; i<itemDisplays.length; i++)
			{
				itemDisplays[i] = false;
			}
		}

		for(i=1; i<itemDictLists.length; i++)
		{
			if(!itemDictLists[i])continue;

			var itemFoundDict = new Array(selectDictLists.length);

			for(k=0; k<itemFoundDict.length; k++)
			{
				itemFoundDict[k] = false;
				for(j=1; j<itemDictLists[i].length; j++)
				{
					if(selectDictLists[k]==itemDictLists[i][j])
					{
						itemFoundDict[k] = true;
						break;
					}
				}
			}

			var isFound = true;
			for(k=0; k<itemFoundDict.length; k++)
			{
				if(!itemFoundDict[k])isFound=false;
			}
			
			itemDisplays[i] = isFound;

		}
	}

	//alert('itemDisplays:' + itemDisplays);

	var dlist = document.getElementsByTagName('div');

	try{
		for(i=0; i<dlist.length; i++)
		{
			var node = dlist.item(i);
			var ids;
			ids = node.getAttribute('id');

			if('itemWrap'!=ids)
				continue;

			v = node.getAttribute('guid');

			if(v)
			{
				if(itemDisplays[v])
				{
					if(node.style.display='none')
					{
						node.style.display='';
					}else
					{
					}
				}else{
					if(node.style.display='none')
					{
					}else
					{
						node.style.display='none';
					}
				}
			}
		}
	}catch(e)
	{
	}

	if(allDictChecks[dictN])
	{
		setHighLightTextNoEscape(key, '#CC0033', '#FFEBCD');
	}else{
		setHighLightTextNoEscape(key, '', '');
	}

	itemFirstCheck = isAllFalse;
}

function metaKeywordsMore()
{
	var div = document.getElementById('moreKeywordsUl');
	if(div.style.display=='none')
		div.style.display='';
	else
		div.style.display='none';
}

/*
WebItem = function () {  
}; 

WebItem.prototype = {
	link:'',
	name:'',
	content:'',
	googlePosition:0,
	baiduPosition:0,
	yahooPosition:0,
	dictLists:[]
};
*/

var favMap = {};
var userFavMap = {};

function loadFavMap(m)
{
	favMap = m;
}

function loadUserFavMap(m)
{
	userFavMap = m;
}

function showFavCount(urlMd5)
{
	var _tvalue = favMap[urlMd5];
	if(!_tvalue)
		_tvalue = '0';

	document.write(_tvalue);
}

function favItem(guid, urlMd5, en, count, ufav)
{
	var _tvalue = userFavMap[urlMd5];
	var isFav = false;
	if(_tvalue)
	{
		isFav = true;
	}

	var _info = '收藏';
	if(isFav)
		_info = '该网页已经被你收藏。收藏时间：' + _tvalue;
	
	document.write('<A HREF="javascript:bookmarkItem(\'' + guid + '\')" title="' + _info + '"><img src="/images/' + (isFav? '':'no') + 'fav.gif" alt="' + _info + '"/></A>');
}

function bookmarkItem(guid)
{
	var alink = document.getElementById('itemLink' + guid);
	var content = document.getElementById('itemContent' + guid);

	if(!alink || !content)return;

	var url = alink.getAttribute('href');

	var title;
	var sExtended;

	if(isIE())
	{
		title = alink.innerText;
		sExtended = content.innerText;
	}else{
		title = alink.textContent;
		sExtended = content.textContent;
	}

	if(sExtended)
	{
		sExtended = sExtended.replace(/\s{1,}/g,' ');
	}

	document.bookmark_form.url.value = url;
	document.bookmark_form.title.value = title;
	document.bookmark_form.extended.value = sExtended;
	document.bookmark_form.submit();

}

function isIE()
{
	if(window.navigator.appName.indexOf('Microsoft')>-1)return true;
	return false;
}

function item_new_ext(startv, link, title, n, en, posMap, infoMap, serverTime)
{
	document.write('<TABLE><TR><td></td>');

	for(i in posMap)
	{
		if(posMap[i]<1)continue;
		document.write('<td><img src="/images/' + i + '.gif" alt=' + i + '></td><td>&nbsp;' + (posMap[i] + startv) + '</td>');
	}
	document.write('<td>&nbsp;&nbsp;</td>');

	if(infoMap['source'])
	{
		var _lstr = unescape(link);
		var _siteUrl;
		if(_lstr.length>10)
		{
			_lstr = _lstr.substring(7)
			var _index = _lstr.indexOf('/');
			if(_index>2)
			{
				_siteUrl = _lstr.substring(0,_index);
			}

		}
		if(_siteUrl)
		{
			document.write('<td><a class=nolink href="http://' + _siteUrl + '" target="_blank">' + infoMap['source'] + '</a></td>');
		}else{
			document.write('<td>' + infoMap['source'] + '</td>');
		}
		document.write('<td>&nbsp;</td>');
	}

	createdTime = '';

	if(infoMap['pubdate'])
		createdTime = infoMap['pubdate'];

	var timestr = getTimeString(createdTime, serverTime, en);
	if(timestr.length>0)
	{
		document.write('<td class="updateTime">' + timestr + '</td>');
		document.write('<td>&nbsp;</td>');
	}

	if(infoMap['name'])
	{
		document.write('<td> By ' + infoMap['name'] + '</td>');
	}

	if(infoMap['rssurl'])
	{
		document.write('<td><a target="_blank" href="' + infoMap['rssurl'] + '"><img src="/images/rss.gif"></a></td>');
		document.write('<td>&nbsp;</td>');
	}

	if(infoMap['atomurl'])
	{
		document.write('<td><a target="_blank" href="' + infoMap['atomurl'] + '"><img src="/images/atom.gif"></a></td>');
		document.write('<td>&nbsp;</td>');
	}

	bookmark(en, link, title);

	document.write('<td></td><td>' + pv(link,n,en) + '</td>');

	document.write('</TR></TABLE>');
}

function $id(id){ return document.getElementById(id) }
function $tags(t,o){ o=o||document; return o.getElementsByTagName(t) }
function $tag(t,o,i) { o=o||document; return o.getElementsByTagName(t)[i||0] }
// get elements by class name, eg $c('post', document, 'li')
function $c(c,o,t) { o=o||document;
	if (!o.length) o = [o]
	else if(o.length == 1 && !o[0]) o = [o] // opera, you're weird
	var elements = []
	for(var i = 0, e; e = o[i]; i++) {
		if(e.getElementsByTagName) {
			var children = e.getElementsByTagName(t || '*')
			for (var j = 0, child; child = children[j]; j++) if(isA(child,c)) elements.push(child)
	}}
	return elements
}

var getHttpText = function(url) { 
	try{
		var xmlhttp= getXmlHttp();
		xmlhttp.open("GET", url, false);
		xmlhttp.send("");
	}catch(e){
		return null;
	}
	if(xmlhttp.status == 200 || xmlhttp.status == 0){
		return xmlhttp.responseText;
	}
	return null;
}

var getHttpText = function(url, content) { 
	try{
		var xmlhttp= getXmlHttp();
		xmlhttp.open("POST", url, false);
		xmlhttp.send(content);
	}catch(e){
		return null;
	}
	if(xmlhttp.status == 200 || xmlhttp.status == 0){
		return xmlhttp.responseText;
	}
	return null;
}

var sendRequestPost = function(url, content, callback) {
	var req = getXmlHttp();

	req.onreadystatechange = function(){
		// only if req shows "loaded"
		if (req.readyState == 4) {
			// only if "OK"
			if (req.status == 200) {
				callback(req.responseText);
			} else {
				alert("There was a problem retrieving the response data:\n" +
					req.statusText);
				callback("网络请求出错！");
			}
	    }
	}

	if(content)
	{
        req.open("POST", url, true);
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		if (req.overrideMimeType)
			req.setRequestHeader('Connection', 'close');
        req.send(content);
	}else{
	    req.open("GET", url, true);
		req.send(null);
	}
}

var sendRequestPost2 = function(url, content, callback, reValue) {
	var req = getXmlHttp();

	req.onreadystatechange = function(){
		// only if req shows "loaded"
		if (req.readyState == 4) {
			// only if "OK"
			if (req.status == 200) {
				callback(req.responseText, reValue);
			} else {
				alert("There was a problem retrieving the response data:\n" +
					req.statusText);
				callback("网络请求出错！");
			}
	    }
	}

	if(content)
	{
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		if (req.overrideMimeType)
			req.setRequestHeader('Connection', 'close');
        req.send(content);
	}else{
	    req.open('GET', url, true);
		req.send(null);
	}
}

var getXmlHttp = function()
{
	var _req;
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        _req = new XMLHttpRequest();
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        _req = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
		//null
	}
	return _req;
}

function siteitem_ext(n, link, title, en, urlMd5, adddate, serverTime, username, tagsString)
{
	document.write('<TABLE><TR>');


	createdTime = adddate;

	var timestr = getTimeString(createdTime, serverTime, en);
	if(timestr.length>0)
	{
		document.write('<td class="updateTime" nowrap>' + timestr + '</td>');
		document.write('<td>&nbsp;</td>');
	}

	if(username)
	{
		document.write('<td nowrap><a href="/user/' + username + '">' + username + ' 收藏</a></td>');
	}

	if(tagsString.length>0)
	{
		document.write('<td>' + showTags(tagsString) + '  </td>');
	}


	document.write('<td nowrap><a href="/url/' + urlMd5 + '">' + favMap[urlMd5] + '人收藏</a>&nbsp;&nbsp;&nbsp;</td>');

	//bookmark(en, link, title);

	document.write('<td></td><td nowrap>' + pv(link,n,en) + '</td>');

	document.write('</TR></TABLE>');
}

var pageAllTags = {};

function showTags(tagsString)
{
	var result = '';
	
	if(tagsString.length>0)
	{
		var tags = tagsString.split(' ');
		result += 'Tags: ';
		for(i in tags)
		{
			result += '<a href="/tag/' + encodeURIComponent(tags[i]) + '">' + tags[i] + '</a>&nbsp;&nbsp;';
			pageAllTags[tags[i]] = '0';
		}
	}
	return result;
}

function getTimeString(createdTime, serverTime, en)
{
	var result = '';

	if(createdTime.length>1)
	{
		var odays = 0;
		var ohours = 0;
		var ominutes = 0;
		var ctime;
		var datePat = /^\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}$/;
		if(createdTime.match(datePat))
		{
			var a = createdTime.replace(/^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2})$/, '$3 _ $1 $4:$5:00 GMT+0800');
			a = a.replace('_', MONTH_STRING[parseInt(RegExp.$2)-1]);

			ctime = new Date(Date.parse(a));
		}else if(createdTime.match(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} GMT$/))
		{
			var a = createdTime.replace(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}) GMT$/, '$3 _ $1 $4:$5:$6 GMT');
			a = a.replace('_', MONTH_STRING[parseInt(RegExp.$2)-1]);

			ctime = new Date(Date.parse(a));
		}else if(createdTime.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/))
		{
			var a = createdTime.replace(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/, '$3 _ $1 $4:$5:$6 GMT');
			a = a.replace('_', MONTH_STRING[parseInt(RegExp.$2)-1]);

			ctime = new Date(Date.parse(a));
		}else if(createdTime.match(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/))
		{
			var a = createdTime.replace(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/, '$3 _ $1 $4:$5:$6 GMT');
			a = a.replace('_', MONTH_STRING[parseInt(RegExp.$2)-1]);

			ctime = new Date(Date.parse(a));
		}else{
			ctime = new Date(Date.parse(createdTime));
		}


		if(ctime)
		{
			//alert("Paser:" + ctime);
			var ntime = new Date(Date.parse(serverTime));
			var offset = Math.abs(ntime.getTime()-ctime.getTime());
			//alert("Offset:" + offset);
			odays = 0;
			ohours = 0;
			ominutes = 0;
			if(offset<60*1000)
			{
				ominutes = 1;
			}else if(offset<60*60*1000)
			{
				ominutes = Math.round((offset/(60*1000))-0.5);
			}else if(offset<24*60*60*1000)
			{
				ohours = Math.round((offset/(60*60*1000))-0.5);
				ominutes = Math.round((offset-ohours*60*60*1000)/(60*1000)-0.5);
			}else{
				odays = Math.round(offset/(24*60*60*1000)-0.5);
				var noff = offset-odays*24*60*60*1000;
				ohours = Math.round(noff/(60*60*1000)-0.5);
				//var noff = noff-ohours*60*60*1000;
				//ominutes = Math.round(noff/(60*1000)-0.5);
			}
		}

		if(odays>0)
		{
			result += odays + ' ' + (en==0? '天':(odays>1? 'days':'day'));
			result += ' ' + (en==0? '以前':'ago');
		}else if(ohours>0)
		{
			result += ohours + ' ' + (en==0? '小时':(ohours>1? 'hours':'hour'));
			result += ' ' + (en==0? '以前':'ago');
		}else if(ominutes>0){
			result += ominutes + ' ' + (en==0? '分钟':(ominutes>1? 'minutes':'minute'));
			result += ' ' + (en==0? '以前':'ago') + '</td>';
		}else{
			result += createdTime;
		}
	}
	return result;
}

function xgTag(tag)
{
	var t = unescape(tag);
	t = ' ' + t.replace('%20', ' ') + ' ';
	var result = '';
	var upt = t.toUpperCase();
	result +='<table border=0 cellspacing=0 cellpadding=0>';
	for( i in pageAllTags )
	{
		if(upt.indexOf(' ' + i.toUpperCase() + ' ')>-1)continue;
		if(i.length<1)continue;
		result +='<tr><td width="114"><nobr><a class=tagLink href="/tag/' + encodeURIComponent(t.trim()) + '+' + encodeURIComponent(i) + '">＋' + i + '</a></nobr></td>';
		result +='<td width="114"><nobr><a class=tagLink href="/tag/' + encodeURIComponent(i) + '">' + i + '</a></nobr></li></ul></td></tr>';
		//result +='<nobr><a class="tagLink" href="/tag/' + encodeURIComponent(i) + '">' + i + '</a></nobr>';
	}
	result +='</table>';
	document.write(result);
}

var userTagsMap = {};
var userTags = [];
var userTags2 = [];
var userTagsPosMap = {};
var suggestions = [];
var oldTagsValue = '';
var changeTagValue = '';

function loadUserTagsMap( v )
{
	for(i in v)
	{
		userTagsMap[unescape(i)] = v[i];
	}
	var n=1;
	for(i in userTagsMap)
	{
		userTagsPosMap[i] = n++;
		userTags[userTags.length] = i;
		userTags2[userTags2.length] = i;
	}

	userTags2.sort();
}

function tagSort(b)
{
	showUserTags(b);
	showSelectedUserTags();
}

function showUserTags(b)
{
	var result = '';
	var tmpArray = b? userTags:userTags2;
	for(i in tmpArray)
	{
		result += '<a id="taga' + userTagsPosMap[tmpArray[i]] + '" href="javascript:swapTag(\'' + escape(tmpArray[i]) + '\')"><nobr>' + tmpArray[i] + '</nobr></a>';
	}
	/*
	for(i in userTagsMap)
	{
		result += '<a id="taga' + userTagsPosMap[i] + '" href="javascript:swapTag(\'' + escape(i) + '\')">' + i + '</a>';
	}
	*/

	$id('userTagsList').innerHTML = result;
}

function swapTag(tag)
{
	tag = unescape(tag);

	if(changeTagValue.length>0)
	{
		oldTagsValue = $id('tags').value;
		var _value = ' ' + oldTagsValue + ' ';
		_value = _value.replace(' ' + changeTagValue + ' ', ' ' + tag + ' ');
		hiddenSelectedUserTags();
		$id('tags').value = _value.trim() + ' ';
		showSelectedUserTags();
		oldTagsValue = '';
		changeTagValue = '';
	}else{
		var a = $id('taga' + userTagsPosMap[tag]);
		if('selected'==a.className)
		{
			a.className = '';
			var tags = getTagsArray($id('tags').value);
			var newTags = [];
			var upperTag = tag.toUpperCase();
			for(i in tags)
			{
				if(tags[i].toUpperCase()==upperTag)
				{
				}else{
					newTags[newTags.length] = tags[i];
				}
			}
			if(newTags.length>0)
				$id('tags').value = newTags.join(' ') + ' ';
			else
				$id('tags').value = '';
		}else{
			a.className = 'selected';
			var value = $id('tags').value;
			value = ' ' + value.trim() + ' ';
			if(value.indexOf(' ' + tag + ' ')<0)
			{
				value += tag;
				$id('tags').value = value.trim() + ' ';
			}
		}
	}
	$id('tags').focus();
	$id('suggestionsValue').innerHTML = '';
	$id('suggestionsLabel').innerHTML = '';
	suggestions = [];
}

function hiddenSelectedUserTags()
{
	var tags = getTagsArray(oldTagsValue);
	//alert(tags);
	for(i in tags)
	{
		if(userTagsPosMap[tags[i]])
		{
			$id('taga' + userTagsPosMap[tags[i]]).className = '';
		}
	}
}

function showSelectedUserTags()
{
	var tags = getTagsArray($id('tags').value);
	//alert(tags);
	for(i in tags)
	{
		if(userTagsPosMap[tags[i]])
		{
			$id('taga' + userTagsPosMap[tags[i]]).className = 'selected';
		}
	}
}

function getTagsArray(tagsString)
{
	tagsString = tagsString.trim();

	var result = [];
	if(tagsString.lenght<1)
		return result;
	result = tagsString.split(' ');
	return result;
}

function updateSuggestions()
{
	var newTags = getTagsArray($id('tags').value);
	var newValue = '';

	var ovalue = ' ' + oldTagsValue + ' ';

	for(i in newTags)
	{
		if(ovalue.indexOf(' ' + newTags[i] + ' ')<0)
		{
			newValue = newTags[i];
			changeTagValue = newValue;
			break;
		}
	}

	if(newValue.length>0)
	{
		suggestions = [];
		var upNewValue = newValue.toUpperCase();
		var _vlen = newValue.length;
		for(i in userTags)
		{
			if(userTags[i].length>=_vlen)
			{
				var _str = userTags[i].substring(0,  _vlen);
				if(_str.toUpperCase()==upNewValue)
				{
					suggestions[suggestions.length] = userTags[i];
				}
			}
		}
		if(suggestions.length>0)
		{
			$id('suggestionsLabel').innerHTML = '建议：';
			var _value = '';
			
			for(i in suggestions)
			{
				_value += '<a ' + (i==0? 'class="sufirst"':'') + 'href="javascript:swapTag(\'' + escape(suggestions[i]) + '\')"><nobr>' + suggestions[i] + '</nobr></a>';
			}
			$id('suggestionsValue').innerHTML = _value;
		}else{
			$id('suggestionsValue').innerHTML = '';
			$id('suggestionsLabel').innerHTML = '';
		}
	}else{
		$id('suggestionsValue').innerHTML = '';
		$id('suggestionsLabel').innerHTML = '';
	}

	hiddenSelectedUserTags();
	showSelectedUserTags();
}

function handlerKeyup(event) {
	var e=(event||window.event) //w3||ie

	switch(e.keyCode) {
		case 9:
			return false;
			break;
		default: 
	}
	updateSuggestions();
}

function handler(event) {
	oldTagsValue = $id('tags').value;
	var e=(event||window.event) //w3||ie
	//alert('e.type:' + e.type + '\ne.keyCode:' + e.keyCode);

	if (e.type == 'keydown') {
		switch(e.keyCode) {
			case 9: 
				if(suggestions.length>0)
				{
					swapTag(suggestions[0]);
					return false;
				}
				break;
			default:
				break;
		}
	}
	
	if(true)return;

	if (e.type == 'keydown') {
		switch(e.keyCode) {
			case 38: alert('38'); break
			case 40: alert('40'); break
			case 8: change = true; break
		}
	} else if (e.type == 'keypress') {
		switch(e.keyCode){
			case 38: case 40: 
				if(e.preventDefault && e.originalTarget) e.preventDefault() //ff
				break;
			case 9: // tab
				if (e.preventDefault) {
					e.preventDefault()
				}
				break;
			case 34432: //case 13: // enter
				return false;
				break;
			default: 
				break;
		}
	} else if (e.type == 'keyup') {
		//updateHilight()
		switch(e.keyCode) {
			//case 8:  //backspace
			//case 46: //delete
			case 35: //end
			case 36: //home
			case 39: // right
			case 37: // left
			case 32: // space
				change = true;
				break
			case 38: case 40: break;
			case 9:
				alert("if(!e.preventDefault && h.suggest.parentNode.parentNode.style.visibility == 'visible') complete() //ie");
				break;
			default: 
				change = true;
		}
	}

	if(change)
	{
		updateSuggestions();
	}
}
