var Solr_sliders = [];

FP_Solr_Filter_Slider = Class.create({
    initialize : function(attribute_code, min, max, values)
    {
        // Element
        var element_id = 'slider-' + attribute_code,
        delta = 0,
        i = 0,
        cSliderValues = [min, max],//Cache Slider values
        initValues = [min, max],        // ... and initial values
        range = [];
        
        // Create dynamic ranges depending on the max value

        if(parseInt(min,10) || parseInt(max,10)) {    // Check if min & max are num values
            min = parseInt(min,10);
            max = parseInt(max,10);
            range.push(min);
            // > 100000
            if(max-min > 100000) {  // max is broken in this case, just a performance helper
                delta = 50000;
            }
            // > 1000
            else if(max-min > 1000) {
                delta = 50;
            }
            // > 100
            else if(max-min > 100) {
                delta = 10;
            } else {
                delta = 5;
            }
            for(i = delta; i < max; i += delta) {
                if(i> min && i != min && i != max) {
                    range.push(i);
                }
            }
            range.push(max);
        } else {
            range = $R(min, max);
        }

        // Already existing values?
        if(values != undefined && values.length == 2 && min <= values[0] && max >= values[1]) {
            // Yep, let's change the slider handles
            var startValues = [values[0], values[1]];
            // ... aaand put it in our filter array
            Event.observe(document, 'dom:loaded', function() {
                Solr.filters[attribute_code] = values;
            });
        } else {
            var startValues = [min, max];
        }

        var slider = new Control.Slider($$('#' + element_id + ' .handle'), $$('#' + element_id + ' .slider-bar')[0], {
            restricted: true,
            spans: $$('#' + element_id + ' .hotzone'),
            range: $R(min, max),
            sliderValue: startValues,
            values: range,
            onSlide: function(value) {
                if(value[0] != undefined && value[0] < max) {
                    $$('#' + element_id + ' .label.min .value').each(function(element) {
                        element.update(value[0]);
                    });
                }
                if(value[1] != undefined && value[1] > min) {
                    $$('#' + element_id + ' .label.max .value').each(function(element) {
                        element.update(value[1]);
                    });
                }
                
                if(value[0] == max){
                    slider.values[0] = slider.allowedValues[slider.allowedValues.length-2];
                    $$('#' + element_id + ' .label.min .value').each(function(element) {
                        element.update(slider.values[0]);
                    });

                }
                if(value[1] == min){
                    slider.values[1] = slider.allowedValues[1];
                    $$('#' + element_id + ' .label.max .value').each(function(element) {
                        element.update(slider.values[1]);
                    });
                }
            },
            onChange: function(value) {
                if(value[0] != undefined && value[0] < max) {
                    $$('#' + element_id + ' .label.min .value').each(function(element) {
                        element.update(value[0]);
                    });
                }
                if(value[1] != undefined && value[1] > min) {
                    $$('#' + element_id + ' .label.max .value').each(function(element) {
                        element.update(value[1]);
                    });
                }
                if( value[0] < max && value[1] > min){
                    //: remove filter if initial values are set
                    if (value[0] == initValues[0] && value[1] == initValues[1]) {
                        delete Solr.filters[attribute_code];
                        Solr.processQuery();
                    } else if (cSliderValues[0] != value[0] || cSliderValues[1] != value[1]) {
                        Solr.filters[attribute_code] = value;
                        Solr.processQuery();
                    }
                
                    //: cache "old" values
                    if (value[0] != undefined){
                        cSliderValues[0] = value[0];
                    }
                	
                    if (value[1] != undefined){
                        cSliderValues[1] = value[1];
                    }
                	
                }
            }
        });
        
        Solr_sliders.push(slider);
    }
});
