﻿var cityWallControl = function() {
    var $mainPanel, $contentPanel, $updatePanel, $updateMsgPanel;
    var $cityWallPanel, $form, $wallMsgTextarea, $cancelButton, $closeButton;
    var _cityID, _userID, _isAdmin, _wallMsg;

    var $deletePanel;

    function showPopup() {
        $form.get(0).reset();
        $form.validate().resetForm();

        $.blockUI({ message: $($mainPanel), css: { width: '450px', top: '70px'} });
    };

    function closePopup(callback) {
        $.unblockUI({
            onUnblock: callback
        });
        return false;
    };

    function saveData() {
        $contentPanel.hide();
        $updatePanel.show();

        $updateMsgPanel.html(_wallMsg.MessagePosting);

        var data = {
            cityID: _cityID,
            wallMsg: $wallMsgTextarea.val()
        };

        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: resolveUrl('~/Services/UserService.asmx/PostCityWall'),
            data: $.toJSON(data),
            dataType: 'json',
            success: function(o) {
                if (o.d) o = o.d;

                if (o) {
                    var s = [];
                    s.push('<tr id="citywall_' + o.CityWallID + '" class="cityWall-row">');
                    s.push('<td class="wallPhoto">');
                    s.push('<a href="' + resolveUrl('~/ProfileView.aspx?userID=') + o.UserID + '">');
                    s.push('<img src="' + resolveUrl('~/Public/Handlers/GetUserSmallImage.ashx?userID=') + o.UserID + '" alt="' + o.Username + '" />');
                    s.push('</a>');
                    s.push('</td>');
                    s.push('<td class="wallText">');
                    s.push('<a href="' + resolveUrl('~/ProfileView.aspx?userID=') + o.UserID + '">' + o.FirstName + '&nbsp;' + o.LastName + '</a>');
                    s.push('&nbsp;:&nbsp;');
                    s.push('<span>' + o.WallMsg + '</span>');
                    s.push('<div style="margin-top: 15px; font-style: italic;">' + o.CreationDate + '</div>');
                    s.push('</td>');
                    s.push('<td class="wallCmd">');
                    s.push('<a href="javascript:cityWallControl.deletePost(' + o.CityWallID + ', ' + _userID + ');void(0);">' + _wallMsg.MessageDeleteLink + '</a>');
                    s.push('</td>');
                    s.push('</tr>');

                    var $row = $(s.join(''));
                    var $table = $cityWallPanel.find('table');

                    if ($table.length == 0) {
                        var $div = $('<div style="border: 1px solid #d9d9d9; margin: 0px; padding: 10px; background-color: #f6f6f6;"></div>');
                        $table = $('<table border="0" cellpadding="3" cellspacing="0" style="width: 100%;"></table>');
                        $cityWallPanel.html($div.html($table));

                        $table.prepend($row);
                    } else {
                        $table.prepend($row);
                    }

                    cityView.setCityWallTableSeparator();

                    $updateMsgPanel.html(_wallMsg.MessagePosted);
                    $closeButton.show();
                } else {
                    $updateMsgPanel.html('Error');
                    $closeButton.show();
                }
            },
            error: function(r, s) { }
        });
    };

    function deletePost(cityWallID, userID) {
        $.blockUI({ message: $($deletePanel), css: { width: '350px', top: '50px'} });

        $deleteConfirmButton.one('click', function(e) {
            var data = { cityWallID: cityWallID };

            $.ajax({
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                url: resolveUrl('~/Services/UserService.asmx/DeleteCityWall'),
                data: $.toJSON(data),
                dataType: 'json',
                success: function(o) {
                    closePopup(function() {
                        var $table = $cityWallPanel.find('table');
                        $table.find('#citywall_' + cityWallID).remove();

                        cityView.setCityWallTableSeparator();
                    });
                }
            });
        });
    };

    function setValidation() {
        $form.validate({
            rules: {
                'control_cityWall_wallMsgTextarea': {
                    'required': true,
                    'maxlength': 700
                }
            },
            messages: {
                'control_cityWall_wallMsgTextarea': {
                    'required': '*',
                    'maxlength': '<br/>' + _wallMsg.MessageMaxLength
                }
            },
            submitHandler: saveData
        });
    };

    return {
        init: function(pnlName, popupBtn, userID, cityID, isAdmin, wallMsg) {
            _wallMsg = wallMsg;

            $cityWallPanel = $('#' + pnlName);
            $mainPanel = $('#control_cityWall_mainPanel');
            $contentPanel = $('#control_cityWall_contentPanel');
            $updatePanel = $('#control_cityWall_updatePanel');
            $updateMsgPanel = $('#control_cityWall_updateMsgPanel');
            $form = $('#control_cityWall_form');
            $wallMsgTextarea = $('#control_cityWall_wallMsgTextarea');
            $cancelButton = $('#control_cityWall_cancelButton');
            $closeButton = $('#control_cityWall_closeButton');

            $deletePanel = $('#control_cityWall_deletePanel');
            $deleteConfirmButton = $deletePanel.find('#control_cityWall_deleteConfirmButton');
            $deleteCancelButton = $deletePanel.find('#control_cityWall_deleteCancelButton');

            setValidation();

            _userID = parseInt(userID);
            _cityID = parseInt(cityID);
            _isAdmin = eval(isAdmin);

            $('#' + popupBtn).bind('click', function(e) {
                e.preventDefault();
                showPopup();
            });

            $closeButton.bind('click', function(e) {
                closePopup(function() {
                    $contentPanel.show();
                    $updatePanel.hide();
                });
            });

            $cancelButton.bind('click', function(e) {
                closePopup();
            });

            $deleteCancelButton.bind('click', function(e) {
                closePopup(function() {
                    $deleteConfirmButton.unbind('click');
                });
            });
        },
        deletePost: deletePost
    };
} ();


