Project

General

Profile

1
var prmstr;
2
var prmarr;
3
var params;
4

    
5
var MapStyles = [
6
	{featureType: "all", stylers: [{ saturation: -80 }]}, 
7
	{featureType: "road", stylers: [{ visibility: "off" }]}, 
8
	{featureType: "transit", stylers: [{ visibility: "off" }]},
9
	{featureType: "poi", stylers: [{ visibility: "off" }]},
10
	{featureType: "landscape", stylers: [{ visibility: "off" }]},
11
	{featureType: "administrative.land_parcel", stylers: [{ visibility: "off" }]},
12
	{featureType: "administrative.locality", stylers: [{ visibility: 'off' }]},
13
	{featureType: "administrative.neighborhood", stylers: [{ visibility: "off" }]},
14
	{featureType: "administrative.province", stylers: [{ visibility: "off" }]}];
15
var mapType = new google.maps.StyledMapType(MapStyles, {name: "Gray"});
16

    
17
var MYMARKERS = new Array();
18
var MYREPOS = new Array();
19

    
20
var MYICONS = new Array();
21
MYICONS[0] = "./images/blue_marker.png"; 
22
MYICONS[1] = "./images/green_marker.png";
23
MYICONS[2] = "./images/orange_marker.png";
24
MYICONS[3] = "./images/red_marker.png";
25
MYICONS[4] = "./images/grey_marker.png";
26
MYICONS[5] = "http://maps.gstatic.com/mapfiles/ridefinder-images/mm_20_black.png";
27
MYICONS[6] = "http://maps.gstatic.com/mapfiles/ridefinder-images/mm_20_purple.png";
28

    
29
var MYMAP = {
30
  map: null,
31
  bounds: null
32
}
33
var infoWindow = new google.maps.InfoWindow();
34

    
35

    
36
MYMAP.init = function(selector, latLng, zoom) {
37
  var myOptions = {
38
    zoom:zoom,
39
    center: latLng,
40
    mapTypeId: google.maps.MapTypeId.ROADMAP,
41
    mapTypeControlOptions: {
42
	mapTypeIds: [google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, 'grey']
43
    }	
44
  }
45
  this.map = new google.maps.Map($(selector)[0], myOptions);
46
  this.bounds = new google.maps.LatLngBounds();
47
	
48
  this.map.mapTypes.set('grey', mapType);
49
  this.map.setMapTypeId('grey');
50
  getRepositories();
51

    
52
}
53

    
54
var countries = new Array();
55
var repotypes = new Array();
56
var comptypes = new Array();
57

    
58
MYMAP.placeMarkers = function() {
59
	var cstr = '';
60
	var comstr = '';
61
	var tstr = '';
62

    
63
	$.each(MYREPOS,function(index){
64
		var name = this.name;
65

    
66
		// create a new LatLng point for the marker
67
		var lat = this.lat;
68
		var lng = this.lon;
69
		var point = new google.maps.LatLng(this.lat,this.lon);		
70
		
71
		if(repotypes.indexOf(this.type) == -1){
72
			repotypes.push(this.type);
73
			tstr += "<img src='"+MYICONS[repotypes.indexOf(this.type)]+"'/>";	
74
			tstr += "<input type='checkbox' class='typebox item' value='"+this.type+"'>"+this.type+"<br />";		
75
		}
76

    
77
		if(countries.indexOf(this.country) == -1){
78
			countries.push(this.country);	
79
			//cstr += "<input type='checkbox' class='countrybox item' value='"+this.country+"'>"+this.country+"<br />";		
80
		}
81

    
82
		if(comptypes.indexOf(this.compatibility) == -1){
83
			comptypes.push(this.compatibility);	
84
			comstr += "<input type='checkbox' class='compatibilitybox item' value='"+this.compatibility+"'>"+this.compatibility+"<br />";		
85
		}		
86

    
87
		var marker = new google.maps.Marker({
88
			position: point,
89
			map: MYMAP.map,
90
			icon: MYICONS[repotypes.indexOf(this.type)],//<-- change that
91
			title: name		
92
		});
93

    
94
		// extend the bounds to include the new point
95
                MYMAP.bounds.extend(point);	
96

    
97
		var html='<p class="tooltip-header"><a href="http://furkot.icm.edu.pl/openaire/index.php?option=com_openaire&view=datasource&Itemid=134&datasourceId='+this.id+'" target="_blank">'+this.name+'</a></p><p class="tooltip-body"><br />type: '+this.type+'<br />compatibility: '+this.compatibility+'<br />organization:'+this.organization+'<br />country:'+this.country+'</p>';
98
		google.maps.event.addListener(marker, 'click', function() {
99
			infoWindow.setContent(html);
100
			infoWindow.open(MYMAP.map, marker);
101
		});
102
		//MYMAP.map.fitBounds(MYMAP.bounds);
103

    
104
		MYMARKERS[index] = new Object();
105
		MYMARKERS[index].repo = this;
106
		MYMARKERS[index].marker = marker;
107

    
108
	});
109
	countries.sort();
110
	cstr = '';
111
	$.each(countries,function(){
112
		cstr += "<input type='checkbox' class='countrybox item' value='"+this+"'>"+this+"<br />";
113
	
114
	});
115

    
116
	$("#countries").append(cstr);
117
	$("#compatibility").append(comstr);
118
	$("#types").append(tstr);
119

    
120
	//MYMAP.map.fitBounds(MYMAP.bounds);
121
	//MYMAP.map.setCenter(MYMAP.bounds.getCenter());
122
}
123

    
124

    
125
function getRepositories(){
126
	var query = "select datasource.id, datasource.name, datasource.type, datasource.compatibility, datasource.latitude, datasource.longitude, organization.name, organization.country from datasource left join datasource_organizations on datasource.datasource_organizations = datasource_organizations.id left join organization on organization.id=datasource_organizations.organization where latitude!='0.0' and longitude!='0.0' and datasource.type LIKE '%Repository%' and datasource.compatibility != 'unknown' and datasource.compatibility!='non compatible'";
127
	
128
	if(params.country != null){
129
		query += " and organization.country='"+params.country+"'";
130
	}
131

    
132
	$.ajax({  
133
	   type: "GET",  
134
	   async: false,
135
	   url: "ajaxRouter9.php",  
136
	   data: "com=performQuery&query="+query,  
137
	   success: function(resp){  
138
		// we have the response 
139
		createMarkersForRepos(JSON.parse(resp));
140
	   },  
141
	   error: function(e){  
142
		 alert('Error: ' + e);  
143
	   }  
144
	});
145
}
146

    
147
function createMarkersForRepos(repos){
148
	var len = repos.length;
149
	var m = MYREPOS.length;
150
	for(var i=m;i<len+m;i++){
151
		MYREPOS[i] = new Object();
152
		//name, type, compatibility, lat, lon, organization, country
153
		MYREPOS[i].id = repos[i-m][0];
154
		MYREPOS[i].name = repos[i-m][1];
155
		MYREPOS[i].type = repos[i-m][2];
156
		MYREPOS[i].compatibility = repos[i-m][3];
157
		MYREPOS[i].lat = parseFloat(repos[i-m][4]);
158
		MYREPOS[i].lon = parseFloat(repos[i-m][5]);
159
		if(repos[i-m][6]!=null)
160
			MYREPOS[i].organization = repos[i-m][6];	
161
		else
162
			MYREPOS[i].organization = "-";
163
		if(repos[i-m][7]!=null)
164
			MYREPOS[i].country = repos[i-m][7];
165
		else
166
			MYREPOS[i].country = "UNKNOWN";		
167
	}
168
}
169

    
170
function filter(){
171
	var countries;
172
	var countrynames = new Array();
173
	var comtypes;
174
	var comptypenames = new Array();
175
	var dsrctypes;
176
	var dsrctypenames = new Array();
177

    
178
	dsrctypes = $(".typebox:checked");
179

    
180
	$(dsrctypes).each(function(){
181
		dsrctypenames.push($(this).attr('value'));
182
	});	
183

    
184
	countries = $(".countrybox:checked");
185

    
186
	$(countries).each(function(){
187
		countrynames.push($(this).attr('value'));
188
	});
189

    
190
	comtypes = $(".compatibilitybox:checked");
191
	$(comtypes).each(function(){
192
		comptypenames.push($(this).attr('value'));
193
	});	
194

    
195
	//check all the markers, if the country is checked, show the ones that have the right icon, and hide the rest
196
	$.each(MYMARKERS,function(){	
197
		if(countrynames.indexOf(this.repo.country)!=-1 && comptypenames.indexOf(this.repo.compatibility)!=-1 && dsrctypenames.indexOf(this.repo.type)!=-1){
198
			this.marker.setMap(MYMAP.map);
199
		}
200
		else
201
			this.marker.setMap(null);
202

    
203
	});
204
	
205
	if($(".countrybox:checked").length==$(".countrybox").length){
206
		$(".checkedcountries p").html("all countries selected");
207
	}
208
	else{
209
		$(".checkedcountries p").html($(".countrybox:checked").length+" countries selected");		
210
	}
211
}
212

    
213

    
214
$(document).ready(function() {
215
 
216
  prmstr = window.location.search.substr(1);
217
  prmarr = prmstr.split ("&");
218
  params = {};
219

    
220
  for ( var i = 0; i < prmarr.length; i++) {
221
    var tmparr = prmarr[i].split("=");
222
    params[tmparr[0]] = tmparr[1];
223
  }
224

    
225
  $("#map").css("height","600px").css("width", "90%");
226
  var myLatLng = new google.maps.LatLng(51.618017,14.487303);
227
  MYMAP.init('#map', myLatLng, 4);
228
  MYMAP.placeMarkers();
229

    
230
  var zoomChangeBoundsListener = 
231
    google.maps.event.addListenerOnce(MYMAP.map, 'bounds_changed', function(event) {
232
        if (this.getZoom()){
233
		//if(params.country != null)
234
			this.setZoom(4);
235
		//else
236
		//	this.setZoom(3);
237
        }
238
  });
239
  setTimeout(function(){google.maps.event.removeListener(zoomChangeBoundsListener)}, 2000);
240
  
241
  if(params.country == null)
242
	$("#countrycol").show();
243

    
244

    
245
  $(".compatibilitybox").attr("checked","checked");
246
  $(".typebox").attr("checked","checked");
247
  $(".countrybox").attr("checked","checked");
248
  filter();
249

    
250
  $("#call").click(function(){
251
	$(".countrybox").attr("checked","checked");
252
	filter();
253
  });
254

    
255
  $("#cnone").click(function(){
256
	$(".countrybox").attr("checked","");
257
	filter();
258
  });
259

    
260
  $(".countrybox").live("click",filter);
261
  $(".typebox").live("click",filter);
262
  $(".compatibilitybox").live("click",filter);
263
	
264
});
265

    
266

    
267

    
268

    
269

    
270

    
271

    
(13-13/16)