+ for (i = 0; i < graphList.length; i++)
+ if (graphList[i].substring(0, graphId.length) == graphId && graphList[i].charAt(graphId.length) == ' ') {
+ if (i+1 < graphList.length) {
+ var tmp = graphList[i+1];
+ graphList[i+1] = graphList[i];
+ graphList[i] = tmp;
+ }
+ break;
+ }
+ GraphPositionToolbox(null);
+}
+
+function GraphListFromCookie(lname) {
+ if (document.cookie.length > 0) {
+ var cname= 'graphLst'+lname+'=';
+ var cookies = document.cookie.split('; ');
+ for (i = 0; i < cookies.length; i++)
+ if (cookies[i].substring(0, cname.length) == cname)
+ return cookies[i].substring(cname.length).split('/');
+ }
+ return new Array();
+}
+
+function GraphListNameSort(a, b) {
+ if (a[0] > b[0])
+ return 1
+ else if (a[0] < b[0])
+ return -1;
+ else
+ return 0;
+}
+
+function GraphListRefresh() {
+ var select = document.getElementById('GraphList');
+ var childCnt = select.childNodes.length;
+ var oldValue = select.selectedIndex > 0 ? select.options[select.selectedIndex].value : '/';
+ while (childCnt > 0)
+ select.removeChild(select.childNodes[--childCnt]);
+
+ // Determine available names
+ var options = new Array();
+ if (document.cookie.length > 0) {
+ var cookies = document.cookie.split('; ');
+ for (i = 0; i < cookies.length; i++)
+ if (cookies[i].substring(0, 8) == 'graphLst') {
+ var p = cookies[i].indexOf('=');
+ if (p < 0)
+ continue;
+ options.push(new Array(cookies[i].substring(8, p), cookies[i].substring(p+1).split('/').length));
+ }
+ }
+ options.sort(GraphListNameSort);
+
+ var optCnt = options ? options.length : 0;
+ if (optCnt == 0) {
+ select.setAttribute('disabled', 'disabled');
+ return -1;
+ } else {
+ select.removeAttribute('disabled');
+ for (i = 0; i < optCnt; i++) {
+ newOption = document.createElement("option");
+ newOption.value = options[i][0];
+ if (newOption.value == oldValue)
+ newOption.setAttribute('selected', 'selected');
+ if (options[i][1] == 1)
+ newOption.appendChild(document.createTextNode(newOption.value+' (1 graph)'));
+ else
+ newOption.appendChild(document.createTextNode(newOption.value+' ('+options[i][1]+' graphs)'));
+ select.appendChild(newOption);
+ }
+ return select.selectedIndex;
+ }
+}
+
+function GraphListCheckName(doalert) {
+ var lname = document.getElementById('GraphListName');
+ if (lname) {
+ if (lname.value.match(/^[a-zA-Z0-9_-]+$/)) {
+ lname.style.backgroundColor = '';
+ return lname.value;
+ } else {
+ lname.style.backgroundColor = '#ffdddd';
+ if (doalert && lname.value.length == 0)
+ alert('Graph list name is empty.\n\n'+
+ 'Please fill in a name and try again.');
+ else if (doalert)
+ alert('Graph list name contains non-permitted character.\n\n'+
+ 'Only anlphanumerical characters (a-z, A-Z, 0-9), hyphen (-) and underscore (_) are permitted.\n'+
+ 'Please correct and try again.');
+ lname.focus();
+ }
+ }
+ return '';
+}
+
+function GraphSave() {
+ var lstName = GraphListCheckName(true);
+ if (lstName.length == 0)
+ return;
+ if (graphList.length > 0) {
+ // Save graph list to cookie
+ var str = '';
+ for (i = 0; i < graphList.length; i++) {
+ var g = graphList[i].indexOf(' ');
+ if (i > 0)
+ str += '/';
+ str += graphList[i].substring(g+1);
+ }
+
+ document.cookie = 'graphLst'+lstName+'='+str;
+ if (GraphListFromCookie(lstName).length == 0)
+ alert("Failed to save graph list '"+lstName+"' to cookie.");
+ else
+ alert("Successfully saved current graph list.");
+ } else {
+ document.cookie = 'graphLst'+lstName+'=; expires='+new Date().toGMTString();
+ alert("Cleared saved graph list.");
+ }
+ GraphListRefresh();
+}
+
+function GraphDrop() {
+ var cname = document.getElementById('GraphList');
+ if (cname && cname.selectedIndex >= 0) {
+ cname = cname.options[cname.selectedIndex].value;
+ document.cookie = 'graphLst'+cname+'=; expires='+new Date().toGMTString();
+ GraphListRefresh();
+ } else
+ return;
+}
+
+function GraphLoad() {
+ var cname = document.getElementById('GraphList');
+ if (cname && cname.selectedIndex >= 0)
+ cname = cname.options[cname.selectedIndex].value;
+ else
+ return;
+ // Load graph list from cookie
+ var grLst = GraphListFromCookie(cname);
+ var oldLength = graphList.length;
+ for (i = 0; i < grLst.length; i++) {
+ var host = '';
+ var plugin = '';
+ var pinst = '';
+ var type = '';
+ var tinst = '';
+ var timespan = '';
+ var logarithmic = false;
+ var tinyLegend = false;
+ var graph = grLst[i].split('&');
+ for (j = 0; j < graph.length; j++)
+ if (graph[j] == 'logarithmic=1')
+ logarithmic = true;
+ else if (graph[j] == 'tinylegend=1')
+ tinyLegend = true;
+ else if (graph[j].substring(0, 9) == 'timespan=')
+ timespan = decodeURIComponent(graph[j].substring(9));
+ graph = decodeURIComponent(graph[0]).split('/');
+ host = graph[0];
+ if (graph.length > 1) {
+ var g = graph[1].indexOf('-');
+ if (g >= 0) {
+ plugin = graph[1].substring(0, g);
+ pinst = graph[1].substring(g+1);
+ } else
+ plugin = graph[1];
+ }
+ if (graph.length > 2) {
+ var g = graph[2].indexOf('-');
+ if (g >= 0) {
+ type = graph[2].substring(0, g);
+ tinst = graph[2].substring(g+1);
+ } else
+ type = graph[2];
+ }
+
+ if (host && plugin && type)
+ GraphDoAppend(host, plugin, pinst, type, tinst, timespan, tinyLegend, logarithmic);
+ }
+ if (grLst.length == 0)
+ alert("No list '"+cname+"' found for loading.");
+ else if (grLst.length + oldLength != graphList.length)
+ alert("Could not load all graphs, probably damaged cookie.");