function submitSearch(){
	$('flexmap_selectorPanel').style.display = 'none';
	selectorOpen = false;
	flexmap.showCategories(selectedCats);
	
}

function process(index,catId){
	isChecked = $('flexmapCheckbx_' + catId).checked;
	if(process.arguments.length>2){
		// double click on a cetagory name
		if(isChecked)deselectItems(catId);
		else selectItems(catId);
	}
	else {
		if(isChecked)selectItems(catId);
		else deselectItems(catId);
	}
}

function selectItems(catId){
	subCats = getSubCats(catId,[catId]);
	subCats.each(function(i){$('flexmapCheckbx_' + i).checked = true;});
	selectedCats = selectedCats.concat(subCats).uniq();
	
}

function deselectItems(catId){
	subCats = getSubCats(catId,[catId]);
	subCats.each(function(i){$('flexmapCheckbx_' + i).checked = false;});
	selectedCats.array_reduce(subCats);
}


function hasSubItems(id,arr){
	for(var k in arr)if(arr[k][0]==id)return true;
	return false;
}



function getSubItems(id,arr){
	var subItems = [];
	for(var key in arr){
		if(arr[key][0]==id){
			var subItem = ['<img src="' + getCategoryIcon(key) + '" alt="' + arr[key][1] + '" />',arr[key][1],key,id,arr[key][1]];
			if(hasSubItems(key,arr)){
				subItem = subItem.concat(getSubItems(key,arr));
			}
			else subItem[4]  += ' (' +  itemsInCategory(key) + ')';
			subItems.push(subItem);
		}
	}
	return subItems;
}

function itemsInCategory(catId){
	var result = 0;
	points.each(function (i){
		if(i[3].indexOf(catId)>-1)result++;
	});
	return result;
}

function getCategoryIcon(catId){
	if(mapConfig['defaultSelectorIcon'] != 0)return mapConfig['defaultSelectorIcon'];
	if(icons[categories[catId][2]]=='default')return mapConfig['defaultIcon'];
	else return iconFolder + icons[categories[catId][2]];
}
								 

function getTreeArray(rootPid,arr){
	var trees = new Array();
	if(typeof selectedCats != 'undefined' && selectedCats.length > 0 ){
		preCats = selectedCats;
	}
	else return [];
	for(var key in arr){
		if(in_array(key,preCats)){
			var tmp = ['<img src="' + getCategoryIcon(key) + '" alt="' + arr[key][1] + '" />',arr[key][1],key,rootPid,arr[key][1]];
			if(hasSubItems(key,arr))tmp = tmp.concat(getSubItems(key,arr));
			else tmp[4] += ' (' +  itemsInCategory(key) + ')';
			trees.push(tmp);
		}
	}
	return trees;
}



var selectorTheme =
{
  	// HTML code to the right of a folder item
  	// first one is for folder closed, second one is for folder opened
  	folderRight: [['', '']],
	folderConnect: [[['<img alt="" src="' + ctThemeXPBase + 'plus_white.gif" />','<img alt="" src="' + ctThemeXPBase + 'minus_white.gif" />'],
					 ['<img alt="" src="' + ctThemeXPBase + 'plus_white.gif" />','<img alt="" src="' + ctThemeXPBase + 'minus_white.gif" />']]],

	// HTML code to the left of a regular item
	itemLeft: [''],
	// HTML code to the right of a regular item
	itemRight: [''],
	// HTML code for the connector
	// first one is for w/ having next sibling, second one is for no next sibling
	itemConnect: [['<img alt="" src="' + ctThemeXPBase + 'join.gif" />', '<img alt="" src="' + ctThemeXPBase + 'joinbottom.gif" />']],

	// HTML code for spacers
	// first one connects next, second one doesn"t
	spacer: [['<img alt="" src="' + ctThemeXPBase + 'line.gif" />', '<img alt="" src="' + ctThemeXPBase + 'spacer.gif" />']],

	// deepest level of theme style sheet specified
	themeLevel: 1
};


var selectorOpen = false;
var selectorCreated = false;

function hideSelector(){
	$('flexmap_selectorPanel').style.display = 'none';
	selectorOpen = false;
	return false;
}

function displaySelector(map){

	if(selectorOpen){
		$('flexmap_selectorPanel').style.display = 'none';
		selectorOpen = false;
		return;
	}
	else if(selectorCreated){
		$('flexmap_selectorPanel').style.display = 'block';
		selectorOpen = true;
		return;
	}
	
	var selectorContainer = document.createElement("div");
	var selectorPanel = document.createElement("div");
	selectorPanel.setAttribute('id','flexmap_selectorPanel');
	
	var selector = document.createElement("div");;
 	selector.setAttribute('id','flexmap_selector');

	selectorPanel.appendChild(selector);
	
	var searchButton = document.createElement("div");
 	searchButton.setAttribute('id','flexmap_searchButton');
	searchButton.innerHTML = '<a href="javascript:void submitSearch();" >' + lang['searchButton'] + '</a>';
	
	var closeButton = document.createElement("div");
 	closeButton.setAttribute('id','flexmap_closeButton');
	closeButton.innerHTML = '<a href="javascript:void hideSelector();"<img src="clear.gif" style="width:100%;border:none;" alt="close" /></a>';
	//selectorOpen=false;$(\'flexmap_selectorPanel\').style.display = \'none\'

	selectorPanel.appendChild(selector);
	selectorPanel.appendChild(searchButton);
	selectorPanel.appendChild(closeButton);
	selectorContainer.appendChild(selectorPanel);
	
	map.getContainer().appendChild(selectorContainer);
	isSelector = true;
	categoryTree = getTreeArray(rootPid,categories);
	if(categoryTree.length > 0){
		ctDraw ("flexmap_selector", categoryTree, selectorTheme, 'Kategorien', 'Categories','allCategories',1,0);
		if(!selectorCreated && selectedCats.length > 0){
			for(j=0;j<selectedCats.length;j++){
				//alert(selectedCats[j]);
				selectItems(selectedCats[j]);
			}
		}
	}
	isSelector = false;
	selectorOpen = true;
	selectorCreated = true;
  
}



function CategorySelector() {};

CategorySelector.prototype = new GControl();

CategorySelector.prototype.initialize = function(map) {
 var container = document.createElement("div");

  var selectControlDiv = document.createElement("div");
  
  var cssId = document.createAttribute("id");
  cssId.nodeValue = "selector_button";
  selectControlDiv.setAttributeNode(cssId);
  container.appendChild(selectControlDiv);
  selectControlDiv.appendChild(document.createTextNode(lang['selectButton']));

  GEvent.addDomListener(selectControlDiv, "click", function() {
  	displaySelector(map);
  });

  map.getContainer().appendChild(container);
  return container;
}


CategorySelector.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(243, 7));
}


Array.prototype.array_reduce = function(arr){
	// var values = $A(arguments);
   tmp =  this.select(function(value) {
      return !arr.include(value);
    });
	this.length = 0;
	for(i=0;i<tmp.length;i++){
		this[i] = tmp[i];
	 }
	};



