var inpreparation=false;
//var inpreparation_sub=false;

//--- link connection's elements are array [divid, linkid, onstyle, offstyle]
var linkconnections = [];

var isIE = false, isNS = false, isDOM = false, isNS4 = false;
var vis = "", invis = "";
if (document.all) {isIE = true; vis="visible";invis="hidden";}
if (document.layers){isNS = true; isNS4=true; vis="show";invis="hide";}
if (document.getElementById && !isIE) {isDOM=true; invis ="hidden"; vis = "visible"}


function show_div(who, linkconnection, linkconnectionclasson, linkconnectionclassoff) {
	inpreparation = false;
	hide_div();

	if (linkconnection)	{
		add_linkconnection(who, linkconnection, linkconnectionclasson, linkconnectionclassoff);
	}
	document.getElementById(who).style.display = 'block'; 
	linkconnection_on(who);
}

//--- link connection functions
function get_linkconnection(divid) {
	for (var i=0; i<linkconnections.length; i++) {
		if (linkconnections[i][0] == divid) {
			return linkconnections[i];
		}
	}
}
function add_linkconnection(divid, linkid, onstyle, offstyle) {
	var existingconnection = get_linkconnection(divid);
	if (existingconnection) {
		if (existingconnection[1] == linkid && existingconnection[2] == onstyle && existingconnection[3] == offstyle) {
			//--- already there, nothing to be done
			return;
		} else {
			//--- there but not same, remove it
			delete_linkconnection(divid);
		}
	}

	//--- add the connection
	var newelement = [divid, linkid, onstyle, offstyle];
	linkconnections.push(newelement);
}
function delete_linkconnection(divid) {

}
function linkconnection_on(divid) {
	var linkdata = get_linkconnection(divid);
	if (linkdata && linkdata[1]) {
		document.getElementById(linkdata[1]).className = linkdata[2];
	}
}
function linkconnection_off(divid) {
	var linkdata = get_linkconnection(divid);
	if (linkdata && linkdata[1]) {
		document.getElementById(linkdata[1]).className = linkdata[3];
	}
}

function show_hide_div(who, linkconnection, linkconnectionclasson, linkconnectionclassoff) {
	var mydiv = document.getElementById(who);
	if (!mydiv) { return; }

	if (linkconnection)	{
		add_linkconnection(who, linkconnection, linkconnectionclasson, linkconnectionclassoff);
	}

	if (mydiv.style.display != 'block')	{
		hide_div();
		mydiv.style.display = 'block';
		linkconnection_on(who);
	} else {
		hide_div();
	}
}

function hide_div() {
	var els = document.getElementsByTagName("div");
	for(var i=0; i<els.length; i++) {
		var him = els[i];
		var idstr = him.getAttribute("id");
		if (idstr != "" && idstr != null && (idstr.indexOf("layer_") >= 0 || idstr.indexOf("layer_") >= 0) && him.style.display == 'block') { 
			him.style.display = 'none'; 
			linkconnection_off(idstr);
		}
	}	
}

function cpre(keeplinkstyle, styletokeep) {
	inpreparation = false;
	if (keeplinkstyle) {
		document.getElementById(keeplinkstyle).className = styletokeep;
	}
}

function prepared_toclose() {
	if (inpreparation) { hide_div(); }
}

function preparetoclose() {
	inpreparation=true;
	setTimeout(prepared_toclose, 1000);
}


var categories = [];
var catsinitialised = false;
var maxroots = 20;

function catsinitialise() {
	for (var i=1; i<maxroots; i++) {
		var hisdiv = document.getElementById('cat_' + i + '_div');
		if (hisdiv) {
			var hislink = document.getElementById('cat_' + i + '_link');
			var hissubdiv = document.getElementById('layer_' + i + '_subs');
			categories[i] = {
				'hislink': hislink,
				'hisdiv': hisdiv,
				'hissubdiv': hissubdiv,
				'selected': hisdiv.className == 'sel' ? true : false,
				'over': false
			};
		}
	}
	catsinitialised = true;
}

function catover(catid) {
	if (!catsinitialised) {	catsinitialise(); }	
	preparingtocatout[catid] = false;
	if (!categories[catid].over) {
		categories[catid].over = true;
		categories[catid].hislink.className = 'sel';
		categories[catid].hisdiv.className = 'sel';
		if (categories[catid].hissubdiv) { categories[catid].hissubdiv.style.display = 'block'; }
	}
}

var preparingtocatout = [];
function catout(catid) {
	if (preparingtocatout[catid]) { return; }
	preparingtocatout[catid] = true;
	setTimeout("catout_done(" + catid + ")", 100);
}


function catout_done(catid) {
	if (!preparingtocatout[catid]) { return; }
	preparingtocatout[catid] = false;

	if (categories[catid] && categories[catid].over) {
		categories[catid].over = false;
		if (!categories[catid].selected) {
			categories[catid].hislink.className = '';
			categories[catid].hisdiv.className = '';
		}
		if (categories[catid].hissubdiv) { categories[catid].hissubdiv.style.display = 'none'; }
	}
}
