// Copyright 1998,1999 Macromedia, Inc. All rights reserved. //Constructs a multiple choice element function MM_inpt(theParent, theName, theInitialValue, theExpectedValue, theIsCorrect, theScore) { // properties this.initialValue = theInitialValue; this.value = ''; this.disabled = true; this.expectedValue = theExpectedValue; this.isCorrect = theIsCorrect; this.score = theScore; this.selected = false; this.isRadioList = false; this._parent = theParent; this._name = theName; this._obj = ''; this.c = new Array(this); // NOTE: choice info stored on the element. // member functions this.init = MM_inptInit; this.reset = MM_inptReset; this.enable = MM_inptEnable; this.disable = MM_inptDisable; this.update = MM_inptUpdate; this.setDisabled = MM_inptSetDisabled; this.redraw = MM_inptRedraw; this.validValue = MM_inptValidValue; this.setValue = MM_inptSetValue; this.setSelected = MM_inptSetSelected; this.changeValue = MM_inptChangeValue; } // Initializes the element, special case radio lists function MM_inptInit() { var rlist, i, pos=0; with (this) { _obj = MM_intFindObject(_parent._self + _name + "Inp"); if (!_obj) { // assume radio rlist = MM_intFindObject(_parent._self + "RadioInp"); if (rlist && rlist.length != null) { for (i in _parent.e) if (i != 'length') // get our element position if (_parent.e[i] == this) break; else pos++; if (pos < rlist.length) _obj = rlist[pos]; // get radio at same position isRadioList = true; } } } } //Resets the element function MM_inptReset() { var isChanged = ''; with (this) { isChanged = (value != initialValue); value = initialValue; _parent.disabled ? disable() : enable(); validValue(); redraw(); if (isChanged && this.onChange != null) onChange(_parent._self+_name, value); } } //Enables the element function MM_inptEnable() { if (this._obj) with (this) { disabled = false; redraw(); } } //Calls the approppriate disable or enable function function MM_inptSetDisabled(theDisabled) { if (theDisabled) this.disable(); else this.enable(); } //Disables the element function MM_inptDisable() { this.disabled = true; this.redraw(); } //Called by onClick event to update this elements value function MM_inptUpdate() { var noJudge = false; with (this) { if (disabled) { if (!isRadioList) redraw(); else for (var i in _parent.e) if (i != 'length') _parent.e[i].redraw(); return; } if (_obj.checked != null) { if (isRadioList && value == _obj.checked) noJudge = true; //IE3.0 oddity changeValue((_obj.checked) ? true : false); //IE3.0 oddity } else changeValue(_parent.allowMultiSel ? !value : true); // call the parent's update _parent.update(noJudge); } } //Sets the checked state of the form element function MM_inptRedraw() { if (this._obj) with (this) { if (_obj.disabled != null) _obj.disabled = disabled; if (isRadioList) { if (value) _obj.checked = true; } else if (_obj.checked != null) _obj.checked = value; } } //Checks the value with the expectedValue function MM_inptValidValue() { this.selected = (this.value == this.expectedValue); return this.selected; } //Internal routine for changing element value function MM_inptChangeValue(theValue) { var i, isChanged = '', isReset = ''; with (this) { isChanged = (value != theValue); if (!_parent.allowMultiSel || isRadioList || _obj.type == 'radio') { 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); } } //Sets the state of the element to the given value function MM_inptSetValue(theValue) { with (this) { changeValue(theValue); _parent.update(true); // update int, but don't judge } } //Sets this element to its selected state function MM_inptSetSelected(theSelected) { if (theSelected) this.setValue(this.expectedValue); else this.setValue(!this.expectedValue); }