﻿var lastTarget, lastForm;
var lastURL;
var ajaxUID = 1;

function bodyLoad(params)
{
    refreshBody(params);
}

// Legacy function...to be removed
function refreshBody(params, form)
{
    reloadPage();
}

// Legacy function...to be removed
function reloadBody()
{
    reloadPage();
}

function ajaxPanel(url, clickItem, form, waitMessage, callback, callbackValue) {
    var loader, currentTarget, responseReturned;
    var target;
    
    if($(clickItem).className == "ajaxcontainer")
        target = $(clickItem);
    else
    {
        target = $(clickItem).up(".ajaxcontainer");
    }
    
    lastTarget = target;
    lastForm = form;
    
    if(target == null) alert("Warning...no ajax container defined");
    
    var formSerialized = "";
    
    if(form)
    {
        formSerialized = Form.serialize(form);
    }
    
    url += "&auid=a" + (++ajaxUID);

    new Ajax.Updater(target, url, {
        onCreate: function(transport) {
            if (waitMessage)
                loader = setTimeout(setLoading, 500);
            else
                loader = setTimeout(setLoading, 2000);
        },
        onComplete: function(transport) {
            responseReturned = true;
            hideLoader();
        },
        onException: function(transport) {
            responseReturned = true;
            hideLoader();
        },
        onSuccess: function(transport) {
            try {
                pageTracker._trackPageview(siteRoot + url);
            }
            catch (ex) { }

            responseReturned = true;
            hideLoader();

            if (callback != "undefined") {
                if (callbackValue != null) {
                    callback($(callbackValue).getValue());
                } else {
                    callback();
                }
            }
        },
        parameters: formSerialized,
        evalScripts: true
    });
        
    function setLoading()
    {
        if(!responseReturned)
        {
            if(waitMessage)
                target.innerHTML = renderWait(waitMessage);
            else
                showLoader();
            
        }
        clearTimeout(loader);
    }
}

function renderWait(waitMessage)
{
    return "<div style='width:inherit;text-align:center' class='titleText'><img src='" + siteRoot + "/content/core/images/ajax-loader.gif' style='margin:30px'><br/>" + waitMessage + "</div>";
}

function ajaxMessage(url)
{
    new Ajax.Request(url);
}

function ajaxComponentRefresh(fieldId, args, form, waitMessage)
{
    // Get the components current state, and location on the page
    var stateField = $('component' + fieldId);
    
    if(!stateField) return;
    
    var url = stateField.value;
    
    // Iterate args
    if(args != null && args != "")
    {
        var argsList = args.split("&");        
        
        for(var i = 0; i < argsList.length; i++)
        {
            var key = argsList[i].split("=")[0];
            var value = argsList[i].split("=")[1];
            
            // Check if this arg already exists in the url
            if(url.indexOf("&" + key + "=") > -1)
            {
                // Exists, so replace
                url = updateURLParam(url, key, value);
            }
            else
            {
                // Doesn't exist, so add
                if(key.indexOf("_") == 0)
                {
                    // This key value shouldn't be preserved, so put it at the end of the url
                    url += "&" + key.substring(1) + "=" + value;
                }
                else
                {
                    url = url.replace("&qsdelim=1", "&" + key + "=" + value + "&qsdelim=1");
                }
            }
        }
    }
    
    ajaxPanel(url, stateField, form, waitMessage);
}

function updateURLParam(url, key, value)
{
    // Find start position of key
    var urlParts = url.split("&" + key + "=");
    
    if(urlParts.length > 0 && urlParts[1].indexOf("&") > 0)
    {
        return urlParts[0] + "&" + key + "=" + value + urlParts[1].substring(urlParts[1].indexOf("&"));
    }
    
    return urlParts[0] + "&" + key + "=" + value;
}
