﻿// JSLint Config:
/*jslint browser: true */
/*global cc, jQuery,
cc_resx_TR_deleting, cc_resx_TR_An_error_occurred_deleting, cc_resx_TR_Delete_Comment, cc_resx_TR_Posting

*/

//  
//  Author: Kevin Burkitt
//  Date:   2010-03-22
//  
//  CC Comments Handlers - JSON paging, etc.
//
cc.comments = function() {

    return {

        displayIds: [],
        effectTime: 150,

        commentFormSubmitInProc: false,
        commentDeleteInProc: false,
        commentFormButtonText: '',
        showMoreInProc: false,

        init: function(target) {

            /*
            *  More Paging
            */
            jQuery('.more-paging', target).css('display', 'block');

            jQuery('.cc-show-more', target).each(function() {
                var url = jQuery(this).attr('cc:href');
                if (typeof url === 'undefined' || url === '') {
                    url = jQuery(this).attr('href');
                    if (typeof url === 'undefined' || url === '') {
                        return;
                    }
                }


                // if multiple comment items on the page (*cough* activity list *cough*)
                // the key parameter can be strapped to the various elements to restrict 
                // the actions of
                var key = jQuery(this).attr('cc:key');
                var activityFeed = true;
                if (typeof key === 'undefined' || key === '') {
                    key = '';
                    activityFeed = false;
                }


                var statuscheck = jQuery(this).attr('cc:status');
                if (typeof statuscheck !== 'undefined' && statuscheck !== '') {
                    statuscheck = '';
                    activityFeed = true;
                }


                jQuery(this).attr('href', '#');
                jQuery(this).click(function() {
                    cc.comments.showMore(url, key, activityFeed);
                    if (key !== '') {
                        jQuery('#more-paging-' + key).show();
                    } else {
                        jQuery('.more-paging').show();
                    }
                    return false;
                });
            });

            jQuery('.cc-form-post-comment', target).each(function() {
                jQuery(this).unbind('submit').submit(function() {
                    var formId = '#' + jQuery(this).attr('id');
                    var action = jQuery(this).attr('action');
                    return cc.comments.commentFormSubmit(formId, action);
                });
            });


            jQuery('.cc-status-comment-delete', target).live('click', function() {
                var commentId = jQuery(this).attr('cc:commentid');
                var statusId = jQuery(this).attr('cc:statusid');
                cc.comments.statusCommentDelete(this, statusId, commentId);
                return false;
            });

            jQuery('.cc-media-comment-delete', target).live('click', function() {
                var commentMemberId = jQuery(this).attr('cc:commentmemberid');
                var commentId = jQuery(this).attr('cc:commentid');
                var mediaId = jQuery(this).attr('cc:mediaid');
                var shortmediaId = jQuery(this).attr('cc:shortcommentmemberid');
                cc.comments.mediaCommentDelete(this, mediaId, commentId, commentMemberId, shortmediaId);
                return false;
            });

            jQuery('.cc-blog-comment-delete', target).live('click', function() {
                var commentId = jQuery(this).attr('cc:commentid');
                var blogId = jQuery(this).attr('cc:blogid');
                cc.comments.blogCommentDelete(blogId, commentId);
                return false;
            });


        },


        mediaCommentDelete: function(link, mediaid, commentid, commentMemberid, shortmediaId) {
            // 
            if (typeof cc.comments.commentDeleteInProc !== 'undefined' && cc.comments.commentDeleteInProc === true) {
                return false;
            }
            cc.comments.commentDeleteInProc = true;

            jQuery(link).html(cc_resx_TR_deleting);

            // Get More Comments
            cc.ajax.getJSON(
                '/watch/comment/delete/',
                {
                    commentMemberId: commentMemberid,
                    mediaId: mediaid,
                    commentId: commentid

                },
                function(resp, textStatus) {
                    if (typeof resp !== 'undefined' && typeof resp.success !== 'undefined' && resp.success === true) {
                       
                        jQuery('#' + commentid).slideUp(300, function() { jQuery('#' + shortmediaId).remove(); });
                    }
                    else {
                        cc.ui.showModalErrorMessage(cc_resx_TR_An_error_occurred_deleting);
                    }
                },
                function() {
                    cc.comments.commentDeleteInProc = false;
                }
            );

        },



        blogCommentDelete: function(blogId, commentId) {
            // 
            if (typeof cc.comments.commentDeleteInProc !== 'undefined' && cc.comments.commentDeleteInProc === true) {
                return false;
            }
            cc.comments.commentDeleteInProc = true;

            // Get More Comments
            cc.ajax.getJSON(
                '/blogs/delete-comment/',
                {
                    blogid: blogId,
                    commentid: commentId

                },
                function(resp, textStatus) {
                    if (typeof resp !== 'undefined' && typeof resp.success !== 'undefined' && resp.success === true) {
                        location.reload(true);
                    }
                    else {
                        cc.ui.showModalErrorMessage(cc_resx_TR_An_error_occurred_deleting);
                    }
                },
                function() {
                    cc.comments.commentDeleteInProc = false;
                }
            );

        },

        statusCommentDelete: function(link, statusid, commentid) {
            // 
            if (typeof cc.comments.commentDeleteInProc !== 'undefined' && cc.comments.commentDeleteInProc === true) {
                return false;
            }
            cc.comments.commentDeleteInProc = true;

            jQuery(link).html(cc_resx_TR_deleting);

            // Get More Comments
            cc.ajax.getJSON(
                '/status/comment/delete/',
                {
                    statusId: statusid,
                    commentId: commentid
                },
                function(resp, textStatus) {
                    if (typeof resp !== 'undefined' && typeof resp.success !== 'undefined' && resp.success === true) {
                        jQuery('#' + commentid).slideUp(300, function() { jQuery('#' + commentid).remove(); });
                    }
                    else {
                        cc.ui.showModalErrorMessage(cc_resx_TR_An_error_occurred_deleting);
                    }
                },
                function() {
                    cc.comments.commentDeleteInProc = false;
                }
            );

        },

        showMore: function(url, key, activityFeed) {
            var u = url;
            var k = key;
            var a = activityFeed;

            if (typeof cc.comments.showMoreInProc !== 'undefined' && cc.comments.showMoreInProc === true) {
                return false;
            }
            cc.comments.showMoreInProc = true;

            var showMoreSelector = '.cc-show-more';
            var morePagingSelector = '.more-paging';
            if (k !== '') {
                showMoreSelector = '#cc-show-more-' + k;
                morePagingSelector = '#more-paging-' + k;
            }

            jQuery(showMoreSelector).unbind('click').fadeOut(cc.comments.effectTime);

            // Get More Comments
            cc.ajax.getJSON(u, {}, function(resp, textStatus) {
                try {
                    if (resp.countResults > 0) {

                        // Remove existing LI comments (before insert all)
                        jQuery(morePagingSelector).prevUntil('ul').each(function() {
                            jQuery(this).remove();
                        });
                        //jQuery('.more-paging').remove();

                        // Add Comment Rows to DOM and push ids into display queue
                        for (var i = 0; i < resp.data.length; i++) {
                            jQuery(morePagingSelector).before(cc.comments.buildHtml(resp.data[i], a));

                            // KB: Removed Q - felt sluggish
                            // cc.comments.displayIds.push('#' + resp.data[i].uid);
                            jQuery('#' + resp.data[i].shortUidKey).show();
                        }

                        // Start display queue

                        // Check if there are more results:
                        if (resp.moreUrl !== '') {
                            jQuery(showMoreSelector).unbind('click').click(function() {
                                cc.comments.showMore(resp.moreUrl);
                                return false;
                            });
                            jQuery(showMoreSelector).fadeIn(cc.comments.effectTime);
                        } else {
                            jQuery(morePagingSelector).fadeOut(cc.comments.effectTime);
                        }

                    } else {
                        jQuery(morePagingSelector).fadeOut(cc.comments.effectTime);
                    }
                }
                catch (e) { }
            },
            function() {
                cc.comments.showMoreInProc = false;
            });

        },

        buildHtml: function(data, activityFeed) {
            var ownerClass = '';
            var statusClass = '';
            var owneroverlay = '';
            var ownerAvatarClass = '';
            var deleteCommentClass = '';
            if (data.commentOnSelf) {
                ownerClass = ' owner';
            }

            if (typeof cc === 'undefined' || cc.activeUsername === '' || cc.activeUsername === null) {
                deleteCommentClass = 'hide-deletecomment';
            }
            else {

                if (cc.activeUserIsAdmin === '1' || data.ownerUsername === cc.activeUsername || data.contentOwnerUsername === cc.activeUsername) {
                    //show delete buttton
                }
                else {
                    deleteCommentClass = 'hide-deletecomment';

                }

            }

            if (data.ownerIsVip && data.ownerIsFemale)
            { owneroverlay = 'ov-f'; ownerAvatarClass += ' av-vip-f'; }
            else
                if (data.ownerIsVip && !data.ownerIsFemale)
            { owneroverlay = 'ov-m'; ownerAvatarClass += ' av-vip-m'; }
            else
                if (!data.ownerIsVip && !data.ownerIsFemale)
            { owneroverlay = ''; ownerAvatarClass += ' av-m'; }
            else
                if (!data.ownerIsVip && data.ownerIsFemale)
            { owneroverlay = ''; ownerAvatarClass += ' av-f'; }
            else
                if (data.ownerIsPremium)
            { owneroverlay = 'ov-p'; ownerAvatarClass += ' av-p'; }
            else
                if (data.ownerIsAdmin)
            { owneroverlay = 'ov-a'; ownerAvatarClass += ' av-a'; }

            var resp = jQuery('<li />').attr('id', data.shortUidKey).addClass('all-comments').addClass('clearfix').addClass(ownerClass);

            var html = '';
            if (activityFeed !== true) {
                html += '<div class="av-outer-overlay t av-border-30x30 ' + ownerAvatarClass + '" ><img class="av-30x30 av-inner-overlay" src="' + data.ownerAvatar30x30 + '" title="' + data.ownerFriendlyName + '" /><a id="up-statuscommentowner" class="av-inner-overlay av-border-30x30 ' + ownerAvatarClass + ' ' + owneroverlay + '" title="' + data.ownerFriendlyName + '" href="' + data.ownerUrl + '">&nbsp;</a></div>';
                html += '<a class="comment-owner" href="' + data.ownerUrl + '" >' + data.ownerFriendlyName + '</a>';
                html += '<span class="date">' + data.createdAtString;
                html += '<span><a class="' + deleteCommentClass + ' cc-media-comment-delete" cc:commentmemberid="' + data.memberId + '"  cc:commentid="' + data.uid + '"  cc:mediaid="' + data.mediaId + '" title="' + cc_resx_TR_Delete_Comment + '" >x</a></span></span>';
                html += '<div><p>' + cc.helpers.nl2br(data.entry) + '</p></div>';
            }
            else {
                // Html in activity feed a little different
                html += '<dl><dt>';
                html += '<div class="av-outer-overlay t av-border-30x30 ' + ownerAvatarClass + '" ><img class="av-30x30 av-inner-overlay" src="' + data.ownerAvatar30x30 + '" title="' + data.ownerFriendlyName + '" /><a id="up-statuscommentowner" class="av-inner-overlay av-border-30x30 ' + ownerAvatarClass + ' ' + owneroverlay + '" title="' + data.ownerFriendlyName + '" href="' + data.ownerUrl + '">&nbsp;</a></div>';
                html += '</dt><dd>';
                html += '<span id="delete"><a class="' + deleteCommentClass + ' cc-status-comment-delete" cc:commentid="' + data.uid + '" cc:statusid="' + data.statusid + '">x</a></span>';
                html += '<span class="date">' + data.createdAtString + '</span>';
                html += '<a title="' + data.ownerFriendlyName + '" href="' + data.ownerUrl + '" >' + data.ownerFriendlyName + '</a>';
                html += '<div class="entry"><p>' + cc.helpers.nl2br(data.entry) + '</p></div>';
                html += '</dd></dl>';
            }

            resp.append(html);
            resp.hide();

            return resp;
        },


        commentFormSubmit: function(formId, action) {
            var id = formId;
            var url = action + '?format=json';

            var requiredFieldsFilled = true;
            jQuery('.cc-fill', jQuery(id)).each(function() {
                if (typeof jQuery(this).val() === 'undefined' || jQuery(this).val() === '') {
                    requiredFieldsFilled = false;
                }
            });
            if (requiredFieldsFilled === false) {
                return false;
            }

            if (typeof cc.comments.commentFormSubmitInProc !== 'undefined' && cc.comments.commentFormSubmitInProc === true) {
                return false;
            }
            cc.comments.commentFormSubmitInProc = true;

            jQuery('.cc-form-post', jQuery(id)).each(function() {
                if (typeof jQuery(this).html() !== 'undefined' && jQuery(this).html() !== '') {
                    cc.comments.commentFormButtonText = jQuery(this).html();
                    jQuery(this).html(cc_resx_TR_Posting);
                }
            });

            cc.ajax.formSubmit(
                id,
                {
                    target: id,
                    dataType: 'json',
                    url: url
                },
                function(data, statusText) {

                    if (typeof data.redirectresp !== 'undefined' && data.redirect !== '200') {
                        jQuery('.ao-message').addClass('error');
                        jQuery('.ao-message').html(cc_resx_TR_AUTH_AJAX_ERROR);
                        return;
                    }

                    if (typeof data.redirectresp !== 'undefined' && data.redirect !== '') {
                        location.href = data.redirectresp;
                        return;
                    }
                    if (typeof data.success !== 'undefined' && data.success === false) {
                        jQuery('.ao-message').addClass('error');
                    } else {
                        jQuery('.ao-message').removeClass('error');
                    }
                    if (typeof data.message !== 'undefined' && data.message !== '') {
                        jQuery('.ao-message').html(data.message);
                    }

                    if (typeof data.comment !== 'undefined') {
                        jQuery('.all-comments').prepend(cc.comments.buildHtml(data.comment));
                        jQuery('#' + data.comment.shortUidKey).show();
                        jQuery('#' + data.comment.commentControl).attr('value', '');

                    }

                    if (typeof data.reload !== 'undefined' && data.reload === true) {
                        location.reload(true);
                        return;
                    }

                },
                function() {
                    cc.comments.commentFormSubmitInProc = false;

                    if (cc.comments.commentFormButtonText !== '') {
                        jQuery('.cc-form-post', jQuery(id)).each(function() {
                            jQuery(this).html(cc.comments.commentFormButtonText);
                        });
                    }
                });

            return false;
        }
    };



} ();

