// fxDatablock

function fxDatablock(id) {
	this.datablockid = id;
	this.columns = new Array();
	this.iseditable = fxDatablock_iseditable;
	this.getcolumntype = fxDatablock_getcolumntype;
	this.rowselect = fxDatablock_rowselect;
	this.rowdeselect = fxDatablock_rowdeselect;
	this.currentlyselectedrow = null;
}

function fxDatablock_iseditable(columnName) {
	var value = false;
	var i = 0;
	for (i = 0; i < this.columns.length; i++) {
		if (this.columns[i][0] == columnName) {
			if (this.columns[i][2] == 'true') {
				value = true;
			}
		}
	}
	return value;
}

function fxDatablock_getcolumntype(columnName) {
	var value = "";
	var i = 0;
	for (i = 0; i < this.columns.length; i++) {
		if (this.columns[i][0] == columnName) {
			value = this.columns[i][1];
		}
	}
	return value;
}

function fxDatablock_rowselect(rowid) {
	if (this.currentlyselectedrow != null) {
		document.getElementById(this.currentlyselectedrow).fxDatablockRow.rowdeselect();
	}
	this.currentlyselectedrow = rowid;
	row = document.getElementById(rowid);
	cellCollection = row.getElementsByTagName("td");
	var i = 0;
	for (i = 0; i < cellCollection.length; i++) {
		currentCell = cellCollection.item(i);
		var idArray = currentCell.id.split('.');
		columnName = idArray[1];
		span = document.getElementById(currentCell.id + ".value");
		document.getElementById(this.datablockid + '.' + columnName).innerHTML = span.innerHTML;
	}
}

function fxDatablock_rowdeselect() {
	this.currentlyselectedrow = null;
	var i = 0;
	for (i = 0; i < this.columns.length; i++) {
		document.getElementById(this.datablockid + '.' + this.columns[i][0]).innerHTML = null;
	}
}

//fxDatablockRow

function fxDatablockRow(objPlaceholder,objDatablock) {
	this.placeholder = objPlaceholder;
	this.placeholder.fxDatablockRow = this;
	this.rowid = this.placeholder.id;
	this.datablock = objDatablock;
	this.request = null;
	
	this.render = fxDatablockRow_render;
	this.mousein = fxDatablockRow_mousein;
	this.mouseout = fxDatablockRow_mouseout;
	this.dblclick = fxDatablockRow_dblclick;
	this.singleclick = fxDatablockRow_singleclick;
	this.isdynamic = fxDatablockRow_isdynamic;
	this.isselected = fxDatablockRow_isselected;
	this.dynamicon = fxDatablockRow_dynamicon;
	this.dynamicoff = fxDatablockRow_dynamicoff;
	this.saverow = fxDatablockRow_saverow;
	this.rowselect = fxDatablockRow_rowselect;
	this.rowdeselect = fxDatablockRow_rowdeselect;
	this.addclass = fxDatablockRow_addclass;
	this.removeclass = fxDatablockRow_removeclass;

	this.render();
}

function fxDatablockRow_render() {
	this.placeholder.onmouseover = this.mousein;
	this.placeholder.onmouseout = this.mouseout;
	this.placeholder.ondblclick = this.dblclick;
	this.placeholder.onclick = this.singleclick;
}

function fxDatablockRow_mousein() {
	this.fxDatablockRow.addclass(this, 'highlight');
}

function fxDatablockRow_mouseout() {
	this.fxDatablockRow.removeclass(this, 'highlight');
}

function fxDatablockRow_dblclick() {
	if (this.fxDatablockRow.isdynamic()) {
		this.fxDatablockRow.dynamicoff();
	} else {
		this.fxDatablockRow.rowselect();
		this.fxDatablockRow.datablock.rowselect(this.fxDatablockRow.rowid);
		this.fxDatablockRow.dynamicon();
	}
}

function fxDatablockRow_singleclick() {
	if (this.fxDatablockRow.isdynamic() == false) {
		if (this.fxDatablockRow.isselected()) {
			this.fxDatablockRow.rowdeselect();
			this.fxDatablockRow.datablock.rowdeselect();
		} else {
			this.fxDatablockRow.rowselect();
			this.fxDatablockRow.datablock.rowselect(this.fxDatablockRow.rowid);
		}
	}
}

function fxDatablockRow_isdynamic() {
	value = false;
	var inputCollection = this.placeholder.getElementsByTagName("input");
	if (inputCollection.length > 0) {
		value = true;
	}
	return value;
}

function fxDatablockRow_isselected() {
	value = false;
	if (this.placeholder.className.indexOf('selected') != -1) {
		value = true;
	}
	return value;
}

function fxDatablockRow_dynamicon() {
	cellCollection = this.placeholder.getElementsByTagName("td");
	var i = 0;
	for (i = 0; i < cellCollection.length; i++) {
		currentCell = cellCollection.item(i);
		var idArray = currentCell.id.split('.');
		columnName = idArray[1];
		editable = this.datablock.iseditable(columnName);
		if (editable) {
			span = document.getElementById(currentCell.id + ".value");
			span.style.display = 'none';
			tempValue = span.innerHTML;
			tempSpan = currentCell.innerHTML;
			currentCell.innerHTML = tempSpan + '<input value="' + tempValue + '"/>';
			this.addclass(currentCell, 'dynamic');
		}
	}
}

function fxDatablockRow_dynamicoff() {
	var saveRequired = false;
	var postString = 'ispostback=true&fxformid=' + dynamicid + '&fxformpage=' + dynamicpage + '&fxformscheme=' + dynamicscheme + '&fxformsite=' + dynamicsite + '&fxrequestid=' + this.rowid;
	cellCollection = this.placeholder.getElementsByTagName("td");
	for (i = 0; i < cellCollection.length; i++) {
		currentCell = cellCollection.item(i);
		var idArray = currentCell.id.split('.');
		columnName = idArray[1];
		span = document.getElementById(currentCell.id + ".value");
		if (span.style.display == 'none') {
			span.style.display = '';
			inputCollection = currentCell.getElementsByTagName("input");
			tempValue = inputCollection[0].value;
			if (span.innerHTML != tempValue) {
				saveRequired = true;
			}
			span.innerHTML = tempValue;
			tempSpan = currentCell.innerHTML.toLowerCase();
			tempPos = tempSpan.indexOf('<input');
			tempSpan = currentCell.innerHTML.substring(0,tempPos);
			currentCell.innerHTML = tempSpan;
		} else {
			tempValue = span.innerHTML;
		}
		this.removeclass(currentCell, 'dynamic');
		postString = postString + '&' + columnName + '=' + tempValue;
	}
	if(saveRequired) {
		this.saverow(postString);
	}
}

function fxDatablockRow_saverow(postString) {
	url = location.href.substring(0,location.href.length - 5) + '.fxml';
	this.addclass(this.placeholder, 'updating');
  
  if (window.XMLHttpRequest) {
    request = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    request = new ActiveXObject("Microsoft.XMLHTTP");
  }
  
  if (request) {
		request.open("POST", url, true);
		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.onreadystatechange = function() {
    	var requestID = "";
    	if (request.readyState == 4) {
    		if (request.status == 200) {
    			var xmldoc = request.responseXML;
    			var tempObj = xmldoc.getElementsByTagName('XMLHTTPRequestID');
    			if (tempObj.length > 0) {
	    			var requestID = tempObj[0].firstChild.data;
	    		}
	    	}
	    	pagelevelremoveclass(document.getElementById(requestID), 'updating');
	    	if (requestID != "") {
	    		pageleveladdclass(document.getElementById(requestID), 'successful');
	    		row = document.getElementById(requestID);
					setTimeout("pagelevelremoveclass(row, 'successful')", 200);
	  		} else {
	  			pageleveladdclass(document.getElementById(requestID), 'unsuccessful');
	  			row = document.getElementById(requestID);
					setTimeout("pagelevelremoveclass(row, 'unsuccessful')", 200);
	  		}
    	}
    }
    request.send(postString);
    
		/*
		//Method 1 - Wait for update to complete
  	request.open("POST", url, false);
		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(postString);
		this.removeclass(this.placeholder, 'updating');
		if (request.status == 200) {
			this.addclass(this.placeholder, 'successful');
		} else {
			this.addclass(this.placeholder, 'unsuccessful');
		}
		*/
		
  	/*
  	//Method 2 - Continue update in background
  	request.open("POST", url, true);
		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.onreadystatechange = function() {
    	var requestID = "";
    	if (request.readyState == 4) {
    		if (request.status == 200) {
    			var xmldoc = request.responseXML;
    			var tempObj = xmldoc.getElementsByTagName('XMLHTTPRequestID');
    			if (tempObj.length > 0) {
	    			var requestID = tempObj[0].firstChild.text;
	    		}
	    	}
	    	pagelevelremoveclass(document.getElementById(requestID), 'updating');
	    	if (requestID != "") {
	    		pageleveladdclass(document.getElementById(requestID), 'successful');
	    		row = document.getElementById(requestID);
					setTimeout("pagelevelremoveclass(row, 'successful')", 3000);
	  		} else {
	  			pageleveladdclass(document.getElementById(requestID), 'unsuccessful');
	  			row = document.getElementById(requestID);
					setTimeout("pagelevelremoveclass(row, 'unsuccessful')", 3000);
	  		}
    	}
    }
    request.send(postString);
    */
    
  } else {
		this.addclass(this.placeholder, 'unsuccessful');
	}
}

function fxDatablockRow_rowselect() {
	this.addclass(this.placeholder, 'selected');
}

function fxDatablockRow_rowdeselect() {
	this.removeclass(this.placeholder, 'selected');
}

function fxDatablockRow_addclass(obj, classtoadd) {
	if (obj.className.indexOf(classtoadd) == -1) {
		obj.className = classtoadd + ' ' + obj.className;
	}
}

function fxDatablockRow_removeclass(obj, classtoremove) {
	var index = obj.className.indexOf(classtoremove);
	if (index != -1) {
		temp1 = obj.className.substring(0,index);
		temp2 = obj.className.substring(index + classtoremove.length + 1, obj.className.length);
		obj.className = temp1 + temp2;
	}
}

function pageleveladdclass(row, classtoadd) {
	row.fxDatablockRow.addclass(row, classtoadd);
	
}

function pagelevelremoveclass(row, classtoremove) {
	row.fxDatablockRow.removeclass(row, classtoremove);
}