Fx.Elements = Fx.Base.extend({

        initialize: function(elements, options){
                this.elements = $$(elements);
                this.parent(options);
        },

        setNow: function(){
                for (var i in this.from){
                        var iFrom = this.from[i], iTo = this.to[i], iCss =
this.css[i], iNow = this.now[i] = {};
                        for (var p in iFrom) iNow[p] = iCss[p].getNow(iFrom[p],
iTo[p], this);
                }
        },

        set: function(to){
                var parsed = {};
                this.css = {};
                for (var i in to){
                        var iTo = to[i], iCss = this.css[i] = {}, iParsed =
parsed[i] = {};
                        for (var p in iTo){
                                iCss[p] = Fx.CSS.select(p, iTo[p]);
                                iParsed[p] = iCss[p].parse(iTo[p]);
                        }
                }
                return this.parent(parsed);
        },

        /*
        Property: start
                Applies the passed in style transitions to each object named
(see example). Each item in the collection is refered to as a numerical string
("1" for instance). The first item is "0", the second "1", etc.

        Example:
                (start code)
                var myElementsEffects = new Fx.Elements($$('a'));
                myElementsEffects.start({
                        '0': { //let's change the first element's opacity and
width
                                'opacity': [0,1],
                                'width': [100,200]
                        },
                        '4': { //and the fifth one's opacity
                                'opacity': [0.2, 0.5]
                        }
                });
                (end)
        */

        start: function(obj){
                if (this.timer && this.options.wait) return this;
                this.now = {};
                this.css = {};
                var from = {}, to = {};
                for (var i in obj){
                        var iProps = obj[i], iFrom = from[i] = {}, iTo = to[i] =
{}, iCss = this.css[i] = {};
                        for (var p in iProps){
                                var parsed = Fx.CSS.parse(this.elements[i], p,
iProps[p]);
                                iFrom[p] = parsed.from;
                                iTo[p] = parsed.to;
                                iCss[p] = parsed.css;
                        }
                }
                return this.parent(from, to);
        },

        increase: function(){
                for (var i in this.now){
                        var iNow = this.now[i], iCss = this.css[i];
                        for (var p in iNow)
this.elements[i].setStyle(p, iCss[p].getValue(iNow[p], this.options.unit, p));
                }
        }

});