Project

General

Profile

1
<!DOCTYPE html
2
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
<html>
5
<?php
6

    
7
require_once('controller.php');
8
$controller = new Controller(false);
9

    
10
if(!isset($_GET['com'])) {
11
	echo "no command given";
12
	return;
13
}
14
if($_GET['com'] != "query"){
15
	echo "unknown command code";
16
	return;
17
}
18

    
19
//make the query
20
if(!isset($_GET['persistent'])){
21
        
22
     $persistent="true";
23
}
24
else
25
{
26
$persistent="false";
27
}
28
$selectedData = json_encode($_GET['data']);
29
$resp = $controller->makeQuery('chart',$persistent);
30

    
31
//echo "selected ".json_encode($_GET['data'],JSON_NUMERIC_CHECK);
32
//each filter to be included get its data and build the json object for the javascript
33
//echo "will include ".count($_GET['data']['incfilters'])." filters";
34

    
35
$myData = json_decode($_GET['data']);
36

    
37
if(isset($myData->incfilters))
38
	$myfilters = $myData->incfilters;
39
else
40
	$myfilters = array();
41

    
42

    
43
for($i=0;$i<count($myfilters);$i++){
44
	if(isset($myfilters[$i]->values) && $myfilters[$i]->values=='all'){
45
		$temp = $controller->getFilterData($myData->table,$myfilters[$i]->name);
46
		if(!is_array($temp)){
47
			$temp = json_decode($temp);
48
		}
49
		//print_r($temp->data);
50
		$myfilters[$i]->values = $temp->data;
51
	}
52
}
53

    
54
?>
55
<head>
56
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
57
<title>chart</title>
58
<!-- Include JQuery Core-->
59
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
60
<script type="text/javascript" src="./js/jquery-ui-1.9.1.custom/js/jquery-ui-1.9.1.custom.js"></script>
61

    
62
<!-- HighCharts -->
63
<script src="./js/Highcharts-4.0.1/js/highcharts.js" type="text/javascript"></script>
64
<script src="./js/Highcharts-4.0.1/js/modules/exporting.js" type="text/javascript"></script>
65

    
66

    
67

    
68
<script src="./js/themes9.js" type="text/javascript"></script>
69
<!--Styles-->
70
<link rel="stylesheet" href="//code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" />
71
<link type="text/css" href="./js/jquery/css/start/jquery-ui-1.8.20.custom.css" />
72
<link type="text/css" href="./js/highcharts.css" rel="stylesheet" />
73
<link rel="stylesheet" href="js/filters.css" />
74

    
75
<!--
76
<script src="http://code.highcharts.com/highcharts.js"></script>
77
<script src="http://code.highcharts.com/modules/data.js"></script>
78
<script src="http://code.highcharts.com/modules/exporting.js"></script>
79
-->
80

    
81

    
82
<script type='text/javascript'>
83
var chart;
84
var chart2;
85
var chartData;
86
var chartData2;
87
var chartDataFromServer;
88
var selectedData;
89
var filterData;
90
var myFilter;
91
//----------------- inits --------------------//
92
var wflag = <?php if(isset($_GET['w']) && $_GET['w']!='' && $_GET['w'][strlen($_GET['w'])-1] == '%'){ echo "true"; }
93
               	  else{ echo "false"; }?>
94

    
95
var mywidth =  <?php if(isset($_GET['w']) && $_GET['w']!=''){
96
			if($_GET['w'][strlen($_GET['w'])-1] == '%'){
97
				echo substr($_GET['w'],0,strlen($_GET['w'])-1);
98

    
99
			}else{
100
				if($_GET['w'][strlen($_GET['w'])-1] == 'x'){
101
					echo substr($_GET['w'],0,strlen($_GET['w'])-2);
102
				}else echo $_GET['w'];
103
			}
104
		    }else echo '700'; ?>;
105

    
106
var hflag = <?php if(isset($_GET['h']) && $_GET['h']!='' && $_GET['h'][strlen($_GET['h'])-1] == '%'){ echo "true"; }
107
                  else{ echo "false"; }?>
108

    
109
var myheight =  <?php if(isset($_GET['h']) && $_GET['h']!=''){
110
                        if($_GET['h'][strlen($_GET['h'])-1] == '%'){
111
                                echo substr($_GET['h'],0,strlen($_GET['h'])-1);
112
			}else{ 
113
                                if($_GET['w'][strlen($_GET['h'])-1] == 'x'){
114
                                        echo substr($_GET['h'],0,strlen($_GET['h'])-2);
115
                                } else echo $_GET['h'];
116
                        }
117
                      }else echo '500'; ?>;
118

    
119
//----------------- document ready --------------------//
120
$('document').ready(function(){
121
	chartDataFromServer = <?php echo $resp ?>;
122
	selectedData = $.parseJSON(<?php echo $selectedData;?>);
123
	filterData = <?php echo json_encode($myfilters);?>;
124

    
125
	renderChart();
126
	renderfilters();
127
	controlsforfilters();
128
});
129

    
130
function renderChart(){
131

    
132
	if(selectedData['in'] != undefined && selectedData['in'].length>0){
133
		if(chartDataFromServer[0].plotOptions != undefined && chartDataFromServer[0].plotOptions.series != undefined){
134
	 	       chartDataFromServer[0].plotOptions.series.events = new Object();
135
		       chartDataFromServer[0].plotOptions.series.events.checkboxClick = function(event){if(event.checked == true) this.show(); else this.hide();};
136
		}
137
		if(chartDataFromServer[1].plotOptions != undefined && chartDataFromServer[1].plotOptions.series != undefined){
138
		        chartDataFromServer[1].plotOptions.series.events = new Object();
139
	        	chartDataFromServer[1].plotOptions.series.events.checkboxClick = function(event){if(event.checked == true) this.show(); else this.hide();};
140
		}
141
		chartData = chartDataFromServer[0];
142
		chartData2 = chartDataFromServer[1];
143
		setSelections();
144
	}
145
	else{
146
		if(chartDataFromServer.plotOptions != undefined && chartDataFromServer.plotOptions.series != undefined){
147
		        chartDataFromServer.plotOptions.series.events = new Object();
148
			chartDataFromServer.plotOptions.series.events.checkboxClick = function(event){if(event.checked == true) this.show(); else this.hide();};
149
		}
150
		chartData = chartDataFromServer;
151
	}
152
	var formatter = chartData.xAxis.labels.formatter;
153
	if(selectedData['emp'] == undefined)
154
		selectedData['emp'] = new Array();
155
	else{
156
			chartData.xAxis.plotLines = new Array();
157
		for(var e=0;e<selectedData['emp'].length;e++){
158
			var line = new Object();
159
			line.value = chartData['xAxis']['categories'].indexOf(selectedData['emp'][e]);
160
			line.width = 1;
161
			line.color = 'red';
162
			line.dashStyle = 'dash';
163
			line.zIndex = 100;
164
			chartData.xAxis.plotLines.push(line);
165
		}
166
	}
167

    
168
	if(selectedData['bands'] != undefined){
169
		chartData['xAxis']['plotBands'] = new Array();
170
		for(var b=0;b<selectedData['bands'].length;b++){
171
			var band = new Object();
172
			band.color = '#FCFFC5';
173
			var from = chartData.xAxis.categories.indexOf(selectedData['bands'][b][0]);
174
			var to = chartData.xAxis.categories.indexOf(selectedData['bands'][b][1]);
175
			band.from = from;
176
			band.to = (to==-1)? chartData.xAxis.categories.length:to;
177
			band.zIndex = -100;
178
			chartData.xAxis.plotBands.push(band);
179
		}
180
	}
181

    
182
	if(selectedData['xStyle'] != undefined){
183
		chartData.xAxis.labels = labelsforx(selectedData['xStyle'],selectedData['emp']);
184
	}
185
	else{
186
		var temp = new Object(); temp['r'] = '-'; temp['s'] = '-'; temp['l'] = '-';
187
		chartData.xAxis.labels = labelsforx(temp,selectedDatap['emp']);
188
	}
189

    
190
	//headers!!!!
191
	if(typeof selectedData['title'] != 'undefined'  && selectedData['title']!=''){
192
		chartData.title = new Object();
193
		chartData.title.text = selectedData['title'];
194
		chartData.title.align = 'center';
195
	}
196
	else{
197
		chartData.title.text = null;
198
	}
199
	if(selectedData['subtitle']!=''){
200
		chartData.subtitle = new Object();
201
		chartData.subtitle.text = selectedData['subtitle'];
202
	}
203
	else{
204
		chartData.subtitle = null;
205
	}
206

    
207

    
208
	if(selectedData['fields'].length == 1 && selectedData['fields'][0]['type'] == 'pie'){
209
		chartData.xAxis.title.text = null;
210
		chartData.yAxis[0].title.text = null;
211
		$("#zoommessage").hide();
212
	}
213

    
214
	//chartData.xAxis.title.text = selectedData['xaxis']['name'];
215
	var today = new Date();
216
	var dd = today.getDate();
217
	var mm = today.getMonth()+1; //January is 0!
218

    
219
	var yyyy = today.getFullYear();
220
	chartData.credits.text = "from OpenAIRE via HighCharts (date: " + dd + "/" + mm + "/" + yyyy +")";
221

    
222
	if(selectedData['stacking']!=undefined){
223
                chartData['plotOptions']['column']['stacking'] = selectedData['stacking'];
224
                chartData['plotOptions']['area']['stacking'] = selectedData['stacking'];
225
                chartData['plotOptions']['areaspline']['stacking'] = selectedData['stacking'];
226
        }
227
//TODO ERI: HERE WE CHANGE THE LABEL FOR PIE CHARTS
228
//WE CAN ADD EITHER THE PERCENTAGE OF THE NUMERIC VALUE
229
//THERE IS THE SAME FOR EACH CHART TYPE
230

    
231
	chartData.plotOptions['pie']['dataLabels']['formatter'] = function() {
232
		return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage, 2) +' %'+'<br>'+ '( '+this.y+' Items )';
233
	};
234

    
235
	if(chartData.series.length > 4){
236
		chartData.legend.layout = 'horizontal';
237
		chartData.legend.align = 'center';
238
		chartData.legend.verticalAlign = 'bottom';
239
		chartData.legend.x = null;
240
		chartData.legend.y = null;
241
		chartData.legend.floating = false;
242
		//chartData.legend.itemStyle = new Object();
243
		//chartData.legend.itemStyle.margin = "4px";
244
	}
245

    
246
	if(selectedData['type'] == 'scatter'){
247
		if(selectedData['color'] == 'yes')
248
			chartData.tooltip.formatter = function() { return '<b>'+ this.series.name +'</b><br/>'+ chartData['xAxis']['title']['text']+ ': '+ this.x +'<br/>'+ chartData['yAxis'][0]['title']['text']+': '+ this.y ;};
249
		else if(selectedData['group'] != '')
250
			chartData.tooltip.formatter = function() { return '<b>'+ this.point.name +'</b><br/>'+ chartData['xAxis']['title']['text']+ ': '+ this.x +'<br/>'+ chartData['yAxis'][0]['title']['text']+': '+ this.y ;};
251
		else
252
			chartData.tooltip.formatter = function() { return chartData['xAxis']['title']['text']+ ': '+ this.x +'<br/>'+ chartData['yAxis'][0]['title']['text']+': '+ this.y ;};
253
		chartData['chart']['type'] = 'scatter';
254
	}
255
	else {
256
			chartData.tooltip.percentageDecimals = 1;
257
			chartData.tooltip.valueDecimals = 1;
258
			 if(selectedData['fields'][0]['type'] != 'pie'){
259
                                //chartData.tooltip.headerFormat = '<span style="font-size:10px">{point.key}</span><table>';
260
                                //chartData.tooltip.pointFormat = '<tr><td style="color:{series.color};padding:0">{series.name}:</td>'+'<td style="padding:0"><b>{point.y}</b></td></tr>';
261
                                //chartData.tooltip.footerFormat = '</table>';
262
                                chartData.tooltip.shared = true;
263
                                chartData.tooltip.useHTML = true;
264
                        }
265
                        //else
266
			chartData.tooltip.formatter = function() {
267
				if(selectedData['fields'][0]['type']!='pie'){
268
					/*//var ind = chart.xAxis[0].categories.indexOf(this.x);
269
					var str = '';
270
					if(this.point.config.name)
271
						str += '<b>'+ this.point.config.name +'</b><br/>';
272
					//str += this.x + '<br />';
273
					//var myseries = chart.series;
274
					//for(var i=0;i<myseries.length;i++){
275
					//	str += myseries[i].name + ":" + numberWithCommas(myseries[i].data[ind].y) + "<br />";
276
					//}
277
					str += this.series.name + ': '+ '<b>' + numberWithCommas(this.y) + '</b><br/>';
278
					str += chart.xAxis[0].axisTitle.textStr + ": <b>" + this.x + '</b>';
279
					return str;*/
280
					var s = '<b>'+ this.x +'</b>';
281

    
282
                			$.each(this.points, function(i, point) {
283
                    				s += '<br/><span style="color:'+point.series.color+'">'+ point.series.name +'</span>: '+
284
                        			numberWithCommas(point.y);
285
                			});
286

    
287
                			return s;
288
				}
289
				else{
290
					var name;
291
					if(selectedData['fieldsheaders'].length >0)
292
						name = selectedData['fieldsheaders'][0];
293
					else if(selectedData['yaxisheaders'].length>0)
294
						name = selectedData['yaxisheaders'][0];
295
					else
296
						name = "number";
297
					return '<b>'+ this.point.config.name +'</b>: ' + Highcharts.numberFormat(this.percentage, 2) +' %<br/>(' + name + ": " + numberWithCommas(this.y) +")";
298
				}
299
			};
300
		if(selectedData['fields'].length==1)
301
			chartData['chart']['type'] = selectedData['fields'][0]['type'];
302

    
303
	}
304
	if('theme' in selectedData){
305
		highchartsOptions = Highcharts.setOptions(themes[selectedData['theme']][1]);
306
	}
307
	else
308
		highchartsOptions = Highcharts.setOptions(themes[0][1]);
309

    
310

    
311
//    alert('document width ' + $(document).width()  + 'and height ' + $(document).height()  ' and chart width' + chartData.chart.width);
312

    
313

    
314

    
315
if(mywidth>0)
316
{
317
		if(wflag)
318
			chartData.chart.width = mywidth * $(document).width() /100;
319
		else
320
			chartData.chart.width = mywidth;
321
	}
322
else{
323
	 chartData.chart.width = 90 * $(document).width() / 100;
324
	
325
}
326
 
327
      if(myheight>0){
328
                if(hflag)
329
                        chartData.chart.height = myheight * $(document).height() /100;
330
                else
331
                        chartData.chart.height = myheight;
332
       }
333
	else
334
	{chartData.chart.height = 80 * $(document).height() /100;
335
}
336

    
337

    
338
	chartData.exporting = JSON.parse( '{ "url" : "<?php echo $export_server ?>" }');
339
	
340
	chart = new Highcharts.Chart(chartData, function(chart){
341
		var series = chart.series;
342
		var i=0;
343
		for(; i<series.length; i++){
344
			if( series[i].legendItem && series[i].checkbox) {
345
        			series[i].checkbox.style.marginLeft = '18px';
346
    			}
347
		}
348
	});
349

    
350

    
351
	//chart.setSize(mywidth, myheight, false);
352
	//alert(JSON.stringify(chartData));
353
	if(selectedData['in'] != undefined && selectedData['in'].length>0){
354
		if(chartData.xAxis.labels != undefined) chartData2.xAxis.labels = chartData.xAxis.labels
355
		if(chartData.title != undefined) {chartData2.title = new Object(); chartData2.title.text = chartData.title.text;}
356
		if(chartData.subtitle != undefined) {chartData2.subtitle = new Object(); chartData2.subtitle.text = chartData.subtitle.text;}
357
		chartData2.xAxis.title.text = chartData.xAxis.title.text;
358
		chartData2.yAxis[0].title.text = chartData.yAxis[0].title.text;
359
		chartData2.credits.text = chartData.credits.text;
360
		chartData2.plotOptions['pie']['dataLabels']['formatter'] = chartData.plotOptions['pie']['dataLabels']['formatter'];
361
		chartData2.tooltip = chartData.tooltip;
362
		chartData2['chart']['type'] = chartData['chart']['type'];
363
		chartData2['chart']['renderTo'] = 'chart2';
364
		chartData2['xAxis']['plotLines'] = chartData['xAxis']['plotLines'];
365
		chartData2['xAxis']['plotBands'] = chartData['xAxis']['plotBands'];
366
		if(chartData['chart']['height'] != undefined)
367
			chartData2['chart']['height'] = chartData['chart']['height'];
368
		if(chartData['chart']['width'] != undefined)
369
			chartData2['chart']['width'] = chartData['chart']['width'];
370
		if(selectedData['xStyle'] != undefined){
371
		        chartData2.xAxis.labels = labelsforx(selectedData['xStyle'],selectedData['emp']);
372
		}
373
		else{
374
		        var temp = new Object(); temp['r'] = '-'; temp['s'] = '-'; temp['l'] = '-';
375
		        chartData2.xAxis.labels = labelsforx(temp,selectedData['emp']);
376
		}
377
		if(selectedData['stacking']!=undefined){
378
		        chartData2['plotOptions']['column']['stacking'] = selectedData['stacking'];
379
		        chartData2['plotOptions']['area']['stacking'] = selectedData['stacking'];
380
		        chartData2['plotOptions']['areaspline']['stacking'] = selectedData['stacking'];
381
		}
382

    
383
		if(chartData2.series.length > 4)
384
                         chartData2.legend = chartData.legend;
385
//chartData2.plotOptions.column.pointWidth = 30;
386
		chart2 = new Highcharts.Chart(chartData2, function(chart2){
387
	        	var series = chart2.series;
388
	        	var i=0;
389
	        	for(; i<series.length; i++){
390
	        	        if( series[i].legendItem && series[i].checkbox) {
391
	        	                series[i].checkbox.style.marginLeft = '18px';
392
	        	        }
393
	        	}
394
		});
395

    
396
	}
397
//exporting: { enabled: false }
398

    
399
//chartData['plotOptions']['exporting']['enabled']='false';
400

    
401
	credits();
402
}
403

    
404

    
405
function setSelections(){
406
	var str = "<input type='radio' name='sel' checked value='not'/>"+selectedData['in'][0]['text']+"&nbsp&nbsp&nbsp<input type='radio' name='sel' value='cumulate'/>Cumulative" ;
407
	$("#selections").empty().append(str);
408

    
409
	$("input[name='sel']").live("click",function(){
410
		if($(this).val() == "cumulate"){
411
		$("#chart").hide();		
412
			$("#chart2").show();
413
		}
414
		else{
415
			$("#chart2").hide();
416
			$("#chart").show();
417
		}
418
	});
419
}
420

    
421
function controlsforfilters(){
422
	$("a.all").live("click",function(){
423
		$(this).siblings('.filterForm').find('input').attr("checked","checked");
424
		newValues($(this).siblings('.filterForm').find('input')[0]);
425
		return false;
426
	});
427

    
428
	$("a.none").live("click",function(){
429
                $(this).siblings('.filterForm').find('input').removeAttr("checked");
430
		newValues($(this).siblings('.filterForm').find('input')[0]);
431
		return false;
432
        });
433

    
434
	$(".formContainer input").live("click",function(){
435
		newValues(this);
436
	});
437
}
438

    
439
function newValues(obj){
440
	var field = $(obj).parent().attr('id');
441
	var myfilters = selectedData['filters'];
442
	var thisfilter;
443
	for(var i=0;i<selectedData['incfilters'].length;i++){
444
		if(selectedData['incfilters'][i]['name'] == field){
445
			thisfilter = selectedData['incfilters'][i];
446
			break;
447
		}
448
	}
449

    
450
	//change the url params
451
	//if is it checked
452
	if($(obj).is(":checked")){
453
		$(obj).parents(".filter").find("a.none").show();
454
		var flag = false;
455
		var i;
456
		for(i=0;i<myfilters.length;i++){
457
			if(myfilters[i]['name'] == field){
458
				flag=true;
459
				break;
460
			}
461
		}
462
		//if there is already such a filter delete all values and insert all the checked
463
		if(flag){
464
			myfilters[i].values = new Array();
465
			$(obj).parent().find("input:checked").each(function(){
466
				myfilters[i].values.push($(this).val());
467
			});
468
			//myfilters[i].values.push($(obj).val());
469
		}
470
		//if there is no such filter
471
		else{
472
			//create one
473
			var newfilter = new Object();
474
			newfilter.name = field;
475
			newfilter.values = new Array();
476
			var ch = $(obj).parent().find("input:checked");
477
			$(ch).each(function(){
478
				newfilter.values.push($(this).val());
479
			});
480
			//newfilter.values[0] = $(obj).val();
481
			myfilters.push(newfilter);
482
		}
483
	}
484
	//if it was unchecked
485
	else{
486
		//there should be already such a filter
487
		var flag = false;
488
                var i;
489
                for(i=0;i<myfilters.length;i++){
490
                        if(myfilters[i]['name'] == field){
491
                                flag=true;
492
                                break;
493
                        }
494
                }
495
		//remove the value
496
                if($(obj).parent().find("input:checked").length == 0){
497
                        $(obj).parents(".filter").find("a.none").hide();
498
                        myfilters[i].values = new Array();
499
                }
500
                else{
501
                        var j;
502
                        for(j=0;j<myfilters[i].values.length;j++){
503
                                if(myfilters[i].values[j] == $(obj).val()){
504
                                        myfilters[i].values.splice(j,1);
505
                                        break;
506
                                }
507
                        }
508
                }
509

    
510

    
511
		//if no more values, add the values in the incfilter list and if it is all remove the filter
512
		if(myfilters[i].values.length == 0){
513
			if(thisfilter.values[0]=="all")
514
				myfilters.splice(i,1);
515
			else
516
				myfilters[i].values = thisfilter.values;
517
		}
518
	}
519
	//ajax call to get the new data
520
	$.ajax({
521
	   type: "GET",
522
	   url: "ajaxRouter9.php",
523
	   data: "com=query&type=chart&data="+encodeURIComponent(JSON.stringify(selectedData)),  
524
	   success: function(resp){
525
		 // we have the response
526
		chartDataFromServer = JSON.parse(resp);
527
		renderChart();
528
		},
529
	   error: function(e){
530
		 alert('Error: ' + e);
531
	   }
532
	});
533

    
534
}
535

    
536

    
537
function labelsforx(style, emp){
538
	var st = Object();
539
	st.justify = null;
540
	st.style = Array();
541
	st.style['font-size'] = '8px';
542
	st.formatter = null;
543

    
544
	if(style['r'] != null && style['r'] != "-"){
545
		st.rotation = style['r'];
546
		st.y =25;
547
	}
548
	if(style['s'] != null && style['s'] != "-")
549
		st.step = style['s'];
550
	if(style['l'] != null && style['l'] != "-")
551
		st.staggerLines = style['l'];
552

    
553
	if(style['ft'] != null && style['ft'] != "-"){
554
		if(style['wt'] != null && style['wt'] != "-")
555
			st.formatter = function(){
556
				eflag = false;
557
				for(var e=0;e<emp.length;e++){
558
                                	if(this.value == emp[e]){
559
                                        	eflag = true;
560
                                                break;
561
                                        }
562
                                }
563

    
564
				if (typeof this.value == 'string' || this.value instanceof String){
565
					var ar = this.value.split(" ");
566
					var str = '';
567
					if(ar.length == 1){
568
						if(eflag) return '<span style="fill:red;">' + this.value.substr(0,selectedData['xStyle']['ft']) + '</span>';
569
						else return this.value.substr(0,selectedData['xStyle']['ft']);
570
					}
571
					for(var i=0;i<ar.length;i++) {
572
						str +=ar[i].substr(0,selectedData['xStyle']['wt'])+' ';
573
					}
574
					if(eflag) return '<span style="fill:red;">' + str.substr(0,selectedData['xStyle']['ft']) + '</span>';
575
					else return str.substr(0,selectedData['xStyle']['ft']);
576
				}
577
				else
578
					if(eflag) return '<span style="fill:red;">' + this.value + '</span>';
579
			};
580
		else
581
			st.formatter = function(){
582
				eflag = false;
583
                                for(var e=0;e<emp.length;e++){
584
                                        if(this.value == emp[e]){
585
                                                eflag = true;
586
                                                break;
587
                                        }
588
                                }
589

    
590
				if (typeof this.value == 'string' || this.value instanceof String){
591
					if(this.value.length>selectedData['xStyle']['ft'])
592
						if(eflag) return '<span style="fill:red;">' + this.value.substr(0,selectedData['xStyle']['ft']) + "..." + '</span>';
593
						else return this.value.substr(0,selectedData['xStyle']['ft']) + "...";
594
					else
595
						if(eflag) return '<span style="fill:red;">' + this.value + '</span>';
596
						else return this.value;
597
				}
598
				else return this.value;
599
			};
600
	}
601
	else if(style['wt'] != null && style['wt'] != "-")
602
		st.formatter = function(){
603
				eflag = false;
604
                                for(var e=0;e<emp.length;e++){
605
                                        if(this.value == emp[e]){
606
                                                eflag = true;
607
                                                break;
608
                                        }
609
                                }
610
				if (typeof this.value == 'string' || this.value instanceof String){
611
					var ar = this.value.split(" ");
612
					var str = '';
613
					if(ar.length == 1)
614
						if(eflag) return '<span style="fill:red;">' + this.value + '</span>';
615
 						else return this.value;
616
					for(var i=0;i<ar.length;i++) {
617
						str +=ar[i].substr(0,selectedData['xStyle']['wt'])+' ';
618
					}
619
					if(eflag) return '<span style="fill:red;">' + str + '</span>';
620
					else return str
621
				}
622
				else
623
					if(eflag) return '<span style="fill:red;">' + this.value + '</span>';
624
			};
625
	else{
626
		st.formatter = function(){
627
                	for(var e=0;e<emp.length;e++){
628
                        	if(this.value == emp[e]){
629
					return '<span style="fill:red;">' + this.value + '</span>';
630
                                }
631
                        }
632
			return this.value;
633
		};
634
	}
635
	return st;
636
}
637

    
638
function isInt(n) {
639
   return typeof n === 'number' && n % 1 == 0;
640
}
641

    
642
function numberWithCommas(num){
643
	if(isInt(num)){
644
		var array = num.toString().split('');
645
		var index = -3;
646
		var len = array.length;
647
		while((len + index) > 0){
648
			array.splice(index, 0 , ',');
649
			index -= 4;
650
		}
651
		return array.join('');
652
	}
653
	else
654
		return Math.round(num*100)/100;
655
}
656

    
657
function credits(){
658
	var today = new Date();
659
	var dd = today.getDate();
660
	var mm = today.getMonth()+1; //January is 0!
661
	var yyyy = today.getFullYear();
662
	var cr = document.getElementById("credits");
663
	cr.innerHTML = "from OpenAIRE via HighCharts (date: " + dd + "/" + mm + "/" + yyyy +")";
664
}
665

    
666
function renderfilters(){
667
	var container = document.getElementById("filters");
668
	if(filterData!=null){
669
		var len = filterData.length;
670
		for(var i=0;i<len;i++){
671
			//checkboxes
672
			if(filterData[i].values != undefined){
673
				var str = "<div class='filter'><div class='filterHeader'><p>"+filterData[i].showname+"</p><input type='hidden' value='"+filterData[i].name+"' class='filtername'/></div><a class='all' href='#'>select all</a><a class='none' href='#' style='display:none;float:right'>clear</a><div class='filterForm'><div class='formContainer'><form id='"+filterData[i].name+"' class='filterform'>";
674
				for(var v=0;v<filterData[i].values.length;v++){
675
					str+="<input type='checkbox' value='"+filterData[i].values[v]+"' name='form"+filterData[i].name+"'>"+filterData[i].values[v]+"<br>";
676
				}
677
				str +=	"</form></div></div></div>";
678
				$(container).append(str);
679
			}
680
			//slider
681
			else{
682
				var str = "<div class='filter'><div class='filterHeader'><p>"+filterData[i].showname+"</p><input type='hidden' value='"+filterData[i].name+"' class='filtername'/></div>";
683
				str += "<div class='filter-slider'><div class='slider-container'><div id='slider"+filterData[i].name+"' class='ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all' aria-disabled='false'></div></div>";
684

    
685
				str += "<span class='price-tip slider-user-min'><span id='userMin"+filterData[i].name+"'>"+filterData[i]['min']+"</span></span>";
686
				str += "<span class='price-tip slider-user-max'><span id='userMax"+filterData[i].name+"'>"+filterData[i]['max']+"</span></span>";
687
				str += "<span class='min' style='display:none'><span id='productMin"+filterData[i].name+"'>"+filterData[i]['min']+"</span></span>";
688
				str += "<span class='max' style='display:none'><span id='productMax"+filterData[i].name+"'>"+filterData[i]['max']+"</span></span>";
689
				str += "</div></div>";
690
				$(container).append(str);
691
				myFilter = filterData[i];
692
				$(function(){
693
					$("#slider"+myFilter.name).slider({
694
						step: 1,
695
						range: true,
696
						min: parseInt(myFilter['min']),
697
						max: parseInt(myFilter['max']),
698
						values: [parseInt(myFilter['min']), parseInt(myFilter['max'])],
699
						change: function(event, ui){
700
							$(this).parent().parent().find('.slider-user-min').find('span').html(ui.values[0]);
701
							$(this).parent().parent().find('.slider-user-max').find('span').html(ui.values[1]);
702
							slidermove(myFilter.name,ui.values[0],ui.values[1]);
703
						}
704
					});
705
				});
706
			}
707
		}
708
	}
709
	else{
710
		$(container).css("width","0px");
711
	}
712
}
713

    
714
function slidermove(field,min,max){
715
	var myfilters = selectedData['filters'];
716
	var len = myfilters.length;
717
	for(var i=0;i<len;i++){
718
		if(myfilters[i]['name'] == field){
719
			myfilters[i]['min'] = min;
720
			myfilters[i]['max'] = max;
721
			break;
722
		}
723
	}	
724

    
725

    
726
	//ajax call to get the new data
727
	$.ajax({  
728
	   type: "GET",  
729
	   url: "ajaxRouter9.php",
730
	   data: "com=query&type=chart&data="+encodeURIComponent(JSON.stringify(selectedData)),  
731
	   success: function(resp){  
732
		 // we have the response 
733
		chartDataFromServer = JSON.parse(resp);
734
		renderChart();
735
		},  
736
	   error: function(e){  
737
		 alert('Error: ' + e);  
738
	   }
739
	});
740
}
741
</script>
742
</head>
743
<body>
744
<div id="filters"></div>
745
<div id="charts-main" style="margin-right:10px;float:left">
746
	<div id='chart' style="width:95%;height:95%;margin:auto;"></div>
747
	<div id='chart2' style="width:95%;height:95%;margin:auto;display:none;"><!-- SECTION FOR THE GRAPHIC --></div>
748

    
749
	<div id="selections" style="width:95%;height:5%;margin:auto;text-align:center;font-family:Verdana;font-size:small;color:#000"></div>
750
	<div id='credits'></div>
751
	<div id='zoommessage'>select an area to zoom in</div>
752
</div>
753
</body>
754
</html>
755

    
(5-5/28)