﻿$.fn.ready(function () {

	var $fbComments = $(".fbComments"), bLonely = $fbComments.size() === 1, embedMethod, embedMethodEnum = { object: 0, newsletter: 1, other: 2 };

	// will depend on markup!
	var embedMethod = embedMethodEnum.other;
	(function () {
		var $fbC1 = $fbComments.first();
		if (!!$fbC1.parent().parent().find(".PostObjectCommands").find(".objmenuspan").size()) { embedMethod = embedMethodEnum.object; return false; };
		if (!!$fbC1.prev("div").find("div[style='font-size: 11px; padding-top: 10px; padding-bottom: 10px;']").size()) { embedMethod = embedMethodEnum.newsletter; return false; };
	} ());

	function initFbComments() {
		var iWidth = $fbComments.first().width();
		$fbComments.each(function (i, obj) {
			var $obj = $(obj).hide(),
				sUrl = $obj.data("href"),
				$container,
				sHtml = "<fb:comments href=\"" + sUrl + "\" num-posts=\"10\" width=\"" + iWidth + "\"></fb:comments>";
			switch (embedMethod) {
				case embedMethodEnum.object:
					$container = $obj.parent().parent().find(".PostObjectCommands").find(".objmenuspan").last();
					break;
				case embedMethodEnum.newsletter:
					$container = $obj.prev("div").find("div[style='font-size: 11px; padding-top: 10px; padding-bottom: 10px;']").last();
					break;
			}
			var $a = $("<a href='#'>Comments</a>").hide().data("rendered", false).bind("click", function () {
				var bRendered = $obj.data("rendered");
				$obj.toggle();
				if ((!bRendered) && ($obj.is(":visible"))) {
					$obj.show().data("rendered", true)[0].innerHTML = sHtml;
					FB.XFBML.parse(obj);
					if (embedMethod === embedMethodEnum.other) { $a.remove(); }
				}
				return false;
			});
			if (embedMethod === embedMethodEnum.newsletter) {
				(function () {
					// make room, make room!
					var $span = $container.find("span").first();
					$span.text($span.text().split(" ")[0]);
				} ());
				$a.css("margin-left", "10px");
			}
			if (embedMethod === embedMethodEnum.other) {
				$a.css({
					clear: "both",
					display: "inline-block",
					margin: "0 0 20px 0"
				}).html("Add or view comments...").insertAfter($obj);
			} else {
				$a.appendTo($container);
			}
			$a.css("display", "inline-block");
			$.getJSON("https://graph.facebook.com/comments/?ids=" + sUrl + "&callback=?", function (resp) {
				var iCount = 0, bRendered = false;
				if (resp[sUrl]) { iCount = resp[sUrl].data.length; }
				if (iCount > 0 || bLonely) {
					bRendered = true;
					$a.html("Comments (" + iCount + ")");
					$obj.show()[0].innerHTML = sHtml;
					FB.XFBML.parse(obj);
					if (embedMethod === embedMethodEnum.other) { $a.remove(); }
					$obj.data("rendered", bRendered);
				}
			});
		});
	}

	(function (d, s, id) {
		var js, fjs = d.getElementsByTagName(s)[0], done = false;
		if (d.getElementById(id)) { return; }
		js = d.createElement(s);
		js.id = id;
		js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
		js.onload = js.onreadystatechange = function () {
			if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
				done = true;
				setTimeout(initFbComments, 500); // btrSfThnSry
			}
		};
		fjs.parentNode.insertBefore(js, fjs);
	} (document, 'script', 'facebook-jssdk'));

});
