Array.prototype.indexOfId = function(object) {
	for(var i=0,length = this.length;i<length;i++) {
		if(this[i].mmId == object) {
			return i;
		}
	}
	return -1;
}

function gmapsShowBounds(map){

	var bounds = map.getBounds();
	var sw = bounds.getSouthWest();
	var ne = bounds.getNorthEast();
	var result = sw.lat() + "/" + sw.lng() + "/" + ne.lat() + "/" + ne.lng();
	return result
}

function gmapsMakeMarker(id, category, subcategory, lat, lng) {
	var icon = new GIcon();
	//icon.image = "/images/pins/zdjecia.png";
	var tempCategory = category;
	if(tempCategory == "partnerProfile") {
		if(subcategory != 0) {
			icon.image = "/images/pins/sub/"+subcategory+".png";
		} else {
			icon.image = "/images/pins/ludzie.png";
		}
	} else if(tempCategory == "blogPhoto") {
			icon.image = "/images/pins/zdjecia.png";
	} else if(tempCategory == "blogMovie") {
			icon.image = "/images/pins/video.png";
	} else if(tempCategory == "userProfile") {
		icon.image = "/images/pins/ludzie.png";
	} else if(tempCategory == "news") {
		icon.image = "/images/pins/wiesci.png";
	} else if(tempCategory == "meeting") {
		icon.image = "/images/pins/rozrywka.png";
	} else if(tempCategory == "empty") {
		/* icon.image = "/images/pins/empty.png"; */
		icon.image = "/images/pins/main.png";
	}

	icon.shadow = "/images/pins/cien.png";
	icon.iconSize = new GSize(42, 34);
	icon.shadowSize = new GSize(42, 34);
	icon.iconAnchor = new GPoint(11, 34);
	icon.infoWindowAnchor = new GPoint(23, 1);

	var point = new GLatLng(lat,lng);
	var marker = new GMarker(point,icon);

	marker.mmId = id;
	marker.mmCategory = category;
	marker.mmSubCategory = subcategory;
	marker.mmVisible = true;

	return marker;
}


function gmapsMM(map, geoXmlUrl, params) {

	if(GBrowserIsCompatible()) {
		if(geoXmlUrl) {
			var geoUrlParams = new Array(geoXmlUrl.split('/')[1]);
			var timer = 1;
			var timerTimeout;
			if(params && params.geoHost) {
				var host = params.geoHost;
			} else {
				var host = '';
			}
			addMarkers(host+geoXmlUrl+markersCategory+'/'+markersSubCategory);
			GEvent.addListener(map, "moveend", function() {
				clearInterval(timerTimeout);
				timer = 1;
				timerTimeout = setInterval(function() {
					if(params && params.loaderDivId) {
						var progressBar = '';
						for(var i=0;i<timer;i++) { progressBar += '*';}
						document.getElementById(params.loaderDivId).innerHTML = progressBar;
					}
					if(timer <= 0) {
						clearInterval(timerTimeout);
						timer = 2 + 1;
						geoXmlUrl = '/'+geoUrlParams[0]+'/'+gmapsShowBounds(map)+'/';
						addMarkers(host+geoXmlUrl+markersCategory+'/'+markersSubCategory);
					}
					timer -= 1;
				},1000);

			});
		}
		GEvent.addListener(map, "click", function(overlay, point) {
			if(overlay) {
				if(overlay.mmId) {
					var url = '/geoEntity/'+overlay.mmCategory+'/'+overlay.mmId.split('/')[2]+'/'+overlay.mmSubCategory;
					jQuery.ajax({
						type: 'GET',
						url: url,
						success: function(data) {
							overlay.openInfoWindowHtml(data);
						}
					});
				}
			} else if(point) {
			}
		});
	}
}

function addMarkers(url,params) {

	GDownloadUrl(url, przelicz);
	function przelicz(data) {

  		var markers = new Array();
        markers = eval('(' + data + ')');
        //markers = data.evalJSON();
  		var tempMarkersArray = new Array();
		for(var i = 0; i < markers.length; i++) {
			var marker = gmapsMakeMarker(markers[i].id, markersCategory, markersSubCategory, markers[i].latitude, markers[i].longitude);
			if(markersArray.indexOfId(marker.mmId) == -1) {
				markersArray.push(marker);
				markerMgr.addMarker(marker,9,17);
			}
		}
		if(params && params.openInfo) {
			var marker = params.openInfo;

			if(markersArray.indexOfId(marker.mmId) == -1) {
				markerMgr.addMarker(marker,9,17);
				markersArray.push(marker);
				var marker_a = markersArray[markersArray.indexOfId(marker.mmId)];
				GEvent.trigger(marker_a,"click");
			} else {
				var marker_a = markersArray[markersArray.indexOfId(marker.mmId)];
				GEvent.trigger(marker_a,"click");
			}
		}
		for(var r = 0; r<markersArray.length;r++) {
			if(markersArray[r].mmVisible == true) {
				markersArray[r].show();
			} else {
				markersArray[r].hide();
			}
		}
	}
}

function gmapsChangeCategory(category,subCategory) {
	map.closeInfoWindow();
	markersCategory = category;
	markersSubCategory = subCategory;
	for(var i=0;i<markersArray.length;i++) {
		markersArray[i].hide();
		markersArray[i].mmVisible = false;
		if(markersArray[i].mmCategory == markersCategory && markersArray[i].mmSubCategory == markersSubCategory) {
			markersArray[i].show();
			markersArray[i].mmVisible = true;
		}
	}
	geoXmlUrl = '/searchLocations/'+gmapsShowBounds(map)+'/';
	addMarkers(geoXmlUrl+markersCategory+'/'+markersSubCategory);
	$('locationsByCategory').innerHTML = '<div style="text-align:center; padding:20px 0 0"><img src="/images/loading.gif" alt="" title="" /></div>';

	jQuery.ajax({
		type: 'GET',
		url: '/locationsByCategory/'+category+'/'+subCategory,
		success: function(data) {
			jQuery('#locationsByCategory').html(data);
		}
	});

}

function gmapsShowMarker(markerId,category,subcategory,lat,lng,scale) {

	var marker = gmapsMakeMarker(markerId, category, subcategory, lat, lng);
	map.panTo(new GLatLng(lat,lng), scale);
	geoXmlUrl = '/searchLocations/'+gmapsShowBounds(map)+'/';
	addMarkers(geoXmlUrl+markersCategory+'/'+markersSubCategory,{openInfo:marker});
	return false;
}

function gmapsShowMarkerShort(markerId) {
	var marker = markersArray[markersArray.indexOfId(markerId)];
	GEvent.trigger(marker,"click");
	return false;
}

function gmapsSelectSetCenter(map,thisObj) {
	var aa = thisObj.options[thisObj.selectedIndex].value;
	map.setCenter(new GLatLng(aa.split(',')[0],aa.split(',')[1]), 11);
}

function gmapsCenter(map, lat, long, scale) {
	map.panTo(new GLatLng(lat, long), scale);
}

function gmapsCenterAndMark(map, lat, lng, scale, clear, mmMarker){
	if(clear){
		map.clearOverlays();
	}
	//new marker
	var marker;
	if(mmMarker) {
		marker = gmapsMakeMarker(lat+":"+lng, 'empty', '', lat, lng);
	} else {
		marker = new GMarker(new GLatLng(lat, lng));
	}

	map.addOverlay(marker);
	map.setCenter(marker.getPoint(),scale);
	
}

function gmapsGoToAndOpenInfo(map, marker) {
	map.panTo(marker.getPoint());
	marker.openInfoWindow(marker.infoWindowHtmlText);
}

function gmapsNew(id){
	var map = new GMap2(document.getElementById(id));
   	if (GBrowserIsCompatible()) {
 		map.addControl(new GSmallMapControl());
	}
	return map;
}

function gmaps(map, geoXmlUrl, params) {
	if(GBrowserIsCompatible()) {
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		if(geoXmlUrl) {
			var geoUrlParams = new Array(geoXmlUrl.split('/')[1], geoXmlUrl.split('/')[6]);
			var timer = 2;
			var timerTimeout;
			if(params && params.geoHost) {
				var host = params.geoHost;
			} else {
				var host = '';
			}
			var geoXml = new GGeoXml(host+geoXmlUrl);
			map.addOverlay(geoXml);
			GEvent.addListener(map, "moveend", function() {
				clearInterval(timerTimeout);
				timer = 2;
				timerTimeout = setInterval(function() {
					if(params && params.loaderDivId) {
						var progressBar = '';
						for(var i=0;i<timer;i++) { progressBar += '*';}
						document.getElementById(params.loaderDivId).innerHTML = progressBar;
					}
					if(timer <= 0) {
						clearInterval(timerTimeout);
						timer = 2 + 1;
						placePoints();
					}
					timer -= 1;
				},1000);
			});
		}
	}

	function placePoints() {
		old_geoXML = geoXml;
		geoXml = new GGeoXml(host+'/'+geoUrlParams[0]+'/'+gmapsShowBounds(map)+'/'+geoUrlParams[1]);

		map.addOverlay(geoXml);
		var tempTime =  setTimeout(function() {
			map.removeOverlay(old_geoXML);
		},5000);
	}
}

function gmapsAddEventClickToMarker(marker,htmlText,params) {
	GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(htmlText,params);
	});

}

function gmapsAddEventDragendToMarker(marker) {
	GEvent.addListener(marker, "dragend", function() {
	});
}


function gmapsDeletePoint(confirmMessage,buttonContainerId,messageContainerId,link) {
	if(confirm(confirmMessage)) {
		map.closeInfoWindow();
		map.removeOverlay(marker);
		marker = false;
		$(buttonContainerId).style.display = 'none';
		Mojemiasto.googleMap.deletePosition(messageContainerId,link);
	}
}

function gmapsShowBeerList() {
	$('beerList').toggle();
	$('beerListUl').toggle();
}

function buildQueryString(category,form){
	var queryString = "?";

	//piwa

	var beers = form['beer'];
	for(var i = 0; i < beers.length; i++){
		if(beers[i].checked){
			queryString += "beer=" + beers[i].value + "&";
		}
	}

	//miasto
	queryString += "city=" + form['city'].value + "&";

	//kategoria
	queryString += "category=" + category;

	return queryString;
}


function mapGalery(tabSize,entryId) {
	var tabIndex = 1;
	var arrowLeft = $('blogPhotoEntry'+entryId+'Left');
	var arrowRight = $('blogPhotoEntry'+entryId+'Right');
	arrowLeft.style.display="none";
	if(tabSize < 5) {
		arrowRight.style.display="none";
		for(var i = 1;i<=tabSize;i++) {
			$('blogPhotoEntry'+entryId+'container'+i).style.display = '';
		}
	} else {
		for(var i = 1;i<5;i++) {
			$('blogPhotoEntry'+entryId+'container'+i).style.display = '';
		}
		arrowLeft.onclick = przewinLeft;
		arrowRight.onclick = przewinRight;
	}

	pokaz(tabIndex);

	function przewinLeft() {
		tabIndex -= 4;
		if(tabIndex < 1) tabIndex = 1;
		pokaz(tabIndex);
	}
	function przewinRight() {
		tabIndex += 4;
		if(tabIndex > tabSize) tabIndex = tabSize;
		pokaz(tabIndex);
	}
	function pokaz(index) {
		if(index > 1) {
			arrowLeft.style.display="";
		} else {
			arrowLeft.style.display="none";
		}
		if(index <= tabSize - 4 ) {
			arrowRight.style.display="";
		} else {
			arrowRight.style.display="none";
		}
		$('blogPhotoEntry'+entryId+'container1').innerHTML = $('blogPhotoEntry'+entryId+'id'+index).innerHTML;
		if($('blogPhotoEntry'+entryId+'id'+(index+1))) {
			$('blogPhotoEntry'+entryId+'container2').innerHTML = $('blogPhotoEntry'+entryId+'id'+(index+1)).innerHTML;
		} else {
			$('blogPhotoEntry'+entryId+'container2').innerHTML = '';
		}
		if($('blogPhotoEntry'+entryId+'id'+(index+2))) {
			$('blogPhotoEntry'+entryId+'container3').innerHTML = $('blogPhotoEntry'+entryId+'id'+(index+2)).innerHTML;
		} else {
			$('blogPhotoEntry'+entryId+'container3').innerHTML = '';
		}
		if($('blogPhotoEntry'+entryId+'id'+(index+3))) {
			$('blogPhotoEntry'+entryId+'container4').innerHTML = $('blogPhotoEntry'+entryId+'id'+(index+3)).innerHTML;
		} else {
			$('blogPhotoEntry'+entryId+'container4').innerHTML = '';
		}
	}
}
function mapGaleryZmien(obj,entryId) {
	$('blogPhotoEntry'+entryId+'BigPhoto').src =  obj.href;
	return false;
}


