﻿var comments;
var userName;
var submitClicked;
var items_per_page = 5;
var callback = null;
var callingDomain = "http://api.winduplist.com";
//var callingDomain = "";

(function ($) {
    $.fn.Comments = function (options) {
    var defaults = {
        userId:0
        ,objectId:0
        ,objectTypeId:0
        ,callback: null
        ,defaultImage: ""
        ,siteId: 0
        ,commentType: 'comment'
        ,header: 'Comments'
        ,initialText: 'Write a comment...'
    };

    options=$.extend(defaults,options);
    callback = options.callback;
    $(this).each(function(){
        var context;
        context = $(this);
        context.addClass("comments");
        context.data("userId", options.userId);
        context.data("objectId", options.objectId);
        context.data("objectTypeId", options.objectTypeId);
        context.data("defaultImage", options.defaultImage);
        context.data("siteId", options.siteId);
        context.data("subject", options.subject);
        context.data("commentType", options.commentType);
        context.data("header", options.header);
        context.data("initialText", options.initialText);
        GetData(context);
        });
        return this;
    };
})(jQuery);

function GetData(context) {
    $(document).ready(function () {
        $.getJSON(callingDomain + "/commenting.svc/comments/get?objectId=" + context.data("objectId") 
        + "&objectTypeId=" + context.data("objectTypeId") 
        + "&userId=" + context.data("userId") 
        + "&siteId=" + context.data("siteId") 
        + "&subject=" + context.data("subject") 
        + "&jsonp=?", function (data) {
            comments = data;
            BuildCommentsControl(context);
        });
    });
}

function BuildCommentsControl(context) {
    $(document).ready(function () {
        var contenthtml;
        var content = $('<div id="commentform">');
        //content.append("<span class=\"commentsHeader\">" + context.data('header') + "</span>");
        content.append("<div><input class=\"txtShowCommentBox\" type=\"text\" value=\"" + context.data("initialText") + "\" onclick=\"ShowCommentBox(this);\" />"
        + "<div class=\"addcomment\" >"
        + '<input type="text" class="subject"/>'
        + "<div class=\"title\">Comment</div><textarea class=\"txtComment\" cols=\"20\" rows=\"4\" ></textarea><br /><br />"
        + "<input class=\"submit\" type=\"button\" value=\"Submit\" onclick=\"AddComment(this);\" /></div>"
        + "</div></div><br />");
        content.append("<div class=\"hiddenresult\" style=\"display:none;\">");

        var replyHtml = '<a id="[commentId]" href="#" class="button1 reply" onclick="ShowCommentBox(this, [subject]); return false;">Reply</a>';
        replyHtml += '<br /><br />';
        $.each(comments, function (i, item) {
            userName = item.User.DisplayName;
            if (item.User.Avatar == null || item.User.Avatar.length == 0) {
                item.User.Avatar = context.data("defaultImage");
            }

            var commentHtml = '';
            commentHtml += '<div class="result">';
            commentHtml += '<div class="entry clearfix">';
            commentHtml += '<div class="name"><a href="#"><img src="' + item.User.Avatar + '" alt="' + userName + '" height="26px" width="26px"/></a><a href="#">' + userName + '</a></div>';
            commentHtml += '<div class="copy" style="padding:0px;">' + htmlEncode(item.Text) + '</div>';
            if (item.Parent.Id == item.Id) {
                commentHtml += replyHtml.replace(/\[commentId\]/gi, item.Id.toString()).replace(/\[subject\]/gi, "'RE: " + htmlEncode(item.Subject) + "'");
            }
            commentHtml += '</div><!--end entry-->';
            commentHtml += '</div><!--end result-->';

            var c = $(commentHtml);
            var replyLink = $('a.reply#' + item.Id.toString(), c);
            replyLink.data('originalComment', item);
            var userLnk = $('div.by a', c);
            if (userLnk.attr('href') == '')
                userLnk.removeAttr('href');
            $('div.hiddenresult', content).append(c);
            //alert($('div.hiddenresult', content).html());
        });

        var pagingHtml = "<div class=\"Searchresult\" id=\"comment\" style=\"margin:0 20px;background:none;\">This content will be replaced when pagination inits.</div>";
        pagingHtml += "<div class=\"paging\"></div>";
        pagingHtml += "<br style=\"clear:both;\" />";


        context.html('');
        context.append(content);
        content.after(pagingHtml);

        $(".addcomment", context).hide();

        $(".submit", context).mousedown(function () {
            submitClicked = true;
        });

        $(".txtComment", context).blur(function (event) {
            hideCommentBox(this);
        });

        context.data("num_entries", jQuery('.hiddenresult div.result', context).length);

        $(".paging", context).pagination(context.data("num_entries"), {
            callback: pageselectCallback,
            items_per_page: 5
        });

        $(".paging", context).find("a").addClass("button");

        if (callback != null) {
            callback(context);
        }
    });
}

function pageselectCallback(page_index, jq) {
    var context = jq.parents(".comments");
    var max_elem = Math.min((page_index + 1) * items_per_page, context.data("num_entries"));

    if (context.data("num_entries") <= items_per_page) {
        $(".pagination", context).hide();
    }

    var new_content = "";
    for (var i = page_index * items_per_page; i < max_elem; i++) {
        new_content += jQuery('.hiddenresult div.result:eq(' + i + ')', context).html();
    }

    $('.Searchresult', context).empty().append(new_content);
    return false;
}

function hideCommentBox(a) {
    var context = $(a).parents(".comments");
    $(document).ready(function () {
        if (submitClicked != true) {
            $(".txtShowCommentBox", context).show();
            $(".addcomment", context).hide();
        }
    });
}

function ShowCommentBox(a) {
    var link = $(a);
    var context = link.parents(".comments").eq(0);

    if (context.data("userId") == 0) {
        alert("You must log in to leave a comment.");
        return;
    }

    var parentId = parseInt(link.attr('id'));
    if(isNaN(parentId))
    
        parentId =0;
    context.data("parentId", parentId);
    $('input.subject', context).val((arguments.length > 1) ? arguments[1] : context.data("subject"));

    if(!$('input.subject', context).val()) {
        $('input.subject', context).show();}
    else {
        $('input.subject', context).hide();}

    $(".txtShowCommentBox", context).hide();

    $(".addcomment", context).show();
    $(".txtComment", context).focus();
}

function parseJSONDate(dateToParse) {
    var date = "";
    date = dateToParse;

    date = date.replace("/Date(", "").replace(")/", "");
    var mills = "";
    mills = date.substr(0, date.indexOf("-"));

    var displayDate = new Date();
    displayDate.setTime(mills);

    return displayDate;
}

function FormatDate(date) {
var v = new Date();

    var s = "";
    var m = (date.getHours()<12)?"AM":"PM";
	var minutes = (date.getMinutes() <10)? '0' + date.getMinutes(): date.getMinutes();
    return s.concat((1 + date.getMonth()), '/', (date.getDate()), '/', date.getFullYear(), ' ', date.getHours()%12, ':', minutes,m);
}

function AddComment(a) {
    var context = $(a).parents(".comments");
    var form = $('div.addcomment', context);
    form.hide();
    var loadingImg = $('<img src="/img/loadingAnimation.gif" alt="Processing" />');
    form.after(loadingImg);

    var fulltext = $(".txtComment", context).val();
    submitClicked = false;
    var uri = callingDomain + "/commenting.svc/comments/Insert"
    + "?objectId=" + context.data("objectId") 
    + "&objectTypeId=" + context.data("objectTypeId") 
    + "&commentText=" + fulltext 
    + "&parentId=" + context.data("parentId") 
    + "&userId=" + context.data("userId")
    + "&siteId=" + context.data("siteId")
    + "&subject=" + $('input.subject', context).val()
    + "&jsonp=?";
    $.getJSON(uri, function (data) {
        comments = data;
        BuildCommentsControl(context);
        loadingImg.hide();
    });
}
