﻿
/**
 * Иницилизирует контрол для показа текущей частоты
 * @param {Object} params - {controlID,url}
 */
function initFrequencyControl(params)
{
    var controlID = params.controlID;
    var url = params.url;
    var frequencyControl = $find(controlID);
    var imgError = $("#imgFrequencyError");
    new FrequencyUpdater(
            {
                url: url,
                onSuccess: function(result)
                {
                    imgError.hide();
                    frequencyControl.set_value({ value: result.Value, startX: result.LeftBorder, endX: result.RightBorder });
                },
                onError: function(error)
                {
                    new BrowserConsole().log(error.get_message());
                    imgError.attr("title", createControlErrorMessage());
                    imgError.show();
                }
            });
};

/**
 * Инициализирует контрол для генерации и потребления
 * @param {controlID, url} params
 */
function initEnergyControl(params)
{
	var controlID = params.controlID;
    var url = params.url;
	var energyControl = $find(controlID);
	var imgError = $("#imgEnergyError");
    new HourlyUpdater(
    {
        url: url,
        onSuccess: function(result)
        {
            imgError.hide();
			energyControl.set_value({
                valueGen: result.GenValue,
                valuePotr: result.ConsumValue,
                startX: result.LeftBorder,
                endX: result.RightBorder,
                timeString: result.TimeString
            });
        },
        onError: function(error)
        {
            new BrowserConsole().log(error.get_message());
            imgError.attr("title", createControlErrorMessage());
            imgError.show();
        },
        startMinute: 22
    });
};
/**
 * Инициализирует контрол для индикатора БР
 * @param {controlID, url} params
 */
function initIndicatorBRControl(params)
{
    var firstZoneAvgControl = $find(params.firstZoneAvgControlID);
    var secondZoneAvgControl = $find(params.secondZoneAvgControlID);
    var firstZoneAcceptControl = $find(params.firstZoneAcceptControlID);
    var secondZoneAcceptControl = $find(params.secondZoneAcceptControlID);
	var url = params.url;
	var initValue = params.initValue;

	
    var imgError = $("#indicatorBRErrorImg");
    //Функция, которая отрисовывает серверное значение
    var renderIndicatorValue = function(result)
    {
        // 1 ц.з.
        if (result.FirstZoneValue != null)
        {
            var time = parseWCFDateTime(result.FirstZoneValue.Time);

            firstZoneAvgControl.set_value(result.FirstZoneValue.ValueAvg);
            firstZoneAvgControl.set_tooltip("Средний индикатор БР по 1 ценовой зоне на " + time.format("HH:mm dd.MM.yyyy"));

            firstZoneAcceptControl.set_value(result.FirstZoneValue.ValueAccept);
            firstZoneAcceptControl.set_tooltip("Средний индикатор БР за акцептированные часы по 1 ценовой зоне на " + time.format("HH:mm dd.MM.yyyy"));
        }
        else
        {
            var time = parseWCFDateTime(result.Time);
            
            firstZoneAvgControl.set_value(null);
            firstZoneAvgControl.set_tooltip("Данные отсутствуют на " + time.format("HH:mm dd.MM.yyyy"));

            firstZoneAcceptControl.set_value(null);
            firstZoneAcceptControl.set_tooltip("Данные отсутствуют на " + time.format("HH:mm dd.MM.yyyy"));
        }

        // 2 ц.з.
        if (result.SecondZoneValue != null)
        {
            var time = parseWCFDateTime(result.SecondZoneValue.Time);

            secondZoneAvgControl.set_value(result.SecondZoneValue.ValueAvg);
            secondZoneAvgControl.set_tooltip("Средний индикатор БР по 2 ценовой зоне на " + time.format("HH:mm dd.MM.yyyy"));

            secondZoneAcceptControl.set_value(result.SecondZoneValue.ValueAccept);
            secondZoneAcceptControl.set_tooltip("Средний индикатор БР за акцептированные часы по 2 ценовой зоне на " + time.format("HH:mm dd.MM.yyyy"));
        }
        else
        {
            var time = parseWCFDateTime(result.Time);

            secondZoneAvgControl.set_value(null);
            secondZoneAvgControl.set_tooltip("Данные отсутствуют на " + time.format("HH:mm dd.MM.yyyy"));

            secondZoneAcceptControl.set_value(null);
            secondZoneAcceptControl.set_tooltip("Данные отсутствуют на " + time.format("HH:mm dd.MM.yyyy"));
        }

    };

    renderIndicatorValue(initValue);

    new HourlyUpdater(
    {
        url: url,
        onSuccess: function(result)
        {
            imgError.hide();
            renderIndicatorValue(result);
        },
        onError: function(error)
        {
            new BrowserConsole().log(error.get_message());
            imgError.attr("title", createControlErrorMessage());
            imgError.show();
        },
        startMinute: 3
    });
};

/**
 * Иницилизирует контрол для показа событий
 * @param {Object} params - {controlID,url}
 */
function initEventsControl(params)
{
    var controlID = params.controlID;
    var url = params.url;
    var eventsControl = $find(controlID);
    var imgError = $("#imgEventsError");
    return new EventsUpdater(
            {
                url: url,
                onSuccess: function(result)
                {
                    imgError.hide();
                    //Выставляем правильное время
					$.each(result, function()
				        {
				            this.EventTime = parseWCFDateTime(this.EventTime);
				        });
					eventsControl.set_events(result);
                },
                onError: function(error)
                {
                    new BrowserConsole().log(error.get_message());
                    imgError.attr("title", createControlErrorMessage());
                    imgError.show();
                }
            });
};


/**
 * Создает сообщение об ошибке, которое показывает контрол при ошибке
 * @param {Object} message
 */
function createControlErrorMessage()
{
	return new Date().format("HH:mm:ss: ") + "Ошибка получения данных";
};
