var map;
var map_center_lant = 52.387882;
var map_center_long = 5.319372;
var map_zoom = 7;
var polyColor = '#0f0f0f';
var polyColorHover = '#ef7901';
var polyOpac = '0.2';
var polyOpacHov = '0.5';
var srchMarkers = Array();
var srchWindow;
var listeners = Array ();

function loadGMapEntities(){	
	
	loadEntityGoogleKml('map_canvas',getEntities(entity_type),1,polyColor);
//	initialize_googleMap('map_canvas');
}

function loadEntityGoogleKml(name_div,entities,multi_poly,pcolor) {
//	var polygon_color = pcolor;

	for ( var k=0;k<listeners.length; k++){
		GEvent.removeListener(listeners[k]);
	}
	
	if (GBrowserIsCompatible()) {
		 
		 
         var mapdiv = document.getElementById(name_div); 
         map = new GMap2(mapdiv); 
         map.setCenter(new GLatLng( map_center_lant,map_center_long),map_zoom);
         map.addControl(new GLargeMapControl3D());
//         map.addControl(new GMapTypeControl());
         map.setUIToDefault();
//         map.addMapType(G_PHYSICAL_MAP);
         map.setMapType(G_PHYSICAL_MAP);
         new GKeyboardHandler(map);
         
         GLatLngBounds.prototype.extendByRatio = function(ratio) { 
             // initialize bounds to be the same as original 
             var largerBounds = new GLatLngBounds( 
                 this.getSouthWest(), this.getNorthEast()); 
             // get lat, lng of north east and south west 
             var northEastLat = this.getNorthEast().lat(); 
             var northEastLng = this.getNorthEast().lng(); 
             var southWestLat = this.getSouthWest().lat(); 
             var southWestLng = this.getSouthWest().lng(); 
             var diffLat = northEastLat - southWestLat; 
             var diffLng = northEastLng - southWestLng; 
             // multiply with ratio 
             northEastLat += diffLat * ratio; 
             southWestLat -= diffLat * ratio; 
             northEastLng += diffLng * ratio; 
             southWestLng -= diffLng * ratio; 
             // extend north east 
             largerBounds.extend(new GLatLng(northEastLat, northEastLng)); 
             // extend south west 
             largerBounds.extend(new GLatLng(southWestLat, southWestLng)); 
             return largerBounds; 
         }
         
         GMap2.prototype.centerAndZoomOnBounds = function(bounds) { 
        	    var largerBounds = bounds.extendByRatio(0.02); 
        	    var center_lat = 
        	        (largerBounds.getNorthEast().lat() + 
        	        largerBounds.getSouthWest().lat()) 
        	        / 2.0; 
        	    var center_lng = 
        	        (largerBounds.getNorthEast().lng() + 
        	        largerBounds.getSouthWest().lng()) 
        	        / 2.0; 
        	    var zoom = map.getBoundsZoomLevel(largerBounds); 
        	    map.setCenter(new GLatLng(center_lat, center_lng), zoom); 
        }
         
         
         if (multi_poly||0){
        	
        	var polygon = new Array();
        	 
        	for(var j=0; j<entities.length;j++) {	
        	 	
        		var poly_coords = new Array();
        	 	
        	 	if (entities[j]['coords'].length>0){
		   	        
        	 		for (var i=0; i<entities[j]['coords'].length;i++) {
		   	        
		   	        	poly_coords[i] = new GLatLng(entities[j]['coords'][i]['y'], entities[j]['coords'][i]['x']);
		   	        
		   	        }
		   	        
		   	        polygon[j] = new GPolygon(poly_coords, polyColor, 1, 1, polyColor, polyOpac);
		   	        
		   	        map.addOverlay(polygon[j]);
		   	        
		   	     var center_coords =  new GLatLng(entities[j]['center']['y'], entities[j]['center']['x']);
		   	     
		   	     var params = {'polygon':polygon[j], 'ent_id':entities[j]['id'],'center_coords':center_coords,'ent_name':entities[j]['name']};
		   	      
		   	     addListeners(params);
		 		
        	 	}
        	 }
            
         }else{
         
	         var poly_coords = new Array();
	         
	         if (entities['coords'].length>0){
		     
	        	 for (var i=0; i<entities['coords'].length;i++) {
		        
	        		 poly_coords[i] = new GLatLng(entities['coords'][i]['y'], entities['coords'][i]['x']);
		         
	        	 }
	        	 var polygon = new GPolygon(poly_coords, polyColor, 1, 1, polyColor, polyOpac);
		         
	        	 map.addOverlay(polygon);
	        	 
	        	 if(polygon.getBounds()){
	        		 map.centerAndZoomOnBounds(polygon.getBounds());
	        	 }
	         }
         }
    if (enableGMap && ent_selected){
    	zoomToEntity();
    }else if (enableGMap && (entity_id == 0 || entity_id == '0'  )){
    	goToUserLocation(map);
    }                    
 } 
}
function addListeners(params){
	
	var polygon = {};
	var ent_id = 0;
	var center_coords = Array();
	var ent_name = '';
//alert(params[0].ent_id);	
	if (params.polygon) polygon = params.polygon;
	if (params.ent_id) ent_id = params.ent_id;
	if (params.center_coords) center_coords = params.center_coords;
	if (params.ent_name) ent_name = params.ent_name;
	
	listeners.push( 
		GEvent.addListener(polygon,"click", function (latlng) {

			entity_id = ent_id;
			selectEntity({"entity_ids":[entity_id], select_type:1});
		
		})
	);

	listeners.push( 
		GEvent.addListener(polygon,"mouseover", function (latlng) {
		   polygon.setFillStyle({ "opacity": polyOpacHov,"color": polyColorHover});
		   polygon.setStrokeStyle({ "color": polyColorHover});
	
		   var myHtml = ent_name;
		   marker = new GMarker(center_coords);
		   marker.openExtInfoWindow(
		              map,
		              "simple_example_window",
		              ent_name,
		              {beakOffset: 3,suppressMapPan:true}
		            ); 
	//	   map.addOverlay(marker);
	//       map.openInfoWindowHtml(center_coords, myHtml,{suppressMapPan:true});
	
	   })
	);
	
	listeners.push( 
		GEvent.addListener(polygon,"mouseout", function (latlng) {
		   polygon.setFillStyle({ "opacity": polyOpac,"color": polyColor});
		   polygon.setStrokeStyle({ "color": polyColor});
		   map.closeExtInfoWindow();
		})
	);
		
	

   
}

function zoomToEntity(){

	var ent_array = getEntities(entity_type);

	for (var i=0; i<ent_array.length;i++) {

		  if (ent_array[i]['id']==entity_id){
			  var poly_coords = new Array();
			  for (var j=0; j<ent_array[i]['coords'].length;j++) {

				  poly_coords[j] = new GLatLng(ent_array[i]['coords'][j]['y'], ent_array[i]['coords'][j]['x']);

	          }

			  var polygon = new GPolygon(poly_coords, polyColor, 1, 1, polyColor, polyOpac);

			  if (polygon.getBounds()){
				  map.centerAndZoomOnBounds(polygon.getBounds());
			  }
         }
	 }
}



function getEntities(type){
	switch(type){
	case 1:
	  return muncs;
	  break;
	case 2:
	  return prvcs;
	  break;
	case 3:
	  return wtchs;
	  break;
	}
	return false;
}

function loadGmapSearchRes(){
	var srchData = document.getElementById('hid_srch_res').value;
	var srchRes = JSON.parse(srchData, '');

	removeOldMarkers();
 	
	for (var id in srchRes){

		map.addOverlay(createMarker(srchRes[id] ));
		
	}
	
//	show_var(myData);

	
}

function createMarker(entity) {
	var latlng = new GLatLng(entity['center_y'],entity['center_x']);
	var marker = new GMarker(latlng);
    marker.title = entity['name'];
    
    var myHtml = gnrListResults(entity);
    
    GEvent.addListener(marker,"click", function() {
        
        map.openInfoWindowHtml(latlng, myHtml);
    });
    //add marker to global var 
    srchMarkers[entity['id']] = marker;
    
    return marker;
}

function createEntSrchWin(entity) {
	
	var latlng = new GLatLng(entity['center_y'],entity['center_x']);
    
    var myHtml = gnrListEntSrchResults(entity);
    
    map.openInfoWindowHtml(latlng, myHtml);
    //add marker to global var 
    srchWindow = myHtml;
}

function gnrListResults(entity){
	var serv = 'http://'+location.hostname+location.port+'/';
	var myHtml = '<center><b><a href="javascript:entity_id='+entity['id']+';selectEntity();">'+langWords['ent_type'][entity_type] +' '+ entity['name'] + '</a></b></center><br/>';
    
	myHtml += '<table  style="border: 1px solid #F0F0EF; width:100%;" ><tr style="background:#F0F0EF;font-weight:bold;text-align:center;"><td width="50%">'+langWords['parties']+'</td><td>'+langWords['speakers']+
		'</td></tr><tr><td><div style="height:150px;overflow: auto;">';
	
	for (var i in entity['parties']){
		myHtml += '<a href="'+serv+'partijen/'+entity['parties'][i]['ent_prt_id']+'">'+entity['parties'][i]['partyname']+
          '</a><br/>';
	}
	
	myHtml += '</div></td><td width="50%"><div style="height:150px;overflow: auto;">';
	
	for (var j in entity['speakers']){
		myHtml += '<a href="'+serv+'persoon/'+entity['speakers'][j]['speakid']+'">'+entity['speakers'][j]['speaklname']+
		' '+entity['speakers'][j]['speakfname']+'</a><br/>';
	}

	myHtml += '</div></td></tr></table>';
	myHtml += '<center><input type="button" value="'+langWords['zoomin']+'" onclick="entity_id='+entity['id']+';selectEntity();" /></center>';
//alert(tabllist)	;
	return myHtml;
}

function gnrListEntSrchResults(entity){
	var serv = 'http://'+location.hostname+location.port+'/';
	var myHtml = '<center><b><a href="javascript:entity_id='+entity['id']+';selectEntity();">'+langWords['ent_type'][entity_type] +
			' '+ entity['name'] + '</a></b></center><br/>';
	
	myHtml += '<table  style="border: 1px solid #F0F0EF; width:100%;" ><tr style="background:#F0F0EF;font-weight:bold;text-align:center;">'+
		'<td width="33%">'+langWords['parties']+'</td><td width="33%">'+langWords['speakers']+'</td><td width="33%">'+langWords['meetings']+
		'</td></tr><tr><td><div style="height:150px;overflow: auto;">';
	
	for (var i in entity['parties']){
		myHtml += '<a href="'+serv+'partijen/'+entity['parties'][i]['ent_prt_id']+'">'+entity['parties'][i]['partyname']+
			'</a><br/>';
	}
	
	myHtml += '</div></td><td ><div style="height:150px;overflow: auto;">';
	
	for (var j in entity['speakers']){
		myHtml += '<a href="'+serv+'persoon/'+entity['speakers'][j]['speakid']+'">'+entity['speakers'][j]['speaklname']+
			' '+entity['speakers'][j]['speakfname']+'</a><br/>';
	}
	
	myHtml += '</div></td><td ><div style="height:150px;overflow: auto;">';
	
	for (var k in entity['meetings']){
		myHtml += '<a href="'+serv+'vergadering/'+entity['meetings'][k]['meetingid']+'">'+entity['meetings'][k]['commission']+
			'('+entity['meetings'][k]['hits']+')</a><br/>';
	}
	
	myHtml += '</div></td></tr></table>';
//	myHtml += '<center><input type="button" value="'+langWords['zoomin']+'" onclick="entity_id='+entity['id']+';selectEntity();" /></center>';
//alert(tabllist)	;
	return myHtml;
}

function removeOldMarkers() {
	for (var id in srchMarkers){
		map.removeOverlay(srchMarkers[id]);
	}
	srchMarkers = Array();
}

function removeOldSrchWin() {
	map.removeOverlay(srchWindow);
//	srchWindow = '';
}

function goToUserLocation() {
	//require on page js code: 
	//<script type="text/javascript" src="http://smart-ip.net/_res/js/webservice/api.js?key=_hostname_key_"></script>
	
	var MyIP = new SmartIP();
	MyIP.load();
	MyIP.onload = function() {
		if (this.getCountryCode()!='NL') return false; 
//		show_var(this._responseData);
		map.setCenter(new GLatLng( this.getLatitude(),this.getLongitude()),map_zoom+2);
		
	};
}
