<svg	xmlns="http://www.w3.org/2000/svg" width="100%"

		xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt)">

<script><![CDATA[

var	xmlns="http://www.w3.org/2000/svg"

	xlink="http://www.w3.org/1999/xlink" 

	Root=document.documentElement



	var defaultFill="#ccc";	

	var separationColors=["orange","yellow","#0f0","cyan","blue","purple"];

	var users=[

		{ name:"ANCFlyer", x:470, y:275, met:["AA61hvy","AAflt1871","adopim86","Airfoilsguy","AndesSMF",
			"bhmbaglock","BMIFlyer","BCA","Click Click D'oh","DL021","DXing","JLAmber","KROC",
			"L-188","Mark","miamiair","mrsmiamiair","Phoenix","Queso","swatpamike"] },
		{ name:"AA61hvy", x:580, y:250, met:["ANCFlyer","captoveur"] },
		{ name:"AAflt1871", x:550, y:220, met:["ANCFlyer","AndesSMF","BCA"] },
		{ name:"adopim86", x:300, y:500, met:["ANCFlyer","BCA","bhmbaglock","Click Click D'oh","Mark","miamiair"] },
		{ name:"Airfoilsguy", x:365, y:522, met:["ANCFlyer","BCA","bhmbaglock","JLAmber","LPNTed","miamiair","mrsmiamiair","Phoenix","Queso","swatpamike"] },
		{ name:"AndesSMF", x:500, y:195, met:["AAflt1871","ANCFlyer","BMIFlyer","DL021","DXing","PA110"] },
		{ name:"BCA", x:320, y:280, met:[ "AAflt1871","adopim86","Airfoilsguy","ANCFlyer","bhmbaglock","BMIFlyer","Click Click D'oh","DL021","LPNTed",
			"Mark","miamiair","mrsmiamiair","Phoenix","Queso","swatpamike"] },
		{ name:"bhmbaglock", x:260, y:310, met:["adopim86","Airfoilsguy","ANCFlyer","bagpiper","BCA",
			"Click Click D'oh","Cumulonimbus","DL021","DXing","halls120","JLAmber","LPNTed",
			"miamiair","mrsmiamiair","ORFflyer","PA110","Phoenix","Queso","swatpamike"] },
		{ name:"bagpiper", x:155, y:300, met:["bhmbaglock"] },
		{ name:"BMIFlyer", x:420, y:185, met:["ANCFlyer","AndesSMF","BCA","gkirk","Mark","mhodgson","PlymSpotter"] },
		{ name:"captoveur", x:650, y:230, met:["AA61hvy"] },
		{ name:"Click Click D'oh", x:260, y:475, met:["adopim86","ANCFlyer","BCA","bhmbaglock","DL021","DXing","LPNTed","miamiair","mrsmiamiair","Queso"] },
		{ name:"Cumulonimbus", x:275, y:200, met:["bhmbaglock","KROC","ZippyTheChimp"] },
		{ name:"cornish", x:400, y:30, met:["gkirk","ShyFlyer"] },
		{ name:"davestan_ksan", x:180, y:170, met:["NWA742","DXing"] },
		{ name:"Delta767-300ER", x:140, y:345, met:["miamiair"] },
		{ name:"DL021", x:530, y:440, met:["ANCFlyer","AndesSMF","BCA","bhmbaglock","Click Click D'oh","Mark","miamiair","Queso","Tom in NO"] },
		{ name:"DoctorKieron", x:90, y:70, met:["ShanwickOceanic","Spicoli"] },
		{ name:"DXing", x:230, y:225, met:["ANCFlyer","AndesSMF","bhmbaglock","Click Click D'oh","davestan_ksan","Mark","miamiair","PlymSpotter","Queso"] },
		{ name:"gkirk", x:430, y:80, met:["BMIFlyer","cornish","mhodgson","ShyFlyer","trekster"] },
		{ name:"graphic", x:550, y:20, met:["ShyFlyer"] },
		{ name:"halls120", x:200, y:250, met:["bhmbaglock","Zak"] },
		{ name:"JLAmber", x:560, y:365, met:["Airfoilsguy","ANCFlyer","bhmbaglock",
			"miamiair","mrsmiamiair","Phoenix","Queso","swatpamike"] },
		{ name:"Kazzie", x:260, y:85, met:["mhodgson","MD11Engineer","PlymSpotter"] },
		{ name:"KROC", x:330, y:185, met:["ANCFlyer","Cumulonimbus"] },
		{ name:"L-188", x:610, y:295, met:["ANCFlyer"] },
		{ name:"lilqueso", x:620, y:330, met:["Queso"] },
		{ name:"LPNTed", x:550, y:405, met:["Airfoilsguy","BCA","bhmbaglock","Click Click D'oh","miamiair","NIKV69","Queso"] },
		{ name:"Mark", x:390, y:245, met:["adopim86","ANCFlyer","BMIFlyer","BCA","DL021","DXing"] }, //Katie? Gavin?
		{ name:"MD11Engineer", x:230, y:40, met:["Kazzie"] },
		{ name:"ME AVN FAN", x:200, y:100, met:["PlymSpotter"] },
		{ name:"mhodgson", x:400, y:110, met:["BMIFlyer","gkirk","Kazzie","PlymSpotter"] },
		{ name:"miamiair", x:225, y:375, met:["adopim86","Airfoilsguy","ANCFlyer","BCA","bhmbaglock","Click Click D'oh",
			"Delta767-300ER","DL021","DXing","JLAmber","LPNTed","mrsmiamiair","Phoenix","Queso","swatpamike"] },
		{ name:"mrsmiamiair", x:230, y:430, met:["Airfoilsguy","ANCFlyer","BCA","bhmbaglock","Click Click D'oh","JLAmber","miamiair","Phoenix","Queso","swatpamike"] },
		{ name:"NIKV69", x:635, y:390, met:["LPNTed"] },
		{ name:"NWA742", x:130, y:120, met:["davestan_ksan"] },
		{ name:"ORFflyer", x:145, y:320, met:["bhmbaglock"] },
		{ name:"PA110", x:175, y:275, met:["AndesSMF","bhmbaglock"] },
		{ name:"Phoenix", x:495, y:470, met:["Airfoilsguy","ANCFlyer","BCA","bhmbaglock","JLAmber","miamiair","mrsmiamiair","Queso","swatpamike"] },
		{ name:"PlymSpotter", x:320, y:125, met:["BMIFlyer","DXing","Kazzie","ME AVN FAN","mhodgson","trekster"] },
		{ name:"Queso", x:535, y:315, met:["Airfoilsguy","ANCFlyer","BCA","bhmbaglock","Click Click D'oh","DL021","DXing",
			"JLAmber","lilqueso","LPNTed","miamiair","mrsmiamiair","Phoenix","swatpamike"] },
		{ name:"ShanwickOceanic", x:80, y:150, met:["Zak","DoctorKieron","Spicoli"] },
		{ name:"ShyFlyer", x:500, y:40, met:["cornish","gkirk","graphic"] },
		{ name:"Spicoli", x:40, y:100, met:["DoctorKieron","ShanwickOceanic"] },
		{ name:"swatpamike", x:445, y:505, met:["Airfoilsguy","ANCFlyer","BCA","bhmbaglock","JLAmber","miamiair","mrsmiamiair","Phoenix","Queso"] },
		{ name:"Tom in NO", x:635, y:425, met:["DL021"] },
		{ name:"trekster", x:340, y:75, met:["gkirk","PlymSpotter"] },
		{ name:"Zak", x:130, y:210, met:["halls120","ShanwickOceanic"] },
		{ name:"ZippyTheChimp", x:240, y:150, met:["Cumulonimbus"] }

	]

	var usersReverseLookup=[];
	for(var i=0;i<users.length;i++){
		usersReverseLookup[users[i]["name"]]=i;
	}
	
	function init(evt){
		var numUsers=users.length;

		//cross-check "met" arrays
		var crossCheckFailed=false;
		for(var i=0;i<numUsers;i++){
			var user=users[i];
			var numMetUsers=user["met"].length;
			for(j=0;j<numMetUsers;j++){
				var metUserNumber=usersReverseLookup[user["met"][j]];
				if(null==metUserNumber){
					alert("User "+user["met"][j]+" not found on reverse lookup. Spelling?")
					continue;
				}
				var metUser=users[metUserNumber];
				metUserHasMetString="|||"+metUser["met"].join("|||");
				if(metUserHasMetString.indexOf("|||"+user["name"])<0){
					alert("Cross-check fail: "+user["name"]+" and "+metUser["name"]);
					crossCheckFailed="true";
				}
			}
		}
		if(crossCheckFailed) return;
		
		for(var i=0;i<numUsers;i++){
			var user=users[i];
			if(0==user["y"]) user["y"]=Math.floor(Math.random()*600);
			if(0==user["x"]) user["x"]=Math.floor(Math.random()*800);
		}
		for(var i=0;i<numUsers;i++){
			var user=users[i];
			drawUserLinks(user);
		}
		for(var i=0;i<numUsers;i++){
			var user=users[i];
			drawUser(user,i);
		}
	}

	function user_onclick(evt){
		//reset all to default colour
		var numUsers=users.length;
		for(var i=0;i<numUsers;i++){
			var attr={ "fill":defaultFill, "stroke":"#600" };
			assignAttr(document.getElementById("user_"+i),attr)
		}
		var uid=evt.target.id;
		var userNumber=uid.substr(5)
		var username=document.getElementById("user_"+userNumber+"_label").firstChild.textContent;
		var attr={"fill":"red"}
		assignAttr(document.getElementById(uid),attr);

		var linkedUsers=[];
		var newlyFoundUsers=[];
		linkedUsers[linkedUsers.length]=userNumber;

		//for each generation
		for(var i=0;i<separationColors.length;i++){
			for(var j=0;j<linkedUsers.length;j++){
				var userNumber=linkedUsers[j]
				var metUsers=users[userNumber]["met"];
				for(var k=0;k<metUsers.length;k++){
					var metUsername=metUsers[k];
					var metUserNumber=usersReverseLookup[metUsername];
					if(document.getElementById("user_"+metUserNumber).attributes["fill"].value == defaultFill){
						newlyFoundUsers[newlyFoundUsers.length]=metUserNumber;
						var attr={ "fill":separationColors[i] };
						assignAttr(document.getElementById("user_"+metUserNumber),attr)
					}
				}				
			}
			linkedUsers=[].concat(newlyFoundUsers);
			newlyFoundUsers=[];
		}
	}
	
	function drawUserLinks(user){
		var x1=user["x"];
		var y1=user["y"];
		var met=user["met"];
		var metStr="|||"+user["met"].join("|||");
		var numMet=met.length;
		for(j=0;j<users.length;j++){
			var metUser=users[j];
			if(metStr.indexOf("|||"+metUser["name"])>-1 && metUser["name"]>user["name"]){
				var L=document.createElementNS(xmlns,"line"); 
				var Attr={
					'x1': x1,
					'y1': y1,
					'x2': metUser["x"],
					'y2': metUser["y"],
					'id':'link_'+i+'_'+j,
					'style': 'stroke-opacity: 0.7; stroke:#999; stroke-width: 1; fill: none',
					'visibility': 'visible'
				}
				assignAttr(L,Attr)
				Root.appendChild(L)
				met--;
			}
			if(0==numMet) {
				//break;
			}
		}
	}
		
	function drawUser(user,num){
		var C=document.createElementNS(xmlns,"circle"); 
		var rad=user.met.length*0.5+4;
		if(rad>15) rad=15;
		var Attr={
			r:rad,
			cx:user["x"],
			cy:user["y"],
			"fill":defaultFill,
			"stroke": "#600",
			"id":"user_"+num,
			"stroke-width": Math.ceil(user.met.length/8),
			"title":user["name"],
			"onclick":"user_onclick(evt)"
		}
		assignAttr(C,Attr)
		Root.appendChild(C)

		var T =document.createTextNode(user["name"]);
		var txt = document.createElementNS(xmlns, "text");
		var Att={
			"x": user["x"]+rad+3,
			"y": user["y"]+5,
			"fill": "#333",
			"font-family":"verdana,arial,helvetica,sans-serif",
			"font-weight":"bold",
			"font-size":"11px",
			"id":"user_"+num+"_label",
			"text-anchor": "left"
		}
	
		assignAttr(txt,Att)
		txt.appendChild(T);
		Root.appendChild(txt);
	}
	
	function assignAttr(O,A){
		for (i in A) O.setAttributeNS(null,i, A[i])
	}
]]>

</script>

<rect width="100%" height="100%" fill="white" id="rect"/>

<!--

<text font-size="12pt" x="50" y="20" id="t1">Click something to move it</text>

<text font-size="12pt" x="80" y="40" id="t2">Click nothing to add something</text>

-->

</svg>


