function GoogleMap(){
	this.map = null;
	this.settings = {
		'smallIcons': false,
		'iconClickType': 'dossierpage',
		'hideItem' : null
	};
	this.init();
	this.newMarker = null;
	this.markers = [];
}

GoogleMap.prototype.unload = function(){
	GUnload();
}

GoogleMap.prototype.init = function(){
	$(window).unload(this.unload);

	if (typeof GBrowserIsCompatible != 'undefined' && GBrowserIsCompatible && GBrowserIsCompatible() && document.getElementById("map_canvas")) {
		this.map = new GMap2(document.getElementById("map_canvas"));
		this.map.setCenter(new GLatLng(51.570241,5.309143), 8);
		var customUI = this.map.getDefaultUI();
		customUI.controls.scalecontrol = false;
		customUI.controls.maptypecontrol = false;
		customUI.controls.menumaptypecontrol = false;
		this.map.setUI(customUI);
		this.map.setMapType(G_PHYSICAL_MAP);
		
		GEvent.addListener(this.map, 'extinfowindowbeforeclose', function(){
			var item = $("#infowindow a.sm2_link");
			if(item.length > 0){
				soundManager.stopAll();
			}
		});
		
		setTimeout(function(){
			if($("#map_canvas").hasClass('clickable')){
				globals.googlemap.activateClickTrigger();
				globals.googlemap.initMarkerFromForm();
			}
			globals.googlemap.loadPins();
		}, 100);
	}
}

GoogleMap.CUSTOMICONS = {
	'dossierpage': {'black': 0, 'blue': 5},
	'video': {'black': 1, 'blue': 6},
	'audio': {'black': 2, 'blue': 7},
	'photo': {'black': 3, 'blue': 8},
	'schedule': {'black': 4, 'blue': 9}
};

GoogleMap.prototype.getIcon = function(number){
	if(number > 4 || !this.settings.smallIcons){
	
//		var myIcon = new GIcon();
//		myIcon.image = 'markers/image.png';
//		myIcon.printImage = 'markers/printImage.gif';
//		myIcon.mozPrintImage = 'markers/mozPrintImage.gif';
//		myIcon.transparent = 'markers/transparent.png';
		
		var icon = new GIcon(G_DEFAULT_ICON);
		icon.iconSize = new GSize(30,30);
		icon.shadow = siteroot+"images/icons/marker_shadow.png";
		icon.shadowSize = new GSize(45,30);
		icon.printShadow = siteroot+"images/icons/marker_shadow.gif";
		icon.iconAnchor = new GPoint(15,30);
		icon.infoWindowAnchor = new GPoint(15,0);
		icon.imageMap = [26,0,27,1,28,2,29,3,29,4,29,5,29,6,29,7,29,8,29,9,29,10,29,11,29,12,29,13,29,14,29,15,29,16,29,17,29,18,29,19,29,20,29,21,29,22,29,23,29,24,29,25,29,26,28,27,27,28,26,29,3,29,2,28,1,27,0,26,0,25,0,24,0,23,0,22,0,21,0,20,0,19,0,18,0,17,0,16,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,0,6,0,5,0,4,0,3,1,2,2,1,3,0];

		icon.sprite = {};
		icon.sprite.image = siteroot+"images/icons/markers.png";
		icon.sprite.top = number * 30;
		return icon;
	} else {
		var icon = new GIcon();
		icon.iconSize = new GSize(20,20);
		icon.shadow = siteroot+"images/icons/marker_shadow_small.png";
		icon.shadowSize = new GSize(30,20);
		icon.printShadow = siteroot+"images/icons/marker_shadow_small.gif";
		icon.iconAnchor = new GPoint(10,20);
		icon.infoWindowAnchor = new GPoint(10,0);
		icon.imageMap = [18,0,19,1,19,2,19,3,19,4,19,5,19,6,19,7,19,8,19,9,19,10,19,11,19,12,19,13,19,14,19,15,19,16,19,17,19,18,18,19,1,19,0,18,0,17,0,16,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,0,6,0,5,0,4,0,3,0,2,0,1,1,0];

		icon.sprite = {};
		icon.sprite.image = siteroot+"images/icons/markers_small.png";
		icon.sprite.top = number * 20;
		return icon;
	}
}

GoogleMap.prototype.reCenter = function(){
	this.map.setCenter(new GLatLng(51.570241,5.309143), 9);
}

GoogleMap.prototype.initMarkerFromForm = function(){
	var lat = $("input[name$=_lat]").val();
	var lng = $("input[name$=_lng]").val();
	
	if(lat && lng && lat!='' && lng!=''){
		var latlng = new GLatLng(lat, lng);
		this._createDraggableMarker(latlng);
		this.map.setCenter(latlng);
	}
}

GoogleMap.prototype.activateClickTrigger = function(type){
	GEvent.addListener(this.map, 'click', GoogleMap.prototype.ClickTrigger);
	this.settings.smallIcons = true;
	this.settings.iconClickType = $("#map_canvas").attr('title');
	this.settings.hideItem = $("input[name=maps_hide_item]").val();
}

GoogleMap.prototype.DragendTrigger = function(latlng){
	globals.googlemap._dragendTrigger(latlng);
}

GoogleMap.prototype._dragendTrigger = function(latlng){
	if(!latlng){
		return;
	}
	$("input[name$=_lat]").val(latlng.lat());
	$("input[name$=_lng]").val(latlng.lng());
}

GoogleMap.prototype.ClickTrigger = function(overlay, latlng, overlaylatlng){
	globals.googlemap._clickTrigger(overlay, latlng, overlaylatlng);
}

GoogleMap.prototype._clickTrigger = function(overlay, latlng, overlaylatlng){
	if(!latlng){
		return;
	}
	$("input[name$=_lat]").val(latlng.lat());
	$("input[name$=_lng]").val(latlng.lng());
	if(globals.googlemap.newMarker != null){
		globals.googlemap.newMarker.setLatLng(latlng);
/*var nr = Math.floor(Math.random()*5)
var icon = this.getIcon( nr );
this.map.addOverlay(new GMarker(latlng, {draggable:false, icon:icon}));*/
	} else {
		globals.googlemap._createDraggableMarker(latlng);
	}
}

GoogleMap.prototype._createDraggableMarker = function(latlng){
	var icon = this.getIcon( GoogleMap.CUSTOMICONS[this.settings.iconClickType].blue );
	this.newMarker = new GMarker(latlng, {draggable:true, icon:icon});
	GEvent.addListener(this.newMarker, 'dragend', GoogleMap.prototype.DragendTrigger);
	this.map.addOverlay(this.newMarker);
}

GoogleMap.prototype._createClickableMarker = function(data){
	if(this.settings.hideItem != null && (data.type+data.id)==this.settings.hideItem){
		return;
	}

	var latlng = new GLatLng(data.lat, data.lng);
	var icon = this.getIcon( GoogleMap.CUSTOMICONS[data.type].black );
	var marker = new GMarker(latlng, {draggable:false, icon:icon});
	GEvent.addListener(marker, "click", function(){
		globals.googlemap.markerClicked(marker, data);
	});
	this.markers.push( marker );
	this.map.addOverlay(marker);
}

GoogleMap.prototype.markerClicked = function(marker, data){
	var url = '';
	if(data.type == 'dossierpage'){
		url = siteroot+'ajax/maps/infowindow/page/'+data.id;
	} else if(data.type == 'schedule'){
		url = siteroot+'ajax/maps/infowindow/event/'+data.id;
	} else {
		url = siteroot+'ajax/maps/infowindow/fragment/'+data.id;
	}
	marker.openExtInfoWindow(
		globals.googlemap.map,
		'infowindow',
		$("<div class='loader'></div>"),
		{
			beakOffset: 3,
			ajaxUrl: url,
			ajaxCallback: GoogleMap.prototype.loadWindowCallback,
			paddingX: 10
		}
	);
}

GoogleMap.prototype.loadWindowCallback = function(){
	var height = $("#infowindow .partial_content").height();
	if(height && height>150){
		$("#infowindow .partial_content").css('height', '147px');
	}
	/*setTimeout(function(){
		globals.googlemap.map.ExtInfoWindowInstance_.resize();
	}, 500);*/
	initFlowplayerMovies();
	initFancybox();
	inlinePlayer.init();
}

GoogleMap.prototype.loadPins = function(){
	var dossierpage = $("input[name=maps_load_dossierpage]").val();
	var url = siteroot+'ajax/maps/getpins' + ((dossierpage && dossierpage!='null') ? '/'+dossierpage : '');
	$.getJSON(url, GoogleMap.prototype.ProcessPins);
}

GoogleMap.prototype.ProcessPins = function(pins){
	globals.googlemap._processPins(pins);
}

GoogleMap.prototype._processPins = function(pins){
	var len = pins.length;
	for(var i=0; i<len; i++){
		this._createClickableMarker( pins[i] );
	}
}

