function number_format(number, decimals, dec_point, thousands_sep) {
    // Formats a number with grouped thousands
    //
    // version: 1006.1915
    // discuss at: http://phpjs.org/functions/number_format    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival    // +      input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +   improved by: davook
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Jay Klehr
    // +   improved by: Brett Zamir (http://brett-zamir.me)    // +      input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Theriault
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);    // *     returns 9: '1'
    // *    example 10: number_format('1.20', 2);
    // *    returns 10: '1.20'
    // *    example 11: number_format('1.20', 4);
    // *    returns 11: '1.2000'    // *    example 12: number_format('1.2000', 3);
    // *    returns 12: '1.200'
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;};
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);}
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }return s.join(dec);
}

(function($){

    $.widget('ui.zoara_rangeslider', {
	  _init: function(){
		var sliderDiv = $(this.element);
		var callback = this.options.callback;
		var slide_callback = this.options.slide_callback;
		var custom_wrapper = this.options.custom_wrapper;
		var margin_left = this.options.margin_left;
		var prefix = this.options.prefix;
            var min_input_name = this.options.min_input_name;
            var max_input_name = this.options.max_input_name;
		
		sliderDiv.wrap('<div class="'+custom_wrapper+'"></div>');
		var textDiv = $('<div class="sliderResults" />').insertAfter(sliderDiv.parent());
		var minBox = $('<input type="text" class="minAmount" />').appendTo(textDiv)
		    .val(prefix+this.options.values[0].toString()).change(function(e){
			  var numeric_value = this.value.replace(/[^0-9\.]/, '');
			  sliderDiv.slider('values', 0, numeric_value);
			  this.value = prefix+numeric_value.toString();
		    });
		var maxBox = $('<input type="text" class="maxAmount" />').appendTo(textDiv)
		    .val(prefix+number_format(this.options.values[1]).toString()).change(function(e){
			  var numeric_value = this.value.replace(/[^0-9\.]/, '');
			  sliderDiv.slider('values', 1, numeric_value);
			  this.value = prefix+numeric_value.toString();
		    });
		minBox.attr('name', min_input_name);
            maxBox.attr('name', max_input_name);
		if(this.options.values[0] == 0 && this.options.values[1] == 0){
		    this.options.values[1] = 1;
		    this.options.max = 1;
		}
		
		sliderDiv.slider({
		    values: this.options.values,
		    min: this.options.min,
		    max: this.options.max,
		    step: this.options.step,
		    range: true,
		    change: callback,
		    slide: function(e, ui){
			  var index = $(ui.handle).prevAll().length;
			  if(index == 1){//Min handle
				minBox.val(prefix+number_format(ui.value).toString());
			  } else {//Max handle
				maxBox.val(prefix+number_format(ui.value).toString());
			  }
			  
			  if(slide_callback){
				slide_callback(e, ui);
			  }
		    }
		});
		
		var width = sliderDiv.outerWidth() || sliderDiv.css('width');
		if(width){
		    textDiv.css('width', width);
		}
	  }
    });
    $.extend($.ui.zoara_rangeslider, {
	  defaults: {
		callback: null,
		slide_callback: false,
		margin_left: 0,
		custom_wrapper: 'slider-wrapper',
		values: [0,100],
            min_input_name:'min_value',
            max_input_name:'max_value',
		min: 0,
		max: 100,
		step: 1,
		prefix: ''
	  }
    });
})(jQuery);