$(document).ready(function() {

    initNestedSortable();

    //Выдрано из jquery 1.4, недоставало для работы сортировки
    var contains = document.compareDocumentPosition ? function(a, b) {
        return a.compareDocumentPosition(b) & 16;
    } : function(a, b) {
        return a !== b && (a.contains ? a.contains(b) : true);
    };

    jQuery.contains = contains;
});

function initNestedSortable() {
    $('ol.sortable').nestedSortable({
        disableNesting: 'no-nest',
        forcePlaceholderSize: true,
        handle: '.handle',
        helper: 'clone',
        items: 'li',
        maxLevels: 0,
        opacity: .6,
        placeholder: 'placeholder',
        revert: 250,
        tabSize: 25,
        tolerance: 'pointer',
        toleranceElement: '> div',
        stop: saveServiceOrder
    });

    $('a.servicename').cluetip({
        arrows: true,
        dropShadow: false,
        cluetipClass: 'jtip',
        showTitle: false
    });   
}

function toggleServiceDescription(elem) {
    toggle($(elem), '#servicefulldesc', CommonResources.ReadNext, CommonResources.Minimize);
    return false;
}

function InitModule() {
}

function saveServiceOrder(e, o) { 
    var array = $('ol.sortable').nestedSortable('toArray');
    var serviceId = o.item.attr('serviceid');
    var arrayItem = array.filter(function (item) { return item.item_id == serviceId })[0];

    //убрать expand иконку когда больше нет дочерних
    var myParentId = o.item.attr('myparentid');
    if (myParentId > 0) {
        var $liServiceId = $('li[serviceid="' + myParentId + '"]');
        if ($liServiceId.length > 0 && $liServiceId.find('ol li').length == 0) {
            $liServiceId.find('.sholder > .serviceholder > .expand').first().remove();
        }
    }
    o.item.attr('myparentid', arrayItem.parent_id);
  
    if (arrayItem.parent_id != 'root') {
        var $olParent = o.item.closest('ol');
        //этот li будет выше уровнем чем ol
        var $liParent = $olParent.closest('li');

        //добавить иконку
        var $serviceholder = $liParent.find('.sholder > .serviceholder').first();
        if ($serviceholder.find('a.expand').length == 0) {
            $serviceholder.prepend('<a class="expand" onclick="return expand(' + $liParent.attr('serviceid') + ')"><img src="img/tree/minus.gif" class="expandico"></a>');
        }

        $olParent.attr('parentid', arrayItem.parent_id);      
    }
    $('ol.sortable').nestedSortable('disable');
    $.ajax({
        url: base + 'service.ivp/saveorder',
        type: "POST",
        data: { order: o.item.index(), serviceId: serviceId, parentId: arrayItem.parent_id },
        success: function () {
            $('ol.sortable').nestedSortable('enable');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
            $('ol.sortable').nestedSortable('enable');
        }
    });
}
//function saveServiceOrder() {
//    var orderNew = $('ol.sortable').nestedSortable('serialize');
//    var array = new Array();
//    $('li.expanded').each(function(i, e) { array.push($(e).attr('serviceid')); });

//    $.ajax({
//        url: base + 'service.ivp/saveorder',
//        type: "POST",
//        data: { order: orderNew },
//        success: function() { $('#tableholder').empty().load(base + 'service.ivp/updatetreelist', {expandedIds: array}, function() { initNestedSortable(); }); }
//    });
//}

function expand(id) {
    $('ol[parentid="' + id + '"]').toggle();
    var img = $('li#list_' + id).find('.expandico:first');
    if ($('ol[parentid="' + id + '"]').is(':visible')) {
        img.attr('src', 'img/tree/minus.gif');
        var li = img.closest('li');
        li.addClass('expanded');
    }
    else {
        img.attr('src', 'img/tree/plus.gif');
        var li = img.closest('li');
        li.removeClass('expanded');
    }
    return false;
}

window.afterInitTable = function() { initNestedSortable(); };


//при удалении сервиса проверим, есть ли на нем заявки
function deleteService(id) {
    $.getJSON(base + 'service.ivp/counttaskinservice', { id: id }, function(result) {
        if (!confirm(result.Result)) return false;
        window.location = base + 'service.ivp/delete?id=' + id;
    });
    return false;
}