/*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