/*optimised list system as an object*/ function optiList(){ var object=this; this.listData; var htmlBlocks=new Array(); var htmlBlocksOn; this.listTotal=0; this.filterArray=new Array(); this.filter=false; this.filterSource='';//url to data list this.filterQstring='';//qstring to post this.idPrefix=''; this.yPositions=new Array(); this.downloadList=''; this.listId=''; this.selectedId; this.allValues=new Array(); this.selected; this.makeList=makeList; this.scrollTop=0; this.scrolling=listScrolling; this.loadFilter=loadFilter; function makeList(){ htmlBlocksOn=''; var listId=this.listId; var listData=this.listData; var idPrefix=this.idPrefix; var filterArray=this.filterArray; var filter=this.filter; var selectedId=this.selectedId; var selected=this.selected; this.listTotal=0; var html = ""; var panelHtml=''; var count=0; var panelCount=0; var panelids=0; var allValues=new Array(); listTotal=new Array(); htmlBlocks=new Array(); this.downloadList=''; if(!filter){ //make sure filter bar is not showing if(document.getElementById(listId.replace('Inner','Outer'))){ document.getElementById(listId.replace('Inner','Outer')).style.top="16px"; } } if ((!listData || listData.length < 1) || (!filterArray && filter)) { html="

no records found

"; }else{ for (rows in listData) { if (listData[rows].id) { allValues[listData[rows].id]= listData[rows].value; if (!filter || filterArray[listData[rows].id] == true){ if (listData[rows].value) { panelHtml += "
  • " + listData[rows].value+ "
  • "; }else{ panelHtml += "
  • no value
  • "; } this.yPositions[listData[rows].id] = count * 20; listTotal[count]=listData[rows].id; count++; this.downloadList+="|"+listData[rows].id; panelCount++; if (panelCount > 99) { htmlBlocks[panelids]=new Object(); htmlBlocks[panelids].top=((count -panelCount) * 20); htmlBlocks[panelids].height=(panelCount * 20); htmlBlocks[panelids].html=""; panelCount = 0; panelids++; panelHtml = ''; } } } } this.allValues=allValues; if (count == 0) { html="

    no records found

    "; var list=document.getElementById(listId); list.innerHTML = html; return; } else { htmlBlocks[panelids]=new Object(); htmlBlocks[panelids].top=((count -panelCount) * 20); htmlBlocks[panelids].height=(panelCount * 20); htmlBlocks[panelids].html=""; html = "
    " + htmlBlocks[0].html + "
    ";//show top one by default } } var list=document.getElementById(this.listId); list.innerHTML = html; if(object.mouseUp){objectListen(list,"mouseup",object.mouseUp);} if(object.dblClick){objectListen(list,"dblclick",object.dblClick);} if(object.mouseDown){objectListen(list,"mousedown",object.mouseDown);} objectListen(list,"scroll",object.scrolling); selected=document.getElementById('usersall'); if ('function' == typeof redraw){redraw('');} setStatus(count+" items in list"); htmlBlocksOn=''; object.scrollTop=0; //userDragSetup(userList); if(selectedId && document.getElementById("+idPrefix+"+selectedId)){ selected=document.getElementById("+idPrefix+"+selectedId); selected.className='selected'; }else{ selected=''; } if (selectedId) { var offset=this.yPositions[selectedId]; list.scrollTop=0;//reset first to force onscroll event list.scrollTop=offset-60; }else { if(duoDesktop){air.trace('optimised');} list.scrollTop = "2"; } this.listTotal=count; } function listScrolling(e){ if(browser=="ie"){var item=window.event.srcElement;}else{var item=e.target;} var elem=item; var html=''; var panelsOn=''; var idPrefix=object.idPrefix; var selectedId=object.selectedId; var selected=object.selected; if (object.scrollTop+100 < elem.scrollTop || object.scrollTop-100 > elem.scrollTop ) { object.scrollTop=elem.scrollTop; //hide all but visible var tops=''; for (var i = 0; i < htmlBlocks.length; i++) { panelTop = htmlBlocks[i].top; panelHeight = htmlBlocks[i].height; if ((panelTop + panelHeight) < object.scrollTop || panelTop > (object.scrollTop + elem.offsetHeight)) { tops+="-"; } else { html+=htmlBlocks[i].html; panelsOn+=","+i; tops+="|"; } } if(htmlBlocksOn!=panelsOn){ document.getElementById(idPrefix+"listPanels").innerHTML=html; if(selectedId && document.getElementById(idPrefix+selectedId)){ selected=document.getElementById(idPrefix+selectedId); selected.className="selected"; } htmlBlocksOn=panelsOn; } setStatus(tops); } } function loadFilter(){ var myConn = new XHConn(); if (myConn && object.filterSource && object.filter==true) { companyFilterId=companySelectedId; myConn.connect(object.filterSource, "POST",object.filterQstring, loadFilter_res); } } function loadFilter_res(data){ var data=parseJSON(data); object.filterArray=data.info; object.filter=true; object.makeList(); } }//optilist end