// 新規アドレスを招待できる数はきまっているみたいなので
// これら値を設定して、jsで制御する
var append_permission = false;
var target_member = {};
var invite_permission = {};
//var new_member = new Array();

var done_table_fix = false;

// 1回に送信可能なユーザ数
var SEND_MEMBER_LIMIT = 10;

function initInviteMember(_new_add_limit, _already_num) {
    initInviteSend(_new_add_limit, _already_num, true);
}
function initSendMember() {
    initInviteSend(0, 0, false);
}

function initInviteSend(_new_add_limit, _already_num, _append_permission) {

    target_member = {};
    invite_permission = {};

    new_add_limit = _new_add_limit;
    already_num = _already_num;
    append_permission = _append_permission;

    $('#add_member_list').tablefix({width: 617, height: 130, fixRows: 1, fixCols: 0});

    // 新しいアドレス追加
    $('a.add_member').click(function(e) {
        validation.laterCall('#new_member_email');
        if(isFormValid(['#new_member_email'])) {

            var targetLimitOver = false;
            $('#add_member_list tr.target').each(function(i, elm) {
                if ($(this).find('td.email').text() == $('#new_member_email').val()) {
                    $('#new_member_email').val('');
                    return false;
                }
                targetLimitOver = i == SEND_MEMBER_LIMIT - 1;
            });

            var email = $('#new_member_email').val();
            if (email.length == 0) {
                return;
            }

            // チェック上限値
            if (targetLimitOver) {
                alert('メンバーは上限' + SEND_MEMBER_LIMIT + '件を超えたので追加できませんでした。');
                return;
            }

            if (new_add_limit > 0) {
                // 既に招待中か招待確認待ちであるかを判断
                var postdata = {'email': email, 'limit': new_add_limit};
                postdata['target_member'] = dictKey2array(target_member);
                var res = $.ajax({type: "POST", async: false, url: '/invite_folder_manage/isAddableMember/', data: postdata}).responseText;
                var json = $.parseJSON(res);
                if (!json['ret']) {
                    alert('追加メンバー数がご契約コースの上限に達したため追加できません');
                    return;
                }
            }

            $('#new_member_email').val('');
            // 新しいメンバーとニックネームを入れる（新メンバーはニックネーム無いので空）
            target_member[email] = '';
            // 今回のメンバー一覧に表示する
            addTargetMember('', email);
        }
    });
    // アドレス帳から選択
    $('a.ref_address_list').click(function(e) {

        disableFooterAction();

        // exvalidationエラーは消す
        removeFormWidget();

        // 選択ボタンは最初は隠す
        $('a.choice_email').hide();

        var tbody = $('#ref_address_table tbody.email');
        tbody.find('tr').remove();
        tbody.append($('<tr class="even"><td colspan="2">アドレス帳を取得しています...</td></tr>'));
        $('#invite_send_primary').hide();
        $('#ref_address_primary').show();

        $.post('/invite_folder_manage/getAddressList/', {}, function(res) {
            var json = $.parseJSON(res);
            tbody.find('tr:first').remove();
            if ('success' != json['result']) {  
                tbody.append($('<tr class="even"><td colspan="2">アドレス帳の取得に失敗しました。</td></tr>'));
            } else {
                // アドレス帳をリストにして表示する
                var address_list = json['addressList'];
                for (var i in address_list) {
                    var tr = $('<tr>');
                    tr.addClass(i % 2 == 0 ? 'even' : 'odd');
                    var address = address_list[i];
                    if (address['mail'] in target_member) {
                        continue;
                    }
                    var val = address['nickname'] + ',' + address['mail'];
                    var td_checkbox = $('<td>').addClass('checkbox').append($('<input>').attr('type', 'checkbox').val(val));
                    var nickname = address['nickname'];
                    var email  = address['mail'];
                    var member_text = email || '　';
                    if (nickname.length > 0) {
                        member_text = nickname + '<' + email + '>';
                    }
                    var td_member = $('<td>').addClass('member').text(member_text);
                    tr.append(td_checkbox).append(td_member).appendTo(tbody);
                }
                if (tbody.find('tr').length == 0) {
                    tbody.append($('<tr class="even"><td colspan="2">新たに選択可能なメンバーが見つかりませんでした。</td></tr>'));
                } else {
                    $('a.choice_email').show();
                    if (!done_table_fix) {
                        $('#ref_address_table').tablefix({width: 617, height: 368, fixRows: 1, fixCols: 0});
                        done_table_fix = true;
                    }
                }
            }
        });

    });
    // アドレス帳から決定
    $('a.choice_email').click(function(e) {
        if (new_add_limit > 0) {
            checkAndAddNewShareMember();
        } else {
            decideChoiceMember();
        }
    });
}

function decideChoiceMember() {
    // 現時点の今回処理するメンバー数
    var currentTargetMemberCount = $('#add_member_list tr.target').length;
    $('#ref_address_table tbody.email').find('input:checked').each(function(i, elm) {
        var addedMemberCount = currentTargetMemberCount + i;
        if (addedMemberCount >= SEND_MEMBER_LIMIT) {
            if (addedMemberCount == SEND_MEMBER_LIMIT) {
                alert('メンバーは上限' + SEND_MEMBER_LIMIT + '件までです。超過した分は追加できませんでした。');
            }
        } else {
            var nickname_email = $(this).val().split(',');
            target_member[nickname_email[1]] = nickname_email[0];
            if (i == 0) {
                // １つ目の選択でよばれるので、色々やる
                $('#invite_send_primary').show();
                $('#ref_address_primary').hide();
                if ($('.formError').find('.errMsg').length > 0) {
                    $(".formError").css('visibility', 'visible');
                }
                enableFooterAction();
            }
            addTargetMember(nickname_email[0], nickname_email[1]);
        }
    });
}

function dictKey2array(dict) {
    var ret = [];
    for (var k in dict) {
        ret.push(k);
    }
    return ret;
}

function checkAndAddNewShareMember() {
    var select_member_emails = [];
    $('#ref_address_table tbody.email').find('input:checked').each(function(i, elm) {
        var nickname_email = $(this).val().split(',');
        select_member_emails.push(nickname_email[1]);
    });
    if (select_member_emails.length == 0) return;
    var postdata = {};
    postdata['select_member_emails'] = select_member_emails;
    postdata['limit'] = new_add_limit;
    postdata['target_member'] = dictKey2array(target_member);
    $.post('/invite_folder_manage/isAddableMembers/', postdata, function(res) {
        var json = $.parseJSON(res);
        if ('success' != json['result']) {
        } else {
            if (!json['ret']) {
                alert('追加メンバー数がご契約コースの上限に達したため追加できません');
            } else {
                decideChoiceMember();
            }
        }
    });
}

var SHARE_PERMISSION_ALL = 2;
var SHARE_PERMISSION_VIEW = 1;

var add_member_row_num = 0;
// 今回追加するメンバーに加える
function addTargetMember(nickname, email) {
    var rowStyleClass = add_member_row_num % 2 == 0 ? 'even' : 'odd';
    var tr = $('<tr>').addClass('target');
    var add_member_text = email;
    if (nickname.length > 0) {
        add_member_ext = nickname + '<' + email + '>';
    }
    $('<td>').addClass('email').text(add_member_text).appendTo(tr);
    if (append_permission) {
        $('<td>').addClass('permission').append(
            $('<select>').addClass('add_invite_permission_' + email).append(
                $('<option>').val(SHARE_PERMISSION_ALL).text('編集閲覧').attr('selected', 'selected')
            ).append(
                $('<option>').val(SHARE_PERMISSION_VIEW).text('閲覧のみ')
            ).change(function(e) {
                invite_permission[email] = $(this).val();
            })
        ).appendTo(tr);
    }
    $('<td>').addClass('delete').append(
        $('<a>').attr('href', '#' + email).click(function(e) {
            removeMemberFromAdded($(this));
        }).append(
            $('<img>').attr('src', '/img/delete_btn.png').addClass('btn lbalphafilter lbbtn')
        )
    ).appendTo(tr);
    tr.addClass(rowStyleClass);

    var tbody = $('#add_member_list tbody');
    tbody.find('tr.noadd').remove();
    tbody.append(tr);
    invite_permission[email] = SHARE_PERMISSION_ALL;

    lbalphafilter();

    imageReplace();
}


function removeMemberFromAdded(self) {
    // 除外する場合は、リストから外す
    var email = self.attr('href');
    email = email.slice(1, email.length);
    delete target_member[email];
    if (email in invite_permission) {
        delete invite_permission[email];
    }

    add_member_row_num -= 1;
    var tr = self.parent().parent();
    var tbody = tr.parent();
    tr.remove();

    if (tbody.find('tr').length == 0) {
        tbody.append($('<tr class="even noadd"><td colspan="3">まだ追加されていません。</td></tr>'));
    }
    return false;
}

