function brpCategoryWidget(opts, container){

	// properties
	var me=this;
	me.opts = cpyObj(opts, {});
	me.container = container;

	// event methods
	me.onCategoryChanged = null;
    me.setDefault();
    $('.poi').click(function(event){me.checkboxChanged(event, this)});
    $('.selectall', me.container).click(function(event){me.checkboxAll(event, this)});
    $('#afstapper').click(function(event){me.setAfstapper(event, this)});
};

brpCategoryWidget.prototype.addCategory = function(id, cat){
	var attrs = {'name':'cat'+id,'id':'cat'+id,'value':id};
	if (cat.visible) attrs['checked'] = 'checked';
	var cb = $('<li><input type="checkbox" class="noDisplay" />' + cat.name + '</li>'), me = this;
	$(cb.children()[0]).attr(attrs).change(function(){
		var cat = brpCategories[this.value];
		if (!cat || cat.visible == this.checked) return;
		cat.visible = this.checked;
	});
	$('ul.categorylist,ol.categorylist', me.container).append(cb)
	if (me.onCategoryChanged) me.onCategoryChanged();
}


brpCategoryWidget.prototype.checkboxChanged = function(event, cb){
	var cat = brpCategories[cb.value];
	if (!cat || cat.visible == cb.checked) return;
	cat.visible = cb.checked;

	//implement google tracking
	if ((_gaq)&&(cat.visible))
	    _gaq.push(['_trackEvent', 'Bezienswaardigheden', 'Selectie', cat.name]);
	if (cb.value =="6")
	{
	    brpCategories[57].visible = cb.checked;
	    brpCategories[58].visible = cb.checked;
	}
    if (cb.value =="40")
	    brpCategories[56].visible = cb.checked;
    if (cb.value =="39")
	    brpCategories[55].visible = cb.checked;

	if (this.onCategoryChanged) this.onCategoryChanged();
}

brpCategoryWidget.prototype.checkboxAll = function(event, cb){
    var cont = $(cb).parent().parents('.poigroup'); //.next();
    var ischecked = cb.checked;
    $('input:checkbox',cont).each(function()
        {
            this.checked = ischecked;            
            var cat = brpCategories[this.value];
            if (!cat || cat.visible == ischecked) return;
            cat.visible = ischecked;
        }
    );
    if (this.onCategoryChanged) this.onCategoryChanged();
}


brpCategoryWidget.prototype.setAfstapper = function(event, cb){
    
    for(var I=43; I< 55; I++) {
        var cat = brpCategories[I];
        if(cat) {
		   cat.visible = !cat.visible;
	       
	    }
    }
    if (this.onCategoryChanged) this.onCategoryChanged();		
};

brpCategoryWidget.prototype.clearPoi = function() {

    $('.selectall').attr('checked',false);
    $('.poi').each(function(){
        this.checked = false;            
        if (brpCategories[parseInt(this.value)])
            brpCategories[parseInt(this.value)].visible = false;
    });
}

brpCategoryWidget.prototype.setDefault = function() {
   
    var me = this;
    if (me.opts.defPoi) {
      for(var I =0; I < me.opts.defPoi.length; I++) {
        if (brpCategories[me.opts.defPoi[I]])
          brpCategories[me.opts.defPoi[I]].visible = true;
      }
      
      $('.poi').each(function(){
        if (brpCategories[parseInt(this.value)])
          this.checked = brpCategories[parseInt(this.value)].visible;
    });
        
    }

	if (this.onCategoryChanged) this.onCategoryChanged();
} 
brpCategoryWidget.prototype.setFVP = function(chck) {
   
    var me = this;
    if (me.opts.defPoi) {
      for(var I =59; I < 73; I++) {
        if (brpCategories[I])
          brpCategories[I].visible = chck;
      }
      
      $('.poi').each(function(){
        if (brpCategories[parseInt(this.value)])
          this.checked = brpCategories[parseInt(this.value)].visible;
    });
        
    }

	if (this.onCategoryChanged) this.onCategoryChanged();
} 

brpCategoryWidget.prototype.setRoutePois = function(p) {

	this.clearPoi();
	this.setDefault();
    for(var idx in p) {
      var cat = brpCategories[p[idx]];
	  if (cat) {
	   cat.visible = true;
	  }
	  $('.poi').each( function() {
	    if ($(this).attr('value') == p[idx]) this.checked = true;
	    });
    }
            	
	//
    if (this.onCategoryChanged) this.onCategoryChanged(cat);
}

function brpCatListing(container){
	var me = this;
	me.container = $(container);
	
	me.mainarray = ['Facilitair','Horeca & recreatie','Cultuur'];
	me.subarray = [];
	me.subarray[0]=new Array('0','Parkeerplaatsen','20');
	me.subarray[1]=new Array('0','ANWB','2');
	me.subarray[2]=new Array('0','Fietsenstalling','9');
	me.subarray[3]=new Array('0','Fietsverhuur','38');
	me.subarray[4]=new Array('0','Oplaadpunten','41');
	me.subarray[5]=new Array('0','Politiebureau','21');
	me.subarray[6]=new Array('0','Station','37');
	me.subarray[7]=new Array('0','Transferium','25');
	me.subarray[8]=new Array('0','VVV-Kantoor','30');
	me.subarray[9]=new Array('0','Ziekenhuis','35');
	me.subarray[10]=new Array('1','Bungalowpark','5');
	me.subarray[11]=new Array('1','Camping','6');
	me.subarray[12]=new Array('1','Dagrecreatie','7');
	me.subarray[13]=new Array('1','Dierenpark','8');
	me.subarray[14]=new Array('1','Caf&eacute; &amp; Restaurant','39');
	me.subarray[15]=new Array('1','Jachthaven','13');
	me.subarray[16]=new Array('1','Pretpark','22');
	me.subarray[17]=new Array('1','Toeristentrein','24');
	me.subarray[18]=new Array('1','Vuurtoren','29');
	me.subarray[19]=new Array('1','Hotel','40');
	me.subarray[20]=new Array('2','Abdij','1');
	me.subarray[21]=new Array('2','Fort','10');
	me.subarray[22]=new Array('2','Fort (te bezoeken)','11');
	me.subarray[23]=new Array('2','Hunebed','12');
	me.subarray[24]=new Array('2','Monument','18');
	me.subarray[25]=new Array('2','Kasteel','14');
	me.subarray[26]=new Array('2','Kasteel (te bezoeken)','15');
	me.subarray[27]=new Array('2','Kerk','16');
	me.subarray[28]=new Array('2','Molen','17');
	me.subarray[29]=new Array('2','Museum','19');
	
	$.each(me.mainarray,function(i){
		var group = $('<div id="poi'+i+'_content" class="expandselection"><a href="#">'+me.mainarray[i]+'</a></div>');
		me.container.append(group);
		
		var labellist = $('<div class="selectlist" id="poisub'+i+'_content"></div>');
		labellist.append('<div class="selecteverything"><label><input type="checkbox" name="selectall" class="selectall" />Alles selecteren binnen deze categorie</label></div>');
		$.each(me.subarray,function(v){
				if(me.subarray[v][0]==i)
					labellist.append('<label class="fifty"><input type="checkbox" name="'+me.subarray[v][1]+'" id="'+me.subarray[v][1]+'" class="poi" value="'+me.subarray[v][2]+'" /> '+me.subarray[v][1]+'<label>');
			});
		me.container.append(group,labellist);
		});
	
	$(".selectlist",me.container).hide();
	$("#poisub0_content").show();
	$(".expandselection",me.container).click(function(){
		var thissub = $(this).attr("id").replace("poi","#poisub");
		$(".selectlist",me.container).hide();
		$(thissub).show();
	});
}
