/* 
documentazione
Richiede l'oggetto DOM
Attributi da usare
	Attributo:rowMover
	Valore:yes
	Elemento:TABLE
	Indica che in una Tabella ci sono righe da scambiare
	
	Attributo:movable
	Valore:yes
	Elemento:TR
	Indica che la riga puo' essere scambiata con altre	
	
	Attributo:move
	Valori:up,down
	Elemento:TR ogni elemento sotto TR (tipicamente TD o un DIV sotto un TD)
	Indica che il click sull'elemento sposta la riga su o giu' (a seconda del valore di move)
*/

//var eventNames=new Array("onabort","onactivate","onafterprint","onafterupdate","onbeforeactivate","onbeforecopy","onbeforecut","onbeforedeactivate","onbeforeeditfocus","onbeforepaste","onbeforeprint","onbeforeunload","onbeforeupdate","onblur","onbounce","oncellchange","onchange","onclick","oncontextmenu","oncontrolselect","oncopy","oncut","ondataavailable","ondatasetchanged","ondatasetcomplete","ondblclick","ondeactivate","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","onerror","onerrorupdate","onfilterchange","onfinish","onfocus","onfocusin","onfocusout","onhelp","onkeydown","onkeypress","onkeyup","onlayoutcomplete","onload","onlosecapture","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onmove","onmoveend","onmovestart","onpaste","onpropertychange","onreadystatechange","onreset","onresize","onresizeend","onresizestart","onrowenter","onrowexit","onrowsdelete","onrowsinserted","onscroll","onselect","onselectionchange","onselectstart","onstart","onstop","onsubmit","onunload")

var rowMover =new Object();

rowMover.elementRow=function(el){
	var e=el;
	while(e!=null){
		if (e.nodeName.toLowerCase()=="tr") return e;
		e=e.parentNode;
	}
	return e;
}

rowMover.rowTable=function(r){
	var e=r;
	while(e!=null){
		if (e.nodeName.toLowerCase()=="table") return e;
		e=e.parentNode;
	}
	return e;
}

rowMover.previusRow=function(currentRow){
var parent=currentRow.parentNode;
var childs=DOM.childElementsByTag(parent,"tr");
for(var i=0;i<childs.length;i++){
	var current=childs[i];	
	if(current==currentRow && i>0) return childs[i - 1];
	}
return null;
}

rowMover.nextRow=function(currentRow){
var parent=currentRow.parentNode;
var childs=DOM.childElementsByTag(parent,"tr");
for(var i=0;i<childs.length;i++){
	var current=childs[i];	
	if(current==currentRow && i<(childs.length -1)) return childs[i + 1];
	}
return null;
}

rowMover.move=function(e,direction){
	var d=(direction.toLowerCase()=="up")?"up":"down";
	var currentRow=rowMover.elementRow(e); 
		if (currentRow==null) 		return ;
	var currentTable=rowMover.rowTable(currentRow); 
	if (currentTable==null) 	return ;
	if(d=="up"){
		var previous=rowMover.previusRow(currentRow);		
		if(previous==null) 	 return ;
		if(typeof(currentRow.swapNode)!="undefined"){
			currentRow.swapNode(previous);
			return currentRow;
		}
		var CLONE=currentRow.cloneNode(true);
		rowMover.setupButtons(CLONE);
		previous.parentNode.insertBefore(CLONE,previous);
		previous.parentNode.removeChild(currentRow);
		return CLONE
	}
	else{	
		var next=rowMover.nextRow(currentRow);
		if(next==null) return ;
		if(typeof(currentRow.swapNode)!="undefined"){
			currentRow.swapNode(next);
			return currentRow;
		}
		var nextClone=next.cloneNode(true);
		rowMover.setupButtons(nextClone);
		next.parentNode.replaceChild(currentRow,next);
		return currentRow.parentNode.insertBefore(nextClone,currentRow);
	}	
}


rowMover.onChange=function(sender){
	var currentRow=rowMover.elementRow(sender); 
		if (currentRow==null) 	return	;
	var parent=currentRow.parentNode;
		if (parent==null) 		return ;
var rows=DOM.childElementsByTag(parent,"tr");
for(var i=0;i<rows.length;i++){
	var row=rows[i];
	var inputs=row.getElementsByTagName("input");
	for(var n=0;n<inputs.length;n++){
			var inp=inputs[n];
			var P=DOM.iGetAttribute(inp,"positionmarker");		
			if(	P=="yes" ) inp.value=i+1 ;
		}
	}
}
rowMover.moveUp=function(){
	var sender=(window.event)?window.event.srcElement:this;
	var e=rowMover.move(sender,"up");
	rowMover.onChange(e);
}

rowMover.moveDown=function(){
	var sender=(window.event)?window.event.srcElement:this;
	var e=rowMover.move(sender,"down");
	rowMover.onChange(e);	
}

rowMover.setupButtons=function (r,rowIndex){
	var rowElements=(typeof(document.all)!="undefined")? r.all:r.getElementsByTagName("*");	
	var n=0;
	while(n < rowElements.length){
		var e=rowElements[n++];		
		var m=DOM.iGetAttribute(e,"move");		
		if(	m!=null ){
			if (m.toLowerCase()=="up") 
				this.registerEvent(e,"click",rowMover.moveUp);
			else 
				this.registerEvent(e,"click",rowMover.moveDown);
		}
			var P=DOM.iGetAttribute(e,"positionmarker");		
			if(	P=="yes") e.value=rowIndex;
	}
}
rowMover.setupTable=function(tableIndex){
	var t=rowMover.tables[tableIndex]
	var rows = t.getElementsByTagName("TR")
	var i=0;
	var counter =0;
	while(i < rows.length){
		r=rows[i++];
		if(	DOM.iGetAttribute(r,"movable")=="yes"){		
			rowMover.setupButtons(r,++counter);
		}
	}
}


	
rowMover.tables=[];

rowMover.register=function(){
	var Tables= document.getElementsByTagName("TABLE");
	if(!window["DOM"]){
		alert("Missing object reference: DOM object");
		return;
		}	
	var i=0;
	while(i < Tables.length){
		var t=Tables[i ++];		
		t.ROWS=new Array();		
		var att=DOM.iGetAttribute(t,"rowMover");	
		if(att!=null ){
			var l = rowMover.tables.length;
			rowMover.tables[l]=t;
		if(!document.all)rowMover.setupTable(l);
		else window.setTimeout("rowMover.setupTable(" + l +")",500)	;
		}						
	}
}

rowMover.registerEvent=function(sender,eventName,f){
if ( typeof sender.addEventListener != "undefined" )
    sender.addEventListener( eventName, f, false );
else if ( typeof sender.attachEvent != "undefined" ) 
    sender.attachEvent( "on" + eventName, f );
else {
    if ( sender["on" + eventName] != null ) {
        var oldOnEvent = sender.onload;
        sender["on" + eventName] = function ( e ) {
            oldOnEvent( e );
            f();
        };
    }
    	sender["on" + eventName] =f;
	}
}

rowMover.autoreg=function(){
	this.registerEvent(window,"load",rowMover.register);
}

rowMover.autoreg();
