// Copyright 1998,1999 Macromedia, Inc. All rights reserved.//Constructs a image button elementfunction MM_ibtn(theParent, theName, theInitialValue,                 theExpectedValue, theIsCorrect, theScore,                 theIsToggle, theStateMask){  // properties  this.initialValue = theInitialValue;  this.value = '';  this.disabled = true;  this.expectedValue = theExpectedValue;  this.isCorrect = theIsCorrect;  this.score = theScore;  this.selected = false;  this.isToggle = theIsToggle;  this._parent = theParent;  this._name = theName;  this._obj = '';  this._stateMask = theStateMask ? theStateMask : '';  this._mouseOver = false;  this._mouseDown = false;  this._filePre = '';  this._fileExt = '';  this.c = new Array(this); // NOTE: choice info stored on the element.  // member functions  this.init = MM_ibtnInit;  this.reset = MM_ibtnReset;  this.enable = MM_ibtnEnable;  this.disable = MM_ibtnDisable;  this.setDisabled = MM_ibtnSetDisabled;  this.update = MM_ibtnUpdate;  this.redraw = MM_ibtnRedraw;  this.validValue = MM_ibtnValidValue;  this.changeValue = MM_ibtnChangeValue;  this.setValue = MM_ibtnSetValue;  this.setSelected = MM_ibtnSetSelected;  this.setIsToggle = MM_ibtnSetIsToggle;}// Initializes the elementfunction MM_ibtnInit() {  var theSrc, extIndex, maskArray, extArray, i;  with (this) {    if (! _stateMask) return;    _obj = MM_intFindObject(_parent._self + _name + "Btn");    if (_obj && _obj.src != null) {      theSrc = _obj.src;      extIndex = theSrc.lastIndexOf(".");      if (extIndex != -1) { // save the extension        _fileExt = theSrc.substring(extIndex, theSrc.length);        theSrc = theSrc.substring(0, extIndex); // remove extension      }      if (theSrc.lastIndexOf("_sel") != -1)        _filePre = theSrc.substring(0, theSrc.lastIndexOf("_sel"));      else if (theSrc.lastIndexOf("_hlt") != -1)        _filePre = theSrc.substring(0, theSrc.lastIndexOf("_hlt"));      else if (theSrc.lastIndexOf("_dis") != -1)        _filePre = theSrc.substring(0, theSrc.lastIndexOf("_dis"));      else        _filePre = theSrc;              // preload the images      maskArray = new Array('s', 'S', 'h', 'H', 'd', 'D');      extArray = new Array("", "_sel", "_hlt", "_sel_hlt", "_dis", "_sel_dis");       for (i=0; i < maskArray.length; i++)        if (_stateMask.indexOf(maskArray[i]) != -1)          MM_preloadImages(_filePre + extArray[i] + _fileExt);  } }}//Resets the elementfunction MM_ibtnReset() {  var isChanged = '';  with (this) {    isChanged = (value != initialValue);    _mouseOver = false;    _mouseDown = false;    value = initialValue;    _parent.disabled ? disable() : enable();    validValue();    redraw();    if (isChanged && this.onChange != null) onChange(_parent._self+_name, value);  }}//Enables the elementfunction MM_ibtnEnable() {  if (this._obj) with (this) {    disabled = false;    redraw();  }}//Disables the elementfunction MM_ibtnDisable() {  this.disabled = true;  this.redraw();}//Calls the approppriate disable or enable functionfunction MM_ibtnSetDisabled(theDisabled) {  if (theDisabled) this.disable();  else this.enable();}//Called by the onClick, onMouseOver, onMouseDown, and onMouseOut// events of the A tag, to change the button image and statefunction MM_ibtnUpdate(theEvent) {  if (!this.disabled) with (this) {    if (theEvent != "onclick") {      if (theEvent == "onmouseover") {        if (_mouseOver) return;        _mouseOver = true;      } else if (theEvent == "onmouseout") {        if (!_mouseDown && !_mouseOver) return;        _mouseDown = false;        _mouseOver = false;      } else if (theEvent == "onmousedown") {        if (_mouseDown) return;        _mouseDown = true;      }      redraw();    } else { // onclick      _mouseDown = false;      changeValue((_parent.allowMultiSel) ? !value : true);      _parent.update();  } }}// Sets the image based on the button statefunction MM_ibtnRedraw() {  if (this._filePre) with (this) {    var imageIndex = 's';    var imageExt = '';    if (disabled) {      imageIndex = 'd';      imageExt += "_dis";    } else if (_mouseOver) {      imageIndex = 'h';      imageExt += "_hlt";    }    if ((value && isToggle) || _mouseDown) {      if (_stateMask.indexOf(imageIndex.toUpperCase()) != -1) {        imageExt = "_sel" + imageExt;      } else if (_stateMask.indexOf(imageIndex) == -1) {        // unselected images not found        if (_stateMask.indexOf('S') != -1) imageExt = "_sel";        else imageExt = '';      }    } else if (_stateMask.indexOf(imageIndex) == -1) imageExt = '';    var currImageName = _obj.src;    var imageName = _filePre + imageExt + _fileExt;    if (currImageName != imageName) _obj.src = imageName;  }}function MM_ibtnValidValue() {  this.selected = (this.value == this.expectedValue);  return this.selected;}function MM_ibtnChangeValue(theValue) {  var i, isChanged = '', isReset = '';  with (this) {    isChanged = (value != theValue);    if (!_parent.allowMultiSel) {      value = theValue;      for (i in _parent.e) if (i != 'length') with (_parent) {        if (e[i] != this) {          isReset = (e[i].value != false);          e[i].value = false;        }        e[i].validValue();        e[i].redraw();        if (e[i] != this && isReset && e[i].onChange != null)           e[i].onChange(e[i]._parent._self+e[i]._name, e[i].value);      }    } else {      value = theValue;      validValue();      redraw();    }    if (isChanged && this.onChange != null) onChange(_parent._self+_name, value);  }}function MM_ibtnSetValue(theValue) {  with (this) {    changeValue(theValue);    _parent.update(true); // update int, but don't judge  }}function MM_ibtnSetSelected(theSelected) {  if (theSelected)    this.setValue(this.expectedValue);  else    this.setValue(!this.expectedValue);}function MM_ibtnSetIsToggle(theIsToggle) {  with (this) {    isToggle = theIsToggle;    redraw();  }}
