var dlg = null;

function loadEscalationRule() {
    toggleSubmitButtons('escalationrules');

    if (!$.trim($('#escalationrules').html())) {
        $('#escalationrules').load(base + 'serviceescalationrule.ivp/list/' + $('#id').val(), { timestamp: new Date().toString() }, function () {
            setTab('escalationrules');
            initServiceTable('#escalationruletable', '#escalationruleid');
            $('body').on('click', '.js-escalationRileShow', function () {
                showEscalationRule($(this).attr('escalationruleid'));
                return false;
            });
        });
    }
    else setTab('escalationrules');
    return false;
}

function toggleBlock(element) {
    var groupName = $(element).attr('groupName');
    var z = '#aescalationrule div#' + groupName;
    return toggle($(element), z);
}

function showEscalationRule(id) {
    var url = base + 'ServiceEscalationRule.ivp/editableform/' + id;
    // showRulePanelEscalationRule(url, $(link), { nolayout: 'true', date: new Date().toString() });
    $.ajax({
        url: url,
        type: "post",
        data: { nolayout: true },
        success: function (data, textStatus, jqXHR) {
            var dialog = $('<div id="aescalationrule"></div>').dialog({
                autoOpen: false,
                open: function () {
                    $('body').on('click', '.js-closeDialog', function () {
                        $('#aescalationrule').dialog('close');
                    });
                    $('body').on('click keyup', '#EscalationType', function () {
                        ChangeEscalationType($(this));
                    });
                },
                width: 700,
                maxWidth: screen.width - 25,
                //minHeight: 0,
                modal: true,
                resizable: false,
                close: function () {
                    $(this).dialog("destroy");
                    $(this).remove();
                }
            });
            dialog.append(data);
            dialog.dialog('open');
            dialog.dialog("option", "title", $('#escalationDialogTitle').val());

        }
    });
    return false;
}


function ChangeEscalationType(link) {

    // что то выбрали
    var shoRecipient = true;
    switch ($(link).val()) {
        case '1': // на
            $('.onefield').addClass('hidden');
            $('.threefield').removeClass('hidden');
            $('.escalationaction').removeClass('hidden');
            break;
        case '2': // в (1 поле)								
            $('.onefield').removeClass('hidden');
            $('.threefield').addClass('hidden');
            $('.escalationaction').removeClass('hidden');
            break;
        case '3': // уведомления, на
            $('.onefield').addClass('hidden');
            $('.threefield').removeClass('hidden');
            $('.dropexecutor').addClass('hidden');
            $('#tempaltes').removeClass('hidden');
            $('#esparticipants').addClass('hidden');
            $('#eswho').removeClass('hidden');
            $('.escalationaction').addClass('hidden');
            break;
        case '4': // уведомления, в
            $('.onefield').removeClass('hidden');
            $('.threefield').addClass('hidden');
            $('.dropexecutor').addClass('hidden');
            $('#tempaltes').removeClass('hidden');
            $('#esparticipants').addClass('hidden');
            $('#eswho').removeClass('hidden');
            $('.escalationaction').addClass('hidden');
            break;
        default:
            shoRecipient = false;
            break;
    }
    if (shoRecipient) {
        $('#aescalationrule').dialog("option", "position", { my: "center", at: "cdenter", of: window });
        $('#recepient').removeClass('hidden');
    }
}


function ChangeAction(link) {

    switch ($(link).val()) {
        case '1': // переназначение исполнителей
            $('.dropexecutor').removeClass('hidden');
            $('#tempaltes').addClass('hidden');
            $('#esparticipants').removeClass('hidden');
            $('#eswho').addClass('hidden');
            $('#roles').addClass('hidden');
            $('#roleontask').addClass('hidden');
            //$('#FunctionalRoles').removeClass('hidden');
            break;
        case '2': // только уведомления
            $('.dropexecutor').addClass('hidden');
            $('#tempaltes').removeClass('hidden');
            $('#esparticipants').addClass('hidden');
            $('#eswho').removeClass('hidden');
            $('#roles').removeClass('hidden');
            $('#roleontask').removeClass('hidden');
            //$('#FunctionalRoles').removeClass('hidden');
            break;
        default:
            break;
    }
}

// удаляем правило с сервиса
function deleteEscalationRules() {
    var ids = new Array();
    $('#escalationrules input[name=escalationruleid]:checked').each(function (i, el) { ids.push(el.value); });
    if (ids.length == 0) { alert(ServiceResources.NoEscalationRuleSelected); return false; }
    if (!confirm(ServiceResources.SureDeleteEscalationRules)) return false;
    $('#escalationrules').load(base + 'ServiceEscalationRule.ivp/deleteescalationrules', { serviceid: $('#id').val(), ids: ids }, function () { initServiceTable('#escalationruletable', '#escalationruleid'); });
    return false;
}


function saveEscalationRule() {
    if (!($('#EscalationType').val() >= 1)) {
        alert(ServiceResources.EmptyEscalationRuleFields);
        return false;
    }
    if (($('#EscalationType').val() == 1 || $('#EscalationType').val() == 2) && !($('#EscalationRuleAction').val() >= 1)) {
        alert(ServiceResources.EmptyEscalationRuleFields);
        return false;
    }
    if ($('#EscalationRuleName').val().length == 0 || !($('#EscalationRuleEvent').val() >= 1)) {
        alert(ServiceResources.EmptyEscalationRuleFields);
        return false;
    }

    if ($('.threefield').is(':visible')) {
        if ((!$('#OverdueDays').val() || $('#OverdueDays').val() == 0)
            && (!$('#OverdueHours').val() || $('#OverdueHours').val() == 0)
            && (!$('#OverdueMinutes').val() || $('#OverdueMinutes').val() == 0)) {
            alert(ServiceResources.FillOneTime);
            return false;
        }

        var d = parseInt($('#OverdueDays').val(), 10);
        var h = parseInt($('#OverdueHours').val(), 10);
        var m = parseInt($('#OverdueMinutes').val(), 10);

        if ((!escalationTimeInRange(d) && $('#OverdueDays').val()) || (!escalationTimeInRange(h) && $('#OverdueHours').val()) || (!escalationTimeInRange(m) && $('#OverdueMinutes').val())) {
            alert(ServiceResources.WrongTimeField);
            return false;
        }
    }

    if ($('.onefield').is(':visible')) {
        var value = parseFloat($('#OverdueTime').val());
        if (!escalationTimeInRange(value)) {
            alert(ServiceResources.WrongOneTimeField);
            return false;
        }
    }

    if ($('#tempaltes').is(':visible')) {
        if (!$('#emailtemplateid option[value!=""]:selected').length && !$('#smstemplateid option[value!=""]:selected').length) {
            alert(ServiceResources.NoTemplate);
            return false;
        }
    }

    if (!$('#Users div.warning').hasClass('hidden') && !$('#Roles div.warning').hasClass('hidden') && !$('#RoleOnTask div.warning').hasClass('hidden') && $('#FunctionalRoles input:checked').size() <= 0) {
        
        alert(ServiceResources.SelectUser);
        return false;
    }

    /*TODO: это зачем???*/
    var param = new Array();

    var userUxecutors = new Array();
    var roleExecutors = new Array();
    $('.memberUserExecutor:checked').each(function (i, id) { userUxecutors.push($(this).val()); });
    $('.memberRoleExecutor:checked').each(function (i, id) { roleExecutors.push($(this).val()); });
    /**/


    var roleontaskExecutors = "";
    $('#RoleOnTask input:checked').each(function (i, id) { roleontaskExecutors += $(this).val() + ","; });

    var functionalRoleIds = "";
    $('#FunctionalRoles input:checked').each(function (i, id) { functionalRoleIds += $(this).val() + ","; });

    // условия EscalationRuleEvent
    // тип EscalationType
    // дни OverdueDays
    // часы OverdueHours
    // минуты OverdueMinutes
    // во сколько раз просрочено OverdueTime		
    // действие EscalationRuleAction
    // сбрасывать текущего исполнителя EscalationDropExecutor
    // emailtemplateid шаблон почты
    // smstemplateid шаблон смс
    // ну и пользователи и роли.

    $('#escalationrules').load(
        base + 'ServiceEscalationRule.ivp/saveescalationrulename',
        {
            priorityid:$('#EscalationPriorityId').val(),
            serviceid: $('#id').val(),
            escalationruleid: $('#escalationruleid').val(),
            escalationrulename: $('#EscalationRuleName').val(),
            escalationruleeventid: $('#EscalationRuleEvent').val(),
            escalationtypeid: $('#EscalationType').val(),
            escalationuids: $('#escalationuids').val(),
            escalationrids: $('#escalationrids').val(),
            escalationtrids: roleontaskExecutors,
            escalationfrids: functionalRoleIds,
            emailtemplateid: $('#emailtemplateid').val(),
            smstemplateid: $('#smstemplateid').val(),
            escalationdays: !$('.threefield').hasClass('hidden') ? $('#OverdueDays').val() : null,
            escalationhours: !$('.threefield').hasClass('hidden') ? $('#OverdueHours').val() : null,
            escalationminutes: !$('.threefield').hasClass('hidden')? $('#OverdueMinutes').val() : null,
            escalationtime: !$('.onefield').hasClass('hidden') ? $('#OverdueTime').val() : null,
            escalationdropexecutor: $('#EscalationDropExecutor').is(':checked') ? 'true' : 'false',
            escalationactionid: $('#EscalationRuleAction').val(),
            frombegining: $('#FromBegining').is(':checked') ? 'true' : 'false'
        },
        function () { $('#aescalationrule').hide(); initServiceTable('#escalationruletable', '#escalationruleid'); });
    $('#aescalationrule').dialog('close');
    return false;
}


function closeEscalationDialog() {
    $('#aescalationrule').dialog('close');
}

var ServiceEscalation = {
    chooseEscalationUser: function chooseEscalationUser(ruleId) {
        var executors = ($('#EscalationRuleAction').val() == '1') ? 'executors' : 'all';
        var url = 'user.ivp/select?cbmode=ServiceEscalation&tb_mode=' + executors + '&tb_serviceid=' + $('#id').val() + '&tb_kbfolderid=' + ruleId;
        dlg = openDialog(url, 'selectusers', { width: 980, height: 650 });
        dlg.callback = ServiceEscalation.usersCallback;

        return false;
    },
    usersCallback: function usersCallback(result) {
        var uids = result["selectedIds"];
        addSelectedUsers(uids);
    },

    chooseEscalationRole: function chooseEscalationRole(ruleId) {
        var url = 'role.ivp/select?cbmode=ServiceEscalation&tb_mode=servicerole&tb_serviceid=' + $('#id').val() + '&tb_kbfolderid=' + ruleId;
        dlg = openDialog(url, 'selectroles', { width: 480, height: 650 });
        dlg.callback = ServiceEscalation.rolesCallback;
        return false;
    },
    rolesCallback: function rolesCallback(result) {
        var ids = result["selectedIds"];
        addSelectedRoles(ids);
    }
}

function chooseEscalationRoleOnTask(roleId) {

    var holder = $("#aescalationrule div#RoleOnTask");
    holder.removeClass("hidden");
    $("#roleontask > a.button.js-groupRecipientToggle").html('&uarr; ' + CommonResources.Hide);
    $("#roleontask > a.button.js-chooseEscalationRecipient").remove();

    holder.find("dl.data").not(".hidden").addClass("hidden");
    holder.find("div.warning").not(".hidden").addClass("hidden");
    holder.find("div.checkboxes").removeClass("hidden");

    return false;
}

function chooseEscalationFunctionalRole(roleId) {

    var holder = $("#aescalationrule div#FunctionalRoles");
    
    holder.removeClass("hidden");
    $("#functionalroles > a.button.js-groupRecipientToggle").html('&uarr; ' + CommonResources.Hide);
    $("#functionalroles > a.button.js-chooseEscalationRecipient").remove();

    holder.find("dl.data").not(".hidden").addClass("hidden");
    holder.find(".warning").not(".hidden").addClass("hidden");
    holder.find(".checkboxes").removeClass("hidden");

    return false;
}

function chooseEscalationRecipient(gName) {
    var ruleId = $('#escalationruleid').val();
    switch ($(gName).attr('groupName')) {
        case 'Users':
            ServiceEscalation.chooseEscalationUser(ruleId);
            break;
        case 'Roles':
            ServiceEscalation.chooseEscalationRole(ruleId);
            break;
        case 'FunctionalRoles':
            chooseEscalationFunctionalRole(ruleId);
            break;
        case 'RoleOnTask':
            chooseEscalationRoleOnTask(ruleId);
            break;
        default:
            return false;
    }
    return false;
}


//////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////

function addSelectedUsers(uids) {
    var ids = $('#escalationuids').val().length != 0 ? $('#escalationuids').val().split(',') : new Array();

    for (var i = 0; i < uids.length; i++) {
        if (!ids.in_array(uids[i])) {
            ids.push(uids[i]);
        }
    }

    $('#escalationuids').val(ids.join(","));

    reloadEscalationUser();
}

function addSelectedRoles(nums) {
    var ids = $('#escalationrids').val().length != 0 ? $('#escalationrids').val().split(',') : new Array();

    for (var i = 0; i < nums.length; i++) {
        if (!ids.in_array(nums[i])) {
            ids.push(nums[i]);
        }
    }

    $('#escalationrids').val(ids.join(","));

    reloadEscalationRole();
}

function addSelectedRolesOnTask(uids, rids, pid) {
    var ids = $('#escalationrids').val().length != 0 ? $('#escalationrids').val().split(',') : new Array();

    nums = rids.split(',');
    for (var i = 0; i < nums.length; i++) {
        if (!ids.in_array(nums[i])) {
            ids.push(nums[i]);
        }
    }

    $('#escalationrids').val(ids.join(","));

    reloadEscalationRole();
}

function reloadEscalationUser() {
    var url = base + 'ServiceEscalationRule.ivp/reloaduser/';

    $.post(url, { uids: $('#escalationuids').val() },
	function (data) {
	    var pole = $('#aescalationrule div#Users dl.data');
	    pole.empty();
	    var uids = $('#escalationuids').val().split(',');
	    if ($('#escalationuids').val().length > 0 && uids.length > 0) {
	        $('#aescalationrule div#Users div.warning').addClass('hidden');
	        $('#aescalationrule div#Users dl.data').removeClass('hidden');

	        for (var i = 0; i < uids.length; i++) {
	            pole.append('<dt class="px250">' +
            '<a class="button" href="#" id="' + uids[i] + '" onclick="deleteEscalationRuleMember(this, ' + $('#escalationruleid').val() + ',\'User\'); return false;">' +
              '<img class="icons16" src="img/trash.gif">' +
            '</a>' +
            getName(data, uids[i]) +
			'</dt>');
	        }

	    }
	    else {
	        $('#aescalationrule div#Users dl.data').addClass('hidden');
	        $('#aescalationrule div#Users div.warning').removeClass('hidden');
	    }

	}, "json");
}

function reloadEscalationRole() {
    var url = base + 'ServiceEscalationRule.ivp/reloadrole/';

    $.post(url, { rids: $('#escalationrids').val() },
	function (data) {
	    var pole = $('#aescalationrule div#Roles dl.data');
	    pole.empty();
	    var uids = $('#escalationrids').val().split(',');
	    if ($('#escalationrids').val().length > 0 && uids.length > 0) {
	        $('#aescalationrule div#Roles div.warning').addClass('hidden');
	        $('#aescalationrule div#Roles dl.data').removeClass('hidden');

	        for (var i = 0; i < uids.length; i++) {
	            pole.append('<dt class="px250">' +
            '<a class="button" href="#" id="' + uids[i] + '" onclick="deleteEscalationRuleMember(this, ' + $('#escalationruleid').val() + ',\'Role\'); return false;">' +
              '<img class="icons16" src="img/trash.gif">' +
            '</a>' +
            getName(data, uids[i]) +
			'</dt>');
	        }
	    }
	    else {
	        $('#aescalationrule div#Roles dl.data').addClass('hidden');
	        $('#aescalationrule div#Roles div.warning').removeClass('hidden');
	    }

	}, "json");
}

function deleteEscalationRuleMember(link, roleId, type) {
    if (type == 'User') {
        var userid = $(link).attr('id');
        var uids = $('#escalationuids').val().split(',');

        // заполняем массив не удаляенными пользователями
        var nuids = new Array();
        for (var i = 0; i < uids.length; i++)
            if (uids[i] != userid)
                nuids.push(uids[i]);

        $('#escalationuids').val(nuids.join(','));
        reloadEscalationUser();
    }

    if (type == 'Role') {
        var roleid = $(link).attr('id');
        var rids = $('#escalationrids').val().split(',');

        // заполняем массив не удаляенными пользователями
        var nrids = new Array();
        for (var i = 0; i < rids.length; i++)
            if (rids[i] != roleid)
                nrids.push(rids[i]);

        $('#escalationrids').val(nrids.join(','));
        reloadEscalationRole();
    }
    if (type == 'UserRoleOnTask') {
        var roleid = $(link).attr('id');
        $(link).closest("dt").remove();
        $("#escalationRoleOnTask_" + roleid).removeAttr("checked");

        if ($("#RoleOnTask .checkboxes input:checked").length == 0) {
            $("#RoleOnTask .warning").removeClass("hidden");
        }
    }
    //if (type == 'EscalationFunctionalRole') {
    //    var roleid = $(link).attr('id');
    //    $(link).closest("dt").remove();
    //    $("#escalationFRole_" + roleid).removeAttr("checked");

    //    if ($("#FunctionalRoles .checkboxes input:checked").length == 0) {
    //        $("#FunctionalRoles .warning").removeClass("hidden");
    //    }
    //}
}

// может быть выбрано только одно поле или насколько просрочено или восколько просрочено,
// соответственно, как только мы вводим что либо в одно поле, второе обнуляется и дисейблится,
// а как только мы из поля котрое активно стираем все, то оба поля становятся активными.
//function escalationTime(link) {
//    var intime = $('#EscalationInTime');
//    var ontime = $('#EscalationOnTime');
//    var current = $(link);
//    switch (current.attr('id')) {
//        case intime.attr('id'): //in
//            if (current.val().length > 0) {
//                ontime.val('').attr('disabled', 'true');
//            } else {
//                ontime.removeAttr('disabled');
//            }
//            break;
//        case ontime.attr('id'): //on
//            if (current.val().length > 0) {
//                intime.val('').attr('disabled', 'true');
//            } else {
//                intime.removeAttr('disabled');
//            }
//            break;
//        default:
//            break;
//    }

//}

function escalationTimeInRange(value) {
    if (value >= 0 && value <= 1000) return true;
    return false;
}


//// только число
//function regexpCheckInTime() {
//    var exp = new RegExp('[0-9]*', 'i');
//    return exp.test($('#EscalationInTime').val());
//}
//// шаблон: число, +- число, +- буква число
//function regexpCheckOnTime() {
//    var exp = new RegExp('(^[0-9]*$)|(^[+-]*[0-9]*[mhdмдч]?$)', 'i');
//    return exp.test($('#EscalationOnTime').val());
//}
