function set_value(object, val) {
    find_control(object).value = val;
}

function find_offset(object) {
    var x = 0;
    var y = 0;
    while(object != null) {
        x = x + object.offsetLeft;
        y = y + object.offsetTop;
        object = object.offsetParent;
    }
    return [x, y];
}

function inject_innerhtml(div_id, html) {
    divv = find_control(div_id);
    divv.innerHTML = html;
}

function toggle_block_display(element) {
    var ctl = find_control(element);
    if (ctl == null) {
        alert("Control not found: "+element)
    } else {
        if (ctl.style.display=="none") {
            ctl.style.display="block";
        } else {
            ctl.style.display="none";
        }
    }
}

function toggle_std_display(element) {
    var ctl = find_control(element);
    if (ctl == null) {
        alert("Control not found: "+element)
    } else {
        if (ctl.style.display=="none") {
            ctl.style.display="";
        } else {
            ctl.style.display="none";
        }
    }
}

function toggle_block_display2(element, element2) {
    toggle_block_display(element);
    toggle_block_display(element2);
}

function toggle_std_display2(element, element2) {
    toggle_std_display(element);
    toggle_std_display(element2);
}

function toggle_block_display3(element, element2, element3) {
    toggle_block_display(element);
    toggle_block_display(element2);
    toggle_block_display(element3);
}

function toggle_collapsible(id, url) {
    if (this.document.all['div_'+id].style.display=="none") {
        this.document.all['div_'+id].style.display="block";
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open('GET',url,true);
        xmlhttp.onload = function(event) {
            alert(event.target.responseText);
        };
        xmlhttp.send(null);
    } else {
        this.document.all['div_'+id].style.display="none";
    }
}

function find_control2(form, name) {
    for(var j=0; j<form.elements.length; j++) {
        var elem = form.elements[j];
        if (elem != undefined && (elem.name == name || elem.id == name)) {
            return elem;
        }
    }
    return null;
}

function find_control(name) {
    for(var i=0; i<document.forms.length; i++) {
        var found = find_control2(document.forms[i], name);
        if (found != null)
            return found;
    }
    var elems = document.getElementsByName(name);
    if (elems.length > 0) {
        return elems.item(0);
    }
    var elem = document.getElementById(name);
    return elem;
}


function find_form(name) {
    for(var i=0; i<document.forms.length; i++) {
	if (document.forms[i].name == name) {
	    return document.forms[i];
	}
    }
    return find_control(name);
}

function do_filter(filter_select, dest_select, items) {
    var master = find_control(filter_select);
    var slave = find_control(dest_select);
    var ix = master.selectedIndex;
    var key = master.options[ix].value;
    var limit = slave.length;
    for (var i=0; i<limit; i++)
        slave.remove(0);
    for (var i=0; i<items.length; i++) {
        if (items[i][2] == key || items[i][2] == '') {
            var opt = new Option(items[i][1],items[i][0]);
            slave.add(opt, undefined);
        }
    }
}

function gen_password(field_name, pass_len) {
    var pass = '';
    var str = '345789ABCDEFHKLMNPQRSTUVWXYacdefhkmnopqrstuvwxyz';
    for(var i=0; i<pass_len; i++) {
        var r = Math.ceil(Math.random()*str.length);
        pass = pass + str.charAt(r);
    }
    find_control(field_name).value = pass;
    var c2 = find_control(field_name+"2");
    if (c2 != null) {
        c2.value = pass;
    }
}
