/* (c) daa */

//GENERAL FUNCTIONS
function sortNrAsc(a,b){return a - b;}
function sortNrDesc(a,b){return b - a;}

//WINDOW FUNCTIONS
var shift_key	=16;	//keyCode
var ctrl_key	=17;
var alt_key	=18;
var esc_key	=27;
var up_key	=38;
var down_key	=40;
var left_key	=37;
var right_key	=39;
var a_key	=65;
var d_key	=68;
var i_key	=73;
var tab_key	=9;
var ins_key	=45;
var del_key	=46;
var backspace_key=8;
var space_key	=32;
var home_key	=36;
var end_key	=35;

function window_onkeydown(e){	if(!e) e=window.event;

				var tbody=SAADlist.tBodies[0];

				if(e.ctrlKey)
					switch(e.keyCode){
						case a_key:	tbody.selROWS();	return false;	//select All
						case i_key:	tbody.selINV();		return false;	//Invert selection
						case d_key:	tbody.selROWS(0,0);	return false;	//Deselect
						//move selection
						case up_key:	tbody.selROWS(tbody.selBEG()-1,tbody.selEND()-1);	return false;
						case down_key:	tbody.selROWS(tbody.selBEG()+1,tbody.selEND()+1);	return false;
						case left_key:	tbody.selCOL(tbody.selectedCOL()-1);tbody.statistics();	return false;
						case right_key:	tbody.selCOL(tbody.selectedCOL()+1);tbody.statistics();	return false;
						}
				if(e.shiftKey)
					switch(e.keyCode){
						case up_key:	if(tbody.selEND-tbody.selBEG>1)
								tbody.selROWS(tbody.selBEG(),tbody.selEND()-1);	return false;
						case down_key:	tbody.selROWS(tbody.selBEG(),tbody.selEND()+1);	return false;
						}
				}
function window_onkeyup(e){	return this.onkeydown(e);}
function window_onkeypress(e){	return this.onkeydown(e);}

//SAADlist FUNCTIONS
function SAADlist_autoID() {	for(var b=0;tbody=SAADlist.tBodies[b];b++)
				tbody.autoID();
				}

//TBODY FUNCTIONS
function tbody_autoID() {	for(var r=0;tr=this.rows[r];r++){
					var inputs=tr.getElementsByTagName('input');
					for(var i=0;input=inputs[i];i++)
						if(input.name=='autoID[]')
							input.disabled=!tr.Cclass('selected');
					}

				//alert for debugging
				var inputs=this.getElementsByTagName('input');
				var alertstring='';
				for(var i=0;input=inputs[i];i++)
					if(input.name!='autoID[]')
						continue;
					else	alertstring+='autoID['+i+']='+input.value+' -> '+input.disabled+'\n';
			//	alert(alertstring);
				}

function tbody_onmousedown(e){	if(!e) e=window.event;	this.md=true;}
function tbody_onmousemove(e){	if(!e) e=window.event;	this.mm=this.md;} // check if mousemove while mousedown
function tbody_onmouseup(e){	if(!e) e=window.event;

				if(this.mm) this.selROWS(this.selBEG(),this.selEND()); // improvement (for a too fast mouse move)
				this.md=false;
				this.mm=false;
				}
function tbody_selBEG(){	//RETURN THE INDEX OF FIRST SELECTED ROW
				var row;
				for(var r=0;row=this.rows[r];r++)
				if(row.Cclass('selected')) return r;// else alert('selBEG '+r+' is not selected');			
				return null;
				}
function tbody_selEND(){	//RETURN THE INDEX OF FIRST NOT SELECTED ROW
				var row;
				for(var r=this.rows.length;r>0;r--)
				if(this.rows[r-1].Cclass('selected')) return r;// else alert('selEND '+r+' is not selected');			
				return null;
				}
function tbody_selROWS(fr,to){	//SELECT ROWS IN RANGE (FROM-TO)
				var row;
				if(fr==null)	fr=0;
				if(to==null)	to=this.rows.length;
				for(var r=0;row=this.rows[r];r++)
					if(r<fr || r>=to)
						row.Rclass('selected');	//out of range
					else	row.Aclass('selected'); //in range
				this.statistics();
				return true; //??
				}
function tbody_selINV(){	//INVERT SELECTION
				for(var r=0;row=this.rows[r];r++)
					row.Tclass('selected');
				this.statistics();
				return true; //??
				}
function tbody_selCOL(nth){	//SELECT A COLUMN
				var row; var td;				
				for(var r=0;row=this.rows[r];r++){
					var cells=row.getElementsByTagName('td');
					for(var t=0;td=cells[t];t++)
						if(t!=nth)
							td.Rclass('selected');
						else	td.Aclass('selected'); //this is the one!
					}
				return true; //??
				}
function tbody_selectedCOL(){	//RETURN THE INDEX OF THE SELECTED COLUMN
				var td;
				var cells=this.rows[0].getElementsByTagName('td');
				for(var t=0;td=cells[t];t++)
					if(td.Cclass('selected')) return t;
				return -1; //??
				}
function tbody_statistics(){	//GENERATE STATISTICS from content (SUM,COUNT,MAX,MIN,AVG)
				var SB=this.selBEG(); var SE=this.selEND();
				if(SB==null || SE==null) return false;

				var val=new Array(); var selROWS=0; var td;
				for(var r=SB;r<SE;r++){
					if(!this.rows[r].Cclass('selected')) continue; // only selected rows participate in statistics
					var cells=this.rows[r].getElementsByTagName('td');
					for(var t=0;td=cells[t];t++){
						if(!val[t]) val[t]=new Array();
						val[t][r]=td.getLastContent();
						}
					selROWS++; //count selected rows
					}
				//SUM,COUNT,AVG,MINIM,MAXIM
				var sum=new Array(); var count=new Array(); avg=new Array(); var minim=new Array(); var maxim=new Array();
				var x;
				for(var t=0;t<val.length;t++){
//					val[t].sort(sortNrAsc); //sort numbers
					sum[t]=0;
					count[t]=0;			
//					minim[t]=val[t][0];
					for(var r=0;r<val[t].length;r++){
						x=parseFloat(val[t][r]);
						if(!isNaN(x)){
							sum[t]+=x;
							count[t]++;
//							maxim[t]=x;
							}
						}
					avg[t]=sum[t]/count[t];
					}
				//put selected col results in window.status
				var SC=this.selectedCOL();
				if(SC!=null)
//					window.status=('SUM='+sum[SC].toFixed(2)+' COUNT='+count[SC]+' AVG='+avg[SC].toFixed(2)+' MIN='+parseFloat(minim[SC])+' MAX='+parseFloat(maxim[SC])+' COL='+(SC+1)+' selROWS='+selROWS);
					window.status=('SUM='+sum[SC].toFixed(2)+' COUNT='+count[SC]+' AVG='+avg[SC].toFixed(2)+' COL='+(SC+1)+' selROWS='+selROWS);
				else	alert('statistics - NO selectedCOL!');
				val=null;//unset
				return true; //??				
				}
//TR FUNCTIONS
function tr_onclick(e){
	if(!e) e=window.event;

	//identify the n'th clicked table cell and select that COL!
//	if(e.target)		ctd=e.target;
//	else if (e.srcElement)	ctd=e.srcElement;
//	if (ctd.nodeType==3)	ctd=ctd.parentNode;	// defeat Safari bug
//	while (ctd.tagName.toLowerCase()!='td' && ctd.tagName.toLowerCase()!='body')
//				ctd=ctd.parentNode;	// go upwards
//	alert('You clicked on the cell '+ntd+'/'+rtd.length);

	//SHIFT+Click?
	if(e.shiftKey==1){
		this.Aclass('selected');
		this.tbody.selROWS(this.tbody.selBEG(),this.tbody.selEND());
		return true;
		}
	//CTRL+Click?
	if(e.ctrlKey==1){
		this.Tclass('selected');
		this.tbody.statistics();
		return true;
		}
	//simple click?
	for(r=0;row=this.tbody.rows[r];r++)
		if(row==this)
			row.Aclass('selected');
		else	row.Rclass('selected');
	this.tbody.statistics();

	return true;
	}

function tr_ondblclick(e){	if(!e) e=window.event;
	this.Aclass('selected');

	wsf = document.getElementById('SAADform') || false;
	if(wsf){

		//switch to another target?
		if(e.ctrlKey) {
			initialtarget=wsf.target;
			wsf.target="_blank";
			}
		wsf.action='doc_display.php';

		//enable-disable autoID-s		
		SAADlist.autoID();

		//submit form
		wsf.submit();

		//return to initial target?
		if(e.ctrlKey)
			wsf.target=initialtarget;
		}
	}

//TD FUNCTIONS
function td_getIndex(){
	var rtd=this.tr.getElementsByTagName('td');	// all cells on this row
	for(i=0;i<rtd.length;i++) if(rtd[i]==this) return i; return null;
	}
function td_getLastContent(){
	var LC=this; //Last Container
	do {	var childNodeFound=false;
		for(i in LC.childNodes)
			if(!LC.childNodes[i].tagName) continue;
			else {	LC=LC.childNodes[i];
				childNodeFound=true;
				break;
				}
		}
	while(childNodeFound);
	return LC.innerHTML;
	}
function td_onmousedown(e){
	this.tr.tbody.selCOL(this.getIndex());
	}
function td_onclick(){
	this.getLastContent();
	}

//INITIALIZATION
function SAADlist_init(){
	//list
	var SAADlist=document.getElementById('SAADlist') || false;
	if(SAADlist){
		SAADlist.autoID=SAADlist_autoID;
		for(var b=0;tbody=SAADlist.tBodies[b];b++){
			//prepare this tbody
			tbody.autoID		=tbody_autoID;
			tbody.onmousedown	=tbody_onmousedown;
			tbody.onmousemove	=tbody_onmousemove;
			tbody.onmouseup		=tbody_onmouseup;
			tbody.selCOL		=tbody_selCOL;
			tbody.selectedCOL	=tbody_selectedCOL;
			tbody.selBEG		=tbody_selBEG;
			tbody.selEND		=tbody_selEND;
			tbody.selROWS		=tbody_selROWS;
			tbody.selINV		=tbody_selINV;
			tbody.statistics	=tbody_statistics;
			//prepare rows in this tbody
			for(var r=0;tr=tbody.rows[r];r++){
				tr.tbody=tbody;
				tr.name=b+"_"+r;
				tr.ondblclick	=tr_ondblclick;
				tr.onclick	=tr_onclick;
				tr.Aclass	=Aclass;
				tr.Rclass	=Rclass;
				tr.Cclass	=Cclass;
				tr.Tclass	=Tclass;
				tr.onmousemove	=function(){if(this.tbody.md)this.Aclass('selected');}
				tr.onmouseover	=function(){if(this.tbody.md)this.Aclass('selected');	/*this.Aclass('highlighted');*/}
				tr.onmouseout	=function(){						/*this.Rclass('highlighted');*/}
				//prepare cells in this row ( .cells[] is not W3C compliant )
				var cells=tr.getElementsByTagName('td');
				for(var i=0;td=cells[i];i++){
					td.tr		=tr;
					td.onclick	=td_onclick;
					td.onmousedown	=td_onmousedown;
					td.getIndex	=td_getIndex;
					td.getLastContent	=td_getLastContent;
					td.Aclass	=Aclass;
					td.Rclass	=Rclass;
					td.Cclass	=Cclass;
					td.Tclass	=Tclass;
					}
				}
			}
		}
	else return false; // no SAADlist found!
	window.onkeypress=window_onkeypress;
	window.onkeydown=window_onkeydown;
	window.onkeyup=window_onkeyup;
	window.status = " SAADlist - some success...";
	}
SAADlist_init();

