// JavaScript Document
// copyright (c) 2007 Gary Phillips II
var pointMapURL = "[*nopoint*]"; var startPointID = -1; var thisPointID = -1; var panelNum = -1;
var mapHTML = "";
var mapArrayT = new Array(); var mapNum = 0;
var mapArrayL = new Array();
var mapArrayU = new Array();

function setMapPointer(inURL) {
  pointMapURL = inURL;
}
// map.asp, misconceptions.asp, tableau.asp, faq.asp, warning.asp, plaintext.asp, morse-code-transcript.asp, overview.asp, transcript.asp
// go through all pages and add keywords, adjust titles, check spelling
// finish user manual
// write blog for warning
// update this and site map
function implementMap() {
  mA (0,"kryptos.info (classical cryptography)","http://www.kryptos.info");
  mA (1,  "Interactive Solutions Sandbox","");
  mA (2,      "Morse Code Reference Tables","http://www.kryptos.info/sandbox/morse-code-table.asp");
  mA (2,      "Morse Code Translator","http://www.kryptos.info/sandbox/morse-code-translator.asp");
  mA (1,  "Recommended Cryptography Links","");
  mA (2,    "Breaking Codes and Ciphers","http://breakingcodes.blogspot.com");
  mA (0,"kryptosRevisited.com (CIA Sculpture)","http://www.kryptosrevisited.com");
  mA (1,  "A Word of Caution","http://www.kryptosrevisited.com/general/warning.asp");
//  mA (1,  "FAQ (Frequently Asked Questions/Facts And Quickly)","");
  mA (1,  "Misconceptions","http://www.kryptosrevisited.com/general/misconceptions.asp");
  mA (1,  "The Kryptos Sculpture","");
  mA (2,    "The Flat Copperplate Strata","");
  mA (3,      "Morse Code","http://www.kryptosrevisited.com/sculpture/copperplate/strata/morse-code.asp");
  mA (2,    "The Curved Copperplate Ribbon","");
  mA (3,      "Transcripts","");
  mA (4,        "Left Panel Ciphertext","http://www.kryptosrevisited.com/sculpture/copperplate/transcript.asp");
  mA (4,        "Right Panel Tableau","http://www.kryptosrevisited.com/sculpture/copperplate/tableau.asp");
  mA (4,        "Plain Text","http://www.kryptosrevisited.com/sculpture/copperplate/plaintext.asp");
  mA (3,      "Style of Lettering","http://www.kryptos.info/public/resources/kryptosSculptureFont.asp");
  mA (4,        "History & Technique","http://www.kryptosrevisited.com/font/copperplateReplica.asp");
  mA (4,        "Download the Font","http://www.kryptosrevisited.com/font/kryptosDownload.asp");
  mA (4,        "Test the Font Installation","http://www.kryptosrevisited.com/font/testInstallation.asp");
  mA (4,        "Font User's Guide & Usage","http://www.kryptosrevisited.com/font/userManualLicense.asp");
  mA (1,  "Media Publications & Interviews","");
  mA (2,    "1991: ABC World News Tonight","http://www.kryptosrevisited.com/sculpture/media-coverage/publications/world-news-tonight.asp");
  mA (2,    "2001: Time Magazine","http://www.kryptosrevisited.com/sculpture/media-coverage/publications/time-magazine.asp");
  mA (2,    "2003: ABC News","http://www.kryptosrevisited.com/sculpture/media-coverage/publications/abc-news.asp");
  mA (2,    "2003: Atomic Time Exerpt","http://www.kryptosrevisited.com/sculpture/media-coverage/publications/atomic-time.asp");
  mA (2,    "2005: The Wall Street Journal","http://www.kryptosrevisited.com/sculpture/media-coverage/publications/wall-street-journal.asp");
  mA (2,    "2005: CNN Interview","http://www.kryptosrevisited.com/sculpture/media-coverage/publications/cnn-2005.asp");
  mA (2,    "2005: CNN B-Roll Transcript","http://www.kryptosrevisited.com/sculpture/media-coverage/b-rolls/cnn-2005.asp");
  mA (2,    "2005: Hirshhorn Museum Talk","http://www.kryptosrevisited.com/sculpture/media-coverage/talks/hirshhorn.asp");
  mA (1,  "Introduction to Theories","");
  mA (2,      "David Stein (CIA Agent)","http://www.kryptosrevisited.com/sculpture/solutions/david-stein.asp");
  mA (2,      "Gary Warzin's Palimpsest","http://www.kryptosrevisited.com/sculpture/solutions/gary-warzin.asp");
  mA (1,  "In-Depth Analysis","");
//  mA (2,    "Agents of Disinformation (soon)","");
//  mA (2,    "Intelligent Speculation (soon)","");
  mA (2,    "Unexplained Metaphor & Oddities","");
  mA (3,      "Jim Sanborn's Signature?","http://www.kryptosrevisited.com/analysis/unexplained/jim-sanborn-signature.asp");
  mA (1,  "Recommended Kryptos Links","");
  mA (2,    "The \"APEX\" of Kryptos","http://www.freeverse.com/apexofkryptos/apexofkryptos/");
  mA (2,    "APEX of Kryptos Blog","http://apexofkryptos.wordpress.com/");
  mA (2,    "Beyond K4","http://kryptosfan.wordpress.com/");
  mA (2,    "CIA's Kryptos Tour","https://www.cia.gov/about-cia/virtual-tour/kryptos/index.html");
  mA (2,    "Elonka's Kryptos Page","http://www.elonka.com/kryptos/");
  mA (2,    "The Kryptos Project","http://www.thekryptosproject.com/");
  mA (2,    "Yahoo! Group (mention this site)","http://tech.groups.yahoo.com/group/Kryptos/");
  mA (0,"realmOfTwelve.net (includes archive)","http://www.realmoftwelve.net");
  mA (1,  "archive: Realm of Twelve landing","http://www.realmoftwelve.net");
  mA (1,  "archive: Introduction","http://realmoftwelve.net/archive/overview/intro.html");
  mA (1,  "archive: James Sanborn","http://realmoftwelve.net/archive/overview/sanborn.html");
  mA (1,  "archive: Letter to Agency","http://realmoftwelve.net/archive/intimation/letter.html");
  mA (1,  "archive: Interactive On Location","http://realmoftwelve.net/archive/intimation/location.html");
  mA (1,  "archive: Informants","http://realmoftwelve.net/archive/intimation/informants.html");
  mA (1,  "archive: American Stone","http://realmoftwelve.net/archive/observation/stone.html");
  mA (1,  "archive: Morse Code","http://realmoftwelve.net/archive/observation/morse.html");
  mA (1,  "archive: Compass Rose","http://realmoftwelve.net/archive/observation/compass.html");
  mA (1,  "archive: Petrified Tree","http://realmoftwelve.net/archive/observation/petrified.html");
  mA (1,  "archive: Water Pools","http://realmoftwelve.net/archive/observation/water.html");
  mA (1,  "archive: Vigenere Copperplate","http://realmoftwelve.net/archive/observation/vigenere.html");
  mA (1,  "archive: K1 Solution","http://realmoftwelve.kryptos.info/speculation/k1solution.html");
  mA (1,  "archive: k2 Solution","http://realmoftwelve.kryptos.info/archive/speculation/k2solution.html");
  mA (1,  "archive: K3 Solution","http://realmoftwelve.kryptos.info/archive/speculation/k3solution.html");
  mA (1,  "archive: Standing Waves","http://realmoftwelve.net/archive/speculation/standingwaves.html");
  mA (1,  "archive: CIA Correspondence","http://realmoftwelve.net/archive/correlation/CIAcorrespondence.html");
  mA (1,  "archive: Sangreal - Holy Grail","http://realmoftwelve.kryptos.info/about/grail.html");
  mA (1,  "archive: Autokey Cipher","http://realmoftwelve.net/archive/toolbox/autokey.html");
  mA (1,  "archive: CSP-488 (M94)","http://realmoftwelve.net/archive/toolbox/m94.html");
  mA (1,  "archive: Extracting Kryptos Font","http://realmoftwelve.net/archive/toolbox/kryptosfont.html");
  mA (1,  "archive: Morse Table","http://realmoftwelve.net/archive/toolbox/morse.html");
  mA (1,  "archive: About Realm Of Twelve","http://realmoftwelve.net/archive/about/twelve.html");
  mA (1,  "archive: Researcher","http://realmoftwelve.net/archive/about/researcher.html");
  mA (1,  "archive: Contact","http://realmoftwelve.net/archive/about/contact.html");
  mA (1,  "archive: Disclaimer","http://realmoftwelve.net/archive/about/disclaimer.html");
  mA (0,"Recommended Books (Amazon)","");
  mA (1,  "The Code Book","http://www.amazon.com/gp/product/0385495323?ie=UTF8&tag=kryptosinfone-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0385495323");
  mA (1,  "Jim Sanborn: Atomic Time","http://www.amazon.com/gp/product/0886750725?ie=UTF8&tag=kryptosinfone-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0886750725");
  mA (1,  "Mammoth Book of Secret Codes","http://www.amazon.com/gp/product/0786717262?ie=UTF8&tag=kryptosinfone-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0786717262");
  
  for (var mapIter = 0; mapIter < mapArrayT.length; mapIter++) {
	mapHTML += panelClose(mapIter);
    mapHTML += "<div class=\"panelLink\">";
	mapHTML += panelClass(mapIter);
	mapHTML += mapLink(mapIter)+"</div>";
	mapHTML += panelOpen(mapIter);
  }
  
  var thisTier = Number(mapArrayT[mapArrayT.length-1]);
  for (var tierIter = 0; tierIter<thisTier; tierIter++) {
	mapHTML += "</div>";
  }
  document.getElementById("idNetworkMap").innerHTML= mapHTML;
  if (thisPointID!=-1) implementMapPointer();
  
  expandOptionlessPanels();
}

function mA (inTier, inLabel, inURL) {
	if (inTier==0) {
		panelNum++;
		if (thisPointID==-1) startPointID = mapNum;
	}
	
	if (inURL==pointMapURL) thisPointID = mapNum;
	
	mapArrayT[mapNum] = inTier;
	mapArrayL[mapNum] = inLabel;
	mapArrayU[mapNum++] = inURL;
	
}

function panelClass (inMap) {
	if (inMap==mapArrayT.length-1) {
	  return("<span id=\"idL"+String(inMap)+"\"><img src=\"http://www.kryptos.info/images/page/panel-link.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;</span>");
	}
	else {
		var thisTier = Number(mapArrayT[inMap]);
		var nextTier = Number(mapArrayT[inMap+1]);
		if (nextTier>thisTier) {
		  return("<span id=\"idL"+String(inMap)+"\" class=\"panelLinkControl\" onClick=\"clickControl("+String(inMap)+");\"><img src=\"http://www.kryptos.info/images/page/panel-collapse.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;</span>");
		} else {
		  return("<span id=\"idL"+String(inMap)+"\"><img src=\"http://www.kryptos.info/images/page/panel-link.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;</span>");
		}
	}
}

function panelClose(inMap) {
	if (inMap==0) {
	  return("");
	} else {
		var thisTier = Number(mapArrayT[inMap]);
		var prevTier = Number(mapArrayT[inMap-1]);
		if (prevTier>thisTier) {
			var returnHTML =  "";
			for (var tierIter = thisTier; tierIter<prevTier; tierIter++) {
				returnHTML += "</div>";
			}
			return (returnHTML);
		} else {
			return("");
		}
	}
}

function panelOpen(inMap) {
	if (inMap==mapArrayT.length-1) {
	  return("");
	} else {
		var thisTier = Number(mapArrayT[inMap]);
		var nextTier = Number(mapArrayT[inMap+1]);
		if (nextTier>thisTier) {
		  return("<div id=\"idP"+String(Number(inMap+1))+"\" class=\"panelNew\" style=\"display:none;\">");
		} else {
		  return("");
		}
	}
}

function mapLink(inMap) {
	var mapTitle = mapArrayL[inMap];
	var mapURL = mapArrayU[inMap];
	if (mapURL=="") {
		return ("<span onClick=\"clickControl("+inMap+");\">"+mapTitle+"</span>");
	} else {
		return ("<a href=\""+mapURL+"\">"+mapTitle+"</a>");
	}
}

function clickControl(inID) {
	var thisElementID = "idL"+inID;
	var thisElementHTML = document.getElementById(thisElementID).innerHTML.toLowerCase();
	if (thisElementHTML.indexOf("panel-collapse")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-expand.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="block";
	} else if (thisElementHTML.indexOf("panel-expand")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-collapse.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="none";
	} else if (thisElementHTML.indexOf("panel-point-collapse")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point-expand.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="block";
	} else if (thisElementHTML.indexOf("panel-point-expand")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point-collapse.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="none";
	}
}

function clickControlR(inID) {
	var thisElementID = "idRL"+inID;
	var thisElementHTML = document.getElementById(thisElementID).innerHTML.toLowerCase();
	if (thisElementHTML.indexOf("panel-collapse")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-expand.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;";
		document.getElementById("idRP"+String(Number(inID))).style.display="block";
	} else if (thisElementHTML.indexOf("panel-expand")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-collapse.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;";
		document.getElementById("idRP"+String(Number(inID))).style.display="none";
	} else if (thisElementHTML.indexOf("panel-point-collapse")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point-expand.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
		document.getElementById("idRP"+String(Number(inID))).style.display="block";
	} else if (thisElementHTML.indexOf("panel-point-expand")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point-collapse.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
		document.getElementById("idRP"+String(Number(inID))).style.display="none";
	}
}

function expandControl(inID) {
	var thisElementID = "idL"+inID;
	var thisElementHTML = document.getElementById(thisElementID).innerHTML.toLowerCase();
	if (thisElementHTML.indexOf("panel-collapse")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-expand.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="block";
	} else if (thisElementHTML.indexOf("panel-point-collapse")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point-expand.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="block";
	}
}

function collapseControl(inID) {
	var thisElementID = "idL"+inID;
	var thisElementHTML = document.getElementById(thisElementID).innerHTML.toLowerCase();
	if (thisElementHTML.indexOf("panel-expand")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-collapse.gif\" width=\"9\" height=\"9\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="none";
	} else if (thisElementHTML.indexOf("panel-point-expand")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point-collapse.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
		document.getElementById("idP"+String(Number(inID+1))).style.display="none";
	}
}

function implementMapPointer () {
	var thisElementID = "idL"+String(thisPointID);
	if (document.getElementById(thisElementID).innerHTML.toLowerCase().indexOf("panel-collapse")!=-1) {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point-collapse.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
	} else {
		document.getElementById(thisElementID).innerHTML="<img src=\"http://www.kryptos.info/images/page/panel-point.gif\" width=\"10\" height=\"10\" border=\"0\" />&nbsp;";
	}
	
	var currentTier = mapArrayT[thisPointID]+1;
	for (var panelIter = thisPointID; panelIter>=startPointID; panelIter--) {
		if (currentTier>mapArrayT[panelIter]) {
			currentTier=mapArrayT[panelIter];
			expandControl(panelIter);
		}
	}
}

function expandOptionlessPanels() {
   var tierCount = 1;
   for (var mapIter = 0; mapIter < mapArrayT.length-1; mapIter++) {
	  var thisTier = mapArrayT[mapIter];
	  for (var mapIter2 = mapIter+1; mapIter2 < mapArrayT.length; mapIter2++) {
		 var thisTier2 = mapArrayT[mapIter2];
		 if (thisTier==thisTier2) tierCount++;
		 if (tierCount>1 || thisTier2<thisTier) break;
	  }
	  var eligibleFwd = false;
	  if (tierCount==1) eligibleFwd = true;
	  tierCount = 1;
	  for (var mapIter2 = mapIter-1; mapIter2 >= 0; mapIter2--) {
		 var thisTier2 = mapArrayT[mapIter2];
		 if (thisTier==thisTier2) tierCount++;
		 if (tierCount>1 || thisTier2<thisTier) break;
	  }
	  if (tierCount==1 && eligibleFwd) expandControl(mapIter);
	  tierCount = 1;
   }
}