var NXC = NXC || {};
NXC.SlideLists = new Class( {

	Implements: [Options, Events],

	options: {
		'listsCSSSelector': 'ul',
		'listItemsCSSSelector': 'li',
		'togglerCSSSelector': 'a.nxc-slide-lists-toggle',
		'cssClasses': {
			'opened'    : 'nxc-slide-lists-opened',
			'closed'    : 'nxc-slide-lists-closed',
			'openOnLoad': 'nxc-slide-open-on-load'
		},
		'onToggle': function( slide, toggler ) {

		}
	},

	container: false,
	lists: [],

	initialize: function( containerID, options ) {
		this.container = document.id( containerID );

		this.setOptions( options );

		this.lists = this.container.getElements( this.options.listsCSSSelector );

		this.installEvents();
	},

	installEvents: function() {
		this.lists.each( function( list ) {
			var items = list.getChildren( this.options.listItemsCSSSelector );
			items.each( function( item ) {
				var subLists = item.getChildren( this.options.listsCSSSelector );
				if( subLists.length > 0 ) {
					var toggler = item.getElement( this.options.togglerCSSSelector );
					if( $type( toggler ) != 'element' ) {
						toggler = item;
					}

					var slideContent = subLists[0];
					var slide = new Fx.Slide( slideContent );
					if( subLists[0].hasClass( this.options.cssClasses.openOnLoad ) === false ) {
						slide.hide();
					}

					toggler.store( 'subListsSlide', slide ).addEvent( 'click', function( e ) {
						//not needed for current version of xhtml code
						//e.stop();
						if( e.target === toggler ) {
							slide.toggle().chain( function() {
								if( slide.wrapper.getStyle( 'height' ).toInt() > 0 ) {
									slide.wrapper.setStyle( 'height', 'auto' );
								}
	
								toggler.removeClass( this.options.cssClasses.opened ).removeClass( this.options.cssClasses.closed );
								toggler.addClass( ( slide.open ) ? this.options.cssClasses.opened : this.options.cssClasses.closed );
	
								this.fireEvent( 'toggle', [ slide, toggler ] );
							}.bind( this ) );
						}
					}.bind( this ) );
				}
			}.bind( this ) );
		}.bind( this ) );
	}
} );

