(function() {

	var m_initialized = false;
	var m_store = null;
	var m_sliderCount = 0;

	function afterSlidersReady() {

		--m_sliderCount;
		if( m_sliderCount === 0 ) {

			var cookie = gQuery.cookie( "_drawer_" );
			if( cookie && cookie.length > 0 && cookie != "rys" ) { showPanel( "rys", false, true ); }
			m_initialized = true;
			initPanel();
		}
	};

	function checkPanel( p_element, p_slide ) {

		if( p_element == "rys" && !m_initialized ) { return true; }

		try {

			var lastSelected = gQuery( 'a.selected' );
			if( m_store == p_element ) {

				gQuery.cookie( "_drawer_", "_" );
				if( p_slide == false || (JLG.core.getIEVersion() >= 0 && JLG.core.getIEVersion() < 8) ) {

					gQuery( "#" + m_store + "_div" ).hide();
					lastSelected.removeClass( 'selected' );

			 	} else {

					gQuery( '#drawer_panel' ).slideUp( 250, function() {

						gQuery( "#" + m_store + "_div" ).hide();
						lastSelected.removeClass( 'selected' );
					} );
				}
			} else if( m_store && m_store != p_element ) {

				gQuery.cookie( "_drawer_", p_element );
				if( p_slide === false || (JLG.core.getIEVersion() >= 0 && JLG.core.getIEVersion() < 8) ) {

					gQuery( "#" + m_store + "_div" ).hide();
					lastSelected.removeClass( 'selected' );
					if( !showPanel( p_element, p_slide ) ) { return false; }

				} else {

				 	gQuery( '#drawer_panel' ).slideUp( 250, function() {

						gQuery( "#" + m_store + "_div" ).hide();
						lastSelected.removeClass( 'selected' );
						if( !showPanel( p_element ) ) { return false; }
					} );
				}
			} else {

				gQuery.cookie( "_drawer_", p_element );
				if( !showPanel( p_element, p_slide ) ) { return false; }
				lastSelected.removeClass( 'selected' );
			}
			m_store = (m_store == p_element) ? null : p_element;
		}
		catch( e ) {}
		return true;
	};

	function initPanel() {

		var cookie = gQuery.cookie( "_drawer_" );
		if( cookie && cookie.length > 0 ) {

			if( cookie != "_" ) { checkPanel( cookie, false ); }

		} else {

			checkPanel( "rys", false );
		}
		gQuery( 'ul.main_nav li' ).unbind().click( function() {

			element = gQuery( this ).attr( 'id' );
			checkPanel( element );
		} );
	};

	function rysSlider( p_field, p_prefix, p_width, p_tick, p_min, p_max, p_start, p_end ) {

		if( p_min != p_max ) {

		    // Create the DualSlider
			var pfnV2s = function( p_value ) { return Math.floor( ((p_value - p_min) * p_width) / (p_max - p_min) ); };
			var tick = ( p_tick == 0 ) ? 0 : Math.floor( p_width / (p_max - p_min) );
		    var slider = YAHOO.widget.Slider.getHorizDualSlider(
							YAHOO.util.Dom.get( p_field + "_bg" ), p_field + "_min", p_field + "_max", p_width, tick, [ pfnV2s( p_start ), pfnV2s( p_end ) ] );
			var pfnS2v = function( p_value ) { return Math.round( (p_value * (p_max - p_min)/p_width) + p_min ); };
			var pfnUpdate = function( p_event, p_umin, p_umax ) {

				var minVal = Math.max( p_umin || pfnS2v( slider.minVal ), p_min );
				var maxVal = Math.min( p_umax || pfnS2v( slider.maxVal ), p_max );
				maxVal = Math.max( maxVal, minVal );
				if( minVal == maxVal ) {

					gQuery( "#" + p_field + "_info" ).html( p_prefix + maxVal + ((maxVal >= p_max ) ? "+" : "") );

				} else {
			
					gQuery( "#" + p_field + "_info" ).html( p_prefix + minVal + " - " + p_prefix + maxVal + ((maxVal >= p_max ) ? "+" : "") );
				}
				gQuery( "#" + p_field + "_min_input" ).val( minVal );
				gQuery( "#" + p_field + "_max_input" ).val( maxVal );
				afterSlidersReady();
			};
			++m_sliderCount;
			slider.subscribe( 'ready', function() { pfnUpdate( null, p_start, p_end ); } );
			slider.subscribe( 'change', pfnUpdate );

		} else {

			gQuery( "#" + p_field + "_slider_div" ).hide();
			gQuery( "#" + p_field + "_min_input" ).val( p_start );
			gQuery( "#" + p_field + "_max_input" ).val( p_end );
		}
		gQuery( "#" + p_field + "_min_limit" ).val( p_min );
		gQuery( "#" + p_field + "_max_limit" ).val( p_max );
	};

	function showPanel( p_element, p_slide, p_hide, p_fake ) {

		var element_a = gQuery( "#" + p_element + " a" );
		var element_div = gQuery( "#" + p_element + "_div" );
		var panel = gQuery( '#drawer_panel' );
		if( !element_a || !element_div ) { return false; }
		if( p_hide ) {

			element_div.hide();
			element_a.removeClass( 'selected' );

		} else {

			element_div.show();
			if( p_slide === false || (JLG.core.getIEVersion() >= 0 && JLG.core.getIEVersion() < 8) ) {

				panel.show();
				if( !p_fake ) { element_a.addClass( 'selected' ); }

			} else {

				panel.slideDown( 250, function() { element_a.addClass( 'selected' ); } );
			}
		}
		return true;
	};

	window.SearchBanner = {

		init: function( p_query, p_arrival, p_departure, p_rate, p_beds, p_sleeps ) {

			gQuery( '#checkin_picker' ).val( p_arrival );
			gQuery( '#checkout_picker' ).val( p_departure );
			gQuery( '#rys_query' ).val( p_query );
			gQuery( '#rys_div' ).show();
			gQuery( '#rys' ).show();
			++m_sliderCount;
			showPanel( "rys", false, false, true );
			rysSlider( "rate", "$", 160, 0, p_rate[ 0 ], p_rate[ 1 ], p_rate[ 2 ], p_rate[ 3 ] );
			rysSlider( "beds", "", 160, 1, p_beds[ 0 ], p_beds[ 1 ], p_beds[ 2 ], p_beds[ 3 ] );
			rysSlider( "sleeps", "", 160, 1, p_sleeps[ 0 ], p_sleeps[ 1 ], p_sleeps[ 2 ], p_sleeps[ 3 ] );
			window.page.initDateRangePicker( "refine", "#checkin_picker", "#checkout_picker" );
			afterSlidersReady();
		}
	};

	gQuery( document ).ready( initPanel );
})();
