//Script file lmg_svg_script.js //last modified 2005 - 04 - 07 var nbsplit; function showinfotip (evt, info){ var splitString; splitString = info.split('\n'); nbsplit = splitString.length; var target = get_target(evt); var svgdoc = target.getOwnerDocument(); var svgdocElement = svgdoc.getDocumentElement(); var scale = svgdocElement.getCurrentScale(); var infotip= 'infotip'; var infotiprect= 'infotipRect'; var svgobj = svgdoc.getElementById (infotip); var svgobjtxt = svgobj; var xnode = parseInt(target.getAttribute('x')); var ynode = parseInt(target.getAttribute('y')); svgobj.setAttribute ('x', xnode); if (ynode > 1100) ynode = parseInt(ynode-300/scale); svgobj.setAttribute ('y', ynode); var svgstyle = svgobj.getStyle(); svgstyle.setProperty ('visibility', 'visible'); svgstyle.setProperty('font-size', 60/scale); svgobj1 = svgobj.getFirstChild(); if (nbsplit == 1) { svgobj1.setData(info); } else { svgobj1.setData(splitString[0]); for (k=1; k= 2) { for (j=0; j < subsplitString.length; j++) { myspan = svgdoc.createElement('tspan'); if (j==0) myspan.setAttribute('dy', 1.2+'em'); myspan.setAttribute('id', k + '' + j); if (j!= 0) { myspan.setAttribute('x', xnode + 500/scale); if (parseFloat(subsplitString[j]) < 0) { myspan.setAttribute('style','text-anchor:end;stroke:rgb(255,0,0);fill:rgb(255,0,0)'); } else myspan.setAttribute('style','text-anchor:end'); myspan.appendChild(svgdoc.createTextNode(formatString(subsplitString[j]))); } else { myspan.setAttribute('x', xnode); myspan.appendChild(svgdoc.createTextNode(subsplitString[j]+ ' = ')); } svgobj.appendChild(myspan); } } else { myspan = svgdoc.createElement('tspan'); myspan.setAttribute('dy', 1.2+'em'); myspan.setAttribute('id', k); myspan.setAttribute('x', xnode); myspan.appendChild(svgdoc.createTextNode(splitString[k])); svgobj.appendChild(myspan); } } } var txtlen=svgobj.getBBox().width+50/scale; var svgobj = svgdoc.getElementById (infotiprect); svgobj.setAttribute ('x', parseInt(xnode-30/scale)); svgobj.setAttribute ('y', parseInt(ynode-60/scale)); svgobj.setAttribute ('width', txtlen + 30/scale); if (nbsplit >1) svgobj.setAttribute ('height',nbsplit*6/scale+'em'); else svgobj.setAttribute ('height',6/scale+'em'); svgobj.setAttribute ('rx', 25/scale); svgobj.setAttribute ('ry', 25/scale); svgobj.getStyle().setProperty ('visibility', 'visible'); } function hideinfotip(evt){ var target = get_target(evt); var svgdoc = target.getOwnerDocument(); var infotip= 'infotip'; var infotiprect= 'infotipRect'; var svgobj = svgdoc.getElementById (infotip); if (nbsplit==1) { svgobj.getStyle().setProperty ('visibility', 'hidden'); } else { nodelist = svgobj.getChildNodes(); for (k=nbsplit-1+3; k>0; k--) { svgobj.removeChild(nodelist.item(k)) } svgobj.getStyle().setProperty ('visibility', 'hidden'); } svgdoc.getElementById(infotiprect).getStyle().setProperty ('visibility','hidden');; } function formatString(f_inputFloat) { return formatNumber(f_inputFloat,".##"); } // CONSTANTS var separator = ","; // use comma as 000's separator var decpoint = "."; // use period as decimal point var percent = "%"; var currency = "$"; // use dollar sign for currency function formatNumber(number, format) { // use: formatNumber(number, "format") //if (number - 0 != number) return null; // if number is NaN return null if (number - 0 != number) return "n.a."; if (number < 1000) return number; else { var useSeparator = format.indexOf(separator) != -1; // use separators in number var usePercent = format.indexOf(percent) != -1; // convert output to percentage var useCurrency = format.indexOf(currency) != -1; // use currency format var isNegative = (number < 0); number = Math.abs (number); if (usePercent) number *= 100; format = strip(format, separator + percent + currency); // remove key characters number = "" + number; // convert number input to string // split input value into LHS and RHS using decpoint as divider var dec = number.indexOf(decpoint) != -1; var nleftEnd = (dec) ? number.substring(0, number.indexOf(".")) : number; var nrightEnd = (dec) ? number.substring(number.indexOf(".") + 1) : ""; // split format string into LHS and RHS using decpoint as divider dec = format.indexOf(decpoint) != -1; var sleftEnd = (dec) ? format.substring(0, format.indexOf(".")) : format; var srightEnd = (dec) ? format.substring(format.indexOf(".") + 1) : ""; // adjust decimal places by cropping or adding zeros to LHS of number if (srightEnd.length < nrightEnd.length) { var nextChar = nrightEnd.charAt(srightEnd.length) - 0; nrightEnd = nrightEnd.substring(0, srightEnd.length); if (nextChar >= 5) nrightEnd = "" + ((nrightEnd - 0) + 1); // round up // patch provided by Patti Marcoux 1999/08/06 while (srightEnd.length > nrightEnd.length) { nrightEnd = "0" + nrightEnd; } if (srightEnd.length < nrightEnd.length) { nrightEnd = nrightEnd.substring(1); nleftEnd = (nleftEnd - 0) + 1; } } else { for (var i=nrightEnd.length; srightEnd.length > nrightEnd.length; i++) { if (srightEnd.charAt(i) == "0") nrightEnd += "0"; // append zero to RHS of number else break; } } // adjust leading zeros sleftEnd = strip(sleftEnd, "#"); // remove hashes from LHS of format while (sleftEnd.length > nleftEnd.length) { nleftEnd = "0" + nleftEnd; // prepend zero to LHS of number } if (useSeparator) nleftEnd = separate(nleftEnd, separator); // add separator var output = nleftEnd + ((nrightEnd != "") ? "." + nrightEnd : ""); // combine parts output = ((useCurrency) ? currency : "") + output + ((usePercent) ? percent : ""); if (isNegative) { // patch suggested by Tom Denn 25/4/2001 output = (useCurrency) ? "(" + output + ")" : "-" + output; } return output; } } function strip(input, chars) { // strip all characters in 'chars' from input var output = ""; // initialise output string for (var i=0; i < input.length; i++) if (chars.indexOf(input.charAt(i)) == -1) output += input.charAt(i); return output; } function separate(input, separator) { // format input using 'separator' to mark 000's input = "" + input; var output = ""; // initialise output string for (var i=0; i < input.length; i++) { if (i != 0 && (input.length - i) % 3 == 0) output += separator; //ben mod output += input.charAt(i); } return output; } function switchColor (evt,property,newcolor,idpath){ var target ; var svgdoc; svgdoc = evt.getTarget().getOwnerDocument(); target = get_target(evt); if (idpath.substring(0,17) == 'composedLineStyle') { objpath = svgdoc.getElementById(idpath.substring(17,idpath.length)); objpath.setAttribute('style',''); tempobj = svgdoc.getElementById(idpath).getStyle().setProperty(property,newcolor); } else { target = get_target(evt).getStyle().setProperty (property, newcolor); } } function get_target (evt){ var target = evt.getTarget(); while (target && !target.getAttribute('id')) target = target.getParentNode(); return target; }