var manager = function() {
    
    var _html = {
        draft: function(list) {
            var html = ['<table class="list">', '<thead><tr>',
                '<th class="permalink">위젯이름</th>',
                '<th class="title">최근 수정된 소스이름</th>',
                '<th class="status">상태</th>',
                '<th class="datetime">최종수정일</th>',
                '<th class="button">편집</th>',
                '</tr></thead>'];
            list.each(function(item) {
                html.push('<tr><td class="permalink">' + item.permalink + '</td>');
                html.push('<td class="title">' + item.title + '</td>');
                html.push('<td class="status ' + item.status + '">' + _status(item.status) + '</td>');
                html.push('<td class="datetime">' + item.utime + '</td>');
                html.push('<td class="button">' + _link_modify_source(item, true) + ' ' + _link_delete(item) + '</td>');
                html.push('</tr>');
            });
            html.push('</table>');
            
            return html.join('');
        },
        source: function(list, opts) {
            opts = Object.extend({
                title: ['위젯이름', '소스이름', '상태', '바로가기', '최종수정일', '편집'],
                status: false,
                redirect: false
            }, opts || {});
            var status = opts.status ? '' : ' style="display: none;"';
            var redirect = opts.redirect ? '' : ' style="display: none;"';
            
            var html = ['<table class="list">', '<thead><tr>',
                '<th class="permalink">' + opts.title[0] + '</th>',
                '<th class="title">' + opts.title[1] + '</th>',
                '<th class="status"' + status + '>' + opts.title[2] + '</th>',
                '<th class="redirect"' + redirect + '>' + opts.title[3] + '</th>',
                '<th class="datetime">' + opts.title[4] + '</th>',
                '<th class="button">' + opts.title[5] + '</th>',
                '</tr></thead>'];
            list.each(function(item) {
                html.push('<tr><td class="permalink">' + item.permalink + '</td>');
                html.push('<td class="title">' + item.title + '</td>');
                html.push('<td class="status ' + item.status + '"' + status +'>' + _status(item.status) + '</td>');
                html.push('<td class="redirect"' + redirect + '>' + _link_factory(item) + '</td>');
                html.push('<td class="datetime">' + item.utime + '</td>');
                html.push('<td class="button">' + _link_modify_source(item) + ' ' + _link_delete(item) + '</td>');
                html.push('</tr>'); 
            });
            html.push('</table>');
            
            return html.join('');
        }
    };
    
    var _link_factory = function(item) {
        return '<a href="redirect_factory?sid=' + item.sid + '" target="_blank">바로가기</a>';
    };
    
    var _link_modify_source = function(item, draft) {
        var txt = item.status == 'draft' ? '수정' : '소스';
        return '<a href="/widget/editor?sid=' + item.sid + '">' + txt +'</a>';
    };
    
    var _link_delete = function(item) {
        var delButton = "";
        if(item.register == 'FALSE'){
            delButton = '<a href="/manage/async_delete?sid=' + item.sid + '" onclick="manager.deleteDraft(this.href); return false;">삭제</a>';
        }
        return delButton;
    };
    
    var _error = function(msg) {
        if (typeof msg != 'string') {
            try {
                msg = msg.responseText.evalJSON().message;
            } catch (e) {
                msg = msg.responseText;
            }
        }
        alert(msg);
    };
    
    var _status = function(status) {
        switch (status) {
            case 'draft':
                return '저장중';
            case 'request':
                return '심사중';
            case 'approve':
                return '등록완료';
            case 'disapprove':
                return '등록보류';
        }
    };
    
    return {
        load: function()
        {
            this.loadSave(1, 3);
            this.loadRequest(1, 3);
            this.loadDisapprove(1, 3);
            this.loadApprove(1, 3);
        },
        
        // load saved draft list
        loadSave: function(page, listnum)
        {
            page || (page = 1);
            listnum || (listnum = 15);
            new Ajax.Request('/manage/async_list', {
                postBody: $H({page: page, listnum: listnum}).toQueryString(),
                onSuccess: function(res) {
                    var sources = res.responseText.evalJSON();
                    $('list_save').innerHTML = _html.draft(sources);
                }
            });
        },
        
        loadRequest: function(page, listnum)
        {
            page || (page = 1);
            listnum || (listnum = 15);
            new Ajax.Request('/manage/async_list', {
                postBody: $H({page: page, listnum: listnum, status: 'request'}).toQueryString(),
                onSuccess: function(res) {
                    var sources = res.responseText.evalJSON();
                    $('list_request').innerHTML = _html.source(sources);
                }
            });
        },
        
        loadDisapprove: function(page, listnum)
        {
            page || (page = 1);
            listnum || (listnum = 15);
            new Ajax.Request('/manage/async_list', {
                postBody: $H({page: page, listnum: listnum, status: 'disapprove'}).toQueryString(),
                onSuccess: function(res) {
                    var sources = res.responseText.evalJSON();
                    $('list_disapprove').innerHTML = _html.source(sources);
                }
            });
        },

        loadApprove: function(page, listnum)
        {
            page || (page = 1);
            listnum || (listnum = 15);
            new Ajax.Request('/manage/async_list', {
                postBody: $H({page: page, listnum: listnum, status: 'approve'}).toQueryString(),
                onSuccess: function(res) {
                    var sources = res.responseText.evalJSON();
                    $('list_approve').innerHTML = _html.source(sources, {redirect: true});
                }
            });
        },
        
        renderPager: function(target, url, page, status)
        {
            new Ajax.Request('/manage/async_pager', {
                postBody: $H({url: url, page: page, status: status}).toQueryString(),
                onSuccess: function(res) {
                    $(target).innerHTML = res.responseText;
                }
            });
        },
        
        deleteDraft: function(url)
        {
            if (! confirm('※주의: 해당 위젯으로 저장된 소스 또한 모두 삭제되며, \n해당 위젯의 등록요청 또한 자동 취소됩니다.\n' +
            '또한 등록완료된 위젯의 경우 더이상 해당 위젯을 수정할 수 없으니 삭제에 주의해주세요.\n\n해당 위젯을 지우시겠습니까?')) {
                return false;
            }
            
            new Ajax.Request(url, {
                onSuccess: function(res) {
                    manager.load();
                },
                onFailure: function(res) {
                    _error(res);
                }
            });
        }
    };
}();
