function wizardStep(fromStepNumber, toStepNumber) {
    fromElement = $("step" + fromStepNumber);
    toElement = $("step" + toStepNumber);
    
    if( fromStepNumber < toStepNumber ) {
        slideLeft( fromElement, toElement );
    }
    else
    {
        slideRight( fromElement, toElement );
    }
}

function slideLeft( fromElement, toElement ) {
    new Effect.Move( toElement, {x: 100, mode: 'relative', duration: 0.0, queue: 'front'})
    
    new Effect.Parallel([
        new Effect.Move( fromElement, {sync: true, x: -100, y: 0, mode: 'relative'}),
        new Effect.Opacity( fromElement, {sync: true, from: 1, to: 0} )
    ], {duration: 0.4, queue: 'end'} )

    new Effect.Move( fromElement, {x: 100, y: 0, mode: 'relative', duration: 0.0, queue: 'end'})
    new Effect.Fade( fromElement, {duration: 0.0, queue: 'end'} )
    
    new Effect.Parallel([
        new Effect.Move( toElement, {sync: true, x: -100, y: 0, mode: 'relative'}),
        new Effect.Appear( toElement, {sync: true} )
    ], {duration: 0.4, queue: 'end'} )
    
}

function slideRight( fromElement, toElement ) {
    new Effect.Move( toElement, {x: -100, mode: 'relative', duration: 0.0, queue: 'front'})
    
    new Effect.Parallel([
        new Effect.Move( fromElement, {sync: true, x: 100, y: 0, mode: 'relative'}),
        new Effect.Opacity( fromElement, {sync: true, from: 1, to: 0} )
    ], {duration: 0.4, queue: 'end'} )

    new Effect.Move( fromElement, {x: -100, y: 0, mode: 'relative', duration: 0.0, queue: 'end'})
    new Effect.Fade( fromElement, {duration: 0.0, queue: 'end'} )
    
    new Effect.Parallel([
        new Effect.Move( toElement, {sync: true, x: 100, y: 0, mode: 'relative'}),
        new Effect.Appear( toElement, {sync: true} )
    ], {duration: 0.4, queue: 'end'} )    
}


function wizardFinish(fromStepNumber) {
    fromElement = $("step" + fromStepNumber);
    fromElement.hide();
}

function inTown(value) {
    if( value == 5 || value == 8 || value == 4) {
        new Effect.BlindDown('in-town', {duration: 0.5});
    }
    else {
        new Effect.BlindUp('in-town', {duration: 0.5});
    }
}

function dates(radio_button) {
    if( radio_button.value == "false" ) {
        new Effect.BlindUp('timeframe', {duration: 0.5} );
        new Effect.BlindDown('exact-dates', {duration: 0.5} );
    }
    else {
        new Effect.BlindUp('exact-dates', {duration: 0.5} );
        new Effect.BlindDown('timeframe', {duration: 0.5} );        
    }
}

function price(checkbox) {
    if( checkbox.name == "no_price" ) {
        if ( checkbox.checked ) {
            $('low_price').checked = false;
            $('mid_price').checked = false;
            $('high_price').checked = false;
        }
    }
    else {
        $('no_price').checked = false;
    }
}

function lodgingStyle(selection) {
    value = parseInt( selection.options[selection.selectedIndex].value );

    if( value == 3 || value == 4 || value == 5) {
        $('room-prompt').innerHTML = "&nbsp;&nbsp;&nbsp;Preferred number of rooms:";
    }
    else if( value == 2 ) {
        $('room-prompt').innerHTML = "&nbsp;&nbsp;&nbsp;Preferred number of bedrooms:";
    }
    else {
        $('room-prompt').innerHTML = "&nbsp;&nbsp;&nbsp;Preferred number of rooms or bedrooms:";
    }
}

function guests(selection) {
    if( selection.selectedIndex > 0 ) {
        numberOfGuests = parseInt( selection.options[selection.selectedIndex].value );
        
        numberBedrooms = $('number-bedrooms');
        numberBedrooms.options.length = 1;
        
        numberBeds = $('number-beds');
        numberBeds.length = 1;
        
        for( i = 1; i <= numberOfGuests; i++ ) {
            value = "" + i;
            
            numberBedrooms.options[numberBedrooms.length] = new Option( value, value, false, false );
            numberBeds.options[numberBeds.length] = new Option( value, value, false, false );
        }
    }
}

function arrangements(element) {
    if ( element.id == "no-arrangements" && element.checked ) {
        $('lodging_recommendation_number_of_bedrooms').selectedIndex = 0;
        $('lodging_recommendation_number_of_beds').selectedIndex = 0;
    }
    else {
        $('no-arrangements').checked = false;
    }
}

function amenities(checkbox) {
    if( checkbox.name == "no-amenities" ) {
        if ( checkbox.checked ) {
            $('lodging_recommendation_has_hot_tub').checked = false;
            $('lodging_recommendation_has_air_conditioning').checked = false;
            $('lodging_recommendation_has_internet').checked = false;
            $('lodging_recommendation_has_river_access').checked = false;
            $('lodging_recommendation_has_easy_trail_access').checked = false;
        }
    }
    else {
        $('no-amenities').checked = false;
    }
}

function initialDisplaySetup() {
    // In case the user has already gone through the assistant once,
    // and therefore no longer has the default selections, setup the
    // display to make sure the appropriate divs are visible for the
    // selections they have chosen.
    region_dropdown = $('lodging_recommendation_region_id');
    inTown( region_dropdown.options[region_dropdown.selectedIndex].value );

    if( $('lodging_recommendation_is_flexible_dates_true').checked ) {
        dates( $('lodging_recommendation_is_flexible_dates_true') );
    }
    else {
        dates( $('lodging_recommendation_is_flexible_dates_false') );
    }   
}