function kyanFormMagic() { this.initialCallbacks = [] this.dependency = function( element, target, condition, options ) { // Turn first argument into an array of applicable elements var elements = this.toElementArray(element); // Turn first argument into an array of applicable elements target = this.toFormElement(target); if(!target) {return;} var targetType = target.nodeName.toLowerCase() == 'input' ? target.type.toLowerCase() : target.nodeName.toLowerCase(); switch(targetType) { case 'radio': case 'checkbox': for(var i = 0; i < elements.length; i++) { var callback = this.checkableCallback(target, elements[i], condition); this.addEvent(target, 'click', callback); callback(); } } } this.checkableCallback = function(target, dependent_element, value) { return function(event) { dependent_element.disabled = (target.checked == !value); if(event) { kfm.log(event.type + ' ' + target.checked); } } } this.toElementArray = function(arg) { if(typeof arg == 'object' && arg.length) { var out = []; for(var i = 0; i < arg.length; i++) { out[out.length] = this.toElement(arg[i]); } return out; } else { return [this.toElement(arg)]; } } this.toElement = function(arg) { if(typeof arg == 'string') { return document.getElementById(arg); } else if(arg.nodeName) { return arg; } else { return null; } } this.toFormElement = function(arg) { var element = this.toElement(arg); var nn = element.nodeName ? element.nodeName.toLowerCase() : 'null'; switch(nn) { case 'input': case 'select': case 'textarea': return element; default: return null; } } this.addEvent = function(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, false); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } this.log = function(text) { document.getElementById('log').innerHTML += text; document.getElementById('log').innerHTML += "
"; } } Page Title