$(document).ready(function(){
    $('#results').show();
    
    /* Results code */
    function getElementInSurroundingContainer(element, expr){
        while (!element.children().is(expr)){
            element = element.parent();
        }
        return  element.children(expr);
    }

    function updateCountries(){
        $.getJSON("/trips/countries", 
            {
                region: $("select#id_region").val(), 
                ajax: 'true'
            }, 
            function(data){
                options = '<option value="">All Countries</option>';
                for (var i=0; i<data.length; i++){
                    options += '<option value="' + data[i].pk + '">' + data[i]['fields'].name + '</option>';
                }
                $("select#id_finder_country").html(options);
            }
        );
    }

    function customRange(input) { 
        var finish_min_date = new Date();
        if ($("#id_start_date").val()){
            finish_min_date = $("#id_start_date").datepicker("getDate");
        }else{
            finish_mid_date = new Date();
        }

        return {
            minDate: (input.id == "id_finish_date" ? finish_min_date : new Date()), 
            maxDate: (input.id == "id_start_date" ? $("#id_finish_date").datepicker("getDate") : null)
        }; 
    } 

    /* updatePagination links will update the pagination links with
     * the new list value
     */
    function updatePaginationLinks(){
        $('.pagination a').each(function(){
            var paginationAnchor = $(this);
            var advancedPattern = /advanced\=(True|False)/;
            var oldHref = paginationAnchor.attr('href');
            var newHref = '';

            if ($("#advanced").val() == 'True'){
                newHref = newHref.replace(advancedPattern, "advanced=True");
            }else{
                newHref = newHref.replace(advancedPattern, "advanced=False");
            }

            paginationAnchor.attr('href', newHref);

        });
    }


    function resetTripCodeSearchBox(){
        $('#id_dossier_code').val('')
    }

    /************************************************************
     * Set up
     ***********************************************************/
    var lessOptionsText = '<img src="' + MEDIA_URL + 'static/images/minus-btn.png" /> Basic Search';
    var moreOptionsText = '<img src="' + MEDIA_URL + 'static/images/plus-btn.png" />  Advanced Search';

    // Slider for duration
    function update_duration_sliders(min_duration, max_duration){
        var max_duration_value = 60;
        var plus = "";

        if (max_duration == max_duration_value){
            plus = "+";
        }
        $('#min_duration').html(min_duration);
        $('#max_duration').html(max_duration + plus );
    }

    var initial_min_duration = $('#id_min_duration').val();
    var initial_max_duration = $('#id_max_duration').val();
    update_duration_sliders(initial_min_duration, initial_max_duration);
    
    $("#duration_range").slider( {
        'animate': true,
        'range': true,
        'values': [initial_min_duration, initial_max_duration],
        'step': 1,
        'min': 1,
        'max': 60,
        'slide': function(event, ui){
            var duration_range = $(this).slider('option', 'values');
            var min_duration = parseInt(duration_range[0]);
            var max_duration = parseInt(duration_range[1]);

            // Inputs
            $('#id_min_duration').val(min_duration);
            $('#id_max_duration').val(max_duration);

            update_duration_sliders(min_duration, max_duration);
        }
    } ); 

    // slider for price range
    function update_price_sliders(min_price, max_price){
        var max_price_value = 5000;
        var currency_symbol = $('#currency_symbol').html();
        var plus = "";

        if (max_price == max_price_value){
            plus = "+";
        }
        $('#min_price').html(currency_symbol + min_price);
        $('#max_price').html(currency_symbol + max_price + plus );
    }

    var initial_min_price = $('#id_min_price').val();
    var initial_max_price = $('#id_max_price').val();
    update_price_sliders(initial_min_price, initial_max_price);

    $("#price_range").slider( {
        'animate': true,
        'range': true,
        'values': [initial_min_price, initial_max_price],
        'step': 100,
        'min': 100,
        'max': 5000,
        'slide': function(event, ui){
            var price_range = $(this).slider('option', 'values') 
            var min_price = parseInt(price_range[0]);
            var max_price = parseInt(price_range[1]);

            // Inputs
            $('#id_min_price').val(min_price);
            $('#id_max_price').val(max_price);
            // Slide handle displays
            update_price_sliders(min_price, max_price);
        }
    } ); 

    // Set initial options view # TODO: put in function
    $('#id_advanced_search_options').hide()
    if ($('#advanced').val() == 'True'){
        $('#id_advanced_search_options').show()
        $('#id_show_advanced_search').html(lessOptionsText)
    }else{
        $('#id_advanced_search_options').hide()
        $('#id_show_advanced_search').html(moreOptionsText)
    }

    $('.brief_trip_description:even').addClass('result_even');
    $('.brief_trip_description:odd').addClass('result_odd');

    resetTripCodeSearchBox();

    /************************************************************
     * Events
     ***********************************************************/
    /* Update country list based on region*/
    $("select#id_region").change(updateCountries);

    /* finder date pickers */
    $("#id_start_date,#id_finish_date").datepicker({ 
        dateFormat : "D, M dd yy",
        beforeShow : customRange,
        buttonImage: "/media-server/static/images/calendar.gif",
        showOn: "both",
        buttonImageOnly: true,
        changeYear: "true",
        changeMonth: "true",
        showButtonPanel : true
    });

    $('#id_show_advanced_search').click(function(e){
        e.preventDefault();
        var advanced_search_options = $('#id_advanced_search_options');

        if (advanced_search_options.is(':hidden')){
            advanced_search_options.show('normal');
            $(this).html(lessOptionsText);
            $('#advanced').val('True');
        }else{
            advanced_search_options.hide('normal');
            $(this).html(moreOptionsText);
            $('#advanced').val('False');
        }
        updatePaginationLinks();
    });

    $("#list_views").tabs({
        cookie: {expires: 30}
    });

    // Column Ordering
    $('#order_by_trip').click(function(e){
        e.preventDefault();
        $('#id_order_by').val('name');
        $('#finder_form').submit();
        return false;
    });

    $('#order_by_country').click(function(e){
        e.preventDefault();
        $('#id_order_by').val('primary_country__name');
        $('#finder_form').submit();
        return false;
    });

    $('#order_by_price').click(function(e){
        e.preventDefault();
        $('#id_order_by').val('min_price__usd');
        $('#finder_form').submit();
        return false;
    });

    $('#order_by_duration').click(function(e){
        e.preventDefault();
        $('#id_order_by').val('duration');
        $('#finder_form').submit();
        return false;
    });

    $('#order_by_start_date').click(function(e){
        e.preventDefault();
        $('#id_order_by').val('departure__start_date');
        $('#finder_form').submit();
        return false;
    });

    $('#order_by_service_level').click(function(e){
        e.preventDefault();
        $('#id_order_by').val('service_level__rating');
        $('#finder_form').submit();
        return false;
    });

    $('#order_by_trip_style').click(function(e){
        e.preventDefault();
        $('#id_order_by').val('trip_style__name');
        $('#finder_form').submit();
        return false;
    });

    // Legacy Code: potentially get rid of
    //
    var lessDetailsText = '<img src="/media-server/static/images/minus-btn.png" /> Collapse';
    var moreDetailsText = '<img src="/media-server/static/images/plus-btn.png" />  Expand';

    $('.view_more').click(function(){
        var extra_description = getElementInSurroundingContainer($(this), '.extra_description');

        if (extra_description.is(':hidden')){
            extra_description.show('normal');
            $(this).html(lessDetailsText);
        }else{
            extra_description.hide('normal');
            $(this).html(moreDetailsText);
        }
        return false;
    });
});
