var current={}
var companyArray=[];
var relations=[];
var functions=[];
var baseurl="";
var proxy={}
var relationdefinitions=
{
    "r1":{
        from:"user",to:"company",fromto:"[from,persoon] werkzaam bij [to,bedrijf] als [function,functie]",tofrom:"[to,bedrijf] heeft werknemer [from,account of emailnaam] als [function,functie] in dienst",
        custom:[{"function":"function"}]
        }
}
function init()
{
    document.write(getCiamText("relation.cs.mainhtml"));
    $.getJSON(baseurl+"ciamrequest=getproxies&r="+Math.random(),step1);  
}

function selectCompany(id,name)
{
   current.companyname = name;
   current.name=name;
   current.type="company";
   current.filterid = id;
   current.company=true;
   current.filter ="";
   initializeRelations();
}

function step1(data)
{
    var tempproxy=data.proxy;   
    if (tempproxy.company)
    {
        var html=[];
        var count=0;
        var id=null;
        var name=null;
        
        html.push(getCiamText("applicationright.cs.step1"))
        for(var i in tempproxy.company)
        {
            html.push("&nbsp;<a href=\"#\" onclick=\"selectCompany('"+i+"','"+tempproxy.company[i].name+"')\">"+tempproxy.company[i].name+"</a><br/>");
            id=i;
            name=tempproxy.company[i].name
            count++;

        }
        if (count==1)
        {
            selectCompany(id,name);
            return;
        }
        $("#dRelationStep").html(html.join(""));
        return ;
    }
    else
    if (tempproxy.user)
    {
        for (var i in tempproxy.user)
        {
            current.filterid=i;
            current.type="user";
            current.name=tempproxy.user[i].name;
            current.user=true;
            initializeRelations();
            return;
        }
    }
    var l = data.length
    if(l==1)
    {
        selectCompany(data[0].id,data[0].name);
    }   
}

function initializeRelations()
{
    $.ajax({type:"GET",url:baseurl+"filterid="+current.filterid+"&ciamrequest=initialdata&r="+Math.random(),success:successDataLoad});   
    document.getElementById("dRelations").style.display="";
    document.getElementById("dRelationOperation").style.display="none";
    document.getElementById("dRelationSelection").style.display="none";
    document.getElementById("dOverview").style.display="none";
}

function successDataLoad(data)
{
    var alldata;
    eval("alldata="+data);
    companies=alldata["companies"];
    userrelations=alldata["userrelations"];
    proxy=alldata["proxy"]
    relationdefinitions=alldata["relations"];
    functions=alldata["functions"];
    successDataLoad.action(userrelations);
    
}
successDataLoad.runs = 0;
successDataLoad.action = function(userrelations)
{
    
    if(userrelations.length == 0 && successDataLoad.runs==0)
    {
        addRelation();
    } else
    {
        showRelationsOverview(userrelations);
    }
   
    successDataLoad.runs++;
}


function renderRelations(relations)
{
    var html=[];
    var config={};
    if (relations.relations) 
    {
        config=relations;
        relations=config.relations;        
    }
    config.htmlelement=config.htmlelement || "dRelations";
    config.userinterface=config.userinterface===false ? false : true;
    config.shortlist=config.shortlist===false ? false : true;
    config.subtemplate=config.subtemplate || "";
    html.push("<div id=\"dRelationSummary\"></div>");
    if (config.userinterface)
    {
        html.push("<div>"+getCiamText("relation.cs.overview."+current.type,getCiamText("relation.cs.overview")));       
        html.push("</div>");
        html.push("<div><button onclick=\"addRelation();return false;\">Relatie uitnodigen</button>");
        if (getCiamText('relation.cs.bulklink') && current.type=='company')
        {
            html.push("&nbsp;<button onclick=\"document.location.href=getCiamText('relation.cs.bulklink');\">Meerdere relaties uitnodigen</button></div>");
        }
        html.push("<br/>");
    }
    
    var renderlist = [
        {status:"notaccepted",title:getCiamText("relation.cs.titlerejected","<h2>Geweigerde relaties</h2>") },
        {status:"new",title:getCiamText("relation.cs.titlenew", "<h2>Te accepteren relaties</h2>")},
        {status:"waiting",title:getCiamText("relation.cs.titlewaiting","<h2>Wachtende relaties</h2>")},
        {status:"other",fromtype:"user",title:getCiamText("relation.cs.titleother"+config.subtemplate,"<h2>Bestaande relaties</h2>")},
        {status:"other",fromtype:"company", title:getCiamText("relation.cs.titleotherfrom"+config.subtemplate, "<h2>Bestaande relaties van</h2>")}
    ]
    for(var i in renderlist)
    {   
        renderlist[i].relations = relations;
        renderlist[i].tofilterid = config.tofilterid;
        renderlist[i].chooseenddate = config.chooseenddate;
        renderlist[i].shortlist = config.shortlist;
        renderlist[i].textonly = config.textonly;
        var th=showRelationsSelection(renderlist[i]);        
        if (th!="")
        {
            html.push(renderlist[i].title);
            html.push(th);
        }
    }
    $("#"+config.htmlelement).html(html.join(""));
    $("span.currentname").html(current.name);
}

function showRelationsSelection(relations,status, fromtype,shortlist)
{
    var html=[];
    var lines=[];
    var tofilterid=null;
    var showlinks=true;
    var config={};
    
    if (relations.relations)
    {
        config=relations;
        relations=config.relations;
        status=config.status;
        fromtype=config.fromtype;
        shortlist=config.shortlist;
        tofilterid=config.tofilterid;
    }
    
    if (shortlist || config.textonly)
    {
        showlinks=false;
    }
    
    
    for (var i=0;i<relations.length;i++)
    {
        var currel=relations[i];
        currel.negativerelation=currel.asuser || false
        if ((!currel.negativerelation && currel.relationstatus=="AF") ||
            (currel.negativerelation && currel.relationstatus=="AT"))
            currel.newrelation=true;
        else
            if (currel.relationstatus=="AF" || currel.relationstatus=="AT")
            currel.waitingrelation=true;
        else
            if ((currel.relationstatus=="NT" && currel.negativerelation) ||
                (currel.relationstatus=="NF" && !currel.negativerelation))
                currel.notaccepted=true;
            
        if (status=="new")
        {
            if (!currel.newrelation) continue;
        }
        else
        if (status=="waiting")
        {
            if (!currel.waitingrelation) continue;
        }
        else
        if (status=="notaccepted")
        {
            if (!currel.notaccepted) continue;
        }
        else
        if (currel.newrelation || currel.waitingrelation || currel.notaccepted)
            continue;
        
        
        currel.itemid=(currel.negativerelation ? "n" : "")+currel.relationid;
        var tofrom=currel.asuser;
        if (fromtype && (currel.negativerelation?currel.totype:currel.fromtype)!=fromtype) continue;    
        // let op switch wordt niet gedaan
        if (current.companyid && current.companyid!=currel.fromid) continue;
        if (tofilterid && 
            ((tofilterid!=currel.toid && !tofrom) ||
             (tofilterid!=currel.fromid && tofrom)
                )
            ) continue;
        
        var text=tofrom ? currel.descriptionto : currel.descriptionfrom;
        
        var shortname="";
        var shortid=""

        if (tofrom)
        {
            shortname=currel.fromname;
            shortid=currel.fromid;
            shorttype=currel.fromtype;
        }
        else
        {
            shortname=currel.toname;
            shortid=currel.toid;
            shorttype=currel.totype;
            
        }
        
        text=text.replace(/\[([^\],]*)(\,([^\]]*)){0,1}\]/ig,
                function($1,$2,$3,$4)
                {
                    var label=(currel.negativerelation ? "n" : "")+ currel.relationid;
                    
                    switch($2)
                    {
                        case "from":
                            var url=baseurl+"ciamrequest=getsummary&sub="+currel.fromtype+"&id="+currel.fromid+"&r="+Math.random();
                            $2="fromname";
                            if (!showlinks)
                            {
                                return currel[$2];
                            }
                            var onmouseout="onmouseout=\"hidesummary('"+(currel.negativerelation ? "n" : "")+currel.relationid+"','from')\""                            
                            
                            return "<a class=\"jTip\" name=\"Gegevens\" href=\""+url+"\"  id=\""+label+"from\" x"+onmouseout+" xonmouseover=\"showsummary('"+(currel.negativerelation ? "n" : "")+currel.relationid+"','"+currel.fromtype+"','"+currel.fromid+"','from')\">"+currel[$2]+"</a>"
                            break;
                        case "to":
                            var url=baseurl+"ciamrequest=getsummary&sub="+currel.totype+"&id="+currel.toid+"&r="+Math.random();
                            $2="toname";
                            if (!showlinks)
                            {
                                return currel[$2];
                            }
                            var onmouseout="onmouseout=\"hidesummary('"+(currel.negativerelation ? "n" : "")+currel.relationid+"','to')\""
                            return "<a name=\"Gegevens\" class=\"jTip\" href=\""+url+"\"  id=\""+label+"to\" x"+onmouseout+" xonmouseover=\"showsummary('"+(currel.negativerelation ? "n" : "")+currel.relationid+"','"+currel.totype+"','"+currel.toid+"','to')\">"+currel[$2]+"</a>"
                            break;
                        case "enddate":
                                if (config.chooseenddate)
                                    return "tot [<input id=\"rel"+(tofrom ? "n" :"")+currel.relationid+"\" type=\"text\" readonly=\"true\" title=\"Kies einddatum\" class=\"datepicker\" value=\""+(currel.enddate == null ? "kies datum" : $.datepicker.formatDate("dd-mm-yy",currel.enddate))+"\"/>]";
                                if (currel.enddate == null)
                                    return "";
                                return "tot " +$.datepicker.formatDate("dd-mm-yy",currel.enddate);
                            break;
                           
                    }

                    if (relationdefinitions[currel.relationtypeid] )
                    {

                        for (var j in relationdefinitions[currel.relationtypeid].custom)
                        {
                            var o=relationdefinitions[currel.relationtypeid].custom[j];

                            if (o && o[$2])
                            {
                                return eval("convert"+o[$2]+"(currel[$2])");
                            }
                        }
                        
                    }
                    return currel[$2] || $4;
                })
        if (shortlist)
        {
            lines.push(
                {sortcode:shortname,
                 html:"<span id=\"item"+currel.itemid+"\" >"+generaterelationActions(currel)+"<a href=\"#\" onclick=\"showsub('"+shorttype+"','"+shortid+"');return false;\" title=\""+text+"\">"+shortname+"</a></span>"})
                    
        }
        else
        {
            if (config.textonly)
            {
                lines.push({sortcode:shortname,
                html:"<span>"+text+"</span>"});
            }
            else
            lines.push({sortcode:shortname,
                 html:"<span id=\"item"+currel.itemid+"\" >"+generaterelationActions(currel)+"&nbsp;"+text+"</span>"});
            
        }
    } 
    
    if (lines.length>0)
    {
        lines.sort(function(a,b)
        {
            if (a.sortcode>b.sortcode) return 1;
            if (a.sortcode<b.sortcode) return -1;
            return 0;
        })
        for(var i=0;i<lines.length;i++)
        {
            html.push(lines[i].html);
        }
        return "<div class=\"ciamrelationlist\">"+html.join("")+"</div>";
    }
    else
    return html.join("<br/>");
   
}

function showsub(type,id)
{
    if (!id || id=="null") 
    {
        alert("Email adressen hebben geen data");
        return;
    }
    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="";
    
    //if (type=="user")
    {
        var html=[];
        html.push(getCiamText("relation.cs.useroverview"));
        $("#dAppContainer").html(html.join(""));

        $("#autorisatieheader").css("display","none");
        if (type=="company")
        {
            showapplicationrights({userid:current.filterid,companyid:id,htmlelement:"userrightsoverview",readonly:true});
        }
        else
        {
            showapplicationrights({userid:id,htmlelement:"userrightsoverview"});
        }
        $("#userdetailoverview").load(baseurl+"ciamrequest=getsummary&sub="+type+"&id="+id+"&r="+Math.random(),undefined,function() {});
        
        renderRelations({dateFormat:"dd-mm-yy",chooseenddate:type=="user", relations:userrelations,htmlelement:"userrelationoverview",tofilterid:id,userinterface:false,textonly:true,shortlist:false,subtemplate:"detail"});
        $("span.currentname").html(current.name);
        
    }
    $("input.datepicker").datepicker({
    onSelect:function(datetext,datepicker)
    {
        var currentdate=new Date();
        currentdate.setDate(currentdate.getDate());
        if (datetext=="")
        {
            
            datetext="kies einddatum";
        }
        var v=$(this).datepicker("getDate");
        if (v==null)
        {
            
        }
        else
        {
            if (currentdate>v) 
            {
                alert("kan geen datum voor vandaag kiezen");
                return false;
            }
        }
        var relationid=this.id.replace(/^rel/,"");
        var enddate=v==null ? "" : v.getFullYear()+"-"+(v.getMonth()+1)+"-"+v.getDate();
        successChangeRelation.data={enddate:v,relationid:relationid}; 
        $.ajax({type:"GET",url:baseurl+"ciamrequest=changerelation&filterid="+current.filterid+"&relationid="+relationid+"&enddate="+enddate+"&r="+Math.random(),success:successChangeRelation});
        $(this).val(v ? $.datepicker.formatDate("dd-mm-yy",v) : datetext)
        return false;
        
        
    },
    duration:"fast", minDate: "+1d"});
    

    
} 

function successChangeRelation()
{
    for(var i=0;i<userrelations.length;i++)
    {
        if (userrelations[i].relationid==successChangeRelation.data.relationid)
        {
            userrelations[i].enddate=successChangeRelation.data.enddate;
        }
    }
}

function acceptRelation(item)
{
    if (confirm(getCiamText("relation.cs.acceptrelation", "Deze relatie aangaan ?")))
    {
        $.ajax({type:"GET",url:baseurl+"ciamrequest=relation&filterid="+current.filterid+"&action=accept&relationid="+item+"&r="+Math.random(),success:successRelationAction});
    }
}
function successRelationAction(data)
{
    var alldata;
    eval("alldata="+data);
    if (alldata["showmessage"] && alldata["message"]) alert(alldata["message"]);
    
    userrelations=alldata["userrelations"];
    relationdefinitions=alldata["relations"];
    renderRelations(userrelations);
    JT_init();
    
} 

function deleteRelation(item)
{
   if (confirm(getCiamText("relation.cs.relationdelete", "Deze relatie wissen ?")))
    {
        $.ajax({type:"GET",url:baseurl+"ciamrequest=relation&filterid="+current.filterid+"&action=delete&relationid="+item+"&r="+Math.random(),success:successRelationAction});
    }
}
function notAcceptRelation(item,title)
{
    if (confirm(title || getCiamText("relation.cs.relationreject") ))
    {
        $.ajax({type:"GET",url:baseurl+"ciamrequest=relation&filterid="+current.filterid+"&action=notaccept&relationid="+item+"&r="+Math.random(),success:successRelationAction});
    }
}

function generaterelationActions(rel)
{
    var html=[];
    if (rel.newrelation)
    {
        html.push('<a class=\"acceptlink\" title=\"accepteren\" href="#" onclick=\"acceptRelation(\''+rel.itemid+'\')\"><img src=\"/ciamresources/accept.gif\" border=\"0\"></a>');        
        html.push('<a class=\"notacceptlink\" title=\"niet accepteren\" href="#" onclick=\"notAcceptRelation(\''+rel.itemid+'\')\"><img src=\"/ciamresources/reject.gif\" border=\"0\"></a>');
    }
    if (rel.relationstatus=='OK')
    {
        html.push('<a href="#" title=\"Beeindigen\" onclick=\"notAcceptRelation(\''+rel.itemid+'\',\''+getCiamText("relation.cs.relationstop")+'\')\"  ><img src=\"/ciamresources/reject.gif\" border=\"0\"></a>');
    }
        
    if (rel.notaccepted || rel.waitingrelation)
    {
        html.push('<a class=\"notacceptlink\" title=\"Wissen\" href="#" onclick=\"deleteRelation(\''+rel.itemid+'\')\"><img src=\"/ciamresources/reject.gif\" border=\"0\"></a>');
    }
    return html.join("&nbsp;");
}

var tooltipDiv;
function hidesummary(id,fromto)
{
    document.getElementById("ss"+id+fromto).style.display=""; 
}
function showsummaryload(data)
{
    var text;
    eval("text="+data);
    if (showsummary.elid)
    {
        document.getElementById("ss"+showsummary.elid).style.display="block";
        $("#ss"+showsummary.elid).html(text);
        delete showsummary.elid;
        delete showsummary.loading;
    }
}

function showsummary(relationid,subtype,id,fromto)
{
    var elid=relationid+fromto;
    if (showsummary.loading==elid)
    {
        return;
    }
    showsummary.loading=elid;
//    document.getElementById("dRelationSummary").style="none";
    
    showsummary.elid=elid;
    $.ajax({type:"GET",url:baseurl+"ciamrequest=getsummary&sub="+subtype+"&id="+id+"&r="+Math.random(),success:showsummaryload});

}
function addRelation()
{
    document.getElementById("dRelations").style.display="none";
    $("#dRelationsStep").css("display","none");
    document.getElementById("dRelationOperation").style.display="none";
    document.getElementById("dRelationSelection").style.display="";
    startProxy();
}

var pagesize=100;
var queryresult=[];

function renderFunctions(page,renderimmediate)
{
    html=[];
}

function renderCompanies(page,renderimmediate)
{
	html=[];
	var pages=Math.floor((queryresult.length+pagesize-1)/pagesize);
	var upperpage=page+6;
	var lowerpage=page-5;
	if (lowerpage<0) {upperpage-=lowerpage;lowerpage=0;}
	if (upperpage>pages) {lowerpage-=(pages-page);upperpage=pages;if (lowerpage<0) lowerpage=0;}
	if ((lowerpage+1)<upperpage)
	for (var i=lowerpage;i<upperpage;i++)
	{
		if (i==page)
		{
			html.push((i+1)+"&nbsp;");
		}
		else
		html.push("<a href=\"#\" onclick=\"render("+i+",true);return false\">"+(i+1)+"</a>&nbsp;");
	}
	html.push("<div style=\"height:24em\">");
	html.push(getpage(page));
	html.push("</div>");
	if (renderimmediate)
	    document.getElementById("dRelationStepInner").innerHTML=html.join("");	   
	return "<div id=\"dRelationStepInner\">"+html.join("")+"</div>";
	
}

var functionValue;
function convertuserfunction(value)
{
    for(var i in functions)
    {
        if (functions[i].id==value)
        return functions[i] ? functions[i].name : "";
    }
    return "";
    
}
function renderFunctions()
{
    var html=[];
    functionValue=0;
    
    html.push("<select onchange=\"functionValue=this.value\">");
    for (var i in functions)
    {
        html.push("<option value=\""+i+"\">"+functions[i].name+"</option>");
    }
    html.push("</select><input type=\"submit\" value=\"Toevoegen\" onclick=\"selectCustom(functionValue);return false\"> ");
    
    return html.join("");	    
}

function showcompanies(val)
{
	var result=[];
	
	if (val.length>=2)
	{
	    
		for (var i=0;i<companyArray.length;i++)
		{
			if (companyArray[i].name.toLowerCase().indexOf(val)>=0)
			{

				result.push(companyArray[i]
				);
			}
		}
		
	}
	queryresult=result;
	renderCompanies(0,true);
	
}

var currentRelation;


function startRelation()
{
    startProxy();
}
/**/
function startProxy()
{
    currentRelation={};
    var nr=0;
    var lastvalue=null;
    var companynr=0;
    var lastcompany=null
    showRelation(false);
    $("#dRelationStep").html("");
    var html=[];
    html.push("");
    html.push(getCiamText("relation.cs.chooseperson", "Kies het bedrijf of persoon waaraan de relatie toegevoegd moet worden"))
    
    var companyCount = 0;
    if (current.companyid)
    {
        selectProxy({id:current.companyid,type:'company'});
        return;
    }
    for( var i in proxy.company)
    {
        companyCount++;
        break;
    }
    for (var i in proxy)
    {
        if (companyCount>0 && i!="company") continue;
        for (var j in proxy[i])
        {
            html.push("&nbsp;<a href=\"#\" onclick=\"selectProxy({type:'"+i+"',id:'"+j+"'})\">"+proxy[i][j].name+"</a><br/>");
            if(i == "company")
            {
                lastcompany={type:i,id:j};
                companynr++;
            }
            nr++;
            lastvalue={type:i,id:j}; 
        }
    }
    
    if(companynr==1)
    {
        selectProxy(lastcompany);
    }
    else if (nr==1)
    {
        selectProxy(lastvalue);
    }    
    else
    {
        $("#dRelationStep").html(html.join(""));
        SetRelationCommands("");      
    }
}

function SetRelationCommands(extra)
{
    var html=[];
    html.push(extra);
    html.push('&nbsp;<button onclick="cancelRelation();return false;">'+getCiamText("relation.cs.buttoncancel")+'</button>');
    $("#dRelationStep").append(html.join(""))
}

function cancelRelation()
{
    showRelationsOverview(userrelations)
    document.getElementById("dRelationSelection").style.display="none";        
    document.getElementById("dRelationOperation").style.display="";        
    document.getElementById("dRelations").style.display="";
}
function selectProxy(value)
{
    currentRelation.from=value;
    delete selectProxy.value;
    startRelation();
}
function showRelation(show,gethtml)
{
    var html=[];
    if (show)
    {
        var rel=relationdefinitions[currentRelation.relation];
        var negrelation=currentRelation.negrelation;
        var item=proxy[currentRelation.from.type][currentRelation.from.id];
        var toDescription=currentRelation.to ? currentRelation.to.description : "";
        var fromDescription=item.name;
        html.push(showRelationObject(show,true,rel,negrelation,item,toDescription,fromDescription));
        if (gethtml) return html.join("");
    }
    $("#dRelationNewSummary").html(html.join(""));
}

function showRelationObject(show,gethtml,rel,negrelation,item,toDescription,fromDescription)
{
    var html=[];
    if (show)
    {
        var data={};
        
        data.to=negrelation ? fromDescription : toDescription;
        data.from=negrelation ? toDescription : fromDescription;            
        
        for (var i in rel.custom)
        {
            var field,type;
            for (var x in rel.custom[i])
            {
                field=x;
                type=rel.custom[i][x]
            }
            data[field]=eval("convert"+type+"(currentRelation[field])");
        }

        html.push("<b>"+ 
                rel[negrelation ? "tofrom" : "fromto"].replace(/\[([^\],]*)(\,([^\]]*)){0,1}\]/ig,
                function($1,$2,$3,$4)
                {                   
                    return data[$2] || $4;
                })
                
                +
                "</b>");
        if (gethtml) return html.join("");
    }
    $("#dRelationNewSummary").html(html.join(""));
}

function startRelation()
{
    showRelation(false);
    var item=proxy[currentRelation.from.type][currentRelation.from.id];
    var currentindex
    html=[];
    var nr=0;
    var index;
    var negrelation;
    for (var i in item.relations)
    {
        nr++;
        index=item.relations[i];
        negrelation=false;
        if (index.match(/^\-/)) 
        {
            index=index.replace(/^\-/,"");
            negrelation=true;
        }
        html.push(
            "<a href=\"#\" onclick=\"selectRelation('"+index+"',"+
                (negrelation ? "true" : "false")+
                ");return false\">"+ 
                relationdefinitions[index][negrelation ? "tofrom" : "fromto"].replace(negrelation ? /\[to\]/ : /\[from\]/,item.name )+
                
                "</a><br/>");

    }
    if (nr==1)
    {
        selectRelation(index,negrelation);
        return ;
    }
    else        
    $("#dRelationStep").html(html.join(""));
    
}
function selectRelation(value,negrelation)
{
    currentRelation.relation=value;
    currentRelation.negrelation=negrelation;
    startTo();
}

function selectEnddate()
{
    var d = $("#ciamAccountEnddate").datepicker("getDate") ;
    if(d && d > new Date())
    {
        currentRelation.enddate= $.datepicker.formatDate("yy-mm-dd",d);
    } else if($("#ciamAccountEnddate").val().length>0)
    {
        alert(getCiamText("warning.enddate"));
        return false;
    }
}

function startTo()
{
    showRelation(true);

    var rel=relationdefinitions[currentRelation.relation];
    currentRelation.customField=0;
    var selectNext=rel.to;
    if (currentRelation.negrelation)
    {
        selectNext=rel.from;
    } 
    else
    {
         $("#dRelationStep").html(getCiamText("relation.cs.starttouser"));
    }    
    $("#dRelationStep").prepend(getCiamText("relation.cs.startto" + selectNext));
    eval("startTo"+selectNext+"()");
    
    startCustomuserfunction();
    startEnddate();
    $("#dRelationStep").append("<div id=\"dRelationNewSummary\"></div>");
    SetRelationCommands("<button onclick=\"addCurrentRelation()\">"+getCiamText("relation.cs.chooseoverview.buttonadd")+"</button>");
}

function startTouser()
{
    var html=[];
    startTouser.value="";
    html.push(getCiamText("relation.cs.chooseuser"));
    html.push("<div>" +getCiamText("relation.cs.chooseuser.emaccount"));
    html.push("<input size=\"40\" type=\"textbox\" name=\"ciamAccountEmail\" onchange=\"startTouser.value=this.value;startTouser.userChange();\" >");
    html.push("</div>");    
    $("#dRelationStep").append(html.join(""));    
    startTouser.userChange = function()
    {
    if (startTouser.value=='') 
    {
        alert(getCiamText("relation.cs.chooseuser.warning"));
        return false;
    }
    
    }
  
    
}
function getCompanies()
{
    $.ajax({type:"GET",url:baseurl+"ciamrequest=companies&r="+Math.random(),success:successGetCompanies});
}
function successGetCompanies(data)
{
    eval("companyArray="+data);
    companies={};
    var n=0;

    for (var i in companyArray)
    {
        companies[companyArray[i].id]=companyArray[i].name;
    }
    startTocompany();
}
function sortFunction(a,b) {
    sortn++;
    if (a.sortname<b.sortname) return -1;
    if (a.sortname>b.sortname) return 1;
    return 0;
}
function startTocompany()
{
    $("#dRelationStep").append('<div id="dRelationTo"></div>');
    var html=[];
    if (companies);
    else
    {
        getCompanies();
        return ;
    }
    if (!startTocompany.selector)
    {
        startTocompany.selector=
            new itemDropDown(
            "companies",
            companyArray,
            "dRelationTo",
            ["Bedrijfsnaam","Straat","Plaats"],
            {
                beforeText:
                getCiamText("relation.cs.choosecompany")
            }
         );
    }
    startTocompany.selector.clear();
    startTocompany.selector.init();
}

function startCustom()
{
    showRelation(true);
    var rel=relationdefinitions[currentRelation.relation];
    
    
    if (currentRelation.customField>=rel.custom.length)
    {
        startOverview();
        return;
    }
    
    var ob=rel.custom[currentRelation.customField];
    var field=null;
    var custom=null;
    for (var i in ob)
    {
        field=i;
        custom=ob[i];
    }
    
    eval("startCustom"+custom+"()");
    SetRelationCommands("");
    
}
function addCurrentRelation()
{
    var valid = validateCurrentRelation()
    if(valid )
    {
        alert(valid);
        return;
        
    }
    var rel=relationdefinitions[currentRelation.relation];
    postdata="relation="+currentRelation.relation;
    postdata+="&negativerelation="+(currentRelation.negrelation ? "true" : "false");
    postdata+="&fromtype="+currentRelation.from.type;
    postdata+="&fromid="+encodeURIComponent(currentRelation.from.id);
    postdata+="&totype="+currentRelation.to.type;
    postdata+="&toid="+encodeURIComponent(currentRelation.to.id);
    postdata+="&enddate="+(currentRelation.enddate || "");
    for(var i in rel.custom)
    {
        for (var x in rel.custom[i])
        {
            postdata+="&"+x+"="+encodeURIComponent(currentRelation[x]);
        }
    }
    renderRelations(false);   
    $.ajax({type:"GET",url:baseurl+"ciamrequest=addrelation&filterid="+current.filterid+"&"+postdata+"&r="+Math.random(),success:successAddRelation});
}

function validateCurrentRelation()
{
    if(currentRelation.from.type == "user")
    {
        currentRelation.to = {type:"company",id:startTocompany.selector.value}; 
    }
    else
    {
        currentRelation.to = {type:"user",id:startTouser.value}; 
         selectEnddate();
    }
    var mesg = "";
    selectCustomUserfunction();
    if(currentRelation.to == null || !currentRelation.to.id || currentRelation.to.type == null)
    {
        mesg += getCiamText("relation.cs.choosefrom"+currentRelation.from.type+".warning");
    }
    var rel=relationdefinitions[currentRelation.relation];
    for(var i in rel.custom)
    {
        for (var x in rel.custom[i])
        {
            if(currentRelation[x] == null) 
            {
                mesg += (mesg=="" ? "" : "\n") +getCiamText("relation.cs.choose."+x+".warning");
            }
        }
    }
    return mesg == "" ? null : mesg;
}
function successAddRelation(data)
{
    var alldata;
    eval("alldata="+data);
    result=alldata.result;
    if (result!=1)
    {
        result=String(result)
        if (result=="-1")
            alert("Gekozen relatie bestaat niet");
        if (result=="-3")
            alert("Gekozen relatie bestaat al");
        if (result=="-2")
            alert("Gebruiker of bedrijf bestaat niet");
        return ;
    }
    userrelations=alldata["userrelations"];
    relationdefinitions=alldata["relations"];
    var message = alldata["message"];
    message = message.replace(/\[([^\],]*)(\,([^\]]*)){0,1}\]/ig,
                function($1,$2,$3,$4)
                {                   
                    return alldata["admin"][$2] || $4;
                })
    if (alldata["showmessage"] && message)
    {
        $("#dRelationStep").html(message);
    }
    else
    {
        showRelationsOverview(userrelations)
    }   
}

function showRelationsOverview(userrelations)
{
    if(getCiamText("relation.cs.confirm"))
        $("#dRelations").html(getCiamText("relation.cs.confirm"));
    else   
        renderRelations(userrelations);
    $("#dRelationStep").html("");
    document.getElementById("dAppContainer").style.display="none";        
    document.getElementById("dRelationOperation").style.display="";        
    document.getElementById("dRelations").style.display="";  
    JT_init();
}

function startEnddate()
{
    var html=[];
    $("#dRelationStep").append('<div id="dRelationEnddate"/>')
    if(!currentRelation.negrelation)
    {
        html.push(getCiamText("relation.cs.chooseenddate"));
        html.push(getCiamText("relation.cs.chooseuser.enddate")+"");
        html.push("<input size=\"40\" type=\"textbox\" id=\"ciamAccountEnddate\" name=\"ciamAccountEnddate\" >");    
    }
    $("#dRelationEnddate").html(html.join(""));
    $("#ciamAccountEnddate").attr("readonly","true");
    $("#ciamAccountEnddate").datepicker({ minDate: "+1d", showOn: "both", buttonImage: "/ciamresources/templates/images/calendar.gif", buttonImageOnly: true });
}

function startOverview()
{
    var html=[];
    html.push(getCiamText("relation.cs.chooseoverview"));
    html.push(showRelation(true,true)+"<br/>");
    $("#dRelationStep").html(html.join(""));
    SetRelationCommands("<button onclick=\"addCurrentRelation()\">"+getCiamText("relation.cs.chooseoverview.buttonadd")+"</button>");
}

function selectCustom(value)
{
    var rel=relationdefinitions[currentRelation.relation];
    var ob=rel.custom[currentRelation.customField];
    var field=null;
    for (var i in ob)
    {
        field=i;
    }
    currentRelation[field]=value;
    currentRelation.customField++;
    startCustom();    
}

function selectCustomUserfunction()
{
    var val=startCustomuserfunction.selector.indexedValues[startCustomuserfunction.selector.value];
    if(!val) 
    {
        val = {id:null};
    }
    var rel=relationdefinitions[currentRelation.relation];
    var obr=rel.custom[0];
    var field=null;
    for (var i in obr)
    {
        field=i;
    }
    currentRelation[field]=val.id;
    currentRelation.customField++;
}
function startCustomuserfunction()
{
    var objid = "dRelationFunction";
    $("#dRelationStep").append('<div id="'+objid+'"></div>')
    if(!startCustomuserfunction.selector)
    {
        var lookup=[];
        for (var i in functions)
        {
            lookup.push(functions[i]);
        }
        startCustomuserfunction.selector=
            new itemDropDown(
            "function",
            lookup,
            objid,
            ["Functie"],
            {
                beforeText:
                getCiamText("relation.cs.choosefunction")
                
            }
            );
        startCustomuserfunction.selector.selectLength=0;
    }
    startCustomuserfunction.selector.clear();
    startCustomuserfunction.selector.init();    
}

getCiamText=function(name,def)
{
    var newname= name.replace(/^[a-z]+.cs./,basetemplate);
    var str = ciamtext[newname];
    if(!str)
        str = ciamtext[name];
    if(!str) return def || "";
    var result = str.match(/\[[a-z0-9\.]*\]/gi);
    if(result)
    {
        for(i = 0; i < result.length; i++)
        {
            try{
                var e = eval(result[i]);str = str.replace(result[i],e);
            }
            catch(e)
            {}
        }
    } 
    return str;
}

