﻿if (iDevCenter == null)
    var iDevCenter = new Object();

if (iDevCenter.Comments == null)
    iDevCenter.Comments = new Object();

/// <summary>
/// 
/// </summary>
iDevCenter.Comments.Manager = function() {

    this.Comments = new iDevCenter.Comments.CommentCollection();
}

/// <summary>
/// 
/// </summary>
iDevCenter.Comments.Comment = function() {

    /// <summary>
    /// 
    /// </summary>
    this.ToggleReplyPanel = function() {

        if (this.Manager.pnlReply.parentNode != this.pnlContainer) {

            this.pnlContainer.appendChild(this.Manager.pnlReply);

            this.Manager.pnlReply.show();
            this.Manager.txtReplyBody.focus();
            this.Manager.hidParentCommentID.value = this.ID;
        }
        else {

            if (this.Manager.pnlReply.visible()) {
                this.Manager.pnlReply.hide();
            }
            else {
                this.Manager.pnlReply.show();
                this.Manager.txtReplyBody.focus();
            }
        }
    }

    /// <summary>
    /// 
    /// </summary>
    this.Rate = function(rating) {
    
        var _this = this;
    
        var request = new Object();
        request.CommentID = this.ID;
        request.Rating = rating;
        
        var parameters = new Object();
        parameters.method = "post";
        parameters.postBody = Object.toJSON(request);
        parameters.onSuccess = Rate_OnSuccess;
        parameters.onException = Rate_OnError;
        parameters.onFailure = Rate_OnError;

        var ajax = new Ajax.Request("/comments/service.aspx?action=rate", parameters);
        
        function Rate_OnSuccess(transport) {

            var response = transport.responseText.evalJSON();

            _this.lblBody.removeClassName("good");
            _this.lblBody.removeClassName("bad");
            
            if (response.TotalRating > 0)
                _this.lblRating.innerHTML = "+" + response.TotalRating;
            else if (response.TotalRating < 0)
                _this.lblRating.innerHTML = "−" + -1 * response.TotalRating;
            else
                _this.lblRating.innerHTML = "&nbsp;";

            if (response.TotalRating >= commentManager.ThresholdGood)
                _this.lblBody.addClassName("good");

            if (response.TotalRating <= commentManager.ThresholdBad)
                _this.lblBody.addClassName("bad");
            
            if (response.MemberRating > 0)
                _this.lnkRatePositive.addClassName("rated");
            else
                _this.lnkRatePositive.removeClassName("rated");
            
            if (response.MemberRating < 0)
                _this.lnkRateNegative.addClassName("rated");
            else
                _this.lnkRateNegative.removeClassName("rated");
        }
        
        function Rate_OnError() {
        
            var ratingString;
            
            if (rating == 0)
                return;
            
            else if (rating > 0)
                ratingString = "positive";
                
            else if (rating < 0)
                ratingString = "negative";
            
            var url = "/comment/" + _this.ID + "/rate/" + ratingString + "/?returnurl=" + document.location;
            
            document.location = url;
        }
    }
    
    /// <summary>
    /// 
    /// </summary>
    this.Highlight = function() {
    
        this.pnlComment.scrollTo();
        iDevCenter.Animation.Flash(this.pnlHeader, "#d9e9fa", 9, 200);
    }
}

/// <summary>
/// 
/// </summary>
iDevCenter.Comments.CommentCollection = function() {

    var items = new Array();

    /// <summary>
    /// 
    /// </summary>
    this.Add = function(item) {
    
        items.push(item);
    }
    
    /// <summary>
    /// 
    /// </summary>
    this.Get = function(id) {

        for (var i in items)
            if (items[i].ID == id)
                return items[i];

        return null;
    }
}
