﻿function setupBasicSearchControls()
{
    // sliders            
    setupSliderControls();                    

    // WA MultiSelects
    $('#ddlPropertyTypes').waMultiSelect({
        nameValueHash: criteriaFormConfig.DropDownOptions['PropertyTypes']
        ,selectedValues: criteriaValues.PropertyTypes
    });                                                                    
    $('#ddlNeighborhoods').waMultiSelect({
        nameValueHash: criteriaFormConfig.DropDownOptions['Neighborhoods']
        ,selectedValues: criteriaValues.Neighborhoods
    });                                       
                                         
}  

function setupMapSearchControls()
{
    $('#mapddlPropertyTypes').waMultiSelect({
        nameValueHash: criteriaFormConfig.DropDownOptions['PropertyTypes']
        ,selectedValues: criteriaValues.PropertyTypes
    });   
    $('#mapddlNeighborhoods').waMultiSelect({
        nameValueHash: criteriaFormConfig.DropDownOptions['Neighborhoods']
        ,selectedValues: criteriaValues.Neighborhoods
    });       
    
    var leftVal = criteriaValues.Price.Min || criteriaFormConfig.Price_Min;
    var rightVal = criteriaValues.Price.Max || criteriaFormConfig.Price_Max;
        
    setupSlider('#mapPriceSlider', 'mapPriceSlider', criteriaFormConfig.Price_Min, criteriaFormConfig.Price_Max, criteriaFormConfig.Price_Increment, leftVal, rightVal,
        {
            formatFunction: formatCurrency            
            ,onChange: function(theSlider,ui) {                                
                // TODO - put the slider value somewhere in the form
                $('#map\\.Price\\.Min').val(theSlider.slider('value',0));
                $('#map\\.Price\\.Max').val(theSlider.slider('value',1));
            }            
        }
    );        
}

/*----------------------------
    Slider Functions
-----------------------------*/    
function setupSliderControls()
{
    // price
    var leftVal = criteriaValues.Price.Min || criteriaFormConfig.Price_Min;
    var rightVal = criteriaValues.Price.Max || criteriaFormConfig.Price_Max;
    
    setupSlider('#priceSlider', 'priceSlider', criteriaFormConfig.Price_Min, criteriaFormConfig.Price_Max, criteriaFormConfig.Price_Increment, leftVal, rightVal,
        {
            formatFunction: formatCurrency            
            ,onChange: function(theSlider,ui) {                                
                // TODO - put the slider value somewhere in the form
                $('#Price\\.Min').val(theSlider.slider('value',0));
                $('#Price\\.Max').val(theSlider.slider('value',1));
            }            
        }
    );              
}
function setupSlider(sliderId, sliderName, sliderMinValue, sliderMaxValue, stepValue, leftHandleValue, rightHandleValue, callbacks)
{   
    callbacks = jQuery.extend({onSlide: null, onChange: null, formatFunction: null}, callbacks);

    $(sliderId).slider({
        min: sliderMinValue
        ,max: sliderMaxValue
        ,stepping: stepValue
        ,range: true
        ,handles: [
            { start: leftHandleValue, min: sliderMinValue, max: sliderMaxValue }
            ,{ start: rightHandleValue, min: sliderMinValue, max: sliderMaxValue }
        ]                
        ,change: function(e,ui) {             
            var $theSlider = criteriaControlsHash[sliderName];                                   
            if(callbacks.onChange)
            {
                callbacks.onChange($theSlider, ui);
            }
        }
        ,slide: function(e,ui) {                           
            updateSliderLabels(criteriaControlsHash[sliderName],callbacks.formatFunction);                     
        }                
    });            
    criteriaControlsHash[sliderName] = $(sliderId);       
    
    updateSliderLabels(criteriaControlsHash[sliderName],callbacks.formatFunction);    
}

function updateSliderLabels(theSlider, formatFunction)
{
    var leftVal = theSlider.slider('value',0);
    var rightVal = theSlider.slider('value',1);
    
    if(formatFunction)
    {
        leftVal = formatFunction(leftVal);
        rightVal = formatFunction(rightVal);
    }
    else
    {
        leftVal = leftVal.toString();  // toString() forces '0' to display for numerics
        rightVal = rightVal.toString();
    }
    
    theSlider.children('.label-1').html(leftVal);
    theSlider.children('.label-2').html(rightVal);
}
