DIC = {
'dropdown_invitation': '#dropdown_invitation#',
'dropdown_loading': '#dropdown_loading#'
}
Event = {
KEY_UP: 38, //up arrow
KEY_DOWN: 40, //down arrow
KEY_LEFT: 37, //left arrow
KEY_RIGHT: 39, //right arrow
KEY_RETURN: 13, //enter
KEY_ESC: 27, //esc
KEY_BACKSPACE: 8 //backspace
}
var obj_deep_level = 1;
function print_r(obj) {
obj_deep_level++;
if (obj_deep_level > 10)
return;
for (var key in obj) {
if (obj[key] != null && typeof(obj[key]) == "object")
print_r(obj[key]);
else
document.writeln('
' + key + ': ' + obj[key] + ' ' + typeof(obj[key]) + '
');
}
obj_deep_level--;
}
/****** dropDownList.js ******/
function dropDownList( editField, clickCallback, submitter, jSwhat, overlap, invitingText ) {
var req = new Object();
req.clickCallback = clickCallback;
req.editField = get_by_id( editField );
req.submitter = get_by_id( submitter );
req.invitingText = invitingText || DIC.dropdown_invitation;
if ( !req.editField ) { throw "editField not found"; }
req.editField.setAttribute( 'autocomplete', "off" );
var span = document.createElement( 'DIV' );
span.style.position = 'relative';
span.className = 'dropDownContainer';
req.editField.parentNode.replaceChild( span, req.editField );
span.appendChild( req.editField );
req.list = document.createElement( 'UL' );
req.list.className = 'dropDownList';
// span.appendChild( req.list );
req.indicator = document.createElement('img');
req.indicator.className = 'indicator';
req.indicator.src = '/themes/blue/img/progress.gif';
req.indicator.body = span;
// IE fix
if (req.list.runtimeStyle) {
span.style.zoom = '1';
req.list.style.top = '1.7em';
};
req.editField.onfocus = function() {
req.invite();
req.editField.form.onsubmit = req.preventSubmit;
};
req.editField.onblur = function() {
if (req.JsHttpRequest) {
req.JsHttpRequest.onDone = function(xmlhttp) {};
req.JsHttpRequest.abort();
}
req.editField.form.onsubmit = null;
setTimeout( function(){ req.clearList() }, 200 );
};
req.editField.onkeyup = function(e) {
e = (e) ? e : ((window.event) ? event : null );
if ( req.oldReqValue == req.editField.value) {
switch ( e.keyCode ) {
case Event.KEY_BACKSPACE:
case Event.KEY_ESC:
case Event.KEY_UP:
case Event.KEY_DOWN:
req.indicate(true);
break;
default:
return;
}
} else {
if ( e.keyCode != Event.KEY_UP && e.keyCode != Event.KEY_DOWN) {
req.oldReqValue = req.editField.value;
}
clearTimeout(req.timeout);
}
if ( req.editField.value.length == 0 ) {
req.clearList()
req.invite()
return;
}
switch ( e.keyCode ) {
case Event.KEY_BACKSPACE:
req.clearList();
break;
case Event.KEY_ESC:
req.clearList();
return;
break;
case Event.KEY_UP:
if ( req.list.childNodes.length > 0 )
{
if ( req.selected !== null ) {
req.list.childNodes[req.selected].className = "";
}
switch ( req.selected ) {
case null:
req.selected = req.list.childNodes.length - 1;
break;
case 0:
req.selected = null;
req.editField.value = req.oldReqValue;
break;
default:
req.selected--;
break;
}
if ( req.selected !== null ) {
req.list.childNodes[req.selected].className = "selected";
req.editField.value = req.list.childNodes[req.selected].title;
}
return;
}
break;
case Event.KEY_DOWN:
if ( req.list.childNodes.length > 0 ) {
if ( req.selected !== null ) {
req.list.childNodes[req.selected].className = "";
}
switch ( req.selected ) {
case null:
req.selected = 0;
break;
case req.list.childNodes.length - 1:
req.selected = null;
req.editField.value = req.oldReqValue;
break;
default:
req.selected++;
break;
}
if ( req.selected !== null ) {
req.list.childNodes[req.selected].className = "selected";
req.editField.value = req.list.childNodes[req.selected].title;
}
return;
}
break;
case Event.KEY_RETURN:
return;
}
req.JsHttpRequest = new CXMLHttp();
req.JsHttpRequest.onDone = function(xmlhttp) {
if ( xmlhttp.responseText ) {
if (window.console)
window.console.out(xmlhttp.responseText, '', 'Suggest');
}
req.fillList(xmlhttp.responseXML);
req.indicate(false);
}
req.timeout = setTimeout( function() {
req.indicate(true);
var text = req.editField.value;
req.JsHttpRequest.getQuery('/ajax_' + jSwhat + '.php?q=' + text);
}, 300);
}
req.addLI = function( value ) {
var li = document.createElement( 'LI' );
req.list.appendChild( li );
var editFieldRegexp = new RegExp( '(' + req.editField.value + ')', 'i' );
var highlightedName = value.name.replace( editFieldRegexp, '$1
' )
var sizeSpan = '';
if (value.size != null)
sizeSpan = '' + value.size + '';
else if (value.uname != '')
sizeSpan = '(' + value.uname + ')';
li.innerHTML = '' + highlightedName + ' | ' + sizeSpan + ' |
';
li.title = value.name;
li.onclick = req.clickCallback;
// Event.observe(li, 'click', req.clickCallback.bindAsEventListener(li));
if (req.list.runtimeStyle) { // IE fix
li.onmouseover = function(){ li.className += ' hover'; }
li.onmouseout = function(){ li.className = li.className.replace( /\bhover\b/i, '' ); }
}
}
req.clearList = function() {
req.overlapper('visible');
req.indicate(false);
if (window.WCH) {
WCH.Discard( req.list );
}
req.list.style.visibility = 'hidden';
while ( req.list.childNodes.length > 0 ) {
req.list.removeChild( req.list.firstChild );
}
if ( req.list == req.editField.parentNode.lastChild ) {
req.editField.parentNode.removeChild( req.list );
}
req.selected = null;
}
req.fillList = function( jsList ) {
req.clearList();
req.list.style.visibility = 'visible';
var root = jsList.documentElement;
if (!root) return ;
var elems = root.getElementsByTagName('item');
for ( var i = 0; i < elems.length; i++ ) {
// document.writeln(elems[i]);
req.addLI( { name: elems[i].getAttribute("name"),
size: elems[i].getAttribute("value"),
uname: elems[i].getAttribute("uname")
} );
}
if ( req.list.childNodes.length == 0 ) return;
req.editField.parentNode.appendChild( req.list );
req.overlapper('hidden');
if (window.WCH) {
WCH.Apply( req.list, req.list.parentNode, true );
}
return;
}
req.invite = function() {
if (req.editField.value.length) return;
var li = document.createElement( 'LI' );
li.appendChild(document.createTextNode(req.invitingText));
req.list.appendChild( li );
req.list.style.visibility = 'visible';
req.editField.parentNode.appendChild( req.list );
req.overlapper('hidden');
if (window.WCH) {
WCH.Apply( req.list, req.list.parentNode, true );
}
}
req.indicate = function(status) {
var x = 0; var y = 0;
req.indicator.style.position = 'relative';
req.indicator.style.left = x - 24 + 'px';
req.indicator.style.top = y + 2 + 'px';
req.indicator.body.appendChild(req.indicator);
if (!status) {
req.indicator.body.removeChild(req.indicator);
}
}
req.preventSubmit = function( event ) {
if (req.list.childNodes.length == 0) {
if (req.list.runtimeStyle) req.submitter.click()
return;
}
if (!event) {
event = window.event;
event.returnValue = false;
event.cancelBubble = true;
} else {
event.preventDefault();
event.stopPropagation();
}
setTimeout( function() {
var selectedItem = req.list.childNodes[req.selected];
req.editField.blur();
if (req.submitter == null)
return;
if ( req.selected === null) {
req.submitter.click()
} else {
selectedItem.click = req.clickCallback;
selectedItem.click()
}
req.submitter.focus()
}, 100 )
}
req.overlapper = function(value){
if (overlap && req.list.runtimeStyle) {
for (var index = 0; index < overlap.length; index++) {
get_by_id(overlap[index]).style.visibility = value;
}
}
}
return;
}