YAHOO.namespace('smhq');
$(document).ready(function () {
    $('#advq').bind('click', function() {
        if($(this).val() == 'Enter a City, State or Zip Code/Post Code') $(this).val('');
    });

    $('#advq').bind('blur', function() {
        if($(this).val() == '') $(this).val('Enter a City, State or Zip Code/Post Code');
    });
});

function initSlider(slider, data) {
    switch( slider ) {
        case 'value':
            initValueSlider(data);
            break;
        case 'rentalValue':
            initRentalValueSlider(data);
            break;
        case 'bedrooms':
            initBedroomSlider(data);
            break;
        case 'bathrooms':
            initBathroomSlider(data);
            break;
        case 'buildingSize':
            initBuildingSizeSlider(data);
            break;
        default:
            break;
    }
}

function initValueSlider(data) {
    var range = data.max * data.scale,
        tickSize = ( data.scale < 1 ) ? 1 : data.scale,
        bounds = [ data.lower, data.upper ];
        
    var priceSlider = YAHOO.widget.Slider.getHorizDualSlider(
        'priceSlider', 'priceSlider_minHandle', 'priceSlider_maxHandle',
        range, tickSize, bounds
    );

    YAHOO.lang.augmentObject(priceSlider, {
        _highlight : YAHOO.util.Dom.get('priceSliderHighlight'),
        _sliderData: data,

        updateHighlight : function () {
            var delta = this.maxVal - this.minVal;
            if (this.activeSlider === this.minSlider) {
                YAHOO.util.Dom.setStyle(this._highlight, 'left', this.minVal + 'px');
            }
            YAHOO.util.Dom.setStyle(this._highlight, 'width', (delta+10) + 'px');
        },
        updateValues : function () {
            var lowerValue = this.minVal / this._sliderData.scale;
            YAHOO.util.Dom.get('minprice').value = addCommas( lowerValue );
            
            var upperValue = this.maxVal / this._sliderData.scale;
            var upperValueDisplay = addCommas( upperValue );
            if ( upperValue >= this._sliderData.max ) {
                upperValueDisplay = upperValueDisplay + "+";
            }
            YAHOO.util.Dom.get('maxprice').value = upperValueDisplay;
        }
    },true);

    priceSlider.subscribe('change', priceSlider.updateHighlight, priceSlider, true);
    priceSlider.subscribe('change', priceSlider.updateValues, priceSlider, true);

    priceSlider.updateHighlight();
}

function initRentalValueSlider(data) {
    var range = data.max * data.scale,
        tickSize = ( data.scale < 1 ) ? 1 : data.scale,
        bounds = [ data.lower, data.upper ];
    
    var rentalSlider = YAHOO.widget.Slider.getHorizDualSlider(
        'rentalValueSlider', 'rentalValueSlider_minHandle', 'rentalValueSlider_maxHandle',
        range, tickSize, bounds
    );

    YAHOO.lang.augmentObject(rentalSlider, {
        _highlight : YAHOO.util.Dom.get('rentalValueSliderHighlight'),
        _sliderData : data,

        updateHighlight : function () {
            var delta = this.maxVal - this.minVal;
            if (this.activeSlider === this.minSlider) {
                YAHOO.util.Dom.setStyle(this._highlight, 'left', this.minVal + 'px');
            }
            YAHOO.util.Dom.setStyle(this._highlight, 'width', (delta+10) + 'px');
        },
        updateValues : function () {
            var lowerValue = this.minVal / this._sliderData.scale;
            YAHOO.util.Dom.get('minrental').value = addCommas( lowerValue );
            
            var upperValue = this.maxVal / this._sliderData.scale;
            var upperValueDisplay = addCommas( upperValue );
            if ( upperValue >= this._sliderData.max ) {
                upperValueDisplay = upperValueDisplay + "+";
            }
            YAHOO.util.Dom.get('maxrental').value = upperValueDisplay;
        }
    },true);

    rentalSlider.subscribe('change', rentalSlider.updateHighlight, rentalSlider, true);
    rentalSlider.subscribe('change', rentalSlider.updateValues, rentalSlider, true);

    rentalSlider.updateHighlight();
}

function initBedroomSlider(data) {
    var range = data.max * data.scale,
        tickSize = ( data.scale < 1 ) ? 1 : data.scale,
        bounds = [ data.lower, data.upper ];
        
    var bedroomsSlider = YAHOO.widget.Slider.getHorizDualSlider(
        'bedroomsSlider', 'bedroomsSlider_minHandle', 'bedroomsSlider_maxHandle',
        range, tickSize, bounds
    );

    YAHOO.lang.augmentObject(bedroomsSlider, {
        _highlight : YAHOO.util.Dom.get('bedroomsSliderHighlight'),
        _sliderData : data,

        updateHighlight : function () {
            var delta = this.maxVal - this.minVal;
            if (this.activeSlider === this.minSlider) {
                YAHOO.util.Dom.setStyle(this._highlight, 'left', this.minVal + 'px');
            }
            YAHOO.util.Dom.setStyle(this._highlight, 'width', (delta+10) + 'px');
        },
        updateValues : function () {
            var lowerValue = this.minVal / this._sliderData.scale;
            YAHOO.util.Dom.get('minbeds').value = addCommas( lowerValue );
            
            var upperValue = this.maxVal / this._sliderData.scale;
            var upperValueDisplay = addCommas( upperValue );
            if ( upperValue >= this._sliderData.max ) {
                upperValueDisplay = upperValueDisplay + "+";
            }
            YAHOO.util.Dom.get('maxbeds').value = upperValueDisplay;
        }
    },true);

    bedroomsSlider.subscribe('change', bedroomsSlider.updateHighlight, bedroomsSlider, true);
    bedroomsSlider.subscribe('change', bedroomsSlider.updateValues, bedroomsSlider, true);

    bedroomsSlider.updateHighlight();
}

function initBathroomSlider(data) {
    var range = data.max * data.scale,
        tickSize = ( data.scale < 1 ) ? 1 : data.scale,
        bounds = [ data.lower, data.upper ];
        
    var bathroomsSlider = YAHOO.widget.Slider.getHorizDualSlider(
        'bathroomsSlider', 'bathroomsSlider_minHandle', 'bathroomsSlider_maxHandle',
        range, tickSize, bounds
    );

    YAHOO.lang.augmentObject(bathroomsSlider, {
        _highlight : YAHOO.util.Dom.get('bathroomsSliderHighlight'),
        _sliderData : data,

        updateHighlight : function () {
            var delta = this.maxVal - this.minVal;
            if (this.activeSlider === this.minSlider) {
                YAHOO.util.Dom.setStyle(this._highlight, 'left', this.minVal + 'px');
            }
            YAHOO.util.Dom.setStyle(this._highlight, 'width', (delta+10) + 'px');
        },
        updateValues : function () {
            var lowerValue = this.minVal / this._sliderData.scale;
            YAHOO.util.Dom.get('minbaths').value = addCommas( lowerValue );
            
            var upperValue = this.maxVal / this._sliderData.scale;
            var upperValueDisplay = addCommas( upperValue );
            if ( upperValue >= this._sliderData.max ) {
                upperValueDisplay = upperValueDisplay + "+";
            }
            YAHOO.util.Dom.get('maxbaths').value = upperValueDisplay;
        }
    },true);

    bathroomsSlider.subscribe('change', bathroomsSlider.updateHighlight, bathroomsSlider, true);
    bathroomsSlider.subscribe('change', bathroomsSlider.updateValues, bathroomsSlider, true);

    bathroomsSlider.updateHighlight();
}

function initBuildingSizeSlider(data) {
    var range = data.max * data.scale,
        tickSize = ( data.scale < 1 ) ? 1 : data.scale,
        bounds = [ data.lower, data.upper ];

    var buildingSizeSlider = YAHOO.widget.Slider.getHorizDualSlider(
        'buildingSizeSlide', 'buildingSizeSlider_minHandle', 'buildingSizeSlider_maxHandle',
        range, tickSize, bounds
    );

    YAHOO.lang.augmentObject(buildingSizeSlider, {
        _highlight : YAHOO.util.Dom.get('buildingSizeSlideHighlight'),
        _sliderData : data,

        updateHighlight : function () {
            var delta = this.maxVal - this.minVal;
            if (this.activeSlider === this.minSlider) {
                YAHOO.util.Dom.setStyle(this._highlight, 'left', this.minVal + 'px');
            }
            YAHOO.util.Dom.setStyle(this._highlight, 'width', (delta+10) + 'px');
        },
        updateValues : function () {
            var lowerValue = this.minVal / this._sliderData.scale;
            YAHOO.util.Dom.get('minbuildingsize').value = addCommas( lowerValue );
            
            var upperValue = this.maxVal / this._sliderData.scale;
            var upperValueDisplay = addCommas( upperValue );
            if ( upperValue >= this._sliderData.max ) {
                upperValueDisplay = upperValueDisplay + "+";
            }
            YAHOO.util.Dom.get('maxbuildingsize').value = upperValueDisplay;
        }
    },true);

    buildingSizeSlider.subscribe('change', buildingSizeSlider.updateHighlight, buildingSizeSlider, true);
    buildingSizeSlider.subscribe('change', buildingSizeSlider.updateValues, buildingSizeSlider, true);

    buildingSizeSlider.updateHighlight();
}

function addCommas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function prepareSearch() {
	if ( $('#advq').val() == 'Enter a City, State or Zip Code/Post Code') {
		$('#advq').val('');
	}

    var maxPrice = $('#maxprice');
	if ( maxPrice[0] ) {
        maxPrice.val( maxPrice.val().replace(/,|\+/g, '') );
    }

    var maxRental = $('#maxrental');
    if ( maxRental[0] ) {
        maxRental.val( maxRental.val().replace(/,|\+/g, '') );
    }

    var maxBeds = $('#maxbeds');
	if ( maxBeds[0] ) {
        maxBeds.val( maxBeds.val().replace(/,|\+/g, '') );
    }

    var maxBaths = $('#maxbaths');
    if ( maxBaths[0] ) {
        maxBaths.val( maxBaths.val().replace(/,|\+/g, '') );
    }
    
    var maxBuildingSize = $('#maxbuildingsize');
    if ( maxBuildingSize[0] ) {
        maxBuildingSize.val( maxBuildingSize.val().replace(/,|\+/g, '') );
    }

	return true;
}

function resubmitForm(obj) {
    prepareSearch();
    obj.form.submit();
}
