var
select_open =
false
;
var
last_keypress = undefined;
var
timer_id = undefined;
var
timer_arg = undefined;
function
populate_emails( event ) {
var
str =
''
;
var
evt = (event) ? event : ((window.event) ? window.event :
null
);
if
(! evt) {
if
(timer_arg != undefined) {
str = timer_arg;
}
else
{
return
;
}
}
else
{
var
elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement :
null
);
if
(! elem) {
return
; }
var
char = isIE ? evt.keyCode : evt.which;
if
(char == 13 || char == 40) {
var
list = $(
"emaillist"
);
if
(list) {
list.focus();
return
;
}
}
else
if
(char == 8 || char == 127) {
str = elem.value.substr( 0, elem.value.length - 1 );
}
else
if
( (char == 43)
|| (char == 45)
|| (char == 46)
|| (char >= 48 && char <= 57)
|| (char >= 64 && char <= 90)
|| (char == 95)
|| (char >= 97 && char <= 122)
) {
str = elem.value + String.fromCharCode( char );
}
}
if
(timer_id != undefined) {
clearTimeout( timer_id );
timer_id = undefined;
timer_arg = undefined;
}
if
(last_keypress == undefined) {
last_keypress =
new
Date();
}
else
{
var
now =
new
Date();
if
(now.getTime() - last_keypress.getTime() < 500) {
timer_arg = str;
timer_id = setTimeout(
"populate_emails()"
, 501 );
return
;
}
}
var
list = $(
"emaillist"
);
if
(list) {
$(
"email_list"
).removeChild( list );
}
var
url =
''
;
if
(str.length > 2) {
url =
'email_search.cgi?str='
+ str;
}
if
(url !=
''
&& select_open ==
false
) {
clearTimeout( timer_id );
last_keypress = undefined;
select_open =
true
;
new
Ajax.Request( url, {
method:
'get'
,
onSuccess: add_emails_to_list
} );
}
}
function
select_email( event )
{
var
list = $(
"emaillist"
);
if
(! list) {
return
; }
var
evt = (event) ? event : ((window.event) ? window.event :
null
);
if
(! evt) {
return
; }
var
elem = list.selectedIndex > -1 ? list.options[list.selectedIndex] : undefined;
if
(! elem) {
return
; }
if
(evt.type ==
'mouseup'
|| evt.type ==
'change'
|| evt.type ==
'click'
) {
add_to_field( elem );
}
else
if
(evt.type ==
'keypress'
) {
var
char = isIE ? evt.keyCode : evt.which;
if
(char == 13) {
add_to_field( elem );
}
}
}
function
add_emails_to_list( req ) {
var
emails = req.responseXML.getElementsByTagName(
"ITEM"
);
if
(emails.length > 0) {
var
list = document.createElement(
"select"
);
list.id =
'emaillist'
;
list.size = 10;
list.onchange = select_email;
list.onkeypress = select_email;
$(
"email_list"
).appendChild( list );
for
(
var
i = 0; i < emails.length; i++) {
append_to_select(list , i, emails[i] );
}
}
select_open =
false
;
}
function
append_to_select( select, index, item ) {
var
opt = document.createElement(
"option"
);
var
label = item.getAttribute(
'email'
);
var
targettext = label;
opt.id_num = item.getAttribute(
'id'
);
var
txt = document.createTextNode(label);
opt.targettext = targettext;
opt.value = txt;
opt.appendChild(txt);
select.appendChild(opt);
}
function
add_to_field( elem )
{
var
email = document.getElementById(
'email'
);
email.value = elem.text;
}