/**
 * @author gsandrigo
 * v2.0
 */
var mcs = new DynamicStatsServices();
var postReply = true;
var postedPopUpMessage = "<span style=\"font-family:verdana;font-size:10px;color:#000;\">Your comment has been received.<br>It will be posted shortly.</span>";
var xpos = 0;
var ypos = 0;
var TimeoutID;

var lastsubject = "";
var lastcomment = "";
var lastcommentreplyid;

var openReplies = -1;

var fromId = document.cookie;
var spamJson = new BreakJSON();

function ShowLinkbackBox(){
	var linkbackBox = document.getElementById("linkback_box");

	if(linkbackBox.style.display == "none"){
		linkbackBox.style.display = "block";
	}
	else{
		linkbackBox.style.display = "none";
	}
}

function getDynamicStats(contentId) {
	BrowserDetect.init();
	mcs.postGetDynamicStats(contentId, postDynamicStatsCallback);
}

function postDynamicStatsCallback(XmlDoc, isOk){
	if(!isOk) {
      //error display default
	  documentWriter("comments_box", renderDefultComments());
	  return;
   }

   document.getElementById("comments_box").innerHTML = "";

   var error = "parsing JSON.";
   try {
   		if (BrowserDetect.browser == "Firefox")
   			XmlDoc.normalize();
   		var messageNode = XmlDoc.getElementsByTagName("Message");

		var jsonDoc;
        jsonDoc = messageNode[0].firstChild.nodeValue;

		var objResp = eval('(' + jsonDoc + ')');

		error = "processing renderPosted";
		if (undefined != objResp.DynamicStats.Stats){
        	documentWriter("posted_box", renderPosted(objResp.DynamicStats.Stats));
		}

        error = "processing renderViews";
		if (undefined != objResp.DynamicStats.Stats){
        	documentWriter("stats_views", renderViews(objResp.DynamicStats.Stats));
        }

        error = "processing renderCommentCount";
		if (undefined != objResp.DynamicStats.Stats){
        	documentWriter("stats_comments", renderCommentCount(objResp.DynamicStats.Stats));
        }

		error = "processing renderComments";
        //documentWriter("comments_box", renderComments(objResp.DynamicStats.CommentsDetail.Comment));
		if (undefined != objResp.DynamicStats.CommentsDetail){
			currentComments = objResp.DynamicStats.CommentsDetail.Comment;
			renderComments(currentComments);

        }


        error = "processing linkbacks";
		if (undefined != objResp.DynamicStats.Linkbacks){
			renderLinkbacks(objResp.DynamicStats.Linkbacks.Linkback);
		}
		else{
			renderDefaultLinkbacks();
		}

	}


   catch(e){
        //alert("error " + error + " - " + e);
   }
   return;
}

function renderDefultComments(){
	var html = "";
	html += "No Comments.";
	return html;
}

function renderViews(stats){
	var html = "";
	html += placeCommasInNumber(stats.Views);
	return html;
}

function renderCommentCount(stats){
	var html = "";
	html += stats.Comments;
	return html;
}

function renderPosted(stats){
	var html = "";
	html += stats.Posted;
	return html;
}

function renderDefaultLinkbacks(){
	document.getElementById("linkback_box_nocontent").style.display = "block";
}

function renderLinkbacks(linkbacks){
	var linkbackBox = document.getElementById("linkback_box_content");
	linkbackBox.style.display = "block";

	var linkbackContent = document.getElementById("linkback_box_content_div");
	linkbackContent.innerHTML = "";

	var linkbackArr = new Array();

	if(typeof(linkbacks.length) == "undefined")
		linkbackArr[0] = linkbacks;
	else
		linkbackArr = linkbacks;

	if (linkbackArr.length > 0){
		for(i = 0; i < linkbackArr.length; i++){
			var text = linkbackArr[i].ReferrerURL;
			if(text.length > 55)
				text = text.substring(0, 55) + "...";

			linkbackContent.innerHTML += "<div>" + linkbackArr[i].Views + " views via <a href=\"" + linkbackArr[i].ReferrerURL + "\">" + text + "</a></div>";
		}
	}
}

function renderComments(comments){
	var isChild = false;
	var isReply = false;
	var parent_node;
	var pendingChildren = new Array();

	if (comments.length > 0){
		var bottom_border = document.getElementById("comments_divider_bottom");
		bottom_border.style.visibility = "visible";
		var element = document.getElementById("comments_box");
		for(i = 0; i < comments.length; i++){
			isChild = (comments[i].ContentCommentID == comments[i].ParentContentCommentID) ? false : true;
			node = document.createElement("div");
			if(isChild){
				node.innerHTML = buildReplyComment(comments[i].ContentCommentID, comments[i].DateCreated, comments[i].ByNickName, comments[i].ByAvatarURL, comments[i].Title, comments[i].DiscussionText);
				parent_node = document.getElementById("comment" + comments[i].ParentContentCommentID);
				if(parent_node != null){
	               parentContainer = document.getElementById("container" + comments[i].ParentContentCommentID);
	               parentContainer.insertBefore(node, parentContainer.firstChild);
	               }
	            else{
					if(typeof(pendingChildren[comments[i].ParentContentCommentID]) == 'undefined')
	                  pendingChildren[comments[i].ParentContentCommentID] = new Array();

	               pendingChildren[comments[i].ParentContentCommentID].push(node);
	            }
	         }
	         else{
	            node.innerHTML = buildComment(comments[i].ContentCommentID, comments[i].DateCreated, comments[i].ByNickName, comments[i].ByAvatarURL, comments[i].Title, comments[i].DiscussionText);
	            if(isReply)
	               element.insertBefore(node, element.firstChild);
	            else
	               element.appendChild(node);
			}
		}

		for(var key in pendingChildren){
	         try{
	            if(document.getElementById("container"+key) != null){
	               for(i=0; i<pendingChildren[key].length; i++)
	                  document.getElementById("container"+key).appendChild(pendingChildren[key][i]);
	            }
	         }
	         catch(e){
	            //discard it, we can't do anything with it anyways
	            continue;
	         }
	    }
	}
	else if(comments.ContentCommentID){
		var bottom_border = document.getElementById("comments_divider_bottom");
		bottom_border.style.visibility = "visible";
		var element = document.getElementById("comments_box");
		node = document.createElement("div");
		node.innerHTML = buildComment(comments.ContentCommentID, comments.DateCreated, comments.ByNickName, comments.ByAvatarURL, comments.Title, comments.DiscussionText);
		element.appendChild(node);
	}
}

function documentWriter(divId, html){
	document.getElementById(divId).innerHTML = html;
}

function buildComment(commentId, date, by, avatar, title, text){
   var html = "";
   title = unescape(title);
   text = unescape(text);

   html += "<div id=\"comment" + commentId + "\" style=\"margin-bottom:7px;float:left;\">";
   html += "<div class=\"comment_date\">";
   html += "<span class=\"comment_date_text\">" + GetSpamLink(commentId) + " " + date + "</span>&nbsp;&nbsp;&nbsp;";
   if(canPost){
      html += "<a id=\"reply" +commentId+ "\" href=\"javascript:toggleBox('newPopup_post_reply" +commentId+ "', 1);javascript:toggleBox('newPopup_post_comment_wrap', 0); closeOpenReplies(" + commentId + ");\" class=\"comment_link\"><b>Reply</b></a>";
   }
   html += "</div>";
   html += "<a href=\"http://break.com/" +by+ "\" class=\"comment_link\">" + by +"</a> says:";

   html += "<div class=\"comment_content\">";
   html += "<div class=\"comment_avatar\"><img src=\"" + avatar + "\" onerror=\"onMissingAvatar(this)\" border=\"0\" width=\"50\" height=\"50\" /></div>";
   html += "<div class=\"comment_text\">";
   html += "<div class=\"comment_copy\">";
   html += "<div class=\"comment_copy_wrap\">";
   html += "<b>" + title + ":</b><br />";
   html += text;
   html += "<!-- COMMENT REPLY start -->";
   html += "<div id=\"newPopup_post_reply" + commentId + "\" class=\"newPopup_post_reply\" style=\"display:none\">";
   html += "<div class=\"newPopup_post_subject\"><b>Subject:</b></div>";
   html += "<div class=\"newPopup_post_subject_field\"><input type=\"text\" id=\"iReplySubject" + commentId + "\" class=\"reply\" /><div id=\"commentReplySubjectError"+ commentId + "\"></div></div>";
   html += "<div class=\"newPopup_post_subject\"><b>Comment:</b></div>";
   html += "<div class=\"newPopup_post_subject_field\"><textarea id=\"taReplyComments" + commentId + "\" class=\"reply\"></textarea><div id=\"commentReplyBodyError"+ commentId + "\"></div></div>";
   html += "<div align=\"right\">";
   html += "<img src=\"http://media1.break.com/static/live/v1/img/shim.gif\" width=\"100\" height=\"4\" border=\"0\" /><br />";
   html += "<input type=\"button\" value=\"Cancel\" onclick=\"javascript:toggleBox('newPopup_post_reply" + commentId + "', 0);hideReplyMessage(" + commentId + ");\" />&nbsp;<input type=\"button\" value=\"Post\" onclick=\"javascript:submitReplyComment(" + commentId + ");\" />&nbsp;";
   html += "</div>";
   html += "</div>";
   html += "<!-- COMMENT REPLY end -->";
   html += "<div id=\"container" + commentId + "\">";
   html += "</div>";
   html += "</div>";
   html += "</div>";
   html += "</div>";
   html += "</div>";
   html += "</div>";

   return html;
}


function buildReplyComment(commentId, date, by, avatar, title, text){
   var html = "";

   title = unescape(title);
   text = unescape(text);

   html += "<div class=\"comment_response_wrap\" id=\"comment" +commentId+ "\>";
   html += "<div class=\"comment_arrow\" style=\"width:50px;text-align:right;margin-top:10px;padding-right:5px;\"><img src=\"http://media1.break.com/static/live/v1/img/contentdetail/comment_arrow.gif\" border=\"0\" /></div>";
   html += "<div class=\"comment_response\">";
   html += "<div class=\"comment_response_name\"><a href=\"http://break.com/" +by+ "\" class=\"comment_link\">" + by + "</a> said:</div><br />";
   html += "<div class=\"comment_response_avatar\"><img src=\"" + avatar + "\" onerror=\"onMissingAvatar(this)\" border=\"0\" width=\"50\" height=\"50\" /></div>";
   html += "<div class=\"comment_response_copy\">";
   html += "<b>" + title + ":</b><br />";
   html += text + " <span style=\"font-size:9px;\">" + GetSpamLink(commentId) + "</span>";
   html += "</div>";
   html += "</div>";
   html += "</div>";
   return html;
}

function GetSpamLink(commentId){
	var link = "";

	  if(canPost != ""){
      	   	link = "(<a class=\"comment_link\" href='javascript:SentSpam(" + commentId + ");'>Spam</a>)";
      	  }

	return link;
}

function SentSpam(commentId){
	var fromId = getEncodedMemberID();

	 spamJson.sendBegin("http://websvc.break.com/cms/Handlers/Spam/SpamHandler.ashx?invoke=reportcomment&memberId=" +fromId+ "&commentId=" + commentId, "updateCommentSpam");

}

function updateCommentSpam(jsonData){
	alert("Thank you for Marking as Spam.");
}



function closeOpenReplies(commentId)
{
    if(openReplies > -1 && openReplies != commentId)
    {
        toggleBox("newPopup_post_reply" + openReplies, 0);
    }
    openReplies = commentId;
}

function onMissingAvatar(img){
   img.src = "http://media1.break.com/dnet/media/AVATARS/NeutralAvatar.jpg";
}

function IsMeaningless(str){
	var tempStr = str.split(" ");
	for (i = 0; i < tempStr.length; i++)
	{
		if(tempStr[i] != "")
		{
			return false;
		}
	}
	return true;
}

function submitReplyComment(commentReplyId){
		var subject = "";
	var comment = "";
	var isInError = false;
	var fromId = getEncodedMemberID();

	subject = document.getElementById("iReplySubject" + commentReplyId).value;
	comment = document.getElementById("taReplyComments" + commentReplyId).value;

	if(subject == "" || IsMeaningless(subject)) {
	   displayMessage("commentReplySubjectError" + commentReplyId, "You must specify a subject.");
	   isInError = true;
	}

	if(comment == ""  || IsMeaningless(comment)) {
	   displayMessage("commentReplyBodyError" + commentReplyId, "You must specify a comment.");
	   isInError = true;
	}

	if(isInError)
	   return;

	hideReplyMessage(commentReplyId);
	toggleBox("newPopup_post_reply" + commentReplyId, 0);
	//hideReplyBox();
	mcs.postContentComment(siteId, fromId, sGlobalContentIDEncoded, commentReplyId, subject, comment, postContentCommentCallback);
	lastcomment = comment;
    lastcommentreplyid = commentReplyId;
    lastsubject = subject;
}

function submitComment(){
	var subject = "";
	var comment = "";
	var isInError = false;
	var fromId = getEncodedMemberID();

	subject = document.getElementById("iReplySubject").value;
	comment = document.getElementById("taReplyComments").value;

	if(subject == "" || IsMeaningless(subject)) {
	   displayMessage("subjectReplyError", "You must specify a subject.");
	   isInError = true;
	}

	if(comment == "" || IsMeaningless(comment)) {
	   displayMessage("commentBodyReplyError", "You must specify a comment.");
	   isInError = true;
	}

	if (fromId == null)
		isInError = true;

	if(isInError)
	   return;

	hideMessage();
	toggleBox('newPopup_post_comment_wrap', 0);
	mcs.postContentComment(siteId, fromId, sGlobalContentIDEncoded, 0, subject, comment, postContentCommentCallback);
	lastcomment = comment;
    lastcommentreplyid = 0;
    lastsubject = subject;
}

function insertComment(commentReplyId, subject, comment, avatar, nickName){
	if(nickName == "")
		nickName = "You";
	var htmlNode;
	if (avatar == "")
		avatar = "http://media1.break.com/dnet/media/AVATARS/NeutralAvatar.jpg";


	var date = new Date();
	var dateString = (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear();
	var hs = date.getHours()
	var meridian = hs < 12 ? "AM" : "PM";
	if (hs > 12) {hs = hs-12;}

	dateString += " " + hs + ":" + date.getMinutes() + ":" + date.getSeconds() + " " + meridian;

	if(commentReplyId == 0){
		var tempstate = canPost;
		canPost = false;
		htmlNode = buildComment(0, dateString, nickName, avatar, subject, comment);
		canPost = tempstate;
		var commentBox = document.getElementById("comments_box").innerHTML;
		commentBox = htmlNode + commentBox;
		document.getElementById("comments_box").innerHTML = commentBox;
	}
	else{
		htmlNode = buildReplyComment(1, dateString, nickName, avatar, subject, comment);
		var containerNode = document.getElementById("container" + commentReplyId);
		var containerHTML = htmlNode + containerNode.innerHTML ;
		containerNode.innerHTML = containerHTML;
	}
	var bottom_border = document.getElementById("comments_divider_bottom");
	bottom_border.style.visibility = "visible";
}


function closeAllotherBoxes(){
	try{
		hideBox('popup_box_share',0);
	}
	catch(e){
		//alert("popup_box_share" + e);
	}
	try{
		hideBox('popup_box_embed',0);
	}
	catch(e){
		//alert("popup_box_embed" + e);
	}
	try{
		hideBox('popup_box_add',0);
	}
	catch(e){
		//alert("popup_box_add" + e);
	}
}

function displayMessage(divId, messageText){
   document.getElementById(divId).innerHTML = messageText;
   document.getElementById(divId).style.display="block";
}

function hideMessage() {
   document.getElementById("commentBodyReplyError").style.display="none";
   document.getElementById("subjectReplyError").style.display="none";
}

function hideReplyMessage(commentId) {
   document.getElementById("commentReplyBodyError" + commentId).style.display="none";
   document.getElementById("commentReplySubjectError" + commentId).style.display="none";
}

function postContentCommentCallback (xmlDoc, isOk) {

   if(!isOk) {
   		//alert("Fatal error");
      //displayMessage("genericError", "Error saving comment.");
      return;
   }

   try {
      var responseNode = xmlDoc.documentElement;

      if(responseNode.getAttribute("Code")<0) {
         if(responseNode.getAttribute("Code") < -2)
            displayMessage("genericError", responseNode.getAttribute("Message"));
      }
	  else {
	  document.getElementById("iReplySubject").value = "";
      document.getElementById("taReplyComments").value = "";


	  var avatar;
	  var nickName;
      var node = xmlDoc.documentElement;

	  for (i = 0; i < node.childNodes.length; i++)
	  {
	 		if (node.childNodes[i].nodeName == "avatarURL")
			{
				avatar = node.childNodes[i].firstChild.nodeValue;
			}
			else if (node.childNodes[i].nodeName == "memberNickname")
			{
				nickName = node.childNodes[i].firstChild.nodeValue;
			}
	  }

	  insertComment(lastcommentreplyid, lastsubject, lastcomment, avatar, nickName);
  	  }
      return;
   }
   catch(e) {
      document.getElementById("iReplySubject").value = "";
      document.getElementById("taReplyComments").value = "";
      //displayMessage("genericError", "Error saving comment.");
   }
}

function getEncodedMemberID(){
          var memberIdCookie = getCookie("MemberID");
          if(memberIdCookie != null)
            return memberIdCookie;
          else
            return null;
}

function placeCommasInNumber(number)
{
	number = '' + number;
	if (number.length > 3) {
	var mod = number.length % 3;
	var output = (mod > 0 ? (number.substring(0,mod)) : '');
	for (i=0 ; i < Math.floor(number.length / 3); i++) {
	if ((mod == 0) && (i == 0))
	output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
	else
	output+= ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
	}
	return (output);
	}
	else return number;
}