/* function laadToevoegenScherm(parameters, ID){
	var data=Array();
	data['action']='laadToevoegenScherm';
	data['function']='openToevoegenScherm';
	data['parameters']=parameters+'&ID='+ID;
	data['showWaiter'] = true;
	ajaxRequest(data);
} */

/* oude functie moet misschien weg
function laadEditScherm(parameters, ID){
	var data=Array();
	alert(ID);
	if (ID == 'null') {
		return false;
	}
	data['action']='laadEditScherm';
	data['function']='openEditScherm';
	data['parameters']=parameters+'&ID='+ID;
	data['showWaiter'] = true;
	ajaxRequest(data);
} */

function laadEditForm(titel, formGUID, grid, ID, parameters, formVersie) {
	parameters = (parameters || {});
	if (grid){ //bij een subgrid kan het zijn dat er nog geen regel geselecteerd is dan is grid false
		ID = (ID || grid.getSelectedRowId());
		if (ID){
			var IDs = ID.split(',');
			if (IDs.length == 1){
				ID = IDs[0]
			}else{
				ID = grid.lastClicked.idd;
			}
		}
	}else{
		ID = false;
	}
	if (typeof(ID) != 'string' && typeof(ID) != 'number') {
		alert(T_selecteerRegel);
		return;
	}
	
	if(!grid.rowsAr[ID]._locked) {
		if (formVersie == 2){
			//titel word bij ultraform2 in het object gezet
			new ultraForm2({formGUID: formGUID,  ID : ID, titel: titel, laadParameters: parameters});
		}else{
			laadForm(titel, formGUID, ID, undefined, undefined, parameters);
		}
	} else {
		alert(T_magNietBewerken);
	}
}

function laadDialog(parameters, ID, onOkeFunc, breedte){
	if (breedte == undefined){
		breedte = 550;
	}
	var data=Array();

	if (typeof(ID) != 'string' && typeof(ID) != 'number') {
		alert(T_selecteerRegel);
		return;
	}
	
	var ajax = new ajaxObject();
	ajax.onReady = function(xml){
		var ID = xml.getElementsByTagName('ID')[0].firstChild.nodeValue;
		var titel = (ID>0?'Bewerken '+ID:'Toevoegen');
		var promptData = xml.getElementsByTagName('result')[0].firstChild.nodeValue;
		var data = parseJSON(promptData);
		
		if (!data['AIMcallBackFunctions']){
			var onOkeStr = xml.getElementsByTagName('onOke')[0].firstChild.nodeValue;
		}
		var editPromptWin = promptWindow.show(titel, '', data, 'auto', breedte);
	
		editPromptWin.onOke = function(result){
			if (typeof(onOkeFunc) == 'function') {
				onOkeFunc(result);
			}
			eval(onOkeStr);
			
			return true;
		}
	}
	ajax.load({
		parameters: parameters+'&ID='+ID,
		actie: 		'laadDialog'
	});
	/* data['action']='laadDialog';
	data['function']='openDialogScherm';
	data['parameters']=parameters+'&ID='+ID;
	data['showWaiter'] = true;
	ajaxRequest(data); */
}

/* function openToevoegenScherm(xml){
	openDialogScherm(xml, 'Toevoegen');
} */

/* function openDialog(xml){
	openDialogScherm(xml, 'Bewerken');
} */

function openDialogScherm(xml) {
	
}

var verwijderAfterUpdateEventAttached = false
function verwijderRecord(grid, dataprocessor, directVerwijderen, reload) {
	if (grid){ //grid zou het active subgrid kunnen zijn maar als er nog geen subgrid open is dan is deze undefined
		var rowIDs = grid.getSelectedRowId();
	}else{
		var rowIDs = undefined;
	}
	if (typeof(rowIDs) == 'string') {
		if (!directVerwijderen || confirm(T_regelsVerwijderen)) {
			var rowArr = rowIDs.split(',');
			var verwijderen = 0;
			var nietVerwijderen = 0;
			for(index in rowArr) {
				if (!grid.rowsAr[rowArr[index]]._locked) {
					grid.deleteRow(rowArr[index]);
					verwijderen++;
				} else {
					nietVerwijderen++;
				}
			}
			if (nietVerwijderen > 0) {
				alert(T_magNietVerwijderen);
			}
			//grid.deleteSelectedRows();
			if (directVerwijderen) {
				//for(index in rowArr) {
					//rowArr[index]
					dataprocessor.sendData();
				//}
			}
			if (verwijderen > 0 && reload && reload != 'false'){
				if (dataprocessor.updateMode != 'off' && typeof grid._split_event != 'undefined'){
					// onAfterUpdateFinish werkt dan niet icm split en updatemode cell of row
					//daarom update mode op off zetten en na update weer terug zetten (is niet anders)
					var defaultUpdateMode = dataprocessor.updateMode;
					dataprocessor.setUpdateMode("off");
				}
				if (!verwijderAfterUpdateEventAttached){
					verwijderAfterUpdateEventAttached = true;
					dataprocessor.attachEvent("onAfterUpdate",function(sid,action,tid,xml_node){
						if (reload == 'reload'){
							reloadGrid(grid, true);
						} else {//reload = update of true
							reloadGrid(grid, false);
						}
						if (grid.entBox.className == 'dhx_sub_row'){
							//het is een subgrid
							grid.callEvent("onGridReconstructed", []);
						}
						if (typeof defaultUpdateMode != 'undefined'){
							dataprocessor.setUpdateMode(defaultUpdateMode);
						}
					});
				}
			}
		}
	} else {
		alert(T_selecteerRegel);
	}
}


function promtOnOkeResult(result, grid, gridGUID, reload){
	var parameters = 'gridGUID='+gridGUID+'&';
	for(var key in result){
		if (typeof(result[key]) != "undefined" && (typeof(result[key]) != 'function')){
			parameters += key + '=' + result[key]+'&';
		}
	}

	var ajax = new ajaxObject();
	ajax.load({
		parameters: parameters,
		actie: 'regelOpslaan',
		asynchroon: false
	});
	// var data=Array();
	// data['action']='regelOpslaan';

	// data['parameters']=parameters;
	// data['synchroon'] = true;
	// ajaxRequest(data);
	reloadGrid(grid, true);
}

function AIMonComplete(xml){
	if (xml.getElementsByTagName('error').length > 0){
		alert(xml.getElementsByTagName('error')[0].firstChild.nodeValue);
	}else{
		grid = eval(xml.getElementsByTagName('grid')[0].firstChild.nodeValue);
		reloadGrid(grid, false);
	}
}

function gridDialog(config){
	var form = new ultraform();
	
	form._gridFormDefaults = {
		grid : '',
		reload : true
	}
	
	//combineer meegegeven config met defaults
	for (var key in form._gridFormDefaults){
		if (config[key] == null || config[key] == undefined){
			config[key] = form._gridFormDefaults[key];
		}	
	}
	form.config = config;
	
	form.afterSave = function(response){
		this.beforeGridReload(response);
		reloadGrid(this.config.grid, this.config.reload);
	}
	form.beforeGridReload = function(response){
		//deze functie kun je overrulen
	}
	return form;
}
//ultraultraButtonSelecteerWindow verplaats naar ultraform
function herstelRowTextStyle(rowID, grid, dataPr){
	dataPr.obj.setRowTextStyle(rowID,"text-decoration : none");
	dataPr.obj.setRowTextStyle(rowID,"font-weight : normal");
	if (typeof(grid.getAllSubItems) == 'function'){
		var sub = grid.getAllSubItems(rowID);
		if (sub != ""){
			var subArr = sub.split(",")
			var subID;
			for(subIndex in subArr){
				subID = subArr[subIndex];
				herstelRowTextStyle(subID, grid, dataPr);
			}
		}
	}
}

function setSubsUpdated(rowID, grid, dataPr){
	
	dataPr.setUpdated(rowID, false);
	if (typeof grid.getAllSubItems == 'function'){
		var sub = grid.getAllSubItems(rowID);
		if (sub != ""){
			var subArr = sub.split(",")
			var subID, subIndex;
			for(subIndex in subArr){
				subID = subArr[subIndex];
				setSubsUpdated(subID, grid, dataPr);
			}
		}
	}
}

function handleDropUpdate(sId, tId, sObj, tObj, grid, gridGUID){
	tObj = (tObj || sObj);
	// klopt al niet meer want het item staat al op de nieuwe plaats var sourceParentID = sObj.getParentId(sId);
	if (typeof tObj.getParentId == 'function') {
		var targetParentID = tObj.getParentId(tId);
	}else{
		var targetParentID = null;
	}
	//alert(tObj.getOpenState(tId) + ' ' + sObj.dragContext.dropmode);
	var ajx = new ajaxObject();
	var ajxResult = ajx.load({
		actie : 'update',
		parameters : '!nativeeditor_status=drop&gr_id='+sId+'&targetID='+tId+'&targetParentID='+targetParentID+'&gridGUID='+gridGUID+'&dropMode='+sObj.dragContext.dropmode+'&siblingAsChild='+tObj._sbmod,
		validReturn : 'xml',
		onReady : function(xml){
			var updateResult = getXMLValue(xml, 'action');
			if (updateResult == 'OK'){
				var dataPr = grid.dataProcessor;
				setSubsUpdated(sId, grid, dataPr);
			}else{
				var type = xml.getElementsByTagName('action')[0].attributes.getNamedItem('type').value;
				alert(updateResult);
				if (type == 'nietToegestaan'){
					//refresh zodat alles weer terug staat
					reloadGrid(grid, true);
				}
			}
			
		}
	});
}

function getMixedDropMode(dId, tId, sObj, tObj, x, y){
	if (!tObj){
		tObj = sObj;
	}
	var dropMode = bepaalDropMode(sObj, y, tObj, tId);

	var ostate=tObj.getOpenState(tId);
	if (ostate) {
		//goed maar geen child tObj.setDragBehavior("sibling-next");
		tObj.setDragBehavior(dropMode+"-next");
	}else{
		//goed maar geen child tObj.setDragBehavior("sibling");
		tObj.setDragBehavior(dropMode);
	}
	/*if (sObj.getParentId(dId) == sObj.getParentId(tId)) {
		tObj.setDragBehavior("sibling");
	}else{
		tObj.setDragBehavior("sibling-next");
	}*/

	return true;
}
function checkDraggable(ID, grid){
	var draggableKolom = grid.getColIndexById('_draggable');
	if (draggableKolom){
		return (grid.cellById(ID, draggableKolom).getValue() == '1');
	}else{
		//geen kolom betekend het mag
		return true;
	}
}

function checkDropable(dId, tId, sObj, tObj, x, y, menuItemOpRoot){
	var resultaat, parentID;
	if (!tObj){
		tObj = sObj;
	}
	if (tId){
		var dropMode = bepaalDropMode(tObj, y, tObj, tId);
		//bepaal het parentID
		if (dropMode == 'child'){
			parentID = tId;
		}else if (typeof tObj.getParentId == 'function'){ //is het wel een treegrid
			parentID = tObj.getParentId(tId);
		}else{
			parentID = false;
		}
		
		if (parentID){ //parentID = false als we hem op de root plaatsen
			// kijk in de kolom _dropable of we het item mogen droppen
			var dropableKolom = tObj.getColIndexById('_dropable');
			if (dropableKolom){
				resultaat = (tObj.cellById(parentID, dropableKolom).getValue() == '1');
			}else{
				//geen kolom betekend het mag
				resultaat = true;
			}
		}else{
			//plaats hem op root
			resultaat = menuItemOpRoot;
		}
	}else{
		//we proberen hem onder het laatste record te plaatsen
		resultaat = menuItemOpRoot;
	}
	return resultaat;
}

function bepaalDropMode(sObj, y, tObj, tId){
	//bepaal of het een sibling of child van de target word
	// kijk eerst wat er mag op de huidige de target alleen om de dopmode de bepalen. Dit is dus geen blokade
	switch (tObj.dadmode){
		case 0:
			return 'child';
			break;
		case 1:
			return 'sibling';
			break;
		case 2: // mixed

		var dropableKolomIndex = tObj.getColIndexById('_dropable');
		if (tId && dropableKolomIndex){
			var parentID = tObj.getParentId(tId);

			if (parentID){ //parentID = false als we hem op de root plaatsen
				var siblingMag = (tObj.cellById(parentID, dropableKolomIndex).getValue() == '1');
			}else {
				var siblingMag = true;
			}
			var childMag = (tObj.cellById(tId, dropableKolomIndex).getValue() == '1');
		}else{
			var childMag = true;
			var siblingMag = true;
		}

		if (siblingMag && childMag){
			// bepaal op basis van de positie
			//code from dhtmxgrid_drag -> _setMove
			var htmlObject = sObj.dragger.lastLanding;
			var a1=getAbsoluteTop(htmlObject);
			a1--;
			var z=y-a1+sObj.objBox.scrollTop+(document.body.scrollTop||document.documentElement.scrollTop)-2-htmlObject.offsetHeight/2;
			if ((Math.abs(z)-htmlObject.offsetHeight/6)>0) {
				return 'sibling'
			} else {
				return 'child'

			}
		}else if (childMag){
			return 'child'
		}else {
			// ook als sibling niet mag wel wat returnen de checkDropable beslist pas echt wat er mag en niet mag
			return 'sibling'
		}
	}
}

