/**
 *
 */

var sparql;
var template;

var history;

$(window).load(function() {
	
	$('#popup').hide();
	$('#popup_2').hide();
	$('#result_div').hide();

	
	sparql = new Sparql();
		
		
	template = new Template($('#find_div'));
	
	$('#find_query').click(function(){
		var index = $("select#select_title").val();
		if (index == undefined){
			index = 0;
		}
		find_query(template.makeQuery(template.template[index].query, index));
		
	});

		
	init();
});

function find(){
	sparql.find();
}

function find_query(query){
	// 結果表示形式の選択に応じて利用するfunctionを変更する。
	// 結果表示にはいずれも「Flot」を利用している。
	//Flotについてはhttp://www.flotcharts.org/参照。
	
	var type = $('select#chart_type').val();
	if (type == 'pie'){
		sparql.result_func = pie_chart;
	} else 	if (type == 'pie2'){
		sparql.result_func = pie_chart2;
	} else if (type == 'bar'){
		sparql.result_func = bar_chart;
	} else if (type == 'bar2'){
		sparql.result_func = bar_chart2;
	}

	sparql.findByQuery(query);
}


function view_condition(){
	sparql.viewCondition();
}

function view_query(){
	sparql.getViewQuery();
}

function find_offset(value){
	sparql.find_offset(value);
}

// 以下、結果表示function
// dataには「['label','data']」の配列の形で結果が格納される

function pie_chart(data){

	
	
	$('#result_div').show();

	$.plot('#result_div', data, {
	    series: {
	        pie: {
	            show: true
	        }
	    }
	});
}



function bar_chart(data){

	var arry = new Array();
	
	for (var i=0; i<data.length; i++){
		arry.push({'label':data[i].label, data:[[i, data[i].data]]});
	}
	
	$('#result_div').show();

	$.plot('#result_div', arry, {
	    series: {
	        bars: {
	            show: true
	        }
	    }
	});

}



function pie_chart2(data){
	collect_data(data, pie_chart);
}

function bar_chart2(data){
	collect_data(data, bar_chart);
}

function collect_data(data, func){
	// threshold以上のデータを「その他」(othersLabelに定義)としてまとめる

	var threshold = 10;
	var othersLabel = 'その他';
	
	var arry = new Array();
	
	var othersVal = 0;
	for (var i=0; i<data.length; i++){
		if (i < threshold){
			arry.push(data[i]);
		} else {
			var num = parseInt(data[i].data);
			if (!isNaN(num)){
				othersVal += num;
			}
		}
	}
	if (othersVal > 0){
		arry.push({'label':othersLabel, 'data':othersVal});
	}
	
	func(arry);
}