function roundNumber(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
	}

(function() {
    var Event = YAHOO.util.Event ;
    var Dom   = YAHOO.util.Dom ;
    var lang  = YAHOO.lang ;
    var slider ;
    var bg="sliderbg" ;
    var thumb="sliderthumb" ;
    var valuearea="slider-value" ;
    var textfield="slider-converted-value" ;
    var totalSpanId="total" ;
    var total ;

    // The slider can move 0 pixels up and down
    var topConstraint = 0;

    // The slider can move 450 pixels right and left
    var bottomConstraint = 450;

    // Custom scale factor for converting the pixel offset into a real value
    var scaleFactor = 0.02;

    // The amount the slider moves when the value is changed with the arrow
    // keys
    var keyIncrement = 50;

    var tickSize = 50;

    Event.onDOMReady(function() {

        slider = YAHOO.widget.Slider.getHorizSlider(bg, 
                         thumb, topConstraint, bottomConstraint, 50);

        // Sliders with ticks can be animated without YAHOO.util.Anim
        slider.animate = true;

        slider.getRealValue = function() {
        	var x = Math.round(this.getValue() * scaleFactor) + 1 ;
        	return x ;
        };

        slider.subscribe("change", function(offsetFromStart) {

            var valnode = Dom.get(valuearea);
            var fld = Dom.get(textfield);
            var totalSpan = Dom.get(totalSpanId);

            // Display the pixel value of the control
            valnode.innerHTML = offsetFromStart;

            // use the scale factor to convert the pixel offset into a real
            // value
            var actualValue = slider.getRealValue() ;

            // update the text box with the actual value
            fld.value = actualValue ;

            // Update the title attribute on the background.  This helps assistive
            // technology to communicate the state change
            Dom.get(bg).title = "slider value = " + actualValue;
            
            //Update the price
            total = actualValue * 1 + 2 ;
            total = roundNumber(total, 2) ;
            totalSpan.innerHTML = '$' + total + "/mo";

        });

        slider.subscribe("slideStart", function() {
                YAHOO.log("slideStart fired", "warn");
            });

        slider.subscribe("slideEnd", function() {
                YAHOO.log("slideEnd fired", "warn");
            });

        // Listen for keystrokes on the form field that displays the
        // control's value.  While not provided by default, having a
        // form field with the slider is a good way to help keep your
        // application accessible.
        Event.on(textfield, "keydown", function(e) {

            // set the value when the 'return' key is detected
            if (Event.getCharCode(e) === 13) {
                var v = parseFloat(this.value, 10);
                v = (lang.isNumber(v)) ? v : 0;

                // convert the real value into a pixel offset
                slider.setValue(Math.round((v-1)/scaleFactor));
            }
        });
        
        // Use setValue to reset the value to white:
        Event.on("putval", "click", function(e) {
            slider.setValue(100, false); //false here means to animate if possible
        });
        
        // Use the "get" method to get the current offset from the slider's start
        // position in pixels.  By applying the scale factor, we can translate this
        // into a "real value
        Event.on("getval", "click", function(e) {
            YAHOO.log("Current value: "   + slider.getValue() + "\n" + 
                      "Converted value: " + slider.getRealValue(), "info", "example"); 
        });
		
		slider.setValue(50, false, false, false);
    });
})();
