﻿//
// Объект: ApplicationSettings  и все остальное связанное с настройками
// 
//
function ApplicationSettings()
{ 
    //***************************************   P R O P E R T I E S   *******************************************************************
    
    //
    // 
    //
    this.ShowLots=false;
    
    //
    //
    //
    this.ConfirmationWindow=false;
    
    //
    //
    //
    this.AmountSign = false;
    
    //
    // 
    //
    this.ShowLocalTime=false;
    
    //
    // Показывать строку-фильтр в таблице
    //
    this.ShowFilterRow=true;
    
    //
    // Частота обновления данных (в мс)
    //
    this.RefreshTime = 1000;
    
    //
    // Количество строк в странице для таблиц в которых используется пейджинг
    //
    this.RowsPerPage=10;
    
    //
    // К настройкам никакого отношения не имеет, но пока будет лежать здесь
    //
    this.TrafficIn=0;
    this.TrafficOut=0;
    
    //*******************************************    M E T H O D S ******************************************************************
       
    //
    // Преобразует в строку (для куков или отправки на сервер)
    //
    this.ToStringFormat = function()
    {
         return  "ShowLots="+this.ShowLots +';ShowLocalTime='+this.ShowLocalTime+';RefreshTime='+this.RefreshTime+';ConfirmationWindow='+this.ConfirmationWindow+';AmountSign='+this.AmountSign;
    }
    
    //
    // Получить парамтеры из строки. Формат сторки: "ShowLots=True;ShowLocalTime=False".
    // Объекты в javascript - хеши, поэтому обращаемся к нужным полям напрямую, через this[] и параметр.
    //
    this.FromStringFormat = function(str)
    {
         var temp = str.split(';');
         var tt=null;
         
         for(var i=0;i<temp.length;i++)
         {
            tt= temp[i].split('=');
            
            if(tt[1]=="false")
                this[tt[0]] = false;
            else if(tt[1]=="true")
                this[tt[0]] = true;
            else
                this[tt[0]]=tt[1];    
         }                
    }
    
    this.InitializeSettingsValue = function()
    {
        showLotsCheckBox.checked = appSettings.ShowLots;
        showLocalTimeCheckBox.checked = appSettings.ShowLocalTime;
        settingsRefreshTimeCombo.value = appSettings.RefreshTime/1000+""; 
        showConfirmationMessages.checked = appSettings.ConfirmationWindow;
        showAmountSignCheckBox.checked = appSettings.AmountSign;
    }
    
    this.CheckCookie = function()
    {
        temp = getCookie("AppSettings");
        if(temp!=null)
            LoadSettingsFromCookie(temp);
    }
    
    this.SaveButtonClick = function()
    {
        appSettings.ShowLots = showLotsCheckBox.checked;
        appSettings.ShowLocalTime = showLocalTimeCheckBox.checked;
        appSettings.RefreshTime = settingsRefreshTimeCombo.value*1000+""; 
        appSettings.ConfirmationWindow =showConfirmationMessages.checked;
        appSettings.AmountSign = showAmountSignCheckBox.checked;
        
        appSettings.SaveCookie();
    }
    
    this.SaveCookie = function()
    {
        var expires=10000;
        setCookie("AppSettings",appSettings.ToStringFormat(),expires);
    }
}




//*********************************  ОКНО НАСТРОЕК  ****************************************************


//
// Создание HttpRequest объекта
//
var settingsHTTP = null;

//
// Здесь будут храниться настройки приложения
//
var appSettings = new ApplicationSettings();

//
// Общая панель настроек
//
var settingsPanel=null;

var showLotsCheckBox=null;
var showFilterRowCheckBox=null;
var showLocalTimeCheckBox=null;
var settingsRefreshTimeCombo=null;
var settingsRowsPerPageCombo=null;

var settingsOkButton=null;
var settingsCancelButton=null;
var showConfirmationMessages = null;

//Status panel
var statusPanelTrafficIn=null;
var statusPanelTrafficOut=null;
var showAmountSign=null;

var statusPanelTrafficInLabel=null;
var statusPanelTrafficOutLabel=null;

var statusPanelRefreshTimeCombo=null;
var statusPanelProcessImage=null;
var stopImage = new Image();
stopImage.src="Images/stop.gif";
var runImage = new Image();
runImage.src="Images/loading2.gif";
//*********************************  G U I  ****************************************************


//
// Прячет панель
//
function HideSettingsWindow()
{
    settingsPanel.style.visibility="Hidden";
    SetVisible(settingsPanel,false);

    SetModalState(false);
}

//
// Клик по кнопке OK
//
function SettingsFormOkButtonClick()
{    
    HideSettingsWindow();
    
    //Применяем настройки к объекту appSettings
    appSettings.ShowLots = showLotsCheckBox.checked;
    appSettings.ShowFilterRow = showFilterRowCheckBox.checked;
    appSettings.ShowLocalTime = showLocalTimeCheckBox.checked;
    appSettings.RowsPerPage = settingsRowsPerPageCombo.value*1;
    appSettings.RefreshTime = settingsRefreshTimeCombo.value*1000;//переводим в мс
    
    //Применили настройки
    ApplyAppSettings(appSettings);
    
}

//
// Клик по кнопке Cancel
//
function SettingsFormCancelButtonClick()
{
    HideSettingsWindow();  
}

//
// Показать окно настроек
//
function ShowSettings()
{
    //Применяем к контролам текущие настройки
    showLotsCheckBox.checked = appSettings.ShowLots;
    showFilterRowCheckBox.checked = appSettings.ShowFilterRow;
    showLocalTimeCheckBox.checked = appSettings.ShowLocalTime;
    settingsRowsPerPageCombo.value = appSettings.RowsPerPage+"";
    settingsRefreshTimeCombo.value = appSettings.RefreshTime/1000+"";
   
   
    //Координаты середины окна
    var middleX = screen.availWidth/2 - 140;
    var middleY = screen.availHeight/2-200;
    
    SetPosition(settingsPanel,middleX,middleY);
      
    settingsPanel.style.visibility="Visible";
    SetVisible(settingsPanel,true);
    
    //Устанавливаем модальный режим
    SetModalState(true);
    
}

//*********************************     S T A T U S    P A N E L          ****************************************************

//
// Применение настроек к рабочей области + отправка на сервер
//
function ApplyAppSettings(appSettings)
{
    //Видимость строки фильтра
    var grid = getQuoteGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getOrdersGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getPositionsGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getEventsGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getOrderBookGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getNewsGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getAccountsGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getUsersGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    grid = getBalanceGrid();
    grid.Rows.getFilterRow().setHidden(!appSettings.ShowFilterRow);
    
    //Передаем данные на сервер (синхронизируем)
    SendSettingsToServer();  
}



//
// Получить настройки из куков
//
function LoadSettingsFromCookie(cookie)
{
    //Извлекаем настройки из строки
    appSettings.FromStringFormat(cookie);
    
    appSettings.InitializeSettingsValue();
    
    //Передаем данные на сервер (синхронизируем)
    SendSettingsToServer();
}

//***************************************************************************

//
// Устанавливаем траффик
//
function AddTrafficIn(bytes)
{
    appSettings.TrafficIn=(appSettings.TrafficIn+bytes)*1;
    if(statusPanelTrafficIn!=null)
    {
        statusPanelTrafficIn.innerHTML = Math.round(appSettings.TrafficIn);
        statusPanelTrafficInLabel.innerHTML = "bytes";
    }
}
function AddTrafficOut(bytes)
{
    appSettings.TrafficOut=(appSettings.TrafficOut+bytes)*1;
    if(statusPanelTrafficOut!=null)
    {
        statusPanelTrafficOut.innerHTML = Math.round(appSettings.TrafficOut);
        statusPanelTrafficOutLabel.innerHTML = "bytes";
    }
}

//
// На панели статуса поменяли частоту обновления
//
function statusPanelRefreshTimeComboChanged()
{
     if(statusPanelRefreshTimeCombo.value=="Stop")
     {
        dataStream.Stop();
        statusPanelProcessImage.src = stopImage.src;
     }
     else
     {
        appSettings.RefreshTime = statusPanelRefreshTimeCombo.value*1000;//переводим в мс
        dataStream.Restart();
        statusPanelProcessImage.src = "";   
     }
}

//
// Клик по картинке процесса
//
function statusPanelProcessImageClick()
{
    if(dataStream.IsEnabled()==true)
    {
        dataStream.Stop();
        statusPanelProcessImage.src = stopImage.src;        
        statusPanelRefreshTimeCombo.value="Stop";
    }
    else
    {
        dataStream.Start();
        statusPanelProcessImage.src = "";  
        
        //
        statusPanelRefreshTimeCombo.value=appSettings.RefreshTime/1000+""; 
    }
}


//*********************************  С И Н Х Р О Н И З А Ц И Я    С     С Е Р В Е Р О М  ****************************************************


//
// Получить настройки с сервера. Если будут настройки в куках они перезапишут настройки
//
function LoadSettingsFromServer()
{
    //Передаем данные на сервер
    settingsHTTP.SendRequest('GetAppSettings', '', LoadSettingsFromServerCallback);
}

//
// Получить настройки с сервера. Колбек.
//
function LoadSettingsFromServerCallback(response)
{
    //Анализируем, то что прислали
    appSettings.FromStringFormat(response);
    //Анализируем куки
    appSettings.CheckCookie();
    //Загружаем данные 
    appSettings.InitializeSettingsValue();
}

//
// Отправить настройки на сервер. Выполняется после изменения на клиенте: показано окно настроек или загружены из куков
//
function SendSettingsToServer()
{
    appSettings.SaveButtonClick();
    var params = "&AppSettingsClient="+appSettings.ToStringFormat()+'&';
    
    // заплатка для мозиллы
    if(isMozilla)
        settingsHTTP = new HttpRequest('ControlStreamHandler.ashx');
    
    settingsHTTP.SendRequest('SetAppSettings', params, SendSettingsToServerCallback);
}

function SendSettingsToServerCallback(response)
{
    if(response == 'ok')
    {
        OnLoadControls();
        //InitializeOESystem();
    }
}

//*********************************                                               ****************************************************

//
// Инициализация контролов
//
function InitSettings()
{
   settingsHTTP = new HttpRequest('ControlStreamHandler.ashx');

   //Ищем все контролы
   //settingsPanel = document.getElementById("settingsPanel");
   showLotsCheckBox = document.getElementById("DisplayAmountInLotsCheckBox");
   //showFilterRowCheckBox = document.getElementById("settingsShowFilterRowCheckBox");
   settingsOkButton = document.getElementById("settingsOkButton");
   settingsCancelButton = document.getElementById("settingsCancelButton");
   showLocalTimeCheckBox = document.getElementById("settingsShowLocalTimeCheckBox");
   settingsRefreshTimeCombo= document.getElementById("statusPanelRefreshTimeCombo");
   settingsRowsPerPageCombo= document.getElementById("settingsRowsPerPageCombo");
   showConfirmationMessages = document.getElementById("ShowConfirmationMessagesCheckBox");
   showAmountSignCheckBox = document.getElementById("ShowAmountSignCheckBox");
   
   //
   //statusPanelTrafficIn = document.getElementById("statusPanelTrafficIn");
   //statusPanelTrafficOut = document.getElementById("statusPanelTrafficOut");
   //statusPanelTrafficInLabel = document.getElementById("statusPanelTrafficInLabel");
   //statusPanelTrafficOutLabel = document.getElementById("statusPanelTrafficOutLabel");
   
   statusPanelRefreshTimeCombo = document.getElementById("statusPanelRefreshTimeCombo");
   statusPanelRefreshTimeCombo.onchange=statusPanelRefreshTimeComboChanged;
   
   statusPanelProcessImage = document.getElementById("statusPanelProcessImage");
   statusPanelProcessImage.onclick = statusPanelProcessImageClick;
  
   //Выставляем обработчики для кнопок
   //settingsOkButton.onclick=SettingsFormOkButtonClick;
   //settingsCancelButton.onclick=SettingsFormCancelButtonClick;
   
   //Получаем настройки с сервера
   LoadSettingsFromServer();
   
}




