if (typeof ImageMap == 'undefined') {
	ImageMap = {
	init: function() {
		if (!document.getElementsByTagName || !document.getElementsByName || !document.createElement) return;
		var imgs = document.getElementsByTagName('img');
		for (var i=0;i<imgs.length;i++) if ((imgs[i].className.search(/\bimagemap\b/) != -1) && (imgs[i].getAttribute('usemap') != null)) ImageMap.prepImage(imgs[i]);
	},
	redraw: function() {
		if (!document.getElementsByTagName || !document.getElementsByName || !document.createElement) return;
		var imgs = document.getElementsByTagName('img');
		for (var i=0;i<imgs.length;i++) if ((imgs[i].className.search(/\bimagemap\b/) != -1) && (imgs[i].getAttribute('usemap') != null) && imgs[i].areasShown ) ImageMap.__setAreas(imgs[i],'block');
	},
	prepImage: function(img) {
		var mapName = img.getAttribute('usemap');
		mapName = mapName.substr(mapName.indexOf('#')+1);
		var mapObjs = document.getElementsByName(mapName);
		if (mapObjs.length != 1) return;
		var mapObj = mapObjs[0];
		var areas = mapObj.getElementsByTagName('area');
		img.areas = [];
		for (var j=areas.length-1;j>=0;j--) {
			var coo=areas[j].getAttribute('shape');
			if (coo=='rect') coo = areas[j].getAttribute('coords').split(',');
			else if (coo=='circle') {
				coo = areas[j].getAttribute('coords').split(',');
				var x=parseInt(coo[0]);
				var y=parseInt(coo[1]);
				var r=parseInt(coo[2]);
				coo.unshift(x-r);
				coo[1]=y-r;
				coo[2]=x+r;
				coo[3]=y+r;
			} else if (coo=='poly') {
				coo = areas[j].getAttribute('coords').split(',');
				var minx=parseInt(coo[0]);
				var maxx=minx;
				var miny=parseInt(coo[1]);
				var maxy=miny;
				for (var i=2; i<coo.length; i++) {
					var v=parseInt(coo[i]);
					minx=Math.min(minx, v);
					maxx=Math.max(maxx, v);
					i++;
					v=parseInt(coo[i]);
					miny=Math.min(miny, v);
					maxy=Math.max(maxy, v);
				}
				coo=new Array(minx, miny, maxx, maxy);
			} else coo = '';
			if (coo.length == 4) {
				var a = document.createElement('a');
				a.associatedCoords = coo;
				a.style.width = (parseInt(coo[2]) - parseInt(coo[0])) + 'px';
				a.style.height = (parseInt(coo[3]) - parseInt(coo[1])) + 'px';
				a.className = 'imagemap';
				var href = areas[j].getAttribute('href');
				if (href) a.href = href;
				else a.href = "javascript:void(0)";
				a.title = areas[j].getAttribute('title');
				img.areas[img.areas.length] = a;
				document.getElementsByTagName('body')[0].appendChild(a);
				a.parentImg=img;
				ImageMap.addEvent(a,"mouseout",ImageMap.showAreas);
				ImageMap.addEvent(a,"mouseover",ImageMap.hideAreas);
			}
			areas[j].parentImg=img;
			ImageMap.addEvent(areas[j],"mouseout",ImageMap.showAreas);
			ImageMap.addEvent(areas[j],"mouseover",ImageMap.hideAreas);
		}
		ImageMap.addEvent(img,"mouseover",ImageMap.hideAreas);
		ImageMap.addEvent(img,"mouseout",ImageMap.showAreas);
		img.areasShown=true;
		img.timeout = setTimeout(function() { ImageMap.__setAreas(img,'block') }, 1000);
	},
	__getAreaPosition: function(img,coo) {
		var aleft = (img.offsetLeft + parseInt(coo[0]));
		var atop = (img.offsetTop + parseInt(coo[1]));
		var oo = img;
		while (oo.offsetParent) {
			oo = oo.offsetParent;
			aleft += oo.offsetLeft;
			atop += oo.offsetTop;
		}
		return [aleft,atop];
	},
	__setAreas: function(t,disp) {
		if (!t || !t.areas) return;
		t.areasShown=disp=='block';
		if (t.areasShown) for (var k=0;k<t.areas.length;k++) {
			var thisAreaPosition = ImageMap.__getAreaPosition(t,t.areas[k].associatedCoords);
			t.areas[k].style.left = thisAreaPosition[0] + 'px';
			t.areas[k].style.top = thisAreaPosition[1] + 'px';
		}
		for (var i=0;i<t.areas.length;i++) t.areas[i].style.display = disp;
	},
	showAreas: function(e) {
		var t = null;
		if (e && e.target) t = e.target;
		if (t==null && window.event && window.event.srcElement) t = window.event.srcElement;
		if (t && !t.areas) t=t.parentImg;
		clearTimeout(t.timeout);
		t.timeout = setTimeout(function() { ImageMap.__setAreas(t,'block') }, 1000);
	},
	hideAreas: function(e) {
		var t = null;
		if (e && e.target) t = e.target;
		if (t==null && window.event && window.event.srcElement) t = window.event.srcElement;
		if (t && !t.areas) t=t.parentImg;
		clearTimeout(t.timeout);
		ImageMap.__setAreas(t,'none');
		if (e && e.target && e.target.href && e.target.href=="javascript:void(0)") return true;
	},
	addEvent: function(elm, evType, fn, useCapture) {
		if (elm.addEventListener){
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent){
			var r = elm.attachEvent("on"+evType, fn);
			return r;
		} else elm['on'+evType] = fn;
	}
}
ImageMap.addEvent(window,"load",ImageMap.init);
ImageMap.addEvent(window,"resize",ImageMap.redraw);
}