var item_rotator;

function auto_rotate() {
    item_rotator.next();
};

function TMRotator() {
    this.elements = new Object();
    this.element_list = new Array();
    this.max_items = 0;
    this.current_item = 0;
    this.time_interval = 2000;

    if( arguments[0] ) {
        this.select_function = arguments[0];
    }

    if( arguments[1] ) {
        this.deselect_function = arguments[1];
    }

    this.add_item = function() {
        var element_id = arguments[0];
        var property = arguments[1];

        if( !this.elements[element_id] ) {
            this.elements[element_id] = new Object;
            this.element_list.push( this.elements[element_id] );
            this.elements[element_id].element = document.getElementById( arguments[0] );
            this.elements[element_id].properties = new Object();
            this.elements[element_id].prop_list = new Array();
        }

        if( !this.elements[element_id].properties[property] ) {
            this.elements[element_id].properties[property] = new Object();
            this.elements[element_id].prop_list.push( this.elements[element_id].properties[property] );
            this.elements[element_id].properties[property].property = property;
            this.elements[element_id].properties[property].values = new Array();
        }

        for( var i = 2 ; i < arguments.length ; i ++ ) {
            this.elements[element_id].properties[property].values.push( arguments[i] );
            this.max_items = this.max_items >= this.elements[element_id].properties[property].values.length ? this.max_items : this.elements[element_id].properties[property].values.length;
        }
    };

    this.select = function( item_index ) {
        if( item_index < 0 || item_index >= this.max_items )
            item_index = 0;

        if( this.deselect_function ) {
            this.deselect_function.call( this, this.current_item );
        }

        this.current_item = item_index;

        for( var i = 0 ; i < this.element_list.length ; i ++ ) {
            with( this.element_list[i] ) {
                for( var p = 0 ; p < prop_list.length ; p ++ ) {
                    with( prop_list[p] ) {
                        eval( "element." + property + " = values[item_index];" );
                    }
                }
            }
        }

        if( this.select_function ) {
            this.select_function.call( this, this.current_item );
        }
    };

    this.next = function() {
        var item_index = (this.current_item + 1) % this.max_items;
        this.select( item_index )
    };

    this.prev = function() {
        var item_index = (this.current_item + this.max_items - 1) % this.max_items;
        this.select( item_index )
    };

    this.start_auto_rotation = function() {
        this.interval_id = window.setInterval( auto_rotate, this.time_interval );
        this.select( this.current_item );
    };

    this.stop_auto_rotation = function() {
        if( this.interval_id ) {
            window.clearInterval( this.interval_id );
            delete this.interval_id;
        }
    };

    item_rotator = this;
};




