

	function detachlinks() {
		lines = new Array();
	}

	var blinks = false;
	function togglelinks() {
		if(blinks) {
			$$('div.elLinker').setStyle('display', 'none');
			blinks = false;
			editormode = false;
		}
		else {
			$$('div.elLinker').setStyle('display', 'block');
			blinks = true;
			editormode = true;
		}
	}
	
	function toggleEditor(e) {
		//alert(e.keyCode);
		//alert(e.which);
		if(e.keyCode==101 || e.which==101) if(!editormode) togglelinks();
	}

	function savenode(dis) {
		var el = dis.parentNode;
		el.getElements('div').setStyle('display', 'none');
		//el.getElements('div.elEditBtns').setStyle('display', 'block');
		el.getElements('div.elLinker').setStyle('display', 'block');
		el.getElement('a').innerHTML = dis.getElement('input').value;
		el.getElement('a').setStyle('display', 'block');
	}
	
	function removenode(ntoremove) {
		//if(!dis.parentNode) return;
		//var ntoremove = dis.parentNode.spiderObj.index;
		
		var removeno = removes.length;
		removes[removeno] = nodes[ntoremove].el.getElement('a').getAttribute('dbid');
		
		var dis = nodes[ntoremove].el;
		removelinesfromnode(ntoremove);
		
		for (var i=ntoremove;i<nodes.length-1;i++) {
			nodes[i] = nodes[i+1];
			nodes[i].index = i;
		}
		nodes.splice(nodes.length-1, 1);
		
		dis.parentNode.removeChild(dis);
	}
	
	function removelinesfromnode(n) {
		for (var i=0;i<lines.length;i++) {
			//alert(lines[i].end.index);
			if(lines[i].end.index==n) {
				var orfan = lines[i].start.index;
				lines.splice(i,1);
				i=0;
				//removenode(orfan);
			}
			if(lines[i].start.index==n) {
				lines.splice(i,1);
				i=0;
			}
		}
	}

	function gennewnode(dis,norder) {
		var ml = document.getElementById('moobars-newnodes');
		var myli = new Element('li', {
		'class': 'myClass',
		'html': '<a>new</a>',
		'styles': {
			'display': 'block',
			'border': '0px solid black'
		},
		'events': {
			'click': function(){
				//alert(this.spiderObj.index);
				//gennewnode(this);
			},
			'mouseover': function(){
				//alert('mouseovered');
			}
		}
		});
		ml.appendChild(myli);
		var nodeno = nodes.length;
		nodes[nodeno] = new SpiderNode(myli,dis.parentNode.spiderObj);
		if(norder==1) linknodestartend(dis.parentNode.spiderObj.index,nodeno);
		if(norder==2) linknodestartend(nodeno,dis.parentNode.spiderObj.index);
		for (var i=0;i<nodes.length;i++) {
			nodes[i].normalizePosition();
		}
		if(editormode) $$('div.elLinker').setStyle('display', 'block');
	}
	
	function editoroff() {
		editormode=false; 
		document.getElementById('toolbar').style.display='none'; 
		$$('div.elEditBtns').setStyle('display', 'none');
		$$('div.elLinker').setStyle('display', 'block');
	}
	
	function saveall(bdoimport) {
		var spost = 'saction=saveall&nnodes='+nodes.length+'&nlines='+lines.length;
		if(bdoimport==true) spost += '&bdoimport=1';
		
		//root xy
		spost += '&rx='+nodes[0].x+'&ry='+nodes[0].y;
		
		for (var i=0;i<nodes.length;i++) {
			var dbid = nodes[i].el.getElement('a').getAttribute('dbid');
			//alert('dbid for '+i+' is '+dbid);
			
			for (var j=0;j<lines.length;j++) if(lines[j].start.index == i) var parentid = lines[j].end.index;
			//alert('parentid for '+i+' is '+parentid);
			
			//var dbparentid = idroot;
			//if(parentid>0) dbparentid = nodes[parentid].el.getElement('a').getAttribute('dbid');
			//alert('dbparentid for '+i+' is '+dbparentid);
			
			var sname = nodes[i].el.getElement('a').innerHTML;
			//alert('sname for '+i+' is '+sname);
			
			var x = nodes[i].x;
			var y = nodes[i].y;
			
			//+'&dbparentid['+i+']='+dbparentid+'&parentid['+i+']='+parentid
			spost += '&dbid['+i+']='+dbid+'&sname['+i+']='+sname+'&nx['+i+']='+x+'&ny['+i+']='+y;
		}
		for (var j=0;j<removes.length;j++) {
			spost += '&remove['+j+']='+removes[j];
		}
		for (var k=0;k<lines.length;k++) {
			var nstart = lines[k].start.index;
			var nend = lines[k].end.index;
			//var dbstart = nodes[nstart].el.getElement('a').getAttribute('dbid');
			//var dbend = nodes[nend].el.getElement('a').getAttribute('dbid');
			spost += '&linestart['+k+']='+nstart+'&lineend['+k+']='+nend;
			//spost += '&linedbstart['+k+']='+dbstart+'&linedbend['+k+']='+dbend;
		}
		//alert(spost);
		//js_ajax_loadpost(saveurl,spost,'debugdiv');
		ajax_submit(saveurl,spost,'saving netdiagram...');
		editormode=false; 
		$$('div.toolbar').setStyle('display','none'); 
		$$('div.elEditBtns').setStyle('display', 'none');
		
		if(bdoimport==1) ajax_dowhendone('document.location.href=importurl;');
		else ajax_doasap('document.location.href=exiturl;');
	}
	
	function linknodestartend(nstart,nend) {
		//wywal odwrotna
		for (var i=0;i<lines.length;i++) if(lines[i].end.index==nstart) if(lines[i].start.index==nend) lines.splice(i,1);
		//do not duplicate, toggle
		for (var i=0;i<lines.length;i++) if(lines[i].start.index==nstart) if(lines[i].end.index==nend) { lines.splice(i,1); return; }
		//anti triangle
		for (var i=0;i<lines.length;i++) if(lines[i].start.index==nstart) 
		for (var j=0;j<lines.length;j++) if(lines[j].start.index==nend) 
		if(lines[i].end.index==lines[j].end.index) lines.splice(i,1);
		//dodaj nowa
		var lineno = lines.length;
		lines[lineno] = new SpiderLine(lineno, nodes[nstart], nodes[nend]);
	}
	
	function unlinknodesbefore(nnode) {
		for (var i=0;i<lines.length;i++) if(lines[i].end.index==nnode) { lines.splice(i,1); i=0; }
	}
	function unlinknodesafter(nnode) {
		for (var i=0;i<lines.length;i++) if(lines[i].start.index==nnode) { lines.splice(i,1); i=0; }
	}
	
	function linknode(clicknode) {
		//linkingnode.style.backgroundColor = '#ff0000';
		linkingnode.removeClass('linking');
		if(nlinkingmode==1) linknodestartend(linkingnode.spiderObj.index,clicknode.spiderObj.index);
		if(nlinkingmode==2) linknodestartend(clicknode.spiderObj.index,linkingnode.spiderObj.index);
		nlinkingmode=0;
	}
	
	function startlinking(dis,nmode) {
		linkingnode = dis.parentNode;
		//linkingnode.removeClass('active');
		linkingnode.addClass('linking');
		//dis.parentNode.style.backgroundColor = '#ff0000';
		nlinkingmode = nmode;
	}
		
		