
var ID_MAIN_GUID = "MAIN";
var ID_DIV_SUB_COMMENT = "DivSubComment_MAIN";
var PREFIX_DIV_SUB_COMMENT = "DivSubComment_";
var PREFIX_BLOCK_COMMENT = "BlockComment_";
var PREFIX_SPAN_VOTE_INDICATOR = "SpanVoteIndicator_";
var PREFIX_LINK_SHOW_COMMENT = "LinkShowComments_";
var PREFIX_DIV_SUB_COMMENT_CONTAINER = "DivSubCommentContainer_";
var PREFIX_SPAN_TOTAL_REPLIES = "SpanTotalReplies_";
var PREFIX_SPAN_EDIT_BACKUP = "SpanEditBackup_";
var PREFIX_DIV_COMMENT_BODY = "CommentBody_";
var PREFIX_DIV_THREADSHOLD_CONTENT = "ThreasholdContent_";
var PREFIX_TEXTAREA_EDIT = "EditArea_";
var PREFIX_SPAN_INDICATOR_EDIT = "SpanEditCommentIndicator_";
var PREFIX_SPAN_INDICATOR_DELETE = "SpanDeleteCommentIndicator_";
var PREFIX_IMG_EDIT_LINK = "LinkEdit_";
var PREFIX_SPAN_NUMER_MINUTE_LEFT = "SpanTimeNumberMinuteLeft_";

function GetStyle(objId)
{
    var obj = $get(objId);
    if (obj == null)
        return null;
    return obj.className;
}

function ChangeStyle(objId, firstStyle, secondStyle)
{        
    
    var obj = $get(objId);
    if (obj == null)
        return;
    if (obj.className != secondStyle)
        obj.className = secondStyle;
    else
        obj.className = firstStyle;
} 

function ChangeNewStyle(obj, newStyle)
{        
    obj.className = newStyle;        
}
function ShowHidePanelObject(objId)
{    
    var obj = $get(objId);
    if (obj == null)
        return;
    if (objId != ID_DIV_SUB_COMMENT)
    {
        if (obj.style.display != "block")        
            obj.style.display = "block";                        
        else
            obj.style.display = "none";                           
    }    
}
function HideCommentHiddenPanel(blockId)
{
    var hiddenArea = PREFIX_DIV_SUB_COMMENT_CONTAINER + blockId;        
    var objHiddenArea = $get(hiddenArea);        
    if (hiddenArea != ID_DIV_SUB_COMMENT && objHiddenArea != null)
        objHiddenArea.style.display = "none";           
}
function ShowHideCommentHiddenPanel(blockId)
{   
    var hiddenArea = PREFIX_DIV_SUB_COMMENT_CONTAINER + blockId;        
    var objHiddenArea = $get(hiddenArea);        
    if (hiddenArea != ID_DIV_SUB_COMMENT && objHiddenArea != null)
    {
        if (objHiddenArea.style.display != "block")        
        {            
            objHiddenArea.style.display = "block";                                    
            return false;
        }
        else
        {
            objHiddenArea.style.display = "none";           
            return true;        // Mean only hide it   
        }
    }    
    return false;
}
function ShowHideLoginToReplyPanel(blockId)
{    
    ShowHideCommentHiddenPanel(blockId);
    var spanPlaceHolderId = PREFIX_DIV_SUB_COMMENT + blockId; 
    var objPlaceHolder = $get(spanPlaceHolderId);  
    if (objPlaceHolder != null)            
    {
        ChangeNewStyle(objPlaceHolder, 'newsCustom_CommentBlockChildCommentPlaceHolderFullFill');    
        return objPlaceHolder;    
    }
    return null;
}


function ShowPostCommentPanel(blockId, newsId, commentId, parentGuid)
{       
    // Call to show and change style the panel
    var placeHolderObj = ShowHideLoginToReplyPanel(blockId);
    // then change it's content to post comment panel using JavaScript
    if (placeHolderObj != null)
        CreatePostCommentPanel(placeHolderObj, newsId, commentId, blockId, parentGuid);        
}
function CreatePostCommentPanel(placeHolderObj, newsId, commentId, blockId, parentGuid)
{    
    //Application_Path is declared at the head section of news.master        
    if (placeHolderObj.innerHTML.indexOf("CommentArea",1) > 0)
        return;
        
    var callPostComment = String.format("PostComment({0}, {1}, '{2}', '{3}', '{4}','{5}')", newsId, commentId, 'SpanPostCommentIndicator_GUID', (blockId == 'MAIN') ? PREFIX_DIV_SUB_COMMENT + 'GUID' : PREFIX_BLOCK_COMMENT + 'GUID', 'CommentArea_GUID', parentGuid);        
    var srcHtml = 
    "<div class=\"c-ir\">" +  
        "<textarea name=\"CommentArea_GUID\" id=\"CommentArea_GUID\" class=\"newsCustom_CommentInputField\" ></textarea>" +
            "<span id=\"SpanPostCommentIndicator_GUID\" style=\"display:none;\" >" +
                "<img src=\"" + Application_Path + "/images/indicator.gif\" alt=\"Cofieu - Comment Indicator\" class=\"newsCustom_ShowCommentIndicator\" />" +
            "</span>" +
        "<input type=\"submit\" value=\"" + RES_SUBMIT_BUTTON + "\" name=\"Submit_GUID\" id=\"Submit_GUID\" class=\"newsCustom_ButtonAddComment\" onclick=\"" + callPostComment + "; return false;\" />" +   
    "</div>";        
    srcHtml = srcHtml.replace(/GUID/g, blockId);                
    placeHolderObj.innerHTML = srcHtml;    
}        
//------------------------------------------------------------------------------------
// ParentBlock will be reload
function PostComment(newsId, commentId, indicatorId, parentBlockId, textAreaId, parentGuid)
{        
    var objTextArea = $get(textAreaId);
    var inputValue = null;
    if (objTextArea == null)                    
        return;        
    else         
        inputValue = objTextArea.value;    
    if (!ValidateText(textAreaId, MIN_COMMENT_ALLOWED, MAX_COMMENT_ALLOWED))
        return;
    
    var parentBlockHasComment = HasChildComment(parentBlockId);
    if (parentBlockId == ID_DIV_SUB_COMMENT)
        parentBlockHasComment = true; // Make it adds new comment only
    
    ShowHidePanelObject(indicatorId);        
    var myServiceProxy = new NewsWebService();
    var userContext = new Array(parentBlockId, indicatorId, objTextArea, parentBlockHasComment);    
     
    myServiceProxy.set_defaultSucceededCallback(onPostCommentSuccess);
    myServiceProxy.set_defaultFailedCallback(onPostCommentFailed);        
    myServiceProxy.set_defaultUserContext(userContext);
    myServiceProxy.PostComment(newsId, commentId, inputValue, parentBlockHasComment, parentGuid);        
    //obj.innerHTML = "<h2>NEW BLOC CONTENT</h2>";
}
function UpdateCommentCount(blockId)
{
    var obj = $get(PREFIX_SPAN_TOTAL_REPLIES + blockId);    
    if (obj == null)                    
        return false;        
    else         
    {
        var count = parseInt(obj.innerHTML);        
        obj.innerHTML = (count + 1) + " ";
    }
}
function HasChildComment(parentBlockId)
{
    var obj = $get(parentBlockId);    
    if (obj == null)                    
        return false;        
    else         
    {
        var indexOf = obj.innerHTML.indexOf(PREFIX_BLOCK_COMMENT);
        var lastIndexOf = obj.innerHTML.lastIndexOf(PREFIX_BLOCK_COMMENT);
        if (indexOf> 0 && indexOf != lastIndexOf)
            return true;               
    }
    return false;
}
function GetFirstDivIdFromHtml(stringHtml)
{ 
    var beginPos = stringHtml.indexOf(PREFIX_BLOCK_COMMENT);        
    var endPos = stringHtml.indexOf("\"", beginPos);            
    return stringHtml.substring(beginPos, endPos);
}
function GetInnerHtmlOfFirstDiv(stringHtml)
{
    var beginPos = stringHtml.indexOf('<div', 1);        
    
    var endPos = stringHtml.lastIndexOf("</div>");        
    
    var result = stringHtml.substring(beginPos, endPos)
    
    return result;
}

//Get new block and insert at the end of parent div (divObject in this case)
function GetChildCommentPlaceHolder(divObject)
{
    if (divObject.id == ID_DIV_SUB_COMMENT)
        return divObject;
    else
    {
         var blockId = divObject.id.replace(PREFIX_BLOCK_COMMENT,"");   
         return $get(PREFIX_DIV_SUB_COMMENT +  blockId);         
    }    
}
function CopyHTML2Div(stringHtml, divObject, parentBlockHasComment)
{   
    if (parentBlockHasComment == true)
    {
        var theBlockId = divObject.id.replace(PREFIX_BLOCK_COMMENT,"");    
        var theBlockId = theBlockId.replace(PREFIX_DIV_SUB_COMMENT,""); 
        var commentPlaceHolder = GetChildCommentPlaceHolder(divObject);
        commentPlaceHolder.innerHTML = commentPlaceHolder.innerHTML + stringHtml;
        UpdateCommentCount(theBlockId);
        if (theBlockId != ID_MAIN_GUID)
            UpdateCommentCount(ID_MAIN_GUID);
        return;
    }
    
    // NOW divObject can not be DivSubComment_MAIN and the block whose does not has comment will be reload
    var newId = GetFirstDivIdFromHtml(stringHtml).replace(PREFIX_BLOCK_COMMENT,"");         
    var oldId = divObject.id.replace(PREFIX_BLOCK_COMMENT,"");    
    divObject.innerHTML = GetInnerHtmlOfFirstDiv(stringHtml);     
    
    var myregexp = new RegExp(newId, "g");        
    var a = divObject.innerHTML.replace(myregexp, oldId);    
    
    divObject.innerHTML = a;        
    UpdateCommentCount(ID_MAIN_GUID);
    var anchorShowSubCommentsId = PREFIX_LINK_SHOW_COMMENT + oldId;    
    var anchorShowSubComments = $get(anchorShowSubCommentsId);    
    if (anchorShowSubComments != null)
    {           
		if(Sys.Browser.agent == Sys.Browser.InternetExplorer) 
		{
			anchorShowSubComments.focus();
            anchorShowSubComments.click();
		}
        else //if (navigator.userAgent.indexOf("Firefox")!=-1)
        {
            anchorShowSubComments.onclick();              
        }
    }     
}
function onPostCommentSuccess(result, userContext)
{       
    ShowHidePanelObject(userContext[1]);       
    var parentBlockHasComment = userContext[3];
    CopyHTML2Div(result, $get(userContext[0]), parentBlockHasComment);    
    
    // Clear the input box
    var objTextArea = userContext[2];    
    if (objTextArea != null)
        objTextArea.value = "";
    
}
function onPostCommentFailed(error, userContext)
{    
    ShowHidePanelObject(userContext[1]);               
    $get(userContext[0]).innerHTML = RES_FAILED_WHEN_POST_COMMENT;
}
//------------------------------------------------------------------------------------

function GetComment(newsId, commentId, blockId, expandChild)
{        

    if (ShowHideCommentHiddenPanel(blockId) == true)
        return;
    
    var spanPlaceHolderId = PREFIX_DIV_SUB_COMMENT + blockId;    
    var spanIndicator = "SpanShowCommentIndicator_" + blockId;        
    
    if ($get(spanPlaceHolderId).innerHTML.indexOf("newsCustom_CommentBlockBody") > 0)    
    {        
        // BODY LOAD, WILL NOT LOAD AGAIN
        return;       
    }
        
    $get(spanPlaceHolderId).innerHTML = "";
    var spanIndicatorObj = $get(spanIndicator);
    if (spanIndicatorObj != null)
    spanIndicatorObj.style.display = "block";               
    var myServiceProxy = new NewsWebService();
    var userContext = new Array(spanPlaceHolderId, spanIndicator, blockId, expandChild);          
    myServiceProxy.set_defaultSucceededCallback(onGetCommentSuccess);
    myServiceProxy.set_defaultFailedCallback(onGetCommentFailed);        
    myServiceProxy.set_defaultUserContext(userContext);
    myServiceProxy.GetComments(newsId, commentId, blockId);        
}    

function onGetCommentSuccess(result, userContext)
{   
    var obj = $get(userContext[0]);
    obj.innerHTML = result;                
    obj = $get(userContext[1]);
    if (obj != null)
        obj.style.display = "none";        
    
    var expandChild = userContext[3];    
    if (expandChild == true)
    {    
        // Find the new load placeholder
        var blockId = userContext[2];
        var placeHolderId = PREFIX_DIV_SUB_COMMENT + blockId;        
        ExpandComments(placeHolderId);
    }
}
function onGetCommentFailed(error, userContext)
{       
    $get(userContext[0]).innerHTML = RES_FAILED_WHEN_GET_COMMENT;
    var obj = $get(userContext[1]);
    if (obj != null)
        obj.style.display = "none";        
}

//------------------------------------------------------------------------------------
function UserVoteComment(commentId, parentSpanId, voteUp)
{       
    var userContext = parentSpanId;                                        
    $get(PREFIX_SPAN_VOTE_INDICATOR + userContext).style.display= "block";            
    var myServiceProxy = new NewsWebService();        
    myServiceProxy.set_defaultSucceededCallback(onVoteSuccess);
    myServiceProxy.set_defaultFailedCallback(onVoteFailed); 
    myServiceProxy.set_defaultUserContext(userContext);               
    myServiceProxy.SetUserVoteComment(commentId, voteUp);        
}
function onVoteSuccess(result, userContext){                
    $get(PREFIX_SPAN_VOTE_INDICATOR + userContext).style.display = "none";        
    $get("SpanVote_" + userContext).innerHTML  = result;
}
function onVoteFailed(error, userContext){        
    $get(PREFIX_SPAN_VOTE_INDICATOR + userContext).style.display = "none";
    $get("SpanVote_" + userContext).innerHTML = RES_VOTE_FAILED;
}

//------------------------------------------------------------------------------------
function ExpandComments(placeHolderId, makeItExpand)
{
    // Find all block belongs to the input placeHolder   
    var placeHolder = $get(placeHolderId);    
    if (placeHolder != null)
    {         
        var htmlContent = placeHolder.innerHTML;
        var re = new RegExp("(" + PREFIX_BLOCK_COMMENT + "[\\d\\w-]{36})", "g");
        
        var m = htmlContent.match(re);
        if (m != null) 
        {          
            for (i = 0; i < m.length; i++) 
            {
                var blockId = m[i].replace(PREFIX_BLOCK_COMMENT, "");
                ExpandBlock(blockId, makeItExpand);
            }
        }                      
    }    
}
function ExpandBlock(blockId, makeItExpand)
{    
    // Find the expand link, then expand it
    var anchorShowSubCommentsId = PREFIX_LINK_SHOW_COMMENT + blockId;    
    var anchorShowSubComments = $get(anchorShowSubCommentsId);    
    if (anchorShowSubComments != null)
    {            
        if (makeItExpand == false)
        {
            ChangeNewStyle(anchorShowSubComments, 'c-box');            
            HideCommentHiddenPanel(blockId);            
        }            
        else
        {
            // Get newsid, commentId from the target link of the above anchorShowSubComments
            var href = anchorShowSubComments.href;                
            var re = new RegExp("news/([^/\?]*)/([\\d]+)/([\\d]+)/([^/\?]*)");
            var m = re.exec(href);        
            if (m != null && m.length == 5) 
            {           
                var newsId = m[2];
                var commentId = m[3];            
                
                //Use newsid= null as input inoder to get child comment only
                if (GetStyle(anchorShowSubCommentsId) != "c-box-open")
                {                    
                    ChangeNewStyle(anchorShowSubComments, 'c-box-open');                                                    
                    GetComment(null, commentId, blockId, true);                     
                }                
            }
        }        
    }
}
//------------------------------------------------------------------------------------
function ShowHideThreashold(anchorObject, blockId)
{    
    if (anchorObject.innerHTML == RES_SHOW_THREASHOLD_COMMENT)
    {
        anchorObject.innerHTML = RES_HIDE_THREASHOLD_COMMENT;        
        $get("PanelThreasholdInfo_" + blockId).style.display = "none";
        $get("SpanVote_" + blockId).style.display = "block";
        $get("ThreasholdContent_" + blockId).style.display = "block";
    }
    else
    {
        anchorObject.innerHTML = RES_SHOW_THREASHOLD_COMMENT;        
        $get("PanelThreasholdInfo_" + blockId).style.display = "block";
        $get("SpanVote_" + blockId).style.display = "none";
        $get("ThreasholdContent_" + blockId).style.display = "none";
    }
    return false;  
}
//-------------------EDIT COMMENT----------------------------------------------
function ShowHideEditCommentPanel(sender, guid, commentId, parentCommentId, parentGuid)
{       
//    var objBody = $get(PREFIX_DIV_COMMENT_BODY + guid);
//    var comment = "";
//    if (objBody != null)
//    {   
//        comment = objBody.innerHTML;
//    }
    var objBlock = $get(PREFIX_BLOCK_COMMENT + guid);    
    if (objBlock != null)
    {           
        sender.className = "Invisible";        
        EditPostCommentPanel(guid, commentId, parentCommentId, parentGuid, sender.id);        
    }
}
function EditPostCommentPanel(guid, commentId, parentCommentId, parentGuid, senderId)
{    
    //Application_Path is declared at the head section of news.master
    var commentBody =  $get(PREFIX_DIV_COMMENT_BODY + guid).innerHTML.trim().replace(/<br>/gi, "\n");  
    var placeHolderObj = $get(PREFIX_DIV_THREADSHOLD_CONTENT + guid);
    var oldContent = placeHolderObj.innerHTML; 
    var callPostComment = String.format("EditComment({0}, {1},'{2}','{3}','{4}')", commentId, parentCommentId, guid, parentGuid, senderId);    
    var callCancelEdit = String.format("CanelEditComment('{0}','{1}')", guid, senderId);
    var srcHtml = 
    "<div class=\"clear\"></div>" +  
        "<textarea name=\""+ PREFIX_TEXTAREA_EDIT + "GUID\" id=\"" + PREFIX_TEXTAREA_EDIT + "GUID\" class=\"newsCustom_CommentInputField\">" + commentBody + "</textarea>" +
            "<span id=\"" + PREFIX_SPAN_INDICATOR_EDIT + "GUID\" style=\"display:none;\" >" +
                "<img src=\"" + Application_Path + "/images/indicator.gif\" alt=\"Cofieu - Comment Indicator\" class=\"newsCustom_ShowEditCommentIndicator\" />" +
            "</span>" +
        "<div class=\"clear\"></div><div><input type=\"submit\" value=\"" + RES_SUBMIT_BUTTON + "\" name=\"SubmitEdit_GUID\" id=\"SubmitEdit_GUID\" class=\"newsCustom_EditComment_ButtonSubmit\" onclick=\"" + callPostComment + "; return false;\" />" +
        "<input type=\"button\" value=\"" + RES_CANCEL_EDIT_BUTTON + "\" name=\"CancelEdit_GUID\" id=\"CancelEdit_GUID\" class=\"newsCustom_EditComment_ButtonCancel\" onclick=\"" + callCancelEdit + "; return false;\" />" +   
    "</div><span id=\"" + PREFIX_SPAN_EDIT_BACKUP + 'GUID' + "\" style=\"display:none;visibility:hidden;\">"+ oldContent + "</span>";        
    srcHtml = srcHtml.replace(/GUID/g, guid);      
    placeHolderObj.innerHTML ="";
    placeHolderObj.innerHTML = srcHtml;    
}
function CanelEditComment(guid, objEditId)
{
    var placeHolderObj = $get(PREFIX_DIV_THREADSHOLD_CONTENT + guid);
    var backupObj = $get(PREFIX_SPAN_EDIT_BACKUP + guid);
    if (placeHolderObj != null && backupObj != null)    
    {
        var oldContent = backupObj.innerHTML;
        placeHolderObj.innerHTML = oldContent;
        var linkEditObj = $get(objEditId);
        if (linkEditObj!= null)
            linkEditObj.className = "Visible";
    }           
}
function EditComment(commentId, parentCommentId, guid, parentGuid, senderId)
{   
    var areaEditId = PREFIX_TEXTAREA_EDIT + guid;
    var objAreaEdit = $get(areaEditId);    
    if (objAreaEdit == null)
    {
        CanelEditComment(guid, senderId);
        return;
    }
    var minuteCount = $("#" + PREFIX_SPAN_NUMER_MINUTE_LEFT + guid).html();    
    if (minuteCount == "" || minuteCount == null)
    {
        alert(RES_TIMEOUT_EDIT);
        CanelEditComment(guid, senderId);
        return;
    }    
    if (!ValidateText(PREFIX_TEXTAREA_EDIT + guid, MIN_COMMENT_ALLOWED, MAX_COMMENT_ALLOWED))    
        return;
    var indicatorId = PREFIX_SPAN_INDICATOR_EDIT + guid;        
    ShowHidePanelObject(indicatorId); 
    var newComment = objAreaEdit.value;    
    //Call web method to edit comment    
    var myServiceProxy = new NewsWebService();    
    var userContext = new Array(guid, parentCommentId, parentGuid, senderId);
    myServiceProxy.set_defaultSucceededCallback(onEditCommentSuccess);
    myServiceProxy.set_defaultFailedCallback(onEditCommentFailed);        
    myServiceProxy.set_defaultUserContext(userContext);
    myServiceProxy.EditComment(commentId, newComment);
    
}
function onEditCommentSuccess(result, userContext)
{ 
    var guid = userContext[0];
    var commentBlockId = PREFIX_BLOCK_COMMENT + guid;
    var placeHolderId = PREFIX_DIV_THREADSHOLD_CONTENT + guid;
    var backupId = PREFIX_SPAN_EDIT_BACKUP + guid;
    var commentBodyId = PREFIX_DIV_COMMENT_BODY + guid;
    var indicatorId = PREFIX_SPAN_INDICATOR_EDIT + guid;  
    var linkEditId = PREFIX_IMG_EDIT_LINK + guid;    
    if (result == "")
    {
        alert(RES_COMMENT_NOT_EXIST);
        var parentCommentGuid = userContext[2];                         
        DecreaseTotalCommentNumber(parentCommentGuid, '1'); 
        RemoveChildDiv(parentCommentGuid, guid);                        
        return;        
    }
    var placeHolderObj = $get(placeHolderId);
    var backupObj = $get(backupId);
    var linkEditObj = $get(linkEditId);    
    var commentObj = $get(commentBodyId);
    ShowHidePanelObject(indicatorId);
    
    var newComment = result; //textAreaObj.value;
    commentObj.innerHTML = newComment;

    var oldContent = backupObj.innerHTML;
    placeHolderObj.innerHTML = oldContent;    
    linkEditObj.className = "Visible";    
}
function onEditCommentFailed(error, userContext)
{   
    var placeHolderId = PREFIX_DIV_THREADSHOLD_CONTENT + guid;
    var backupId = PREFIX_SPAN_EDIT_BACKUP + guid;
    var linkEditId = PREFIX_IMG_EDIT_LINK + guid;    
    var indicatorId = PREFIX_SPAN_INDICATOR_EDIT + guid;  
    alert(RES_FAILED_WHEN_POST_COMMENT); 
    
    var placeHolderObj = $get(placeHolderId);
    var backupObj = $get(backupId);
    var linkEditObj = $get(linkEditId);    
    ShowHidePanelObject(indicatorId);
        
    var oldContent = backupObj.innerHTML;
    placeHolderObj.innerHTML = oldContent;    
    if (linkEditObj!= null)
        linkEditObj.className = "Visible";     
}
function ConfirmDeleteComment(sender, guid, commentId, newsId, parentCommentId, parentGuid)
{    
    var option = confirm(RES_DELETE_COMMENT_WARNING);
    if (option == false)
        return;
    var placeHolderId = PREFIX_DIV_THREADSHOLD_CONTENT + guid;            
    var indicatorId = PREFIX_SPAN_INDICATOR_DELETE + guid;
    var placeHolderObj = $get(placeHolderId);
    var srcHtml = "";
    if (placeHolderObj.innerHTML.indexOf( PREFIX_SPAN_INDICATOR_DELETE ,1) < 1)
    {
        srcHtml = "<span id=\"" + PREFIX_SPAN_INDICATOR_DELETE + "GUID\" style=\"display:none;\" >" +
                "<img src=\"" + Application_Path + "/images/indicator.gif\" alt=\"Cofieu - Comment Indicator\" class=\"newsCustom_ShowEditCommentIndicator\" />" +
            "</span>"
        srcHtml = srcHtml.replace(/GUID/g, guid);
    }    
    placeHolderObj.innerHTML = srcHtml +  placeHolderObj.innerHTML;
    sender.className = "Invisible";        
    ShowHidePanelObject(indicatorId);
    DeleteComment(sender.id, guid, commentId, newsId, parentCommentId, parentGuid);        
}
function DeleteComment(senderId, guid, commentId, newsId, parentCommentId, parentGuid)
{
     var parentBlockId = PREFIX_DIV_SUB_COMMENT + parentGuid;
     var parentBlockHasComment = HasChildComment(parentBlockId);    
    if (parentBlockId == ID_DIV_SUB_COMMENT)
        parentBlockHasComment = true; // Make it adds new comment only
    //Call web method to delete comment
    var myServiceProxy = new NewsWebService();
    //create an array to keep elements' id for updating page after calling web services
    //placeHolderId : contains id of comment block    
    //senderId: contain id of link Edit       
    //indicatorId : used for presentation
    //blockCommentId : id of this whole block
    var userContext = new Array(senderId, guid, newsId, parentCommentId, parentBlockHasComment, parentGuid);    
     
    myServiceProxy.set_defaultSucceededCallback(onDeleteCommentSuccess);
    myServiceProxy.set_defaultFailedCallback(onDeleteCommentFailed);        
    myServiceProxy.set_defaultUserContext(userContext);
    myServiceProxy.DeleteComment(commentId);
}
function onDeleteCommentSuccess(result, userContext)
{ 
    var guid = userContext[1];
    var commentBlockId = PREFIX_BLOCK_COMMENT + guid;    
    var indicatorId = PREFIX_SPAN_INDICATOR_DELETE + guid;   
    ShowHidePanelObject(indicatorId);        
//    var linkDeleteObj = $get(userContext[0]);    
//    linkDeleteObj.className = "Visible";
    var removedComments = result;
    if (removedComments > 0)
    {
        DecreaseTotalCommentNumber(ID_MAIN_GUID, removedComments);        
        //RemoveAllSubComments(blockId,removedComments);
        var newsId = userContext[2];
        var parentCommentId = userContext[3];                
        var parentBlockHasComment = userContext[4];
        var parentCommentGuid = userContext[5];
        if (parentCommentId == null || parentCommentId <= 0)
            newCommentContent = GetCommentAfterDeleting(newsId, null, guid, true, parentBlockHasComment, parentCommentGuid);
        else
            newCommentContent = GetCommentAfterDeleting(null, parentCommentId, guid, true, parentBlockHasComment, parentCommentGuid);        
    }
}
function onDeleteCommentFailed(error, userContext)
{
    alert(RES_FAILED_WHEN_DELETE_COMMENT); 
    var guid = userContext[1];
    var indicatorId = PREFIX_SPAN_INDICATOR_DELETE + guid;   
    ShowHidePanelObject(indicatorId);            
}
function DecreaseTotalCommentNumber(objId, count)
{
    var obj = $get(PREFIX_SPAN_TOTAL_REPLIES + objId);
    if (obj != null)
    {        
        var commentCount = parseInt(obj.innerHTML);        
        obj.innerHTML = (commentCount - count) + " ";
    }
}
function RemoveChildDiv(parentCommentGuid, childCommentId)
{
    var mainBlockId = PREFIX_DIV_SUB_COMMENT + parentCommentGuid ;     
    var mainBlockObj = $get(mainBlockId);
    var commentBlockId = PREFIX_BLOCK_COMMENT + childCommentId;        
    var blockObj = $get(commentBlockId);            
    blockObj.innerHTML = "";
    var htmlContent = mainBlockObj.innerHTML;
    var pattern = "<DIV [^\\d]{0,100} id=[\"]?" + commentBlockId + "[\"]?[^>]{0,100}></div>";
    var myregexp = new RegExp(pattern, "i");        
    mainBlockObj.innerHTML = htmlContent.replace(myregexp, "");
    //<div id=\"BlockComment_3684ae60-ed41-48e0-ae62-51f037ac3c92\" class=\"newsCustom_CommentBlock\"></div>
    pattern = "<DIV id=[\"]?" + commentBlockId + "[\"]? [^\\d>]{0,100}></div>";
    myregexp = new RegExp(pattern, "i");        
    mainBlockObj.innerHTML = htmlContent.replace(myregexp, "");    
}
function GetCommentAfterDeleting(newsId, commentId, blockId, expandChild, parentBlockHasComment, parentCommentGuid)
{        
    if (newsId != null && newsId > 0)
    {   
        var mainBlockId = ID_MAIN_GUID;
        var childBlockId = blockId;
        RemoveChildDiv(mainBlockId, childBlockId);                   
    }    
    else if (commentId != null && commentId>0)
    {
        var countRely = GetChildCommentsCount(parentCommentGuid);
        if (countRely<=1)//only 1 child comment
        {
            var myServiceProxy = new NewsWebService();
            var userContext = new Array(parentBlockHasComment, parentCommentGuid);          
            myServiceProxy.set_defaultSucceededCallback(onGetCommentAfterDeletingSuccess);
            myServiceProxy.set_defaultFailedCallback(onGetCommentAfterDeletingFailed);        
            myServiceProxy.set_defaultUserContext(userContext);
            myServiceProxy.GetComment(commentId, parentCommentGuid);
        }
        else
        {
            var mainBlockId = parentCommentGuid;
            var childBlockId = blockId;
            RemoveChildDiv(mainBlockId, childBlockId);
            DecreaseTotalCommentNumber(mainBlockId, '1');
        }
    }
}    
function GetChildCommentsCount(blockId)
{
    var replyCountId = PREFIX_SPAN_TOTAL_REPLIES + blockId;
    var obj = $get(replyCountId);
    if (obj != null)
    {
        var count = parseInt(obj.innerHTML);
        return count;
    }
    return 0;
}
function onGetCommentAfterDeletingSuccess(result, userContext)
{   
        // Find the new load placeholder
        var blockId = userContext[1];
        var placeHolderId = PREFIX_BLOCK_COMMENT + blockId;                
        var newCommentContent = result;        
        var parentBlockHasComment = userContext[0];
        CopyHTML2Div_ForDelete(newCommentContent, $get(placeHolderId), parentBlockHasComment);
}
function onGetCommentAfterDeletingFailed(error, userContext)
{   
    var blockId = userContext[1];
    var placeHolderId = PREFIX_BLOCK_COMMENT + blockId;    
    $get(placeHolderId).innerHTML = RES_FAILED_WHEN_GET_COMMENT;    
}
function CopyHTML2Div_ForDelete(stringHtml, divObject, parentBlockHasComment)
{   
    if (parentBlockHasComment == true)
    {
        var commentPlaceHolder = GetChildCommentPlaceHolder(divObject);
        commentPlaceHolder.innerHTML = commentPlaceHolder.innerHTML + stringHtml;                
        return;
    }
    
    // NOW divObject can not be DivSubComment_MAIN and the block whose does not has comment will be reload
    var newId = GetFirstDivIdFromHtml(stringHtml).replace(PREFIX_BLOCK_COMMENT,"");         
    var oldId = divObject.id.replace(PREFIX_BLOCK_COMMENT,"");    
    divObject.innerHTML = GetInnerHtmlOfFirstDiv(stringHtml);     
    
    var myregexp = new RegExp(newId, "g");        
    var a = divObject.innerHTML.replace(myregexp, oldId);    
    
    divObject.innerHTML = a;            
    var anchorShowSubCommentsId = PREFIX_LINK_SHOW_COMMENT + oldId;    
    var anchorShowSubComments = $get(anchorShowSubCommentsId);    
    if (anchorShowSubComments != null)
    {           
		if(Sys.Browser.agent == Sys.Browser.InternetExplorer) 
		{
			anchorShowSubComments.focus();
            anchorShowSubComments.click();
		}
        else //if (navigator.userAgent.indexOf("Firefox")!=-1)
        {
            anchorShowSubComments.onclick();              
        }
    }     
}
