var iRef_Mouse = 1;
var iRef_Focus = 2;
var iRef_First = 3;
var iRef_Last = 4;

var iWhere_Before = 1;
var iWhere_After = 2;

var number_of_Clones = -1;

/*
	Name		=	addTableRow
	Module		=	MultiRow
	Version		=	1.5
*/
function addTableRow(oTable,ilimit, iRef, iWhere){
	var refTRIndex;
	var trindex;
	var trows_length = oTable.rows.length;
	if(ilimit==-2){
		var limit=-1;
	}else{
		var limit=parseInt(5-ilimit);
	}
	if(trows_length==limit){
		return false;
	}
	switch(iRef){
	case iRef_Mouse:{
			// still under work
			//alert(event.clientX);
			var sourceElement = document.body.componentFromPoint(event.clientX-100, event.clientY);
			if(sourceElement!=""){
				// now we have to go all the way up until we hit a table element or the document element.
				var nCount = 0;
				while(true && nCount < 10){
					alert(sourceElement.onClick);
					sourceElement = sourceElement.parentNode;
					nCount ++;
				}
				alert(mouseTR);
				var mouseTR;
				refTRIndex = mouseTR.rowIndex;
			}
			break;
		}
	case iRef_Focus:{
			var focusTR = document.activeElement.parentElement.parentElement;
			refTRIndex = focusTR.rowIndex;
			break;
		}
	case iRef_First:{
			break;
		}
	case iRef_Last:{
			refTRIndex = -1;
			break;
		}
	}
	
	switch(iWhere){
	case iWhere_Before:{
			if(refTRIndex==-1){
				trindex = trows_length;
			}else{
				trindex = refTRIndex;
			}
			break;
		}
	case iWhere_After:{
			if(refTRIndex==-1){
				trindex = -1;
			}else{
				trindex = refTRIndex + 1;
			}
			break;
		}
	}

	var oTR = addSimiliarRow(oTable, refTRIndex, trindex, iWhere);
	
	if(arguments[4]){
		// some function to call
		arguments[4](oTR);
	}else{
		// just do nothing
	}
}


/*
	Name		=	addSimiliarRow
	Module		=	MultiRow
	Version		=	1.0
*/
function addSimiliarRow(oTable, refTRIndex, trindex, iWhere){
	var oTR = oTable.rows.item(refTRIndex).cloneNode(true);
	if(iWhere==iWhere_Before){
		oTable.insertBefore(oTR, oTable.rows.item(refTRIndex));
	}else{
		try{
			oTable.insertBefore(oTR, oTable.rows.item(refTRIndex+1));
		}catch(e){
		}
	}

	number_of_Clones++;
	return oTR;
}

function delete_tr(){
	var oTR = document.activeElement.parentElement.parentElement;
	var oTable = oTR.parentElement;
	if (number_of_Clones > -1){
		oTable.removeChild(oTR);
		number_of_Clones --;
	}
}

function new_tr(x,remove,ilimit){
	var oTR = document.activeElement.parentElement.parentElement;
	alert(oTR);
	var oTable = oTR.parentElement;
	addTableRow(oTable,ilimit, iRef_Focus, iWhere_After, CleanTR);

	oTR.cells(x).getElementsByTagName("A").item(0).href="javascript:delete_tr()";
	oTR.cells(x).getElementsByTagName("A").item(0).innerHTML="Delete Row";
}

function CleanTR(oTR){
	// do whatever we want to the new TR
	var oTR_cells = oTR.cells;
	var oTR_cells_length = oTR.cells.length;
	for(var i=0; i<oTR.cells.length; i++){
		var oTR_cells_i_INPUT = oTR.cells(i).getElementsByTagName("INPUT");
		var oTR_cells_i_INPUT_length = oTR_cells_i_INPUT.length;
		for(var j=0; j<oTR_cells_i_INPUT_length; j++){
			oTR_cells_i_INPUT.item(j).value = "";
		}
		var oTR_cells_i_textarea = oTR.cells(i).getElementsByTagName("textarea");
		var oTR_cells_i_textarea_length = oTR_cells_i_textarea.length;
		for(var j=0; j<oTR_cells_i_textarea_length; j++){
			oTR_cells_i_textarea.item(j).value = "";
		}
	}
}
