/*----------------------------------------------------------------------------\|                                Range Class                                  ||-----------------------------------------------------------------------------||                         Created by Erik Arvidsson                           ||                  (http://webfx.eae.net/contact.html#erik)                   ||                      For WebFX (http://webfx.eae.net/)                      ||-----------------------------------------------------------------------------|| Used to  model the data  used  when working  with  sliders,  scrollbars and || progress bars.  Based  on  the  ideas of  the javax.swing.BoundedRangeModel || interface  defined  by  Sun  for  Java;   http://java.sun.com/products/jfc/ || swingdoc-api-1.0.3/com/sun/java/swing/BoundedRangeModel.html                ||-----------------------------------------------------------------------------||                Copyright (c) 2002, 2005, 2006 Erik Arvidsson                ||-----------------------------------------------------------------------------|| Licensed under the Apache License, Version 2.0 (the "License"); you may not || use this file except in compliance with the License.  You may obtain a copy || of the License at http://www.apache.org/licenses/LICENSE-2.0                || - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - || Unless  required  by  applicable law or  agreed  to  in  writing,  software || distributed under the License is distributed on an  "AS IS" BASIS,  WITHOUT || WARRANTIES OR  CONDITIONS OF ANY KIND,  either express or implied.  See the || License  for the  specific language  governing permissions  and limitations || under the License.                                                          ||-----------------------------------------------------------------------------|| 2002-10-14 | Original version released                                      || 2005-10-27 | Use Math.round instead of Math.floor                           || 2006-05-28 | Changed license to Apache Software License 2.0.                ||-----------------------------------------------------------------------------|| Created 2002-10-14 | All changes are in the log above. | Updated 2006-05-28 |\----------------------------------------------------------------------------*/function Range() {this._value = 0;this._minimum = 0;this._maximum = 100;this._extent = 0;this._isChanging = false;}Range.prototype.setValue = function (value) {value = Math.round(parseFloat(value));if (isNaN(value)) return;if (this._value != value) {if (value + this._extent > this._maximum)this._value = this._maximum - this._extent;else if (value < this._minimum)this._value = this._minimum;elsethis._value = value;if (!this._isChanging && typeof this.onchange == "function") this.onchange();}};Range.prototype.getValue = function () {return this._value;};Range.prototype.setExtent = function (extent) {if (this._extent != extent) {if (extent < 0)this._extent = 0;else if (this._value + extent > this._maximum)this._extent = this._maximum - this._value;elsethis._extent = extent;if (!this._isChanging && typeof this.onchange == "function")this.onchange();}};Range.prototype.getExtent = function () {return this._extent;};Range.prototype.setMinimum = function (minimum) {if (this._minimum != minimum) {var oldIsChanging = this._isChanging;this._isChanging = true;this._minimum = minimum;if (minimum > this._value)this.setValue(minimum);if (minimum > this._maximum) {this._extent = 0;this.setMaximum(minimum);this.setValue(minimum)}if (minimum + this._extent > this._maximum)this._extent = this._maximum - this._minimum;this._isChanging = oldIsChanging;if (!this._isChanging && typeof this.onchange == "function")this.onchange();}};Range.prototype.getMinimum = function () {return this._minimum;};Range.prototype.setMaximum = function (maximum) {if (this._maximum != maximum) {var oldIsChanging = this._isChanging;this._isChanging = true;this._maximum = maximum;if (maximum < this._value)this.setValue(maximum - this._extent);if (maximum < this._minimum) {this._extent = 0;this.setMinimum(maximum);this.setValue(this._maximum);}if (maximum < this._minimum + this._extent)this._extent = this._maximum - this._minimum;if (maximum < this._value + this._extent)this._extent = this._maximum - this._value;this._isChanging = oldIsChanging;if (!this._isChanging && typeof this.onchange == "function")this.onchange();}};Range.prototype.getMaximum = function () {return this._maximum;};