﻿
// Посылает постбак с установкой другого языка
function setLanguage(lang) {
    __doPostBack('SetLanguage', lang);
    return false;
}

//функция определения топа и лефта у контрола
function findPos(obj) {
	var curleft = curtop = 0;
    if (obj.offsetParent)
        do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    return [curleft,curtop];
}

//функция вводит ограничение на кол-во вводимых символов в мултилайн-контролах
//Прибинживать на событие obKeyDown
function SetMultilineMaxLength(controlID, maxLength) {
    if ($('#' + controlID).text().length >= maxLength)
        $('#' + controlID)[0].value = $('#' + controlID).text().substring(0, maxLength);
}


var _EnableScrollTopAfterAjaxRequest = false;
var _ScrollElementId = '';

//функция прокручивает страницу до якоря anchorTop
function ScrollToElementNow(elementId) {
    var top = findPos($('#' + elementId)[0])[1];
    $('html,body').animate({ scrollTop: top }, 1000);
}

//вызывать эту функцию, чтобы переместить страницу к нужному контролу после аякс лоадинга страницы
function ScrollToControlAfterAjax(elementId) {
    _EnableScrollTopAfterAjaxRequest = true;
    _ScrollElementId = elementId;
}


function MakeScrollAfterAjaxRequest() {
    if (!_EnableScrollTopAfterAjaxRequest) return;
    var top = findPos($('#' + _ScrollElementId)[0])[1];
    $('html,body').animate({ scrollTop: top }, 750);
    _EnableScrollTopAfterAjaxRequest = false;
    _ScrollElementId = '';
}

// Изменяет при необходимости связанную дату для полей from date и to date
// Параметры: [id текстбокса "дата от"], [id текстбокса "дата до"], 
// [изменилась ли "дата от"], [нужно ли не допускать дату меньше/равно сегодня], [формат даты]
function datesChanged(fromBox, toBox, isFromChanged, needCheckToday, format) {
    var fromDate = null;
    var toDate = null;
    var today = new Date();
    var nextDay = new Date();
    var nextDay2 = new Date();
    nextDay.setDate(today.getDate() + 1);
    nextDay2.setDate(today.getDate() + 2);
    fromBox = $get(fromBox);
    toBox = $get(toBox);
    
    // Пытаемся получить даты
    try {
        fromDate = Date.parseLocale(fromBox.value);
    } catch (ex) { fromDate = null; }
    try {
        toDate = Date.parseLocale(toBox.value);
    } catch (ex) { toDate = null; }

    // Если обе пусты, то выходим
    if (fromDate == null && toDate == null) {
        return;
    }

    // Обе даты нормально пасятся
    if (fromDate && toDate) {
        // Если изменилась дата "от" и интервал не корректен, по поправляем его
        if (isFromChanged && ((fromDate >= toDate) || needCheckToday)) {
            // Если нужна проверка даты на просроченность, то проверяем
            if (needCheckToday && fromDate <= today) {
                // Дата просрочена
                // Ставим даты на день и на два вперед
                fromBox.value = nextDay.localeFormat(format);
                if (toDate < nextDay2) {
                    toBox.value = nextDay2.localeFormat(format);
                }
            }
            else {
                // Дата не просрочена
                // Если дата начала больше равна дате окончания, то увеличим на день дату окончания
                if (fromDate >= toDate) {
                    fromDate.setDate(fromDate.getDate() + 1);
                    // Просто меняем дату "до" на дату "от" + 1
                    toBox.value = fromDate.localeFormat(format);
                }
            }
            return;
        } 
        // Если изменилась дата окончания и интервал не корректен, по поправляем его
        if (!isFromChanged && ((fromDate >= toDate) || needCheckToday)) {
            
            if (needCheckToday && toDate <= nextDay) {
                // Ставим даты на день и на два вперед
                fromBox.value = nextDay.localeFormat(format);
                if (toDate < nextDay2) {
                    toBox.value = nextDay2.localeFormat(format);
                }
            }
            else {
                if (fromDate >= toDate) {
                    toDate.setDate(toDate.getDate() - 1);
                    fromBox.value = toDate.localeFormat(format);
                }
            }
            return;
        }
    }

    if (fromDate != null && toDate == null) {
        fromDate.setDate(fromDate.getDate() + 1);
        toBox.value = fromDate.localeFormat(format);
        return;
    }

    if (fromDate == null && toDate != null) {
        toDate.setDate(toDate.getDate() - 1);
        fromBox.value = toDate.localeFormat(format);
        return;
    }
}

//зарегим событий скроллинга
var exists_inmtp = true;

try {
    $(document);
} catch (ex) { exists_inmtp = false; }

if (exists_inmtp) {
    $(document).ready(
    function() {
        var manager = Sys.WebForms.PageRequestManager.getInstance();
        if (manager) {
            manager.add_endRequest(function() { setTimeout('MakeScrollAfterAjaxRequest();', 600); });
        }
    });
}


//трим
function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g, "");
}
function ltrim(stringToTrim) {
    return stringToTrim.replace(/^\s+/, "");
}
function rtrim(stringToTrim) {
    return stringToTrim.replace(/\s+$/, "");
}


///функция прекращает постбек, если он сцуко есть
function abortAsyncPostBack() {
    var obj = Sys.WebForms.PageRequestManager.getInstance();
    if (obj.get_isInAsyncPostBack())
        obj.abortPostBack();
}