var editReportsWizard;

function loadReportFields(tablenr) {
	document.getElementById("fieldnamesselected").innerHTML = "";	
	document.getElementById("fieldnamesunselected").innerHTML = "";
	document.getElementById("fieldtypesdiv").innerHTML = "";
	document.getElementById("reportfiltersdiv").innerHTML = "";
	document.getElementById("reportfilterscontainer").innerHTML = "";
	if(tablenr!="0") {
		var now = new Date();
		var surl = gateway+"?appclass=nl.bnc.bncweb.system.applicatie.reports.beheer.BWAppReportfieldsViewer&tablenr="+tablenr+"&menuid=1&json=1&translatejson=1&noCache="+now.getTime();
		var callback =
		{
		  success: onLoadReportFields,
		  failure: onFailure
		}
		YAHOO.util.Connect.asyncRequest('GET', surl, callback, null); 
	}	
}
function onLoadReportFields(o) {
	var obj=eval("("+o.responseText+")");
	if(obj["xml.error"]!=null&&obj["xml.error"].length>0) {
		alert(obj["xml.error"]);
		return;	
	}
	if(obj["xml_reporttable"]!=null&&obj["xml_reporttable"].length>0) {
		for(var i=0; i<obj["xml_reporttable"].length; i++) {
			var listNode = createListNode(	obj["xml_reporttable"][i]["xml_reporttable_fieldname"],
											obj["xml_reporttable"][i]["xml_reporttable_fieldtype"]);
			document.getElementById("fieldnamesunselected").appendChild(listNode);
			var fieldtypeNode = createFieldtypeNode(	obj["xml_reporttable"][i]["xml_reporttable_fieldname"],
											obj["xml_reporttable"][i]["xml_reporttable_fieldtype"]);
			document.getElementById("fieldtypesdiv").appendChild(fieldtypeNode);
			var filterNode = createFilterNode(	obj["xml_reporttable"][i]["xml_reporttable_fieldname"],
											obj["xml_reporttable"][i]["xml_reporttable_fieldtype"]);
			document.getElementById("reportfilterscontainer").appendChild(filterNode);
		}
		new bncReorderList("fieldnamesselected", "fieldnamesunselected");
	}
}
function createListNode(fieldname, fieldtype) {
/*
	Neem de layout uit reportsedit over en maak er een Javascript String van:
	 
	<div class="reportsedit" style="width:471px; padding-bottom: 6px;">
		<table>
		<tr>
			<td style="width: 50px;">Label:</td>
			<td><input type="text" name="<tmpl_var xml.reportfields.fieldname>_label" value="<tmpl_var xml.reportfields.label>">
				Show: <input type="checkbox" name="<tmpl_var xml.reportfields.fieldname>_visible" value="yes"<tmpl_if xml.reportfields.visible> checked="checked"</tmpl_if>>
				Search: <input type="checkbox" name="<tmpl_var xml.reportfields.fieldname>_searchable" value="yes"<tmpl_if xml.reportfields.searchable> checked="checked"</tmpl_if>>
				Filter: <input type="checkbox" name="<tmpl_var xml.reportfields.fieldname>_usefilter" value="yes"<tmpl_if xml.reportfields.usefilter> checked="checked"</tmpl_if>>
			</td>
		</tr>		
		<tmpl_if expr="xml.reportfields.fieldtype eq 'class java.util.Date'">
			<tr>
				<td>Weergave:</td>
				<td>
					<input type="radio" name="<tmpl_var xml.reportfields.fieldname>_displaytype" value="0"<tmpl_if expr="(xml.reportfields.displaytype ne '1') && (xml.reportfields.displaytype ne '2')"> checked="checked"</tmpl_if>>Datum
					<input type="radio" name="<tmpl_var xml.reportfields.fieldname>_displaytype" value="1"<tmpl_if expr="xml.reportfields.displaytype eq '1'"> checked="checked"</tmpl_if>>Tijd
					<input type="radio" name="<tmpl_var xml.reportfields.fieldname>_displaytype" value="2"<tmpl_if expr="xml.reportfields.displaytype eq '2'"> checked="checked"</tmpl_if>>Datum+Tijd
				</td>
			</tr>
		</tmpl_if>
		</table>
	</div>
 */
	var el = document.createElement("li");
	el.className = "list1";
	el.id = fieldname;
	el.title = fieldname;
	var bld = fieldname+"<div class=\"reportsedit\" style=\"width:471px; padding-bottom: 6px;\"><table><tr><td style=\"width: 50px;\">Label:</td><td><input type=\"text\" name=\""+fieldname+"_label\" value=\"\">Show: <input type=\"checkbox\" name=\""+fieldname+"_visible\" value=\"yes\">Search: <input type=\"checkbox\" name=\""+fieldname+"_searchable\" value=\"yes\">Filter: <input type=\"checkbox\" name=\""+fieldname+"_usefilter\" value=\"yes\"></td></tr>";
	if(fieldtype=="class java.util.Date") {
		bld += "<tr><td>Weergave:</td><td><input type=\"radio\" name=\""+fieldname+"_displaytype\" value=\"0\" checked=\"checked\">Datum<input type=\"radio\" name=\""+fieldname+"_displaytype\" value=\"1\">Tijd<input type=\"radio\" name=\""+fieldname+"_displaytype\" value=\"2\">Datum+Tijd</td></tr>";
	}
	bld += "</table></div>";
	el.innerHTML = bld;
	return el;
}
function createFieldtypeNode(fieldname, fieldtype) {
	var el = document.createElement("input");
	el.type = "hidden";
	el.name = "fieldtype_" + fieldname;
	el.value = fieldtype;
	return el;
}
function createFilterNode(fieldname, fieldtype) {
	var el = document.createElement("div");
	el.className = "reportfilterdiv";
	var alink = document.createElement("a");
	alink.onclick = function(){addReportFilter(fieldname,fieldtype);};
	alink.innerHTML = fieldname;
	el.appendChild(alink);
	return el;
}
function onLoadReportsPanelsLoaded() {
	new bncReorderList("fieldnamesselected", "fieldnamesunselected");
}
function validateReports(curPanel) {
	if(curPanel==1 || curPanel==null) {
		if(document.getElementById("rep_name").value.length == 0) {
			alert("Naam moet worden ingevuld");
			return false;			
		}
		if(document.getElementById("rep_reporttablenr").selectedIndex == 0) {
			alert("Er moet een tabel gekozen worden");	
			return false;
		}	
	}
	if(curPanel==null) {
		var li = YAHOO.util.Selector.query('.list1', document.getElementById("fieldnamesselected"), true);
		if (!li) {
			alert("Er moet een veld geselecteerd worden");	
			return false;
		}	
	}
	return true;
}
/*
 * omdat door toevoegen/verwijderen van filters de nummering verandert moeten we hernummeren
 */
function renumberReportFilters() {
	var afilterdivs = YAHOO.util.Selector.query('.fieldnamefilter');
	for(var i=1; i<=afilterdivs.length; i++) {
		var reportfilter = afilterdivs[i-1];
		var reportfilter_fieldname = YAHOO.util.Selector.query('.reportfilter_fieldname', reportfilter, true);
		reportfilter_fieldname.name = "reportfilter_fieldname_" + i;
		var reportfilter_fieldtype = YAHOO.util.Selector.query('.reportfilter_fieldtype', reportfilter, true);
		reportfilter_fieldtype.name = "reportfilter_fieldtype_" + i;
		var reportfilter_comparator = YAHOO.util.Selector.query('.reportfilter_comparator', reportfilter, true);
		reportfilter_comparator.name = "reportfilter_comparator_" + i;
		var reportfilter_filtervalue = YAHOO.util.Selector.query('.reportfilter_filtervalue', reportfilter, true);
		reportfilter_filtervalue.name = "reportfilter_filtervalue_" + i;
	}
}
function deteleReportFilter(reportfilter) {
	/*
	 * als voor dit veld niet meer velden bestaan, ook de container verwijderen
	 */
	var fieldname = YAHOO.util.Selector.query('.reportfilter_fieldname', reportfilter, true).value;
	var fieldcontainer = reportfilter.parentNode;
	/*
	 * nu filter verwijderen
	 */
	reportfilter.parentNode.removeChild(reportfilter);
	/*
	 * dan controleren of de container nog filters bevat
	 */
	var afilterdivs = YAHOO.util.Selector.query('.fieldnamefilter', fieldcontainer);
	if(afilterdivs.length==0) {
		fieldcontainer.parentNode.removeChild(fieldcontainer);
	}
	renumberReportFilters();
}
function getFieldContainer(fieldname) {
	var reportfiltersdiv = document.getElementById("reportfiltersdiv");
	var afieldcontainers = YAHOO.util.Selector.query('.reportfilter', reportfiltersdiv);
	var fieldcontainer = null;
	for(var i=0; i<afieldcontainers.length; i++) {
		var test = YAHOO.util.Selector.query('.reportfilter_fieldname', afieldcontainers[i], true).value;
		if(test == fieldname) {
			fieldcontainer = afieldcontainers[i];
			break;
		}
	}
	return fieldcontainer;
}
function addReportFilter(fieldname, fieldtype) {
	var reportfiltersdiv = document.getElementById("reportfiltersdiv");
	/*
	 * eerst controleren of de containerdiv voor dit veld bestaat, anders aanmaken en toevoegen
	 */
	var fieldcontainer = getFieldContainer(fieldname);
	if(fieldcontainer==null) {
		fieldcontainer = document.createElement("div");
		fieldcontainer.className = "reportfilter";
		reportfiltersdiv.appendChild(fieldcontainer);	
		var fieldnamespan = document.createElement("span");
		fieldnamespan.innerHTML = fieldname;
		fieldcontainer.appendChild(fieldnamespan);
		var andordiv = document.createElement("div");
		andordiv.className = "reportsedit";
		fieldcontainer.appendChild(andordiv);	
		var rband = document.createElement("input");
		rband.type = "radio";
		rband.name = "ANDOR_"+fieldname;
		rband.value = "AND";
		rband.checked = true;
		andordiv.appendChild(rband);
		var andspan = document.createElement("span");
		andspan.innerHTML = "EN ";
		andordiv.appendChild(andspan);
		var rbor = document.createElement("input");
		rbor.type = "radio";
		rbor.name = "ANDOR_"+fieldname;
		rbor.value = "OR";
		andordiv.appendChild(rbor);
		var orspan = document.createElement("span");
		orspan.innerHTML = "OF";
		andordiv.appendChild(orspan);
	}
	var filterdiv = document.createElement("div");
	filterdiv.className = "fieldnamefilter";
	fieldcontainer.appendChild(filterdiv);
	
	var reportfilter_fieldname = document.createElement("input");
	reportfilter_fieldname.type = "hidden";
	reportfilter_fieldname.className = "reportfilter_fieldname";
	reportfilter_fieldname.value = fieldname;
	filterdiv.appendChild(reportfilter_fieldname);

	var reportfilter_fieldtype = document.createElement("input");
	reportfilter_fieldtype.type = "hidden";
	reportfilter_fieldtype.className = "reportfilter_fieldtype";
	reportfilter_fieldtype.value = fieldtype;
	filterdiv.appendChild(reportfilter_fieldtype);

	if(fieldtype == "boolean") {
		var reportfilter_comparator = document.createElement("input");
		reportfilter_comparator.className = "reportfilter_comparator";
		reportfilter_comparator.type = "hidden";
		reportfilter_comparator.value = "=";
		filterdiv.appendChild(reportfilter_comparator);
		var reportfilter_filtervalue = document.createElement("input");
		reportfilter_filtervalue.type = "checkbox";
		reportfilter_filtervalue.className = "reportfilter_filtervalue";
		reportfilter_filtervalue.value = "1";
		filterdiv.appendChild(reportfilter_filtervalue);
	} else {
		var reportfilter_comparator = document.createElement("select");
		reportfilter_comparator.className = "reportfilter_comparator";
		reportfilter_comparator.options[0] = new Option("<","<");
		reportfilter_comparator.options[1] = new Option("=","=");
		reportfilter_comparator.options[2] = new Option(">=",">=");
		filterdiv.appendChild(reportfilter_comparator);
	
		var reportfilter_filtervalue = document.createElement("input");
		reportfilter_filtervalue.type = "text";
		reportfilter_filtervalue.className = "reportfilter_filtervalue";
		filterdiv.appendChild(reportfilter_filtervalue);
	}
	var reportfilter_remove = document.createElement("a");
	reportfilter_remove.innerHTML = "Verwijder";
	reportfilter_remove.onclick = function(){deteleReportFilter(this.parentNode);};
	filterdiv.appendChild(reportfilter_remove);
	
	renumberReportFilters();
}

function showFilters(divId) {
	if(document.getElementById(divId).style.display == "none") {
		document.getElementById(divId).style.display = "block";
	} else {
		document.getElementById(divId).style.display = "none";
	}
}

function loadReports() {
	var now = new Date();
	var callback =
	{
		success:onLoadReports,
		failure:onFailure
	}
	YAHOO.util.Connect.asyncRequest("GET", "/wobjects/intranet/reports/reports?noCache="+now.getTime(), callback, "");
	return true;
}
function onLoadReports(o) {
	document.getElementById("reportsframe").innerHTML = o.responseText;
}
function onPageLoad_intranet_algemeen_rapporten() {
	loadReports();
}
function initReports() {
	editReportsWizard = new bncWizard(
		{	id:"reportswizard",
			actionUrl: gateway+"?appclass=nl.bnc.lib.ajax.BWAppWizard&iwbclass=nl.bnc.bncweb.system.applicatie.reports.beheer.BWReportsWizardBean&json=1&menuid="+menuid,
			layoutUrl: "/wobjects/intranet/reports/reports-edit",
			title: "Rapport",
			onDone: loadReports,
			onLoadPanels: onLoadReportsPanelsLoaded,
			onValidate: validateReports, 
			width: "1000px"
		});
}
YAHOO.util.Event.onDOMReady(initReports);
