var Lineup = function() {
	var $S = CBC.SETTINGS;
	var $U = CBC.UTIL;
	var $ = $U.getElementsById;
	var lineup_icons = [];
	var cid_els = [];

	return {
		init : function() {
			try {
				if ($S.getVal("cid") == "(none)") return;
				this.getData();
			} catch(e) {
				$U.debug("Error caught in: \n  file: '/includes/objects/pluck/js/lineup.js' \n  function: Lineup.init() \nError thrown is:\n" + e);
			}
		},
		getData : function() {
			try {

				var social_els = new Array();
				var container_ids = $S.getVal("pluckContainerIds");
				var rb = new RequestBatch();

				for (var i=0; i<container_ids.length; i++) {
					if ($(container_ids[i])) {
						social_els.push($U.getElementsByClassName("socialicons",$(container_ids[i]),"span"));
					} else {
						$U.debug("Lineup implementation error:\nThe html element '" + container_ids[i] + "' has not been defined.  Please remove it from the 'pluckContainerIds' variable in your .js configuration file.");
					}
				}
				social_els = $U.concatArray(social_els);

				for (var i=0; i<social_els.length; i++) {
					var cid = social_els[i].getAttribute("title").toString();
					var _obj = {};
					_obj.el = social_els[i];
					_obj.cid = cid;
					lineup_icons[i] = _obj;
					social_els[i].removeAttribute("title");

					if (cid && social_els[i] && !cid_els[cid]) {
						cid_els[cid] = new Array();
						cid_els[cid].push(i);
						var ak = new ArticleKey(cid);
						rb.AddToRequest(ak);
					} else {
						cid_els[cid].push(i);
					}
				}

				if (social_els.length > 0 ) rb.BeginRequest($S.getVal("serverUrl"),this.handleData);

			} catch(e) {
				$U.debug("Error caught in: \n  file: '/includes/objects/pluck/js/lineup.js' \n  function: Lineup.getData() \nError thrown is:\n" + e);
			}
		},
		handleData : function(_responseBatch) {
			try {
				var tpl_socialicons = new $U.Template($S.getVal("tpl_socialicons"));

				for (var i=0; i<_responseBatch.Responses.length; i++) {
					var cid = _responseBatch.Responses[i].Article.ArticleKey.Key
					var tpl_data = {};
					tpl_data.NumberOfComments = _responseBatch.Responses[i].Article.Comments.NumberOfComments;
					tpl_data.PageUrl = _responseBatch.Responses[i].Article.PageUrl;
					tpl_data.NumberOfRecommendations = _responseBatch.Responses[i].Article.Recommendations.NumberOfRecommendations;

					for (var j=0; j< cid_els[cid].length; j++) {
						var _el = lineup_icons[cid_els[cid][j]].el;
						_el.innerHTML = tpl_socialicons.evaluate(tpl_data);
						_el.className += " d-inline";
					}
				}

			} catch (e) {
				$U.debug("Error caught in: \n  file: '/includes/objects/pluck/js/lineup.js' \n  function: Lineup.handleData() \nError thrown is:\n" + e);
			}
		},
		getLineupEls: function() {
			return lineup_icons;
		},
		getLineupElsFromId: function(cid) {
			try {
				if (cid_els[cid]) {
					var res = new Array();
					for (var i=0; i<cid_els[cid].length; i++) {
						res.push(lineup_icons[cid_els[cid][i]]);
					}
					return res;
				} else {
					return null;
				}
			} catch(e) {
				$U.debug("Error caught in: \n  file: '/includes/objects/pluck/js/lineup.js' \n  function: Lineup.getLineupElsFromId() \nError thrown is:\n" + e);
			}
		},
		addLineupEls: function(els) {
			try {
				if (els instanceof Array) {
					for (var i=0; i<els.length; i++) {
						lineup_icons.push(els[i]);
						if (!cid_els[els[i].cid]) cid_els[els[i].cid] = new Array();
						cid_els[els[i].cid].push(lineup_icons.length-1);
					}
				} else {
					lineup_icons.push(els);
					if (!cid_els[els.cid]) cid_els[els.cid] = new Array();
					cid_els[els.cid].push(lineup_icons.length-1);
				}
			} catch(e) {
				$U.debug("Error caught in: \n  file: '/includes/objects/pluck/js/lineup.js' \n  function: Lineup.addLineupEls() \nError thrown is:\n" + e);
			}


		}
	}
};
CBC.register({_name:'Lineup',_class:Lineup,_nameSpace: CBC.APP.PLUCK});