
function windows_image_improver()
{
    // Get all the images
    var images = document.getElementsByTagName("img");

    // Traverse the images and find those with class= need-improvement
    for(var a = 0; a < images.length; a++)
    {
        var img = images[a];
        var cls = img.className;

        // if (cls.indexOf("need-improvement") != -1)
        // {
            var scaleto = img.width + "x" + img.height;

            var url = img.src;            
            var parts = split_url(url);    
            var base = parts[0];
            var param_array = param_array_from_url(parts[1]);
            
            param_array = set_param_in_array(param_array, "size", null);
            param_array = set_param_in_array(param_array, "scaleto", scaleto);

            url = url_from_param_array(base, param_array);
            
            img.src = url;

            if (cls.indexOf("preload") != -1)
            {
                var status = get_param_in_array(param_array, "status");

                if (status == "on")
                {
                    status = "off";
                }
                else
                {
                    status = "on";
                }
                
                param_array = set_param_in_array(param_array, "status",
                                                 status);

                var preload_url = url_from_param_array(base, param_array);;
                var i = new Image();
                i.src = preload_url;
		// }            
        }
    }

    // Put the background behind the main content div
    var content = document.getElementById("content");
    var img = document.getElementById("how-wide-am-i");
    var width = img.width;
    var bg_css = 'url("content_bg?size=' + width + 'x1000") white no-repeat';
    content.style.background = bg_css;
    
}


/**********************************************************************/

/**
 * Return an Array of Array as in
 * 
 *  Array(Array(name0, value0),
 *        Array(name1, value1),
 *        ...)
 *
 *  The URL param may be either a complete URL (of which the part before
 *  the ? will be discarded) or just the parameter part after the ?.
 */
function param_array_from_url(url)
{
    var parts;
    var rest;

    parts = url.split("?");

    // No '?' present? 
    if (parts.length != 2)
    {
        rest = url;        
    }
    else
    {
        rest = parts[1];
    }

    if (rest == "")
    {
        return Array();
    }
    else
    {
        // Split the parameter list
        var ret = Array();
        
        parts = rest.split("&");
        
        for (var a = 0; a < parts.length; a++)
        {
            var part = parts[a];
            var pair = part.split("=");
            
            if (pair.length == 2)
            {
                var name = pair[0];
                var value = pair[1];
                
                ret.push(Array(name, value));
            }
        }
        
        return ret;
    }
}

/**
 * Split URL in a url and a parameter part. Always returns a two element
 * array of strings.
 */
function split_url(url)
{
    var ret = url.split("?");

    // Make sure the array we return as two elements.
    if (ret.length != 2)
    {
        ret.push("");
    }

    return ret;
}


/**
 * Return a copy of PARAM_ARRAY width PARAM set to VALUE.
 */
function set_param_in_array(param_array, param, new_value)
{
    var new_param_array = Array();
    for(var a = 0; a < param_array.length; a++)
    {
        var name = param_array[a][0];
        var value = param_array[a][1];
            
        if ( name != param && value != null)
        {
            new_param_array.push(param_array[a]);
        }
    }

    if (new_value != null)
    {
        new_param_array.push(Array(param, "" + new_value));
    }
    
    return new_param_array;
}

/**
 * Return value for PARAM if present. Return null if not.
 */
function get_param_in_array(param_array, param)
{
    for(var a = 0; a < param_array.length; a++)
    {
        var name = param_array[a][0];
        var value = param_array[a][1];
            
        if ( name == param )
        {
            return value;
        }
    }

    return null;
}

/**
 * Take BASE (url part without params) and a PARAM_ARRAY and return
 * a complete url. No parameter escaping is performed.
 */
function url_from_param_array(base, param_array)
{
    ret = Array();

    ret.push(base);
    
    var params = Array();
    for (var a = 0; a < param_array.length; a++)
    {
        if (param_array[a][1] != null)
        {    
            var param = param_array[a].join("=");
            params.push(param);
        }
    }

    params.sort();
    
    if (params.length > 0)
    {
        ret.push("?");
        ret.push(params.join("&"));
    }

    return ret.join("");
}


/**
 * Set PARAM to VALUE in url and return the new url.
 */
function set_param(url, param, value)
{
    var parts = split_url(url);    
    var base = parts[0];

    var param_array = param_array_from_url(parts[1]);
    param_array = set_param_in_array(param_array, param, value);

    return url_from_param_array(base, param_array);
}
