(function() {

	var m_initialized = false;
	var m_store = null;
	var m_sliderCount = 0;
	var m_datePickers =	{};

	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 initDateRangePicker( p_name, p_checkin, p_checkout ) {

		// Do we have an existing picker?
		var picker = m_datePickers[ p_name ];
		if( picker ) {

			picker.reset();

		} else {

			// Find the DOM elements
			p_checkin = gQuery( p_checkin );
			p_checkout = gQuery( p_checkout );
			if( p_checkin && p_checkout ) {

				// Initialize the elements
				if( (p_checkin.val() || '').length === 0 ) { p_checkin.val( jgLocale.dateFormat ); }
				if( (p_checkout.val() || '').length === 0 ) { p_checkout.val( jgLocale.dateFormat ); }

				// Create the date picker
				var attrs = {

					left: 0,
					startEl: p_checkin,
					endEl: p_checkout,
					min_span: 3,
					minDate: new Date()
				};
				m_datePickers[ p_name ] = new JLG.date.DateRangePicker( attrs );
			}
		}
	}

	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_tick * 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, 25, 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();
		}
	};

	VacationJournal.ifRentalsChanged( function( p_rentals ) {

		gQuery( ".add_favorite" ).each( function() {

			var el = gQuery( this );
			var id = el.attr( "class" ).match( /add_favorite_(\d+)/ );
			id = (id.length === 0) ? null : id[ id.length - 1 ];
			if( id && gQuery.inArray( id, p_rentals ) >= 0 ) {

				el.children( "a" ).each( function() {

					var child = gQuery( this );
					child.attr( "rel", (child.attr( "rel" ) || "").replace( /active/, "" ) );
				} );
				el.children().hide().filter( ".i_favorite" ).css({ display: "block" });

			} else {

				el.children().show().filter( ".i_favorite,.i_favpend" ).hide();
			}
		} );
	} );

	gQuery( document ).ready( function() {

		CoolLightbox.initialize();
		gQuery( ".add_favorite a[rel*=active]" ).show();
		initPanel();
		initDateRangePicker( "inquire", "#checkin_picker", "#checkout_picker" );
		if( window.sl_rental_ids && window.sl_rental_ids.length > 0 ) {

			gQuery( "body" ).append( "<img src='" +

				gQuery.joinUrl( "/images/sl_ping_results.gif", { rentals: window.sl_rental_ids } ) +
				"' border='0' width='0' height='0' />"
			);
		}

		if( JgUser.flag( "a" ) ) {

			gQuery( ".agent_bar" ).each( function() {

				var jel = gQuery( this );
				var id = /^ab_([0-9]+)$/.exec( jel.attr( "id" ) );
				if( id && id.length > 1 ) {

			 		gQuery.getScript( "/spotlight/agent_bar/" + id[ 1 ] + ".js", null, true );
				}
			} );
		}
	} );
})();

