var UniProductSelector = Class.create( {
    init: function() {
        this.dependencies = {};
        this.url = document.location.href;
    },

    displayData: function( key, data ) {
        var target = $(key);

        if( ! target )
            return;

        target.innerHTML = '';
        var ul = new Element('ul');
        target.appendChild( ul );

        var deps = this.dependencies[key];

        data.each( function( entry ) {
            var li = new Element('li');
            var a = new Element('a');
            a.update(entry.label);

            a.href = entry.url;
            ul.appendChild(li);
            li.appendChild(a);
            ul.appendChild(document.createTextNode(' '));

            if( entry.selected )
                li.addClassName( 'selected' );
        } );

        this.initializeStep( key );
    },

    initializeAll: function() {
        var up = this;

        Object.keys( this.dependencies ).each( function( key ) {
            up.initializeStep( key );
        } );
    },

    initializeStep: function( name ) {
        var region = $(name);

        if( region ) {
            var deps = this.dependencies[name];
            var nodes = region.getElementsByTagName( 'a' );

            for( i = 0; nodes.length > i; ++i ) {
                this.registerClick( $(nodes[i]), deps );
            }
        }
    },

    registerClick: function( a, deps ) {
        Event.observe( a, 'click', function( e ) {
            var link = Event.element( e );

            var selection = $(link.parentNode.parentNode).getElementsByClassName('selected');
            for( i = 0; selection.length > i; ++i ) {
                $(selection[i]).removeClassName( 'selected' );
            }

            $(a.parentNode).addClassName( 'selected' );

            new Ajax.Updater( $('product-listing'), link.href, {
                method: 'post',
                parameters: { requested: deps.join(',') },
                evalScripts: true
            } );

            e.stop();
            return false;
        } );
    }
} );

