| 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 |