function shortNum(num){
	if (num<1000)
		return num;
	else if (num<2000000)
		return Math.round(num/1000) + 'k';
	else
		return Math.round((num/2000000)*100)/100 + 'M';
}

function longNum(num) {
    num += '';
	var splitStr = num.split('.');
	var splitLeft = splitStr[0];
	var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '';
	var regx = /(\d+)(\d{3})/;
	while (regx.test(splitLeft)) {
		splitLeft = splitLeft.replace(regx, '$1' + '.' + '$2');
	}
	return splitLeft + splitRight;
}

function humanize(num, unit, units, end) {
	var text = '';
	if (num >= end) {
		num = end;
		text = ' ';
	}
	if (unit == '$')
		text += ' R$ ' + longNum(num);
	else if (num == 1)
		text += longNum(num) + ' ' + unit;
	else
		text += longNum(num) + ' ' + units;
	return text;
}

jQuery.fn.slidify = function(settings) {
	if (!this.length) {
		return;
	}
	settings = jQuery.extend({
		maxValue: 2000000,
	    steps: 2000000,
	    minValue: 0,
		unit: '$',
		units: 'R',
		helpText: '(Mova os indicadores at&eacute; o valor desejado)',
		roundTo: ''
	}, settings);
	if (settings.helpText)
		$(this).before('<small>' + settings.helpText + '</small>');
	$(this).append('<div class="ui-slider-handle low"></div><div class="ui-slider-handle hi"></div><span class="low"></span><span class="hi"></span>');
	$(this).children('label, input').hide();
	var slideWidth = $(this).width();
	var handles = $(this).children('.ui-slider-handle');
	var handleWidth = $(handles[0]).width();
	var c = $(this).children('input');
	var hiPos = slideWidth - handleWidth;
	var length = settings.maxValue - settings.minValue;
	var lowInput = c[0];
	var lowVal = $(lowInput).val();
	if (lowVal) {
		var distance = Math.round((lowVal/length)*hiPos);
		$(handles[0]).css('left', distance);
		$(this).children('span.low').text(humanize(lowVal, settings.unit, settings.units, settings.maxValue));
	}
	var hiInput = c[1];
	var hiVal = $(hiInput).val();
	//don't try to go beyond the maxValue
	if (hiVal > settings.maxValue) {
		$(hiInput).val('');
		hiVal = '';
	}
	if (hiVal) {
		var distance = Math.round((hiVal/length)*hiPos);
		$(handles[1]).css('left', distance);
		$(this).children('span.hi').text(humanize(hiVal, settings.unit, settings.units, settings.maxValue));
	}
	else {
		$(handles[1]).css('left', hiPos);
		$(this).children('span.hi').text(humanize(settings.maxValue+1, settings.unit, settings.units, settings.maxValue));
	}
	$(this).slider({
		minValue: settings.minValue,
		maxValue: settings.maxValue,
		steps: settings.steps,
		slide:function(e,ui){
			if (settings.roundTo)
				var realVal = Math.round(ui.slider.curValue/settings.roundTo)*settings.roundTo;
			else
				var realVal = ui.slider.curValue;
			if (ui.slider.element.className == 'ui-slider-handle low') {
				$(lowInput).val(realVal);
				$(this).children('span.low').text(humanize(realVal, settings.unit, settings.units, settings.maxValue));
			}
			else if (ui.slider.element.className == 'ui-slider-handle hi') {
				$(hiInput).val(realVal);
				$(this).children('span.hi').text(humanize(realVal, settings.unit, settings.units, settings.maxValue));
			}
		}
	});
}
$(function(){
	$(".sliders").each(function(){
		$(this).slidify({
			roundTo:1000
		});
	});		
});