var Article = function() {
	var $S = CBC.SETTINGS;
	var $U = CBC.UTIL;
	var $ = $U.getElementsById;

	return {
		init : function() {
			try {
				if ($S.getVal("cid") == "(none)") return;
				if (!$('socialhead') && $('storyhead')) this.insertSocialhead($U.getElementsByClassName("lastupdated",$('storyhead'))[0]);
				this.getData();
			} catch(e) {
				$U.debug(e);
			}
		},
		getData : function() {
			try {
				var rb = new RequestBatch();
				var ak = new ArticleKey($S.getVal("cid"));
				rb.AddToRequest(ak);
				rb.BeginRequest($S.getVal("serverUrl"),this.handleData);

			} catch(e) {
				$U.debug(e);
			}
		},
		handleData : function(_responseBatch) {
			try {
				var cmt_count = 0;
				var rec_count = 0;
				var current_user_has_recommended = "False";

				if (_responseBatch.Responses.length == 0) {
					//new article
				} else {
					//existing article
					var article = _responseBatch.Responses[0].Article;
					cmt_count = article.Comments.NumberOfComments;
					rec_count = article.Recommendations.NumberOfRecommendations;
					current_user_has_recommended = article.Recommendations.CurrentUserHasRecommended;
				}

				var tpl_data = {};
				var logic = {};
				tpl_data.ArticleKey = $S.getVal("cid");
				tpl_data.NumberOfRecommendations = rec_count;
				tpl_data.NumberOfComments = cmt_count;
				tpl_data.ArticleType = $S.getVal("articleType");
				logic.CurrentUserHasRecommended = (current_user_has_recommended == "True") ? "true" : "false";

				if ($('socialhead')) {
					var tpl_socialhead = new $U.Template($S.getVal("tpl_socialhead"));
					$('socialhead').innerHTML = tpl_socialhead.evaluate(tpl_data,logic);
					$('socialhead').className += " d-inline";
				}

				if ($('socialtools')) {
					var scped = new Date($S.getVal("scped"));
					var now = new Date();

					if ($S.getVal("scped") && scped < now) {
						var _p = document.createElement("p");
						_p.innerHTML = 'Note: The CBC does not necessarily endorse any of the views posted. Please note that comments are published according to our <a href="/aboutcbc/discover/submissions.html" target="_blank">submission guidelines</a>.';
						_p.className = "disclaimer";
						$('socialtools').innerHTML = '<li>' + CBC.APP.PLUCK.Comments.translateMsg($S.getVal("seMsg")) + '</li>';
						$('socialtools').className += " cmt-note";
						$('socialtools').parentNode.insertBefore(_p,$('socialtools').nextSibling);
					} else {
						var tpl_socialtools = new $U.Template($S.getVal("tpl_socialtools"));
						$('socialtools').innerHTML = tpl_socialtools.evaluate(tpl_data,logic);
					}

					$('socialtools').className += " d-block";

					if (cmt_count < 2) {
						var stool_cmt_el = $U.getElementsByClassName('cmt-h',$('socialtools'))[0].nextSibling;
						if (cmt_count == 0) {
							stool_cmt_el.className = "bg-off";
							stool_cmt_el.innerHTML = "";
							stool_cmt_el.appendChild(document.createTextNode("Be the first to comment on this " + $S.getVal('articleType')));
						} else {
							stool_cmt_el.lastChild.nodeValue = "Comment has been posted";
						}
					}

					if (rec_count < 2) {
						var stool_rec_el = $U.getElementsByClassName('rec-h',$('socialtools'))[0].nextSibling;
						if (rec_count == 0) {
							stool_rec_el.className = "bg-off";
							stool_rec_el.innerHTML = "";
							stool_rec_el.appendChild(document.createTextNode("Be the first to recommend this " + $S.getVal('articleType')));
						} else {
							stool_rec_el.lastChild.nodeValue = "Person has recommended this " + $S.getVal('articleType');
						}
					}
				}

			} catch (e) {
				$U.debug(e);
			}
		},
		recommend : function(_t,_cid) {
			try {
				if (CBC.APP.PLUCK.Article) handleSocialhead();
				if (CBC.APP.PLUCK.Article) handleSocialtools();
				if (CBC.APP.PLUCK.Lineup) handleLineups();

				var rb = new RequestBatch();
				var ak = new ArticleKey(_cid);
				var ra = new RecommendAction(ak);
				rb.AddToRequest(ra);
				rb.BeginRequest($S.getVal("serverUrl"),function(o){});
			} catch(e) {
				$U.debug(e);
			}

			function handleSocialhead() {
				if ($('socialhead')) {
					var _em = $U.getElementsByClassName("rec",$('socialhead'))[0];
					var r_count = parseInt(_em.innerHTML);

					if (!isNaN(r_count)) {
						r_count++;
						var _a = _em.parentNode;
						var _span = _a.parentNode;
						var _em_rd = document.createElement("em");
						_em_rd.className = "rec";
						_em_rd.appendChild(document.createTextNode(r_count));
						_span.removeChild(_a);
						_span.appendChild(document.createTextNode("Recommended"));
						_span.appendChild(_em_rd);
					}
				}
			}
			function handleSocialtools() {
				if ($('socialtools')) {
					var _em = $U.getElementsByClassName("rec",$('socialtools'))[0];

					var r_count = (_em) ? parseInt(_em.innerHTML) : 0;

					if (!isNaN(r_count)) {

						if (r_count > 0) {
							r_count++;
							var _div1 = document.createElement("div");
							var _div2 = _em.parentNode;
							var _a = _div2.parentNode;
							var _li = _a.parentNode;
							var _div2_new = document.createElement("div");
							var _em_rd = document.createElement("em");

							_em_rd.appendChild(document.createTextNode(r_count));
							_div2_new.className = "rec-txt";
							_div2_new.appendChild(_em_rd);
							_div2_new.appendChild(document.createTextNode("People have recommended this " + $S.getVal('articleType')));

							_div1.innerHTML = "Recommended";
							_div1.className = "rec-h full";

							_li.className = "full";
							_li.removeChild(_a);
							_li.appendChild(_div1);
							_li.appendChild(_div2_new);

						} else {
							//short term
							var _li = $U.getElementsByClassName("r",$('socialtools'),"li")[0];
							_li.className = "full";
							_li.innerHTML = '<div class="rec-h full">Recommended</div><div class="rec-txt"><em>1</em>Person has recommended this '+ $S.getVal("articleType") +'</div>';
						}

					}
				}
			}
			function handleLineups() {
				var lineup_els = CBC.APP.PLUCK.Lineup.getLineupElsFromId($S.getVal("cid"));
				if (lineup_els) {
					for (var i=0; i<lineup_els.length; i++) {
						var _em = $U.getElementsByClassName("rec",lineup_els[i].el)[0];
						var r_count = parseInt(_em.innerHTML);
						_em.innerHTML = ++r_count;
					}
				}
			}

		},
		insertSocialhead : function(_el) {
			try {
				var ins_el_html = '<span id="socialhead"></span>';
				_el.className += " clearfix";
				_el_html = _el.innerHTML;
				_el.innerHTML = "<em>" + _el_html + "</em>";
				_el.innerHTML += ins_el_html;
			} catch(e) {
				$U.debug(e);
			}
		}
	}
};
CBC.register({_name:'Article',_class:Article,_nameSpace: CBC.APP.PLUCK});

$S.setVal("tpl_socialhead",'<a href="#socialcomments">Comments<em class="cmt">#{NumberOfComments}</em></a>#[CurrentUserHasRecommended: {false:<a href="#" title="Recommend this #{ArticleType}" onclick="CBC.APP.PLUCK.Article.recommend(this,\'#{ArticleKey}\');return false;">Recommend<em class="rec">#{NumberOfRecommendations}</em></a>||true:Recommended<em class="rec">#{NumberOfRecommendations}</em>}]');
$S.setVal("tpl_socialtools",'<li class="l"><a href="#socialcomments-submit" onclick="CBC.APP.PLUCK.Comments.focusCommentForm();"><div class="cmt-h">Post a comment</div><div><em class="cmt">#{NumberOfComments}</em>Comments have been posted</div></a></li>#[CurrentUserHasRecommended: {false:<li class="r"><a onclick="CBC.APP.PLUCK.Article.recommend(this,\'#{ArticleKey}\');return false;" href="#"><div class="rec-h">Recommend this #{ArticleType}</div><div><em class="rec">#{NumberOfRecommendations}</em>People have recommended this #{ArticleType}</div></a></li>||true:<li class="full"><div class="rec-h full">Recommended</div><div class="rec-txt"><em class="rec">#{NumberOfRecommendations}</em>People have recommended this #{ArticleType}</div></li>}]');
