	var map;								//Google Maps map object - the actual map
	var infoWindow;							//pop-up info window in map view

	$(document).ready(function(){

		geocoder = new google.maps.Geocoder();
		
		//37.82506,-96.289415 = Eureka, Kansas (unfortunately Jericho, KS doesn't exist :)
		var mapCenterLatLng = new google.maps.LatLng(37.82506,-96.289415);
		var mapOptions = {
			zoom: 4,
			center: mapCenterLatLng,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			scrollwheel: false,
			mapTypeControl: false,
			streetViewControl: true,
            navigationControl: true,
            navigationControlOptions: {style: google.maps.NavigationControlStyle.ZOOM_PAN}
        }			
		map = new google.maps.Map(document.getElementById("mapCanvas"), mapOptions);

        infoWindow = new google.maps.InfoWindow({
            content: " ",
			maxWidth: 500
        });
        
        //add markers
        var len=courseMarkers.length;
        for(var i=0;i<len;i++){
        	//alert(courseMarkers[i]);
        	addMarker(i,courseMarkers[i]);
        }

        $('#mapToggle').click(function(){
        	$('#mapCanvas').toggle();        
        }); 
		
	});

	function isArray(obj) {
		return obj.constructor == Array;
	}
	
	//ADDMARKER pulls geocoder data and adds markers
	function addMarker(i,markerData) {
		
		var address='';
		var latLon='';
		var infoWindowHTML='';
		
    	/* multiple seminars per venue can exist, "::" delimited */
    	if(markerData.indexOf('::')>-1){
    		//Multiple seminars at this venue location
    		var markers = markerData.split('::');
    		if (isArray(markers)){
    			for(var mi=0; mi < markers.length; mi++){
    				var mData = markers[mi].split('|');
    				if(address==''){
    	    			address = mData[3];//use address from first seminar entry
    				}
    				if(latLon==''){
    					latLon = mData[4];//use latlon from first seminar entry
    				}
    				infoWindowHTML += '<div class="seminar" style="margin:0px 10px 5px 0px;padding:10px;background-color:#f2f2f2;"><h3>'+mData[2]+'</h3><p>'+mData[5]+'</p><p>'+mData[3]+'</p><p><a href="/catalog/view/'+mData[1]+'/'+mData[0]+'">View Details</a></p></div>';
    			}
    		}
    	}else{
    		//Single seminar at this location
    		//split into array:	0 = sku num, 1 = group num, 2 = course name, 3 = address, 4 = course date
    		mData = markerData.split('|');
    		address = mData[3];
    		latLon = mData[4];
			infoWindowHTML = '<div class="seminar"><h3>'+mData[2]+'</h3><p>'+mData[5]+'</p><p>'+mData[3]+'</p><p><a href="/catalog/view/'+mData[1]+'/'+mData[0]+'">View Details</a></p></div>';
    	}
    	infoWindowHTML = '<div class="infoWinSeminars" id="iw'+i+'" style="margin-top:15px;width:400px;height:240px;overflow-x:none;overflow-y:auto;">'+infoWindowHTML+'</div>';
    						
    	var image = new google.maps.MarkerImage('/images/ui/resflag.png',
                new google.maps.Size(30,34),    //flag marker size
                new google.maps.Point(0,0),     //origin for image is 0,0
                new google.maps.Point(0,34)     //anchor point is bottom of flag pole at 0,34
        );
    	var shadow = new google.maps.MarkerImage('/images/ui/shadow-resflag.png',
                new google.maps.Size(48,34)
        );

    	if(latLon != ''){
        	//plot marker by lat lon
    		latLon.replace(/ /g,"");
    		var aryLatLon = latLon.split(',');
    		if(isArray(aryLatLon)){    			
    			var latLonMarker = new google.maps.Marker({
    				position: new google.maps.LatLng(aryLatLon[0],aryLatLon[1]),
    				map: map,
    				shadow: shadow,
    				icon: image,
    				content: infoWindowHTML
    			});
    			google.maps.event.addListener(latLonMarker, 'click', function() {
    				infoWindow.setContent($(this.content)[0]);
    				infoWindow.open(map,this);
    			});    			
    		}
    	}else if(address != ''){
    		//plot marker by geocoding    		
    		var lookupAddress = address.replace(/<br \/>|<br\/>/gi,"");//remove HTML break tags from address for Google maps geocoding
    		geocoder.geocode( { 'address': lookupAddress}, function(results, status) {
    			if (status == google.maps.GeocoderStatus.OK) {
    				var geocodeMarker = new google.maps.Marker({
    					position: results[0].geometry.location,
    					map: map,
    					shadow: shadow,
    					icon: image,
    					content: infoWindowHTML
    				});
    				google.maps.event.addListener(geocodeMarker, 'click', function() {
    					infoWindow.setContent($(this.content)[0]);
    					infoWindow.open(map,this);
    				});
    			}
    		});
    	}else{
    		alert('Cannot plot: '+markerData);
    	}
	}
	function trim(str) {
	    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
	}

	function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}

