var startIndex = 0;
$(document).ready(function() {
  $('#customfield2').timeSelect({ 'starth': 0, 'startm': 15, 'endh': 23, 'endm': 59, 'minutesincrement': 15, 'openonfocus': false }).result(calculateEndTime);
});

$(function () {
    initSheduleTable();
    $(window).bind("resize", function() {
        initSheduleTable();
    });
    $(window).bind("scroll", function() {
    $('#loadingshedule').height($(document).height());
    });
    $('#customfield1').bind("change", function() {
        calculateEndTime();
    });
    $('#customfield2').bind("change", function() {
        calculateEndTime();
    });
    $('#customfield4')//.autocomplete(base + 'user.ivp/findusers/', { minChars: 3 }).result(addRequester);
    .devbridgeAutocomplete({
        serviceUrl: 'user.ivp/FindServiceUsersJson/',
        minChars: 1,
        params: { serviceId: $('#serviceid').val() },
        autoClearInputOnSelect: true,
        onSelect: addRequester
    });

    if ($('#create').size() > 0) {
      calculateEndTime();
      var typeid = $('#typeid').val();
      var time = $('#nowtime').val();
      if ($('#canviewshedule').size() > 0)
        ShowShedule(typeid, time, 1);
    }

    $('#sheduledate').live("change", function() {
        $('div[requireddiv]').remove();
        var date = $(this).val();
        reloadShedule(date);
    });

    $('.schedule').live("mouseout", function() {
        hideTaskDescription();
    });

    //открытие карточки заявки по клику
    $('div.unavailable').live("click", function() {
        if (!confirm(MeetingResources.OpenTicketForm))
            return false;
        else {
            var id = $(this).attr("tid");
            var url = 'task/view/' + id;
            var dialog = openDialog(url, 'taskform', { readonlyform: true, width: 980, height: 650 });
        }
        return false;
    });
    $('input').blur();
});

//callback-функция добавления ФИО при выборе из списка пользователей
function addRequester(suggestion) {
    var name = suggestion.value;
    $('#customfield4').val(name);
    return false;
} 

//открытие карточки заявки по клику на занятое время
function viewtask(typeid,taskid) {
        var url = 'type' + typeid + '.ivp/view/' + taskid;
        window.open(url);
        return false;
    }

//скрыть всплывающее окно с описанием
function hideTaskDescription() {
    $('.taskdescription').hide();
    $('.popup').unbind("click");
}

//Метод загружает расписание в DIV
function ShowShedule(typeid, date, mode) {
    
    //перед открытием формы очистим её, чтоб исключить дублирование параметров
    $('body').append('<div id="loadingshedule" class="loadingdiv" style="height:100%;"><div id="loadingtext" class="loadingtext">' + MeetingResources.Loading + '</div></div>');
    $('#loadingshedule').height($(document).height());
    if ($('#sheduleform').length > 0) {
        $('#sheduleform').remove();
    }
    var url = 'Meetings/GetShedule';
    var serviceId = $('#serviceid').val();
    if (mode == 1) {

        var $sheduleform = $('body').append('<div id="sheduleform" class="popupshedule"></div>').find('#sheduleform');

        $.ajax({
            type: "POST",
            url: url,
            data: {serviceId: serviceId, date: date,nonavigation:false},
            success: function (html) {
                
                $sheduleform.html(html);
                
                $('#sheduleform').show();
                
                $('#sheduleform').css('left', '10%').css('top', 100).css('border-radius', '5px 5px 5px 5px');
                
                initSheduleTable();
                
                initSheduleDrag();
                
                $('#loadingtext').remove();
                
                disableInputs();
            }
        });              
    }
    else {
        $.ajax({
            type: "POST",
            url: url,
            data: { serviceId: serviceId, date: date,nonavigation:true },
            success: function (html) {

                $sheduleform.html(html);

                $('#sheduleform').show();
                
                initSheduleTable();
                
                initSheduleDrag();
                
                disableInputs();
            }
        });
    }
    return false;
}

function closeShedule() {
    $('#loadingshedule').remove();
    $('#sheduleform').remove();
    hideTaskDescription();
    $('div[requireddiv]').remove();
    hideTaskDescription();
    $('body *').enableSelection();
    $('.taskdescription').remove();
    enableInputs();
}

function selectRequester() {
    var serviceid = $('#serviceid').val();
    var url = 'user.ivp/select?tb_mode=serviceuser&selectmode=SINGLE&tb_serviceid=' + serviceid;
    dlg = window.openDialog(url, 'selectpersons', { width: 900, height: 650 });
    dlg.callback = usersCallback;
    return false;
}

function usersCallback(result) {
    var uids = result["selectedIds"];
    addPerson(uids);
}

//метод вызывает диалог выбора пользователя из списка
function addPerson(uids) {
    var userid = uids[0];
    $.getJSON(base + 'user.ivp/GetUserNameById', { userid: userid, date: new Date().toString() }, function(fio) {
    $('#customfield4').val($.trim(fio));
    });
    return false;
}

function previousDay() {
    var date = $('#sheduledate').val();
    addDaysToDate(date, -1);
}

function nextDay() {
    var date = $('#sheduledate').val();
    addDaysToDate(date, 1);
}

//функция добавляет указанное количество дней к текущей дате для расписания
function addDaysToDate(date, count) {
    $('div[requireddiv]').remove();
    
    $.ajax({
        dataType: "json",
        url: 'Meetings/AddDaysToDate',
        type: 'POST',
        data: { date: date, count: count },
        success: function (time) {
            $('#sheduledate').val(time);
            reloadShedule(time);
        }
    });    
}

//метод пересчёта конечного времени
function calculateEndTime() {
    var date = $('#customfield1').val();
    var duration = $('#customfield2').val();
    addMinutesToDate(date, duration);
}

//метод расчитывает конечное время на основе началного и периода бронирования
function addMinutesToDate(date, hhmm) {
    
    $.ajax({
        dataType: "json",
        url: 'Meetings/AddMinutesToDate',
        type :'POST',
        data: { date: date, hhmm: hhmm },
        success: function (endtime) {
            $('#endtime').val(endtime);
            $('.timeselectparent').hide();
        }
    });     
}

function reloadShedule(date) {
    $('div[requireddiv]').remove();
    $('.taskdescription').remove();
    var sid = $('#taskserviceid').val();
    
    $.post('Meetings/GetShedule', { date: date, serviceId: sid, nonavigation: true }, function (html) {
        
        $('#shedule').html(html);
        
        initSheduleTable();
        initSheduleDrag();
    });      
}

//метод инициализации расписания(перерисовывает дивы с занятым временем)
function initSheduleTable() {
    //clearTimeout(st);
    //clearTimeout(ht);
    $('#loadingshedule').height($(document).height());
    if ($('#loadingshedule').size() > 0) {
        $('div#loadingshedule.loadingdiv').height($(window).height());
    }
    if ($('#idsstr').size()>0) {
        $('div[requireddiv]').remove();
        var ids = $('#idsstr').val().split(',');
        ids.forEach(function(id) {
            var task = $('td[taskid="' + id + '"]:first');
            var tasksCount = $('[taskid="' + id + '"]').size();
            showDiv(task, tasksCount, id);
            $('#taskrequired_').remove();
        });
    }
}

function initShedule() {
    $('#loadingtext').remove();
} 

//метод рисует див поверх занятой переговорной в расписании
function showDiv(opener, count, id) {
    var tdkey = '#taskrequired_' + id;
    var offset = opener.offset();
    if (offset != null) {
        var h = opener.height() * count;
        var w = opener.width();
        var description = $('#t' + id).val();
        var taskdescription = $.trim($('#t_d' + id).val());
        $('body').append('<div id="taskrequired_' + id + '" requireddiv="1" style="z-index:10;" class="unavailable" tid=' + id + ' alt="' + taskdescription + '" title="' + taskdescription + '">' + description + '</div>');
        //Зададим стили в зависимости от браузера
        if ($.browser.msie) {
            $(tdkey).css('top', offset.top + 1).css('left', offset.left - 1).css('width', w + 6).css('height', h - 1);
        } else if ($.browser.mozilla) {
            $(tdkey).css('top', offset.top).css('left', offset.left - 1).css('width', w + 5).css('height', h - 1);
        } else {
            $(tdkey).css('top', offset.top + 1).css('left', offset.left).css('width', w + 5).css('height', h - 1);
        }
        if ($('#id').val() == id)
            $(tdkey).css("background-color", "#E3A09B");
    }
}

//Этот метод заполняет данные карточки заявки из расписания
function getDataFromShedule(date, datecount, meeting) {
    var minutes = datecount * 30;
    $.getJSON('Meetings/MinutesToHHmm', { minutes: minutes }, function(duration) {
    enableInputs();
    if ($('#customfield1').val() != date) {
        $('#customfield1').val(date);
        blinkbg($('#customfield1'));
    }
    if ($('#customfield2').val() != duration) {
        $('#customfield2').val(duration);
        blinkbg($('#customfield2'));
    }
    if ($('#customfield3').val() != meeting) {
        $('#customfield3').val(meeting);
        blinkbg($('#customfield3'));
    }
    $('.taskdescription').remove();
    addMinutesToDate(date, $('#customfield2').val());
    closeShedule();
    return false;
    });
}

//подключаем выделение промежутков времени мышью
function initSheduleDrag() {
    $('body *').disableSelection();
    selectTimes();
    $('.available').unbind("mousedown").unbind("mouseover");
    $('.available').bind("mousedown", function () {
        $('.selected').removeClass("selected");
        var meeting = $(this).attr("meeting");
        startIndex = $(this).attr("index");
        $(this).addClass("selected");
        $('.unavailable').bind("mouseover", function () {
            selectFinished();
        });
        $('.available').bind("mouseover", function () {
            console.log('available mouseover');
            if ($(this).attr("meeting") == meeting) {
                console.log('available meeting');
                //заново раскрасим все ячейки между той, с которой началось выделение и текущей
                $('.selected').removeClass("selected");
                console.log('startIndex', startIndex);
                var currentIndex = $(this).attr("index")*1;
                console.log('currentIndex', currentIndex);
                if (startIndex < currentIndex) {
                    console.log('startIndex < currentIndex');
                    for (var i = startIndex; i <= currentIndex; i++)
                        $('.available[index=' + i + '][meeting=' + meeting + ']').addClass("selected");
                } else if (startIndex > currentIndex) {
                    console.log('startIndex > currentIndex');
                    for (var j = startIndex; j >= currentIndex; j--)
                        $('.available[index=' + j + '][meeting=' + meeting + ']').addClass("selected");
                } else {
                    $(this).addClass("selected");

                    console.log('selected');
                }
            }
            else {
                selectFinished();
            }
        });
    }).bind("mouseup", function () {
        selectFinished();
    });

}
 function selectFinished() {
     $('.available').unbind("mouseover");
     $('.unavailable').unbind("mouseover");
     var date = $('.selected:first').attr("value");
     var datescount = $('.selected').size();
     var meeting = $('.selected:first').attr("meeting");
     var meetingName = $('.selected:first').attr("meetingname");
     if (!meetingName)
         return false;
     jConfirm(MeetingResources.BookMeetingRoom + meetingName + MeetingResources.ForSelectedPeriod, MeetingResources.ConfirmAction, function(confirmed) {
     if (!confirmed) {
             $('.selected').removeClass("selected");
             selectTimes();
         }
         else {
             getDataFromShedule(date, datescount, meeting);
         }
     });
     return false;
 }
 
 function selectTimes() {
     var starttime = $('#customfield1').val();
     var meeting = $('#customfield3').val();
     $('td.available[meeting=' + meeting + ']').each(function() {
     if ($(this).attr("value") == starttime) {
            $(this).addClass("selected");
         }
     });
     var duration = (Number($('#customfield2').val().substr(0, 2)) * 60) + Number($('#customfield2').val().substr(3, 2));
     if (duration<30)
         return false;
     var stepscount = Math.round(duration / 30);
     for (var i = 1; i <= stepscount; i++) {
         $('td.available[meeting=' + meeting + ']').each(function() {
             if ($(this).attr("value") == starttime) {
                 $(this).addClass("selected");
             }
         });
         if (starttime.substr(14, 2) == "00")
             starttime = starttime.substr(0, 14) + "30";
         else {
             var hours = Number(starttime.substr(11, 2))+1;
             var hh;
             if (hours < 10)
                 hh = "0" + hours;
             else {
                 hh = hours;
             }
             starttime = starttime.substr(0, 11) + hh + ":00";
         }
     }
     return false;
 }


function disableInputs() {
    $('#customfield1').attr('disabled', 'disabled');
    $('#customfield2').attr('disabled', 'disabled');
    $('#customfield3').attr('disabled', 'disabled');
    //скроем плагин выбора времени
    $('.timeselectparent').hide();
}

function enableInputs() {
    $('#customfield1').removeAttr('disabled');
    $('#customfield2').removeAttr('disabled');
    $('#customfield3').removeAttr('disabled');
}

