/*
	COPYRIGHT 1996, 2009, 2010 JAMES H. ZISCH. ALL RIGHTS RESERVED.
	CONTACT:  James H. Zisch - Computer Services (JHZ-CS) http://www.jhz-cs.com/
*/

function mapInit() {
	try {
		if (!navigator.cookieEnabled) {
			alert(enableCookiesMsg);
			return false;
		}
		mapGet();
		mapSet();
		mapLastUsed();
	}
	catch (err) { errHandler(err,'mapInit'); }
}

function mapGet() {
	var f = (self.document.getElementById(mapFrame)) ?			self.document.getElementById(mapFrame) : parent.document.getElementById(mapFrame);
	var d = (f.contentDocument) ? f.contentDocument : f.contentWindow.document;
	var r = d.getElementById(map).innerHTML;
	document.getElementById(mapPane).innerHTML = r;
}

function mapSet() {
	if (!document.createTreeWalker) {
		var m=document.getElementById(mapBody);
		mapNoTreeWalker(m.getElementsByTagName(ha));
		mapNoTreeWalker(m.getElementsByTagName(hb));
		mapNoTreeWalker(m.getElementsByTagName(hc));
		mapNoTreeWalker(m.getElementsByTagName(hd));
		mapNoTreeWalker(m.getElementsByTagName(he));
		mapNoTreeWalker(m.getElementsByTagName(hf));
		return;
	}
	var x = document.createTreeWalker(document.getElementById(mapBody), NodeFilter.SHOW_ELEMENT, mapFilter, false);
	var n;
	while (n = x.nextNode()) {
		if (!n.id) continue;
		if (n.id.search(/sm:g/) > -1) {
			n.onmouseover	= mapOver;
			n.onmouseout	= mapOut;
			n.onclick		= mapGroupClicked;
			n.group = n.id.split(':')[0] + ':' + n.id.split(':')[1] + ':' + ++n.id.split(':')[2];
			if (n.firstChild) n.firstChild.onclick = mapGroupAnchorClicked;
			continue;
		}
		if(n.id.search(/sm:i/) > -1) {
			n.onmouseover	= mapOver;
			n.onmouseout	= mapOut;
			n.onclick		= mapItemClicked;
			if (n.firstChild) n.link = n.firstChild.href;
		}
	}
}

function mapNoTreeWalker(e) {
	for (var x in e) {
		var n = e[x];
		if (!n.id) continue;
		if (n.id.search(/sm:g/) > -1) {
			n.onmouseover	= mapOver;
			n.onmouseout	= mapOut;
			n.onclick		= mapGroupClicked;
			n.group= n.id.split(':')[0] + ':' + n.id.split(':')[1] + ':' + ++n.id.split(':')[2];
			if (n.firstChild) n.firstChild.onclick = mapGroupAnchorClicked;
			continue;
		}
		if (n.id.search(/sm:i/) > -1) {
			n.onmouseover	= mapOver;
			n.onmouseout	= mapOut;
			n.onclick		= mapItemClicked;
			if (n.firstChild) n.link = n.firstChild.href;
		}
	}
}

function mapFilter(n) {
	if (n.tagName.search(/H1|H2|H3|H4|H5|H6/i) > -1) return NodeFilter.FILTER_ACCEPT;
	return NodeFilter.FILTER_SKIP;
}

function mapLastUsed() {
	if (document.cookie) {
		if (cookieJar(map)) {
			var cookies=cookieArray(map);
			for (var x in cookies) {
				var y = cookies[x].split('|');
				if (y[1] != '1') continue;
				var idx = y[0].split(':');
				idx[2]--;
				var g = idx.join(':');
				var t = document.getElementById(g).innerHTML;
				t = t.replace(/\[\+\]/m,minus);
				document.getElementById(g).innerHTML = t;
				document.getElementById(y[0]).style.display = mapDispAttr;
			}
		}
	}
}

function mapHandler(x) {
	try {
		if (!navigator.cookieEnabled) {
			alert(enableCookiesMsg);
			return;
		}
		with (document.getElementById(x).style) {
			display = (display == mapDispAttr) ? 'none' : mapDispAttr;
			var found = false;
			var crumbs = cookieArray(map);
			for (var y in crumbs) {
				if (crumbs[y].indexOf(x) > -1) {
					crumbs[y] = x + '|' + ((display == mapDispAttr) ? '1' : '0');
					found = true;
					break;
				}
			}
			if (!found) crumbs.push(x + '|' + ((display == mapDispAttr) ? '1' : '0'));
			document.cookie = map + '=' + (cookieString(crumbs)) + '; path=/';
		}
		return true;
	}
	catch (err) { errHandler(err,'mapHandler'); }
}

function mapOver() {
	try {
		mapColorCurrent		= this.style.color;
		this.style.color	= mapColorOver;
		if (this.firstChild) {
			this.firstChild.style.color = mapColorOver;
		}
		return true;
	}
	catch (err) { errHandler(err,'mapOver'); }
}

function mapOut() {
	try {
		this.style.color = mapColorCurrent;
		if (this.firstChild) {
			this.firstChild.style.color = mapColorCurrent;
		}
		return true;
	}
	catch (err) { errHandler(err,'mapOut'); }
}

function mapItemClicked() {
	try {
		top.location.href = this.link;
		return false;
	}
	catch (err) { errHandler(err,'mapItemClicked'); }
}

function mapGroupClicked() {
	try {
		mapHandler(this.group);
		with (this.style) {
			color = mapColorCurrent;
		}
		var g = document.getElementById(this.group).style.display;
		this.innerHTML = (g == mapDispAttr) ? this.innerHTML.replace(/\[\+\]/m,minus) : this.innerHTML.replace(/\[\-\]/m,plus);
		return false;
	}
	catch (err) { errHandler(err,'mapGroupClicked'); }
}

function mapGroupAnchorClicked() { return false; }

function cookieArray(x) {
	var y = cookieJar(x);	//	x - cookie to find
	if (y) var z = y.split(',');
	if (z) return(z);		//	returns array of values of x
	return (new Array());	//	return new array
}

function cookieJar(x) { //	x - cookie name, if found return value, else false
	var c = document.cookie.split('; ');
	for (var i in c) if (c[i].split('=')[0] == x) return(c[i].split('=')[1]);
	return false;
}

function cookieString(x) {
	var y = x.join(',');			//	x - an array of cookie values ^ delimited
	return (y.replace(/^,/,''));	//	returns formatted string
}

function cookieExpiration(days) {
//	document.cookie = "name=value; path=/; expires=" + exp.toGMTString();
	var e = new Date();
	var h = e.getTime() + (days*24*60*60*1000); // days * msecs per
	e.setTime(h);
	return (e.toGMTString());
}

function errHandler(err, func) {
	if (!debug) return;
	var emsg = 'ERROR: ' + func + '() : ' + err.message;
	alert(emsg);
}

var	debug = (top.location.href.search(/jhz-cs.com/) == -1) ? true : false;
var mapDispAttr				= 'block', /* must not be inline */
	mapColorOver			= '#CC0000',
	mapColorCurrent;
var map='map', minus='[-]', plus='[+]', mapFrame='mapFrame', mapPane='mapPane', mapBody='mapBody', ha='H1', hb='H2', hc='H3', hd='H4', he='H5', hf='H6';
