/************************************************************************************************************
(C) www.dhtmlgoodies.com, April 2006
This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.
Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.
Thank you!
www.dhtmlgoodies.com
Alf Magne Kalleland
************************************************************************************************************/
// Position of the list
var ajaxBox_offsetX = 0;
var ajaxBox_offsetY = 0;
// Path to external file
var ajax_list_externalFile = 'ajax_list_users.php';
var minimumLettersBeforeLookup = 3; // Number of letters entered before a lookup is performed.
var ajax_list_objects = new Array();
var ajax_list_cachedLists = new Array();
var ajax_list_activeInput = false;
var ajax_list_activeItem;
var ajax_list_optionDivFirstItem = false;
var ajax_list_currentLetters = new Array();
var ajax_optionDiv = false;
var ajax_optionDiv_iframe = false;
// what to do after the customer choice
var reload_page = false;
var load_user_data = false;
var ajax_list_MSIE = false;
if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)ajax_list_MSIE=true;
var currentListIndex = 0;
// after how many seconds do the research must start
var trigger_timeout = 500;
var timer_id = null;
var searchParams = new Array();
function ajax_getTopPos(inputObj)
{
var returnValue = inputObj.offsetTop;
while((inputObj = inputObj.offsetParent) != null){
returnValue += inputObj.offsetTop;
}
return returnValue;
}
function ajax_list_cancelEvent()
{
return false;
}
function ajax_getLeftPos(inputObj)
{
var returnValue = inputObj.offsetLeft;
while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
return returnValue;
}
function ajax_option_setValue( e, inputObj ) {
if ( !inputObj ) {
inputObj = this;
}
var tmpValue = inputObj.innerHTML;
if ( ajax_list_MSIE ) {
tmpValue = inputObj.innerText;
} else {
tmpValue = inputObj.textContent;
}
if ( !tmpValue ) {
tmpValue = inputObj.innerHTML;
}
ajax_list_activeInput.value = tmpValue.replace( /#(\w|\W)*$/, "" );
/*zenzero*/
var title = tmpValue.split(/:/);
var string1 = title[0];
var string2 = title[1];
var data = inputObj.id.split(/###/);
/*zenzero*/
if ( document.getElementById( ajax_list_activeInput.name + '_hidden' )) {
document.getElementById( ajax_list_activeInput.name + '_hidden' ).value = data[0];
/*zenzero*/
if ( after_load == 'load_mop_data' || after_load == 'load_mop_data_2' ) {
document.getElementById( typology_input_hidden).value = data[1];
}else if(after_load == 'load_mop_data_3'){
document.getElementById( resource_input_hidden).value = data[0];
document.getElementById( resource_legacy_input_hidden).value = data[1];
}
/*zenzero*/
// load the choosen user data with another ajax method
if ( after_load == 'load_user_data' ) {
selectUserForReservationHere( document.getElementById( ajax_list_activeInput.name + '_hidden' ).value );
ajax_list_activeInput.value = "";
}
// load the choosen activity data with another ajax method
if ( after_load == 'load_activity_data' ) {
selectActivityForReservationHere( document.getElementById( ajax_list_activeInput.name + '_hidden' ).value );
ajax_list_activeInput.value = "";
}
// load the choosen activity data with js_mop.js method
if ( after_load == 'load_mop_data' ) {
$.blockUI({ message: '
'+'Loading'+'...
' });
insertActivityTypologySearchResult(string2, string1);
}
// load the choosen activity data with js_mop.js method 2
if ( after_load == 'load_mop_data_2' ) {
$.blockUI({ message: '' });
insertActivityTypologySearchResult2(string2, string1);
}
if ( after_load == 'load_mop_data_3' ) {
$.blockUI({ message: '
'+'Loading'+'...
' });
insertResorcesSearchResult(string2, string1);
}
// reload the page adding a GET parameter
if ( after_load == 'reload_page' ) {
$.blockUI({ message: '
'+'Loading'+'...
' });
var entity_name = ajax_list_activeInput.name;
document.location.href = document.location.href + '&' + entity_name + 'id=' + document.getElementById( ajax_list_activeInput.name + '_hidden' ).value;
ajax_list_activeInput.value = "";
}
}
ajax_options_hide();
}
function ajax_options_hide() {
if ( ajax_optionDiv ) {
ajax_optionDiv.style.display = 'none';
}
if ( ajax_optionDiv_iframe ) {
ajax_optionDiv_iframe.style.display = 'none';
}
}
function ajax_options_rollOverActiveItem( item, fromKeyBoard ) {
if ( ajax_list_activeItem ) {
ajax_list_activeItem.className = 'optionDiv';
}
item.className = 'optionDivSelected';
ajax_list_activeItem = item;
if ( fromKeyBoard ) {
if ( ajax_list_activeItem.offsetTop > ajax_optionDiv.offsetHeight ) {
ajax_optionDiv.scrollTop = ajax_list_activeItem.offsetTop - ajax_optionDiv.offsetHeight + ajax_list_activeItem.offsetHeight + 2 ;
}
if ( ajax_list_activeItem.offsetTop < ajax_optionDiv.scrollTop ) {
ajax_optionDiv.scrollTop = 0;
}
}
}
function ajax_option_list_buildList( letters, paramToExternalFile ) {
ajax_optionDiv.innerHTML = '';
ajax_list_activeItem = false;
if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length<=1){
ajax_options_hide();
return;
}
ajax_list_optionDivFirstItem = false;
var optionsAdded = false;
for(var no=0;no < ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length;no++){
if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].length==0)continue;
optionsAdded = true;
var div = document.createElement('DIV');
var items = ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].split(/###/gi);
if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length==1 && ajax_list_activeInput.value == items[0]){
ajax_options_hide();
return;
}
div.innerHTML = items[items.length-1];
if ( after_load == 'load_mop_data' ||
after_load == 'load_mop_data_2' ||
after_load == 'load_mop_data_3' ) {
div.id = items[0] + "###" + items[1];
}else{
div.id = items[0];
}
div.className='optionDiv';
div.onmouseover = function(){ ajax_options_rollOverActiveItem(this,false) }
div.onclick = ajax_option_setValue;
if(!ajax_list_optionDivFirstItem)ajax_list_optionDivFirstItem = div;
ajax_optionDiv.appendChild(div);
}
if(optionsAdded){
ajax_optionDiv.style.display='block';
if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='';
ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
}
}
function ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,whichIndex)
{
if(whichIndex!=currentListIndex)return;
var letters = inputObj.value;
var content = ajax_list_objects[ajaxIndex].response;
var elements = content.split('|');
ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()] = elements;
ajax_option_list_buildList(letters,paramToExternalFile);
}
function ajax_option_resize(inputObj)
{
ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
if(ajax_optionDiv_iframe){
ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
}
}
function ajax_showOptions( inputObj, paramToExternalFile, e ) {
searchParams[0] = inputObj;
searchParams[1] = paramToExternalFile;
searchParams[2] = new Object();
searchParams[2].keyCode = e.keyCode;
searchParams[2].target = e.target;
searchParams[2].srcElement = e.srcElement;
// if the timer was already active, than stop it
if ( timer_id != null ) {
clearTimeout( timer_id );
}
timer_id = setTimeout( startSearch, trigger_timeout );
}
function startSearch() {
ajax_showOptions1( searchParams[0], searchParams[1], searchParams[2] );
}
function ajax_showOptions1( inputObj, paramToExternalFile, e ) {
if ( e.keyCode == 13 || e.keyCode == 9 || e.keyCode == 38 || e.keyCode == 40 ) return;
//if(ajax_list_currentLetters[inputObj.name]==inputObj.value)return;
//we want to overpass conditions on letters and on cachedlists if we come from a click on the fakeselect image
if ( !ajax_list_cachedLists[paramToExternalFile] ) {
ajax_list_cachedLists[paramToExternalFile] = new Array();
}
ajax_list_currentLetters[inputObj.name] = inputObj.value;
if ( !ajax_optionDiv ) {
ajax_optionDiv = document.createElement('DIV');
ajax_optionDiv.id = 'ajax_listOfOptions';
document.body.appendChild( ajax_optionDiv );
if ( ajax_list_MSIE ) {
ajax_optionDiv_iframe = document.createElement('IFRAME');
ajax_optionDiv_iframe.border='0';
ajax_optionDiv_iframe.style.width = ajax_optionDiv.clientWidth + 'px';
ajax_optionDiv_iframe.style.height = ajax_optionDiv.clientHeight + 'px';
ajax_optionDiv_iframe.id = 'ajax_listOfOptions_iframe';
document.body.appendChild(ajax_optionDiv_iframe);
}
var allInputs = document.getElementsByTagName('INPUT');
for ( var no = 0; no < allInputs.length; no++ ) {
if ( !allInputs[no].onkeyup ) {
allInputs[no].onfocus = ajax_options_hide;
}
}
var allSelects = document.getElementsByTagName('SELECT');
for( var no = 0; no < allSelects.length; no++ ) {
allSelects[no].onfocus = ajax_options_hide;
}
var oldonkeydown = document.body.onkeydown;
if ( typeof oldonkeydown != 'function' ) {
document.body.onkeydown = ajax_option_keyNavigation;
} else {
document.body.onkeydown = function() {
oldonkeydown();
ajax_option_keyNavigation();
}
}
var oldonresize = document.body.onresize;
if ( typeof oldonresize != 'function' ) {
document.body.onresize = function() {
ajax_option_resize(inputObj);
};
} else {
document.body.onresize = function(){
oldonresize();
ajax_option_resize(inputObj);
}
}
}
if ( inputObj.value.length < minimumLettersBeforeLookup ) {
if ( !clickonselect( e ) ) {
ajax_options_hide();
return;
}
}
ajax_optionDiv.style.top = ( ajax_getTopPos( inputObj ) + inputObj.offsetHeight + ajaxBox_offsetY ) + 'px';
ajax_optionDiv.style.left = ( ajax_getLeftPos( inputObj ) + ajaxBox_offsetX ) + 'px';
if ( ajax_optionDiv_iframe ) {
ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
}
ajax_list_activeInput = inputObj;
if ( clickonselect( e ) ) {
letters = '';
} else {
letters = inputObj.value;
}
ajax_optionDiv.onselectstart = ajax_list_cancelEvent;
currentListIndex++;
if ( !clickonselect( e ) && ajax_list_cachedLists[paramToExternalFile][inputObj.value.toLowerCase()] ) {
ajax_option_list_buildList( letters, paramToExternalFile, currentListIndex );
} else {
var tmpIndex = currentListIndex / 1;
ajax_optionDiv.innerHTML = this.message_onLoading + '...';
ajax_optionDiv.style.display = 'block';
var ajaxIndex = ajax_list_objects.length;
ajax_list_objects[ajaxIndex] = new sack();
debugUrl='debug_host=127.0.0.1&debug_port=10000&start_debug=1&debug_stop=1&start_profile=1';
var url = ajax_list_externalFile + '?' + paramToExternalFile + '&letters=' + letters +'&';//+debugUrl ;
// Specifying which file to get
ajax_list_objects[ajaxIndex].requestFile = url;
// Specify function that will be executed after file has been found
ajax_list_objects[ajaxIndex].onCompletion = function() {
ajax_option_list_showContent( ajaxIndex, inputObj, paramToExternalFile, tmpIndex );
};
// Execute AJAX function
ajax_list_objects[ajaxIndex].runAJAX();
}
}
function ajax_option_keyNavigation(e)
{
if ( !e && document.all ) {
e = event;
}
if(!ajax_optionDiv)return;
if(ajax_optionDiv.style.display=='none')return;
if(e.keyCode==38){ // Up arrow
if(!ajax_list_activeItem)return;
if(ajax_list_activeItem && !ajax_list_activeItem.previousSibling)return;
ajax_options_rollOverActiveItem(ajax_list_activeItem.previousSibling,true);
}
if(e.keyCode==40){ // Down arrow
if(!ajax_list_activeItem){
ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
}else{
if(!ajax_list_activeItem.nextSibling)return;
ajax_options_rollOverActiveItem(ajax_list_activeItem.nextSibling,true);
}
}
if(e.keyCode==13 || e.keyCode==9){ // Enter key or tab key
if(ajax_list_activeItem && ajax_list_activeItem.className=='optionDivSelected')ajax_option_setValue(false,ajax_list_activeItem);
if(e.keyCode==13)return false; else return true;
}
if(e.keyCode==27){ // Escape key
ajax_options_hide();
}
}
document.documentElement.onclick = autoHideList;
function autoHideList(e)
{
if ( !e && document.all ) {
e = event;
}
if (e.target) source = e.target;
else if (e.srcElement) source = e.srcElement;
if (source.nodeType == 3) // defeat Safari bug
source = source.parentNode;
if(clickonselect(e))
return;
if(source.tagName.toLowerCase()!='input' && source.tagName.toLowerCase()!='textarea')ajax_options_hide();
}
function clickonselect( e ){
if ( !e && document.all ) {
e = event;
}
if (e.target) {
source = e.target;
} else if (e.srcElement) {
source = e.srcElement;
}
// defeat Safari bug
if (source.nodeType == 3) {
source = source.parentNode;
}
if ( source.id == 'fakeselect' ) {
return true;
} else {
return false;
}
}