/**
 * Main JavaScript file (MooTools 1.2 compatible)
 *
 * @package     Slider
 * @version     1.1.1
 *
 * @author      Peter van Westen <peter@nonumber.nl>
 * @link        http://www.nonumber.nl
 * @copyright   Copyright © 2010 NoNumber! All Rights Reserved
 * @license     http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 */

window.addEvent( 'domready', function() {
	// Only do stuff if slider_nav is found
	if ( document.getElements( 'div.slider_slide' ).length ) {
		Slider = new Slider();
	} else {
		// Try again 2 seconds later, because IE sometimes can't see object immediatly
		(function() {
			if ( document.getElements( 'div.slider_slide' ).length ) {
				Slider = new Slider();
			}
		}).delay( 2000 );
	}
});

var Slider = new Class({
	initialize: function()
	{
		var self = this;
		this.docScroll = new Fx.Scroll( window );
		this.containers = new Array();

		document.getElements( 'div.slider_container' ).each( function( container ) {
			var active = 0;

			// add onclick events on slides and show them
			container.getElements( 'div.slider_slide').each( function( el ) {
				if ( typeof( el ) != "undefined" ) {
					self.containers[el.id] = container.id;
					// set first slide as active or active slide
					if ( el.hasClass( 'active' ) ) {
						active = el.id;
					}
					el.addEvent( 'click', function() { self.showSlide( el.id, container.id ); } ).setStyle( 'display', 'block' );
				}
			});

			// add fx
			container.getElements( 'div.slider_content_wrapper').each( function( el ) {
				if ( typeof( el ) != "undefined" ) {
					el.fx = new Fx.Slide( el, { 'duration' : 0, onComplete: function() { self.autoHeight( el.getParent() );self.showItem( el.id.replace( 'item_content_', '' ) ); } } );
					el.setStyle( 'visibility', 'hidden' );
					el.fx.hide();
				}
			});
			container.getElements( 'div.slider_item').each( function( el ) {
				if ( typeof( el ) != "undefined" ) {
					el.fade_in = new Fx.Styles( el, { 'duration' : slider_fade_in_speed } );
					el.fade_out = new Fx.Styles( el, { 'duration' : slider_fade_out_speed } );
					el.fx = new Fx.Slide( el, { 'duration' : slider_speed, onComplete: function() { self.autoHeight( el.getParent() );self.hideContent( el.id.replace( 'item_', '' ) ); } } );
					el.fx.hide();
				}
			});

			// hide content titles
			container.getElements( 'h2.slider_title').each( function( el ) {
				if ( typeof( el ) != "undefined" ) {
					el.setStyle( 'display', 'none' );
				}
			});

			// show only active slide
			self.showSlide( active, container.id, 1 );
		});

		// add onclick events on slide links {slidelink=...}
		document.getElements( 'a.slider_slidelink').each( function( el ) {
			if ( typeof( el ) != "undefined" && el.rel && typeof( self.containers[el.rel] ) != "undefined" ) {
				el.addEvent( 'click', function() {
					self.showSlide( el.rel, self.containers[el.rel], 0, 1, 1 );
				} );
				el.href = 'javascript://';
			}
		});
	},

	showSlide: function( id, c_id, first, open, scroll )
	{
		var self = this;
		var container = document.id( c_id );
		var item = document.id( id );
		var show_slide = ( first || open || ( item && !item.hasClass( 'active' ) ) );

		// remove all active classes
		container.getElements( 'div.slider_slide' ).each( function( el ) {
			if ( typeof( el ) != "undefined" && el ) {
				el.removeClass( 'show' );
			}
		});

		if ( show_slide && typeof( item ) != "undefined" && item ) {
			item.addClass( 'show' );
		}

		var el = document.id( 'item_content_'+id );

		// show active blocks
		if ( typeof( el ) != "undefined" && el && typeof( el.fx ) != "undefined" ) {
			if ( show_slide ) {
				el.setStyle( 'visibility', 'visible' );
				el.fx.cancel();
				// show active content block
				if ( first ) {
					el.fx.show();
					el.getParent().setStyle( 'height', 'auto' );
				} else {
					el.fx.slideIn();
				}
				if ( ( slider_scroll && !first ) || scroll ) {
					if ( slider_scroll == 2 ) {
						( function() { self.docScroll.cancel().toElement( item ); } ).delay( slider_speed );
					} else {
						this.docScroll.cancel().toElement( container );
					}
				}
			}
		}

		// hide all non-active blocks
		container.getElements( 'div.slider_item' ).each( function( el ) {
			if ( typeof( el ) != "undefined" && el && typeof( el.fx ) != "undefined" ) {
				el.fx.cancel();
				if ( show_slide && id && el.id == 'item_'+id ) {
					if ( first ) {
						el.fx.show();
						self.autoHeight( el.getParent() );
					}
				} else {
					el.fx.slideOut();
					el.fade_in.cancel();
					el.fade_out.cancel().start( { 'opacity' : 0 } );
				}
			}
		});
	},

	hideContent: function( id )
	{
		var item = document.id( id );
		if ( typeof( item ) != "undefined" && item && !item.hasClass( 'show' ) ) {
			// hide content block
			var el = document.id( 'item_content_'+id );
			if ( typeof( el ) != "undefined" && el ) {
				el.fx.cancel().hide();
				el.setStyle( 'visibility', 'hidden' );
			}
			item.removeClass( 'active' );
		}
	},

	showItem: function( id )
	{
		var item = document.id( id );
		if ( typeof( item ) != "undefined" && item && item.hasClass( 'show' ) ) {
			item.addClass( 'active' );
			// show item block
			var el = document.id( 'item_'+id );
			if ( typeof( el ) != "undefined" && el ) {
				el.fx.cancel().slideIn();
				el.fade_out.cancel();
				el.fade_in.cancel().start( { 'opacity' : 1 } );
			}
		}
	},

	autoHeight: function( el )
	{
		if ( typeof( el ) != "undefined" && el && el.getStyle( 'height' ) && parseInt( el.getStyle( 'height' ) ) > 0 ) {
			el.setStyle( 'height', 'auto' );
		}
	}
});
