
function showapplicationrights(config)
{
    var config=config || {};
    
    current.applicationuserid=null;
    
    
    if (config.htmlelement)
    {
        
    }
    else
    {
        config.userinterface=true;
    }
    config.companyid=config.companyid || current.filterid;
    
    config.htmlelement=config.htmlelement || "dAppContainer";
    
    current.rightsconfig=config;
    
    if (config.userinterface)
    {
        document.getElementById("dRelations").style.display="none";
        document.getElementById("dRelationOperation").style.display="none";
        document.getElementById("dRelationSelection").style.display="none";
        document.getElementById("dOverview").style.display="none";
        document.getElementById("dAppContainer").style.display="";
    }
    
    
    var html=[];
    if (config.userinterface)
    {
        html.push(getCiamText("applicationright.cs.step2"));
        html.push("<input type=\"text\" id=\"userselector\" size=\"20\"/><button onclick=\"getRights()\">Zoek applicatie of gebruiker</button>");
        html.push("<button onclick=\"initializeRelations()\">Relatie overzicht</button>");
        html.push("<div>");
        html.push("<input type=\"radio\" name=\"group\" value=\"user\" />")
        html.push(getCiamText("applicationright.cs.groepusers"));

        html.push("<input type=\"radio\"/ name=\"group\" value=\"app\"/>")
        html.push(getCiamText("applicationright.cs.groepapplication"));
        html.push("</div>"); 
    }
    html.push("<div id=\"duserinterface\" class=\""+(config.userinterface ? "":"nouserinterface")+"\"></div>");
    $("#"+config.htmlelement).html(html.join(""));
    $("input[@name='group'][@value='app']").attr("checked","checked");
	$("input[@name='group']").click(getRights)
	getRights();
}



function getRights()
{
    var groupval = $("input[@name='group'][@checked=1]").val();
    var url =baseurl+"ciamrequest=getrights&userid="+(current.rightsconfig.userid || "")+"&f="+encodeURI($("#userselector").val() || "")+"&r="+Math.random()+"&cid="+current.rightsconfig.companyid;
	if (groupval=="user")
		$.getJSON(url,displayuserrights);
	else
		$.getJSON(url,displayapplicationrights);
}
function updateuserrights()
{
	for (var i in userrights)
	{
		for (var j in userrights[i])
		{
			userrights[i][j].u=i;
		}
	}
}

function displayapplicationrights(data)
{
    
    users = data.users;
    applications = data.applications;
    rights = data.rights;
    userrights = data.userrights;
    $("#autorisationheader").css("display",rights.length>0 ? "" : "none");
	var displayobjects=[];
	var applicationlookup={};
	var applicationused=[];
	var rightslookup={};
	updateuserrights();
	for(var i=0;i<applications.length;i++)
	{
		applicationlookup[applications[i].i]=applications[i];
	}
	for(var i=0;i<rights.length;i++)
	{
		rightslookup[rights[i].i]=rights[i];
	}
	showright.rightslookup=rightslookup;
	
	for(var i=0;i<users.length;i++)
	{
		var user=users[i];
		var curdo={n:users[i].n,helper:user};
		curdo.applications={};
		// loop userrights
		var userright=userrights[user.i];
		
		for (var j in userright)
		{
		    
			var curuserright=userright[j];
			curuserright.i=j;
			var applicationid=rightslookup[curuserright.i].a;
			if (!applicationused[applicationid])
			{
				applicationused[applicationid]={n:applicationlookup[applicationid].n,helper:applicationlookup[applicationid],users:{}}
				displayobjects.push(applicationused[applicationid]);
				
			}
			if (!applicationused[applicationid].users[user.i])
			{
				applicationused[applicationid].users[user.i]={n:user.n,rights:[]};
			}
			curuserright.i=j;
			applicationused[applicationid].users[user.i].rights.push(curuserright);
		}
		//displayobjects.push(curdo);
	}
	html=[];
	
	html.push("<ul class=\"userlist\">");
	
	for (var i in displayobjects)
	{
		html.push("<li><span >"+displayobjects[i].n+"</span>");
		html.push("<ul>");
		for (var j in displayobjects[i].users)
		{
			var user=displayobjects[i].users[j];
			html.push("<li><span class=\"first\">"+user.n+"</span>");
			html.push("<ul>");
			for (var k in user.rights)
			{
				html.push(" <li>"+showright(user.rights[k])+"</li>")
			}
			html.push("</ul>");
			html.push("</li>");
		}
		html.push("</ul>");
		html.push("</li>");
	}
	html.push("</ul>");
	$("#duserinterface").html(html.join(""));
}

function displayuserrights(data)
{
    
    
    
    users = data.users;
    applications = data.applications;
    rights = data.rights;
    $("#autorisationheader").css("display",rights.length>0 ? "" : "none");
    userrights = data.userrights;
    updateuserrights();
	var displayobjects=[];
	var applicationlookup={};
	var rightslookup={};
	for(var i=0;i<applications.length;i++)
	{
		applicationlookup[applications[i].i]=applications[i];
	}
	for(var i=0;i<rights.length;i++)
	{
		rightslookup[rights[i].i]=rights[i];
	}
	showright.rightslookup=rightslookup;
	for(var i=0;i<users.length;i++)
	{
		var user=users[i];
		var curdo={n:users[i].n,helper:user};
		curdo.applications={};
		// loop userrights
		var userright=userrights[user.i];
		
		for (var j in userright)
		{
		
			var curuserright=userright[j];
			curuserright.i=j;
			var applicationid=rightslookup[curuserright.i].a
			if (!curdo.applications[applicationid])
				curdo.applications[applicationid]={n:applicationlookup[applicationid].n,rights:[]};
			curuserright.i=j;
			curdo.applications[applicationid].rights.push(curuserright);
		}
		displayobjects.push(curdo);
	}
	html=[];
	
	html.push("<ul class=\"userlist\">");
	
	for (var i in displayobjects)
	{
		html.push("<li><span>"+displayobjects[i].n+"</span>");
		html.push("<ul>");
		for (var j in displayobjects[i].applications)
		{
			var application=displayobjects[i].applications[j];
			html.push("<li><span>"+application.n+"</span>");
			html.push("<ul>");
			for (var k in application.rights)
			{
				html.push(" <li>"+showright(application.rights[k])+"</li>")
			}
			html.push("</ul>");
			html.push("</li>");
		}
		html.push("</ul>");
		html.push("</li>");
	}
	html.push("</ul>");
	$("#duserinterface").html(html.join(""));
	
}

function showright(right)
{
	rightdef=showright.rightslookup[right.i];
	var html=[];
	var element=[];
	var singlevalue="";
	var n=0;
	html.push("<span>"+rightdef.n+"</span>")
	if (!current.rightsconfig.readonly) element.push("<select onchange=\"changeright(this.id,this.value)\" id=\"id_"+right.u+"_"+right.i+"\">");

	for (var i in rightdef.v)
	{
	    n++;
		var selected="";
		if (rightdef.v[i].i==right.v)
		{
			selected="selected=\"selected\"";
		}
		var def ="";
		if (rightdef.d == rightdef.v[i].i && right.def)
		{
			def=" (default)"
		}
		if (current.rightsconfig.readonly)
		{
		    if (selected!="")
		    singlevalue=("<b>"+rightdef.v[i].v+"</b>")
		}
		else
		{
		    element.push("<option "+selected+" value="+rightdef.v[i].i+">"+rightdef.v[i].v+def+"</option>");
		    singlevalue=("<b>"+rightdef.v[i].v+"</b>");
		}
	
	}
	
	if (!current.rightsconfig.readonly) 
	{
	    element.push("</select>");
	    if (n==1) 
	        element=[singlevalue]
	    
    }
    else
        element=[(singlevalue)];
	
	
	html.push(element.join(""));
	return html.join("");
}

function changeright(id,value)
{	
	var m=String(id).match(/^id\_([^\_]+)\_([^\_]+)$/i);
	userid=m[1];
	rightid=m[2];
	$.getJSON(baseurl+"ciamrequest=update&userid="+userid+"&cid="+current.rightsconfig.companyid+"&rightid="+rightid+"&value="+value+"&r="+Math.random(),safed); 
}

function safed(data)
{
    if(!data) alert("Er is iets fout gegaan met de verwerking!");
}
