// representation of the map Object:
var map;
// array for all markers localized by markerUID
var markers = [];
// array with array of markers, localized by categoryID
var categories = [];

// first marker - special position
var headquater;
// boolean - true if there are loaded markers
var hasMarkers;

// container category-specific GIcons 
var icons = [];
// container for category-specific Icon URLS 
var iconsUrl = [];
var disabledIcons = [];

// Image Source for linked Icons
var defaultImageSrc = "http://maps.google.de/intl/de_ALL/mapfiles/marker.png";
var imageSrc;

function createMarker(point, uid, html) {
	var marker = new GMarker(point);
 	GEvent.addListener(
 			marker, 
 			"click", 
 			function() {marker.openInfoWindowHtml(html);}
	);
	markers[uid] = marker;
 	return marker;
}

function createCategorizedMarker(point, uid, html, category) {
	if (icons[category]) {
		var marker = new GMarker(point, icons[category]);
	}
	else {
		var marker = new GMarker(point);
	}
 	GEvent.addListener(
 			marker, 
 			"click", 
 			function() {marker.openInfoWindowHtml(html);}
	);
	markers[uid] = marker;
 	return marker;
}

function createTabbedMarker(point, uid, title, html) {
	var marker = new GMarker(point);
	var tabs = new Array(title.length);
	for (var i=0; i < title.length; i++) {
		tabs[i] = new GInfoWindowTab(title[i], html[i], null);
	}
	GEvent.addListener(
		marker, 
		"click", 
		function() {marker.openInfoWindowTabsHtml(tabs);}
    );
    markers[uid] = marker;
    return marker;
}

function highlightMarker(uid) {
	if (markers[uid]) {
		GEvent.trigger(markers[uid], "click");
		return true;
	}
	else {
		return false;
	}
}

function createCategorizedTabbedMarker(point, uid, title, html, category) {
	if (icons[category]) {
		var marker = new GMarker(point, icons[category]);
	}
	else {
		var marker = new GMarker(point);
	}
	var tabs = new Array(title.length);
	for (var i=0; i < title.length; i++) {
		tabs[i] = new GInfoWindowTab(title[i], html[i], null);
	}
	GEvent.addListener(
		marker, 
		"click", 
		function() {marker.openInfoWindowTabsHtml(tabs);}
    );
    markers[uid] = marker;
    return marker;
}

function showCategory(categoryId) {
	var catMarkers = categories[categoryId];
	for (var i=0; i < catMarkers.length; i++) {
		map.addOverlay(catMarkers[i]);
	}
	var anker = document.getElementById("tx_crongeo_categoryAnker"+categoryId);
	if (anker) {
		var image = anker.childNodes[0];
	}
	if (iconsUrl[categoryId] && image) {
		image.src = iconsUrl[categoryId];
	}
	else if (image) {
		image.src = defaultImageSrc;
	}
}

function hideCategory(categoryId) {
	var catMarkers = categories[categoryId];
	for (var i=0; i < catMarkers.length; i++) {
		map.removeOverlay(catMarkers[i]);
	}
	var anker = document.getElementById("tx_crongeo_categoryAnker"+categoryId);
	if (anker) {
		var image = anker.childNodes[0];
	}
	if (disabledIcons[categoryId] && image) {
		image.src = disabledIcons[categoryId];
	}
}

function str_replace (search, replace, subject)
{
  var result = "";
  var  oldi = 0;
  for (i = subject.indexOf (search)
     ; i > -1
     ; i = subject.indexOf (search, i))
  {
    result += subject.substring (oldi, i);
    result += replace;
    i += search.length;
    oldi = i;
  }
  return result + subject.substring (oldi, subject.length);
}

window.onunload = GUnload;