Index: /SPARQLBuilderWWW/web/newsparqlbuilder.js
===================================================================
--- /SPARQLBuilderWWW/web/newsparqlbuilder.js (revision 237)
+++ /SPARQLBuilderWWW/web/newsparqlbuilder.js (revision 238)
@@ -5,5 +5,4 @@
 var NODEHEIGHT = 0;
 var DRAWHEIGHT = 0;
-var MOUSEMOVED = 0;
 
 var endpoint = "";
@@ -38,6 +37,6 @@
 	var sbdiv = $('div#SPARQLBUILDER');
 	if(sbdiv.find('div').length == 0){
-		var sbtop = '<div class="SBTopItems"><input type="button" class="SBTopButton" value="Open SPARQLBuilder" onclick="openSPARQLBuilder()"><input type="button" class="SBTopButton" value="Try with Sample" onclick="openSample(\'http://www.ebi.ac.uk/rdf/services/reactome/sparql\', \'http://www.biopax.org/release/biopax-level3.owl#Protein\', \'http://www.biopax.org/release/biopax-level3.owl#Pathway\')"><br /><textarea class="SBSparqlArea" rows="10"></textarea><br /><input type="button" class="SBTopButton" value="Send SPARQL" onclick="sendSPARQL()"><input type="button" class="SBTopButton" value="Download Result" onclick="downloadResult()"></div>';
-		var sbmodal = '<div class="SBModalView"><div class="SBModalContents"><div class="SBSelects"><select class="SBEndPointSelect"></select><select class="SBStartClassSelect"></select><select class="SBEndClassSelect"></select><input type="button" class="SBSaveESE" value="PermaLink" onClick="openPermalink()"></div><div class="SBMessage"><div class="SBResult"><span class="SBPathnum"></span> Path<span class="SBPlural"></span> found.</div><input type="button" class="SBViewAll" value="View All" onClick="viewAll()"></div><div class="SBGraph"><div class="SBAjaxLoad"><div class="SBLoadIcon"><img src="images/ajax-loader.gif"></div></div></div><div class="SBSelectedPath"></div><div class="SBModalButtons"><input type="button" class="SBModalButton" value="Close" onclick="closeSPARQLBuilder()"></div></div>';
+		var sbtop = '<div class="SBTopItems"><input type="button" class="SBTopButton" value="Open SPARQLBuilder" onclick="openSPARQLBuilder()"><input type="button" class="SBTopButton" value="Try with Sample" onclick="openSample(\'http://www.ebi.ac.uk/rdf/services/reactome/sparql\', \'http://www.biopax.org/release/biopax-level3.owl#Protein\', \'http://www.biopax.org/release/biopax-level3.owl#Pathway\')"><br><textarea class="SBSparqlArea" rows="10"></textarea><br><input type="button" class="SBTopButton" value="Send SPARQL" onclick="sendSPARQL()"><input type="button" class="SBTopButton" value="Download Result" onclick="downloadResult()"></div>';
+		var sbmodal = '<div class="SBModalView"><div class="SBModalContents"><div class="SBForms"><div class="SBSelects"><select class="SBEndPointSelect"></select><select class="SBStartClassSelect"></select><select class="SBEndClassSelect"></select></div><div class="SBPermaLink"><input type="button" class="SBPermaLinkButton" value="Permalink" onclick="openPermalink()" disabled="disabled"></div></div><div class="SBMessage"><div class="SBResult"><span class="SBPathnum"></span> Path<span class="SBPlural"></span> found.</div><input type="button" class="SBViewAll" value="View All Path" onclick="viewAll()"></div><div class="SBGraph"><div class="SBAjaxLoad" style="display: none;"><div class="SBLoadIcon"><img src="images/ajax-loader.gif"></div></div></div><div class="SBPath"><div class="SBSelectedPath"></div></div><div class="SBModalButtons"><input type="button" class="SBModalButton" value="Close" onclick="closeSPARQLBuilder()"></div></div></div>';
 
 		sbdiv.html(sbtop);
@@ -385,293 +384,264 @@
 };
 
+
+// 繧ｰ繝ｩ繝墓緒逕ｻ驛ｨ蛻�
 view_map = function(){
 
-    // make_data繝｡繧ｽ繝�ラ縺ｮ邨先棡繧貞叙蠕�
-    var json = make_data(0);
-
-    if(json['nodes'].length != 0){
-
-        // 蜃ｺ譚･荳翫′縺｣縺溽ｵ先棡繧呈ｸ｡縺励※繝槭ャ繝嶺ｸ翫�繝ｭ繧ｱ繝ｼ繧ｷ繝ｧ繝ｳ繧偵そ繝�ヨ
-        set_map_location(0, json['nodes'], json['links']);
-
-        // SVG縺ｮ蟷�→鬮倥＆繧定ｨｭ螳夲ｼ亥ｹ�ｼ夂判髱｢縺�▲縺ｱ縺�鬮倥＆�壹ヱ繧ｹ縺ｮ謨ｰ縺ｫ蠢懊§險ｭ螳夲ｼ�
-        var width = $('.SBGraph').width();
-        var height = $('.SBGraph').height();
-        var graphheight = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2);
-
-        var scoreleftmargin = NODEHEIGHT * 1.5;
-
-        // SVG縺ｮ蜑企勁
-        d3.select(".SBGraph svg").remove();
-        // 逕ｻ髱｢繧ｵ繧､繧ｺ縺ｫ蜷医ｏ縺婀VG縺ｮ霑ｽ蜉
-        var svg = d3.select(".SBGraph").append("svg")
-            .attr("width", width)
-            .attr("height", height)
-            .attr("viewBox", "0 0 " + width + " " + height)
-            .on("mousewheel", function(){
-            	var vb = svg.attr("viewBox");
-            	var spvb = vb.split(" ");
-
-            	var vby = (parseInt(spvb[1]) - event.wheelDelta);
-
-            	if(vby < 0){
-            		vby = 0;
-            	}else if(vby > (graphheight - height)){
-            		vby = (graphheight - height);
-            		if(vby < 0){
-                		vby = 0;
-                	}
-            	}else{
-            		event.preventDefault();
-            	}
-
-            	svg.attr("viewBox", "0 " + vby + " " + width + " " + height);
-            });
-
-        // 閭梧勹縺ｮ霑ｽ蜉
-        var bg = svg
-            .append("rect")
-            .attr("x", 0)
-            .attr("y", 0)
-            .attr("width", width)
-            .attr("height", function(){
-            	if(graphheight < height){
-            		return height;
-            	}else{
-            		return graphheight;
-            	}
-            })
-            .attr("fill", "#fafafa");
-
-        // links驟榊�繧呈ｸ｡縺励Μ繝ｳ繧ｯ縺ｮ菴懈�
-        var link = svg.selectAll(".link")
-            .data(json.links)
-            .enter().append("line")
-            .attr("class", "link")
-            .style("stroke", "#999")
-            .style("stroke-opacity", 0.6)
-            .style("stroke-width", function(d) { return Math.sqrt(d.value);});
-
-        // nodes驟榊�繧呈ｸ｡縺励ヮ繝ｼ繝峨�菴懈�
-        var node = svg.selectAll(".node")
-            .data(json.nodes)
-            .enter().append("circle")
-            .attr("class", "node")
-            .attr("r", (NODEHEIGHT / 2))
-            .attr("cx", function(d) { return d.x;} )
-            .attr("cy",  function(d) { return d.y; })
-            .style("stroke", function(d) { return '#fafafa'; })
-            .style("stroke-width", function(d) { return '1.5px'; })
-            .style("fill", function(d) { return d.nodecolor; })
-            .style("cursor", function(d) { return 'pointer'; });
-
-        // nodes驟榊�繧呈ｸ｡縺励ヮ繝ｼ繝峨ユ繧ｭ繧ｹ繝医�菴懈�
-        var tnode = svg.selectAll("text.node")
-            .data(json.nodes)
-            .enter().append("svg:text")
-            .attr("class", "tnode")
-            .attr("x", function(d) { return d.x; })
-            .attr("y", function(d) { return d.y; })
-            .text(function(d) { return d.name; })
-            .style("fill", function(d) { return '#000000'; })
-            .style("text-anchor", function(d) { return 'middle'; })
-            .style("pointer-events", "none");
-
-        // 繝ｪ繝ｳ繧ｯ繝�く繧ｹ繝医�菴懈�
-        var tlink = svg.selectAll("text.link")
-            .data(json.links)
-            .enter().append("svg:text")
-            .attr("class", "tlink")
-            .attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; })
-            .attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; })
-            .style("fill", function(d) { return '#000000'; })
-            .style("text-anchor", function(d) { return 'middle'; });
-
-        // nodes驟榊�繧呈ｸ｡縺励ヮ繝ｼ繝峨ユ繧ｭ繧ｹ繝医�菴懈�
-        var tscore = svg.selectAll("text.score")
-            .data(json.nodes)
-            .enter().append("svg:text")
-            .attr("class", "tscore")
-            .attr("x", function(d) { return (d.x + scoreleftmargin); })
-            .attr("y", function(d) { return d.y; })
-            .text(function(d) { return d.score;
-            })
-            .style("fill", function(d) { return '#FF0000'; })
-            .style("text-anchor", function(d) { return 'middle'; })
-            .style("pointer-events", "none");
-
-        // 繝槭え繧ｹ縺ｮ蜍輔″繧ｫ繧ｦ繝ｳ繝医ｒ繝ｫ繝ｼ繝医↓謖√◆縺帙ｋ
-        MOUSEMOVED = 0;
-
-        // 繝弱�繝峨∈縺ｮ繧ｪ繝ｳ繝槭え繧ｹ縺ｧ繝代せ謗｢邏｢縲√ヱ繧ｹ荳ｭ縺ｮ繝ｪ繝ｳ繧ｯ譁�ｭ励ｒ陦ｨ遉ｺ
-        node.on("mouseover", function(d){
-
-            // 繝槭え繧ｹ縺ｮ蜍輔″繧ｫ繧ｦ繝ｳ繝医ｒ繝ｪ繧ｻ繝�ヨ
-            node.data()[0].mousemoved = 0;
-
-            // 陦ｨ遉ｺ縺吶ｋ繝代せ菫晏ｭ倡畑驟榊�
-            var path = [];
-            // 繝��繝ｫ繝√ャ繝励∈縺ｮ蜷榊燕陦ｨ遉ｺ逕ｨ驟榊�
-            var pathname = [];
-
-            // 繝ｫ繝ｼ繝医ヮ繝ｼ繝我ｻ･螟悶↑繧�
-            if(d.nodeid != 0){
-                // 縺ｾ縺壹が繝ｳ繝槭え繧ｹ縺輔ｌ縺溘ヮ繝ｼ繝峨�id縺ｨ蜷榊燕繧偵◎繧後◇繧瑚ｿｽ蜉
-                path.push(d.nodeid);
-                pathname.push(d.name);
-
-                // 繝代せ謗｢邏｢
-                do{
-                    // 繝ｪ繝ｳ繧ｯ縺ｮ謨ｰ縺縺醍ｹｰ繧願ｿ斐＠
-                    for(var i = 0; i < link.data().length; i++){
-                        // 迴ｾ蝨ｨ縺ｮ譛蠕悟ｰｾ縺ｫ郢九′繧九Μ繝ｳ繧ｯ縺後≠繧後�
-                        if(path[(path.length-1)] == link.data()[i].target){
-                            // 縺昴�繝ｪ繝ｳ繧ｯ縺ｮ繧ｽ繝ｼ繧ｹ蛛ｴ繝弱�繝峨�id繧定ｿｽ蜉
-                            path.push(link.data()[i].source);
-                            // 縺昴�繝ｪ繝ｳ繧ｯ縺ｮ蜷榊燕縺ｨ繧ｽ繝ｼ繧ｹ蛛ｴ繝弱�繝峨�蜷榊燕繧定ｿｽ蜉
-                            pathname.push(link.data()[i].property);
-                            pathname.push(node.data()[link.data()[i].source].name);
-                        }
-                    }
-                // 繝ｫ繝ｼ繝医ヮ繝ｼ繝峨↓霎ｿ繧顔捩縺上∪縺ｧ郢ｰ繧願ｿ斐☆
-                }while(path[(path.length-1)] != 0);
-
-                // 譛ｫ遶ｯ繝弱�繝峨〒縺ｪ縺�↑繧�
-                if(d.path == "notend"){
-                    // 繝��繝ｫ繝√ャ繝励ｒ髱櫁｡ｨ遉ｺ縺ｫ
-                    $('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and <span style=\"color: hsl(200, 50%, 75%);\">push button</span> to generate a SPARQL</h1>');
-                }else{
-                    // 譛ｫ遶ｯ繝弱�繝峨↑繧峨ヤ繝ｼ繝ｫ繝√ャ繝励�諠�ｱ繧呈峩譁ｰ
-                    var resultText = '<div class="SBGenButton" onclick="generateSPARQL()">Generate<br />SPARQL</div>';
-                    // 繝代せ縺ｮ蜷榊燕驟榊�蛻�ｾ後ｍ縺九ｉ郢ｰ繧願ｿ斐＠縺ｪ縺後ｉ
-                    for (var i = pathname.length;i > 0; i--){
-                        // 螂�焚逡ｪ逶ｮ�医ヮ繝ｼ繝峨�蜷榊燕�峨�螟ｪ蟄励↓
-                        if(i % 2 == 1){
-                        	if(i == 1){
-                                resultText = resultText + "<div class=\"SBLeafNode\">" + pathname[i - 1] + "</div>";
-                        	}else if(i == pathname.length){
-                                resultText = resultText + "<div class=\"SBRootNode\">" + pathname[i - 1] + "</div>";
-                        	}else{
-                                resultText = resultText + "<div class=\"SBPathNode\">" + pathname[i - 1] + "</div>";
-                        	}
-                        // 蛛ｶ謨ｰ逡ｪ逶ｮ�医Μ繝ｳ繧ｯ縺ｮ蜷榊燕�峨�縺昴�縺ｾ縺ｾ縺ｧ陦ｨ遉ｺ
-                        }else{
-                            resultText = resultText + "<img src=\"images/pathline.png\"><div class=\"SBPathProperty\">" + pathname[i - 1] + "</div><img src=\"images/pathline.png\">";
-                        }
-                    }
-
-                    // 繝��繝ｫ繝√ャ繝励�蜀�ｮｹ繧呈嶌縺肴鋤縺�
-                    $('.SBSelectedPath').html(resultText);
-
-                    // 繧ｵ繝ｼ繝悶Ξ繝�ヨ縺ｫ騾√ｊ霑斐☆繝代せ繧ｪ繝悶ず繧ｧ繧ｯ繝医ｒ菫晏ｭ�
-                    pathobj = d.path;
-                }
-
-                $('.SBPath').css('overflow-y', 'visible');
-
-                if($('.SBPath').height() < $('.SBSelectedPath').innerHeight()){
-                    $('.SBPath').css('overflow-y', 'scroll');
-                }
-            }
-
-            // 繧ｪ繝ｳ繝槭え繧ｹ縺輔ｌ縺溘ヮ繝ｼ繝峨�鬮倥＆縺ｫ隕ｪ繧貞粋繧上○繧九◆繧√↓蜷医ｏ縺帙ｋ鬮倥＆繧剃ｿ晏ｭ�
-            var movey = d.y;
-
-            // 蜷�ヮ繝ｼ繝峨↓蟇ｾ縺�
-            node
-                // 霈ｪ驛ｭ邱壹�濶ｲ繧定ｨｭ螳�
-                .style("stroke", function(d){
-                    // 縺ｾ縺壹�閭梧勹濶ｲ�医ョ繝輔か繝ｫ繝茨ｼ峨ｒ謖�ｮ�
-                    var strokecolor = "#fafafa";
-
-                    // 繝代せ蛻､螳壹�蜑榊�逅�
-                    // 陦ｨ遉ｺ繝輔Λ繧ｰ縺系ow�亥燕蝗槭が繝ｳ繝槭え繧ｹ縺ｧ蜍輔＞縺ｦ縺�◆繝弱�繝会ｼ峨↑繧�
-                    if(d.view == "now"){
-                        // 繝弱�繝峨�陦ｨ遉ｺ繝輔Λ繧ｰ繧地o縺ｫ
-                        d.view = "no";
-                    }
-                    // 陦ｨ遉ｺ繝輔Λ繧ｰ縺稽oved�医け繝ｪ繝�け縺輔ｌ蝗ｺ螳壽ｸ医∩縺縺悟燕蝗槫虚縺�※縺�◆繝弱�繝会ｼ峨↑繧�
-                    if(d.view == "moved"){
-                        // 陦ｨ遉ｺ繝輔Λ繧ｰ繧団licked縺ｫ謌ｻ縺�
-                        d.view = "clicked";
-                    }
-
-                    // 陦ｨ遉ｺ繝輔Λ繧ｰ縺系o縺ｮ繧ゅ�縺九ｉ遒ｺ隱�
-                    if(d.view == "no"){
-                        // 繝代せ縺ｮ繝弱�繝画焚縺縺醍ｹｰ繧願ｿ斐＠縺ｪ縺後ｉ
-                        for(var n = 0; n < path.length; n++){
-                            // 繝代せ蜀�↓蜷ｫ縺ｾ繧後ｋ繝弱�繝峨□縺｣縺溘ｉ
-                            if(path[n] == d.nodeid){
-                                // 霈ｪ驛ｭ邱壹ｒ襍､縺ｫ
-                                strokecolor = "#ffaaaa";
-                                // 陦ｨ遉ｺ繝輔Λ繧ｰ繧地ow�井ｻ雁屓蜍輔＞縺溘ヮ繝ｼ繝会ｼ峨↓
-                                d.view = "now";
-                            }
-                        }
-                    // 蝗ｺ螳壽ｸ医∩繝弱�繝峨□縺｣縺溘ｉ
-                    }else if(d.view == "clicked"){
-                        // 縺ｾ縺壹�霈ｪ驛ｭ邱壹ｒ襍､縺ｫ
-                        strokecolor = "#ffaaaa";
-                        // 繝代せ蜀�↓蜷ｫ縺ｾ繧後ｋ繝弱�繝峨°繝√ぉ繝�け
-                        for(var n = 0; n < path.length; n++){
-                            if(path[n] == d.nodeid){
-                                // 蜷ｫ縺ｾ繧後※縺�◆縺ｪ繧我ｻ雁屓蜍輔°縺吶◆繧√ヵ繝ｩ繧ｰ繧知oved縺ｫ
-                                d.view = "moved";
-                            }
-                        }
-                    }
-
-                    // 縺薙％縺ｾ縺ｧ縺ｧ蠕励ｉ繧後◆霈ｪ驛ｭ邱壹�濶ｲ繧定ｿ斐☆
-                    return strokecolor;
-                })
-                // 鬮倥＆縺ｮ蛟､
-                .attr("cy", function(d){
-                    // 繝弱�繝峨′莉雁屓繧ｪ繝ｳ繝槭え繧ｹ縺輔ｌ縺溘�縺ｾ縺溘�蝗ｺ螳壽ｸ医∩縺縺檎ｧｻ蜍輔ヵ繝ｩ繧ｰ繧偵▽縺代ｉ繧後※縺�ｌ縺ｰ
-                    if(d.view == "now" || d.view == "moved"){
-                        // 迴ｾ蝨ｨ縺ｮ鬮倥＆繧貞叙蠕�
-                        var curty = d.y;
-                        // d.y縺ｫ蟄舌ヮ繝ｼ繝峨�鬮倥＆繧偵そ繝�ヨ
-                        d.y = movey;
-                        // 迴ｾ蝨ｨ縺ｮ鬮倥＆繧定ｿ斐☆�医％縺ｮ譎らせ縺ｧ縺ｯ迴ｾ蝨ｨ菴咲ｽｮ縺ｫ謠冗判縺輔ｌ縲〉edraw髢｢謨ｰ縺ｧd.y縺ｫ繧｢繝九Γ繝ｼ繧ｷ繝ｧ繝ｳ縺輔ｌ繧具ｼ�
-                        return curty;
-                    // 遘ｻ蜍募ｯｾ雎｡縺ｧ縺ｪ縺�↑繧�
-                    }else{
-                        // 迴ｾ蝨ｨ菴咲ｽｮ繧偵◎縺ｮ縺ｾ縺ｾ霑斐☆
-                        return d.y;
-                    }
-                });
-
-            // 蜷�Μ繝ｳ繧ｯ繝�く繧ｹ繝医↓蟇ｾ縺�
-            tlink
-                // 繝�く繧ｹ繝郁｡ｨ遉ｺ蛻､螳�
-                .text(function(d) {
-                    // 繝�ヵ繧ｩ繝ｫ繝医〒遨ｺ繧偵そ繝�ヨ
-                    var linktext = "";
-                    // 陦ｨ遉ｺ繝輔Λ繧ｰ縺系ow�亥燕蝗櫁｡ｨ遉ｺ縺輔ｌ縺ｦ縺�◆繝ｪ繝ｳ繧ｯ�峨↑繧�
-                    if(d.view == "now"){
-                        // 陦ｨ遉ｺ繝輔Λ繧ｰ繧定ｧ｣髯､
-                        d.view = "no";
-                    }
-
-                    // 陦ｨ遉ｺ繝輔Λ繧ｰ縺系o縺ｪ繧�
-                    if(d.view == "no"){
-                        // 繝代せ縺ｮ繝弱�繝画焚蛻�ｹｰ繧願ｿ斐＠
-                        for(var t = 0; t < path.length; t++){
-                            // 閾ｪ霄ｫ縺後◎縺ｮ繝弱�繝峨∈謗･邯壹＠縺ｦ縺�ｋ繝ｪ繝ｳ繧ｯ�医°縺､縺昴�繝弱�繝峨′謚倥ｊ縺溘◆縺ｾ繧後※縺�↑縺代ｌ縺ｰ��
-                            if(path[t] == d.target && node.data()[d.target].view != "hide"){
-                                // 繝ｪ繝ｳ繧ｯ繝�く繧ｹ繝医↓繝励Ο繝代ユ繧｣縺ｮ蛟､繧偵そ繝�ヨ
-                                linktext = d.property
-                                // 陦ｨ遉ｺ繝輔Λ繧ｰ縺ｫnow繧偵そ繝�ヨ
-                                d.view = "now";
-                            }
-                        }
-                    // 陦ｨ遉ｺ繝輔Λ繧ｰ縺掲ix�医け繝ｪ繝�け縺輔ｌ縺溘ヱ繧ｹ縺ｮ繝ｪ繝ｳ繧ｯ�峨↑繧峨��医°縺､郢九′繧句�縺ｮ繝弱�繝峨′謚倥ｊ縺溘◆縺ｾ繧後※縺�↑縺代ｌ縺ｰ��
-                    }else if(d.view == "fix" && node.data()[d.target].view != "hide"){
-                        // 繝ｪ繝ｳ繧ｯ繝�く繧ｹ繝医↓繝励Ο繝代ユ繧｣縺ｮ蛟､繧偵そ繝�ヨ
-                        linktext = d.property
-                    }
-                    // 縺薙％縺ｾ縺ｧ縺ｧ縺ｧ縺阪◆繝ｪ繝ｳ繧ｯ繝�く繧ｹ繝医ｒ霑斐☆
-                    return linktext;
-                });
+	// make_data繝｡繧ｽ繝�ラ縺ｮ邨先棡繧貞叙蠕�
+	var json = make_data(0);
+
+	// 繝代せ謨ｰ縺�縺ｧ縺ｪ縺代ｌ縺ｰ
+	if(json['nodes'].length != 0){
+
+		// 蜃ｺ譚･荳翫′縺｣縺溽ｵ先棡繧呈ｸ｡縺励※繝槭ャ繝嶺ｸ翫�蠎ｧ讓吶ｒ繧ｻ繝�ヨ
+		set_map_location(0, json['nodes'], json['links']);
+
+		// SVG縺ｮ蟷�→鬮倥＆逕ｨ縺ｫ謠冗判鬆伜沺縺ｮ繧ｵ繧､繧ｺ繧貞叙蠕�
+		var width = $('.SBGraph').width();
+		var height = $('.SBGraph').height();
+		// SVG蜀��繧ｰ繝ｩ繝暮Κ蛻�ｫ倥＆�医ヱ繧ｹ謨ｰ縺ｫ蠢懊§繧具ｼ峨ｒ繧ｻ繝�ヨ
+		var graphheight = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2);
+
+		// 繧ｹ繧ｳ繧｢陦ｨ遉ｺ縺ｮ繝槭�繧ｸ繝ｳ
+		var scoreleftmargin = NODEHEIGHT * 1.5;
+
+		// SVG縺ｮ蜑企勁
+		d3.select(".SBGraph svg").remove();
+		// 逕ｻ髱｢繧ｵ繧､繧ｺ縺ｫ蜷医ｏ縺婀VG縺ｮ霑ｽ蜉
+		var svg = d3.select(".SBGraph").append("svg")
+			.attr("width", width)
+			.attr("height", height)
+			// 繝薙Η繝ｼ繝懊ャ繧ｯ繧ｹ縺ｮ繧ｻ繝�ヨ
+			.attr("viewBox", "0 0 " + width + " " + height)
+			// 繧ｹ繧ｯ繝ｭ繝ｼ繝ｫ縺輔ｌ縺溘ｉ
+			.on("mousewheel", function(){
+				// 迴ｾ蝨ｨ縺ｮ繝薙Η繝ｼ繝懊ャ繧ｯ繧ｹ縺ｮ迥ｶ諷九ｒ蜿門ｾ�
+				var vb = svg.attr("viewBox");
+				// 繧ｹ繝壹�繧ｹ縺ｧ蛹ｺ蛻�ｊ蜷�､縺ｫ蛻�ｧ｣
+				var spvb = vb.split(" ");
+
+				// 繝薙Η繝ｼ繝懊ャ繧ｯ繧ｹ縺ｮy縺ｮ蛟､縺九ｉ莉雁屓縺ｮ繝帙う繝ｼ繝ｫ繧､繝吶Φ繝医�蟾ｮ蛻�ｒ蠑輔￥
+				var vby = (parseInt(spvb[1]) - event.wheelDelta);
+
+				// 0繧貞牡縺｣縺ｦ縺�◆繧�縺ｫ
+				if(vby < 0){
+					vby = 0;
+				// 繧ｹ繧ｯ繝ｭ繝ｼ繝ｫ荳企剞�医げ繝ｩ繝輔し繧､繧ｺ蠑輔￥陦ｨ遉ｺ鬆伜沺繧ｵ繧､繧ｺ�峨ｒ雜�∴縺ｦ縺�◆繧芽｣懈ｭ｣
+				}else if(vby > (graphheight - height)){
+					vby = (graphheight - height);
+					// 陬懈ｭ｣縺励◆邨先棡0繧貞牡縺｣縺ｦ縺�◆繧�縺ｫ
+					if(vby < 0){
+						vby = 0;
+					}
+				}
+
+				// 縺薙％縺ｾ縺ｧ縺ｧ縺ｧ縺阪◆y繧偵そ繝�ヨ縺励ン繝･繝ｼ繝懊ャ繧ｯ繧ｹ繧呈峩譁ｰ
+				svg.attr("viewBox", "0 " + vby + " " + width + " " + height);
+		    });
+
+		// 閭梧勹縺ｮ霑ｽ蜉�磯ｫ倥＆莉･螟悶�謠冗判鬆伜沺縺昴�縺ｾ縺ｾ��
+		var bg = svg
+			.append("rect")
+			.attr("x", 0)
+			.attr("y", 0)
+			.attr("width", width)
+			.attr("height", function(){
+				// 繧ｰ繝ｩ繝暮Κ蛻��鬮倥＆縺梧緒逕ｻ鬆伜沺縺ｮ鬮倥＆繧貞牡縺｣縺ｦ縺�◆繧会ｼ医ヱ繧ｹ縺悟ｰ代↑縺代ｌ縺ｰ�画緒逕ｻ鬆伜沺縺ｮ鬮倥＆繧定ｿ斐☆
+					if(graphheight < height){
+						return height;
+					}else{
+						return graphheight;
+					}
+				})
+			// 閭梧勹繧定埋縺�げ繝ｬ繝ｼ縺ｫ
+			.attr("fill", "#fafafa");
+
+		// links驟榊�繧呈ｸ｡縺励Μ繝ｳ繧ｯ縺ｮ菴懈�
+		var link = svg.selectAll(".link")
+			.data(json.links)
+			.enter().append("line")
+			.attr("class", "link")
+			.style("stroke", "#999")
+			.style("stroke-opacity", 0.6)
+			.style("stroke-width", 2);
+
+		// nodes驟榊�繧呈ｸ｡縺励ヮ繝ｼ繝峨�菴懈�
+		var node = svg.selectAll(".node")
+			.data(json.nodes)
+			.enter().append("circle")
+			.attr("class", "node")
+			.attr("r", (NODEHEIGHT / 2))
+			.attr("cx", function(d) { return d.x;} )
+			.attr("cy",  function(d) { return d.y; })
+			.style("fill", function(d) { return d.nodecolor; })
+			.style("stroke", '#fafafa')
+			.style("stroke-width", '1.5px')
+			.style("cursor", 'pointer');
+
+		// nodes驟榊�繧呈ｸ｡縺励ヮ繝ｼ繝峨ユ繧ｭ繧ｹ繝医�菴懈�
+		var tnode = svg.selectAll("text.node")
+			.data(json.nodes)
+			.enter().append("svg:text")
+			.attr("class", "tnode")
+			.attr("x", function(d) { return d.x; })
+			.attr("y", function(d) { return d.y; })
+			.text(function(d) { return d.name; })
+			.style("fill", '#000000')
+			.style("text-anchor", 'middle')
+			.style("pointer-events", "none");
+
+		// 繝ｪ繝ｳ繧ｯ繝�く繧ｹ繝医�菴懈�
+		var tlink = svg.selectAll("text.link")
+			.data(json.links)
+			.enter().append("svg:text")
+			.attr("class", "tlink")
+			.attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; })
+			.attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; })
+			.style("fill", '#000000')
+			.style("text-anchor", 'middle');
+
+		// 繧ｹ繧ｳ繧｢繝�く繧ｹ繝医�菴懈�
+		var tscore = svg.selectAll("text.score")
+			.data(json.nodes)
+			.enter().append("svg:text")
+			.attr("class", "tscore")
+			.attr("x", function(d) { return (d.x + scoreleftmargin); })
+			.attr("y", function(d) { return d.y; })
+			.text(function(d) { return d.score; })
+			.style("fill", '#ff0000')
+			.style("text-anchor", 'middle')
+			.style("pointer-events", "none");
+
+		// 繝弱�繝峨∈縺ｮ繧ｪ繝ｳ繝槭え繧ｹ縺ｧ繝代せ謗｢邏｢縲√ヱ繧ｹ荳ｭ縺ｮ繝ｪ繝ｳ繧ｯ譁�ｭ励ｒ陦ｨ遉ｺ
+		node.on("mouseover", function(d){
+
+			// 陦ｨ遉ｺ縺吶ｋ繝代せ菫晏ｭ倡畑驟榊�
+			var path = [];
+			// 繝代せ陦ｨ遉ｺ諠�ｱ菫晏ｭ倡畑驟榊�
+			var pathname = [];
+
+			// 縺ｾ縺壹が繝ｳ繝槭え繧ｹ縺輔ｌ縺溘ヮ繝ｼ繝峨�id縺ｨ蜷榊燕繧偵◎繧後◇繧瑚ｿｽ蜉
+			path.push(d.nodeid);
+			pathname.push(d.name);
+
+			// 繝代せ謗｢邏｢
+			do{
+				// 繝ｪ繝ｳ繧ｯ縺ｮ謨ｰ縺縺醍ｹｰ繧願ｿ斐＠
+				for(var i = 0; i < link.data().length; i++){
+					// 迴ｾ蝨ｨ縺ｮ譛蠕悟ｰｾ縺ｫ郢九′繧九Μ繝ｳ繧ｯ縺後≠繧後�
+					if(path[(path.length-1)] == link.data()[i].target){
+						// 縺昴�繝ｪ繝ｳ繧ｯ縺ｮ繧ｽ繝ｼ繧ｹ蛛ｴ繝弱�繝峨�id繧定ｿｽ蜉
+						path.push(link.data()[i].source);
+						// 縺昴�繝ｪ繝ｳ繧ｯ縺ｮ蜷榊燕縺ｨ繧ｽ繝ｼ繧ｹ蛛ｴ繝弱�繝峨�蜷榊燕繧定ｿｽ蜉
+						pathname.push(link.data()[i].property);
+						pathname.push(node.data()[link.data()[i].source].name);
+					}
+				}
+			// 繝ｫ繝ｼ繝医ヮ繝ｼ繝峨↓霎ｿ繧顔捩縺上∪縺ｧ郢ｰ繧願ｿ斐☆
+			}while(path[(path.length-1)] != 0);
+
+			// 繝ｫ繝ｼ繝医ヮ繝ｼ繝峨∪縺溘�騾比ｸｭ繝弱�繝峨↑繧�
+			if(d.nodeid == 0 || d.path == "notend"){
+				// 繝代せ陦ｨ遉ｺ鬆伜沺繧偵ョ繝輔か繝ｫ繝医↓
+				$('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and <span style=\"color: hsl(200, 50%, 75%);\">push button</span> to generate a SPARQL</h1>');
+			// 譛ｫ遶ｯ繝弱�繝峨↑繧�
+			}else{
+
+				// 繝代せ陦ｨ遉ｺ鬆伜沺逕ｨ譁�ｭ怜��医ず繧ｧ繝阪Ξ繝ｼ繝医�繧ｿ繝ｳ繧偵∪縺夊ｿｽ蜉��
+				var resultText = '<div class="SBGenButton" onclick="generateSPARQL()">Generate<br />SPARQL</div>';
+				// 繝代せ縺ｮ蜷榊燕驟榊�蛻�ｾ後ｍ縺九ｉ郢ｰ繧願ｿ斐＠縺ｪ縺後ｉ
+				for (var i = pathname.length;i > 0; i--){
+					// 螂�焚逡ｪ逶ｮ�医ヮ繝ｼ繝会ｼ峨↑繧�
+					if(i % 2 == 1){
+						// 繝ｫ繝ｼ繝医°騾比ｸｭ縺区忰遶ｯ縺九↓蠢懊§縺ｦ繧ｯ繝ｩ繧ｹ繧呈欠螳壹＠霑ｽ險�
+						if(i == 1){
+							resultText = resultText + "<div class=\"SBLeafNode\">" + pathname[i - 1] + "</div>";
+						}else if(i == pathname.length){
+							resultText = resultText + "<div class=\"SBRootNode\">" + pathname[i - 1] + "</div>";
+						}else{
+							resultText = resultText + "<div class=\"SBPathNode\">" + pathname[i - 1] + "</div>";
+						}
+					// 蛛ｶ謨ｰ逡ｪ逶ｮ�医Μ繝ｳ繧ｯ�峨�繝ｪ繝ｳ繧ｯ逕ｻ蜒上ｒ蜑榊ｾ後↓縺､縺題ｿｽ險�
+					}else{
+						resultText = resultText + "<img src=\"images/pathline.png\"><div class=\"SBPathProperty\">" + pathname[i - 1] + "</div><img src=\"images/pathline.png\">";
+					}
+				}
+
+				// 繝代せ陦ｨ遉ｺ鬆伜沺縺ｮ蜀�ｮｹ繧呈嶌縺肴鋤縺�
+				$('.SBSelectedPath').html(resultText);
+
+				// 繧ｵ繝ｼ繝悶Ξ繝�ヨ縺ｫ騾√ｊ霑斐☆繝代せ繧ｪ繝悶ず繧ｧ繧ｯ繝医ｒ菫晏ｭ�
+				pathobj = d.path;
+
+				// 繝代せ陦ｨ遉ｺ鬆伜沺縺ｮ陦ｨ遉ｺ險ｭ螳壹ｒvisivle縺ｫ
+				$('.SBPath').css('overflow-y', 'visible');
+
+				// 繝代せ蜀�ｮｹ縺ｮ鬮倥＆縺後ヱ繧ｹ陦ｨ遉ｺ鬆伜沺繧定ｶ�∴縺ｦ縺�◆繧�
+				if($('.SBPath').height() < $('.SBSelectedPath').innerHeight()){
+					// 繝代せ陦ｨ遉ｺ鬆伜沺縺ｮ陦ｨ遉ｺ險ｭ螳壹ｒ繧ｹ繧ｯ繝ｭ繝ｼ繝ｫ縺ｫ
+					$('.SBPath').css('overflow-y', 'scroll');
+				}
+			}
+
+			// 繧ｪ繝ｳ繝槭え繧ｹ縺輔ｌ縺溘ヮ繝ｼ繝峨�鬮倥＆縺ｫ隕ｪ繧貞粋繧上○繧九◆繧√↓蜷医ｏ縺帙ｋ鬮倥＆繧剃ｿ晏ｭ�
+			var movey = d.y;
+
+			// 蜷�ヮ繝ｼ繝峨↓蟇ｾ縺�
+			node
+				// 霈ｪ驛ｭ邱壹�濶ｲ繧定ｨｭ螳�
+				.style("stroke", function(d){
+					// 縺ｾ縺壹�閭梧勹濶ｲ�医ョ繝輔か繝ｫ繝茨ｼ峨ｒ謖�ｮ�
+					var strokecolor = "#fafafa";
+
+					// 繝代せ縺ｮ繝弱�繝画焚縺縺醍ｹｰ繧願ｿ斐＠縺ｪ縺後ｉ
+					for(var n = 0; n < path.length; n++){
+						// 繝代せ蜀�↓蜷ｫ縺ｾ繧後ｋ繝弱�繝峨□縺｣縺溘ｉ
+						if(path[n] == d.nodeid){
+							// 霈ｪ驛ｭ邱壹ｒ襍､縺ｫ
+							strokecolor = "#ffaaaa";
+						}
+					}
+
+					// 縺薙％縺ｾ縺ｧ縺ｧ蠕励ｉ繧後◆霈ｪ驛ｭ邱壹�濶ｲ繧定ｿ斐☆
+					return strokecolor;
+				})
+				// 鬮倥＆縺ｮ蛟､
+				.attr("cy", function(d){
+
+					// 迴ｾ蝨ｨ縺ｮ鬮倥＆繧貞叙蠕�
+					var currenty = d.y
+
+					// 繝代せ縺ｮ繝弱�繝画焚縺縺醍ｹｰ繧願ｿ斐＠縺ｪ縺後ｉ
+					for(var n = 0; n < path.length; n++){
+						// 繝代せ蜀�↓蜷ｫ縺ｾ繧後ｋ繝弱�繝峨□縺｣縺溘ｉ
+						if(path[n] == d.nodeid){
+							// 蜀�Κ縺ｧ謖√▽鬮倥＆繧偵が繝ｳ繝槭え繧ｹ縺輔ｌ縺溘ヮ繝ｼ繝峨→蜷後§縺ｫ�亥�謠冗判譎ゅ↓蜿肴丐��
+							d.y = movey;
+						}
+					}
+
+					// 莉翫�迴ｾ譎らせ縺ｮ鬮倥＆繧定ｿ斐☆
+					return currenty;
+				});
+
+			// 蜷�Μ繝ｳ繧ｯ繝�く繧ｹ繝医↓蟇ｾ縺�
+			tlink
+				// 繝�く繧ｹ繝郁｡ｨ遉ｺ蛻､螳�
+				.text(function(d) {
+					// 繝�ヵ繧ｩ繝ｫ繝医〒遨ｺ繧偵そ繝�ヨ
+					var linktext = "";
+
+					// 繝代せ縺ｮ繝弱�繝画焚縺縺醍ｹｰ繧願ｿ斐＠縺ｪ縺後ｉ
+					for(var t = 0; t < path.length; t++){
+						// 閾ｪ霄ｫ縺後◎縺ｮ繝弱�繝峨∈謗･邯壹＠縺ｦ縺�ｋ繝ｪ繝ｳ繧ｯ縺ｪ繧峨�
+						if(path[t] == d.target){
+							// 繝ｪ繝ｳ繧ｯ繝�く繧ｹ繝医↓繝励Ο繝代ユ繧｣縺ｮ蛟､繧偵そ繝�ヨ
+							linktext = d.property
+						}
+					}
+
+					// 縺薙％縺ｾ縺ｧ縺ｧ縺ｧ縺阪◆繝ｪ繝ｳ繧ｯ繝�く繧ｹ繝医ｒ霑斐☆
+					return linktext;
+				});
 
             // 蜷�Μ繝ｳ繧ｯ縺ｫ蟇ｾ縺�
@@ -679,13 +649,17 @@
                 // 邱壹�濶ｲ蛻､螳�
                 .style("stroke", function(d){
-                    // 陦ｨ遉ｺ繝輔Λ繧ｰ縺系o縺ｪ繧峨�
-                    if(d.view == "no"){
-                        // 濶ｲ繧偵ョ繝輔か繝ｫ繝医↓
-                        return "#999";
-                    // 縺昴ｌ莉･螟厄ｼ亥崋螳壹ｄ繧ｪ繝ｳ繝槭え繧ｹ縺輔ｌ縺溘ヱ繧ｹ縺ｫ蜷ｫ縺ｾ繧後ｋ�峨↑繧�
-                    }else{
-                        // 濶ｲ繧定ｵ､縺ｫ
-                        return "#ffaaaa";
-                    }
+
+                	var strokecolor = "#999";
+
+					// 繝代せ縺ｮ繝弱�繝画焚縺縺醍ｹｰ繧願ｿ斐＠縺ｪ縺後ｉ
+					for(var t = 0; t < path.length; t++){
+						// 閾ｪ霄ｫ縺後◎縺ｮ繝弱�繝峨∈謗･邯壹＠縺ｦ縺�ｋ繝ｪ繝ｳ繧ｯ縺ｪ繧峨�
+						if(path[t] == d.target){
+							// 繝ｪ繝ｳ繧ｯ縺ｮ濶ｲ縺ｫ襍､繧偵そ繝�ヨ
+							strokecolor = "#ffaaaa"
+						}
+					}
+
+					return strokecolor;
                 });
 
@@ -828,16 +802,4 @@
         });
 
-        // 閭梧勹荳翫〒繝槭え繧ｹ縺悟虚縺上＃縺ｨ縺ｫ
-        bg.on("mousemove", function(){
-            // MOUSEMOVED繧定ｿｽ蜉�医ヮ繝ｼ繝峨↓繧ｪ繝ｳ繝槭え繧ｹ縺輔ｌ繧句ｺｦ縺ｫ繧ｫ繧ｦ繝ｳ繝医Μ繧ｻ繝�ヨ��
-        	MOUSEMOVED++;
-            // 30繧定ｶ�∴縺溘ｉ
-            if(MOUSEMOVED > 30){
-                // 繝��繝ｫ繝√ャ繝励ｒ髱櫁｡ｨ遉ｺ縺ｫ縺励※繧ｫ繧ｦ繝ｳ繝医Μ繧ｻ繝�ヨ
-                $('.SBTooltip').hide();
-                MOUSEMOVED = 0;
-            }
-        });
-
         // 蛻晏屓縺ｮ縺ｿduration繧�縺ｨ謖�ｮ壹＠蜀肴緒逕ｻ�医い繝九Γ繝ｼ繧ｷ繝ｧ繝ｳ縺ｪ縺暦ｼ�
         redraw(0);
