// 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(); } }