}
}
+/**
+ * Get the value of the 'virtual form element' with a particular name. That is,
+ * abstracts away the difference between a normal form element, like a select
+ * which is a single HTML element with a .value property, and a set of radio
+ * buttons, which is several HTML elements.
+ *
+ * @param form a HTML form.
+ * @param master the name of an element in that form.
+ * @return the value of that element.
+ */
+function get_form_element_value(form, name) {
+ var element = form[name];
+ if (!element) {
+ return null;
+ }
+ if (element.tagName) {
+ // Ordinarly thing like a select box.
+ return element.value;
+ }
+ // Array of things, like radio buttons.
+ for (var j = 0; j < element.length; j++) {
+ var el = element[j];
+ if (el.checked) {
+ return el.value;
+ }
+ }
+ return null;
+}
+
+
+/**
+ * Set the disabled state of the 'virtual form element' with a particular name.
+ * This abstracts away the difference between a normal form element, like a select
+ * which is a single HTML element with a .value property, and a set of radio
+ * buttons, which is several HTML elements.
+ *
+ * @param form a HTML form.
+ * @param master the name of an element in that form.
+ * @param disabled the disabled state to set.
+ */
+function set_form_element_disabled(form, name, disabled) {
+ var element = form[name];
+ if (!element) {
+ return;
+ }
+ if (element.tagName) {
+ // Ordinarly thing like a select box.
+ element.disabled = disabled;
+ }
+ // Array of things, like radio buttons.
+ for (var j = 0; j < element.length; j++) {
+ var el = element[j];
+ el.disabled = disabled;
+ }
+}
function lockoptionsall(formid) {
var form = document.forms[formid];
- var dependons = eval(formid+'items');
- var tolock = Array();
+ var dependons = eval(formid + 'items');
+ var tolock = [];
for (var dependon in dependons) {
// change for MooTools compatibility
if (!dependons.propertyIsEnumerable(dependon)) {
continue;
}
- var master = form[dependon];
- if (master === undefined) {
+ if (!form[dependon]) {
continue;
}
for (var condition in dependons[dependon]) {
var lock;
switch (condition) {
case 'notchecked':
- lock = !master.checked; break;
+ lock = !form[dependon].checked; break;
case 'checked':
- lock = master.checked; break;
+ lock = form[dependon].checked; break;
case 'noitemselected':
- lock = master.selectedIndex==-1; break;
+ lock = form[dependon].selectedIndex == -1; break;
case 'eq':
- lock = master.value==value; break;
+ lock = get_form_element_value(form, dependon) == value; break;
default:
- lock = master.value!=value; break;
+ lock = get_form_element_value(form, dependon) != value; break;
}
for (var ei in dependons[dependon][condition][value]) {
// change for MooTools compatibility
continue;
}
var eltolock = dependons[dependon][condition][value][ei];
- if (tolock[eltolock] != null){
- tolock[eltolock] =
- lock || tolock[eltolock];
+ if (tolock[eltolock] != null) {
+ tolock[eltolock] = lock || tolock[eltolock];
} else {
tolock[eltolock] = lock;
}
}
}
}
- for (var el in tolock){
+ for (var el in tolock) {
// change for MooTools compatibility
if (!tolock.propertyIsEnumerable(el)) {
continue;
}
- var formelement = form[el];
- if ((formelement === undefined) || (formelement.disabled === undefined)) {
- continue;
- }
- formelement.disabled = tolock[el];
+ set_form_element_disabled(form, el, tolock[el]);
}
return true;
}
if (!dependons.propertyIsEnumerable(dependon)) {
continue;
}
- var master = form[dependon];
- if (master === undefined) {
+ var masters = form[dependon];
+ if (!masters) {
continue;
}
- master.formid = formid;
- master.onclick = function() {return lockoptionsall(this.formid);};
- master.onblur = function() {return lockoptionsall(this.formid);};
- master.onchange = function() {return lockoptionsall(this.formid);};
+ if (!masters[0]) {
+ // If master is radio buttons, we get an array, otherwise we don't.
+ // Convert both cases to an array for convinience.
+ masters = [masters];
+ }
+ for (var j = 0; j < masters.length; j++) {
+ master = masters[j];
+ master.formid = formid;
+ master.onclick = function() {return lockoptionsall(this.formid);};
+ master.onblur = function() {return lockoptionsall(this.formid);};
+ master.onchange = function() {return lockoptionsall(this.formid);};
+ }
}
- for (var i = 0; i < form.elements.length; i++){
+ for (var i = 0; i < form.elements.length; i++) {
var formelement = form.elements[i];
if (formelement.type=='reset') {
formelement.formid = formid;
var classfound = false;
var child = start.childNodes[i];
if((child.nodeType == 1) &&//element node type
- (elementClass && (typeof(child.className)=='string'))){
+ (elementClass && (typeof(child.className)=='string'))) {
var childClasses = child.className.split(/\s+/);
- for (var childClassIndex in childClasses){
- if (childClasses[childClassIndex]==elementClass){
+ for (var childClassIndex in childClasses) {
+ if (childClasses[childClassIndex]==elementClass) {
classfound = true;
break;
}
Adds or removes the "hide" class for the specified elements depending on boolean hide.
*/
function elementShowAdvanced(elements, show) {
- for (var elementIndex in elements){
+ for (var elementIndex in elements) {
element = elements[elementIndex];
element.className = element.className.replace(new RegExp(' ?hide'), '')
if(!show) {
}
var formelements = button.form.elements;
// Fixed MDL-10506
- for (var i = 0; i < formelements.length; i++){
- if (formelements[i] && formelements[i].name && (formelements[i].name=='mform_showadvanced')){
+ for (var i = 0; i < formelements.length; i++) {
+ if (formelements[i] && formelements[i].name && (formelements[i].name=='mform_showadvanced')) {
formelements[i].value = buttontext;
}
}
}
}
-function getElementsByClassName(oElm, strTagName, oClassNames){
+function getElementsByClassName(oElm, strTagName, oClassNames) {
var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
var arrRegExpClassNames = new Array();
- if(typeof oClassNames == "object"){
- for(var i=0; i<oClassNames.length; i++){
+ if(typeof oClassNames == "object") {
+ for(var i=0; i<oClassNames.length; i++) {
arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
}
}
}
var oElement;
var bMatchesAll;
- for(var j=0; j<arrElements.length; j++){
+ for(var j=0; j<arrElements.length; j++) {
oElement = arrElements[j];
bMatchesAll = true;
- for(var k=0; k<arrRegExpClassNames.length; k++){
- if(!arrRegExpClassNames[k].test(oElement.className)){
+ for(var k=0; k<arrRegExpClassNames.length; k++) {
+ if(!arrRegExpClassNames[k].test(oElement.className)) {
bMatchesAll = false;
break;
}
}
- if(bMatchesAll){
+ if(bMatchesAll) {
arrReturnElements.push(oElement);
}
}