1 function requestUpdate(url, fieldNames, targetName, targetFieldNames, elementPath) { 2 3 // If no field names exist as targets for the update, do not attempt to 4 // update them. 5 6 if (targetFieldNames == "") { 7 return; 8 } 9 10 // Note that XMLHttpRequest access may be denied if Mozilla believes that 11 // this resource's URL and the supplied URL are different. 12 13 var xmlhttp = new XMLHttpRequest(); 14 xmlhttp.open("POST", url, false); 15 16 // Add the element path specification. 17 18 var requestBody = ("element-path=" + elementPath); 19 20 // Send the controlling field value. 21 22 requestBody += addFields(fieldNames, false); 23 requestBody += addFields(targetFieldNames, true); 24 25 // Load the remote document with the given parameters sent as text in the request body. 26 27 xmlhttp.send(requestBody); 28 29 // Parse the result document. 30 31 var newDocument = Sarissa.getDomDocument(); 32 newDocument = (new DOMParser()).parseFromString(xmlhttp.responseText, "text/xml"); 33 34 // Find the definition of the affected field in the result document. 35 36 var newElement = newDocument.getElementById(targetName); 37 var targetElement = document.getElementById(targetName); 38 39 // Insert the new definition into the current document. 40 41 if (newElement != null && targetElement != null) { 42 var importedElement = document.importNode(newElement, true); 43 targetElement.parentNode.replaceChild(importedElement, targetElement); 44 //importedElement.setAttribute("style", "background-color:red;"); 45 } 46 47 // NOTE: Test Konqueror bug. 48 49 //showMismatch(targetFieldNameArray); 50 } 51 52 function addFields(fieldNames, disable) { 53 54 var requestBody = ""; 55 56 // Process each target field name. 57 58 var fieldNameArray = fieldNames.split(","); 59 60 // Add the values of the dependent fields. 61 62 for (var i = 0; i < fieldNameArray.length; i++) { 63 var fieldName = fieldNameArray[i]; 64 65 // Find the values of the target field. 66 67 var fieldValue; 68 var fieldNodes = document.getElementsByName(fieldName); 69 for (var v = 0; v < fieldNodes.length; v++) { 70 fieldValue = fieldNodes[v].value; 71 requestBody += ("\r\n" + fieldName + "=" + fieldValue); 72 } 73 74 // NOTE: Konqueror hack: disable fields. 75 76 if (disable) { 77 disableFields(fieldName); 78 } 79 } 80 81 return requestBody; 82 } 83 84 function disableFields(targetFieldName) { 85 86 for (var i = 0; i < document.forms.length; i++) { 87 var form = document.forms[i]; 88 for (var j = 0; j < form.elements.length; j++) { 89 if (form.elements[j].name == targetFieldName) { 90 form.elements[j].name = ""; 91 } 92 } 93 } 94 } 95 96 function showMismatch(targetFieldNameArray) { 97 98 // Show how the number of field elements with a given name can be different 99 // from the number known to the DOM Level 0 part of the API. 100 101 for (var h = 0; h < targetFieldNameArray.length; h++) { 102 var targetFieldName = targetFieldNameArray[h]; 103 var targetFieldNodes = document.getElementsByName(targetFieldName); 104 alert("Nodes for " + targetFieldName + ": " + targetFieldNodes.length); 105 106 var count = 0; 107 for (var i = 0; i < document.forms.length; i++) { 108 var form = document.forms[i]; 109 for (var j = 0; j < form.elements.length; j++) { 110 if (form.elements[j].name == targetFieldName) { 111 count++; 112 } 113 } 114 } 115 alert("Fields for " + targetFieldName + ": " + count); 116 } 117 }