<!--

/* simModal.js */
/*
     Example File From "JavaScript and DHTML Cookbook"
     Published by O'Reilly & Associates
     Copyright 2003 Danny Goodman
*/

// Глобальный флаг для запуска кода, использующегося только на Netscape 4
var Nav4 = ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))

// Объект, отслеживающий модальный диалог, открытый из этого окна
var dialogWin = new Object();

// так как в некоторых браузерах ссылки не могут быть полнстью блокированы,
// убираем сохраняем обработчики событий onclick и onmouseout
// Восстанавливаем их, снимая блокировку с главного окна
var linkClicks;

// Обработчик события, блокирующий формы в Navigator 4
// и гиперссылки в IE, когда активен диалог
function deadend() {
    if (dialogWin.win && !dialogWin.win.closed) {
        dialogWin.win.focus();
        return false;
    }
}

// Блокирование форм и гиперссылок во всех фреймах
function disableForms() {
    linkClicks = new Array();
    for (var i = 0; i < document.forms.length; i++) {
        for (var j = 0; j < document.forms[i].elements.length; j++) {
            document.forms[i].elements[j].disabled = true;
        }
    }
    for (i = 0; i < document.links.length; i++) {
        linkClicks[i] = {click:document.links[i].onclick, up:null};
        linkClicks[i].up = document.links[i].onmouseup;
        document.links[i].onclick = deadend;
        document.links[i].onmouseup = deadend;
        document.links[i].disabled = true;
    }
    window.onfocus = checkModal;
    document.onclick = checkModal;
}

// Восстановление нормального поведения форм и гиперссылок.
function enableForms() {
    for (var i = 0; i < document.forms.length; i++) {
        for (var j = 0; j < document.forms[i].elements.length; j++) {
            document.forms[i].elements[j].disabled = false;
        }
    }
    for (i = 0; i < document.links.length; i++) {
        document.links[i].onclick = linkClicks[i].click;
        document.links[i].onmouseup = linkClicks[i].up;
        document.links[i].disabled = false;
    }
}

// Перехватываем все события в Navigator, коорые могут прийти из элементов
// формы, когда диалог открыт. В случае IE элементы форм блокируются.
function blockEvents() {
    if (Nav4) {
        window.captureEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS);
        window.onclick = deadend;
    } else {
        disableForms();
    }
    window.onfocus = checkModal;
}

// При закрытии диалога восстанавливаем нормальное поведение окна
function unblockEvents() {
    if (Nav4) {
        window.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS);
        window.onclick = null;
        window.onfocus = null;
    } else {
        enableForms();
    }
}


// Создание модального диалогового окна
// Параметры
//    url - URL траницы или набора фреймов, загружаемых в окно.
//    width - ширина диалогового окна в пикселях
//    height - высота диалогового окна в пикселях
//    returnFunc - ссылка на функцию (на этой странице),
//                  обрабатывающую данные, возвращаемые из диалога
//    args -- [необязательный] любые данные, которые нужно передать в диалог
function openSimDialog(url, width, height, returnFunc, args) {
    if (!dialogWin.win || (dialogWin.win && dialogWin.win.closed)) {
        // Начальная установка свойств модального диалога
        dialogWin.url = url;
        dialogWin.width = width;
        dialogWin.height = height;
        dialogWin.returnFunc = returnFunc;
        dialogWin.args = args;
        dialogWin.returnedValue = "";
        // Следим за тем, чтобы имя было уникальным.
        dialogWin.name = (new Date()).getSeconds().toString();
        // Сборка атрибутов окна. Пытаемся расположить диалог по центру.
        if (window.screenX) {              // Netscape 4+
            // Располагаем по центру главного окна
            dialogWin.left = window.screenX +
               ((window.outerWidth - dialogWin.width) / 2);
            dialogWin.top = window.screenY +
               ((window.outerHeight - dialogWin.height) / 2);
            var attr = "screenX=" + dialogWin.left +
               ",screenY=" + dialogWin.top + ",resizable=no,width=" +
               dialogWin.width + ",height=" + dialogWin.height;
        } else if (window.screenLeft) {    // IE 5+/Windows
            // Располпгаем более-менее по центру главного окна IE.
            // Сначала оцениваем размер окна,
            // Принимаем в рассчет режим совместимости IE6+ и CSS
            var CSSCompat = (document.compatMode && document.compatMode != "BackCompat");
            window.outerWidth = (CSSCompat) ? document.body.parentElement.clientWidth : document.body.clientWidth;
            window.outerHeight = (CSSCompat) ? document.body.parentElement.clientHeight : document.body.clientHeight;
            window.outerHeight -= 80;
            dialogWin.left = parseInt(window.screenLeft+
               ((window.outerWidth - dialogWin.width) / 2));
            dialogWin.top = parseInt(window.screenTop +
               ((window.outerHeight - dialogWin.height) / 2));
            var attr = "left=" + dialogWin.left +
               ",top=" + dialogWin.top + ",resizable=no,width=" +
               dialogWin.width + ",height=" + dialogWin.height;
        } else {                           // all the rest
            // Лучшее, что можно сделать - расположить по центру экрана.
            dialogWin.left = (screen.width - dialogWin.width) / 2;
            dialogWin.top = (screen.height - dialogWin.height) / 2;
            var attr = "left=" + dialogWin.left + ",top=" +
               dialogWin.top + ",resizable=no,width=" + dialogWin.width +
               ",height=" + dialogWin.height;
        }

        // Формируем диалог и устанавливаем на него фокус.
        dialogWin.win=window.open(dialogWin.url, dialogWin.name, attr);
        dialogWin.win.focus();
    } else {
        dialogWin.win.focus();
    }
}

// Вызывается обработчиком события КАЖДОГО фрейма,
// возвращая фокус в диалог, если он открыт
function checkModal() {
    setTimeout("finishChecking()", 50);
    return true;
}

function finishChecking() {
    if (dialogWin.win && !dialogWin.win.closed) {
        dialogWin.win.focus();
    }
}



//-->
