var secs = 10;
var timerID = null;
var timerRunning = false;
var timedElement = null;
var lastQuery = null;
var THROTTLE_PERIOD = 1000;
function findPos(obj) {
var curleft = 0; var curtop = 0;
if(obj.offsetParent) {
while(obj.offsetParent) {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
obj = obj.offsetParent;
}
}
else{
if(obj.x) curleft += obj.x;
if(obj.y) curtop = obj.y;
}
return Array(curleft, curtop);
}
function setUserSearch(element) {
timedElement = element;
timerID = setTimeout('getUsers();', THROTTLE_PERIOD);
}
function getUsers() {
if(timedElement != null) {
str = document.getElementById(timedElement + "Select").value;
if(str != "" && str != lastQuery) {
var serverPage = "includes/userlist.php";
myRequest = new ajaxObject(serverPage, setUsers);
val = "element=" + timedElement + "&";
val = val + "str="+str;
myRequest.update(val);
lastQuery = str;
clearTimeout(timerID);
}
else timerID = setTimeout('getUsers();', THROTTLE_PERIOD);
}
else timerID = setTimeout('getUsers();', THROTTLE_PERIOD);
}
function setUsers(responseText, responseStatus) {
if(responseStatus == 200) {
var element;
var userList = new Array( );
eval(responseText);
var input = document.getElementById(element+"Select");
var div = document.getElementById(element+"Div");
// remove the old names first.
while(div.firstChild) {
div.removeChild(div.firstChild);
}
if(userList.length == 0) return;
posObj = findPos(input);
var list = document.createElement('div');
list.className = "ajaxOptList";
list.setAttribute("id", element+"Names");
list.onblur = removeList;
for(x = 0; x < userList.length; x++) {
var opt = document.createElement('div');
opt.appendChild(document.createTextNode(userList[x][1]));
opt.setAttribute("id", element + "__" + userList[x][0]);
opt.className = "ajaxListOpt";
opt.onmouseover = ajaxOptOver;
opt.onmouseout = ajaxOptOut;
opt.onclick = setUser;
list.appendChild(opt);
}
div.appendChild(list);
var shim = document.getElementById(element+"shim");
shim.style.height = list.offsetHeight + "px";
shim.style.width = list.offsetWidth + "px";
listPos = findPos(document.getElementById(element + "Names"));
shim.style.left = posObj[0] + "px";
shim.style.top = posObj[1] + "px";
shim.style.zIndex = 100;
shim.style.display = "block";
list.style.top = (posObj[1] + 23) + "px";
list.style.left = posObj[0] + "px";
div.style.visibility = "visible";
secs = 10;
removeList();
}
else {
alert(responseStatus + ' -- Error Processing Request');
}
}
function removeList() {
if(secs == 0 && timerRunning == true) {
clearTimeout(timerID);
timerRunning = false;
document.getElementById(timedElement + "Div").style.visibility = "hidden";
}
else {
self.status = secs;
secs = secs - 1;
timerRunning = true;
timerID = self.setTimeout("removeList( )", 5000);
}
}
function ajaxOptOver( ) {
this.className = "ajaxListOptOver";
}
function ajaxOptOut( ) {
this.className = "ajaxListOpt";
}
function setUser() {
var list = this.parentNode;
var div = list.parentNode;
div.style.height = "0px";
div.style.width = "0px";
div.style.visibility = "hidden";
var info = this.id;
var split = info.split("__");
var shim = document.getElementById(split[0] + "shim");
shim.style.visiblity = "hidden";
shim.style.zIndex = -1;
var hidden = document.getElementById(split[0]);
var selected = document.getElementById(split[0] + "Selected");
if(selected) {
var selectedList = new Array( );
var newItem = true;
for(i = 0; i < selected.length; i++) {
selectedList.push(selected.options[i].value);
if(selected.options[i].text == this.firstChild.nodeValue) {
newItem = false;
break;
}
}
if(newItem) {
selectedList.push(split[1]);
selected.options[selected.length] = new Option(this.firstChild.nodeValue, split[1]);
hidden.value = selectedList.join( );
}
}
else {
hidden.value = split[1];
var input = document.getElementById(split[0] + "Select");
input.value = this.innerHTML;
div.removeChild(list);
}
lastQuery = document.getElementById(split[0] + "Select").value;
clearTimeout(timerID);
timerID = setTimeout("getUsers( )", 1000);
}
function removeMember(element) {
var hidden = document.getElementById(element);
var selected = document.getElementById(element + "Selected");
var newOpts = new Array( );
var y = 0;
for(x = 0; x < selected.length; x++) {
if(selected.options[x].selected == false) {
newOpts[y] = Array(selected.options[x].text, selected.options[x].value);
y++;
}
}
selected.options.length = 0; // clear the whole list;
var newIDs = new Array( );
for(x = 0; x < newOpts.length; x++) {
newIDs[x] = newOpts[x][1];
selected.options[selected.length] = new Option(newOpts[x][0], newOpts[x][1]);
}
hidden.value = newIDs.join( );
}