Blame tools/dump-svg-script.js

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