var GL_highlightedCell;
var GL_prevInputCell;
var ss_selectedRows = new Array();
var ss_selectedCols = new Array();
var ss_openTabId;
var ss_openTabImg;

function GL_fUpdateSaveRowCol(evt) {
	GL_fUpdateSaveRowColHelp(evt, 'config.saveRows', ss_selectedRows);
	GL_fUpdateSaveRowColHelp(evt, 'config.saveCols', ss_selectedCols);
}
function GL_fUpdateSaveRowColHelp(eve, fieldId, selections) {
	var form = GL_findForm('filterForm');	
	var hiddenField = GL_findField(form, fieldId);

	var value = '';
	for (var i=0; i<selections.length; i++) {
		if ( i > 0 ) {
			value += ',';
		}
		value += selections[i];
	}	
	hiddenField.value = value;
}

function GL_fDoSort(fieldId, columnIndex) {
	var form = GL_findForm('filterForm');	
	var select = GL_findField(form, fieldId);
	if ( !select || !select.options ) {
		return;
	}
	
	var selectedIndex = GL_fGetSelectedIndex(select, columnIndex);
	if ( selectedIndex > -1 ) {
		select.selectedIndex = selectedIndex;
	//	form.submit();
	}
}
function GL_fGetSelectedIndex(field, columnIndex) {
	for (var i=1; i<field.options.length; i++) {
		if ( columnIndex == field.options[i].value ) {
			return i;			
		}
	}
	return 0;
}

function GL_fUpdateColumnSelectionsHelp(selectFields) {
	if ( !ss_selectedCols || ss_selectedCols.length < 1 ) {
		return;
	}
	for (var i=0; i<selectFields.length; i++) {
		var selectedIndex = 0;
		if ( i < ss_selectedCols.length ) {
			selectedIndex = GL_fGetSelectedIndex(selectFields[i], ss_selectedCols[i]);
		}
		selectFields[i].selectedIndex = selectedIndex;
	}
}

function GL_fUpdateColumnSelections() {
	if ( !ss_openTabId ) {
		return;
	}
	if ( ss_openTabId == '_filterFilter' ) {
		var fields = new Array();
		var form = GL_findForm('filterForm');	
		fields[0] = GL_findField(form, 'config.filterBy');	
		fields[1] = GL_findField(form, 'config.filterThenBy');		
		GL_fUpdateColumnSelectionsHelp(fields);
		if ( ss_selectedCols.length == 1 ) {	
			fields[1].selectedIndex = fields[0].selectedIndex;
		}
	} else if ( ss_openTabId == '_filterSort' ) {
		var fields = new Array();
		var form = GL_findForm('filterForm');	
		fields[0] = GL_findField(form, 'config.sortBy');
		fields[1] = GL_findField(form, 'config.sortThenBy');
		fields[2] = GL_findField(form, 'config.sortThenBy2');
		GL_fUpdateColumnSelectionsHelp(fields);
	}
}

function GL_doShowHideWithImage(evt, targetId, eImg) { 
	if ( ss_openTabId && ss_openTabId != targetId) {
		GL_doShowHideWithImage(evt, ss_openTabId, ss_openTabImg);
	}

	var targetObject = findObject(targetId + "_Expanded");
	if( targetObject.className=='clsHide' ) {
		eImg.src = 'image/minus.gif';		
		targetObject.className = 'clsShow';
		ss_openTabId = targetId;
		ss_openTabImg = eImg;
		GL_fUpdateColumnSelections();
	} else {
		eImg.src = 'image/plus.gif';		
		targetObject.className = 'clsHide';	
		ss_openTabId = null;	
		ss_openTabImg = null;		
	}	
}

function GL_switchToTextInput(tableId, cellId) {
	var table = findObject('GL_Table' + tableId);	
	var currCell = findObject('GL_TableCell' + cellId);

	GL_savePrevTextInputCell(tableId);	
		
	var input = currCell.getElementsByTagName("input")[0];	
	currCell.innerHTML = '<INPUT type="text" name="'+ input.name + '" size="10" value="'+ input.value + '">';
	GL_prevInputCell = currCell;	 	
}

function GL_savePrevTextInputCell(tableId) {
	if ( GL_prevInputCell ) {
		var prevInput = GL_prevInputCell.getElementsByTagName("input")[0];
		GL_prevInputCell.innerHTML = '<INPUT type="hidden" name="'+ prevInput.name + '" value="'
		 + prevInput.value + '">' + prevInput.value + "<br>";		
	}	
}

function GL_highlightCell(tableId, cellId) {
	var table = findObject('GL_Table' + tableId);
	var tds = table.getElementsByTagName("td");
	for (var i=0; i<tds.length; i++) {
		var cell = tds[i];
		if ( cell.id == ('GL_TableCell' + cellId) ) {
			cell.className = 'highlighted';
			GL_highlightedCell = cell;
		} else {
			cell.className = 'ss';	
		}		
	}		
}

function GL_highlightCol(evt, tableId, colIndex) {
	if ( ss_selectedRows.length > 0 ) {
		GL_fClearRowSelections(tableId);
	}
	var className = 'highlighted';
	if ( ss_selectedCols.length == 0 ) {
		ss_selectedCols[0] = colIndex;
		GL_highlightColHelp(tableId, colIndex, colIndex, className);
		GL_fUpdateColumnSelections();
	} else {
		if ( evt.ctrlKey ) {
			ss_selectedCols[ss_selectedCols.length] = colIndex;
			for (var i=0; i<ss_selectedCols.length; i++) {
				GL_highlightColHelp(tableId, ss_selectedCols[i], ss_selectedCols[i], className);
			}
			GL_fUpdateColumnSelections();
		} else if ( evt.shiftKey ) { 			
			var begin, end;			
			if ( ss_selectedCols[0] < colIndex ) {
				begin = ss_selectedCols[0];
				end = colIndex;
			} else {
				begin = colIndex;
				end = ss_selectedCols[0];
			}
			for (var i=begin; i<=end; i++) {
				ss_selectedCols[ss_selectedCols.length] = i;
			}
			GL_highlightColHelp(tableId, begin, end, className);
		} else {
			if ( !GL_fIsIn(ss_selectedCols, colIndex) ) {
				GL_fClearColumnSelections(tableId);
				ss_selectedCols[0] = colIndex;
				GL_highlightColHelp(tableId, colIndex, colIndex, className);
				GL_fUpdateColumnSelections();
			}
		}
	}
}
function GL_highlightColHelp(tableId, begin, end, className) {
	var table = findObject('GL_Table' + tableId);
	var rows = table.getElementsByTagName("tr");
	if ( !rows ) {
		return;
	}
	
	for (var i=0; i<rows.length; i++) {
		var tds = rows[i].getElementsByTagName("td");
		for (var j=0; j<tds.length; j++) {
			if ( j >= begin && j <= end ) {
				tds[j].className = className;
			}
		}
	}		
}

function GL_fIsIn(list, value) {
	for (var i=0; i<list.length; i++) {
		if ( list[i] == value ) {
			return true;
		}	
	}
	return false;
}
function GL_fClearRowSelections(tableId) {
	for (var i=0; i<ss_selectedRows.length; i++) {
		GL_highlightRowHelp(tableId, ss_selectedRows[i], ss_selectedRows[i], 'ss');
	}
	ss_selectedRows = new Array();
}
function GL_fClearColumnSelections(tableId) {
	for (var i=0; i<ss_selectedCols.length; i++) {
		GL_highlightColHelp(tableId, ss_selectedCols[i], ss_selectedCols[i], 'ss');
	}
	ss_selectedCols = new Array();
	GL_fUpdateColumnSelections();
}


function GL_highlightRow(evt, tableId, rowIndex) {
	if ( ss_selectedCols.length > 0 ) {
		GL_fClearColumnSelections(tableId);
	}
	var className = 'highlighted';
	if ( ss_selectedRows.length == 0 ) {
		ss_selectedRows[0] = rowIndex;
		GL_highlightRowHelp(tableId, rowIndex, rowIndex, className);
	} else {
		if ( evt.ctrlKey ) {
			ss_selectedRows[ss_selectedRows.length] = rowIndex;
			for (var i=0; i<ss_selectedRows.length; i++) {
				GL_highlightRowHelp(tableId, ss_selectedRows[i], ss_selectedRows[i], className);
			}
		} else if ( evt.shiftKey ) { 			
			var begin, end;			
			if ( ss_selectedRows[0] < rowIndex ) {
				begin = ss_selectedRows[0];
				end = rowIndex;
			} else {
				begin = rowIndex;
				end = ss_selectedRows[0];
			}
			for (var i=begin; i<=end; i++) {
				ss_selectedRows[ss_selectedRows.length] = i;
			}
			GL_highlightRowHelp(tableId, begin, end, className);
		} else {
			if ( !GL_fIsIn(ss_selectedRows, rowIndex) ) {
				GL_fClearRowSelections(tableId);
				ss_selectedRows[0] = rowIndex;
				GL_highlightRowHelp(tableId, rowIndex, rowIndex, className);
			}
		}		
	}
}

function GL_highlightRowHelp(tableId, begin, end, className) {
	var table = findObject('GL_Table' + tableId);
	var rows = table.getElementsByTagName("tr");
	if ( !rows ) {
		return;
	}
	
	for (var i=0; i<rows.length; i++) {
		if ( i >= begin && i <= end ) {
			var tds = rows[i].getElementsByTagName("td");
			for (var j=0; j<tds.length; j++) {
				tds[j].className = className;
			}
		}
	}		
}

function GL_fDoPrevNext(fieldId, sign, size) {
	var form = GL_findForm('filterForm');	
	var field = GL_findField(form, fieldId);
	var value = (field.value *1 + sign * size) * 1;
	if ( value < 1 ) {
		value = 1;
	}
	field.value = value;
	form.submit();
}


function GL_checkPopup(tableId, cellId) {
	if ( event.button !=1 ) {
		s("Right");
		return false;
	}
	return false;
}	

function showFileContent() {
 if (document.ReadURL.finished==0) {
  setTimeout("showFileContent()",100);
  return;
 }
 fileContent=document.ReadURL.fileContent;
 document.form1.textarea1.value=fileContent;
}


function changeSize(px){
   var table = document.getElementById("tableMain2");
   table.setAttribute("width",px);
}

function GLTransaction() {
	this.save = function(dataList) {
		if ( !dataList ) {
			dataList;
		}
		
		var changedList = new Array();
		for (var i=0; i<dataList.length; i++) {
			var d = dataList[i];
			if ( !d ) {
				continue;
			}
			if ( d.value == d._glDBValue ) {
				this.updateErrorDisplay(d, null);
			} else {
				changedList[changedList.length] = d;
			}
		}
		if ( changedList.length < 1 ) {
			return;
		}
	
	   	var transform = GL_findForm('transactionForm');
	   	if ( !transform ) {
	   		return;
	   	}	
	
		var uri = (this.uri) ? this.uri : 'editTransaction.do';
		var http = new HTTP(uri);
		var action = (this.action) ? this.action : 'autoSave';
		http.addParameter('action', action);
		http.addParameter('transactionOpId', transform.transactionOpId.value);
		http.addParameter('transactionId', transform.transactionId.value);		
		http.addParameter('pmBeginTrans', transform.pmBeginTrans.value);
		
		for (var i in this.parameters){
			var param = this.parameters[i];
			http.addParameter(param.name, param.value);
		}
		
		for ( var i=0; i<changedList.length; i++) {
			var d = changedList[i];		
			var value;
			if ( d.value ) {
				value = d.value;
			} else {
				value = '';
			}
			d._glDBValue = value;  // should move to saveReady
			http.addParameter(d.name,  value);//encodeURIComponent(value));
		}
		
		http.changedList = changedList;
		http.cbObject = (this.cbObject) ? this.cbObject : this;
		http.cbName = (this.cbMethod) ? this.cbMethod : 'saveReady';
		http.call();				
	}
	this.saveReady = function(responseText, http) {
		if ( !responseText ) {
			return;
		}
		var dbNode = this.toNode(responseText);
		if ( !dbNode ) {
			return;
		}
		if (this.isHandleAsAsync){
			//pass on to an async transaction for processing of response
			http.dbNode = dbNode;
			var asyncTrans = new GLAsyncTransaction();
			GLAsyncActivityIndicator.start();
			asyncTrans.execComplete(responseText, http);
		}
		var dbDataList = dbNode.dbDataList;
		if ( !dbDataList || dbDataList.length < 1 ) {
			return;
		}

		var changedList = http.changedList;
		if ( changedList.length < 1 ) {
			return;
		}
		
		var dbDataMap = new Array();
		for ( var i=0; i<dbDataList.length; i++) {
			var dbData = dbDataList[i];
			dbDataMap['_pD_' + dbData.id] = dbData;
		}		
		
		for ( var i=0; i<changedList.length; i++) {
			var input = changedList[i];
			if ( !input ) {
				continue;
			}
			var dbData = dbDataMap[input.name];
			if ( !dbData ) {
				continue;
			}
			input._glDBValue = dbData.dbValue;			
			this.updateErrorDisplay(input, dbData.errorMsg);
		}
		
		if (this.updateDataId){
			var updateIds = [];
			for (var i=0; i<changedList.length; i+=1){
				updateIds.push(changedList[i].name);
			}
			GLAsyncTransaction.execute(updateIds, GLAsyncTransaction.EDGE_EVENT_CHANGE_I);
		}
	}
	
	this.toNode = function(str) {
	    try {
	        return (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(str)) &&
	            eval('(' + str + ')');
	    } catch (e) {
	    alert(str);
	    	return null;	 
	    }
	}
	
	this.updateErrorDisplay = function(input, errorMsg) {
		var errorSpan = input._glErrorSpan;
		if ( errorSpan ) {
			if ( errorMsg ) {
				errorSpan.innerHTML = ' ' + errorMsg;
			} else {
				errorSpan.innerHTML = '';
			}
			return;
		}
		
		if ( !errorMsg ) {
			return;
		}		
		
		var parent = input.parentNode;
		if ( !parent ) {
			return;
		} 
	
		errorSpan = document.createElement("span");
		errorSpan.className = 'errorField';
		errorSpan.style.marginLeft = '5px';
		parent.insertBefore(errorSpan, input.nextSibling);
		input._glErrorSpan = errorSpan;		
		errorSpan.innerHTML = errorMsg;
	}
	
	this.setAlternateMethods = function(path, action, cbObject, cbMethod){
		this.uri = path;
		this.action = action;
		this.cbObject = cbObject;
		this.cbMethod = cbMethod;
	}
	
	this.setParameters = function(parameters){
		this.parameters = parameters;
	}
	
	this.setAsyncUpdateData = function(updateId){
		this.updateDataId = updateId;
	}
}

GLTransaction.setInitValue = function(input) {
	if ( !input ) {
		return;
	}
	if ( input._glIsDBValueSet ) {
		return;
	}
	input._glIsDBValueSet = true;
	input._glDBValue = input.value;
}

GLTransaction.saveDataElementRadio = function(input, fireAsyncUpdate) {
	input._glDBValue = input._glInitValue = null;
	GLTransaction.saveDataElement(input, fireAsyncUpdate);
}

GLTransaction.saveDataElement = function(input, fireAsyncUpdate) {
	if ( !input ) {
		return;
	}
	if ( input.value == input._glInitValue ) {
		return;
	}
	var trans = new GLTransaction();
	trans.setAsyncUpdateData(fireAsyncUpdate);
	var dataList = new Array();
	dataList[0] = input;
	trans.save(dataList);
}

GLTransaction.saveDataList = function(dataList, fireAsyncUpdate) {
	if ( !dataList || dataList.length < 1 ) {
		return;
	}
	var trans = new GLTransaction();
	trans.setAsyncUpdateData(fireAsyncUpdate);
	trans.save(dataList);
}


