﻿/// <reference name="MicrosoftAjax.js" />

Type.registerNamespace("ServerTransformed");

ServerTransformed.Timer = function()
{
    ServerTransformed.Timer.initializeBase(this);
    
    this._interval = 1000;
    this._enabled = false;
    this._timer = null;
}

ServerTransformed.Timer.prototype =
{
    initialize: function()
    {
        ServerTransformed.Timer.callBaseMethod(this, "initialize");
        
        if(this._enabled) this._startTimer();
    },
    
    dispose: function()
    {
        this._stopTimer();
        
        ServerTransformed.Timer.callBaseMethod(this, "dispose");
    },
    
    get_interval: function() { return this._interval; },
    set_interval: function(value) 
    { 
        if(this._interval != value)
        {
            this._interval = value;
            this.raisePropertyChanged("interval");
            if(!this.get_isUpdating() && this._timer != null)
                this._restartTimer();
        }
    },
    
    get_enabled: function() { return this._enabled; },
    set_enabled: function(value)
    {
        if(value!=this._enabled)
        {
            this._enabled = value;
            this.raisePropertyChanged("enabled");
            
            if(!this.get_isUpdating())
            {
                if(this._enabled)
                    this._startTimer();
                else
                    this._stopTimer();
            }
        }
    },
    
    add_tick: function(handler) { this.get_events().addHandler("tick", handler); },
    remove_tick: function(handler) { this.get_events().removeHandler("tick", handler); },
    
    _onTick: function() { this._raiseEvent("tick"); },
    
    restartTimer: function()
    {
        this._stopTimer();
        this._startTimer();
    },
    
    _startTimer: function()
    {
        this._timer = window.setInterval(Function.createDelegate(this, this._onTick), this._interval);
    },
    
    _stopTimer: function()
    {
        if(this._timer)
        {
            window.clearInterval(this._timer);
            this._timer = null;
        }
    },
    
    _raiseEvent: function(eventName, eventArgs)
    {
        var handler = this.get_events().getHandler(eventName);
        
        if(handler)
        {
            if(!eventArgs) eventArgs = Sys.EventArgs.Empty;
            
            handler(this, eventArgs);
        }
    }
}

ServerTransformed.Timer.registerClass("ServerTransformed.Timer", Sys.Component);