﻿
var AgisSSC = new Object();

AgisSSC.BindingEvents = new Object();
AgisSSC.BindingEvents.Click = 0;
AgisSSC.BindingEvents.DoubleClick = 1;
AgisSSC.BindingEvents.KeyUp = 2;


AgisSSC.Commands = new Object();
AgisSSC.Commands.AddClass = 0;
AgisSSC.Commands.RemoveClass = 1;
AgisSSC.Commands.ReplaceContents = 2;
AgisSSC.Commands.ReplaceAJAX = 3;
AgisSSC.Commands.ChangeAttribute = 4;
AgisSSC.Commands.ChainToAJAX = 5;
AgisSSC.Commands.RegisterCallbacks = 6;
AgisSSC.Commands.Redirect = 7;
AgisSSC.Commands.Message = 8;
AgisSSC.Commands.PreLoadImages = 9;

AgisSSC.Engine = new Object();


AgisSSC.ImageLoadingInformation = new Object();

AgisSSC.imageLoadedCallback = function()
{
    AgisSSC.ImageLoadingInformation.currentImage += 1;
    if (AgisSSC.ImageLoadingInformation.currentImage >= AgisSSC.ImageLoadingInformation.imagesToLoad.length) {
        $(".preloaderstatus").hide();
        AgisSSC.Engine.running = true;
        AgisSSC.pumpCommands();
    }
    //else {
    //    AgisSSC.imageLoader();
    //}


}

AgisSSC.imageLoader = function()
{
    AgisSSC.ImageLoadingInformation.images = []
    for (x = 0; x < AgisSSC.ImageLoadingInformation.imagesToLoad.length; x++) {
        var img = new Image();
        img.onload = AgisSSC.imageLoadedCallback;
        img.src = AgisSSC.ImageLoadingInformation.imagesToLoad[x];
        AgisSSC.ImageLoadingInformation.images.push(img);
    }

}


AgisSSC.executeCommand = function (command) {

    var items = $(command.Selector);

    switch (command.CommandType) {
        case AgisSSC.Commands.AddClass:
            items.addClass(command.Argument1);
            break;
        case AgisSSC.Commands.RemoveClass:
            items.removeClass(command.Argument1);
            break;
        case AgisSSC.Commands.ReplaceContents:
            items.empty();
            items.html(command.Argument1);
            AgisSSC._scanElement(command.Selector);
            break;
        case AgisSSC.Commands.ReplaceAJAX:
            items.load(command.Argument1);
            AgisSSC._scanElement(command.Selector);
            break;
        case AgisSSC.Commands.ChangeAttribute:
            items.attr(command.Argument1, command.Argument2);
            break;
        case AgisSSC.Commands.RegisterCallbacks:
            AgisSSC.registerCallbacks(command.Argument1)
            break;
        case AgisSSC.Commands.Redirect:
            window.location = command.Argument1;
            break;
        case AgisSSC.Commands.Message:
            alert(command.Argument1);
            break;
        case AgisSSC.Commands.PreLoadImages:
            $(".preloaderstatus").show();
            AgisSSC.ImageLoadingInformation.currentImage = 0;
            AgisSSC.ImageLoadingInformation.imagesToLoad = fromMVCFormat(command.Argument1);
            AgisSSC.imageLoader();
            AgisSSC.Engine.running = false;
            break;
            
            
    }
};

AgisSSC.registerCallbacks = function(callbacks)
{
    var callbacks = fromMVCFormat(callbacks);
    for(var i in callbacks)
    {
        var cb = callbacks[i];
        var item = $(cb.Selector);
        switch (cb.BindingEvent)
        {
            case AgisSSC.BindingEvents.Click:
                item.click(function() {
                    var vals = "";
                    for (var v in cb.Includes) {
                        var item = $(cb.Includes[v])
                        var id = item.attr("id");
                        var value = item.val();
                        if (value == "") value = item.html();
                        vals += "&"+id+"="+value;
                    }
                    $.post(cb.Url,"id="+this.id+vals, AgisSSC._ajaxExecuteCommands);
                    return false;
                });
            case AgisSSC.BindingEvents.KeyUp:
                item.bind('keyup', function() {
                    var vals = "";
                    for (var v in cb.Includes) {
                        var item = $(cb.Includes[v])
                        var id = item.attr("id");
                        var value = item.val();
                        if (value == "") value = item.html();
                        vals += "&"+id+"="+value;
                    }
                    $.post(cb.Url,"id="+this.id+vals, AgisSSC._ajaxExecuteCommands);
                    return false;
                });
                break;
        }


    }



};

AgisSSC._ajaxExecuteCommands = function(command)
{
    var dat = fromMVCFormat(command);
    AgisSSC.executeCommands(dat);
};

AgisSSC.pumpCommands = function()
{

    while (AgisSSC.Engine.commandOffset < AgisSSC.Engine.commands.length)
    {
        AgisSSC.executeCommand(AgisSSC.Engine.commands[AgisSSC.Engine.commandOffset])
        AgisSSC.Engine.commandOffset += 1;
        if (AgisSSC.Engine.running == false) break;
        
    }
}

AgisSSC.executeCommands = function(commands)
{
    AgisSSC.Engine.commands = commands;
    AgisSSC.Engine.commandOffset = 0;
    AgisSSC.Engine.running = true;
    AgisSSC.pumpCommands();

};

AgisSSC._scanElement = function(selector)
{
    $(selector).find("._AgisSSCData").each(function(index) {
        AgisSSC._ajaxExecuteCommands($(this).html());
    }).remove();
};

AgisSSC._scanDocument = function()
{
    $("._AgisSSCData").each(function(index) {
        AgisSSC._ajaxExecuteCommands($(this).html());
    }).remove();
};

$(document).ready(AgisSSC._scanDocument);

