	var CheckPositionMemory = new Array();
	var PlusieurCheckStations = new Array();
	var PlusieurCheckStationsIDs = new Array();
	var ConnectingLines = new Array();
	var distance = 0.0012;
	
	function addCheck(id, id_user, id_category, id_station, name, points, creation_date, comment, url_photo, like, unlike, longitude, latitude) {
            var ChecksCount = Checks.length;
            Checks[ChecksCount] = new Object();
            Checks[ChecksCount]["id"] = id;
            Checks[ChecksCount]["id_user"] = id_user;
            Checks[ChecksCount]["id_category"] = id_category;
            Checks[ChecksCount]["id_station"] = id_station;
			Checks[ChecksCount]["name"] = name;
            Checks[ChecksCount]["points"] = points;
            Checks[ChecksCount]["creation_date"] = creation_date;
            Checks[ChecksCount]["comment"] = comment;
            Checks[ChecksCount]["url_photo"] = url_photo;
            Checks[ChecksCount]["like"] = like;
            Checks[ChecksCount]["unlike"] = unlike;
			Checks[ChecksCount]["longitude"] = longitude;
			Checks[ChecksCount]["latitude"] = latitude;
            AddCheckMarker(Checks[ChecksCount]);
        }

	function deleteAllChecks() {
        for (var i = 0; i < Checks.length; i++) {
            //google.maps.event.clearInstanceListeners(CheckMarkers[i]);
            CheckMarkers[i].setMap(null);
        }
		for (var i = 0; i < ConnectingLines.length; i++) {
			ConnectingLines[i].setMap(null);
        }
		for (var i = 0; i < PlusieurCheckStations.length; i++) {
            PlusieurCheckStations[i].setMap(null);
        }
		Checks = new Array();
		CheckMarkers = new Array();
		CheckPositionMemory = new Array();
		PlusieurCheckStations = new Array();
		PlusieurCheckStationsIDs = new Array();
		ConnectingLines = new Array();
    }
	
    function AddCheckMarker(Check) {
		var LatLngCheck = new google.maps.LatLng(Check["latitude"], Check["longitude"]);
		if(isOccupied(Check["id_station"])) {
			LatLngCheck = changePos(Check["id_station"], LatLngCheck, Check["name"]);
		}
        var CheckMarkersCount = CheckMarkers.length;
        CheckMarkers[CheckMarkersCount] = new google.maps.Marker({
            position: LatLngCheck, 
            title: Check["comment"],
            icon: getIcon(Check["id_category"]),
            map: null
        });
		
        google.maps.event.addListener(CheckMarkers[CheckMarkersCount], 'click', function () {

            // Check to see if an InfoWindow already exists
            if (!infoWindow) {
                infoWindow = new google.maps.InfoWindow();
            }

            // Creating the content  
            var content = '<div id="info">' +
            //'<img src=' + Check["url_photo"] + ' alt="" />' +
            '<b>' + Check["name"] + '</b>' +
            '<p>' + Check["comment"] + '</p>' +
            '</div>';

            // Setting the content of the InfoWindow
            infoWindow.setContent(content);

            infoWindow.open(map, CheckMarkers[CheckMarkersCount]);

        });
		if (myZoomLevel > 10) {
			CheckMarkers[CheckMarkersCount].setMap(map);
		}
		refreshAllConnectionLines();
    }
		
	function isOccupied(id_station) {
		var istBesetzt = false;
        for (var i = 0; i < CheckPositionMemory.length; i++) {
            if(CheckPositionMemory[i] == id_station) {
				istBesetzt = true;
				break;
			}
        }
		if(!istBesetzt) {
			CheckPositionMemory[CheckPositionMemory.length] = id_station;
		}
		return istBesetzt;
    }
	
	function changePos (id_station, stationPosition, stationName) {
		var StationPos = stationPosition;
		PlusieurCheckStations[PlusieurCheckStations.length] = new google.maps.Marker({
            position: StationPos,
            title: stationName,
            icon: StationPlusieurImage,
            map: map
        });
		PlusieurCheckStationsIDs[PlusieurCheckStationsIDs.length] = id_station;
		var tempArray = findCheckIndizes(id_station);
		
		distance = (1/(myZoomLevel*myZoomLevel*myZoomLevel*myZoomLevel*myZoomLevel*myZoomLevel)) * 25000;
		var count = tempArray.length;
		var phi = 2 * Math.PI/count;
		var latOrigin = StationPos.lat();
		var lngOrigin = StationPos.lng();
		for (k = 0; k < count - 1; k++) {
			var lat = latOrigin + 0.68 * distance * Math.cos(k * phi);
			var lng = lngOrigin + distance * Math.sin(k * phi);
			CheckMarkers[tempArray[k]].setPosition(new google.maps.LatLng(lat, lng));
			CheckMarkers[tempArray[k]].setMap(map);
		}
		
		var lat = latOrigin + 0.68 * distance * Math.cos((count-1) * phi);
		var lng = lngOrigin + distance * Math.sin((count-1) * phi);
		return new google.maps.LatLng(lat, lng)
	}
	
 	function calculateNewPos (id_station, stationPosition) {
		var StationPos = stationPosition;
		var tempArray = findCheckIndizes(id_station);
		distance = (1/(myZoomLevel*myZoomLevel*myZoomLevel*myZoomLevel*myZoomLevel*myZoomLevel)) * 25000;
		var count = tempArray.length;
		var phi = 2 * Math.PI/count;
		var latOrigin = StationPos.lat();
		var lngOrigin = StationPos.lng();
		for (k = 0; k < count; k++) {
			var lat = latOrigin + 0.68 * distance * Math.cos(k * phi);
			var lng = lngOrigin + distance * Math.sin(k * phi);
			CheckMarkers[tempArray[k]].setPosition(new google.maps.LatLng(lat, lng));
			CheckMarkers[tempArray[k]].setMap(map);
		}
	} 
	
	function findCheckIndizes(id_station) {
		var tempArray = new Array();
		for (i = 0; i < Checks.length; i++) {
			if (Checks[i]["id_station"] == id_station) {
				tempArray[tempArray.length] = i;
			}
		}
		return tempArray;
	}
	
	function connect(LatLng1, LatLng2) {
		ConnectingLines[ConnectingLines.length] = new google.maps.Polyline({
			path: [LatLng1, LatLng2],
			strokeWeight: 2,
			map: map
		});
	}
				
    function getIcon(id_category) {
        if (myZoomLevel <= 10) {
            return null;
        }

        if (myZoomLevel <= 12) {
			switch (id_category) {
				case "1": { return controler_MarkerImage20; break; }
				case "2": { return musicien_MarkerImage20; break; }
				case "6": { return coeur_MarkerImage20; break; }
				case "5": { return gueule_MarkerImage20; break; }
				case "3": { return pub_MarkerImage20; break; }
				case "7": { return insolite_MarkerImage20; break; }
				case "8": { return insolite_MarkerImage20; break; }
				case "4": { return graffiti_MarkerImage20; break; }
				case "100": { return _MarkerImage20; break; } //twitter
				default: { alert('an Error occured - could not identify the Check-category \"' + id_category + '\"'); break; }
			}
		}
		if (myZoomLevel <= 14) {
			switch (id_category) {
				case "1": { return controler_MarkerImage26; break; }
				case "2": { return musicien_MarkerImage26; break; }
				case "6": { return coeur_MarkerImage26; break; }
				case "5": { return gueule_MarkerImage26; break; }
				case "3": { return pub_MarkerImage26; break; }
				case "7": { return insolite_MarkerImage26; break; }
				case "8": { return insolite_MarkerImage26; break; }
				case "4": { return graffiti_MarkerImage26; break; }
				case '100': { return _MarkerImage26; break; } //twitter
				default: { alert('an Error occured - could not identify the Check-category \"' + id_category + '\"'); break; }
			}
		}
		else {
			switch (id_category) {
				case "1": { return controler_MarkerImage32; break; }
				case "2": { return musicien_MarkerImage32; break; }
				case "6": { return coeur_MarkerImage32; break; }
				case "5": { return gueule_MarkerImage32; break; }
				case "3": { return pub_MarkerImage32; break; }
				case "7": { return insolite_MarkerImage32; break; }
				case "8": { return insolite_MarkerImage32; break; }
				case "4": { return graffiti_MarkerImage32; break; }
				case '100': { return _MarkerImage32; break; } //twitter
				default: { alert('an Error occured - could not identify the Check-category \"' + id_category + '\"'); break; }
			}
		}
    }

    function refreshAllCheckMarkers() {
	    if (myZoomLevel <= 10) {
            for (var j = 0; j < CheckMarkers.length; j++) {
                if (CheckMarkers[j].getMap() != null) {
                    CheckMarkers[j].setMap(null);
                }
            }
			for (var j = 0; j < PlusieurCheckStations.length; j++) {
                if (PlusieurCheckStations[j].getMap() != null) {
                    PlusieurCheckStations[j].setMap(null);
                }
            }
        }
        else {
			for (var i = 0; i < CheckMarkers.length; i++) {
				CheckMarkers[i].setIcon(getIcon(Checks[i]["id_category"]));
				tempIDstation = Checks[i]["id_station"];
				if (PlusieurCheckStationsIDs.contains(tempIDstation)){
					calculateNewPos(tempIDstation, new google.maps.LatLng(Checks[i]["latitude"], Checks[i]["longitude"]));
				}
				else {
                    CheckMarkers[i].setMap(map);
                }	
			}
			for (var j = 0; j < PlusieurCheckStations.length; j++) {
                if (PlusieurCheckStations[j].getMap() == null) {
                    PlusieurCheckStations[j].setMap(map);
                }
            }
        }
		refreshAllConnectionLines();
    }
	
	function refreshAllConnectionLines() {
		for (var i = 0; i < ConnectingLines.length; i++) {
			ConnectingLines[i].setMap(null);
        }
		ConnectingLines = new Array();
		for (i = 0; i < Checks.length; i++) {
			if (CheckMarkers[i].getMap() != null) {
				tempIDstation = Checks[i]["id_station"];
				if (PlusieurCheckStationsIDs.contains(tempIDstation)){
					var counter = 0;
					for (k = 0; k < PlusieurCheckStations.length; k++) {
						if (PlusieurCheckStations[k].getTitle() == Checks[i]["name"]) {
							counter = k;
						}
					}
					connect(CheckMarkers[i].getPosition(), PlusieurCheckStations[counter].getPosition());
				}
			}
		}
	}

	Array.prototype.contains = function(obj) {
		var i, listed = false;
		for (i=0; i<this.length; i++) {
		if (this[i] === obj) {
			listed = true;
			break;
		}
		}
		return listed;
	};
