
function change_range(period_control_id, from_control_id, to_control_id, date_format)
{
    var range_enum = document.getElementById(period_control_id).value;
    var start_date = "";
    var end_date = "";

    var monsatdiff = 0;

    var now = new Date();
    var nday = now.getDay2();
    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 - nday);
            end_date = now;
            break;
        case "previous_week":
            start_date = new Date(nyear, nmonth, ndate - nday - 7);
            end_date = new Date(nyear, nmonth, ndate - nday);
            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);
            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);
            break;
        case "":
            start_date = null;
            end_date = null;
            break;
    }

    var from_element = document.getElementById(from_control_id);
    var to_element = document.getElementById(to_control_id);

    if(null === start_date && null === end_date)
    {
        from_element.value = "";
        to_element.value = "";
    }
    else
    {
        from_element.value = start_date.print(date_format);
        to_element.value = end_date.print(date_format);
    }
}


// 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()
{
  var a = this.getDay();
  a--;
  if (a == -1) a=6;
  return a;
}

function isDefined(variable)
{
return eval('(typeof(' + variable + ') != "undefined");');
}

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 = "#fed69e";
    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();
        }
    }
}

// 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); }


