
function on_load()
{
    var form_name = "main_form";
    if (isDefined("form_variables"))
    {
        if(form_element = $$("form#" + form_name)[0])
        {
            if("object" == typeof(form_variables))
            {
                // Iterate through form fields.
                form_element.getElements().map(function(field_element)
                {
                    var prefix = "field";
                    var t = field_element.name.split(".");
                    if(2 == t.length && prefix == t[0])
                    {
                        field_name = t[1];
                        var value = form_variables[field_name];
                        var is_null = null === value || undefined === value;

                        var field_type = field_element.type;
                        if ("radio" == field_type)
                        {
                            if (field_element.value == value)
                                field_element.checked = true;
                        }
                        else if("checkbox" == field_type)
                        {
                            field_element.checked = !(is_null || !value);
                            field_element.value = "true";
                        }
                        else
                        {
                            field_element.value = (is_null ? "" : value);
                        }
                    }
                });
            }

            if(e = form_element.findFirstElement()) { e.activate(); }
        }
    }

    if(e = $("message"))
    {
        if(message && 0 != message.length)
        {
            e.innerText = message;
        }
        else
        {
            e.parentNode.removeChild(e);
        }
    }

    if(e = $("alert"))
    {
        if(alert_message && 0 != alert_message.length)
        {
            e.innerHTML = alert_message;
        }
        else
        {
            e.parentNode.removeChild(e);
        }
    }

    if(debug_message && 0 != debug_message.length)
    {
        debug.echo(debug_message);
    }
}


function submit_request(request)
{
    var f = document.getElementById("main_form");
    if(f)
    {
        var e = f["request"];
        if(e)
        {
            e.value = request;
            f.submit();
        }
    }
}

function confirm_submit(message, request)
{
    var f = document.getElementById("main_form");
    if(f)
    {
        if(confirm(message))
        {
            if (request)
            {
                var e = f["request"];
                if(e) { e.value = request; }
            }

            f.submit();
        }
    }
}

function go_to(url, params)
{
    var dest = "";

    url = url || document.location.href;
    var s = url.indexOf("?");
    if(0 < s)
    {
        url = url.substring(0, s);
    }

    params = params ? "?" + params : "";

    window.location = url + params;
}

var old_style;
function hilite(e)
{
    old_style = e.style.backgroundColor;
    e.style.backgroundColor = "#D7F0FA";
    e.style.cursor = "pointer";
}

function lolite(e)
{
    e.style.backgroundColor = old_style;
    e.style.cursor = "default";
}

function sort(column)
{
    var f = document.getElementById("main_form");
    if(f)
    {
        var c = f["sort_column"];
        var d = f["sort_ascending"];
        var s = f["sort_submitted"];

        if(c && s)
        {
            if(column == c.value)
            {
                d.value = ("true" == d.value ? "false" : "true");
            }
            else
            {
                c.value = column;
                d.value = "true";
            }

            s.value = "true";
            f.submit();
        }
    }
}

function change_date_range(
    range_element,
    from_element, to_element,
    first_weekday,
    format)
{
    if (from_element && to_element)
    {
        var range_enum = range_element.value;
        var start_date = "";
        var end_date = "";
        
        var now = new Date();
        var nweekday = now.getDay2(first_weekday);
        var ndate = now.getDate();
        var nmonth = now.getMonth();
        var nyear = now.getFullYear();
        
        switch (range_enum)
        {
            case "this_week":
                start_date = new Date(nyear, nmonth, ndate - nweekday);
                end_date = now;
                break;
            case "previous_week":
                start_date = new Date(nyear, nmonth, ndate - nweekday - 7);
                end_date = new Date(nyear, nmonth, ndate - nweekday, 0, 0, 0, -1);
                break;
            case "this_month":
                start_date = new Date(nyear, nmonth, 1);
                end_date = now;
                break;
            case "previous_month":
                start_date = new Date(nyear, nmonth - 1, 1);
                end_date = new Date(nyear, nmonth, 1, 0, 0, 0, -1);
                break;
            case "half_year":
                start_date = new Date(nyear, nmonth - 6, ndate);
                end_date = now;
                break;
            case "this_year":
                start_date = new Date(nyear, 0, 1);
                end_date = now;
                break;
            case "last_year":
                start_date = new Date(nyear - 1, nmonth, ndate);
                end_date = now;
                break;
            case "previous_year":
                start_date = new Date(nyear - 1, 0, 1);
                end_date = new Date(nyear, 0, 1, 0, 0, 0, -1);
                break;
            case "":
                break;
        }

        from_element.value = ("" === start_date ? "" : start_date.print(format));
        to_element.value = ("" === end_date ? "" : end_date.print(format));
    }   
}

// Debug utilities.

var debug =
{
    debug_display: null,

    echo: function(msg)
    {
        if(this.prepare_debug_display())
        {
            this.debug_display.innerHTML += msg + "<br/>";
        }
    },

    prepare_debug_display: function()
    {
        var result = true;

        if(!this.debug_display)
        {
            var body = $$("body");
            body = body[0];
            if(body)
            {
                var d = document.createElement("div");
                this.debug_display = d;

                var s = d.style;
                s.zIndex = 1000;
                s.position = "absolute";
                s.top = "10px";
                s.left = (document.body.clientWidth - 310) + "px";
                s.width = "300px";
                s.padding = "2px";
                s.color = "#e0f0a0";
                s.backgroundColor = "#404040";
                s.opacity = "0.9";

                body.appendChild(d);
            }
            else
            {
                alert("debugger failure 48912746");

                result = false;
            }
        }

        return result;
    }
};

function d(msg) { debug.echo(msg); }

// Clone the current date object and return a different object with identical value.
Date.prototype.clone = function()
{
    return new Date(this.getTime());
}

Date.prototype.getDay2 = function(first_weekday)
{
    var a = this.getDay();
    a -= first_weekday;
    if (a == -1) { a = 6; }

    return a;
}

function isDefined(variable)
{
    return eval('(typeof(' + variable + ') != "undefined");');
}

