﻿// JScript File

//Используем настройки из файла settings.js
//identificationDomains
//authCookiesName
//currentIdentificationServer
//CurrentIdentificationDomain()

    //Куки текущего домена
    var curAuthCookie;
    
    //Куки из домена аутентификации
    var authDomainCookie;
    
    //признак установки кук в домене аутентификации
    var needSetCookie = false;


    //Выполняем действия инициализации когда вся DOM модель инициализированна
    $(document).ready(function() {
    
        //Получаем текущие куки
        curAuthCookie = $.cookie(authCookiesName);

        //Инициализируем идентификационные данные
        InitIdentificationData();
    });
    
    //Инициализирует идентификационные данные
    function InitIdentificationData()
    {
        //Инкрементируем позицию текущего домена аутентификации
        currentIdentificationServer++;
        
        //Если индекс URL за границами массива серверов аутентификации то
        if(currentIdentificationServer >= identificationDomains.length)
        {
            //Сигнализируем об ощибке и прекращаем выполнение действий
            alert("При обращении к серверу аутентификации, произошла ошибка!");
            return;
        }//if

        //Если IE  то
        if($.browser.msie || $.browser.opera )
        {
            //Обращаемся к серверу аутентификации с URL=CurrentIdentificationDomain() для аутентификации пользователя 
            InitIdentificationDataOnIdentificationServer(CurrentIdentificationDomain());
        }
        else //иначе
        {
            //Выполняем проверку доступности сервера аутентификации
            $.get(CurrentIdentificationDomain() + "/IdentificationServerVersion?GetJsonResult=1", function (data) {
                //Обращаемся к серверу аутентификации с URL=CurrentIdentificationDomain() для аутентификации пользователя 
                InitIdentificationDataOnIdentificationServer(CurrentIdentificationDomain());
            })
            .error(function(){
                //В случае ошибки обращаемся к очередному домену индентификации
                InitIdentificationData();
            });
        }

  
    }//end function InitIdentificationData()

    //Инициализирует идентификационные данные на сервере аутентификации
    function InitIdentificationDataOnIdentificationServer(identificationServerUrl)
    {

        //Обращаемся к домену аутентификации за cookie аутентификации
        var jqxhr = $.getJSON(identificationServerUrl + "/GetAuthCookies?jsoncallback=?",
        {
            cookieName: authCookiesName
        },
        //Функция обратного вызова в случае успешного обращения к веб службе домена аутентификации
        function (data) {
            //data результат выполнения метода
            
            //Если авторизационные cookie актуальны и существуют то
            if (typeof (data) !== 'undefined' && data != null && data.existsAuthCookie == 1)
            {
                //Сохраняем актуальные куки из домена аутентификации
                authDomainCookie = data.authCookie;
                
                //Если куки из домена аутентификации и текущие неравны то
                if( authDomainCookie != curAuthCookie)
                {
                    //Инициализируем текущие куки аутентификации куками из домена аутентификации
                    $.cookie(authCookiesName, authDomainCookie, {expires:365}, false);
                    
                    //Перегружаем страницу
                    document.location.href = document.location.href;
                    return false;
                }//if
                
            }//if
            else //иначе
            {
                if(curAuthCookie != null)
                {
                    //устанавливаем признак необходимости обновления кук в домене аутентификации
                    needSetCookie = true;
                }//if
            }//else
            
        })


        //Прописываем обработчик события успешного вызова и освобождения контекста
        
        .complete(function(inObj)
        { 
            
            //Если IE или opera и запрос выполнен с ошибкой то
            if(($.browser.msie || $.browser.opera) && inObj.statusText != "success")
            {
                //Обращаемся к очередному домену аутентификации
                InitIdentificationData();
                return;
            }
            
            //Если установлен признак установки кук в домене аутентификации то
            if(needSetCookie)
            {
                //Сбрасываем признак необходимости установки кук на домене аутентификации
                needSetCookie=false;
                 
                //Устанавливаем куку в домене аутентификации
                SetAuthCookies(CurrentIdentificationDomain());
            }//if
            
        });
        
    }//end function InitAuthData()

    //Устанавливает куки в домен аутентификации
    function SetAuthCookies(identificationServerUrl)
    {

        
        //Если IE или opera и запрос выполнен с ошибкой то
        if($.browser.safari || $.browser.opera)
        {
            //Для оперы и сафари, устанавливаем куку через ифрейм
	        $('body').append('<iframe id="cookiesHackFrame" name="cookiesHackFrame" src="' + identificationServerUrl + '" style="display:none;"></iframe>');
            $('body').append('<form id="cookiesHackForm" action="' + identificationServerUrl + '/SetAuthCookies"' + ' method="GET" target="cookiesHackFrame" > <input name="cookieName" type="hidden" value="' + authCookiesName + '" /> <input name="cookieValue" type="hidden" value="' + curAuthCookie + '" /> </form>');
	        $('#cookiesHackForm').submit();
        }

        //Обращаемся к домену аутентификации для устанавки авторизационных кук в домен аутентификации
        $.getJSON(identificationServerUrl + "/SetAuthCookies?jsoncallback=?",
        {
            cookieName: authCookiesName,
            cookieValue: curAuthCookie
        },
         //Функция обратного вызова в случае успешного обращения к веб службе домена аутентификации
        function (indata) 
        {
            //indata результат выполнения метода

            //Если куки не актуальны то
            if(!indata.setResult)
            {
                 //Сбрасываем куки аутентификации для текущего домена
                $.cookie(authCookiesName, null);
            }//if
       
         });

    }//End SetAuthCookies()
    
    


   


