/* Minification failed. Returning unminified contents.
(1401,54-55): run-time error JS1100: Expected ',': =
 */
//Default Keyboard
SetDefaultKeyBoard();
//End Set Default

var autocompletion = {
    GetContextKey: function () {
        if ($('#radAll').is(':checked')) {
            return "All";
        } else if ($('#radName').is(':checked')) {
            return "SongName";
        } else if ($('#radWriter').is(':checked')) {
            return "SongWriter";
        } else if ($('#radLyric').is(':checked')) {
            return "Lyric";
        } else if ($('#radSinger').is(':checked')) {
            return "Singer";
        } else if ($('#radAlbum').is(':checked')) {
            return "AlbumName";
        }

        return "SongName";
    },

    RegisterAutoCompletion: function (path, targetControl, contextKey,
        minCharRequested, eventTarget) {
        var requestUrl = '/api/suggestion/search';
        $('#' + targetControl).autocomplete({
            source: function (request, response) {
                var prefixText = escape(request.term);

                $.ajax({
                    url: requestUrl,
                    data: "{'prefixText': '" + prefixText + "','count': 10, 'contextKey': '" + contextKey + "'}",   // term is the property that contains the entered text
                    //data: data,
                    dataType: 'json',
                    type: 'POST',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        response(data);  // property d contains list of names sent from service
                    },
                    error: function (xhr, callStatus, errorThrown) {

                    }
                });
            },

            select: function (event, ui) {
                var itemValue = ui.item.value;
                $('#' + targetControl).val(itemValue);
                if (eventTarget &&
                    (typeof eventTarget === "string")
                    && (eventTarget.length > 0)) {
                    if (minCharRequested && (itemValue.length < minCharRequested)) {
                        BootstrapDialog.show({
                            message: 'Từ cần tìm quá ngắn.',
                            buttons: [{
                                icon: 'glyphicon glyphicon-ok',
                                cssClass: 'btn-warning',
                                label: 'Ok',
                                action: function (dialogItself) {
                                    dialogItself.close();
                                }
                            }]
                        });

                        return;
                    }

                    javascript: __doPostBack(eventTarget, '');
                }
            },
            minLength: 3
        });
    },

    ValidateSearchData: function (targetControl, minCharRequested, showAlertBox) {
        var query = $('#' + targetControl).val();
        if (query.length < minCharRequested) {
            if (showAlertBox) {
                BootstrapDialog.show({
                    type: BootstrapDialog.TYPE_WARNING,
                    message: '<b>Từ cần tìm quá ngắn.</b>',
                    buttons: [{
                        icon: 'glyphicon glyphicon-ok',
                        cssClass: 'btn-warning',
                        label: 'Ok',
                        action: function (dialogItself) {
                            dialogItself.close();
                        }
                    }]
                });
            }

            return false;
        }

        return true;
    },

    SearchTypeCheckedChange: function (path, groupName,
        txbSearch, minCharRequested, eventTarget) {
        $('input[type="radio"][name="' + groupName + '"]').change(function () {
            if (autocompletion.ValidateSearchData(txbSearch, minCharRequested, false)) {
                javascript: __doPostBack(eventTarget, '');
            } else {
                //reset      
                var contextKey = autocompletion.GetContextKey();
                autocompletion.RegisterAutoCompletion(path, txbSearch, contextKey,
                    minCharRequested, eventTarget);
            }
        });
    }
};

function RegisterSearchBox(path, searchTypeGroup, txbQuery, minCharRequested,
    eventTarget, btnSearchId) {

    var contextKey = autocompletion.GetContextKey();
    autocompletion.RegisterAutoCompletion(path, txbQuery, contextKey,
        minCharRequested, eventTarget);

    autocompletion.SearchTypeCheckedChange(path, searchTypeGroup, txbQuery,
        minCharRequested, eventTarget);

    $('#' + btnSearchId).click(function () {
        if (autocompletion.ValidateSearchData(txbQuery, minCharRequested, true)) {
            javascript: __doPostBack(eventTarget, '');
        }
    });
}

$('.a-clear-text').click(function () {
    $('.txtLyric').val('');
});


function ForumCode() {
    $('a.ForumCode').click(function () {
        var a = $(this);
        var position = a.position();
        var name = a.attr("name");
        var div = $("#Code" + name);
        div.css("display", "block");
        div.css("top", position.top + 20);
    });

    $('input.ForumCodeBox[type=text]').click(function () {
        $(this).select();
    });

    $('span.ForumCodeClose').click(function () {
        $(this).parent(".PopupForumCode").css("display", "none");
    });
}

function SynchSelectCountAndTextbox(droplistId, part2Id, part3Id, callback) {
    $('#' + droplistId).change(function () {
        var count = $('#' + droplistId).val();
        if (count === 1) {
            $('#' + part2Id).hide();
            $('#' + part3Id).hide();
        } else if (count === 2) {
            $('#' + part2Id).show();
            $('#' + part3Id).hide();
        } else if (count === 3) {
            $('#' + part2Id).show();
            $('#' + part3Id).show();
        }

        if (callback && typeof (callback) === 'function') {
            callback();
        }
    });
}


var DialogBox = {
    ShowAlert: function (message) {
        BootstrapDialog.show({
            type: BootstrapDialog.TYPE_WARNING,
            message: '<b>' + message + '</b>',
            buttons: [{
                icon: 'glyphicon glyphicon-ok',
                cssClass: 'btn-warning',
                label: 'Ok',
                action: function (dialogItself) {
                    dialogItself.close();
                }
            }]
        });
    },

    ShowInfo: function (message) {
        BootstrapDialog.show({
            type: BootstrapDialog.TYPE_INFO,
            title: "Info",
            message: '<b>' + message + '</b>',
            buttons: [{
                icon: 'glyphicon glyphicon-ok',
                // cssClass: 'btn-warning',
                label: 'Ok',
                action: function (dialogItself) {
                    dialogItself.close();
                }
            }]
        });
    }
};

function FavoriteSong(songId, cmd) {
    $.ajax({
        url: '/LyricsDBAjax.asmx/FavoriteSong',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: "{'songId': '" + songId + "','command': '" + cmd + "'}",
        type: 'POST',
        success: function (response) {
            if (response.d.RequireAuth) {
                ShowLoginForm();
            } else {
                $('#linkFav').hide();
                $('#linkFavPC').hide();
                DialogBox.ShowInfo(response.d.Message);
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            DialogBox.ShowAlert("Đã có lỗi xảy ra. Bạn vui lòng thử lại.");
        }
    });
}

function FavoriteAlbum(albumId, cmd) {
    $.ajax({
        url: '/LyricsDBAjax.asmx/FavoriteAlbum',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: "{'albumId': '" + albumId + "','command': '" + cmd + "'}",
        type: 'POST',
        success: function (response) {
            if (response.d.RequireAuth) {
                ShowLoginForm();
            } else {
                $('#linkFavoritePC').hide();
                $('#linkFavorite').hide();
                DialogBox.ShowInfo(response.d.Message);
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            DialogBox.ShowAlert("Đã có lỗi xảy ra. Bạn vui lòng thử lại.");
        }
    });
}


function RequestLogin(path) {
    var user = {};
    user.Username = $('#txbUsernameAjax').val();
    user.Password = $("#txbPasswordAjax").val();
    user.Remember = $('#chkRememberAjax').is(':checked');

    $.ajax({
        url: '/LyricsDBAjax.asmx/RequestLogin',
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        data: "{user:" + JSON.stringify(user) + "}",
        success: function (data) {
            if (data.d.Success) {
                $('#divRightMenu').html(data.d.HtmlInner);

                //set pre-onkeypress attribute value
                $('#modalLoginAjax').modal('hide');
                var $hidden = $('#hidPreOnPressKeyAttr');
                $('#form1').attr('onkeypress', $hidden.val());
                $hidden.remove();

                $('#linkLogOut').click(function () {
                    BootstrapDialog.confirm('Bạn có chắc chắn đăng xuất?',
                        function (result) {
                            if (result) {
                                RequestLogout(path);
                            }
                        });
                });
            } else {
                DialogBox.ShowAlert(data.d.Message);
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            DialogBox.ShowAlert("Đã có lỗi xảy ra. Bạn vui lòng thử lại.");
        }
    });
}

function RequestLogout(path) {
    $.ajax({
        url: '/LyricsDBAjax.asmx/RequestLogOut',
        type: 'POST',
        dataType: 'json',
        data: '{}',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            if (data.d.Success) {
                //$('#divRightMenu').html(data.d.HtmlInner);
                window.location = data.d.HtmlInner;

                //$('.a-login-ajax').click(function () {
                //  ShowLoginForm();
                //});

            } else {
                DialogBox.ShowAlert(data.d.Message);
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            DialogBox.ShowAlert("Đã có lỗi xảy ra. Bạn vui lòng thử lại.");
        }
    });
}

function ShowLoginForm() {
    //load content form to popub
    var loginForm = '<form id="form" method="post">'
        + '<table class="table table-condensed table-hover table-noborder-padding" style="margin-bottom:0px !important;">'
        + '<tr><td style="width:120px;" class="hidden-xs text-right">Tên hoặc email:</td>'
        + '<td><input id="txbUsernameAjax" class="form-control" type="text" placeholder="Tên đăng nhập hoặc email" /></td></tr>'
        + '<tr><td class="hidden-xs text-right"> Mật khẩu:</td>'
        + '<td><input id="txbPasswordAjax" type="password" class="form-control txbPasswordLogin" placeholder="Mật khẩu" /></td></tr>'
        + '<tr><td class="hidden-xs"></td><td>'
        ///+ '<div class="checkbox" style="margin-top:0px !important; margin-bottom:0px !important; border:solid 1px Green">'
        + '<input type="checkbox" id="chkRememberAjax" /> <label for="chkRememberAjax" style="font-weight:100 !important;"> Nhớ mật khẩu?</label>'
        //+ '</div></td></tr>'
        + '</td></tr>'
        + '<tr><td class="hidden-xs"></td>'
        + '<td><button id="lbtnLogIn" onclick="RequestLogin(\'/\'); return false;" class="btn btn-warning">'
        + '<i class="fa fa-sign-in"></i>Đăng nhập</button></td></tr>'
        + '<tr><td class="hidden-xs"></td><td>'
        + '<ul class="ul-info-login">'
        + '<li>Quên mật khẩu? <a href="javascript:void(0)" title="Xin lại mật khẩu" onclick="OpenPopupResetPass();">Xin mật khẩu lại.</a></li>'
        + '<li>Chưa phải là thành viên? <a target="_parent" href="/Register.aspx">Đăng ký.</a></li>'
        + '<li>Tài khoản chưa kích hoạt. <a href="#"> Gửi lại mail kích hoạt </a></li></ul></td>'
        + '</tr></table></form>';
    //apend html form login to content popub
    $('#divContentFormLoginAjax').html(loginForm);
    //open popup
    $('#modalLoginAjax').modal('show');


    var onKeyPressAttr = $('#form1').attr('onkeypress');
    var spanTag = '<input type="hidden" id="hidPreOnPressKeyAttr" value="' + onKeyPressAttr + '"/>';
    $('body').append(spanTag);
    $('#form1').attr('onkeypress', "javascript:return WebForm_FireDefaultButton(event, 'lbtnLogIn')");
    $('#modalLoginAjax .pull-right').click(function () {
        var $hidden = $('#hidPreOnPressKeyAttr');
        $('#form1').attr('onkeypress', $hidden.val());
        $hidden.remove();
    });
}


//open popup reset pass
function OpenPopupResetPass() {
    $('#modalLoginAjax').modal('hide');
    $("#modalDynamic").remove();
    //create modal html
    GeneralModal('Xin lại mật khẩu');
    //set value
    $("#modalDynamic iframe").attr({
        'src': '/ForgetPass.aspx',
        'height': 220,
        'width': 250
    });
    //show modal
    $('#modalDynamic').modal('show');
}

//open login popub
$('.a-login-ajax').click(function () {
    ShowLoginForm();
});

$('#linkLogOut').click(function () {
    BootstrapDialog.confirm('Bạn có chắc chắn đăng xuất?', function (result) {
        if (result) {
            RequestLogout("/");
        }
    });
});


function InitializeSortable(prefix, target) {
    $(target).sortable({
        axis: "y",
        cursor: "move",
        update: function (event, ui) {
            var debugStr = '';
            $(target).find("tr").each(function (i, row) {
                debugStr += row.id + ' ';
            });

            $('#' + prefix + 'hidRefList').val(debugStr);
        }
    });

    $(target).disableSelection();
}

function DeleteRow(prefix) {
    //// xoa 1 dong
    $('a.DelSongRef').click(function () {
        var rowCount = $("#" + prefix + "hidTotalSong").val();
        var referenceIdList = $("#" + prefix + "hidRefList").val();
        var removingId = $(this).attr("id").substring(3);
        if (rowCount > 1) {
            referenceIdList = referenceIdList.split(' ');
            if (referenceIdList.length && removingId) {
                for (var i = 0; i < referenceIdList.length; i++) {
                    if (referenceIdList[i] === removingId) {
                        delete referenceIdList[i];
                        break;
                    }
                }
                var newStr = '';
                $.each(referenceIdList, function (i, e) {
                    if (e) {
                        newStr += e + ' ';
                    }
                });
                $("#" + prefix + "hidRefList").val(newStr);
                $("#" + removingId).remove();
                rowCount--;
                $("#" + prefix + "hidTotalSong").val(rowCount);
            }
        } else {
            DialogBox.ShowInfo("Bạn không thể xóa toàn bộ các ca khúc trong album");
        }
    });
}

//modal with content from iframe
function GeneralModal(titleModal) {
    var contentHTML = '<div class="modal fade" id="modalDynamic" tabindex="-1" role="dialog" aria-labelledby="myLabelModal" aria-hidden="true">'
        + '<div class="modal-dialog dialog-add-song">'
        + '<div class="modal-content">'
        + '<div class="modal-header" style="padding-top: 10px !important; padding-bottom: 5px !important;">'
        + '<button type="button" class="btn btn-info btn-xs pull-right" data-dismiss="modal"><i class="fa fa-times"></i>Đóng</button>'
        + '<h4 class="modal-title" id="myLabelModal" style="text-transform:uppercase !important;">' + titleModal + '</h4>'
        + '</div><div class="modal-body">'
        + '<iframe frameborder="0" style="overflow: hidden; width: 100%"></iframe></div>'
        + '</div></div></div>';
    $('body').append(contentHTML);
}



$('.a-open-modal').click(function () {
    //Remove before if exists
    $("#modalDynamic").remove();
    //create modal html
    GeneralModal($(this).attr('title'));
    //set value
    var src = $(this).attr('data-src');
    var height = $(this).attr('data-height') || 300;
    var width = $(this).attr('data-width') || 400;

    //thuy them cho nay de kiem tra co phai la popup them bai hat hay khong, de lam UI phan crop image
    if (src && src.indexOf('AddSongToAlbum.aspx') > 0) {
        $("#modalDynamic .modal-dialog").addClass('modal-lg');
        height = '650px';
    }


    $("#modalDynamic iframe").attr({
        'src': src,
        'height': height,
        'width': width
    });
    //show modal
    $('#modalDynamic').modal('show');
});

//modal with content in div#Id
function GeneralModalPopover(titleModal, IdDivGetContent) {
    var contentHTML = '<div class="modal fade" id="modalDynamic" tabindex="-1" role="dialog" aria-labelledby="myLabelModal" aria-hidden="true">'
        + '<div class="modal-dialog dialog-add-song">'
        + '<div class="modal-content">'
        + '<div class="modal-header" style="padding-top: 10px !important; padding-bottom: 5px !important;">'
        + '<button type="button" class="btn btn-info btn-xs pull-right" data-dismiss="modal"><i class="fa fa-times"></i>Đóng</button>'
        + '<h4 class="modal-title" id="myLabelModal" style="text-transform:uppercase !important;">' + titleModal + '</h4>'
        + '</div><div class="modal-body">'
        + $('#' + IdDivGetContent).html()
        + '</div></div></div></div>';
    $('body').append(contentHTML);
}

$('.a-open-modal-popover').click(function () {
    ////Remove before if exists
    $("#modalDynamic").remove();
    ////create modal html
    GeneralModalPopover($(this).attr('title'), $(this).attr('data-id'));
    ////show modal
    $('#modalDynamic').modal('show');
});



function RequestDownloadMp3(songId, referenceId) {
  $.ajax({
    url: '/LyricsDBAjax.asmx/DownloadMp3',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: "{'songId': '" + songId + "','referenceId': '" + referenceId + "'}",
    type: 'POST',
    success: function (response) {
      if (response.d.RequireAuth) {
        ShowLoginForm();
      } else {
        if (response.d.Message) {
          DialogBox.ShowInfo(response.d.Message);
        } else if (response.d.ReturnUrl) {
          let userAgentString = navigator.userAgent;
          // Detect Chrome
          let chromeAgent = userAgentString.indexOf("Chrome") > -1;
          // Detect Safari
          let safariAgent = userAgentString.indexOf("Safari") > -1;

          // Discard Safari since it also matches Chrome
          if ((chromeAgent) && (safariAgent))
            safariAgent = false;
          if (safariAgent) {
            window.location.href = response.d.ReturnUrl;
          } else {
            window.open(response.d.ReturnUrl, "_blank");
          }
        }
      }
    },
    error: function (jqXHR, textStatus, errorThrown) {
      DialogBox.ShowAlert("Đã có lỗi xảy ra. Bạn vui lòng thử lại.");
    }
  });
}

function RequestDownloadAlbum(albumId) {
    $.ajax({
        url: '/LyricsDBAjax.asmx/DownloadAlbum',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: "{'albumId': '" + albumId + "'}",
        type: 'POST',
        success: function (response) {
            if (response.d.RequireAuth) {
                ShowLoginForm();
            } else {
                if (response.d.Message) {
                    DialogBox.ShowInfo(response.d.Message);
                } else if (response.d.ReturnUrl) {
                    window.location.href = response.d.ReturnUrl;
                }
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            DialogBox.ShowAlert("Đã có lỗi xảy ra. Bạn vui lòng thử lại.");
        }
    });
}



function SetDefaultKeyBoard() {
    Mudim.DISPLAY_ID = ["jmudim-off", "jmudim-vni", "jmudim-telex", "jmudim-viqr", "jmudim-mix", "jmudim-auto"];
    Mudim.SPELLCHECK_ID = "jmudim-checkspell";
    Mudim.ACCENTRULE_ID = "jmudim-accentrule";

    //set type keyboard - off: 0,vni: 1,telex: 2,viqr: 3,mixed: 4,auto: 5
    if (getCookie("optionKeyboar") !== "") {
        Mudim.SetMethod(getCookie("optionKeyboar"));
    }
    else {
        Mudim.SetMethod(0);
    }
}
//Keyboard VNI
$('.bt-open-keyboard').click(function () {
    //general html
    GeneralKeyboard();
    //set default value
    SetDefaultKeyBoard();

    //open popup
    $(".bt-open-keyboard").fancybox();

});

//general html keyboard
function GeneralKeyboard() {
    if ($('#divKeyboard').html()) {
        $('#divKeyboard').html('');
    }
    var htmlKeyboard = "<div id='jmudim_div' style='background-color:#FCF9F5;border:1px gray solid'><div>To change your typing method, please select the keyboard typing choices below</div><form><div style='padding:5px 10px 5px 10px'><input style='margin-left:5px' name='jmudimGrp' id='jmudim-off' onclick='Mudim.SetMethod(0);' type='radio'>Off</input><input style='margin-left:5px'name='jmudimGrp' id='jmudim-vni' onclick='Mudim.SetMethod(1);' type='radio'>VNI</input><input style='margin-left:5px'name='jmudimGrp' id='jmudim-telex' onclick='Mudim.SetMethod(2);' type='radio'>Telex</input><input style='margin-left:5px'name='jmudimGrp' id='jmudim-viqr' onclick='Mudim.SetMethod(3);' type='radio'>VIQR</input><input style='margin-left:5px'name='jmudimGrp' id='jmudim-mix' onclick='Mudim.SetMethod(4);' type='radio'>mix</input><input style='margin-left:5px'name='jmudimGrp' id='jmudim-auto' onclick='Mudim.SetMethod(5);' type='radio'>auto</input></div><div style='padding:5px;'><input style='margin-left:5px'id='mudim-checkspell' onclick='Mudim.ToggleSpeller();' type='checkbox'>Speller</input><span style='margin-left:10px;'/><input id='judim-accentrule' onclick='Mudim.ToggleAccentRule();' type='checkbox'>Accent rule</input></div></form><div style='padding:5px 10px 5px 10px'>	<div style='font-size:10px;text-align:center;font-weight:bold;'>Viet Typing Helping Guide</div><table class='jmudimtbl'>	<tr>	<th>Input Method</th><th>â</th><th>ê</th><th>ô</th><th>ă</th><th>ơ</th><th>ư</th><th>đ</th>    <th>sắc</th><th>huyền</th><th>hỏi</th><th>ngã</th><th>nặng</th><th>xóa dấu</th>  </tr>  <tr><td>Telex</td><td>aa</td><td>ee</td><td>oo</td><td>aw</td> <td>ow</td><td>uw</td> <td>dd</td><td>s</td><td>f</td><td>r</td><td>x</td><td>j</td><td>z</td>  </tr>  <tr><td>VNI</td><td>a6</td><td>e6</td><td>o6</td><td>a8</td><td>o7</td><td>u7</td><td>d9</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>0</td>  </tr>  <tr><td>VIQR</td><td>a^</td><td>e^</td> <td>o^</td><td>a(</td><td>o+</td><td>u+</td><td>dd</td><td>'</td><td>`</td><td>?</td><td>~</td><td>.</td><td>-</td>  </tr></table></div></div>";
    $('#divKeyboard').html(htmlKeyboard);
}

//set cookie
function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires + ";path=/";
}

//get cookie
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) === ' ') c = c.substring(1);
        if (c.indexOf(name) !== -1) return c.substring(name.length, c.length);
    }
    return "";
}

function RequestEditSong(targetUrl) {
    $.ajax({
        url: '/LyricsDBAjax.asmx/EditSong',
        data: '{}',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        type: 'POST',
        success: function (response) {
            if (response.d.RequireAuth) {
                ShowLoginForm();
            } else {
                window.location = targetUrl;
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            DialogBox.ShowAlert("Đã có lỗi xảy ra. Bạn vui lòng thử lại.");
        }
    });

    return false;
}

function GetStateFromElement() {
    var stateValue = '';
    var headers = $('#accordion [data-toggle="collapse"]');
    var first = true;
    headers.each(function (i, header) {
        var $header = $(header);
        var dataTarget = $header.attr('data-target');
        var $target = $(dataTarget);
        var accordionId = $target.attr('id').replace('collapse', '');
        if (!first) {
            stateValue += '-';
        } else {
            first = false;
        }

        if (!$header.hasClass('collapse') && $target.hasClass('collapse in')) {
            stateValue += accordionId + ':' + '1';
        } else {
            stateValue += accordionId + ':' + '0';
        }
    });

    return stateValue;
}

function SaveCollapseState() {
    var value = GetStateFromElement();
    setCookie('lyricAccordionState', value, 60);//60days
}


function RegisterCollapeEvent() {
    //css for right panel active
    $('.panel-lyrics').on('hidden.bs.collapse', function () {
        $(this).find('.panel-heading').removeClass("active-panel");
        SaveCollapseState();
    });
    $('.panel-lyrics').on('shown.bs.collapse', function () {
        $(this).find('.panel-heading').addClass("active-panel");
        SaveCollapseState();
    });
}

function OnlineStatistics() {
    $.ajax({
        url: '/LyricsDBAjax.asmx/OnlineCount',
        contentType: "application/json; charset=utf-8",
        type: 'POST',
        dataType: "json",
        data: '{}',
        success: function (data) {
            $('#userCount').text(data.d);
        }
    });
}


//fix error hover in IOS
$(document).ready(function () {
    $("a[fixed='Ipad']").on('click touchend', function (e) {
        var el = $(this);
        var link = el.attr('href');
        window.location = link;
    });
});

function LoadMoreRecentMp3Upload(pageIndex) {
    var totalPages = parseInt($("#hidTotal").val());
    if (pageIndex <= totalPages) {
        $("#divLoading").show();
        $.ajax({
            url: '/LyricsDBAjax.asmx/RecentMp3Upload',
            contentType: "application/json; charset=utf-8",
            type: 'POST',
            dataType: "json",
            data: "{pageIndex: '" + pageIndex + "'}",
            success: function (response) {
                var data = JSON.parse(response.d);
                if (data.Html) {
                    $("#tblList").append(data.Html);
                }

                var nextPageIndex = pageIndex + 1;
                $("#linkNextPage").attr("pid", nextPageIndex);
                if (nextPageIndex > totalPages) {
                    $("#divLoadMore").hide();
                    $("#btnLoadMore").off("click");
                    $(window).off("scroll");
                }

                $("#divLoading").hide();
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(errorThrown);
            }
        });
    } else {
        $("#divLoadMore").hide();
        $("#btnLoadMore").off("click");
        $(window).off("scroll");
    }
}

/*--------------Helper-------------*/

function getDocumentHeight() {
    var D = document;
    return Math.max(
        D.body.scrollHeight, D.documentElement.scrollHeight,
        D.body.offsetHeight, D.documentElement.offsetHeight,
        D.body.clientHeight, D.documentElement.clientHeight
    );
}

/*----------------End Helper---------------*/

/*-----------Jplayer ------------------*/
function RegisterJplayerVideo(id, name, url) {
  
    $("#jquery_jplayer_" + id).jPlayer({
        ready: function () {
        $(this).jPlayer("setMedia", {
          m4v: 'https://media.tkaraoke.com/kvideo/' + name,                
              poster: url + "/resources/images/poster.jpg"
            });
        },
        swfPath: "../resources/flash/",
        supplied: "m4v",
        preload: "none",
        cssSelectorAncestor: "#jp_container_v" + id,
        size: {
            //width: "640px",
            width: "100%",
            height: "360px",
            cssClass: "jp-video-360p"
        },
        cssSelector: {
            videoPlay: ".jp-video-play",
            play: ".jp-video-play",
            pause: ".jp-video-pause",
            stop: ".jp-video-stop",
            seekBar: ".jp-video-seek-bar",
            playBar: ".jp-video-play-bar",
            mute: ".jp-video-mute",
            unmute: ".jp-video-unmute",
            volumeBar: ".jp-video-volume-bar",
            volumeBarValue: ".jp-video-volume-bar-value",
            volumeMax: ".jp-video-volume-max",
            currentTime: ".jp-video-current-time",
            duration: ".jp-video-duration",
            fullScreen: ".jp-video-full-screen",
            restoreScreen: ".jp-video-restore-screen",
            repeat: ".jp-video-repeat",
            repeatOff: ".jp-video-repeat-off",
            gui: ".jp-video-gui",
            noSolution: ".jp-video-no-solution"
        }
    });

    $("#vreplay" + id).click(function () {
        $("#jquery_jplayer_" + id).jPlayer("play", 0);
    });
}

function RegisterJplayerVideoHD(id, videoId, url) {
    $("#jquery_jplayer_" + id).jPlayer({
        ready: function () {
            $(this).jPlayer("setMedia", {
                m4v: url + videoId + "/mp4.video",
                //webmv: url + videoId + "/webm.video",
                poster: url + "resources/images/poster.jpg"
            });
        },
        swfPath: "/resources/flash/",
        supplied: "webmv, m4v",
        cssSelectorAncestor: "#jp_container_v" + id,
        preload: "none",
        size: {
            width: "912px",
            height: "523px",
            cssClass: "jp-video-523p "
        },
        cssSelector: {
            videoPlay: ".jp-video-play",
            play: ".jp-video-play",
            pause: ".jp-video-pause",
            stop: ".jp-video-stop",
            seekBar: ".jp-video-seek-bar",
            playBar: ".jp-video-play-bar",
            mute: ".jp-video-mute",
            unmute: ".jp-video-unmute",
            volumeBar: ".jp-video-volume-bar",
            volumeBarValue: ".jp-video-volume-bar-value",
            volumeMax: ".jp-video-volume-max",
            currentTime: ".jp-video-current-time",
            duration: ".jp-video-duration",
            fullScreen: ".jp-video-full-screen",
            restoreScreen: ".jp-video-restore-screen",
            repeat: ".jp-video-repeat",
            repeatOff: ".jp-video-repeat-off",
            gui: ".jp-video-gui",
            noSolution: ".jp-video-no-solution"
        }
    });

    $("#vreplay" + id).click(function () {
        $("#jquery_jplayer_" + id).jPlayer("play", 0);
    });
}



function _getVaweformUri(id) {
  const waveformApi = "https://waveform.tkaraoke.com/api/v1/get?id=";
  return waveformApi + id;
}

function RegisterJPlayerWithWaveform(id, referenceId, songId, url) {
  var mp3 = url + songId + "/songsound.aspx?srid=" + referenceId + "&tFlash=true";
  let waveform = _getVaweformUri(referenceId);
  var m_playing = false;
  var cssSelectorAncestorId = "#jp_container_" + id;
  $("#imgwaveform_" + id).attr("src", waveform);
  var myPlayer = $("#mp3jplayer" + id);
  myPlayer.jPlayer({
    ready: function (event) {
      $(this).jPlayer("setMedia", {
        mp3: mp3
      });
    },
    progress: function () {
      var audio = myPlayer.data("jPlayer").htmlElement.audio;
      var percent = 0;
      var width = 100;
      if ((typeof audio.buffered === "object") && (audio.buffered.length > 0)) {
        if (audio.duration > 0) {
          var bufferTime = 0;
          for (var i = 0; i < audio.buffered.length; i++) {
            bufferTime += audio.buffered.end(i) - audio.buffered.start(i);
          }

          percent = 100 * bufferTime / audio.duration;
          width = 100 - percent;
          $('#jp_container_' + id + ' .buffering-bar').css('width', width + '%');
        } // else the Metadata has not been read yet.
        //console.log("percent = " + percent);

      } else { // Fallback if buffered not supported
        // percent = event.jPlayer.status.seekPercent;
        percent = 0; // Cleans up the inital conditions on all browsers, since seekPercent defaults to 100 when object is undefined.
      }
      //self._progress(percent); // Problem here at initial condition. Due to the Opera clause above of buffered.length > 0 above... Removing it means Opera's white buffer ring never shows like with polyfill.
      // Firefox 4 does not always give the final progress event when buffered = 100%
    },
    play: function () { // To avoid multiple jPlayers playing together.
      $(this).jPlayer("pauseOthers");
      $("#totalTime_" + id).css("opacity", "1");
      $("#currentTime_" + id).css("opacity", "1");
      m_playing = true;
      $('#jp_container_' + id + ' .buffering-bar').css('visibility', 'visible');
    },

    swfPath: "../resources/flash/", // Not important for HTML only solution.
    supplied: "mp3",
    solution: "html, flash",
    wmode: "window",
    cssSelectorAncestor: "#jp_container_" + id,
    cssSelector: {
      play: ".jp-play",
      pause: ".jp-pause",
      seekBar: ".jp-seek-bar",
      playBar: ".jp-play-bar"
    },
    preload: "none",
    timeFormat: { padMin: false }
  });

  $('#jp_container_' + id + ' .progress-container').click(function () {
    if (m_playing === false) {
      myPlayer.jPlayer("play");
    }
    return false;
  });
}

var m_supportIOSPlayList = [];
var m_isoCurrentIndex = -1;
var m_id;
var m_playingTime = 0;

function InitPlayerSupportIOS(playerId, enableNextPlayerId, nextButtonId,
    preButtonId) {
    m_iosPlayer = $('#' + playerId);

    m_iosPlayer.bind($.jPlayer.event.ready, function () {
        $(this).jPlayer("play");
    });

    m_iosPlayer.bind($.jPlayer.event.progress, function () {
        var audio = m_iosPlayer.data("jPlayer").htmlElement.audio;
        var percent = 0;
        var width = 100;
        if ((typeof audio.buffered === "object") && (audio.buffered.length > 0)) {
            if (audio.duration > 0) {
                var bufferTime = 0;
                for (var i = 0; i < audio.buffered.length; i++) {
                    bufferTime += audio.buffered.end(i) - audio.buffered.start(i);
                }

                percent = 100 * bufferTime / audio.duration;
                width = 100 - percent;
                $('#jp_container_' + m_id + ' .buffering-bar').css('width', width + '%');
            }
        } else {
            percent = 0;
        }
    });

    m_iosPlayer.bind($.jPlayer.event.play, function () {
        $(this).jPlayer("pauseOthers");
        $("#totalTime_" + m_id).css("opacity", "1");
        $("#currentTime_" + m_id).css("opacity", "1");
        $('#jp_container_' + m_id + ' .buffering-bar').css('visibility', 'visible');
        m_supportIOSPlayList[m_isoCurrentIndex].playing = true;
    });

    m_iosPlayer.bind($.jPlayer.event.timeupdate, function (event) {
        if (event.jPlayer.status.currentTime !== 0 &&
            (m_isoCurrentIndex >= 0) && m_isoCurrentIndex <
            (m_supportIOSPlayList.length) &&
            (m_supportIOSPlayList[m_isoCurrentIndex].playing === true)) {
            m_supportIOSPlayList[m_isoCurrentIndex].playingTime =
                event.jPlayer.status.currentTime;
        }
    });

    m_iosPlayer.bind($.jPlayer.event.ended, function () {

        if (enableNextPlayerId &&
            ($('#' + enableNextPlayerId).is(':checked') === true)) {
            PlayNextSongSupportIOS();
        }

    });

    m_iosPlayer.jPlayer({
        swfPath: "/resources/flash/", // Not important for HTML only solution.
        supplied: "mp3",
        solution: "html, flash",
        wmode: "window",
        //cssSelectorAncestor: "#jp_container_139407",
        cssSelector: {
            play: ".jp-play",
            pause: ".jp-pause",
            seekBar: ".jp-seek-bar",
            playBar: ".jp-play-bar"
        },
        preload: "none",
        timeFormat: { padMin: false }
    });

    if (nextButtonId !== undefined) {
        $('#' + nextButtonId).css('visibility', 'hidden');
        $('#' + nextButtonId).click(function () {
            PlayNextSongSupportIOS();
        });
    }

    if (preButtonId) {
        $('#' + preButtonId).css('visibility', 'hidden');
        $('#' + preButtonId).click(function () {

            var index = m_isoCurrentIndex - 1;
            if (index === -1) {
                index = m_supportIOSPlayList.length - 1;
            } else if (index === -2) {
                index = 0;
            }

            PlaySongSupportIOS(index);
        });
    }

    if (enableNextPlayerId) {
        $('#' + enableNextPlayerId).change(function () {
            if ($('#' + enableNextPlayerId).is(':checked')) {
                $('#' + preButtonId).css('visibility', 'visible');
                $('#' + nextButtonId).css('visibility', 'visible');
            } else {
                $('#' + preButtonId).css('visibility', 'hidden');
                $('#' + nextButtonId).css('visibility', 'hidden');
            }
        });
    }
}

function PlaySongSupportIOS(index) {
    if (index === m_isoCurrentIndex) {
        return;
    }
    var cssSelectorAncestor = m_supportIOSPlayList[index].cssSelectorAncestor;
    m_id = m_supportIOSPlayList[index].id;
    var mp3 = m_supportIOSPlayList[index].mp3;
    m_iosPlayer.jPlayer("option", "cssSelectorAncestor", cssSelectorAncestor);
    m_iosPlayer.jPlayer("setMedia", m_supportIOSPlayList[index]);
    var currentTime = 0;
    if (m_isoCurrentIndex !== -1) {
        m_supportIOSPlayList[m_isoCurrentIndex].playing = false;
        var cssSelectorAncestor1 = m_supportIOSPlayList[m_isoCurrentIndex].cssSelectorAncestor;
        $(cssSelectorAncestor1 + ' .jp-play').show();
        $(cssSelectorAncestor1 + ' .jp-pause').hide();
        currentTime = m_supportIOSPlayList[index].playingTime;
        if (currentTime === undefined) {
            currentTime = 0;
        }
    }
    if (currentTime === 0) {
        m_iosPlayer.jPlayer("play");
    } else {
        m_iosPlayer.jPlayer("play", currentTime);
    }

    m_isoCurrentIndex = index;
}

function PlayNextSongSupportIOS() {
    var index = m_isoCurrentIndex === undefined ? 0 : m_isoCurrentIndex + 1;
    if (index >= m_supportIOSPlayList.length) {
        index = 0;
    }

    PlaySongSupportIOS(index);
}

function AddSongSupportIOS(id, referenceId, songId, url) {
  if (referenceId != '0' && songId != '') {
    var mp3 = url + songId + "/songsound.aspx?srid=" + referenceId + "&tFlash=true";

    var song = {
      "id": id,
      "cssSelectorAncestor": '#jp_container_' + id,
      "mp3": mp3,
      "playingTime": 0,
      "playing": false
    };

    m_supportIOSPlayList.push(song);
    var songIndex = m_supportIOSPlayList.length - 1;

    $(song.cssSelectorAncestor + ' .jp-play').click(function () {
      PlaySongSupportIOS(songIndex);
    });

    $('#jp_container_' + id + ' .progress-container').click(function () {
      if (m_supportIOSPlayList[songIndex].playing === false) {
        PlaySongSupportIOS(songIndex);
      }
      return false;
    });
    $('#jp_container_' + id + ' .jp-play-bar').css('width', '0%');
    $("#imgwaveform_" + id).attr("src", _getVaweformUri(referenceId));
  } else {
    $("#imgwaveform_" + id).attr("src", _getVaweformUri("copywrite"));
  }
}


function RegisterJplayerPlaylist(playlistUrl, enableAutoPlay) {

    var cssSelector = { jPlayer: "#jquery_jplayer_N", cssSelectorAncestor: "#jp_container_N" };
    var playlist = []; // Empty playlist
    var options = {
        playlistOptions: {
            autoPlay: enableAutoPlay,
            loopOnPrevious: true
        },
        shuffled: true,
        loop: true,
        swfPath: "/resources/flash/",
        supplied: "mp3",
        wmode: "window"
    };

    var myPlaylist = new jPlayerPlaylist(cssSelector, playlist, options);

    $.get(playlistUrl, {}, function (xml) {
        $('track', xml).each(function (i) {
            var songName = $(this).find('title').text();
            var songwriter = $(this).find('songwriter').text();
            songwriter = (songwriter === null || songwriter.length === 0) ? "?" : songwriter;
            var singer = $(this).find('singer').text();
            var location = $(this).find('location').text();
            var songItem =
            {
                'title': songwriter + ' - ' + singer + ' - ' + songName,
                'mp3': location + "&tFlash=true"
            };

            myPlaylist.add(songItem);

        }); // each     

        if (enableAutoPlay) {
            setTimeout(function () {
                myPlaylist.play();
            }, 1500);//1.5 second
        }
    });    //end get



    $('#jp_replay').click(function () {
        myPlaylist.play(myPlaylist.current);
    });

    $('#jquery_jplayer_N').bind($.jPlayer.event.play, function (event) {
        var current = myPlaylist.current;
        var object = myPlaylist.playlist[current];
        var title = object.title;

        //scroll to current song
        var container = $('div.jp-playlist');
        var scrollTo = $('li.jp-playlist-current');
        container.animate({
            scrollTop: scrollTo.offset().top - container.offset().top + container.scrollTop()
        });

        if (title) {
            var result = title.split('-');
            if (result && result.length === 3) {
                $('#songTitle').css('display', 'block');
                $('#songTitle').text($.trim(result[2]));
                return;
            }
        }

        $('#songTitle').css('display', 'none');
    });
}

function InitializeSingleMp3Player(referenceId, songId, nextMediaUrl) {

  if (!songId || songId === '') {    
    $("#imgwaveform").attr("src", _getVaweformUri("copywrite"));
    return;
  }
 
  $("#imgwaveform").attr("src", _getVaweformUri(referenceId));
  var mp3 = "/" + songId + "/songsound.aspx?srid=" + referenceId + "&tFlash=true";    
    var cssSelectorAncestorId = "#jp_container";    
    var myPlayer = $("#mp3jPlayer");

    myPlayer.jPlayer({
        ready: function (event) {
            $(this).jPlayer("setMedia", {
                mp3: mp3
            }).jPlayer("play");
        },

        progress: function () {
            var audio = myPlayer.data("jPlayer").htmlElement.audio;
            var percent = 0;
            var width = 100;
            if ((typeof audio.buffered === "object") && (audio.buffered.length > 0)) {
                if (audio.duration > 0) {
                    var bufferTime = 0;
                    for (var i = 0; i < audio.buffered.length; i++) {
                        bufferTime += audio.buffered.end(i) - audio.buffered.start(i);
                    }

                    percent = 100 * bufferTime / audio.duration;
                    width = 100 - percent;
                    $('#jp_container .buffering-bar').css('width', width + '%');
                } // else the Metadata has not been read yet.
                //console.log("percent = " + percent);

            } else { // Fallback if buffered not supported
                // percent = event.jPlayer.status.seekPercent;
                percent = 0; // Cleans up the inital conditions on all browsers, since seekPercent defaults to 100 when object is undefined.
            }
            //self._progress(percent); // Problem here at initial condition. Due to the Opera clause above of buffered.length > 0 above... Removing it means Opera's white buffer ring never shows like with polyfill.
            // Firefox 4 does not always give the final progress event when buffered = 100%
        },

        play: function () { // To avoid multiple jPlayers playing together.
            $(this).jPlayer("pauseOthers");
            $("#totalTime").css("opacity", "1");
            $("#currentTime").css("opacity", "1");
            $('#jp_container .buffering-bar').css('visibility', 'visible');
        },

        swfPath: "/resources/flash/", // Not important for HTML only solution.
        supplied: "mp3",
        solution: "html, flash",
        wmode: "window",
        cssSelectorAncestor: "#jp_container",
        cssSelector: {
            play: ".jp-play",
            pause: ".jp-pause",
            seekBar: ".jp-seek-bar",
            playBar: ".jp-play-bar",
            mute: ".jp-mute",
            unmute: ".jp-unmute",
            volumebar: ".jp-volume-bar",
            volumebarvalue: ".jp-volume-bar-value",
            volumemax: ".jp-volume-max",
            repeat: ".jp-repeat",
            repeatOff: ".jp-repeat-off"
        },
        preload: "none",
        loop: true,
        timeFormat: { padMin: false }
    });
}

/*-----------End Jplayer-----------*/

/*-----tag chip-----*/

function AddSongType(event) {
    var $this = $(this);
    var text = $this.text();
    var id = $this.attr("stid");
    var span = "<span class='span-chip'><span>"
        + text
        + "</span><span class='span-chip-close' stid='" + id
        + "' ref='rev-song-type'>x</span>";
    $("#divSelectedSongType").append(span);
    $this.remove();
    var $selectItems = $("span[ref='rev-song-type']");
    $selectItems.off('click');
    $selectItems.on("click", RemoveSongType);
}

function RemoveSongType(event) {
    var $this = $(this);
    var $parent = $this.parent();
    var text = $parent.children().first().text();
    var id = $this.attr("stid");
    var span = "<span class='span-chip' ref='add-song-type' stid='" + id + "'>" + text + "</span>";
    $("#divSongType").append(span);
    $parent.remove();
    var $songTypeItems = $("span[ref='add-song-type']");
    $songTypeItems.off('click');
    $songTypeItems.on("click", AddSongType);
}


/*-----end tag chip-------*/

/*--------register *------------*/

// Init a timeout variable to be used below
let timeout = null;


function checkNameOrDisplayAvailable() {
    let tbxName = document.getElementById('txbUserName');
    tbxName.addEventListener('keyup', function (e) {
        // Clear the timeout if it has already been set.
        // This will prevent the previous task from executing
        // if it has been less than <MILLISECONDS>
        clearTimeout(timeout);

        // Make a new timeout set to go off in 1000ms (1 second)
        timeout = setTimeout(function () {
            let name = tbxName.value.trim();
            if (name.length >= 3) {
                ajaxCheckAvailable(name, checkNameProcess, false);
            } else {
                $('#lblUsernameMsg').css('display', 'none');
            }
        }, 500);
    });

    let tbxDisplayname = document.getElementById('txbDisplayName');
    tbxDisplayname.addEventListener('keyup', function (e) {
        // Clear the timeout if it has already been set.
        // This will prevent the previous task from executing
        // if it has been less than <MILLISECONDS>
        clearTimeout(timeout);

        // Make a new timeout set to go off in 1000ms (1 second)
        timeout = setTimeout(function () {
            let name = tbxDisplayname.value.trim();
            if (name.length >= 3) {
                ajaxCheckAvailable(name, checkDisplayNameProcess, false);
            } else {
                $('#lblDNameMsg').css('display', 'none');
            }
        }, 500);
    });
}

function checkNameProcess(data) {
    if (data.status === "OK") {
        if (!data.success) {
            let icon = $('i[data-bv-icon-for="ctl00$plhMain$txbUserName"]');
            if (icon) {
                icon.removeClass("glyphicon-ok").addClass("glyphicon-remove");
                let $div = $('#divUsername');
                $div.removeClass("has-succes").addClass("has-error");
                let $lbUsername = $('#lblUsernameMsg');
                let str = "";
                let first = true;
                for (let name of data.items) {
                    if (!first) {
                        str += ", ";
                    } else {
                        first = false;
                    }
                    str += "<strong>" + name + "<\strong>";
                }
                $lbUsername.html("Tên đăng nhập đã được sử dụng. Vui lòng chọn tên khác, hoặc chọn theo mẫu: " + str);
                $lbUsername.css('display', 'block');
            }
        } else {
            $('#lblUsernameMsg').css('display', 'none');
        }
    }
}

function checkDisplayNameProcess(data) {
    if (data.status === "OK") {
        if (!data.success) {
            let icon = $('i[data-bv-icon-for="ctl00$plhMain$txbDisplayName"]');
            if (icon) {
                icon.removeClass("glyphicon-ok").addClass("glyphicon-remove");
                let $div = $('#divDisplayName');
                $div.removeClass("has-succes").addClass("has-error");
                let $lbMsg = $('#lblDNameMsg');
                let str = "";
                let first = true;
                for (let name of data.items) {
                    if (!first) {
                        str += ", ";
                    } else {
                        first = false;
                    }
                    str += "<strong>" + name + "<\strong>";
                }
                $lbMsg.html("Tên hiển thị đã được sử dụng. Vui lòng chọn tên khác, hoặc chọn theo mẫu: " + str);
                $lbMsg.css('display', 'block');
            }
        } else {
            $('#lblDNameMsg').css('display', 'none');
        }
    }
}

function getElementByAttribute(attrName) {
    let element = document.querySelector(attrName);
    return element;
}

function ajaxCheckAvailable(val, callFnc, checkEmail = false) {
    let endpoint = checkEmail ? "/api/suggestion/regemail?email=" : "/api/suggestion/regname?name=";
    endpoint += encodeURI(val);
    $.get(endpoint, {}, function (data) {
        if (data) {
            callFnc(data);
        }
    });
}

/*-----end register -----------*/

/*---upload mp3 ----------*/

function getPrePopulateSingers() {
    let singerStr = $('#hidSingers').val();
    if (singerStr.length > 1) {
        let names = [];
        let rand = Math.floor(Math.random() * 50000);
        let arr = singerStr.split(/;|,/);
        arr.forEach(function (processName) {
            names.push({
                id: rand,
                name: processName
            });

            rand++;
        });

        return names;
    }

    return null;
}

function getNamesFromTokenUIs() {
    let result = '';
    let first = true;
    $('li.token-input-token-facebook').each(function () {
        let $el = $(this).find('p').first();
        let name = $el.text().trim();
        if (name.length >= 2) {
            if (first === false) {
                result += ";"
            } else {
                first = false;
            }

            result += name;
        }
    });

    return result;
}

function validSingerInput() {
    let singerStr = getNamesFromTokenUIs();
    if (singerStr.length < 2) {
        DialogBox.ShowAlert("Bạn chưa nhập ca sĩ thể hiện. Vui lòng kiểm tra lại!");
        return false;
    }

    $('#hidSingers').val(singerStr);

    return true;
}

function registerSingerToken() {
    let singers = getPrePopulateSingers();
    $("#tbxSingers").tokenInput("/api/suggestion/search?count=10&contextKey=Singer",
        {
            theme: "facebook",
            queryParam: "prefixText",
            method: 'POST',
            minChars: 3,
            allowFreeTagging: true,
            //preventDuplicates: true,
            hintText: "Đánh vào tên ca sĩ",
            searchingText: "Đang tìm",
            prePopulate: singers,
            onResult: function (data) {
                let results = [];
                let id = 1;
                for (let s of data) {
                    results.push({
                        id: id,
                        name: s
                    });

                    id++;
                }

                return results;
            }
        }
    );
}

/*---upload mp3 ----------*/;
