﻿/**
 * AjaxLoader class
 */
 
AjaxLoader = function()
{
    
}

AjaxLoader.LastClickX;

AjaxLoader.LastClickY;

/**
 * Tracks all mouse movement coordinates
 */
AjaxLoader.TrackLastClickCoordinates = function()
{
    $( document ).mousemove( function( e )
    {
        AjaxLoader.LastClickX = e.pageX;
        AjaxLoader.LastClickY = e.pageY;
    });
}

AjaxLoader.ContainerId = "ajax-loader-container";

AjaxLoader.Init = function()
{
    AjaxLoader.TrackLastClickCoordinates();
        
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_initializeRequest( AjaxLoader.Start );
    prm.add_endRequest( AjaxLoader.Stop );
}

/**
 * Gets called on every ajax request.
 * Automatically cancels a request if another one is still in progress
 */
AjaxLoader.Start = function( sender, args )
{    
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    if ( prm.get_isInAsyncPostBack() )
    {
        args.set_cancel(true);
        return;
    }

    AjaxLoader.StartAnimation();
}

AjaxLoader.StartAnimation = function()
{
    // Sets initial position
    AjaxLoader.Position( AjaxLoader.LastClickY, AjaxLoader.LastClickX );
    AjaxLoader.StartTrackingMouseMovements();
    AjaxLoader.Show();
}

AjaxLoader.StopAnimation = function()
{
    AjaxLoader.Hide();
    AjaxLoader.StopTrackingMouseMovements();
}

AjaxLoader.Stop = function( sender, args )
{
    AjaxLoader.StopAnimation();
}

AjaxLoader.Show = function()
{
    $( "#" + AjaxLoader.ContainerId ).show();
}

AjaxLoader.Hide = function()
{
    $( "#" + AjaxLoader.ContainerId ).hide();
}

AjaxLoader.StartTrackingMouseMovements = function()
{
    $( document ).bind( "mousemove", AjaxLoader.TrackMouseMovements );
}

AjaxLoader.StopTrackingMouseMovements = function()
{
    $( document ).unbind( "mousemove", AjaxLoader.TrackMouseMovements );
}

AjaxLoader.TrackMouseMovements = function( e )
{
    AjaxLoader.Position( (e.pageY), (e.pageX) );
}

/**
 * Positions the loader
 */
AjaxLoader.Position = function( top, left )
{
    $( "#" + AjaxLoader.ContainerId ).css(
    {
        top: top + 0 + "px",
        left: left + 13 + "px"
    });
}
