Here follows the javascript ajax and dhtml script:
Code:
// Regions AJAX & DHTML
// xml request
var http_request = false;
var parents = new Array();
function makeRequest(method, url, parameters) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
// set type accordingly to anticipated content type
http_request.overrideMimeType('text/xml');
//http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.onreadystatechange = alertContents;
url += (method=="GET")?parameters:"";
http_request.open(method, url, true);
if (method == "POST") {
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
}
http_request.send((method=="GET")?null:parameters);
}
// xml parser
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var xmldoc = http_request.responseXML;
var rows = xmldoc.getElementsByTagName("region");
for (var r = 0; r < rows.length; r++) {
var i = 0;
var len = parseInt(rows[r].childNodes.length / 2);
var arr = new Array(len);
for (var c = 0; c < rows[r].childNodes.length; c++) {
var region = rows[r].childNodes[c];
if (region.childNodes.length > 0) {
arr[i] = region.firstChild.data;
i++;
}
}
addrecord("list_regions", arr);
}
if (xmldoc.getElementsByTagName("sql")[0]) if (xmldoc.getElementsByTagName("sql")[0].firstChild) var sql = xmldoc.getElementsByTagName("sql")[0].firstChild.data; if (sql != "") alert(sql);
} else {
alert('There was a problem with the request.');
}
document.getElementById("ajaxbg").style.visibility = "hidden";
}
}
// instantiate ajax requests
function ajaxRequest(obj) {
document.getElementById("ajaxbg").style.visibility = "visible";
switch (obj.value) {
case "Add":
if (trim(document.form_regions.text_regionname.value) == "") {
alert("Cannot create a blank region!");
document.getElementById("ajaxbg").style.visibility = "hidden";
document.form_regions.text_regionname.focus();
return false;
}
var poststr = "menu_parentregion=" + encodeURIComponent(document.form_regions.menu_parentregion.options[document.form_regions.menu_parentregion.selectedIndex].value) +
"&text_regionname=" + encodeURIComponent(document.form_regions.text_regionname.value);
makeRequest("POST", "scripts/ajax_regions.php?q=1", poststr);
document.form_regions.list_regions.options.length = 0;
document.form_regions.menu_parentregion.length = 1;
document.form_regions.text_regionname.value = "";
break;
case "Modify":
if (document.form_regions.list_regions.selectedIndex == -1) {
alert("Please select a region to modify!");
document.getElementById("ajaxbg").style.visibility = "hidden";
document.form_regions.list_regions.focus();
return false;
}
if (document.form_regions.list_regions.options[document.form_regions.list_regions.selectedIndex].value.split(",")[0] == document.form_regions.menu_parentregion.options[document.form_regions.menu_parentregion.selectedIndex].value) {
alert("Cannot set the region as it's own parent!");
document.getElementById("ajaxbg").style.visibility = "hidden";
document.form_regions.menu_regions.focus();
return false;
}
if (trim(document.form_regions.text_regionname.value) == "") {
alert("Cannot make a region blank!");
document.getElementById("ajaxbg").style.visibility = "hidden";
document.form_regions.text_regionname.focus();
return false;
}
var poststr = "list_regions=" + encodeURIComponent(document.form_regions.list_regions.options[document.form_regions.list_regions.selectedIndex].value.split(",")[0]) +
"&menu_parentregion=" + encodeURIComponent(document.form_regions.menu_parentregion.options[document.form_regions.menu_parentregion.selectedIndex].value) +
"&text_regionname=" + encodeURIComponent(trim(document.form_regions.text_regionname.value));
makeRequest("POST", "scripts/ajax_regions.php?q=2", poststr);
document.form_regions.list_regions.options.length = 0;
document.form_regions.menu_parentregion.length = 1;
document.form_regions.text_regionname.value = "";
break;
case "Remove":
if (document.form_regions.list_regions.selectedIndex == -1) {
alert("Please select a region to remove!");
document.getElementById("ajaxbg").style.visibility = "hidden";
document.form_regions.list_regions.focus();
return false;
}
var l = document.form_regions.list_regions.selectedIndex;
var t = ltrim(document.form_regions.list_regions.options[l].text);
if (!confirm("Are you sure you want to remove " + t + "?")) {
document.getElementById("ajaxbg").style.visibility = "hidden";
document.form_regions.list_regions.focus();
return false;
}
var poststr = "list_regions=" + encodeURIComponent(document.form_regions.list_regions.options[document.form_regions.list_regions.selectedIndex].value.split(",")[0]);
makeRequest("POST", "scripts/ajax_regions.php?q=3", poststr);
document.form_regions.list_regions.options.length = 0;
document.form_regions.menu_parentregion.length = 1;
document.form_regions.text_regionname.value = "";
break;
default:
makeRequest("GET", "scripts/ajax_regions.php?q=0", "");
document.form_regions.list_regions.options.length = 0;
document.form_regions.menu_parentregion.length = 1;
document.form_regions.text_regionname.value = "";
}
}
// string trim functions
function trim(str, chars) {
return ltrim(rtrim(str, chars), chars);
}
function ltrim(str, chars) {
if (chars == undefined) var chars = "";
chars = chars || "\\s";
return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
function rtrim(str, chars) {
if (chars == undefined) var chars = "";
chars = chars || "\\s";
return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
// leftpadding for tree display
function strRepeat(str, len) {
var ret = "";
for ($i = 0; $i < len; $i++) {
ret += str;
}
return ret;
}
// dynamic updater
function addrecord(id, arr) {
var opt1 = document.createElement('option');
var opt2 = document.createElement('option');
//alert(arr[2]);
opt1.text = strRepeat("\u00a0\u00a0\u00a0\u00a0\u00a0", arr[3]) + arr[2];
opt2.text = strRepeat("\u00a0\u00a0\u00a0\u00a0\u00a0", arr[3]) + arr[2];
opt1.value = arr[0] + "," + arr[1];
opt2.value = arr[0];
var sel1 = document.getElementById("list_regions");
var sel2 = document.getElementById("menu_parentregion");
try {
sel1.add(opt1, null); // standards compliant; doesn't work in IE
sel2.add(opt2, null); // standards compliant; doesn't work in IE
}
catch(ex) {
sel1add(opt); // IE only
sel2.add(opt); // IE only
}
}
// onload event handlers
window.onload = function () {
return ajaxRequest(document.form_regions.button_reset);
}
// onselect event handlers
document.form_regions.list_regions.onchange = function () {
var val = this.options[this.selectedIndex].value.split(",");
document.getElementById("text_regionname").value = ltrim(this.options[this.selectedIndex].text,"");
for (var i = 0; i < document.getElementById("menu_parentregion").options.length; i++) {
if (document.getElementById("menu_parentregion").options[i].value == val[1]) {
document.getElementById("menu_parentregion").selectedIndex = i;
}
}
}
Edit:
PS: this is for the REGION MANAGER page available at http://ferrety.pcriot.com/?p=1
Edit:
nevermind, problem sorted - i had the database name wrong. -_-