var Joie = function(){
	return {
		prepare: function(){
			Skinbox.disableSetup();
		}, 
		
		init: function(){
			Skinbox.init( { storage_ns: 'joie', box: { modal: true } } );
		},
		
		shides: function(){
			var welcomeImage = false;
			
			Skinbox.$store('#welcome-store .trigger-on', 'welcome_trigger_on');
			Skinbox.$store('#welcome-store .trigger-off', 'welcome_trigger_off');
			Skinbox.$store('#shide-trigger', 'welcome_trigger');
			
			Skinbox.shide( {
				ns: 'welcome',
				element: '.welcomeleft, .welcome > a, .welcome > img, .welcome > div:not(.hideit)',
				trigger: '.welcome .hideit',
				callback: function($, opts, visible){
					if( visible )
					{
						Skinbox.$switch('welcome_trigger', 'welcome_trigger_off', 'welcome_trigger_on');
					}
					else
					{
						Skinbox.$switch('welcome_trigger', 'welcome_trigger_on', 'welcome_trigger_off');
					}
				},
				
				complete: function($, opts, visible){
					if( visible )
					{
						if( welcomeImage !== false )
						{
							$('.welcome').css('background-image', welcomeImage);
						}
					}
					else
					{
						if( welcomeImage === false )
						{
							welcomeImage = $('.welcome').css('background-image');
						}
						
						$('.welcome').css('background-image', 'none');
					}
				}
			} );
		},
	
		dropdowns: function(){
			Skinbox.dropdown( {
				element: '#dropdown_1'
			} );
			
			Skinbox.dropdown( {
				element: '#dropdown_2'
			} );
		},
		
		stylePicker: function(){
			Skinbox.stylePicker( {
				defaultStyle: 'blue',
				triggers: '.style-switch > a'
			} );
		},
		
		footerBar: function(){
			Skinbox.fadingFixedElement( {
				element: '#footer-bar',
				fadeInOnHover: true
			} );
		},

		searchBar: function(){
			(function($){
				var state = 'hidden';
				var $queue = $('<div />');
				
				$('#sb-show-search').click( function(){
					if( state == 'hidden' )
					{
						$queue.queue( function(next){
							$('#sb-show-search').addClass('active');
							next();
						} );
						
						$queue.queue( function(next){
							$('#primary_nav .sb-nav-main').fadeOut( { duration: 200, complete: next } );
						} );
						
						$queue.queue( function(next){
							if( $.browser.opera )
							{
								$('body').css('overflow-x', 'hidden');
							}
							
							next();
						} );
						
						$queue.delay(100);
						
						$queue.queue( function(next){
							$('#primary_nav .sb-nav-search').fadeIn( { duration: 200, complete: next } );
						} );
						
						state = 'shown';
					}
					else if( state == 'shown' )
					{
						$queue.queue( function(next){
							$('#sb-show-search').removeClass('active');
							next();
						} );
						
						$queue.queue( function(next){
							$('#primary_nav .sb-nav-search').fadeOut( { duration: 200, complete: next } );
						} );
						
						$queue.delay(100);
						
						$queue.queue( function(next){
							if( $.browser.opera )
							{
								$('body').css('overflow-x', 'auto');
							}
							
							$('#primary_nav .sb-nav-main').fadeIn( { duration: 200, complete: next } );
						} );
												
						state = 'hidden';
					}
				} );
			})(jQuery);
		},
		
		fixSidebar: function(){
			if( jQuery.browser.msie || jQuery.browser.opera )
			{
				return;
			}
			
			if( jQuery('#sb-sidebar').length == 0 )
			{
				return;
			}
			
			Skinbox.fixedSidebar( {
				element: '#sb-sidebar',
				bindTo: '#sb-content'
			} );
		},
		
		sidebarForums: function(){
			(function($){
				if( Skinbox.storage.categories == undefined )
				{
					Skinbox.storage.categories = {};
				}
				
				if( $('.sb-collapse').length == 0 )
				{
					return;
				}
				
				$('.category_block').each( function(){
					var $this = $(this);
					
					if( Skinbox.storage.categories[$this.attr('data-forum')] == undefined )
					{
						Skinbox.storage.categories[$this.attr('data-forum')] = 0;
					}
					
					if( Skinbox.storage.categories[$this.attr('data-forum')] == 0 )
					{
						$this.children('.table_wrap').hide();
					}
					else
					{
						$this.children('.table_wrap').show();
						$this.find('.sb-collapse').addClass('open');
					}
				} );
				
				Skinbox.commit();
				
				$('.category_block .sb-collapse').click( function(){
					var $this = $(this);
					var $category = $this.parent().parent();
					
					if( Skinbox.storage.categories[$category.attr('data-forum')] == 0 )
					{
						$category.children('.table_wrap').slideDown( { duration: 250 } );
						$this.addClass('open');
						var set = 1;
					}
					else
					{
						$category.children('.table_wrap').slideUp( { duration: 250 } );
						$this.removeClass('open');
						var set = 0;
					}
					
					Skinbox.storage.categories[$category.attr('data-forum')] = set;
					Skinbox.commit();
				} );
			})(jQuery);
		},
		
		tabbedBoardIndex: function(){
			(function($){
				$('.sb-bi-tabs a').click( function(){
					var $this = $(this);
					var tabs = {
						'sb-bi-tab-show-rt': 'sb-bi-tab-rt',
						'sb-bi-tab-show-ns': 'sb-bi-tab-ns'
					};
					
					$('.sb-bi-tabs a:visible').removeClass('active');
					$('.sb-bi-tab').hide();
					$('.' + tabs[$this.attr('class')]).show();
					$this.addClass('active');
				} );
			})(jQuery);
		},
		
		customBoxes: function(){
			Skinbox.box( {
				name: 'popbox',
				element: '#sb-popbox',
				trigger: '.trigger-popbox',
				modal: true
			} );
			
			   Skinbox.box( {
               name: 'popbox2',
               element: '#sb-popbox2',
               trigger: '.trigger-popbox2',
			   modal: true
           } );
		},
		
		domBox: function(){
           Skinbox.box( {
               name: 'dombox',
               content: '<div id="dombox-placeholder"></div>',
               trigger: '.trigger-dombox',
               once: true,
			   modal: true
           } );
           
           (function($){
               $('#dombox-placeholder').append($('#sb-dombox'));
           })(jQuery);
       },
		
		lastInfoBalloon: function(){
			(function($){
				$('.topic_list tr[id]:not(.announcement)').each( function(){
					var $this = $(this);
					$this.find('.last_info_trigger').attr('id', $this.attr('id') + '-lit');
					
					Skinbox.balloon( {
						name: 'topic-info-' + $this.attr('id'),
						trigger: '#' + $this.attr('id') + ' .last_info_trigger',
						element: '#' + $this.attr('id') + ' .last_info',
						once: false,
						width: 350
					} );
				} );
			})(jQuery);
		},
		
		descriptionTips: function(){
			(function($){
				// No tips for IE
				if( $.browser.msie )
				{
					return;
				}
				
				$('.sb-category .side-forum_block a[title]').each( function(){
					var $this = $(this);
					
					if( $this.attr('title') != '' )
					{			
						$this.tooltip( {
							effect: 'slide',
							position: 'center right',
							layout: '<div class="tooltip-forum"><span /></div>',
							offset: [30, 0]
						} );
					}
				} );
				
				$('.category_block tr').each( function(){
					var $this = $(this);
					
					var $tip = $this.find('.desc');
					
					if( $tip.length != 0 )
					{
						$tip.css('display', 'none');
						
						var $trigger = $this.find('a:first');
						$trigger.attr('title', $tip.text());
						
						$trigger.tooltip( {
							effect: 'slide',
							position: 'center right',
							layout: '<div class="tooltip-forum"><span /></div>',
							offset: [0, 0]
						} );
					}
				} );
				
				$('.topic_list tr[id]:not(.announcement)').each( function(){
					var $this = $(this);
					
					if( $this.find('.desc').length != 0 )
					{
						var $tip = $('#' + $this.attr('id') + ' .desc:first');
						$tip.css('display', 'none');
						
						var $trigger = $this.find('a.topic_title');
						$trigger.attr('title', $tip.text());
						
						$trigger.tooltip( { 
							effect: 'slide',
							position: 'center right',
							layout: '<div class="tooltip-topic"><span /></div>',
							offset: [0, 0]
						} );
					}
				} );
			})(jQuery);
		}
	};
}();

Joie.prepare();

Skinbox.ready( [
	Joie.init,
	Skinbox.topLink,
	Skinbox.loginBox,
	Skinbox.creditsBox,
	Skinbox.clickableElements,
	Joie.shides,
	Joie.dropdowns,
	Joie.stylePicker,
	Joie.footerBar,
	Joie.searchBar,
	Joie.fixSidebar,
	Joie.sidebarForums,
	Joie.tabbedBoardIndex,
	Joie.customBoxes,
	Joie.lastInfoBalloon,
	Joie.domBox,
	Joie.descriptionTips
] );
