$(document).ready(function() {

    // domready
    $('body').addClass('js');

    $("#price_begin").attr('readonly', true);
    $("#price_end").attr('readonly', true);
    $("#co2_begin").attr('readonly', true);
    $("#co2_end").attr('readonly', true);

    // extract some visual enhancement into a function so we can rebind it after ajax refresh
    decorateResults();

    // create togglable option lists
    var $newUL = $('<ul class="optionlist toggle_optionlist"></ul>');
    var toggleAnchor = '<a href="#" class="toggle_more">Meer</a>';
    var hiddenOptions = null;
    var maxOptions = 3;
    
    $('ul.optionlist:not(.static)').each(function() {
        var list = $(this);
        hiddenOptions = $('li:gt(' + (maxOptions - 1) + ')', list);
        if (hiddenOptions.length > 2) {
            for(var i=0; i<hiddenOptions.length; i++) {
                $(hiddenOptions[i]).addClass('extended');
            }
            
            list.after(toggleAnchor);
        }
    });
    
    $('#filter .toggle_more').toggle(function() {
        $(this).addClass('open').text('Minder').prev().addClass('extended')
    }, function() {
        $(this).removeClass('open').text('Meer').prev().removeClass('extended')
    });

    $('a[href$=pdf]').addClass('pdf');

    var ajaxOptions = {
        target: '#search-results',   // target element(s) to be updated with server response 
        beforeSubmit: function() {
            $('#ajax-loader').show();
        },
        success: function() {
            $('#ajax-loader').hide();
            decorateResults();
            disableCheckBoxes();
        }
    }

    var form = $('#filter form');
    var submitTimer = null;
    
    // bind search 'form' and provide a simple callback function 
    form.ajaxForm(ajaxOptions); 
    
    // Initial ajax form submit to server.
    form.submit();
    
    // searchform
    $('#filter input:checkbox').click(function(e) {
        clearTimeout(submitTimer);
        submitTimer = setTimeout(function() {form.submit()}, 1000);
    });

    // model selector uses JS to navigate
    $('#modelgroup-selector').change(function() {
        window.location.href = this[this.selectedIndex].value;
    });

    // print
    $('a.print').click(function() {
        var siteStatBaseUrl = document.getElementById('sitestat-base-url').value;
        sitestat(siteStatBaseUrl + ".print");
        window.print();
        return false;
    });

    // disable rmouseclick
    document.oncontextmenu = function() {
        return false;
    }

    // price_range slider
    var $price_range = $("#price_range");

    if ($price_range.length > 0) {
        var absMin = parseInt($("#abs_min_price").val());
        var absMax = parseInt($("#abs_max_price").val());

        $price_range.slider({
            range: true,
            min: absMin,
            max: absMax,
            step: 250,
            slide: function(event, ui) {
                // update textboxes with slider value
                $("#price_begin").val(ui.values[0]);
                $("#price_end").val(ui.values[1]);
            },
            stop: function(event, ui) {
                clearTimeout(submitTimer);
                submitTimer = setTimeout(function() {form.submit()},1500);
            }
        });
        // set slider to value from textbox
        var sliderStartPos = parseInt($("#price_begin").val());
        var sliderEndPos = parseInt($("#price_end").val());

        $price_range.slider("values", 1, sliderEndPos);
        $price_range.slider("values", 0, sliderStartPos);

        // update slider if textboxes are changes manually
        $("#price_begin").blur(function() {
            $price_range.slider("values", 0, this.value);
        });
        $("#price_end").blur(function() {
            $price_range.slider("values", 1, this.value);
        });
    }

    // co2_range slider
    $co2_range = $("#co2_range");

    if ($co2_range.length > 0) {
        var absMin = parseInt($("#abs_min_co2").val());
        var absMax = parseInt($("#abs_max_co2").val());

        $co2_range.slider({
            range: true,
            min: absMin,
            max: absMax,
            step: 1,
            slide: function(event, ui) {
                // update textboxes with slider value
                $("#co2_begin").val(ui.values[0]);
                $("#co2_end").val(ui.values[1]);
            },
            stop: function(event, ui) {
                clearTimeout(submitTimer);
                submitTimer = setTimeout(function() {form.submit()},1000);
            }
        });
        // set slider to value from textbox
        var sliderStartPos = parseInt($("#co2_begin").val());
        var sliderEndPos = parseInt($("#co2_end").val());

        $co2_range.slider("values", 1, sliderEndPos);
        $co2_range.slider("values", 0, sliderStartPos);

        // update slider if textboxes are changes manually
        $("#co2_begin").blur(function() {
            $co2_range.slider("values", 0, this.value);
        });
        $("#co2_end").blur(function() {
            $co2_range.slider("values", 1, this.value);
        });

    }


    //Target IE6 and below
    if ($.browser.msie && $.browser.version <= 6)
        $('.image img').each(function(index) {
            var imageHeight = $(this).height();
            $(this).siblings('.mask_btm').height(imageHeight + 7);
        });

    // Detail page popups
    var galleryImages = [];
    var bigImage = $('.body .image img').get(0);

    $('#content_main, .car_detail  a.image').each(function() {
        if (this.href) galleryImages.push(this.href);
    });

    $('#dialog-gallery a.next').click(function() {
        var i = 0;
        for (i = 0; i < galleryImages.length; i++) {
            if (galleryImages[i] == bigImage.src) {
                // last image?
                if (i == (galleryImages.length - 1)) {
                    i = 0;
                } else {
                    i++;
                }
                break;
            }
        }
        // set the URL of the image
        bigImage.src = galleryImages[i];
    });

    $('#dialog-gallery a.prev').click(function() {
        var i = 0;
        for (i = 0; i < galleryImages.length; i++) {
            if (galleryImages[i] == bigImage.src) {
                // first image?
                if (i == 0) {
                    i = galleryImages.length - 1;
                } else {
                    i--;
                }
                break;
            }
        }
        // set the URL of the image
        bigImage.src = galleryImages[i];
    });
    if (galleryImages.length < 2) {
        $("#dialog-gallery .button").remove();
    }
    $.registerDialog('gallery', GalleryDialog);
    $.registerDialog('disclaimer', CenteredDialog);
    $.registerDialog('contact', CenteredDialog);
});

function decorateResults() {

    // list_stock hover
    $('#content_main .list_stock li').hover(function() {
        $(this).addClass('hover');
    }, function() {
        $(this).removeClass('hover');
    });
    
    // keyboard navigation
    $('#content_main .list_stock li a').focus(function() {
        $(this).parents('li').addClass('hover');
    });
    $('#content_main .list_stock li a').blur(function() {
        $(this).parents('li').removeClass('hover');
    });
    
    // add searchparams to anchors so we can link back to the search page from a details page
    var searchParams = escape($('#filter form').formSerialize());
    $('#search-results a').each(function() {
        this.href += "?searchParams="+searchParams;
    });
    
    $('#search-results li.mu:not(:empty)').each(function() {
        var html = $(this).html();
        var separatorAtIndex = html.indexOf(", ", 120);
        if (separatorAtIndex > -1) {
            // there is a komma beyond max position cut off point will be there
            //$(this).html(html.substr(0, separatorAtIndex) + ", ...");
            var array = html.split(", ",3); 
            var mu = "";
            for (var i=0; i < array.length; i++) {
                mu += array[i] + ", ";
            }
            $(this).html(mu + "...");
        }
    });
    
    
    // click on <li> is possible
    $("#content_main .list_stock li a.button").bigTarget();
}

function disableCheckBoxes() {

    var cbsString = $("#availableCheckboxes").text();
    if (cbsString.length > 0) {
    
        var cbs = cbsString.split(',');

        $(".optionlist input").attr("disabled", "disabled")

        $.each(cbs, function() {
            $("#" + this).removeAttr("disabled");
        });

    }
    $('ul.optionlist:not(.static)').each(function() {
        var list = $(this);
        var inputs = list.find('input:visible');
        var disabled = inputs.filter('[disabled]');
        
        if(inputs.length == 3 && disabled.length > 2) {
            var more = list.next();
            if(more[0] && /^a$/i.test(more[0].nodeName)) {
                more.click();
            }
        }
        else {
            // make sure hidden checkboxes are shown if checked
            $('input:checked:not(:visible)', list).parent().parent().next().click();
        }
    });
}
