function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

concerts = [];

function createConcertObjects() {
	var events = BTUtil.getElementsByTagNameClass( document.getElementById('content'), 'div', 'vevent');
	for (var i = events.length - 1; i > -1; i--) {
		concerts.push( new Concert( events[i] ) );
	}
}
	
Concert = function( _container ) {
	this.container = _container;
	this.storeEventParams();
	this.buildMapLink();
}

Concert.prototype = {
	storeEventParams: function() {
		this.lat = parseFloat( BTUtil.getElementsByTagNameClass( this.container, 'span', 'latitude')[0].firstChild.nodeValue );
		this.lon = parseFloat( BTUtil.getElementsByTagNameClass( this.container, 'span', 'longitude')[0].firstChild.nodeValue );
		this.venue = BTUtil.getElementsByTagNameClass( this.container, 'dd', 'location')[0].firstChild.nodeValue;
	},
	buildMapLink: function() {
		var that = this;
		var link = document.createElement('a');
		link.href = '#';
		link.className = 'showmap';
		link.appendChild( document.createTextNode(' Show map') );
		link.onclick = function() {
			that.showMap();
			return false;
		}
		this.container.appendChild( link );
		this.link = link;
	},
	createMapContainer: function() {
		var _container = document.createElement( 'div' );
		var _viewer = document.createElement( 'div' );
		_container.className = 'map';
		_viewer.className = 'viewer';
		_container.appendChild( _viewer );
		this.map = _container;
		return _container;
	},
	showMap: function() {
		var that = this;
		this.link.onclick = function() {
			that.hideMap();
			return false;
		}
		var map = this.map || this.createMapContainer();
		this.container.appendChild( map );
		var viewer = new Mapstraction( map, 'google');
		viewer.setCenterAndZoom( new LatLonPoint( this.lat, this.lon ), 16 );
		var marker = new Marker( new LatLonPoint( this.lat, this.lon ) )
		marker.setInfoBubble('<p>' + this.venue + '</p>');
		viewer.addMarker( marker );
		viewer.addSmallControls();
	},
	hideMap: function() {
		var that = this;
		if ( this.map ) {
			this.container.removeChild( this.map );
		}
		this.link.onclick = function() {
			that.showMap();
			return false;
		}
	}
}

BTUtil = {
	getElementsByTagNameClass: function(o, tag_name, css_class) {
        if (!o || typeof o != "object") {
            return false;
        }
        var child_elements = new Array();
        var elements = o.getElementsByTagName( tag_name );
        for (var i = 0, j = elements.length; i<j; i++) {
            if (this.hasCssClass(elements[i], css_class) || css_class == "" || css_class == null) {
                child_elements.push(elements[i]);
            }
        }
        return child_elements;
	},
	hasCssClass: function(o, css_class) {
	    return o.className.match(new RegExp("\\b" + css_class + "\\b")) == css_class;
	}
}	

addLoadEvent(createConcertObjects);