
/*
 * mol.js
 *
 * Javascript library for commonly needed functions on MOL.
 *
 * $Id: mol.js,v 1.2 2006/06/13 20:39:48 philip Exp $
 *
 * Requires: Prototype 1.4.0.
 *
 */

var mol = {

    grep: function(fn,list) {
        var dest = new Array();
        for(var i = 0; i < list.length; i++) {
            if (fn(list[i])) {
                dest.push(list[i]);
            }
        }
        return dest;
    },

    map: function(fn,list) {
        var dest = new Array();
        for(var i = 0; i < list.length; i++) {
            dest.push(fn(list[i]));
        }
        return dest;
    },

    form_pairs: function(form) {
        var not_runmode = function(el) { return !el.name.match(/^rm/) };
        var get_pair    = function(el) { return Form.Element.serialize(el) };
        var defined     = function(el) { return typeof(el) != 'undefined' };

        var list;
        list = Form.getElements(form);
        list = mol.grep( not_runmode, list);
        list = mol.map( get_pair, list);
        list = mol.grep( defined, list);
        return list;
    },

    seconds_to_time: function(sec) {

        var sec_per_min  = 60;
        var sec_per_hour = 60 * sec_per_min;
        var sec_per_day  = 24 * sec_per_hour;

        var time = new Object();

        time.days    = parseInt(sec / sec_per_day);
        sec         -= (time.days * sec_per_day);

        time.hours   = parseInt(sec / sec_per_hour);
        sec         -= (time.hours * sec_per_hour);

        time.minutes = parseInt(sec / sec_per_min);
        sec         -= (time.minutes * sec_per_min);

        // throw away fractional seconds
        time.seconds = parseInt(sec);

        return time;
    },

    replace_node_contents: function() {
        var parent = arguments[0];

        var children = parent.childNodes;
        for( var i = 0; i < children.length; i++) {
            parent.removeChild(children[i]);
        }

        for (var i = 1; i < arguments.length; i++) {
            parent.appendChild(arguments[i]);
        }
    }
};

