if(typeof(ics)=='undefined')	ics={};

ics.datatable={};
ics.datatables={}

ics.datatable.newDatatable=function(dtName,dtUrl,dtLimit,dtTotalPages,dtSortColumn,dtSortDirection){
	ics.datatables[dtName]={page:1,url:dtUrl,data:[],limit:dtLimit,totalPages:dtTotalPages,sortColumn:dtSortColumn,sortDirection:dtSortDirection}
	ics.datatable.setSortClass(dtName,dtSortColumn,dtSortDirection);
}

ics.datatable.sort=function(dtName,dtColumn){
	ics.datatable.unsetSortClass(dtName,ics.datatables[dtName].sortColumn);
	newDir='asc';
	if(ics.datatables[dtName].sortColumn == dtColumn){
		newDir= (ics.datatables[dtName].sortDirection=='asc')?'desc':'asc';
	}
	data=dtName+'_page=1';
	ics.datatables[dtName].sortColumn=dtColumn;
	ics.datatables[dtName].sortDirection=newDir;
	
	data+='&'+dtName+'_sort_column='+(dtColumn);
	data+='&'+dtName+'_sort_direction='+(ics.datatables[dtName].sortDirection);
	ics.setSelector(ics.getE(dtName+'_page_selector'),1);
	
	ics.datatable.setSortClass(dtName,dtColumn,newDir);
	ics.datatable.getData(dtName,data);
}

ics.datatable.setSortClass=function(dtName,dtColumn,dtDirection){
	obj=ics.getE(dtName+'_column_'+dtColumn);
	obj.className+=' dt_sort_'+dtDirection;
}

ics.datatable.unsetSortClass=function(dtName,dtColumn){
	obj=ics.getE(dtName+'_column_'+dtColumn);
	classes=new String(obj.className).split(' ');
	finalClasses=[];
	for(a=0;a<classes.length;a++){
		//alert('examining '+classes[a]);
		if(classes[a]!='dt_sort_asc' && classes[a]!='dt_sort_desc')
			finalClasses.push(classes[a]);
	}
	obj.className=finalClasses.join(' ');
}

ics.datatable.changePage=function(dtName,newDirection){
	oldPage=ics.datatables[dtName].page;
	newPage=oldPage;
	switch(newDirection){
		case 'first': newPage=1; break;
		case 'previous': newPage--; break;
		case 'next': newPage++; break;
		case 'last': newPage=ics.datatables[dtName].totalPages; break;
		case 'goto': newPage=arguments[2]; break;
	}
	if((newPage==oldPage && newDirection=='first') || newPage<1){
		alert('You\'re already on page 1.');
		return;
	}
	if((newPage==oldPage && newDirection=='last') || newPage>ics.datatables[dtName].totalPages){
		alert('You\'re already on the last page.');
		return;
	}
	
	ics.setSelector(ics.getE(dtName+'_page_selector'),newPage)
	
	data=dtName+'_page='+(newPage);
	data+='&'+dtName+'_sort_column='+(ics.datatables[dtName].sortColumn);
	data+='&'+dtName+'_sort_direction='+(ics.datatables[dtName].sortDirection);
	ics.datatable.getData(dtName,data);	
}

ics.datatable.getData=function(dtName,dtData){
	requestor=ics.getXmlRequestor();
	requestor.onreadystatechange=function(){
		if(requestor.readyState==4)
			ics.datatable.updateData(dtName,requestor);
	}
	//alert('index.php'+ics.datatables[dtName].url);
	requestor.open('POST','index.php'+ics.datatables[dtName].url,true);
	requestor.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	requestor.send(dtData);
}

ics.datatable.updateData=function(dtName,newData){
	//alert(newData.responseText);
	eval(newData.responseText);
	data=ics.datatables[dtName].data;
	// loop through data rows
	for(a=0;a<ics.datatables[dtName].limit;a++){
		// loop through table rows
		if(data[a]){
			for(b=0;b<data[a].length;b++){
				// check to see if there are fewer rows in the data set than in the html
				if(a>data.length){
					obj=ics.getE(dtName+'_'+(a + 1 ) +'_'+b);
					if(obj)
						obj.style.display=none;
				}
				else{
					obj=ics.getE(dtName+'_'+(a + 1 )+'_'+b);
					if(obj)
						if(obj.style)
							obj.style.display='';
					// loop through the cells and replace the contents :D
					for(cellId in data[a][b]){
						cellObj=ics.getE(cellId);
						if(cellObj)
							cellObj.innerHTML=data[a][b][cellId];
					}
				}
			}
		}else{
			foundRow=true;
			rowCounter=0;
			while(foundRow){
				obj=ics.getE(dtName+'_'+(a + 1 ) +'_'+rowCounter);
				if(obj){
					obj.style.display='none';
				}else{
					foundRow=false;
				}
				rowCounter++;
			}
		}
	}
}
