/* abstract fancy inputa */ function fancyInput() { this.obj = new Object(); this.data = new Object(); this.options = new Array(); this.getObjectData = function() { var attributes = new Array('style','className','id','value','name','onclick','onchange','onmouseover','onmousemove','onmouseout','ondblclick'); for(var i = 0; i < attributes.length; i++){ if(not(this.data[attributes[i]])){ if(!not(this.obj[attributes[i]])){ this.data[attributes[i]] = this.obj[attributes[i]]; } else { this.data[attributes[i]] = null; } } } } this.cancelBubble = function(e) { if(!e){ if(!not(window.event.cancelBubble)) window.event.cancelBubble = true; } else { if(e.stopPropagation) e.stopPropagation(); } } this.trigger = function(eventName,e) { eventName = 'on'+eventName; if(this.data[eventName]){ var ret = this.data[eventName](e); if(ret != false){ return true; } return false; } return true; } this.createInput = function(value) { var input = document.createElement('input'); input.type = 'hidden'; if(this.obj && this.obj.name){ input.name = this.obj.name; } else { input.name = ''; } input.value = value; input.setValue = function(value) { this.value = value; } input.setName = function(name) { this.name = name; } input.clear = function() { this.value = ''; this.name = ''; } return input; } this.createPlainContainer = function(className) { var cont = document.createElement('div'); setClass(cont,className); if(this.data && this.data.className){ setClass(cont,this.data.className,true); } return cont; } this.createList = function(selected,form) { if(not(selected)){ var selected = 0; } var list = document.createElement('div'); list.className = 'list'; list.fancy = this; if(form){ list.form = form; } list.selected = selected; list.highlight = selected; list.mouseover = false; list.visible = false; list.hide = function() { setStyle(this,'display','none'); this.visible = false; for(var i = 0; i < this.childNodes.length; i++){ var item = this.childNodes.item(i); unsetClass(item,'hover'); } removeListener(document,'click'); if(this.fancy.onListHidden){ this.fancy.onListHidden(); } } list.show = function(obj) { if(not(obj) || obj == false){ setStyle(this,'top',-1000,'px'); setStyle(this,'left',-1000,'px'); } else { var y = getAbsoluteTop(obj) + getRealHeight(obj); var x = getAbsoluteLeft(obj); setStyle(this,'top',y,'px'); setStyle(this,'left',x,'px'); } this.visible = true; setStyle(this,'display','block'); setClass(this.fancy.options[this.selected],'hover',true); this.highlight = this.selected; if(!not(obj) && obj != false){ document.fancy = this.fancy; document.onclick = function(e) { this.fancy.hideLists(); } addListener(window,'blur',function(e) { this.document.fancy.hideLists(); }); this.fancy.obj.onkeydown = function(e) { this.fancy.list.onkeydown(e); }; } var fullSelectWidth = !not(this.fancy.data.width) ? this.fancy.data.width + (!not(this.fancy.data.buttonWidth) ? this.fancy.data.buttonWidth : 0) : 0; if(this.getWidth() <= fullSelectWidth){ setStyle(this,'width',fullSelectWidth,'px'); } if(this.fancy.onListShown){ this.fancy.onListShown(); } } list.onkeydown = function(e) { if(!e){ var e = window.event; } if(!this.visible){ return false; } if(not(this.fancy.options[this.highlight])){ this.highlight = 0; } if(e.keyCode == 13 || e.keyCode == 35){ if((this.fancy.options[this.highlight])){ this.fancy.options[this.highlight].onclick(e); this.fancy.obj.changeName(); return true; } } this.fancy.options[this.highlight].onmouseout(); if(e.keyCode == 38){ if(this.onhighlight){ this.onhighlight(); } //do gory if(this.highlight > 0){ this.highlight -= 1; } else { this.highlight = this.fancy.options.length-1; } } if(e.keyCode == 40){ if(this.onhighlight){ this.onhighlight(); } //na dol if(this.highlight+1 < this.fancy.options.length){ this.highlight += 1; } else { this.highlight = 0; } } if(e.keyCode == 27){ this.hide(); } this.fancy.options[this.highlight].onmouseover(); } list.getWidth = function() { var v = this.visible; if(!v){ this.show(); } var w = getRealWidth(this.fancy.options[0]); if(!v){ this.hide(); } return w; } list.update = function(clear) { if(not(clear)){ var clear = true; } if(clear){ this.clear(); } for(var i=0; i 0){ this.removeChild(this.childNodes[0]); } } setStyle(list,'cssFloat','left'); setStyle(list,'cursor','default'); setStyle(list,'position','absolute'); setStyle(list,'background','#fff'); setStyle(list,'display','none'); if(this.options.length > 0) list.update(false); return list; } this.hideLists = function() { for(var i = 0; i= this.min_length){ this.timeout = setTimeout("this.fancy.do_request()", this.request_timeout); } else { if(this.list.visible){ this.list.hide(); } } } this.onload = function() { var cont = this.createPlainContainer('fancyTextInput'); this.list = cont.appendChild(this.list); document.body.appendChild(cont); document.fancyLists.push(this.list); } this.updateList = function(options) { this.options = new Array(); if(options.data.length == 0){ this.list.clear(); this.list.hide(); return false; } for(var i = 0; i