
var g_wrBlogs = new Object;
var g_wrNotification;

function bgCreateBlogHtml(info)
{
	var sb = new sjcl.StringBuilder();
	var div = document.createElement("DIV");

	sb.write('<div class="Ruler" style="margin: 20px 0"></div>');
	sb.write('<table class="Blog" cellpadding="0" cellspacing="0"><tr><td><table class="W100" cellpadding="0" cellspacing="0"><tr>');
	sb.write('<td class="Title"><a id="bt_');
	sb.write(info.id);
	sb.write('" href="/blogs/Blog.php?id=');
	sb.write(info.name);
	sb.write('">');
	sb.write(info.title);
	sb.write('</a></td>');
	sb.write('<td class="Commands"><a href="javascript: bgEditBlog(\'');
	sb.write(info.id);
	sb.write('\')">');
	sb.write(getString("EDIT"));
	sb.write('</a></td>');
	sb.write('<td class="Feed"><a href="javascript: void(0);"><img src="');
	sb.write(sjcl.path.mapThemeNeutralImage('rss.gif'));
	sb.write('" alt="RSS" /></a></td>');
	sb.write('</tr></table></td></tr><tr>');
	sb.write('<td id="bd_');
	sb.write(info.id);
	sb.write('" class="Description">');
	sb.write(info.description);
	sb.write('</td></tr></table>');

	div.innerHTML = sb.toString();
	$("BlogsContainer").appendChild(div);
}

function bgAddBlog()
{
	addBlog(bgOnBlogAdded);
}

function bgOnBlogAdded(info)
{
	bgCreateBlogHtml(info);
}

function bgEditBlog(id)
{
	editBlog(id, bgOnBlogEdited);
}

function bgOnBlogEdited(info)
{
	var e = $("bt_" + info.id);
	var sp = sjcl.dom.getChildByTagName(e, "SPAN");

	e = sp ? sp : e;
	e.innerText = info.title;

	e = $("bd_" + info.id);
	sp = sjcl.dom.getChildByTagName(e, "SPAN");

	e = sp ? sp : e;
	e.innerText = info.description;
}

function bgCreateArticleWaiter(info)
{
	var container = $("ArticlesContainer");
	var div = document.createElement("DIV");
	var br = document.createElement("BR");

	br.style.lineHeight = "50px";

	div.id = 'bal_' + info.id;
	div.innerHTML = '<img class="InlineImage" src="' + sjcl.path.mapNeutralImage('tarrow_spinner.gif') + '" alt="" /> ' +
			getString('LOADING_ONLY') + ' <b>' + info.title + '</b>...';

	if (container.firstChild)
	{
		container.insertBefore(div, container.firstChild);
		container.insertBefore(br, div.nextSibling);
	}
	else
	{
		container.appendChild(div);
		container.appendChild(br);
	}
}

function bgAddArticle(blogId)
{
	addBlogArticle(blogId, bgOnArticleAdded);
}

function bgOnArticleAdded(info)
{
	bgCreateArticleWaiter(info);
	bgLoadArticle(info.id);
}

function bgLoadArticle(id, editing, fullView)
{
	g_wrBlogs[id] = new sjcl.net.WebRequest("/lib/ajax/LoadBlogArticleView.php", bgOnArticleLoaded.bind(window, id, editing), null, "POST", "Id=" + id + "&FullView=" + Number(fullView));
}

function bgOnArticleLoaded(id, editing)
{
	var wr = g_wrBlogs[id];

	if (wr && !wr.canceled)
	{
		var prev = editing ? $("ba_" + id) : $("bal_" + id);
		var div = document.createElement("DIV");

		div.innerHTML = wr.getText();
		prev.replaceNode(div);

		g_wrBlogs[id] = null;
		delete g_wrBlogs[id];
	}
}

function bgEditArticle(id, fullView)
{
	editBlogArticle(id, bgOnArticleEdited.bind(window, fullView));
}

function bgEditArticleContent(id, fullView)
{
	if (sjcl.browser.isIE)
	{
		openHtmlEditor({
			dataSource: {type: DATA_SRC_BO, className: "BlogArticle", property: "Content", id: id}, 
			version: 2,
			allowFiles: true,
			showHistory: true,
			imagesUrl: "/files/temp/" + id + "/", 
			filesUrl: "/files/images/blogs/" + id + "/files/", 
			onReturn: bgOnHEReturn.bind(window, id, fullView, false)
		});
		
		return;
	}
	
	var wd = showWaitDialog();
	var wr = new sjcl.net.WebRequest("/lib/ajax/LoadBAContent.php", 
		function()
		{
			wd.close();
			openHtmlEditor({
				version: 1, 
				defaultHtml: wr.getText(), 
				imagesUrl: "/files/temp/" + id + "/", 
				onReturn: bgOnHEReturn.bind(window, id, fullView, true)
			});
		},
		null, "POST", "Id=" + id
	);
}

function bgOnArticleEdited(fullView, info)
{
	var sp = document.createElement("SPAN");
	
	sp.innerHTML = '&nbsp;(<img class="InlineImage" src="' + sjcl.path.mapNeutralImage("tarrow_spinner.gif") + '" alt="" /> ' + getString("RELOADING") + '...)';
	$("badate_" + info.id).appendChild(sp);
	bgLoadArticle(info.id, true, fullView);
}

function bgOnHEReturn(id, fullView, save, html)
{
	if (save)
	{
		var wd = showWaitDialog();
		var wr = new sjcl.net.WebRequest("/lib/ajax/UpdateBAContent.php?id=" + id, 
			function()
			{
				wd.close();
				bgOnArticleEdited(fullView, {id: id});
			},
			null, "POST", "Id=" + id + "&Content=" + sjcl.escape(html)
		);
	}
	else
		bgOnArticleEdited(fullView, {id: id});
}

function bgEditArticleCL()
{
	alert(getString("CANNOT_EDIT_BA"));
}

function bgDeleteArticle(id)
{
	if (window.confirm(getString("DEL_CONFIRM")))
	{
		var wd = showWaitDialog();
		var wr = new sjcl.net.WebRequest("/lib/ajax/DeleteBlogArticle.php",
			function()
			{
				var e = $("ba_" + id);

				wd.close();
				
				if (window.location.pathname.indexOf("Article.php") == -1)
				{
					if (e.nextSibling && e.nextSibling.nodeName == "BR")
						sjcl.dom.removeElement(e.nextSibling);

					sjcl.dom.removeElement(e);
					adjustBodyHeight();
				}
				else
					window.location = "/blogs";
			},
			null, "POST", "Ids=" + id
		);
	}
}

function bgPublishArticle(id, state)
{
	var wd = showWaitDialog();
	var wr = new sjcl.net.WebRequest("/lib/ajax/PublishBlogArticle.php",
		function()
		{
			var a = $("bap_" + id);
			var sp = sjcl.dom.getChildByTagName(a, "SPAN");
			var e = sp ? sp : a;
				
			if (state)
			{
				e.innerText = getString("UNPUBLISH");
				a.href = a.href.replace("1);", "0);");
				sjcl.dom.removeElement($("bapd_" + id));
			}
			else
			{
				e.innerText = getString("PUBLISH");
				a.href = a.href.replace("0);", "1);");
				
				var div = document.createElement("DIV");
				var divTitle = $("bat_" + id);
				
				div.id = "bapd_" + id;
				div.className = "BANotPublished";
				div.innerText = getString("NOT_PUBLISHED");
				divTitle.parentNode.insertBefore(div, divTitle.nextSibling);
			}

			wd.close();
		},
		null, "POST", "Ids=" + id + "&State=" + state
	);
}

function bgOnMoveArticleClick(id)
{
	var menu = g_mbBlogs.getMenu("mnuBlogList");
	
	for (var i = 0, n = menu.length(); i < n; i++)
	{
		var item = menu.item(i);
		
		item.url = "javascript: bgMoveArticle('" + id + "', '" + item.value + "')";
	}
	
	g_mbBlogs.showContextMenu("mnuBlogList", $("bama_" + id), null);
}

function bgMoveArticle(id, to)
{
	var sp = document.createElement("SPAN");
	var show;
		
	sp.innerHTML = '&nbsp;(<img class="InlineImage" src="' + sjcl.path.mapNeutralImage("tarrow_spinner.gif") + '" alt="" /> ' + getString("MOVING") + '...)';
	$("badate_" + id).appendChild(sp);
	
	show = window.location.href.indexOf("Blog.php") == -1 ? 1 : 0;
	g_wrBlogs[id] = new sjcl.net.WebRequest("/lib/ajax/MoveBlogArticle.php", bgOnArticleLoaded.bind(window, id, true), null, "POST", "Id=" + id + "&To=" + to + "&ShowBlog=" + show);
}

function bgOnAssignArticleClick(id)
{
	selectUser(null, false, bgOnAssignUserSelected.bind(window, id));
}

function bgOnAssignUserSelected(id, ids, values)
{
	bgAssignArticle(id, ids[0]);
}

function bgAssignArticle(id, to)
{
	var sp = document.createElement("SPAN");
	var show;
		
	sp.innerHTML = '&nbsp;(<img class="InlineImage" src="' + sjcl.path.mapNeutralImage("tarrow_spinner.gif") + '" alt="" /> ' + getString("ASSIGNING") + '...)';
	$("badate_" + id).appendChild(sp);
	
	show = window.location.href.indexOf("Blog.php") == -1 ? 1 : 0;
	g_wrBlogs[id] = new sjcl.net.WebRequest("/lib/ajax/AssignBlogArticle.php", bgOnArticleLoaded.bind(window, id, true), null, "POST", "Id=" + id + "&To=" + to + "&ShowBlog=" + show);
}

function bgOnSearchChange(evt)
{
	var event = new sjcl.Event(evt);

	if (event.keyCode == 13)
		bgOnSearch();
}

function bgOnSearch()
{
	var sb = new sjcl.StringBuilder("&");
	var e;

	if (e = $("txtQuery"))
		sb.write("Query=" + sjcl.escape(e.value));

	if (e = $("bsUsing"))
		sb.write("Using=" + e.value);

	if (e = $("bsTags"))
		sb.write("Tags=" + sjcl.escape(e.value));

	if (e = $("bsAuthors"))
		sb.write("Authors=" + sjcl.escape(e.value));

	if (e = $("bsRpp"))
		sb.write("Rpp=" + e.value);

	if (e = $("bsDate"))
		sb.write("Date=" + e.value);

	if (e = $("bsDays"))
		sb.write("Days=" + sjcl.escape(e.value));

	if (e = $("bsStartDate"))
		sb.write("StartDate=" + sjcl.escape(e.value));

	if (e = $("bsEndDate"))
		sb.write("EndDate=" + sjcl.escape(e.value));

	window.location = "/blogs/Results.php?" + sb.toString();
}

function bgOnSearchDateChange(cbo)
{
	var e1 = $("bsDaysRow");
	var e2 = $("bsStartDateRow");
	var e3 = $("bsEndDateRow");

	switch (cbo.value)
	{
		case "5":
			sjcl.dom.displayElement(e1);
			e2.style.display = "none";
			e2.style.display = "none";
			break;

		case "6":
			e1.style.display = "none";
			e3.style.display = "none";
			sjcl.dom.displayElement(e2);
			break;

		case "7":
			e1.style.display = "none";
			sjcl.dom.displayElement(e2);
			sjcl.dom.displayElement(e3);
			break;

		default:
			e1.style.display = "none";
			e2.style.display = "none";
			e3.style.display = "none";
			break;
	}
}

function bgOnStartDateClick()
{
	var e = $("bsStartDate");
	var calendar = new sjcl.widget.Calendar(e, $("bsStartDatePicker"), null, e.value);

	calendar.dir = ltr() ? "rtl" : "ltr";
	calendar.show(true);
}

function bgOnEndDateClick()
{
	var calendar = new sjcl.widget.Calendar($("bsEndDate"), $("bsEndDatePicker"));

	calendar.dir = ltr() ? "rtl" : "ltr";
	calendar.show(true);
}

function bgOnCalendarSelect(date)
{
	var parts = date.split("/");
	var e = $("BlogId");
	var url;

	parts[0] = parts[0] < 10 ? "0" + parts[0] : parts[0];
	parts[1] = parts[1] < 10 ? "0" + parts[1] : parts[1];
	date = parts[2] + "-" + parts[1] + "-" + parts[0];

	url = "/blogs/Browse.php?cat=day&day=" + sjcl.escape(date);

	if (e)
		url += "&id=" + e.innerText;

	window.location = url;
}

function bgShowMarkReadMenu(img, articleId)
{
	var menu = g_mbBlogs.getMenu("mnuBAMarkRead");
	var item;

	item = menu.item(0);
	item.url = "javascript: bgMarkArticle('" + articleId + "', 1);";

	item = menu.item(1);
	item.url = "javascript: bgMarkArticle('" + articleId + "', 0);";

	g_mbBlogs.showContextMenu("mnuBAMarkRead", img, null);
}

function bgUpdateArticleNotification(id, state)
{
	if (g_wrNotification)
		return;
		
	var td = $("bacs_" + id);
	var a = $("baca_" + id);
	
	td.style.visibility = "visible";
	a.innerText = getString("UPDATING_BAC");
	
	g_wrNotification = new sjcl.net.WebRequest("/lib/ajax/SubscribeBAC.php",
		function()
		{
			$("bacs_" + id).style.visibility = "hidden";
			$("baca_" + id).innerText = getString(state ? "UNSUBSCRIBE_BAC" : "SUBSCRIBE_BAC");
			$("baca_" + id).href = "javascript: bgUpdateArticleNotification('" + id + "', " + (state ? 0 : 1) + ");";
			g_wrNotification = null;
		},
		null, "POST", "Id=" + id + "&State=" + state
	);
}

function bgMarkArticle(id, state)
{
	var wd = showWaitDialog();
	var wr = new sjcl.net.WebRequest("/lib/ajax/MarkBlogArticke.php",
		function ()
		{
			var e = $("bam_" + id);

			wd.close();

			if (e)
				e.src = sjcl.path.mapThemeNeutralImage(state ? "read16.png" : "unread16.png");
		},
		null, "POST", "Id=" + id + "&State=" + state
	);
}

function bgSubmitComment(frm)
{
	var btn = $("bacSubmit");
	var valid = sjcl.form.validate(frm);
	
	if (valid)
		btn.disabled = true;
		
	return valid;
}

function bgChangeDir(id)
{
    var content = $('bacd_' + id);
    var icon = $('chdir_' + id);
    
    icon.src = sjcl.path.mapThemeNeutralImage(content.dir + '16.png');
    content.dir = content.dir == 'ltr'? 'rtl' : 'ltr';
    content.align = content.align == 'left'? 'right' : 'left';
}

function bgEditComment(id)
{
	if (g_wrBlogs[id])
		return;
		
	var div = $("bacd_" + id);
	
	sjcl.widget.inputBox("", div.innerText, sjcl.widget.ContentType.Text, "",
		function(text)
		{
			div.innerHTML += '<div id="bacs_' + id + '" class="DarkGray" style="margin-top: 10px"><img class="InlineImage" src="' + 
				sjcl.path.mapNeutralImage('tarrow_spinner.gif') + '" alt="" /> <b>' + getString("UPDATING") + '...</b></div>';
			
			g_wrBlogs[id] = new sjcl.net.WebRequest("/lib/ajax/UpdateBAComment.php", 
				function()
				{
					$("bacd_" + id).parentNode.innerHTML = g_wrBlogs[id].getText();
					
					g_wrBlogs[id] = null;
					delete g_wrBlogs[id];
				}, 
				null, "POST", "Id=" + id + "&Description=" + text
			);
		},
		getString("EDIT")
	);
}

function bgDeleteComment(id)
{
	if (g_wrBlogs[id] || !window.confirm(getString("DEL_CONFIRM")))
		return;
		
	var tbl = $("bac_" + id);
	var cmd = $("bacc_" + id);
	
	tbl.className += " BACommentDeleted";
	cmd.innerHTML = '<span class="Required"><img class="InlineImage" src="' + sjcl.path.mapNeutralImage('tarrow_spinner.gif') + '" alt="" /> <b>' + getString("DELETING") + '...</b></span>';
	
	g_wrBlogs[id] = new sjcl.net.WebRequest("/lib/ajax/DeleteBAComment.php", 
		function()
		{
			cmd.innerHTML = "";
			$("bacd_" + id).innerHTML = g_wrBlogs[id].getText();
			tbl.className = tbl.className.remove(" BACommentDeleted");
			
			g_wrBlogs[id] = null;
			delete g_wrBlogs[id];
		}, 
		null, "POST", "Id=" + id
	);
}

function bgRefreshComments(id)
{
	$("comments_" + id).innerHTML = '<div class="DarkGray" style="margin: 10px"><img class="InlineImage" src="' + 
		sjcl.path.mapNeutralImage('tarrow_spinner.gif') + '" alt="" /> <b>' + getString("PLEASE_WAIT") + '</b></div>';
		
	wr = new sjcl.net.WebRequest("/lib/ajax/LoadBACommentsCount.php",
	    function()
	    {
	        count = wr.getText();
	        
	        $('CommentsCount').innerHTML = count;
	    },
	    null, "POST", "id=" + id
	);
		
	g_wrBlogs[id] = new sjcl.net.WebRequest("/lib/ajax/LoadBAComments.php", 
		function()
		{
			$("comments_" + id).innerHTML = g_wrBlogs[id].getText();
			
			g_wrBlogs[id] = null;
			delete g_wrBlogs[id];
		},
		null, "POST", "Id=" + id
	);
}

function bgShowViewers(id)
{
	g_SysLoader.call(_bgShowViewers.bind(window, id), 
		[
			sjcl.path.mapSjclScript("TabControl.js"),
			sjcl.path.mapSjclScript("ListView.js"),
			sjcl.path.mapGlobalScript("ArticleViewersDialog.js")
		]
	);
}

function _bgShowViewers(id)
{
	var dlg = new ArticleViewersDialog(id);
	
	dlg.show(true);
}

function rtStars(img, star)
{
	var white = sjcl.path.mapThemeNeutralImage("star_white.gif");
	
	for (var p = img; p; p = p.previousSibling)
		p.src = star;

	for (var p = img.nextSibling; p; p = p.nextSibling)
		p.src = white;
}

function rtOver(img)
{
	if (!img.parentNode.getAttribute("rated"))
	{
		rtStars(img, sjcl.path.mapThemeNeutralImage("star_gold.gif"));
		$("RateResult").innerText = img.getAttribute("tip");
	}
}

function rtFrameOut(frame, event)
{
	var rt = sjcl.event.relatedTarget(event);
	
	if (rt && rt.parentNode != frame && !frame.getAttribute("rated"))
	{
		var rate = parseInt(frame.getAttribute("rate"));
		var gold = sjcl.path.mapThemeNeutralImage("star_gold.gif");
		var white = sjcl.path.mapThemeNeutralImage("star_white.gif");
		
		for (var i = 0; i < frame.childNodes.length; i++)
			frame.childNodes[i].src = i < rate ? gold : white;
			
		$("RateResult").innerText = frame.getAttribute("tip");	
	}
}

function rtClick(img, id)
{
	if (img.parentNode.getAttribute("rated"))
		return;
		
	var rate = img.getAttribute("ordinal");
	var msg = getString("RATE_CONFIRM").replace("%d", rate).replace("%s", img.getAttribute("tip"));
	
	if (confirm(msg))
	{
		var wd = showWaitDialog();
		var wr = new sjcl.net.WebRequest("/lib/ajax/RateArticle.php",
			function()
			{
				wd.close();
			},
			null, "POST", "Id=" + id + "&Rate=" + rate
		);
		
		img.parentNode.setAttribute("rated", true);
		rtStars(img, sjcl.path.mapThemeNeutralImage("star_blue.gif"));
	}
}

sjcl.event.add(window, "load",
	function()
	{
		var e = $("BlogCalendar");

		if (e)
		{
			var div = $("BlogsDateList");
			var calendar;

			calendar = new sjcl.widget.InlineCalendar(e);
			calendar.onDateSelect = bgOnCalendarSelect;
			calendar.dayTitle = getString("ARTICLES");

			if (div)
				calendar.dayList = sjcl.fromJson(div.innerText);

			calendar.render();
		}

		if (e = $("bsDate"))
			bgOnSearchDateChange(e);
	}
);
