Blame tools/dump-svg-script.js

Packit Service 9ccfef
//The scripts for the tooltip and moveobj are based on work from
Packit Service 9ccfef
//SVG - Learning By Coding - http://www.datenverdrahten.de/svglbc/
Packit Service 9ccfef
//Author: Dr. Thomas Meinike 11/03 - thomas@handmadecode.de
Packit Service 9ccfef
var svgdoc,svgroot,paths,revert;
Packit Service 9ccfef
var collapsed = new Array(2);
Packit Service 9ccfef
var name = new Array(%i);
Packit Service 9ccfef
var clickStatus = new Array(%i);
Packit Service 9ccfef
var redCount = new Array(%i);
Packit Service 9ccfef
var salmonCount = new Array(%i);
Packit Service 9ccfef
var moveObj,rect,x,y,attr1,attr2,wert1,wert2,zoom=1,active=false;
Packit Service 9ccfef
Packit Service 9ccfef
function MoveObj(evt)
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (active) {
Packit Service 9ccfef
	var roundx, roundy;
Packit Service 9ccfef
	var curtrans=svgroot.currentTranslate;
Packit Service 9ccfef
	var ctx=curtrans.x;
Packit Service 9ccfef
	var cty=curtrans.y;
Packit Service 9ccfef
Packit Service 9ccfef
	x=evt.clientX()
Packit Service 9ccfef
	y=evt.clientY()
Packit Service 9ccfef
	wert1=(x-ctx)*zoom*%.2f+%.2f+attr1-5;
Packit Service 9ccfef
	wert2=(y-cty)*zoom*%.2f+%.2f+attr2-5;
Packit Service 9ccfef
	roundx=Math.round(wert1*100)/100;
Packit Service 9ccfef
	roundy=Math.round(wert2*100)/100;
Packit Service 9ccfef
Packit Service 9ccfef
	moveObj.setAttribute("transform","translate("+roundx+","+roundy+")");
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function ClickObj(evt)
Packit Service 9ccfef
{
Packit Service 9ccfef
    rect=evt.target.parentNode.getElementsByTagName("rect").item(0);
Packit Service 9ccfef
    moveObj=evt.target.parentNode;
Packit Service 9ccfef
    attr1=rect.getAttribute("width")/2;
Packit Service 9ccfef
    attr2=rect.getAttribute("height")/2;
Packit Service 9ccfef
    active=true;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function OutOfObj(evt)
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (active) {
Packit Service 9ccfef
	active=false;
Packit Service 9ccfef
	findAdjacentEdges();
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function findAdjacentEdges()
Packit Service 9ccfef
{
Packit Service 9ccfef
    var rectl, rectlid, i, nodenames;
Packit Service 9ccfef
    rectl = rect;
Packit Service 9ccfef
    rectlid = rectl.getAttribute("id");
Packit Service 9ccfef
    for (i=0; i
Packit Service 9ccfef
	nodenames = paths.item(i).getAttribute("id").split("-");
Packit Service 9ccfef
	if (nodenames[0] == rectlid || nodenames[1] == rectlid) {
Packit Service 9ccfef
	    repaintEdge(paths.item(i), nodenames, i);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function repaintEdge(edge, nodenames, j)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var startnode, endnode, attr, i, k, l, m, alpha, beta;
Packit Service 9ccfef
    var nodesx, nodesy, nodeex, nodeey, nodesw, nodesh, nodeew, nodeeh;
Packit Service 9ccfef
    var edgesx, edgesy, edgeex, edgeey, sx, sy, ex, ey;
Packit Service 9ccfef
Packit Service 9ccfef
    //extract node coordinates and dimensions
Packit Service 9ccfef
    startnode = svgdoc.getElementById(nodenames[0]);
Packit Service 9ccfef
    nodesw=startnode.getAttribute("width");
Packit Service 9ccfef
    nodesh=startnode.getAttribute("height");
Packit Service 9ccfef
    attr = startnode.parentNode.attributes;
Packit Service 9ccfef
    for (i=0;i
Packit Service 9ccfef
        if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
	    k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
	    l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
	    m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
	    nodesx = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
Packit Service 9ccfef
	    nodesy = parseFloat(attr.item(i).nodeValue.substring(l+1,m));
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    endnode = svgdoc.getElementById(nodenames[1]);
Packit Service 9ccfef
    nodeew=endnode.getAttribute("width");
Packit Service 9ccfef
    nodeeh=endnode.getAttribute("height");
Packit Service 9ccfef
    attr = endnode.parentNode.attributes;
Packit Service 9ccfef
    for (i=0;i
Packit Service 9ccfef
        if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
	    k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
	    l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
	    m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
	    nodeex = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
Packit Service 9ccfef
	    nodeey = parseFloat(attr.item(i).nodeValue.substring(l+1,m));
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    alpha = Math.atan((nodesy-nodeey)/(nodesx-nodeex));
Packit Service 9ccfef
    if (alpha < 0)
Packit Service 9ccfef
	alpha += Math.PI;
Packit Service 9ccfef
Packit Service 9ccfef
    //calculate intersection of edge and startNode
Packit Service 9ccfef
    beta = Math.atan(nodesh/nodesw);
Packit Service 9ccfef
    if (alpha < beta
Packit Service 9ccfef
	|| (alpha > Math.PI-beta && alpha < Math.PI+beta)
Packit Service 9ccfef
	|| alpha > 2*Math.PI-beta) {
Packit Service 9ccfef
	//intersection at left or right border
Packit Service 9ccfef
	if (nodesx < nodeex) {
Packit Service 9ccfef
	    edgesx = nodesx - 0 + nodesw/2;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgesx = nodesx - nodesw/2;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (nodesy < nodeey) {
Packit Service 9ccfef
	    edgesy = nodesy - 0 + Math.abs(nodesw*Math.tan(alpha)/2);
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgesy = nodesy - Math.abs(nodesw*Math.tan(alpha)/2);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	//intersection at top or bottom border
Packit Service 9ccfef
	if (nodesy < nodeey) {
Packit Service 9ccfef
	    edgesy = nodesy - 0 + nodesh/2;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgesy = nodesy - nodesh/2;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (nodesx < nodeex) {
Packit Service 9ccfef
	    edgesx = nodesx - 0 + Math.abs(nodesh/(2*Math.tan(alpha)));
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgesx = nodesx - Math.abs(nodesh/(2*Math.tan(alpha)));
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //calculate intersection of edge and endNode
Packit Service 9ccfef
    beta = Math.atan(nodeeh/nodeew);
Packit Service 9ccfef
    if (alpha < beta
Packit Service 9ccfef
	|| (alpha > Math.PI-beta && alpha < Math.PI+beta)
Packit Service 9ccfef
	|| alpha > 2*Math.PI-beta) {
Packit Service 9ccfef
	//intersection at left or right border
Packit Service 9ccfef
	if (nodesx > nodeex) {
Packit Service 9ccfef
	    edgeex = nodeex - 0 + nodeew/2;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgeex = nodeex - nodeew/2;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (nodesy > nodeey) {
Packit Service 9ccfef
	    edgeey = nodeey - 0 + Math.abs(nodeew*Math.tan(alpha)/2);
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgeey = nodeey - Math.abs(nodeew*Math.tan(alpha)/2);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	//intersection at top or bottom border
Packit Service 9ccfef
	if (nodesy > nodeey) {
Packit Service 9ccfef
	    edgeey = nodeey - 0 + nodeeh/2;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgeey = nodeey - nodeeh/2;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (nodesx > nodeex) {
Packit Service 9ccfef
	    edgeex = nodeex - 0 + Math.abs(nodeeh/(2*Math.tan(alpha)));
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    edgeex = nodeex - Math.abs(nodeeh/(2*Math.tan(alpha)));
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //set new edge coordinates
Packit Service 9ccfef
    sx=Math.round(edgesx*100)/100;
Packit Service 9ccfef
    ex=Math.round(edgeex*100)/100;
Packit Service 9ccfef
    sy=Math.round(edgesy*100)/100;
Packit Service 9ccfef
    ey=Math.round(edgeey*100)/100;
Packit Service 9ccfef
Packit Service 9ccfef
    if (sx < ex) {
Packit Service 9ccfef
	if (revert[j] == 1) {
Packit Service 9ccfef
	    revert[j] = 0;
Packit Service 9ccfef
	    flipEdgeMarks(edge);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	edge.setAttribute("d","M "+sx+" "+sy+" "+ex+" "+ey);
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	if (revert[j] == 0) {
Packit Service 9ccfef
	    revert[j] = 1;
Packit Service 9ccfef
	    flipEdgeMarks(edge);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	edge.setAttribute("d","M "+ex+" "+ey+" "+sx+" "+sy);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function flipEdgeMarks(edge)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var attr, i, j, done, textpaths, pathnamei, offset;
Packit Service 9ccfef
Packit Service 9ccfef
    //revert start- and end-markers
Packit Service 9ccfef
    attr = edge.attributes;
Packit Service 9ccfef
    done = 0;
Packit Service 9ccfef
    for (i=0;i
Packit Service 9ccfef
        if (attr.item(i).nodeName == "marker-start") {
Packit Service 9ccfef
	    for (j=i;j
Packit Service 9ccfef
		if (attr.item(j).nodeName == "marker-end") {
Packit Service 9ccfef
		    done = 1;
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    if (done == 0) {
Packit Service 9ccfef
		//start->end
Packit Service 9ccfef
		edge.removeAttribute("marker-start");
Packit Service 9ccfef
		edge.setAttribute("marker-end","url(#arrowend)");
Packit Service 9ccfef
		break;
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
        if (attr.item(i).nodeName == "marker-end") {
Packit Service 9ccfef
	    for (j=i;j
Packit Service 9ccfef
		if (attr.item(j).nodeName == "marker-start") {
Packit Service 9ccfef
		    done = 1;
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    if (done == 0) {
Packit Service 9ccfef
		//end->start
Packit Service 9ccfef
		edge.removeAttribute("marker-end");
Packit Service 9ccfef
		edge.setAttribute("marker-start","url(#arrowstart)");
Packit Service 9ccfef
		break;
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //revert cardinalities
Packit Service 9ccfef
    textpaths = svgdoc.getElementsByTagName("textPath");
Packit Service 9ccfef
    for (i=0;i
Packit Service 9ccfef
	pathname = textpaths.item(i).getAttribute("xlink:href").replace(/#/,"");
Packit Service 9ccfef
	if (pathname == edge.getAttribute("id")) {
Packit Service 9ccfef
	    offset = textpaths.item(i).getAttribute("startOffset").substr(0,2);
Packit Service 9ccfef
	    textpaths.item(i).setAttribute("startOffset",100 - offset + "%")
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function getSVGDoc(load_evt)
Packit Service 9ccfef
{
Packit Service 9ccfef
    svgdoc=load_evt.target.ownerDocument;
Packit Service 9ccfef
    svgroot=svgdoc.documentElement;
Packit Service 9ccfef
    texte=svgdoc.getElementById("tooltip").getElementsByTagName("text");
Packit Service 9ccfef
    for (i=1; i<%i; i++) {
Packit Service 9ccfef
	textNode=texte.item(1).cloneNode("true");
Packit Service 9ccfef
	svgdoc.getElementById("tooltip").appendChild(textNode);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    texte=svgdoc.getElementById("tooltip").getElementsByTagName("text");
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function ShowTooltipMZ(mousemove_event,txt)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var ttrelem,tttelem,ttline,posx,posy,curtrans,ctx,cty,txt;
Packit Service 9ccfef
    var maxbreite,tmp,i;
Packit Service 9ccfef
    ttrelem=svgdoc.getElementById("ttr");
Packit Service 9ccfef
    tttelem=svgdoc.getElementById("ttt");
Packit Service 9ccfef
    ttline=svgdoc.getElementById("ttl");
Packit Service 9ccfef
    posx=mousemove_event.clientX;
Packit Service 9ccfef
    posy=mousemove_event.clientY;
Packit Service 9ccfef
    for (i=1;i<=%i;i++)
Packit Service 9ccfef
	texte.item(i).firstChild.data="";
Packit Service 9ccfef
    tttelem.childNodes.item(0).data="";
Packit Service 9ccfef
    tmp=txt.split("\n");
Packit Service 9ccfef
    maxbreite=0;
Packit Service 9ccfef
    for (i=0;i
Packit Service 9ccfef
	if (tmp[i]=="")
Packit Service 9ccfef
	    continue;
Packit Service 9ccfef
	tttelem.childNodes.item(0).data=tmp[i];
Packit Service 9ccfef
	if (maxbreite
Packit Service 9ccfef
	    maxbreite=tttelem.getComputedTextLength();
Packit Service 9ccfef
    }
Packit Service 9ccfef
    curtrans=svgroot.currentTranslate;
Packit Service 9ccfef
    ctx=curtrans.x;
Packit Service 9ccfef
    cty=curtrans.y;
Packit Service 9ccfef
    ttrelem.setAttribute("x",posx-ctx+10);
Packit Service 9ccfef
    ttrelem.setAttribute("y",posy-cty-20+10);
Packit Service 9ccfef
    ttrelem.setAttribute("width",maxbreite*0.92+10);
Packit Service 9ccfef
    ttrelem.setAttribute("height",tmp.length*15+3);
Packit Service 9ccfef
    ttrelem.setAttribute("style",
Packit Service 9ccfef
			    "fill: #FFC; stroke: #000; stroke-width: 0.5px");
Packit Service 9ccfef
    for (i=1; i<=tmp.length; i++) {
Packit Service 9ccfef
	if (tmp[i-1]=="-- -- --") {
Packit Service 9ccfef
	    ttline.setAttribute("x1", posx-ctx+10);
Packit Service 9ccfef
	    ttline.setAttribute("y1", parseInt(i-1)*15+posy-cty);
Packit Service 9ccfef
	    ttline.setAttribute("x2", posx-ctx+10+maxbreite*0.92+10);
Packit Service 9ccfef
	    ttline.setAttribute("y2", parseInt(i-1)*15+posy-cty);
Packit Service 9ccfef
	    ttline.setAttribute("style", "stroke: #000; stroke-width: 0.5px");
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    texte.item(i).firstChild.data=tmp[i-1];
Packit Service 9ccfef
	    texte.item(i).setAttribute("x",posx-ctx+15);
Packit Service 9ccfef
	    texte.item(i).setAttribute("y",parseInt(i-1)*15+posy-cty+3);
Packit Service 9ccfef
	    texte.item(i).setAttribute("style","fill: #00E; font-size: 11px");
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    svgdoc.getElementById("tooltip").style.setProperty("visibility","visible");
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function HideTooltip()
Packit Service 9ccfef
{
Packit Service 9ccfef
    svgdoc.getElementById("ttl").style.setProperty("visibility","hidden");
Packit Service 9ccfef
    svgdoc.getElementById("tooltip").style.setProperty("visibility","hidden");
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function ZoomControl()
Packit Service 9ccfef
{
Packit Service 9ccfef
    var curzoom;
Packit Service 9ccfef
    curzoom=svgroot.currentScale;
Packit Service 9ccfef
    svgdoc.getElementById("tooltip").setAttribute("transform",
Packit Service 9ccfef
							"scale("+1/curzoom+")");
Packit Service 9ccfef
    zoom=1/curzoom;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function collapse(evt)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var i, k, l, m, svgdoc, obj, targetID, targetX, targetY, attr;
Packit Service 9ccfef
    obj = evt.getTarget();
Packit Service 9ccfef
    svgdoc = obj.ownerDocument;
Packit Service 9ccfef
    //extract coordinates and id of the clicked text
Packit Service 9ccfef
    attr = obj.parentNode.parentNode.attributes;
Packit Service 9ccfef
    for (i=0;i
Packit Service 9ccfef
        if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
            k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
            l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
            m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
            targetX = attr.item(i).nodeValue.substring(k+1,l);
Packit Service 9ccfef
            targetY = attr.item(i).nodeValue.substring(l+1,m);
Packit Service 9ccfef
        }
Packit Service 9ccfef
        if (attr.item(i).nodeName == "id") {
Packit Service 9ccfef
            targetID = attr.item(i).nodeValue.substr(2);
Packit Service 9ccfef
        }
Packit Service 9ccfef
    }
Packit Service 9ccfef
    //decide if we are collapsing or uncollapsing
Packit Service 9ccfef
    if (collapsed[0][targetID] == 0) {
Packit Service 9ccfef
        hideInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr);
Packit Service 9ccfef
        collapsed[0][targetID] = 1;
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
        showHiddenInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr);
Packit Service 9ccfef
        collapsed[0][targetID] = 0;
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function showHiddenInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var i, k, l, m, nextObj, nextX, nextY, gapY=0, clickedID;
Packit Service 9ccfef
    //change clicked text
Packit Service 9ccfef
    obj.firstChild.data="--";
Packit Service 9ccfef
    targetID++;
Packit Service 9ccfef
    nextObj = svgdoc.getElementById("MI"+targetID);
Packit Service 9ccfef
    if (nextObj == null)
Packit Service 9ccfef
        return;
Packit Service 9ccfef
    //show child texts again
Packit Service 9ccfef
    for (;;) {
Packit Service 9ccfef
        attr = nextObj.attributes;
Packit Service 9ccfef
        for (i=0;i
Packit Service 9ccfef
            if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
                k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
                l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
                m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
                nextX = attr.item(i).nodeValue.substring(k+1,l);
Packit Service 9ccfef
                nextY = attr.item(i).nodeValue.substring(l+1,m);
Packit Service 9ccfef
            }
Packit Service 9ccfef
        }
Packit Service 9ccfef
        if (nextX > targetX) {
Packit Service 9ccfef
            nextObj.style.setProperty("visibility","visible");
Packit Service 9ccfef
            gapY += 15;
Packit Service 9ccfef
            if (collapsed[0][targetID] == 1) {
Packit Service 9ccfef
                targetID = collapsed[1][targetID];
Packit Service 9ccfef
            } else {
Packit Service 9ccfef
                targetID++;
Packit Service 9ccfef
            }
Packit Service 9ccfef
            nextObj = svgdoc.getElementById("MI"+targetID);
Packit Service 9ccfef
            if (nextObj == null)
Packit Service 9ccfef
                break;
Packit Service 9ccfef
        } else {
Packit Service 9ccfef
            break;
Packit Service 9ccfef
        }
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (nextObj == null)
Packit Service 9ccfef
        return;
Packit Service 9ccfef
    //move following texts downwards
Packit Service 9ccfef
    while (nextObj != null) {
Packit Service 9ccfef
        attr = nextObj.attributes;
Packit Service 9ccfef
        for (i=0;i
Packit Service 9ccfef
            if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
                k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
                l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
                m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
                nextX = attr.item(i).nodeValue.substring(k+1,l);
Packit Service 9ccfef
                nextY = attr.item(i).nodeValue.substring(l+1,m);
Packit Service 9ccfef
            }
Packit Service 9ccfef
        }
Packit Service 9ccfef
        nextY = nextY - 1 + gapY + 1;
Packit Service 9ccfef
        nextObj.setAttribute("transform","translate("+nextX+","+nextY+")");
Packit Service 9ccfef
        targetID++;
Packit Service 9ccfef
        nextObj = svgdoc.getElementById("MI"+targetID);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function hideInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var i, k, l, m, nextObj, nextX, nextY, gapY=0;
Packit Service 9ccfef
    clickedID = targetID;
Packit Service 9ccfef
    //change clicked text
Packit Service 9ccfef
    obj.firstChild.data="+";
Packit Service 9ccfef
    targetID++;
Packit Service 9ccfef
    nextObj = svgdoc.getElementById("MI"+targetID);
Packit Service 9ccfef
    if (nextObj == null)
Packit Service 9ccfef
        return;
Packit Service 9ccfef
    //wipe out child texts
Packit Service 9ccfef
    for (;;) {
Packit Service 9ccfef
        attr = nextObj.attributes;
Packit Service 9ccfef
        for (i=0;i
Packit Service 9ccfef
            if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
                k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
                l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
                m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
                nextX = attr.item(i).nodeValue.substring(k+1,l);
Packit Service 9ccfef
                nextY = attr.item(i).nodeValue.substring(l+1,m);
Packit Service 9ccfef
            }
Packit Service 9ccfef
        }
Packit Service 9ccfef
        if (nextX > targetX) {
Packit Service 9ccfef
            nextObj.style.setProperty("visibility","hidden");
Packit Service 9ccfef
            gapY += 15;
Packit Service 9ccfef
            if (collapsed[0][targetID] == 1) {
Packit Service 9ccfef
                targetID = collapsed[1][targetID];
Packit Service 9ccfef
            } else {
Packit Service 9ccfef
                targetID++;
Packit Service 9ccfef
            }
Packit Service 9ccfef
            nextObj = svgdoc.getElementById("MI"+targetID);
Packit Service 9ccfef
            if (nextObj == null)
Packit Service 9ccfef
                break;
Packit Service 9ccfef
        } else {
Packit Service 9ccfef
            break;
Packit Service 9ccfef
        }
Packit Service 9ccfef
    }
Packit Service 9ccfef
    //save next uncollapsed element in array
Packit Service 9ccfef
    collapsed[1][clickedID] = targetID;
Packit Service 9ccfef
    if (nextObj == null)
Packit Service 9ccfef
        return;
Packit Service 9ccfef
    //move following texts upwards
Packit Service 9ccfef
    while (nextObj != null) {
Packit Service 9ccfef
        attr = nextObj.attributes;
Packit Service 9ccfef
        for (i=0;i
Packit Service 9ccfef
            if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
                k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
                l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
                m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
                nextX = attr.item(i).nodeValue.substring(k+1,l);
Packit Service 9ccfef
                nextY = attr.item(i).nodeValue.substring(l+1,m);
Packit Service 9ccfef
            }
Packit Service 9ccfef
        }
Packit Service 9ccfef
        nextY -= gapY;
Packit Service 9ccfef
        nextObj.setAttribute("transform","translate("+nextX+","+nextY+")");
Packit Service 9ccfef
        targetID++;
Packit Service 9ccfef
        nextObj = svgdoc.getElementById("MI"+targetID);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function init(evt)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var nodenames, startnode, endnode, attr, i, j, k, l, m, nodesx, nodeex;
Packit Service 9ccfef
    collapsed[0] = new Array(%i);
Packit Service 9ccfef
    collapsed[1] = new Array(%i);
Packit Service 9ccfef
    for (i=0; i<%i; i++) {
Packit Service 9ccfef
        collapsed[0][i] = 0;
Packit Service 9ccfef
        collapsed[1][i] = 0;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    for (i=0; i<%i; i++) {
Packit Service 9ccfef
	name[i] = "";
Packit Service 9ccfef
	clickStatus[i] = 0;
Packit Service 9ccfef
	redCount[i] = 0;
Packit Service 9ccfef
	salmonCount[i] = 0;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    getSVGDoc(evt);
Packit Service 9ccfef
Packit Service 9ccfef
    //check which edges are printed from right to left
Packit Service 9ccfef
    paths = svgdoc.getElementsByTagName("path");
Packit Service 9ccfef
    revert = new Array(paths.length);
Packit Service 9ccfef
    for (j=0; j
Packit Service 9ccfef
	nodenames = paths.item(j).getAttribute("id").split("-");
Packit Service 9ccfef
	startnode = svgdoc.getElementById(nodenames[0]);
Packit Service 9ccfef
	attr = startnode.parentNode.attributes;
Packit Service 9ccfef
	for (i=0;i
Packit Service 9ccfef
	    if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
		k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
		l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
		m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
		nodesx = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
	endnode = svgdoc.getElementById(nodenames[1]);
Packit Service 9ccfef
	attr = endnode.parentNode.attributes;
Packit Service 9ccfef
	for (i=0;i
Packit Service 9ccfef
	    if (attr.item(i).nodeName == "transform") {
Packit Service 9ccfef
		k = attr.item(i).nodeValue.indexOf("(");
Packit Service 9ccfef
		l = attr.item(i).nodeValue.indexOf(",");
Packit Service 9ccfef
		m = attr.item(i).nodeValue.indexOf(")");
Packit Service 9ccfef
		nodeex = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (nodesx > nodeex) {
Packit Service 9ccfef
	    revert[j] = 1;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    revert[j] = 0;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function setStatus(evt, color1, color2)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var clickObj = evt.getTarget();
Packit Service 9ccfef
    var clickObjName = clickObj.getAttribute('id');
Packit Service 9ccfef
Packit Service 9ccfef
    //find i corresponding to the clicked object
Packit Service 9ccfef
    for (i=0; i<%i; i++) {
Packit Service 9ccfef
	if (name[i] == "") {
Packit Service 9ccfef
	    name[i] = clickObjName;
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (name[i] != clickObjName)
Packit Service 9ccfef
	    continue;
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //toggle click status, color clicked object
Packit Service 9ccfef
    if (clickStatus[i] == 0) {
Packit Service 9ccfef
	clickStatus[i] = 1;
Packit Service 9ccfef
	clickObj.setAttribute("style","fill: "+color1);
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	clickStatus[i] = 0;
Packit Service 9ccfef
	clickObj.setAttribute("style","fill: "+color2);
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //adjust color-counter
Packit Service 9ccfef
    if (color1 == 'red') {
Packit Service 9ccfef
	if (clickStatus[i] == 1) {
Packit Service 9ccfef
	    redCount[i]++;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    redCount[i]--;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (color1 == 'salmon') {
Packit Service 9ccfef
	if (clickStatus[i] == 1) {
Packit Service 9ccfef
	    salmonCount[i]++;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    salmonCount[i]--;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    if (clickStatus[i] == 0 && salmonCount[i] > 0) {
Packit Service 9ccfef
	clickObj.setAttribute("style","fill: salmon");
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function changeColor(evt, targetObjName, color1, color2)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var clickObj = evt.getTarget();
Packit Service 9ccfef
    var clickObjName = clickObj.getAttribute('id');
Packit Service 9ccfef
    var targetObj = svgDocument.getElementById(targetObjName);
Packit Service 9ccfef
Packit Service 9ccfef
    //find i corresponding to the clicked object
Packit Service 9ccfef
    for (i=0; i<%i; i++) {
Packit Service 9ccfef
	if (name[i] != clickObjName)
Packit Service 9ccfef
	    continue;
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //find j corresponding to the target object
Packit Service 9ccfef
    for (j=0; j<%i; j++) {
Packit Service 9ccfef
	if (name[j] == "") {
Packit Service 9ccfef
	    name[j] = targetObjName;
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (name[j] != targetObjName)
Packit Service 9ccfef
	    continue;
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //adjust color-counter
Packit Service 9ccfef
    if (color1 == 'red') {
Packit Service 9ccfef
	if (clickStatus[i] == 1) {
Packit Service 9ccfef
	    redCount[j]++;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    redCount[j]--;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (color1 == 'salmon') {
Packit Service 9ccfef
	if (clickStatus[i] == 1) {
Packit Service 9ccfef
	    salmonCount[j]++;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    salmonCount[j]--;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
function colorText(targetObjName, color)
Packit Service 9ccfef
{
Packit Service 9ccfef
    var targetObj = svgDocument.getElementById(targetObjName);
Packit Service 9ccfef
Packit Service 9ccfef
    //find i corresponding to the target object
Packit Service 9ccfef
    for (i=0; i<%i; i++) {
Packit Service 9ccfef
	if (name[i] != targetObjName)
Packit Service 9ccfef
	    continue;
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    //color text
Packit Service 9ccfef
    if (i == %i) {
Packit Service 9ccfef
	targetObj.setAttribute("style","fill: "+color);
Packit Service 9ccfef
	return;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (redCount[i] == 0 && salmonCount[i] == 0) {
Packit Service 9ccfef
	targetObj.setAttribute("style","fill: "+color);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (salmonCount[i] > 0) {
Packit Service 9ccfef
	if (color == 'red') {
Packit Service 9ccfef
	    targetObj.setAttribute("style","fill: red");
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    if (redCount[i] > 0) {
Packit Service 9ccfef
		targetObj.setAttribute("style","fill: red");
Packit Service 9ccfef
	    } else {
Packit Service 9ccfef
		targetObj.setAttribute("style","fill: salmon");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}