﻿
//
// Comments.ascx.js
//

/// <reference path="../Edentity.Global.js" />
/// <reference path="../API/Agility.UGC.API.js" />
/// <reference path="../External/jquery-jtemplates.js" />
/// <reference path="../External/date.format.js" />
/// <reference path="./Validators.js" />


Edentity.RegisterNamespace("Whiskas.Controls.Comments");

(function(WCC, $) {

    var pnlComments = null;
    var PagesCount = 5; //Visible pages
    var PageWidth = 19; // Page width 19px

    WCC.OnInit = function(pnlCommentsID, contentID, contentType, commentLength, CommentsPerPage) {

        pnlComments = $("#" + pnlCommentsID);

        pnlComments.data('ContentID', contentID);
        pnlComments.data('ContentType', contentType);
        pnlComments.data('CommentsPerPage', CommentsPerPage);

        _bindTextAreaCount(commentLength);

        _populateComments(true);
    };

    function _bindTextAreaCount(commentLength) {
        var textarea = $('textarea[id$=txtComment]', pnlComments);
        textarea.keyup(function() {
            var count = textarea.val().length;
            if (count > commentLength) {
                textarea.val(textarea.val().substring(0, commentLength));
                count = commentLength;
            }
            else {
                textarea.next().html(textarea.attr('RemainingCharactersAvailableLabel') + ": " + (commentLength - count));
            }
        });
    };

    WCC.OnPopulateComments = function(sender) {

        if (!$(sender).is('.Selected')) {
            // When called this exists
            var searchArg = pnlComments.data("agilitySearchArg");
            var pageNo = parseInt($(sender).attr('pageno'));
            searchArg.RecordOffset = pageNo * searchArg.PageSize;

            _populateComments(false);
        }
    };

    function _populateComments(resetPager) {

        var searchArg = pnlComments.data("agilitySearchArg");
        var pnlCommentsList = $('div.CommentList', pnlComments);

        if (searchArg == null) {

            var contentID = (pnlComments != null) ? eval(pnlComments.data('ContentID')) : 0;
            var contentType = (pnlComments != null) ? pnlComments.data('ContentType') : '';
            var commentsPerPage = (pnlComments != null) ? eval(pnlComments.data('CommentsPerPage')) : 6;
            if (commentsPerPage <= 0) {
                commentsPerPage == 6;
            }

            searchArg = {
                RecordTypeName: "Comments",
                PageSize: commentsPerPage,
                RecordOffset: 0,
                SortedField: "CreatedOn",
                SortDirection: Agility.UGC.API.SortDirection.DESC,
                Search: "ObjectKey = '" + contentType + "-" + contentID + "'"
            }

            pnlComments.data("agilitySearchArg", searchArg);
        }

        Agility.UGC.API.SearchRecords(searchArg, function(data) {

            if (data.ResponseType != Agility.UGC.API.ResponseType.OK) {
                $(pnlCommentsList).html("There was an error loading the records: " + data.Message);
            } else {

                var templateUrl = Agility.ResolveUrl("~/ClientTemplates/Comments.htm");

                //use jTemplates to build the data
                $(pnlCommentsList).setTemplateURL(templateUrl);
                $(pnlCommentsList).setParam("renderDate", Whiskas.Controls.Comments.RenderDate);

                $(pnlCommentsList).processTemplate(data.ResponseData.Records);

                //add the pager
                var ListingFooter = pnlCommentsList.next();
                if (resetPager) {
                    _setGridFooter(ListingFooter, searchArg.PageSize, data.ResponseData.TotalRecords, searchArg.RecordOffset);
                }
                else {
                    var currentPage = Math.floor(searchArg.RecordOffset / searchArg.PageSize);
                    _slidePager(currentPage, ListingFooter);
                }
            }
        });
    };

    WCC.RenderDate = function(textDate) {
        try {
            var parts = textDate.split(" ");
            var dates = parts[0].split("-");
            var times = parts[1].split(":");
            var d = new Date(dates[0],
                parseInt(dates[1]) - 1, //Month adjusted 0-11
                dates[2], times[0], times[1], times[2], 0);
            return pnlComments.attr("PostedOn") + "&nbsp;" + dateFormat(d, "mmm d");
        }
        catch (e) {
            return textDate;
        }
    };

    function _setGridFooter(listingFooter, pageSize, totalRecords, recordOffset) {

        var pagesCount = PagesCount;
        var pageWidth = PageWidth;

        if (pageSize <= 0) {
            pageSize = 6; //Default
        }

        var currentPage = Math.floor(recordOffset / pageSize);
        var firstPage = Math.floor(currentPage / pagesCount) * pagesCount;

        if (totalRecords > 0 && totalRecords > pageSize) {

            var totalPages = Math.ceil(totalRecords / pageSize);

            var html = "<div class='Pager' totalpages='" + totalPages + "'>";
            html += "<div class='Div'></div>";
            html += "<div class='PagerLeft'></div>";

            if (totalPages > pagesCount) {
                html += "<div class='PrevPages' pageno='0' onclick='Whiskas.Controls.Comments.OnPopulateComments(this);'></div>";
            }

            html += "<div class='Pages' style='width:" +
                ((totalPages > pagesCount) ? (pagesCount * pageWidth) : (totalPages * pageWidth)) + "px'>";

            html += "<div class='All' style='width:" + (totalPages * pageWidth) + "px'>";
            for (var i = 0; i < totalPages; i++) {
                html += "<a href='#' pageno='" + i + "' ";
                if (currentPage == i) {
                    html += "class='Selected' ";
                }
                html += "onclick='Whiskas.Controls.Comments.OnPopulateComments(this); return false;'";
                html += ">" + (i + 1) + "</a>";
            }
            html += "</div></div>";

            if (totalPages > pagesCount) {
                html += "<div class='NextPages' pageno='" + (totalPages - 1) +
                "' onclick='Whiskas.Controls.Comments.OnPopulateComments(this);'></div>";
            }
            html += "<div class='PagerRight'></div>";
            html += "<div class='Div'></div>";
            html += "<div class='Clear'></div></div>";

            listingFooter.html(html);

            // Adjust centering the pager
            var w = $('div.PagerLeft', listingFooter).width();

            var w1 = $('div.PrevPages', listingFooter).width();
            w += (w1 == null) ? 0 : w1;

            w += $('div.Pages', listingFooter).width();

            var w1 = $('div.NextPages', listingFooter).width();
            w += (w1 == null) ? 0 : w1;

            w += $('div.PagerRight', listingFooter).width();

            $('div.Div', listingFooter).width((listingFooter.width() - w) / 2);
        }
    }

    function _slidePager(currentPage, ListingFooter) {

        var pagesCount = PagesCount;
        var pageWidth = PageWidth;

        var pager = $('div.Pager', ListingFooter);
        var totalPages = $('a', pager).size();

        $('a', pager).removeClass('Selected');

        if (totalPages >= pagesCount) { // Side sliding pager
            var step = 0;
            if (currentPage <= 2) {
                step = 0;
            }
            else if (totalPages - currentPage <= 2) {
                step = -totalPages + pagesCount;
            }
            else {
                step = -Math.floor(currentPage % pagesCount) + 2;
            }

            $('div.All', pager).animate({ left: (step * pageWidth) + 'px' }, 'normal');
        }

        $("a[pageno=" + currentPage + "]", pager).addClass('Selected');
    };

    function _saveComment(sender) {

        var commentDiv = $(sender).parent().prev();
        var hfInappropriateWords = $("input[id$=hfInappropriateWords]", commentDiv);

        var contentID = (pnlComments != null) ? pnlComments.data('ContentID') : 0;
        var contentType = (pnlComments != null) ? pnlComments.data('ContentType') : '';

        var record = {
            ID: -1,
            RecordTypeName: "Comments",
            ObjectKey: contentType + "-" + contentID,
            Type: contentType,
            CommentByID: -1,
            FirstName: $("input[id$=txtFirstName]", commentDiv).val(),
            LastName: $("input[id$=txtLastName]", commentDiv).val(),
            EmailAddress: $("input[id$=txtEmail]", commentDiv).val(),
            Comment: $("textarea[id$=txtComment]", commentDiv).val()
        };
        
        var requireModeration = _hasInappropriateWord(record.Comment, hfInappropriateWords.val().split(","));

        Agility.UGC.API.SaveRecord(record, function(data) {
            if (data.ResponseType != 0) {
                alert("There was an error: " + data.Message);
            }
            else {
                if (!requireModeration) {
                    Agility.UGC.API.SetRecordState(data.ResponseData,
                        Agility.UGC.API.RecordState.Published,
                        null, function() {
                            _populateComments(true);
                        });
                }
                Whiskas.Controls.Comments.OnDiscard();
            }
        });
    };

    function _hasInappropriateWord(text, words) {
        for (var i = 0; i < words.length; i++) {
            var comp = text.toLowerCase().indexOf(words[i].toLowerCase());
            if (comp >= 0) {
                return true;
            }
        }
        return false;
    };

    WCC.OnPostShow = function(sender) {
        $(sender).hide();
        $(sender).prev().prev().show();
    };

    WCC.OnPostHide = function(sender) {
        $(sender).parent().hide();
        $(sender).parent().next().next().show();
    };

    WCC.OnDiscard = function() {
        var commentDiv = $("div.Inputs", pnlComments);
        $("input[id$=txtFirstName]", commentDiv).val("");
        $("input[id$=txtLastName]", commentDiv).val("");
        $("input[id$=txtEmail]", commentDiv).val("");
        $("textarea[id$=txtComment]", commentDiv).val("");
    };

    WCC.OnSubmit = function(sender) {

        var pageValid = Page_ClientValidate("Submission");
        if (pageValid) {

            var commentDiv = $(sender).parent().prev();

            var s1 = $("input[id$=hfSecure]", commentDiv).val();
            var s2 = $("input[id$=txtSecure]", commentDiv).val();

            var empty = $("input[id$=txtFirstName]", commentDiv).val().length == 0;
            empty = empty || ($("input[id$=txtLastName]", commentDiv).val().length == 0);
            empty = empty || ($("input[id$=txtEmail]", commentDiv).val().length == 0);
            empty = empty || ($("textarea[id$=txtComment]", commentDiv).val().length == 0);

            if (s1 == "" && s1 == "" && !empty) {
                _saveComment(sender);
            }
        }
    };

})(Whiskas.Controls.Comments, jQuery);
