}
function getLockOptionEndScript(){
+
+ $iname = $this->getAttribute('id').'items';
$js = '<script type="text/javascript">'."\n";
$js .= '//<![CDATA['."\n";
- $js .= "var ".$this->getAttribute('id')."items= {";
- foreach ($this->_dependencies as $dependentOn => $elements){
- $js .= "'$dependentOn'".' : {dependents :[';
- foreach ($elements as $element){
- $elementNames = $this->_getElNamesRecursive($element['dependent']);
- foreach ($elementNames as $dependent){
- if ($dependent != $dependentOn) {
- $js.="'".$dependent."', ";
+ $js .= "var $iname = Array();\n";
+
+ foreach ($this->_dependencies as $dependentOn => $conditions){
+ $js .= "{$iname}['$dependentOn'] = Array();\n";
+ foreach ($conditions as $condition=>$values) {
+ $js .= "{$iname}['$dependentOn']['$condition'] = Array();\n";
+ foreach ($values as $value=>$dependents) {
+ $js .= "{$iname}['$dependentOn']['$condition']['$value'] = Array();\n";
+ $i = 0;
+ foreach ($dependents as $dependent) {
+ $elements = $this->_getElNamesRecursive($dependent);
+ foreach($elements as $element) {
+ if ($element == $dependentOn) {
+ continue;
+ }
+ $js .= "{$iname}['$dependentOn']['$condition']['$value'][$i]='$element';\n";
+ $i++;
+ }
}
}
}
- $js=rtrim($js, ', ');
- $js .= "],\n";
- $js .= "condition : '{$element['condition']}',\n";
- $js .= "value : '{$element['value']}'},\n";
-
- };
- $js=rtrim($js, ",\n");
- $js .= '};'."\n";
+ }
$js .="lockoptionsallsetup('".$this->getAttribute('id')."');\n";
$js .='//]]>'."\n";
$js .='</script>'."\n";
return $js;
}
- function _getElNamesRecursive(&$element, $group=null){
+ function _getElNamesRecursive($element, $group=null){
if ($group==null){
$el = $this->getElement($element);
} else {
* @param string $condition the condition to check
* @param mixed $value used in conjunction with condition.
*/
- function disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value=null){
- $this->_dependencies[$dependentOn][] = array('dependent'=>$elementName,
- 'condition'=>$condition, 'value'=>$value);
+ function disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value='1'){
+ if (!array_key_exists($dependentOn, $this->_dependencies)) {
+ $this->_dependencies[$dependentOn] = array();
+ }
+ if (!array_key_exists($condition, $this->_dependencies[$dependentOn])) {
+ $this->_dependencies[$dependentOn][$condition] = array();
+ }
+ if (!array_key_exists($value, $this->_dependencies[$dependentOn][$condition])) {
+ $this->_dependencies[$dependentOn][$condition][$value] = array();
+ }
+ $this->_dependencies[$dependentOn][$condition][$value][] = $elementName;
}
+
function registerNoSubmitButton($buttonname){
$this->_noSubmitButtons[]=$buttonname;
}
+
function isNoSubmitButton($buttonname){
return (array_search($buttonname, $this->_noSubmitButtons)!==FALSE);
}
+
function _registerCancelButton($addfieldsname){
$this->_cancelButtons[]=$addfieldsname;
}
eval("form.h"+item+".value=0");
}
}
+
+
function lockoptionsall(formid) {
- var lock = new Object();
- var items = eval(formid+'items');
- var form = document.forms[formid];
- for (var master in items){
- var subitems=items[master].dependents;
- var thislock;
- if (items[master].condition=='notchecked'){
- thislock=!form.elements[master].checked;
- } else if (items[master].condition=='checked'){
- thislock=form.elements[master].checked;
- } else if (items[master].condition=='noitemselected'){
- thislock=(form.elements[master].selectedIndex==-1);
- } else if (items[master].condition=='eq'){
- thislock=(form.elements[master].value==items[master].value);
- } else {
- thislock=(form.elements[master].value!=items[master].value);
-
- }
-
- for (var i=0; i<subitems.length; i++) {
- if (lock[subitems[i]]!=null){
- lock[subitems[i]] = thislock || lock[subitems[i]];
- }else{
- lock[subitems[i]] = thislock;
+ var form = document.forms[formid];
+ var dependons = eval(formid+'items');
+ for (var dependon in dependons) {
+ var master = form[dependon];
+ for (var condition in dependons[dependon]) {
+ for (var value in dependons[dependon][condition]) {
+ var lock;
+ switch (condition) {
+ case 'notchecked':
+ lock = !master.checked; break;
+ case 'checked':
+ lock = master.checked; break;
+ case 'noitemselected':
+ lock = master.selectedIndex==-1; break;
+ case 'eq':
+ lock = master.value==value; break;
+ default:
+ lock = master.value!=value; break;
+ }
+ for (var ei in dependons[dependon][condition][value]) {
+ var formelement = form[dependons[dependon][condition][value][ei]];
+ formelement.disabled = lock;
+ }
+ }
}
- }
-
- for (var item in lock) {
- form.elements[item].disabled=lock[item];
- }
- }
- return(true);
+ }
+ return true;
}
function lockoptionsallsetup(formid) {
- var varname = formid.replace(/\-/g, '_');
- var items=eval(varname+'items');
- var form=document.forms[formid];
- for (var i = 0; i < form.elements.length; i++){
- var found=false;
- var formelement = form.elements[i];
- if (formelement.type=='reset'){
- formelement.onclick = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
- formelement.onblur = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
- formelement.onchange = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
- } else {
- for (var master in items){
- if (master==formelement.name){
- formelement.onclick = function(){return lockoptionsall(this.form.getAttribute('id'));};
- formelement.onblur = function(){return lockoptionsall(this.form.getAttribute('id'));};
- formelement.onchange = function(){return lockoptionsall(this.form.getAttribute('id'));};
- break;
- }
- }
- }
- }
-
- return lockoptionsall(formid);
+ var form = document.forms[formid];
+ var dependons = eval(formid+'items');
+ for (var dependon in dependons) {
+ var master = form[dependon];
+ master.onclick = function() {return lockoptionsall(this.form.getAttribute('id'));};
+ master.onblur = function() {return lockoptionsall(this.form.getAttribute('id'));};
+ master.onchange = function() {return lockoptionsall(this.form.getAttribute('id'));};
+ }
+ for (var i = 0; i < form.elements.length; i++){
+ var formelement = form.elements[i];
+ if (formelement.type=='reset') {
+ formelement.onclick = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
+ formelement.onblur = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
+ formelement.onchange = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
+ }
+ }
+ return lockoptionsall(formid);
}