mapconnect={
	map:'sectionsMap',
	sections:'targetSections',
	dynamicClass:'dynamic',
	showClass:'show',
	currentShown:null,
	init:function(){
		if(!document.getElementById || !document.createTextNode){return;}
		var m=document.getElementById(mapconnect.map);
		var s=document.getElementById(mapconnect.sections);
		if(!m || !s){return;}
		mapconnect.cssjs('add',s,mapconnect.dynamicClass);
		var areas=m.getElementsByTagName('area');
		for(var i=0;i<areas.length;i++){
			mapconnect.addEvent(areas[i],'click',mapconnect.showSection,false);
			areas[i].onclick=function(){return false;} // Safari fix
		}
	},
	showSection:function(e){
		if(mapconnect.currentShown){
			mapconnect.cssjs('remove',mapconnect.currentShown,mapconnect.showClass);
		}
		var t=mapconnect.getTarget(e);
		var section=t.href.toString().split('#');
		if(document.getElementById(section[1])){
			mapconnect.currentShown=document.getElementById(section[1]);
			mapconnect.cssjs('add',mapconnect.currentShown,mapconnect.showClass);
		}
		mapconnect.cancelClick(e);
	},
/* helper methods */
	getTarget:function(e){
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		if (target.nodeName.toLowerCase() != 'area'){target = target.parentNode;}
		return target;
	},
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return;
		}
		if (e){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	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;
		}
	},
	cssjs:function(a,o,c1,c2){
		switch (a){
			case 'swap':
				o.className=!mapconnect.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
				if(!mapconnect.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
			case 'remove':
				var rep=o.className.match(' '+c1)?' '+c1:c1;
				o.className=o.className.replace(rep,'');
			break;
			case 'check':
				return new RegExp("(^|\s)" + c1 + "(\s|$)").test(o.className)
			break;
		}
	}
}
mapconnect.addEvent(window, 'load', mapconnect.init, false);
