fuzzDataGrid = new Object();
fuzzDataGrid.currentGrids = new Object();
///CONTAINERS

fuzzDataGrid.getGridObject = function getGridObject(name){

	if(! fuzzDataGrid.currentGrids[name]) fuzzDataGrid.initGridObject(name);

	if(fuzzDataGrid.currentGrids[name]) return fuzzDataGrid.currentGrids[name];
	else throw("getGridObj: Unable to find data grid: "+name+". It seams the data grid was not initialized.");

}

fuzzDataGrid.initGridObject = function initGridObject(name){
	var jsonTextId = "fuzzDataGrid_"+name+"_json_textarea_id";
	var jsonText = document.getElementById(jsonTextId);

	if(! jsonText) throw("Unable to find data grid: "+name+". It seams the data grid was not initialized.");

	fuzzDataGrid.currentGrids[name] = JSON.parse(jsonText.value);

}

fuzzDataGrid.setGridObject = function setGridObject(name,gridObj,doReset){
	
	fuzzDataGrid.currentGrids[name] = gridObj;

	return;
}

fuzzDataGrid.displayRowProgressDiv = function displayRowProgressDiv(name, startRow, endRow, text){
	fuzzAsync.util.displayProgressDiv("fuzzDataGrid_"+name+"_row",text,name,startRow,endRow);
}

fuzzDataGrid.hideRowProgressDiv = function hideRowProgressDiv(name){
	fuzzAsync.util.hideProgressDiv("fuzzDataGrid_"+name+"_row");
}

fuzzDataGrid.displayGrid = function displayGrid(name, resultsPerPage, page, orderByCol, orderByDir, jsCallbackFn){
	var methodArgs = new Object();
	var callbackData = new Object();
	var divId = "fuzzDataGrid_"+name+"_div_id";
	var jsonDivId = "fuzzDataGrid_"+name+"_json_div_id";
	
	var postData = "";

	gridObj = fuzzDataGrid.getGridObject(name);
	
	fuzzAsync.util.displayProgressDiv("fuzzDataGrid_"+name,"Loading, Please Wait...");

	// get the form elements, and set their values
	//gridObj = JSON.parse(jsonText.value);

//dump(gridObj.formElementGroups);
	var e;
	for(i in gridObj.formElementGroups){
		e = gridObj.formElementGroups[i];
		if(e.values.length == 0){
			e.values = new Object();
		}
		eValues = fuzzForm.getElementChildValues(gridObj.formName,e.elementName, e.elementType);
		for(j in eValues){
			e.values[j.toString()] = eValues[j];
		}
		gridObj.formElementGroups[i] = e;
	}
	//dump(gridObj.formElementGroups);

	// figure out if there are checkboxes to deal with
	selectedValues = new Array();
	hasCheckbox = document.getElementById("fuzzDataGrid_"+name+"_hasCheckbox_div_id");
	if(hasCheckbox && hasCheckbox.value == 1){
		cbFormName = document.getElementById("fuzzDataGrid_"+name+"_checkboxFormName_div_id").value;
		cbFormElementName = document.getElementById("fuzzDataGrid_"+name+"_checkboxFormElementName_div_id").value;

		selectedValues = fuzzForm.getSelectedValues(cbFormName, cbFormElementName);

	}

	// set the gridObj to JSON;
//dump(gridObj);
	gridObj = JSON.stringify(gridObj);
	//fuzzDataGrid.setGridObject(gridObj);

	methodArgs.gridName = name;
	methodArgs.objArr = gridObj;

	methodArgs.resultsPerPage = resultsPerPage;
	methodArgs.currentPage = page;
	methodArgs.checkboxSelectedValueArr = selectedValues;
	if(orderByCol){
		methodArgs.orderByCol = orderByCol;
		if(orderByDir) methodArgs.orderByDir = orderByDir;
		else orderByDir = "";
	}

	callbackData.name = name;
	callbackData.containerDivId = divId;
	if(jsCallbackFn) callbackData.jsCallbackFn = jsCallbackFn;
	
	fuzzAsync.callAction("fuzzDataGrid","display-grid",methodArgs,fuzzDataGrid.displayGridCallback,callbackData);

	
}

fuzzDataGrid.getRowByUniqueId = function getRowByUniqueId(name, uniqueId){
	var e = document.getElementById("fuzzDataGrid_"+name+"_"+uniqueId+"_row_id");
	return e;
}


fuzzDataGrid.displayGridCallback = function displayGridCallback(response){
	if(! response.isError){
		var cDiv = document.getElementById(response.callbackData.containerDivId);

		if(! cDiv) alert("Unable to display container (from callback): "+control+". It seams the container element was not initialized.");
		else{

			fuzzAsync.util.replaceDiv(cDiv,response.returnHTML);

			// init the grid
			fuzzDataGrid.initGridObject(response.callbackData.name);

			fuzzAsync.util.hideProgressDiv("fuzzDataGrid_"+response.callbackData.name);

			if(response.callbackData.jsCallbackFn && window[response.callbackData.jsCallbackFn]){
				cbFn = window[response.callbackData.jsCallbackFn];
				cbFn();
				//eval(response.callbackData.jsCallbackFn+"()");
			}
;
			
		}
	}
	else{
		dump(response);
		//alert("Sorry an error has occured. Please try again.");
		//dump(response);
		//cbAsyncJS.displayErrorDiv(response.callbackData.name,response.errorDescription,response.errorTrace,response.errorDetails);
	} 
}

fuzzDataGrid.changeResultsPerPage = function changeResultsPerPage(name, page){
	var selectElement = document.getElementById("fuzzDataGrid_"+name+"_results_select_div_id");

	sVal = getSelectValue(selectElement);

	if(!sVal || sVal < 5) sVal = 5;

	fuzzDataGrid.displayGrid(name, sVal, page);
}

fuzzDataGrid.showLimitCol = function showLimitCol(name, num){
	var lDiv = document.getElementById("fuzzDataGrid_limit_"+name+"_"+num+"_div_id");
	var fDiv = document.getElementById("fuzzDataGrid_limit_full_"+name+"_"+num+"_div_id");
	showElement(fDiv);
	hideElement(lDiv);
	
}

fuzzDataGrid.hideLimitCol = function hideLimitCol(name, num){
	var lDiv = document.getElementById("fuzzDataGrid_limit_"+name+"_"+num+"_div_id");
	var fDiv = document.getElementById("fuzzDataGrid_limit_full_"+name+"_"+num+"_div_id");
	showElement(lDiv);
	hideElement(fDiv);
	
}

fuzzDataGrid.checkAll = function checkAll(name, formName, elementName){
	var cAll = document.getElementById("fuzzDataGrid_"+name+"_select_all_id");
	var boxes = document.getElementsByName("fuzzForm_"+formName+"_"+elementName+"_element");
	
	if(! cAll) return;
	
	checked = false;
	if(cAll.checked) checked = true;
	
	for(i = 0; i<boxes.length; i++){
		boxes[i].checked = checked;
	}

}

fuzzDataGrid.getOptionsSelectBoxValue = function getOptionsSelectBoxValue(tableName){
	var selectElement = document.getElementById("fuzzDataGrid_"+tableName+"_options_select_box_id");
	sVal = getSelectValue(selectElement);
	return sVal;
}

fuzzDataGrid.getTableElement = function(gridName){
	var tGridTable = document.getElementById("fuzzDataGrid_"+gridName+"_table");
	return tGridTable;
}

fuzzDataGrid.clearOptionsSelectBox = function clearOptionsSelectBox(tableName){
	var selectElement = document.getElementById("fuzzDataGrid_"+tableName+"_options_select_box_id");
	selectElement.selectedIndex = 0;
}

fuzzDataGrid.setElementGroupDefaultValue = function setElementGroupDefaultValue(name,formName,elementName,value,doReset){
	gridObj = fuzzDataGrid.getGridObject(name);

	if(gridObj && gridObj.formElementGroups && gridObj.formElementGroups[elementName]){
		gridObj.formElementGroups[elementName].defaultValue = value;
		if(doReset && gridObj.formElementGroups[elementName].values){
			// reset all values
			
			gridObj.formElementGroups[elementName].values = new Array();

			// change the current values in the grid to reflect the change
		
			fuzzForm.setElementChildValues(formName,elementName,value,gridObj.formElementGroups[elementName].elementType);
		}
	}

	fuzzDataGrid.setGridObject(name, gridObj);

}

