function initialize_maps() {
  var map = new GMap2(document.getElementById("map_canvas"));
  map.addControl(new GSmallMapControl());

  center = new GLatLng(46.202136224203464, -34.62874603271484375);
  map.setCenter(center, 2);
  map.checkResize();
  add_marker(new GMarker(new GLatLng(52.07929500832385, 0.18642425537109375)), map, "<a href='http://www.sanger.ac.uk' target='_blank'>Wellcome Trust Sanger Institute</a>", "Hinxton", "Ensembl Team; Head of Production Software:<br /> high throughput sequencing, petabyte scale");
  add_marker(new GMarker(new GLatLng(52.202136224203464, 0.12874603271484375)), map, "Mekentosj Hub", "Cambridge", "Master of Disaster, Ruler of the Rails,<br />Visiting Professor of obscure Swedish rock music.");
  add_marker(new GMarker(new GLatLng(40.763121171621314, -73.95579814910889)), map, "<a href='http://icb.med.cornell.edu/' target='_blank'>Cornell University</a>", "New York, NY", "Post-doctoral fellow: bioinformatics, ontologies,<br /> semantic web, literature search, sequence analysis.");
  add_marker(new GMarker(new GLatLng(52.941691272216765, -1.1900746822357178)), map, "<a href='http://www.nottingham.ac.uk' target='_blank'>University of Nottingham</a>", "Nottingham", "PhD, Bioinformatics. Protein structure prediction,<br /> high performance computing and web services.");

  add_you_tube_marker(new GMarker(new GLatLng(47.607754417713224, -122.33456611633301)), map, "http://www.youtube.com/v/A64WKH9gNI8&hl=en&fs=1&color1=0x006699&color2=0x54abd6");

  add_flickr_marker(new GMarker(new GLatLng(36.147527, -115.155387)), map, "RailsConf, Las Vegas", "http://farm4.static.flickr.com/3607/3521976868_e5d83263d0_m.jpg");
  add_flickr_marker(new GMarker(new GLatLng(46.085019, 6.72689)), map, "Samoens, France", "http://farm1.static.flickr.com/123/358169261_c5203665ec_m.jpg");
  add_flickr_marker(new GMarker(new GLatLng(37.78333309725631, -122.40325212478638)), map, "WWDC, San Francisco", "http://farm3.static.flickr.com/2469/3638579736_3619c09bc0_m.jpg");

}

function add_marker(marker, map, place, location, notice) {

  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<b>" + place + "</b><br />" + location + "<div class='mapper'>" + notice + "</div>");
  });

  map.addOverlay(marker);
}

function add_you_tube_marker(marker, map, place) {
	
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml('<object width="278" height="230"><param name="movie" value="' + place + '"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="' + place + '" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object>');
  });

  map.addOverlay(marker);
	
}

function add_flickr_marker(marker, map, place, photo) {
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml('<b>' + place + '</b><br /><br /><a href="http://www.flickr.com/photos/mza/" title="via Flickr"><img src="' + photo + '" width="240" height="160" alt="Via mza, via Flickr" /></a>');
  });

  map.addOverlay(marker);
  
}

function toggle_requirements(ident) {
	$(ident).toggle();
}

function select_tutorial(ident) {
	hide_all_by_class('tutoriable');
	var selectables = getElementsByClass('selectable');
	for (var i = 0; i < selectables.length; i++) {
		selectables[i].removeClassName('selected');
	}
	$('thumbnail_' + ident).addClassName('selected');
	$(ident).show();
}

function swap_profile(ident) {
	hide_all_by_class('profile_content_item');
	var selectables = getElementsByClass('profile_item');
	for (var i = 0; i < selectables.length; i++) {
		selectables[i].removeClassName('selected_profile_item');
	}
	$(ident + "_container").addClassName('selected_profile_item');
	
	var selectables = getElementsByClass(ident + '_profile_content');
	for (var i = 0; i < selectables.length; i++) {
		selectables[i].show();
	}
	
	initialize_maps();
}

function swap_support(ident) {
	hide_all_by_class('support_content_item');
	$(ident + "_content").show();
	var selectables = getElementsByClass('support_item');
	for (var i = 0; i < selectables.length; i++) {
		selectables[i].removeClassName('selected_support_item');
	}
	$(ident + "_container").addClassName('selected_support_item');
}

function swap_features(ident) {
	hide_all_by_class('feature_content');
	
	var selectables = getElementsByClass('feature_link');
	for (var i = 0; i < selectables.length; i++) {
		selectables[i].removeClassName('selected');
	}
	$(ident + "_link").addClassName('selected');
	$(ident + "_content").show();
}

function select_image(ident) {
	$('main_gallery').src = "/images/gallery/" + ident + ".jpg";
	var selectables = getElementsByClass('selectable');
	for (var i = 0; i < selectables.length; i++) {
		selectables[i].removeClassName('selected');
	}
	$('thumbnail_' + ident).addClassName('selected');
}

function swap_to(ident) {
	hide_all_swaps();
	var link = document.getElementById(ident + "_link"); 
	document.getElementById(ident + '_pinpoint').style.display = 'block'
	document.getElementById(ident).style.display = 'block';
}

function hide_all_swaps() {
	hide_all_by_class('swappable');
}

function hide_all_by_class(classname) {
	var swaps = getElementsByClass(classname);
	for (var i = 0; i < swaps.length; i++) {
		swaps[i].style.display = "none";
	}
}

if (document.getElementById && document.getElementsByTagName && document.createElement) {
	document.write('<link rel="stylesheet" type="text/css" href="/stylesheets/engage.css" />');
	window.onload = initialize;
}

function initialize() {
	var incoming = window.location.hash.replace(/#/, '');
	if (incoming == '') {
		make_it_so();
	} else {		
		make_it_show(incoming);
	}	
}

function make_it_show(incoming) {
	make_it_so();
	show(incoming);
}

function make_it_so() {
	var links = getElementsByClass('section_link');
	for (var i = 0; i < links.length; i++) {
		links[i].onclick = function() {
			toggle(this);
			return false;
		}
	}
}

function toggle(link) {
	var id = link.href.match(/#(\w.+)/)[1];
	show(id);
}

function show(ident) {
	hide_all();
	document.getElementById(ident).style.display = 'block';
}

function hide_all() {
	var pages = getElementsByClass('page');
	for (var i = 0; i < pages.length; i++) {
		pages[i].style.display = 'none';
	}
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}