﻿/// <reference name="MicrosoftAjax.js" />
/// <reference path="../dnn.js" />
/// <reference path="RangeLog.js" />

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Namespace declarations
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
RangeLog.Client.RadAjax =
{
    callbacks: new RangeLog.Generic.list(),

    ajaxRequestStart: function(sender, e) {
        var arg = e.EventTarget;

        /* If the request should be a NORMAL postback, not an ajax request, then disable AJAX so normal postback occurs. */
        if (!RangeLog.Client.RadAjax.ajaxEnabled) {
            e.EnableAjax = false;
            RangeLog.Client.RadAjax.ajaxEnabled = true;
        }
        else { e.EnableAjax = true; }
    },

    ajaxResponseEnd: function(sender, e) {
        for (var i = 0; i < RangeLog.Client.RadAjax.callbacks.count(); i++) {
            RangeLog.Client.RadAjax.callbacks.getItem(i)(sender, e);
        }
    },

    registerCallback: function(callback) {
        RangeLog.Client.RadAjax.callbacks.add(callback);
    }
};

/* Used to temporarily change an AJAX request into a normal postback (such as when doing exports). */
RangeLog.Client.RadAjax.ajaxEnabled = true;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

RangeLog.Client.RadAjax.Manager = function(clientID)
{
    /// <summary>
    /// Javascript class used to easily integrate with the RadAjaxManager control client-side functionality.
    /// </summary>

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // INSTANCE VARIABLES
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    this._id = clientID;
    this._ajaxManager = null;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}

RangeLog.Client.RadAjax.Manager.prototype =
{
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // GETTERS / SETTERS
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    get_id: function()
    {
        /// <summary>
        /// Gets the client id for this instance.
        /// </summary>
        return this._id;
    },

    set_id: function(value)
    {
        /// <summary>
        /// Sets the client id for this instance.
        /// </summary>
        this._id = value;
    },
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // METHODS
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    get: function()
    {
        /// <summary>
        /// Gets the RadUpload for this instance.
        /// </summary>

        if (this._ajaxManager == null) this._ajaxManager = $find(this.get_id());
        
        return this._ajaxManager;
    },

    initiateAsyncRequest: function(argument)
    {
        /// <summary>
        /// Initiates an ajax request passing in the supplied argument.
        /// </summary>

        this.get().ajaxRequest(argument);
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
