var comments;
var userName;
var submitClicked;
var items_per_page = 5;
var callback = null;
var callingDomain = "http://api.winduplist.com";

(function ($) {
    $.fn.Comments = function (options) {
    var defaults = {
        userId:0
        ,objectId:0
        ,objectTypeId:0
        ,callback: null
        ,defaultImage: ""
    };

    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);
        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") + "&jsonp=?", function (data) {
            comments = data;
            BuildCommentsControl(context);
        });
    });
}

function BuildCommentsControl(context) {
    $(document).ready(function () {

        var contenthtml;
        contenthtml = "<span class=\"commentsHeader\">Comments</span>";
        contenthtml += "<div><input class=\"txtShowCommentBox\" type=\"text\" value=\"Write a comment...\" onclick=\"ShowCommentBox(this);\" />";
        contenthtml += "<div class=\"addcomment\" >";
        contenthtml += "<textarea class=\"txtComment\" cols=\"42\" rows=\"4\" ></textarea><br />";
        contenthtml += "<input class=\"btnSubmit\" type=\"button\" value=\"Submit\" onclick=\"AddComment(this);\" /></div>";
        contenthtml += "</div><br /><div class=\"hiddenresult\" style=\"display:none;\">";
        
        var replyHtml = '<a href="#" class="button fright" onclick="ShowCommentBox(this, [commentId]); return false;">Reply</a>';

        $.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");
            }

            contenthtml += '<div class="result">';
            contenthtml += '<div class="entry clearfix">';
            contenthtml += '<div class="avatar"><img src="' + item.User.Avatar + '" alt="' + userName + '" height="40px" width="40px"/></div>';
            contenthtml += '<div class="copy">';
            contenthtml += '<span class="clearfix"><span class="user">' + userName + ':</span>';
            contenthtml += htmlEncode(item.Text)
            contenthtml += '</span><span class="post">' + FormatDate(parseJSONDate(item.Date)) + '</span>';
            if (item.Parent.Id == item.Id) {
                contenthtml += replyHtml.replace("[commentId]", item.Id.toString()); ;
            }
            contenthtml += '</div>';
            contenthtml += '</div>';
            contenthtml += '</div>';
        });

        contenthtml += "</div>";
        var pagingHtml = "<div class=\"Searchresult\">This content will be replaced when pagination inits.</div>";
        pagingHtml += "<div class=\"paging\"></div>";
        pagingHtml += "<br style=\"clear:both;\" />";

        contenthtml += pagingHtml;

        context.html(contenthtml);

        $(".addcomment", context).hide();
        //        if(context.data("userId")==0) {
        //            $("input.txtShowCommentBox",context).hide();
        //            $("a.reply",context).hide();
        //        }

        $(".btnSubmit", 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 context = $(a).parents(".comments");

    if (context.data("userId") == 0) {
        alert("You must log in to leave a comment.");
        return;
    }

    if(arguments.length>1) {
    context.data("parentId", arguments[1]);}
    else {
    context.data("parentId",0);}

    $(document).ready(function () {
        $(".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 fulltext = $(".txtComment",context).val();
    submitClicked = false;
    var uri = callingDomain + "/commenting.svc/comments/Insert?objectId=" + context.data("objectId") + "&objectTypeId=" + context.data("objectTypeId") + "&subject=commentSubject&commentText=" + fulltext + "&parentId=" + context.data("parentId") + "&userId=" + context.data("userId") + "&jsonp=?";
    $.getJSON(uri, function (data) {
        comments = data;
        BuildCommentsControl(context);
    });
}
