1 /* by TKirby, released under GPL */
2 /* Define the "list" Class */
7 list : function (src, esrc, name) { this.init(src, esrc, name); },
10 if(this.xml.readyState!=4) { setTimeout(this.name+".read()", 100); }
11 else if(this.xml.status!=200) alert("Document not available.");
13 var doc = this.xml.responseXML;
15 if(doc.childNodes[0].nodeName=="parseerror") alert("Parse Error.");
16 doc = doc.getElementsByTagName("list")[0];
17 for(i=0;i<doc.childNodes.length;i++) {
18 if(doc.childNodes[i].childNodes.length>0) {
19 nNode = document.createElement("option");
20 nNode.appendChild(document.createTextNode(doc.childNodes[i].childNodes[0].nodeValue));
21 this.sels[0].appendChild(nNode);
27 init : function (src,esrc,name) {
30 this.sels = new Array();
32 for(i=0;i<src.childNodes.length;i++) {
33 if(src.childNodes[i].nodeName=="select" || src.childNodes[i].nodeName=="SELECT") {
34 this.sels.push(src.childNodes[i]);
37 if((src.childNodes[i].nodeName=="input" || src.childNodes[i].nodeName=="INPUT")
38 && (src.childNodes[i].name=="fromjs")) {
39 src.childNodes[i].value = 1;
42 if((src.childNodes[i].nodeName=="input" || src.childNodes[i].nodeName=="INPUT")
43 && (src.childNodes[i].type=="submit" || src.childNodes[i].type=="SUBMIT")) {
45 if (src.childNodes[i].name.indexOf("Save") < 0) {
46 var tmp = document.createElement("input");
48 tmp.name = src.childNodes[i].name;
49 tmp.value = src.childNodes[i].value;
50 src.replaceChild(tmp,src.childNodes[i]);
53 if(src.childNodes[i].name=="add")
54 src.childNodes[i].onclick = new Function(this.name+".add();");
55 if(src.childNodes[i].name=="remove")
56 src.childNodes[i].onclick = new Function(this.name+".remove();");
57 if(src.childNodes[i].name=="moveup")
58 src.childNodes[i].onclick = new Function(this.name+".moveup();");
59 if(src.childNodes[i].name=="movedown")
60 src.childNodes[i].onclick = new Function(this.name+".movedown();");
64 this.xml = (window.navigator.appName!="Microsoft Internet Explorer"
65 ?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
66 this.xml.open("GET", esrc);
68 setTimeout(this.name+".read()", 100);
75 for(i=0;i<this.sels[0].length;i++) if(this.sels[0][i].selected) {
76 for(j=0;j<this.sels[1].length;j++) if(this.sels[1][j].value==this.sels[0][i].value) break;
77 if(j==this.sels[1].length) dNode = this.sels[0][i].cloneNode(true),
78 this.sels[1].appendChild(dNode);
82 moveup : function() { this.move(-1); },
83 movedown : function() { this.move(1); },
86 if(v<0) for(i=0;i<this.sels[1].length;i++) this.moveOne(v, i);
87 else if(v>0) for(i=this.sels[1].length-1;i>=0;i--)this.moveOne(v, i);
90 moveOne : function(v, i) {
92 if(ins<0 || ins>=this.sels[1].length) return;
93 if(this.sels[1][ins].selected) return;
94 if(this.sels[1][i].selected) {
95 Node = this.sels[1][i];
96 this.sels[1].removeChild(Node);
97 this.sels[1].insertBefore(Node, this.sels[1][ins]);
101 remove : function() {
103 for(i=this.sels[1].length-1;i>=0;i--) if(this.sels[1][i].selected)
104 this.sels[1].removeChild(this.sels[1][i]);
107 selectAll: function() {
109 for(i=0;i<this.sels[0].length;i++) this.sels[0][i].selected = false;
110 for(i=0;i<this.sels[1].length;i++) this.sels[1][i].selected = true;