/********************************
* x3tech CMS - AJAX Functions
* Author        : $Author$
* Rev            : $Rev$
* Last Modified    : $Date$
********************************/

function loader()
{
    this.action = null;
    this.actions = ({
        redirect : function() {
            location.hash = loader.action.url;
            loader.loadUrl(ROOT_URL + loader.action.url, loader.action.destination);
        },
        reloadnav : function () {
            loader.loadUrl(ROOT_URL + "/cms/nav/generate", "#navigation");
        },
        message : function () {
            message(loader.action.data.type, loader.action.data.content);
        }
    });

    this.loadPage = function()
    {
        var reqUrl = ROOT_URL + location.hash.substr(1);
        this.loadUrl(reqUrl, "#content");
    }


    this.loadedPage = function(html, status, destination)
    {
        if(html.substr(0, 4) == "json")
            var response = $.secureEvalJSON(html.substr(4));

        if(response)
        {
            for(i=0;i<response.length;i++)
            {
                this.action = response[i];
                this.action.destination = destination;

                this.actions[this.action.action]();
                /*switch (action.action)
                {
                    case "redirect":
                        location.hash = action.url;
                        loadUrl(ROOT_URL + action.url, destination);
                        break;
                    case "reloadnav":
                        loadUrl(ROOT_URL + "cms/nav/generate", "#navigation");
                        break;
                    case "message":
                        message(action.data.type, action.data.content);
                        break;
                }*/
            }
            response = null;
            return;
        }

        if(status != "success")
            return;

        $(destination).html(html);
        if(destination == "#content")
            $(document).trigger("pageLoad");
    }

    this.loadUrl = function(url, destination)
    {
        $.post(url, { ajax: true }, function(html, status) { loader.loadedPage(html, status, destination) }, "html");
    }
    this.submitForm = function(form)
    {
        var postData = form.serializeArray();
        postData.push({name:"ajax", value:"true"});
        $.post(form.attr("action"), postData, function(html, status) { loader.loadedPage(html, status, "#content") }, "html");
        return false;
    }
};
var loader = new loader();

function assignHandlers()
{
    $("a[href*="+ROOT_URL+"]").live("click", function() {
        location.hash = "#" + $(this).attr("href").replace(ROOT_URL, "/");
        loader.loadPage();
        return false;
    });
    $("form").live("submit", function() {
        loader.submitForm($(this));
        return false;
    });
}
