Browse code

3.5.6 efiction version

Jimako authored on 2024/03/09 16:09:42
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,172 @@
1
+var secs = 10;
2
+var timerID = null;
3
+var timerRunning = false;
4
+var timedElement = null;
5
+var lastQuery = null;
6
+var THROTTLE_PERIOD = 1000;
7
+
8
+function findPos(obj) {
9
+	var curleft = 0; var curtop = 0;
10
+	if(obj.offsetParent) {
11
+		while(obj.offsetParent) {
12
+			curleft += obj.offsetLeft;
13
+			curtop += obj.offsetTop;
14
+			obj = obj.offsetParent;	
15
+		}
16
+	}
17
+	else{
18
+		if(obj.x) curleft += obj.x;
19
+		if(obj.y) curtop = obj.y;
20
+	}
21
+	return Array(curleft, curtop);
22
+}
23
+
24
+function setUserSearch(element) {
25
+	timedElement = element;
26
+	timerID = setTimeout('getUsers();', THROTTLE_PERIOD);
27
+}
28
+
29
+function getUsers() {
30
+	if(timedElement != null) {
31
+		str = document.getElementById(timedElement + "Select").value;
32
+		if(str != "" && str != lastQuery) {
33
+			var serverPage = "includes/userlist.php";
34
+			myRequest = new ajaxObject(serverPage, setUsers);
35
+			val = "element=" + timedElement + "&";
36
+			val = val + "str="+str;
37
+			myRequest.update(val);
38
+			lastQuery = str;
39
+			clearTimeout(timerID);
40
+		}
41
+		else timerID = setTimeout('getUsers();', THROTTLE_PERIOD);
42
+	}
43
+	else timerID = setTimeout('getUsers();', THROTTLE_PERIOD);
44
+}
45
+
46
+function setUsers(responseText, responseStatus) {
47
+	if(responseStatus == 200) {
48
+		var element;
49
+		var userList = new Array( );
50
+		eval(responseText);
51
+		var input = document.getElementById(element+"Select");
52
+		var div = document.getElementById(element+"Div");
53
+
54
+		// remove the old names first.	
55
+		while(div.firstChild) {
56
+			div.removeChild(div.firstChild);
57
+		}
58
+		if(userList.length == 0) return;
59
+		posObj = findPos(input);
60
+		var list = document.createElement('div');
61
+		list.className = "ajaxOptList";
62
+		list.setAttribute("id", element+"Names");
63
+		list.onblur = removeList;
64
+		for(x = 0; x < userList.length; x++) {
65
+			var opt = document.createElement('div');
66
+			opt.appendChild(document.createTextNode(userList[x][1]));
67
+			opt.setAttribute("id", element + "__" + userList[x][0]);
68
+			opt.className = "ajaxListOpt";
69
+			opt.onmouseover = ajaxOptOver;
70
+			opt.onmouseout = ajaxOptOut;
71
+			opt.onclick = setUser;
72
+			list.appendChild(opt);
73
+		}
74
+		div.appendChild(list);
75
+		var shim = document.getElementById(element+"shim");
76
+		shim.style.height = list.offsetHeight + "px";
77
+		shim.style.width = list.offsetWidth + "px";
78
+		listPos = findPos(document.getElementById(element + "Names"));
79
+		shim.style.left = posObj[0] + "px";
80
+		shim.style.top = posObj[1] + "px";
81
+		shim.style.zIndex = 100;
82
+		shim.style.display = "block";
83
+		list.style.top = (posObj[1] + 23) + "px";
84
+		list.style.left = posObj[0] + "px";
85
+		div.style.visibility = "visible";
86
+		secs = 10;
87
+		removeList();
88
+	}
89
+	else {
90
+		alert(responseStatus + ' -- Error Processing Request');
91
+	}
92
+}
93
+
94
+function removeList() {
95
+	if(secs == 0 && timerRunning == true) {
96
+		clearTimeout(timerID);
97
+		timerRunning = false;
98
+		document.getElementById(timedElement + "Div").style.visibility = "hidden";
99
+	}
100
+	else {
101
+		self.status = secs;
102
+		secs = secs - 1;
103
+		timerRunning = true;
104
+		timerID = self.setTimeout("removeList( )", 5000);
105
+	}
106
+}
107
+function ajaxOptOver( ) {
108
+	this.className = "ajaxListOptOver";
109
+}
110
+function ajaxOptOut( ) {
111
+	this.className = "ajaxListOpt";
112
+}
113
+
114
+function setUser() {
115
+	var list = this.parentNode;
116
+	var div = list.parentNode;
117
+	div.style.height = "0px";
118
+	div.style.width = "0px";
119
+	div.style.visibility = "hidden";
120
+	var info = this.id;
121
+	var split = info.split("__");	
122
+	var shim = document.getElementById(split[0] + "shim");
123
+	shim.style.visiblity = "hidden";
124
+	shim.style.zIndex = -1;
125
+	var hidden = document.getElementById(split[0]);
126
+	var selected = document.getElementById(split[0] + "Selected");
127
+	if(selected) {
128
+		var selectedList = new Array( );
129
+		var newItem = true;
130
+		for(i = 0; i < selected.length; i++) {
131
+			selectedList.push(selected.options[i].value);
132
+			if(selected.options[i].text == this.firstChild.nodeValue) {
133
+				newItem = false;
134
+				break;
135
+			}
136
+		}
137
+		if(newItem) {
138
+			selectedList.push(split[1]);
139
+			selected.options[selected.length] = new Option(this.firstChild.nodeValue, split[1]);
140
+			hidden.value = selectedList.join( );
141
+		}	
142
+	}
143
+	else {
144
+		hidden.value = split[1];
145
+		var input = document.getElementById(split[0] + "Select");	
146
+		input.value = this.innerHTML;
147
+		div.removeChild(list);
148
+	}
149
+	lastQuery = document.getElementById(split[0] + "Select").value;
150
+	clearTimeout(timerID);
151
+	timerID = setTimeout("getUsers( )", 1000);
152
+}
153
+
154
+function removeMember(element) {
155
+	var hidden = document.getElementById(element);
156
+	var selected = document.getElementById(element + "Selected");
157
+	var newOpts = new Array( );
158
+	var y = 0;
159
+	for(x = 0; x < selected.length; x++) {
160
+		if(selected.options[x].selected == false) {
161
+			newOpts[y] = Array(selected.options[x].text, selected.options[x].value);
162
+			y++;
163
+		}
164
+	}
165
+	selected.options.length = 0; // clear the whole list;
166
+	var newIDs = new Array( );
167
+	for(x = 0; x < newOpts.length; x++) {
168
+		newIDs[x] = newOpts[x][1];
169
+		selected.options[selected.length] = new Option(newOpts[x][0], newOpts[x][1]);
170
+	}
171
+	hidden.value = newIDs.join( );
172
+}
0 173
\ No newline at end of file