	// getStyleSheetRule ("styleLinks", ".menItem").width = "150px";
/* -----------------------------------------------------------------------------------------------
	Linkmen.js
	Revision History
	----------------

	02-Nov-04 v07
		Converted to object array, working within original paradigm

	02-Nov-04 v08
		Started on CSS conversion of links, preparatory to placing in own screen

	05-Nov-04 v08
		More on Css function.
		Moved utilities out to DanUts

	08-Nov-04 v08
		Now Linkmen10 - remove old table rows functions

	10-Nov-04 v08
		New live version - NewDanMain => DanMain
		Dev version 11.  DanMain => NewDanMain

	18-Nov-04 v12
		Remove previous single-column display

	19-Nov-04
		Removed old CreateCssItems completely
		deleted more: save in Sav03

	27-Nov-04
		Tweaks to refresh

	09-Dec-04
		Now LinkMen14

	12-Dec-04
		All initialisation code now in fullInit.  Takes param to accommodate reload for login/(re)register
		
	18-Apr-05
		Move to v5

	21-May-05
		expandClick() replaced by expandFoldersFromList()
		.. but not just yet - obscure bug opens all at start

	23-May-05
		Add search facility

	12-May-06
		Extended timeout to 15 secs

------------------------------------------------------------------------------------------------- */
// Stuff from Linkman04.htm

var UserRef = 1; // Should be 1
var UserSn = "Body";
var UserFn = "No";
var UserTit = "Mr";
var UserID = "MrNobody";
var UserEmail = "x@y";
var UserDaysToKeep = "7";
var UserRemember = "True";

// ----------------------------------------------------------------------------------- Cookie stuff

// This is our user data cookie object
// var userdata = new Cookie(document, "UserDetails", 240);
var userdata;
var rememberUser = false;

/*
// load data - if not there, set UserRef 0
if (!userdata.load() || !userdata.UserRefno) {
  UserRef = 0;          // no cookie - set ref to 0
}
else {             		// get data
  UserRef = userdata.UserRefno;
  UserSn = userdata.Surname;
  UserFn = userdata.Forename;
	UserTit = userdata.Title;
	UserID = userdata.Username;
	UserEmail = userdata.Email;
	UserDaysToKeep = userdata.DaysToKeep;
	UserRemember = userdata.Remember;
  if (sameText(userdata.Remember,"true"))
  	rememberUser = true;
  if (rememberUser)
  	userdata.store()
  else
  	userdata.remove();
}
*/

// --------------------------------------------------------------------------------------- Main declarations here

		var debugVars = 0;
		var debugState = 0;
		var debugExpand = 0;
		var debugContent = 0;
		var debugLink = 0;
		var debugS = '';

		var doBull = 1;					// TRUE if bullets for link menu
		var isLocal = 0; 				// 1 for local, 0 for web
		var	VisitCnt = 0;				// stats, and to test for reload
		var	UpdateCnt = 0;			// to test for reload
		var FolderCnt;
	  var levIndent = 12;
	  var needUpdate = false;	// set TRUE if we change open windows
	  var inUpdate = true;		// cleared by (re)load from server
	  var inInit = true;			// cleared once initialisation is over
	  var inSearch = false;		// TRUE if in search.  Ugly, but simplest way of handling display

		/* New Stuff */
		var L = new Array();		// This holds our links objects
		var F = new Array();		// This holds our folders objects
		F.maxLev = 0;
		addLink.currFolderInd = new Array();
														// used when building links, to assign correct parent
		
		function sumL (i) {
			return '(' + i + ')  title: ' + L[i].title + ", lev: " + L[i].lev + ",  refno: " + L[i].refno;
		}

		function sumL1 (L) {
			return 'title: ' + L.title + ", lev: " + L.lev + ",  refno: " + L.refno;
		}

		/* Constructor function for new linksItem */
		function makeLinksItem (url, title, lev, refno, parentRefno, folderInd) {
			this.url = url;
			this.title = title;
			this.lev = lev;
			this.refno = refno;
			this.parentRefno = parentRefno;
			this.folderInd = folderInd;
			this.elId = unId();					// so we can easily identify
			this.realParentRefno = null;			// filled in if real parent different (i.e. frequent item)
			this.realFolderInd = null;	// ditto
			/* new div items  - to be defined later */
			this.item = null;		// the complete item ref
			this.expand = null;	// expand button
			//this.expandImg = null;	// expand imange
			this.link = null;		// link
			this.menu = null;		// menu button
			this.menuImg = null;	// menu imange
			// alert (sumL1(this));
		} // makeLinksItem 

		/* Constructor function for new linksFolder */
		function makeLinksFolder (title, lev, refno, parentRefno, isFirst) {
			// addDebug ("Folder refno: " + refno + ", parent: " + parentRefno);
			this.title = title;
			this.lev = lev;
			this.refno = refno;
			this.parentRefno = parentRefno;
			this.div = null;						// 
			this.elId = unId();					// so we can easily identify
			this.elIdDisp = unId();			// for use in display header
			this.nested = null;					// TRUE if nested folders beneath this one
			this.parentInd = 0;					// index of parent
			if (isFirst) {
				this.cntCurr = -1;				// Current link count
				this.cntAll = -1;					// Current and nested link count
			}
			else {
				this.cntCurr = 0;					// Current link count
				this.cntAll = 0;					// Current and nested link count
			}
			this.folderListEl = null;		// pointer to item in folder list
			this.display = null;				// pointer to display element
			this.displayParent = null;	// .. and to containing element
			this.open = null;						// 1 if open, else null
			this.fullOpen = null;				// 1 if fully open, else null
			this.displayBody = null;		// display body
			this.displayBodyHide = null;// replaces when minimised
			this.expanded = null;				// set if expanded in folder list
			// alert (sumL1(this));
		} // makeLinksFolder 

		/* function to add link object to L, with server string parsed */
		function addLink (linkStr) {
			var ind = L.length;
			var url;
			var title;
			var refno;
			var parent;
			var lev;
			var isFolder;
			var isFrequent = null;		// TRUE if frequent item
			var realParentRefno;						// Store if Frequent item

			var p = linkStr.indexOf (String.fromCharCode(9));	// TAB is separator
			url = linkStr.slice(p+1);											// 2nd 1/2 is URL
	    	
		  linkStr = linkStr.slice(0,p);								// 0 => p-1
		  if (linkStr.charAt(0) == '+') {
		    isFolder = true;
		  }
		  if (linkStr.charAt(0) == '-') {
		    isFrequent = true;
		  }
		  p = linkStr.indexOf(',');										// add Refno
		  if (p >= 0) {
				refno = Number(linkStr.slice(0,p-1));
				refno = parseInt(linkStr);
		    linkStr = linkStr.slice(p+1);
		  }
		  else
		  	refno = 0;


		  p = linkStr.indexOf(',');										// add Parent
		  if (p >= 0) {
				parent = Number(linkStr.slice(0,p-1));
				parent = parseInt(linkStr);
		    linkStr = linkStr.slice(p+1);
		  }
		  else
		  	parent = 0;

		  p = linkStr.indexOf(',');										// add Lev
		  if (p >= 0) {
				lev = Number(linkStr.slice(0,p-1));
				lev = parseInt(linkStr);
		    linkStr = linkStr.slice(p+1);
		  }
		  else
		  	lev = 0;
			title = linkStr;	// store title

			if (isFolder) {
				var fInd = addFolder (title, lev, refno, parent);	// addFolder returns current folder index
				// addDebug ("addFolder refno: " + refno + ", parent: " + parent + ", ind: " + ind, 10);
				addLink.currFolderInd[lev] = fInd;
				var pi = addLink.currFolderInd[lev-1];
				if (lev>0)
					F[fInd].parentInd = addLink.currFolderInd[lev-1]
				else
					F[fInd].parentInd = 0;
			}
			else {
				if (isFrequent) {
					refno = -refno;		// reverse minus sign
					realParentRefno = parent;
					realParentRefno = 99;			// BODGE - while server does not return value
					parent = 0;
					lev = 0;
				}
				var folderInd = (lev > 0) ? addLink.currFolderInd[lev-1] : 0;
				// addDebug ("addLink refno: " + refno + ", parent: " + parent  + ", ind: " + ind + ", folderInd: " + folderInd, 10);
				L[ind] = new makeLinksItem (url, title, lev, refno, parent, folderInd);
				if (isFrequent) {
					L[ind].realParentRefno = realParentRefno;
					L[ind].realFolderInd = refnoToInd(realParentRefno, F);
				}
			}
		} // addLink 
		
		/* function to add folder object to F, with server string parsed  - isFirst called from TempLinks */
		function addFolder (title, lev, refno, parentRefno, isFirst) {
			var ind = F.length;
			FolderCnt = ind+1;
			F[ind] = new makeLinksFolder (title, lev, refno, parentRefno, isFirst); 
			F.maxLev = Math.max(lev, F.maxLev);
			if ((ind>0) && (lev>F[ind-1].lev))		// if nested, mark previous as nested
				F[ind-1].nested = true;
			return ind;
		} // addFolder 
		

		// Global values, set by various buttons and events
		var MouseX = 0;
		var MouseY = 0;
		var currentLinkInd;			// index of item selected - set on menu access
		var currentLinkRefno;		// .. and Refno
		var currentParentRefno;		// Parent of current item, whether link or folder
		var	currentIsFolder;		// TRUE if selection made from folder list, FALSE if from item list
		var currentFolderInd;		// index of current Folder in Folders list
		var currentParentInd;		// index of parent of current folder in Folders list
		var currentFolderHeader;	// Header text ("adding link" etc)
		var currentFolderId;		// Id of folder, for changing style
		var currentAction;			// Action selected
    var	clickEl;						// element generating event
    var linkMenVis = null;	// set if link menu visible
		var currentElId;				// Current element Id
		var currentFolderId;		// .. and folder
		var moveToFolder = -1;	// selected folder for MoveTo
		var moveToFolderHi = -1;// selected folder for MoveTo for highlighting

		document.onmousedown = moveToClick;

		function refnoToInd(refno, A) { // returns index in list of item refno in array A; -1 if not found
			var N = 0;
			while ((N < A.length) && (A[N].refno != refno))
				N++;
			if (N = A.length)
				N = -1;
			return N;
		}

		function moveToClick(evt) {
    	if (inInit)
    		return;
    	evt = (evt) ? evt : event;
    	clickEl = evt.SrcElement;
			/* -- to get event properties
			var s = '';
			for (var p in evt) {
				s += p + ': ' + evt[p] + '<br />';
			}
			getEl("col99Content").innerHTML = s;
			*/
    	var coords = getPageEventCoords(evt);    // to be filled in with real function name
    	MouseX = coords.left;
    	MouseY = coords.top;
    	if (!linkMenMouse.inLinkMen && (F.funct!=3))
				CancelLinkmen()
    } // moveToClick


		/* Initialise sets various values depending on whether we are local or remote, logged in or not */
		function Initialise () {
			var s;
			var x;
			scriptName = getScriptName();
			/*
			scriptName = document.location.pathname;
			var p = Math.max(scriptName.lastIndexOf('/'),scriptName.lastIndexOf('\\'));
			if (scriptName != '/')
				scriptName = scriptName.slice(p+1);
			*/
			s = scriptName.toLowerCase();
			if (s.indexOf('index.htm')==0)
				testVer = 0
			else
				testVer = 1;
			getEl("spScript").innerHTML = scriptName + ", testVer: " + testVer; 
			getEl("spUser").innerHTML = String(UserRef);
			getEl("spOther").innerHTML = ", local: " + String(isLocal) + ', LoadingFrame: ' + document.all.LoadingFrame.src;

			var Nam;

			if (UserRef > 0) {
				Nam = UserFn + ' ' + UserSn;
			}
			else {
				Nam = "mr #‘Nobody";
				getEl("btnSubmit").disabled = 1;
				getEl("inst01").style.display="block"
			}
			if (x = getEl("userName"))
			  x.innerHTML = Nam;

			if (x = getEl("dateMod"))
				x.innerHTML = document.lastModified;

			if (x = getEl("visitCnt"))
				x.innerHTML = String(VisitCnt);
			if (x = getEl("updateCnt"))
				x.innerHTML = String(UpdateCnt);

			getEl("LF_Title").onchange = makeDefaultButton1;
			getEl("LF_URL").onchange = makeDefaultButton2;

			if (isLocal==0) {
				dispEl("diagButtons", 0);
				addDebug.defEl = null;	// comment out for debug
			}
			else
				dispEl("diagButtons", 1);

		} // Initialise

		function recreateCookie () {
			// called if NoRemember for Cookie
  		userdata.UserRefno = UserRef;
  		userdata.Surname = UserSn;
  		userdata.Forename = UserFn;
			userdata.Title = UserTit;
			userdata.Username = UserID;
			userdata.Email = UserEmail;
			userdata.DaysToKeep = UserDaysToKeep;
			userdata.Remember = UserRemember;
  		userdata.store()
		}

		function fullInit(reInit) {
			// called on first load or login/register if reInit
			userdata = new Cookie(document, "UserDetails", 240, '/');
			// load data - if not there, set UserRef 0
			if (!userdata.load() || !userdata.UserRefno) {
  			UserRef = 0;          // no cookie - set ref to 0
			}
			else {             		// get data
  			UserRef = userdata.UserRefno;
  			UserSn = userdata.Surname;
  			UserFn = userdata.Forename;
				UserTit = userdata.Title;
				UserID = userdata.Username;
				UserEmail = userdata.Email;
				UserDaysToKeep = userdata.DaysToKeep;
				UserRemember = userdata.Remember;
  			if (sameText(userdata.Remember,"true"))
  				rememberUser = true;
  			if (rememberUser)
  				userdata.store()
  			else
  				userdata.remove();
			}
			// set menus
			if (UserRef == 0) {
  			document.getElementById("doLogout").style.display = "none";
  			document.getElementById("doLogin").style.display = "block";
  			document.getElementById("doRegister").style.display = "block";
				dispEl("menLogout", 0);
				dispEl("menUserDetails", 0);
				//dispEl("menLogin", 1);
				//dispEl("menRegister", 1);
			}
			else {
  			document.getElementById("doLogout").style.display = "block";
  			document.getElementById("doLogin").style.display = "none";
  			document.getElementById("doRegister").style.display = "none";
				dispEl("menLogin", 0);
				dispEl("menRegister", 0);
				//dispEl("menLogout", 1);
				//dispEl("menUserDetails", 1);
			}
			if (!reInit) {		// first time
				if (document.location.href.indexOf("file") == 0)
					isLocal = 1;

				if (isLocal==1) {
					document.all.LoadingFrame.src="TempLinks.html";
					UserRef = 0; // Should be 1
				}
				else
					document.all.LoadingFrame.src="http://www.hamm.org.uk/cgi-bin/NewDanMain06.exe/getlinks" + String(UserRef);
			}

			// wait for load to finish before doing the rest
  		waitForLoad.Cnt = 0;
  		waitForLoad.reInit = reInit;	// can't use param, for obscure reasons
			waitForLoad.timerId = setInterval("waitForLoad()",100);
		} // fullInit

  	function waitForLoad() {
  		// This waits until  we are reloaded (inUpdate set false by loading script)
			if (!inUpdate || (waitForLoad.Cnt >= 150)) {
				clearInterval(waitForLoad.timerId);
				if (waitForLoad.Cnt >= 150)
					alert ("Web server not responding");
				// do remaining init stuff
				Initialise();
				newInit();
				resizeStuff();
				if (waitForLoad.reInit)
					linkManReinit()
				else {
					linkManInit();
					getEl("ldng").style.display = "none"; // hide loading banner
				}
				openFoldersFromList();
				inInit = false;		// allow the user to start clicking! ** UGLY **
				inExpandClick = true;
				expandClick (1);	// need to fool it - not worth debugging!
				expandClick (0);
				inExpandClick = false;
				expandFoldersFromList();
			}
			else {
				waitForLoad.Cnt++;
			}
  	} // waitForLoad


		function Refresh() {
			// Called after update of server data
			addDebug("---- Refresh()",10);
			/* clear variables */
			if (isLocal==1)
				{ LoadingFrame.location.href = 'TempLinks.html'; }
			else {
				switch (currentAction) {
					case 6 : // ** UNTIL WE GET QUICK UPDATE WORKING **
							/* */
							for (var i = 0; i < F.length; i++) {
								F[0].display = null; // force remake
								F[0].displayParent = null;
								F[0].open = null;
								F[0].expanded = null;
							}
							/* */
							linkManReinit();
							openFoldersFromList();
							inInit = false;						// OK for the user to start! ** UGLY **
							inExpandClick = true;
							expandClick (1);	// need to fool it - not worth debugging!
							expandClick (0);
							inExpandClick = false;
							expandFoldersFromList();
							break;
					case 7 : // null action - simply status update
							break;
					case 8 : // search
							doSearch (getEl("LF_Title").value, getEl("cbTitle").checked, getEl("cbUrl").checked, getEl("cbPath").checked);
							break;
					default:
							Initialise();
							newInit();
							resizeStuff();
							linkManReinit();
							openFoldersFromList();
							inInit = false;						// OK for the user to start! ** UGLY **
							inExpandClick = true;
							expandClick (1);	// need to fool it - not worth debugging!
							expandClick (0);
							inExpandClick = false;
							expandFoldersFromList();
							break;
				}
			}
			inInit = false;						// OK for the user to start!
		} // Refresh

		function LinkMenu(N, cat) { // cat is 1 for folder, 2 for display header, 3 for link
    	if (inInit)
    		return;
			addDebug ("LinkMenu -------------------", 6);
			if (cat==0)
				return;

			var folderId;
			var elId;
			setMoveToFolder (-1);
			switch (cat) {
				case 1 :
						folderId = F[N].elId;
						elId = "q";
						break;
				case 2 :
						folderId = F[N].elId;
						elId = F[N].elIdDisp;
						break;
				case 3 :
						//addDebug("L["+N+"].folderInd: " + L[N].folderInd + ", folderId: " + folderId + ", elID " + elId + ", cat " + cat, 6);
						if (L[N].realParentRefno)	// no menu for "frequent links" at present
							return;
						folderId = F[L[N].folderInd].elId;
						elId = L[N].elId;
						addDebug("L["+N+"].folderInd: " + L[N].folderInd + ", N: " + N + ", folderId: " + folderId + ", elID " + elId + ", cat " + cat, 6);
						break;
			}
			currentFolderId = folderId;

			currentLinkInd = N;  // set global link number
			// currentLinkRefno = L[N].refno;  // set global link number
			currentFolderId = folderId;
			currentElId = elId;

	 		/* default values, for new link or base-level item */
	 		currentFolderInd = 0;
			currentParentRefno = 0;
			currentParentInd = 0;

			if (elId) { // Called from new structure: highlight element - currently done with ID
				addDebug ("id: " + elId, 6);
				switch (cat) {
					case 1 : 
					case 2 :
							currentLinkRefno = F[N].refno;
							currentParentRefno = F[N].parentRefno;
							currentIsFolder = true;
							currentFolderInd = N;
							switch (cat) {
								case 1 : 
										addStyle (folderId, "cslnkSel");
	 									if (N == 0)
	 										menSelect("menAddFolder")
	 									else
	 										menSelect("menAddFolder,menDelFolder,menRenFolder,menMoveFolder");
										break;
								case 2 : 
										addStyle (folderId, "cslnkSel");
										addStyle (elId, "cslnkSel");
	 									if (N == 0)
	 										menSelect("menAddLink,menAddFolder")
	 									else
	 										menSelect("menAddLink,menAddFolder,menDelFolder,menRenFolder,menMoveFolder");
										// expandFolder (N, false);
										break;
								}
								break;
					case 3 : 
							addStyle (folderId, "cslnkSel");
							addStyle (elId, "cslnkSel");
							currentLinkRefno = L[N].refno;
							if (L[N].realParentRefno)
								currentParentRefno = L[N].realParentRefno
							else
								currentParentRefno = L[N].parentRefno;
							currentIsFolder = null;
	 						menSelect("menDelLink,menRenLink,menMoveLink");
	 						//menSelect("menAddLink,menAddFolder,menDelLink,menRenLink,menMoveLink");
							addDebug ('expandFolder for item ' + N, 6);
							addDebug ('   L[N].folderInd ' + L[N].folderInd, 6);
							var fInd = L[N].folderInd;
							if (fInd) {
								addDebug ('   F[L[N].folderInd].parentInd ' + F[L[N].folderInd].parentInd, 6);
								while (F[fInd].lev > 0) {
									expandFolder (F[fInd].parentInd, false);
									fInd = F[fInd].parentInd;
								}
							break;
						}
				} // switch
			} // if (elId)

			addDebug ("--- currRefno: " + currentLinkRefno + ", currParent: " + currentParentRefno, 6);
			addDebug ("--- currentLinkInd: " + currentLinkInd + ", currentFolderInd: " + currentFolderInd, 6);
			addDebug ("--- currentLinkRefno: " + currentLinkRefno + ", currentFolderInd: " + currentFolderInd, 6);
			addDebug ("--- currentParentRefno: " + currentParentRefno + ", currentParentInd: " + currentParentInd, 6);

			ShowLinkmen();

		  var x = getEl("linkmen").style;
	  	x.top = pix(MouseY+15);
	  	x.left = pix(MouseX - parseInt(getEl("linkmen").offsetWidth)); // "50px";

	  	addDebug ("doc: " + document.body.clientHeight + ", ht: " + x.height + '/' +  x.offsetHeight + ", tp: " + x.top + '/' + x.offsetTop, 1);
	  	if (document.body.clientHeight < (parseInt(x.top) + 105))
	  		x.top = pix(MouseY-125);

		} // LinkMenu

		// cancel previous moveToFolder, set current (both if <> -1), set global
		function setMoveToFolder(fId) {
			if (moveToFolderHi >= 0)
				removeStyle (F[moveToFolderHi].elId, "cslnkSel");
			moveToFolderHi = fId;
			if (fId >= 0)
				moveToFolder = fId;
			if (moveToFolderHi >= 0) {
				addStyle (F[moveToFolderHi].elId, "cslnkSel");
				var tf = getEl("trgtFldr");
				if (tf)
					tf.innerHTML = F[moveToFolderHi].title;
				addDebug("moveToFolderHi: " + moveToFolderHi, 7);
				currentParentRefno = F[moveToFolderHi].refno;
			}
		}

		function ShowLoadingFrame() {
			var x = getEl("LoadingFrame").style;
			if (x)
			  if (x.display == "none") {
			  	x.display = "block";
			    getEl("btnB").value = "Hide loading frame";
			  }
			  else {
			    x.display = "none";
			  	getEl("btnB").value = "Show loading frame";
			  }
		} // ShowLoadingFrame

		function selectFolder (N) { // select folder (for adding link, etc)
	  	for (var i = 0; i < FolderCnt; i++) {
	  		F[i].div.style.backgroundColor = "white";
	  	}
	  	F[N].div.style.backgroundColor = "gainsboro";
			currentParentRefno = F[N].refno;
		} // selectFolder 

		function menitemSelect (it, itlist, hideAll) {
		  var x = getEl(it).style;
			if (x) {
		  	if (hideAll) 
		  		x.display = "none";
				else if (itlist.indexOf(it) >= 0)
					x.display = "block";
				else
					x.display = "none";
			}
		} // menitemSelect 

		function menSelect (s, hideAll) {
		  if (!hideAll) {  // hide heading and other details
		  	displayLinkmenHeading ("", 1);
			  displayLinkmenDetails ();
			  displayLinkmenButtons ();
			  displayLinkmenFolders (-1);
		  }
			menitemSelect ("menAddLink", s, hideAll);
			menitemSelect ("menAddFolder", s, hideAll);
			menitemSelect ("menDelLink", s, hideAll);
			menitemSelect ("menDelFolder", s, hideAll);
			menitemSelect ("menRenLink", s, hideAll);
			menitemSelect ("menRenFolder", s, hideAll);
			menitemSelect ("menMoveLink", s, hideAll);
			menitemSelect ("menMoveFolder", s, hideAll);
			menitemSelect ("menCancel", "menCancel", hideAll);  // Normally display this
			menitemSelect ("menSearch", "menSearch", hideAll);  // .. and this
		}

		function displayLinkmenHeading (S, hide) {
			var x = getEl("linkmenHeading");
			if (x) {
				if (hide) 
					x.style.display = "none"
				else {
			  x.style.display = "block";
			  x.innerHTML = S;
			 }
			}
		} // menSelect 
		
		function displayLinkmenDetails(show) {
		  /* Display input fields.
		  	 if Show==1, then display just the title.
		  	 if Show==2, display URL also
		  */
		  var x = getEl("linkmenDetails").style;
		  if (x) {
		    if (show) {		// show the Div
		      x.display = "block";
		  		x = getEl("LF_URL").style;
		  		var y = getEl("linkmenUrl");
		  		if (x) {
		    		if (show==2) {	// show the URL also
		      		x.display = "block";
		      		if (y)
		      			y.innerHTML = "URL:"
		  				}
		    		else {
		      		x.display = "none";
		      		if (y)
		      			y.innerHTML = ""
		      	}
		      }
		     }
		    else
		      x.display = "none";
		  }
		} // displayLinkmenDetails

		function displayLinkmenFolders(ind, Header) {
		  return;
		  var x = getEl("linkmenFolders").style;
		  if (x)
		    if ((ind>=0) && (FolderCnt > 0)) {
		      x.display = "block";
					selectFolder(0);
					if (Header)
						getEl("linkmenFoldersHeading").innerHTML = "<span>" + Header + "</span>";
					selectFolder(ind);
		    }
		    else
		      x.display = "none";
		} // displayLinkmenFolders

		function displayLinkmenButtons(show) {
		  var x = getEl("linkmenButtons").style;
		  if (x) {
		    if (show) {
		      x.display = "block";
		      // getEl("btnSubmit").focus() // takes away from input element
		    }
		    else
		      x.display = "none";
		  }
		  dispEl("linkmenCheck", (inSearch && show) ? 1 : 0);
		} // displayLinkmenButtons

		function ShowLinkmen() {
			resetUpdateTimers();
		  var x = getEl("linkmen").style;
		  x.display = "block"
    	linkMenVis = true;
		}

		function CancelLinkmen() {
		  var x = getEl("linkmen").style;
	  	x.display = "none"
			linkMenVis = null;
			F.funct = 2;		// reset default behaviour
			if (currentFolderId) {
				setMoveToFolder (-1);
				removeStyle (currentFolderId, "cslnkSelDashed");
				removeStyle (currentFolderId, "cslnkSel");
				removeStyle (currentElId, "cslnkSel");
			}
			inSearch = false;
		}

		function SetupAction(Header, Details, FoldersTitle) {
		  displayLinkmenHeading (Header);
		  menSelect ("", 1);
		  if (Details>0) {
		  	displayLinkmenDetails (Details);
		  	getEl("LF_Title").focus();
		  }
		  if (FoldersTitle!="") {

			  //displayLinkmenFolders (currentFolderInd, FoldersTitle);
		  }
			displayLinkmenButtons (1);
  		getEl("LF_Title").value = "";
  		getEl("LF_URL").value = "";
		} // SetupAction

		function AddLink() {
			currentFolderHeader = "Adding link to ";
			currentAction = 1;
			SetupAction ("Add link", 2, "");
			if (currentIsFolder)
				currentParentRefno = currentLinkRefno;
		}

		function menAddFolder() { // renamed to avoid clash
			currentFolderHeader = "Adding folder to ";
			currentAction = 2;
			SetupAction ("Add folder", 1, "");
			if (currentIsFolder)
				currentParentRefno = currentLinkRefno;
		}

		function DelLink() {
			currentFolderHeader = "Deleting link ";
			currentAction = 3;
			SetupAction ("Delete link <span class='dlgLink'>" + L[currentLinkInd].title + "</span>",
			0, "");
		}

		function DelFolder() {
			currentFolderHeader = "Deleting folder ";
			currentAction = 3;
			SetupAction ("Delete folder <span class='dlgLink'>" + F[currentFolderInd].title + "</span><br />" +
									 "Embedded items will move to parent folder", 0, "");
		}

		function RenLink() {
			currentFolderHeader = "Renaming link";
			currentAction = 4;
			SetupAction ("Rename link <span class='dlgLink'>" + L[currentLinkInd].title + "</span>", 2, "");
  		getEl("LF_Title").value = L[currentLinkInd].title;
  		getEl("LF_URL").value = L[currentLinkInd].url;
		}

		function RenFolder() {
			currentFolderHeader = "Renaming folder";
			currentAction = 4;
			SetupAction ("Rename folder <span class='dlgLink'>" + F[currentFolderInd].title + "</span>", 1, "");
  		getEl("LF_Title").value = F[currentFolderInd].title;
		}

		function MoveLink() {
			replaceStyle (currentFolderId, "cslnkSel", "cslnkSelDashed");
			F.funct = 3;	// change behaviour
			currentFolderHeader = "Moving link <span class='dlgLink'>" + L[currentLinkInd].title + "</span><br /> to ";
			currentAction = 5;
			SetupAction ("Moving link<br />&nbsp;&nbsp;<span class='dlgLink'>" + L[currentLinkInd].title +
									 "</span><br />to <br />&nbsp;&nbsp;<span id='trgtFldr' class='dlgLink'>&lt;click folder to select&gt;</span>", 0, "link");
		}

		function MoveFolder() {
			replaceStyle (currentFolderId, "cslnkSel", "cslnkSelDashed");
			F.funct = 3;	// change behaviour
			currentFolderHeader = "Moving folder <span class='dlgLink'>" + F[currentFolderInd].title + "</span><br /> to ";
			currentAction = 5;
			SetupAction ("Move folder " + F[currentFolderInd].title, 0, "folder");
			SetupAction ("Moving folder<br />&nbsp;&nbsp;<span class='dlgLink'>" + F[currentFolderInd].title +
									 "</span><br />to <br />&nbsp;&nbsp;<span id='trgtFldr' class='dlgLink'>&lt;click folder to select&gt;</span>", 0, "folder");
		}

		function Search() {
			currentFolderHeader = "Searching";
			currentAction = 8;
			inSearch = true;
			SetupAction ("Search", 1, "");
		}

		function Help(N) {
		  var x = getEl("linkhelp").style;
		  if (x) {
		    if (N==1)
		  		x.display = "block" 
		    else
		  		x.display = "block" 
		  }
		}

		function ShowFoldersFrame() {
			var x = getEl("linkfolders").style;
			if (x)
			  if (x.display == "none") {
			  	x.display = "block";
			    getEl("btnC").value = "Hide folders frame";
			  }
			  else {
			    x.display = "none";
			  	getEl("btnC").value = "Show folders frame";
			  }
		} // ShowFoldersFrame

function setAction () {
	var N = currentAction;
	addDebug ("---- setAction: " + N, 10);
  document.LoadingFrame.document.getElementById("UserRef").value = UserRef;
  document.LoadingFrame.document.getElementById("LF_Code").value = String(N);
  document.LoadingFrame.document.getElementById("LF_Refno").value = currentLinkRefno;
  document.LoadingFrame.document.getElementById("LF_Parent").value = currentParentRefno;
	addDebug("currentParentRefno: " + currentParentRefno, 7);
  document.LoadingFrame.document.getElementById("LF_Title").value = getEl("LF_Title").value;
  document.LoadingFrame.document.getElementById("LF_URL").value = getEl("LF_URL").value;
  document.LoadingFrame.document.getElementById("LF_Flags").value = getEl("LF_URL").value;
  document.LoadingFrame.document.getElementById("LF_OpenDirs").value = openFolders;
  document.LoadingFrame.document.getElementById("LF_RecentLinks").value = recentLinks;
  openFoldersSav = openFolders;	// don't update again until this changes
  recentLinks = '';

	/* need to expand folder list */
	if (Verify(N)) {
  	addDebug ("Submit ---------------------", 5);
  	addDebug ("UserRef: " + UserRef, 5);
  	addDebug ("LF_Code: " + String(N), 5);
  	addDebug ("LF_Refno: " + currentLinkRefno, 5);
  	addDebug ("LF_Parent: " + currentParentRefno, 5);
  	addDebug ("LF_Title: " + getEl("LF_Title").value, 5);
  	addDebug ("LF_URL: " + getEl("LF_URL").value, 5);

  	if (!inSearch) {
  		addDebug("---- Reloading",10);
  		inInit = true;
  		inUpdate = true;
  		document.LoadingFrame.document.getElementById("userRequest").submit();
																						// This calls ././(New)DanMain.exe/processrequest
		}

  	CancelLinkmen();
  	waitForReload.Cnt = 0;
		if (isLocal != 1) 
			waitForReload.timerId = setInterval("waitForReload()",100);
  } // if (Verify())
} // setAction

  function waitForReload() {
  	// This waits until  we are reloaded (inUpdate set false by loading script)
		if (!inUpdate || (waitForReload.Cnt >= 150)) {
			clearInterval(waitForReload.timerId);
			if (waitForReload.Cnt >= 150)
				alert ("Web server not responding");
			Refresh(1);
		}
		else {
			waitForReload.Cnt++;
			addDebug("waitForReload: "+waitForReload.Cnt,10);
		}
  }
  
function Verify(N) {
  var Title = getEl("LF_Title").value;
  var URL = getEl("LF_URL").value;

	if ((N==1) || (N==2) || (N==4)) {
		var FieldsComplete = 0;
		if ((Title) && (Title > ""))
			FieldsComplete = 1;
		if ((N==1) || ((N==4) && (currentIsFolder==0)))
			if ((URL) && (URL > ""))
				FieldsComplete = 1;
  	if (FieldsComplete==1)
  		return true
  	else {
  		alert ('All fields must be completed');
  		return false;
  	}
  }
  else
    return true;
} // Verify

// -------------------------------------------------------------------------------------- Event initialisation
document.onkeydown = trapEsc;

// decipher key down codes
function trapEsc(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
		if (evt && (evt.keyCode==27)) {
			CancelLinkmen()
		}
}

function giveSubmitButtonFocus() {
	if (getEl("linkmen").style.display=="block")
		getEl("btnSubmit").focus() 
}

/* must be better way, when we understand model better.
	 need to detect caller identity */
function makeDefaultButton1() { // called from Title
	if (currentAction!=1)
		giveSubmitButtonFocus();
}
function makeDefaultButton2() {	// called from URL
	giveSubmitButtonFocus();
}
