﻿/**
 * Контрол для показа сгенерированной и потребленной электроэнергии на главной странице
 * (Использует паттерн MS Ajax Component. Будет доступен через $find)
 */
function EnergyControl()
{
	//Стандартный интерфейс для компонента
	EnergyControl.initializeBase(this);
	//ID элемента, в котором находится данный контрол
	this._containerElementID = null;
	//Смещение ползунка от левого края, когда его значение равно startX
	this.leftPxOffset = -48;
	//Расстояние в пикселах между endX и startX
	this.scalePxLength = 180;
};

EnergyControl.prototype =
{
    get_containerElementID: function()
    {
        return this._containerElementID;
    },
    set_containerElementID: function(value)
    {
        this._containerElementID = value;
    },
    /**
    * Выдает смещение для данного значения
    * @param {Object} value
    * @param {Object} startX
    * @param {Object} endX
    */
    getValueOffset: function(value, startX, endX)
    {
        if (value < startX)
            value = startX;
        if (value > endX)
            value = endX;
        var valueOffset = value - startX;
        var valueLeftPxOffset = this.leftPxOffset;
        if (endX > startX)
        {
            valueLeftPxOffset = valueOffset / (endX - startX) * this.scalePxLength + this.leftPxOffset;
        }
        return valueLeftPxOffset;
    },
    /**
    * Устанавливает значение частоты
    * @param {Object} complexValue Содержит значения: 
    * valueGen Значение сгенерированной электроэнергии
    * valuePotr Значение потребленной электроэнергии
    * startX Нижняя граница
    * endX Верхняя граница
    */
    set_value: function(complexValue)
    {
        var valueGen = complexValue.valueGen;
        var valuePotr = complexValue.valuePotr;
        var startX = complexValue.startX;
        var endX = complexValue.endX;
        var timeString = complexValue.timeString;
        //Устанавливаем значения
        var container = $("#" + this._containerElementID);
        var formatNumber = this.formatNumber;
        $("#startX", container).text(formatNumber(startX+""));
        $("#endX", container).text(formatNumber(endX+""));


        //Устанавливаем положение ползунка
        if (valueGen)
        {
            $("#valueGen #value", container).text(formatNumber(valueGen.toFixed(0) + "") + "  МВт*ч");
            var valueLeftPxOffsetGen = this.getValueOffset(valueGen, startX, endX);
            $("#valueGen", container).css("left", valueLeftPxOffsetGen + "px");
        }
        else
        {
            $("#valueGen #value", container).text(" -  МВт*ч");
        }
        if (valuePotr)
        {
            $("#valuePotr #value", container).text(formatNumber(valuePotr.toFixed(0) + "") + "  МВт*ч");
            var valueLeftPxOffsetPotr = this.getValueOffset(valuePotr, startX, endX);
            $("#valuePotr", container).css("left", valueLeftPxOffsetPotr + "px");
        }
        else
        {
            $("#valuePotr #value", container).text(" - МВт*ч");
        }
        //Tooltip
        if (timeString != "")
        {
            container.attr("title", "Генерация и потребление за " + timeString);
        }
        else
        {
            container.attr("title", "Данных по генерации и потреблению нет");
        }
    },
    get_value: function()
    {
        //Сделано специально, чтобы value было свойством (тогда его можно инициализировать через Asp.net ajax)
        return null;
    },
    /**
    * Показывает элемент
    */
    show: function()
    {
        var container = $("#" + this._containerElementID);
        container.show();
    },
    formatNumber: function(nStr)
    {
        var delimiter = ' ';
        nStr += '';
        x = nStr.split('.');
        x1 = x[0];
        x2 = x.length > 1 ? '.' + x[1] : '';
        var rgx = /(\d+)(\d{3})/;
        while (rgx.test(x1))
        {
            x1 = x1.replace(rgx, '$1' + delimiter + '$2');
        }
        return x1 + x2;
    }
};

// JSON object that describes all properties, events, and methods of this component that should
// be addressable through the Sys.TypeDescriptor methods, and addressable via xml-script.
EnergyControl.descriptor = {
properties: [
    { name: 'containerElementID', type: String },
    { name: 'value', type: Object }
    ]
};
EnergyControl.registerClass('EnergyControl', Sys.Component);

// Since this script is not loaded by System.Web.Handlers.ScriptResourceHandler
// invoke Sys.Application.notifyScriptLoaded to notify ScriptManager 
// that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();