var map;
var _mFlags = {};

var points = [];
var gmarkers = [];
var allTypes = { 'All':[] };
var whichAd = 0;

// For sync - solving the multi-thread and GO issue
var gPROPERTIES_LOADED = false;
var gFIRST_TIME = true;
	
    var refresh = true;
    var lastswlat = 0;
    var lastswlong = 0;
    var lastnelat = 0;
    var lastnelong = 0;

    var i = 0;
    var bi = 0;
    var ri = 0;
    var hi = 0;
    var fi = 0;

    var aiconURL = [];
    aiconURL['Restaurant'] = "icons/GreenIcons/";
    aiconURL['BB'] = "icons/RedIcons/";
    aiconURL['Hotel'] = "icons/BlueIcons/";
    aiconURL['Events'] = "icons/YellowIcons/";
                
    var restauranticonurl = "icons/GreenIcons/";
    var bbiconurl = "icons/RedIcons/";
    var hoteliconurl = "icons/BlueIcons/";
    var Eventsiconurl = "icons/YellowIcons/";
    
var baseIcon = null;

var deselectCurrent = function() {};


$(document).ready(function() {
	
    $("#go").click (function () {
      var state = $("#state").val();
      var city = $("#city").val();
      var cat = $("#cat").val();
      
      var url = "getmapdata.php?search=data&state=" + state + "&city=" + city + "&cat=" + cat;
      loadDataFrom3(url);
    
    });

	if (gfix != "1") {
		$('#state').linkedSelect('getmapdata.php?search=city','#city',{firstOption: 'Please Select A City', forValue: gstate, defaultValue: '"' + gcity + '"'});		
		$('#city').linkedSelect('getmapdata.php?search=cat' ,'#cat',{firstOption: 'Please Select A Category', forValue: gcity + "-" + gstate, defaultValue: gcat, trigger: 'true'});      			
	} else {
		$('#state').linkedSelect('getmapdata.php?search=city&cat=' + gcat,'#city',{firstOption: 'Please Select A City', forValue: gstate, defaultValue: gcity, trigger: 'true'});		
	}
	
	$("#state").val(gstate);
	$("#state").trigger('change');

    init();
});


function init() {
	var type;

    if (GBrowserIsCompatible()) {
	
/*    	document.getElementById('button-sidebar-hide').onclick = function() { return changeBodyClass('sidebar-right', 'nosidebar'); };
    	document.getElementById('button-sidebar-show').onclick = function() { return changeBodyClass('nosidebar', 'sidebar-right'); };
*/    	
    	handleResize();

    	map = new GMap(document.getElementById("map"));
        map.addControl(new GScaleControl());
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        
        map.addControl(new PromoControl('http://www.maine.info'));
        
        map.enableDoubleClickZoom();
        map.enableScrollWheelZoom();                                
    	map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);

        GEvent.addListener(map, "click", function(overlay, point) {
          if (overlay) {	// marker clicked
            if (overlay.html) {
                overlay.openInfoWindowHtml(overlay.html, {maxUrl:"getmapdata.php?search=maxurl&index=" + overlay.index + "&id=" + overlay.id + "&type=" + overlay.type});	// open InfoWindow              
            }
          } else if (point) {	// background clicked
              
          }
        });

/*
        GEvent.addListener(map,'zoomend',function() {
            if (refresh == true)
                loadData();
        });
        GEvent.addListener(map,'dragend',function() {
            loadData();
        });
*/    
        // Create a base icon for all of our markers that specifies the
        // shadow, icon dimensions, etc.
        baseIcon = new GIcon();
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        baseIcon.infoShadowAnchor = new GPoint(18, 25);

//        loadDataFrom('getHotels.php?' + "type=" + gtype + "&city=" + gcity + "&state=" + gstate, true);
    
    	changeBodyClass('loading', 'standby');
	} else {
          alert("Sorry, the Google Maps API is not compatible with this browser");
    }
	
}


function loadDataFrom3(url) {
    gPROPERTIES_LOADED = false;
    cleanMap();
    //retrieve the points using Ajax
    var request = GXmlHttp.create();
    request.open('GET', url);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            var jscript = request.responseText;
            points = [];
            eval(jscript);
            //create each point from the list
            for (j in points) {
                var marker = createMarker(points[j], points[j].type);
//    		    allTypes[points[j].type] = true;                
            }
            
            if (points.length > 0) {
                map.panTo(new GLatLng(points[0].lat, points[0].lng));
            }

            changeBodyClass('loading', 'standby');
            plotMarkers();
            
            gPROPERTIES_LOADED = true; //For Sync
//GLog.write("From properties " + gPROPERTIES_LOADED);                        
        }
    }
    request.send(null);
}


// A function to create the marker and set up the event window
function createMarker(loc, type) {

    var to_html;
    var from_html;
    var iconurl = "";
    var icon = new GIcon(baseIcon);
    var point = new GLatLng(loc.lat, loc.lng);
    
    switch(type) {
        case "BB": 
            iconurl = bbiconurl + "marker.png";
            break;        
        case "Restaurant":
            iconurl = restauranticonurl + "marker.png";        
            break;
        case "Hotel":
            iconurl = hoteliconurl + "marker.png";
            break;
        case "Festivals":
        case "Theater":
        case "Music":
        case "Art":
        case "Other":
        case "Biking":
        case "Running":
        case "Quilt Shows":
        case "Craft Shows":
        case "Water Sports":
        case "Shopping":
            iconurl = Eventsiconurl + "marker.png";        
            break;    
        default:
            iconurl = "";        
        break;
    }

  if (iconurl == "") {
    var marker = new GMarker(point);  
  } else {
    icon.image = iconurl;
    var marker = new GMarker(point, icon);
  }
  
  var html = '<div class = "infowin">';
  
    if (loc.imageurl.length > 5) {
        if (loc.imageurl.indexOf('http://') ==  -1)
           loc.imageurl = "http://" + loc.imageurl;
          
        html += '<img src = "' + loc.imageurl + '" />'; 
    }
    
    html += '<strong>' + loc.name + '</strong>';
    
    if (loc.hasOwnProperty('date')) {
      html += '<span>' + loc.date + '</span>';    
    }
    
    html += '<span> &nbsp; </span>';    
    html += '<span>' + loc.address + '</span>';
    html += '<span>' + loc.city + ', ' + loc.state + '</span>'
    html += '<span>' + loc.phone + '</span>';
    html += '<span> &nbsp; </span>';
    html += '<span><a href = "javascript:map.getInfoWindow().maximize();">More Info</a></span>';
    html += '<span> &nbsp; </span>';
            
    // The info window version with the "to here" form open
    to_html = html + 'Directions: <span>To Here - <a href="javascript:fromhere(' + i + ')">From Here</a></span>' +
       '<form action="http://maps.google.com/maps" method="get" target="_blank">' +
       '<span>Start address:' +
       '<input type="text" size = "25" maxlength = "40" name="saddr" id="saddr" value="" /></span>' +
       '<input type="hidden" name="daddr" id = "daddr" value="' + loc.address + ',' + loc.city + ',' + loc.state + '" />' +
       '<span><input type="submit" value="Get Directions" /></span>' +
       '</form></div>';

    // The info window version with the "to here" form open
    from_html = html + 'Directions: <span><a href="javascript:tohere(' + i + ')">To Here</a> - From Here</span>' +
       '<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
       '<span>End address:' +
       '<input type="text" size = "25" maxlength = "40" name="daddr" id="daddr" value="" /></span>' +
       '<input type="hidden" name="saddr" id = "saddr" value="' + loc.address + ',' + loc.city + ',' + loc.state + '" />' + 
       '<span><input type="submit" value="Get Directions" /></span>' +
       '</form></div>';

    // The inactive version of the direction info
    html = html + 'Directions: <span><a href="javascript:tohere(' + i + ')">To Here</a> - <a href="javascript:fromhere(' + i + ')">From Here</a></span></div>';
    
//    var side_bar_html = '<img src="' + iconurl + '" align = "middle" /> <a href="javascript:myclick(' + i + ')">' + loc.name + '</a><br>' + loc.address;

  var disAddress = (jQuery.trim(loc.address) == "") ? "" : (loc.address + ", ");
  
  if (iconurl == "") {
    var side_bar_html = '<img src="icons/marker.png" align = "middle" class="iconimage" /> <strong>';  
  } else {
    var side_bar_html = '<img src="' + iconurl + '" align = "middle" class="iconimage" /> <strong>';
  }
  
  side_bar_html +=  loc.name + ' </strong>' ;
  
  if (loc.hasOwnProperty('date')) {
    side_bar_html += '<span>Date: ' + loc.date + '</span>';    
  }
  
  side_bar_html += '<span>Place: ' + disAddress + loc.city + '</span>';

    marker.html = html;
    marker.toHtml = to_html;
    marker.fromHtml = from_html;
    marker.sidebarHtml = side_bar_html;
    marker.index = i;
    marker.type = type;
    marker.id = loc.id;
	marker.address = loc.address;
	marker.city = loc.city;
	marker.state = loc.state;

    var listItem = createSidebar (marker.index, marker.sidebarHtml);
    
    marker.listItem = listItem;

    marker.show = function () {
//GLog.write(this.type + " Marker " + this.index + " added");
        this.displayed = 1;        
        map.addOverlay(this);
	    document.getElementById('sidebar-list').appendChild(listItem);
    }

    marker.hide = function () {
//GLog.write(this.type + " Marker " + this.index + " removed");    
        this.displayed = 0;
        map.removeOverlay(this);
        
        if (listItem.parentNode == document.getElementById('sidebar-list')) {
	       document.getElementById('sidebar-list').removeChild(listItem);
        }
    }

    switch (type) {
        case "BB":
            marker.typeIndex = bi;
            bi++;
            break;
        
        case "Restaurant":            
            marker.typeIndex = ri;        
            ri++;
            break;

        case "Hotel":            
            marker.typeIndex = hi;        
            hi++;
            break;
            
        default:
           
           break;     
    }

    marker.displayed = 0;
    gmarkers[i] = marker;
    i++;
    return marker;
}

function plotMarkers() {
    for (id in gmarkers) {
        gmarkers[id].show();    
    }
}

function createSidebar (index, sidebarHtml) {
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));
	listItemLink.href = "#";
//    	listItemLink.innerHTML = '<strong>' + pointData.address + ' </strong><span>' + pointData.city + ', ' + pointData.state + ' (' + pointData.height + ')</span>';
	listItemLink.innerHTML = sidebarHtml;

	var focusPoint = function() {
		deselectCurrent();
		listItem.className = 'current';
		deselectCurrent = function() { listItem.className = ''; }
        showInfo(index);
		return false;
	}

    listItemLink.onclick = focusPoint; 
    return listItem;

}
window.onresize = handleResize;
/*
window.onload = function () {
    init();
}
*/
window.onunload = function () {
    GUnload();
}


// This function picks up the click and opens the corresponding info window
function showInfo(in1) {
  gmarkers[in1].openInfoWindowHtml(gmarkers[in1].html, {maxUrl:"getmapdata.php?search=maxurl&index=" + in1 + "&id=" + gmarkers[in1].id + "&type=" + gmarkers[in1].type});
}

// functions that open the directions forms
function tohere(in1) {
    if (gmarkers[in1].type == "Events") {
      gmarkers[in1].openInfoWindowHtml(gmarkers[in1].toHtml, {maxUrl:"getmapdata.php?search=maxurl&index=" + in1 + "&id=" + gmarkers[in1].id + "&type=" + gmarkers[in1].type});    
    } else {
      gmarkers[in1].openInfoWindowHtml(gmarkers[in1].toHtml);    
    }
}

function fromhere(in1) {
    if (gmarkers[in1].type == "Events") {
      gmarkers[in1].openInfoWindowHtml(gmarkers[in1].fromHtml, {maxUrl:"getmapdata.php?search=maxurl&index=" + in1 + "&id=" + gmarkers[in1].id + "&type=" + gmarkers[in1].type});    
    } else {
      gmarkers[in1].openInfoWindowHtml(gmarkers[in1].fromHtml);    
    }
}

function cleanMap() {

//    document.getElementById('filters').innerHTML = "<li>Show:</li>";
    allTypes = { 'All':[] };
        
    map.closeInfoWindow();
    for (id in gmarkers) {
        gmarkers[id].hide();
    }    
    gmarkers = [];
    i = 0;
    bi = 0;
    hi = 0;
    fi = 0;
    ri = 0;
}

//common Functions

function windowHeight() {
	// Standard browsers (Mozilla, Safari, etc.)
	if (self.innerHeight)
		return self.innerHeight;
	// IE 6
	if (document.documentElement && document.documentElement.clientHeight)
		return document.documentElement.clientHeight;
	// IE 5
	if (document.body)
		return document.body.clientHeight;
	// Just in case.
	return 0;
}

function handleResize() {
	var height = windowHeight() - document.getElementById('toolbar').offsetHeight - 30;
	document.getElementById('map').style.height = height + 'px';
	document.getElementById('sidebar').style.height = height + 'px';
}

function changeBodyClass(from, to) {
	document.body.className = document.body.className.replace(from, to);
	return false;
}

// Promo Control. 221  - Begin
var PromoControl = function(url) {
    this.url_ = url;
};

PromoControl.prototype = new GControl(true);

PromoControl.prototype.initialize = function(map) {
    var container = document.createElement("div");
    container.innerHTML = '<img style="cursor:pointer" src="http://www.maine.info/webshot/maineinfo60x30webshot.jpg" border="0">';
    container.style.width='60px';
    container.style.height='30px';
    url = this.url_;
    
    GEvent.addDomListener(container, "click", function() {
        document.location = url;
    });
    
    map.getContainer().appendChild(container);
    return container;
};

PromoControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(200, 0));
};

// Promo Control. 221  - End


var secondtab = {};

function get_to_html(in1) {
return 'Directions: <span>To here - <a href="javascript:from(' + in1 + ')">From here</a></span>' +
       '<form action="http://maps.google.com/maps" method="get" target="_blank">' + 
       '<span>Start address:' +
       '<input type="text" size = "25" maxlength = "40" name="saddr" id="saddr" value="" /></span>' +
       '<input type="hidden" name="daddr" value="' + gmarkers[in1].address + ', ' + gmarkers[in1].city + ', ' + gmarkers[in1].state + '"/>' + 
       '<span><INPUT value="Get Directions" TYPE="SUBMIT"></span>' +
       '</form>';

}
       
    // The info window version with the "to here" form open
function get_from_html (in1) {

return 'Directions: <span><a href="javascript:to(' + in1 +')">To here</a> - From here</span>' +
       '<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
       '<span>End address:' +
       '<input type="text" size = "25" maxlength = "40" name="daddr" id="daddr" value="" /></span>' +
       '<input type="hidden" name="saddr" value="' + gmarkers[in1].address + ', ' + gmarkers[in1].city + ', ' + gmarkers[in1].state + '"/>' +       
       '<span><INPUT value="Get Directions" TYPE="SUBMIT"></span>' +
       ' </form>';
}		

function from(in1) {
	document.getElementById("directions").innerHTML = get_from_html (in1);
//	document.getElementById("directions").innerHTML = gmarkers[i].from_html;
}

function to(in1) {
	document.getElementById("directions").innerHTML = get_to_html(in1);
}

function rotateAds() {
        document.getElementById('ads').innerHTML = "<iframe id='ae028dc6' name='ae028dc6' src='http://www.maine.info/openads/www/delivery/afr.php?n=ae028dc6&amp;zoneid=3' framespacing='0' frameborder='no' scrolling='no' width='300' height='250'><a href='http://www.maine.info/openads/www/delivery/ck.php?n=adec8cb3&amp;cb=INSERT_RANDOM_NUMBER_HERE' target='_blank'><img src='http://www.maine.info/openads/www/delivery/avw.php?zoneid=3&amp;n=adec8cb3' border='0' alt='' /></a></iframe>";

/*        
    if (whichAd == 0) {
//        document.getElementById('ads').innerHTML = '<a href = "http://www.maine.info/hosting.html" ><img src = "http://www.maine.info/webshot/maineinfo-hosting.jpg" /> </a>';
        document.getElementById('ads').innerHTML = '<a href = "http://www.philpoirier.com/web/"  ><img src = "http://www.maine.info/webshot/poirier-webdesign.jpg" /> </a>';
        whichAd = 1;
    } else {
        document.getElementById('ads').innerHTML =
            '<iframe src="http://view.atdmt.com/DEN/iview/mnnfxhfs0190000007den/direct/01?click=" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" width="300" height="250">' +
            '<script language="JavaScript" type="text/javascript">' +
            'document.write(\' + <a href="http://clk.atdmt.com/DEN/go/mnnfxhfs0190000007den/direct/01/" target="_blank"><img src="http://view.atdmt.com/DEN/view/mnnfxhfs0190000007den/direct/01/"/></a>\');' +
            '</script><noscript><a href="http://clk.atdmt.com/DEN/go/mnnfxhfs0190000007den/direct/01/" target="_blank"><img border="0" src="http://view.atdmt.com/DEN/view/mnnfxhfs0190000007den/direct/01/" /></a></noscript></iframe>';
        whichAd = 0;
    }
*/
}

// Not used ---------------------------------------------------------------------

function initializePoint(pointData) {
	var point = new GLatLng(pointData.latitude, pointData.longitude);
	var marker = new GMarker(point);
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));
	var visible = false;

	listItemLink.href = "#";
	listItemLink.innerHTML = '<strong>' + pointData.address + ' </strong><span>' + pointData.city + ', ' + pointData.state + ' (' + pointData.height + ')</span>';
	
	var focusPoint = function() {
		deselectCurrent();
		listItem.className = 'current';
		deselectCurrent = function() { listItem.className = ''; }
		marker.openInfoWindowHtml(pointData.address);
		map.panTo(point);
		return false;
	}

	GEvent.addListener(marker, 'click', focusPoint);	
	listItemLink.onclick = focusPoint;

	pointData.show = function() {
		if (!visible) {
			document.getElementById('sidebar-list').appendChild(listItem);
			map.addOverlay(marker);
			visible = true;
		}
	}
	pointData.hide = function() {
		if (visible) {
			document.getElementById('sidebar-list').removeChild(listItem);
			map.removeOverlay(marker);
			visible = false;
		}
	}

	pointData.show();
}

//State city drop down change

function handleCityChange() {
    var estate = document.getElementById('state');
    var ecity =  document.getElementById('city');
    var vstate = estate.options[estate.selectedIndex].value; 
    var vcity = ecity.options[ecity.selectedIndex].value;
    if (vcity == "-1") {
        alert ("Please select a city.");
        return false;
    }
    
    gstate = vstate;
    gcity  = vcity;
    
    changeBodyClass('standby', 'loading');        
    //remove the existing points
    cleanMap();
    
    loadDataFrom('getHotels.php?' + "type=" + gtype + "&city=" + vcity + "&state=" + vstate, true );
//GLog.writeUrl('getHotels.php?' + "type=" + aloadTypes[k] + "&city=" + vcity + "&state=" + vstate );                        

    rotateAds();    
}
function initializeSortTab(type) {
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));

/*    if (type == "All") {
	   listItemLink.innerHTML = type;    
    } else {
	   	listItemLink.innerHTML = '<img src = "' + aiconURL[type] + 'marker.png" align = "middle" class = "iconimage" />' + type;    
    }
*/
	listItemLink.href = "#";
    listItemLink.innerHTML = type;
	listItemLink.onclick = function() {
		changeBodyClass('standby', 'loading');

		for(id in gmarkers) {
			if (gmarkers[id].type == type || 'All' == type) {
                if (gmarkers[id].displayed == 0 ) {
				    gmarkers[id].show();                
                }            
            } else {
                if (gmarkers[id].displayed == 1) {            
				    gmarkers[id].hide();
                }            
            }
		}

		changeBodyClass('loading', 'standby');

		return false;
	}

	document.getElementById('filters').appendChild(listItem);
}

function loadData() {

    //create the boundary for the data
    var bounds = map.getBounds();
    var mapsw = bounds.getSouthWest();
    var mapne = bounds.getNorthEast();
    var mapswlat = mapsw.lat();
    var mapswlong = mapsw.lng();
    var mapnelat = mapne.lat();
    var mapnelong = mapne.lng();
    var centerlat = map.getCenter().lat();
    
    var dataswlat = mapswlat - (mapnelat-mapswlat)/2;
    var dataswlong = mapswlong - (mapnelong-mapswlong)/2;
    var datanelat = mapnelat + (mapnelat-mapswlat)/2;
    var datanelong = mapnelong + (mapnelong-mapswlong)/2;

    if (refresh || mapswlat < lastswlat || mapswlong < lastswlong || mapnelat > lastnelat || mapnelong > lastnelong) {
        lastswlat = dataswlat;
        lastswlong = dataswlong;
        lastnelat = datanelat;
        lastnelong = datanelong;

        changeBodyClass('standby', 'loading');        
        //remove the existing points
        cleanMap();

        var getVars = "swlat=" + dataswlat + "&swlng=" + dataswlong + "&nelat=" + datanelat + "&nelng=" + datanelong + "&centerlat=" + centerlat;

       loadDataFrom('getHotels.php?' + getVars + "&type=" + gtype + "&city=" + gcity + "&state=" + gstate , false);
//GLog.writeUrl('getHotels.php?' + getVars + "&type=" + aloadTypes[k] + "&city=" + gcity + "&state=" + gstate );                        

        refresh = false;
    }
}

function loadDataFrom(url, moveMap) {
    gPROPERTIES_LOADED = false;

    if (gtype.substr(8, 1) == "1") {
        loadEventsData(moveMap);
    }

    //retrieve the points using Ajax
    var request = GXmlHttp.create();
    request.open('GET', url);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            var jscript = request.responseText;
            points = [];
            eval(jscript);
            //create each point from the list
            for (j in points) {
                var marker = createMarker(points[j], points[j].type);
    		    allTypes[points[j].type] = true;                
            }

            if (moveMap == true && points.length > 0) {
                map.panTo(new GLatLng(points[0].lat, points[0].lng));
//                refresh = false;
//                map.setZoom(6);
//                refresh = true;
            }

        	for(type in allTypes) {
        		initializeSortTab(type);
        	}
            
            changeBodyClass('loading', 'standby');
            plotMarkers();
            
            gPROPERTIES_LOADED = true; //For Sync
//GLog.write("From properties " + gPROPERTIES_LOADED);                        
        }
    }
    request.send(null);
}

function loadEventsData(moveMap) {

    var Eventsdataurl = "getFestivals.php?state=" + gstate + "&city=" + gcity;
    //retrieve the points using Ajax
    var request = GXmlHttp.create();
    request.open('GET', Eventsdataurl);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            var jscript = request.responseText;
            points = [];
            eval(jscript);

            //create each point from the list
            for (j in points) {
                var marker = createEventsMarker(points[j]);
            }
            
            if (points.length > 0) {
                allTypes['Events'] = true;
                if (moveMap == true) {
                   map.panTo(new GLatLng(points[0].lat, points[0].lng));
                }
            }

//GLog.write(gPROPERTIES_LOADED);
            if (gPROPERTIES_LOADED == true && points.length > 0) {
                initializeSortTab('Events');
                changeBodyClass('loading', 'standby');                            
            }
            plotMarkers();
        }
    }
    request.send(null);
}

// A function to create the marker and set up the event window
function createEventsMarker(loc) {

    var to_html;
    var from_html;
    var icon = new GIcon(baseIcon);
    var point = new GLatLng(loc.lat, loc.lng);
    
    var iconurl = Eventsiconurl + "marker" + ((fi > 98)? ("") : (fi + 1)) + ".png";

    icon.image = iconurl;
    var marker = new GMarker(point, icon);

    var html = '<div class = "infowin">';

    if (loc.linkurl.length > 5) {
        var titletext = '<strong><a href = "' + loc.linkurl + '" >' + loc.title + '</a></strong>';
    } else {
        var titletext = '<strong>' + loc.title + '</strong>';    
    }
    
    if (loc.photourl1.length > 5) {
       html += '<img src = "' + loc.photourl1 + '" />';
    }

    html +=  titletext ;    
        
/*        
    if (loc.startdate == loc.enddate) {
        html += '<span>' + loc.city + ', ' +  loc.startdate  + '</span>';        
    } else {    
        html += '<span>' + loc.city + ', ' +  loc.startdate + ' to ' + loc.enddate + '</span>';
    }
*/    
        html += '<span>' + loc.city + ', ' +  loc.date + '</span>';
        
        
//    html += '<span>' + loc.description + '</span>';
      html += '<span><a href = "javascript:map.getInfoWindow().maximize();">more info</a></span>';

    // The info window version with the "to here" form open
    to_html = html + '<strong>Directions: </strong><span><b>To here</b> - <a href="javascript:fromhere(' + i + ')"><b>From here</b></a></span>' +
       '<form action="http://maps.google.com/maps" method="get" target="_blank">' + 
       '<span>Start address:' +
       '<input type="text" size = "25" maxlength = "40" name="saddr" id="saddr" value="" /></span>' +
       '<input type="hidden" name="daddr" value="' + loc.address + ',' + loc.city + ',' + loc.state + '"/>' + 
       '<span><INPUT value="Get Directions" TYPE="SUBMIT"></span>' +
       '</form></div>';
       
    // The info window version with the "to here" form open
    from_html = html + '<strong>Directions: </strong><span><a href="javascript:tohere(' + i + ')"><b>To here</b></a> - <b>From here</b></span>' +
       '<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
       '<span>End address:' +
       '<input type="text" size = "25" maxlength = "40" name="daddr" id="daddr" value="" /></span>' +
       '<input type="hidden" name="saddr" value="' + loc.address + ',' + loc.city + ',' + loc.state + '"/>' +       
       '<span><INPUT value="Get Directions" TYPE="SUBMIT"></span>' +
       ' </form> </div>';

    // The inactive version of the direction info
    html = html + '<strong>Directions: </strong><span><a href="javascript:tohere(' + i + ')"><b>To here<b></a> - <a href="javascript:fromhere(' + i + ')"><b>From here</b></a></span></div>';
    
//    var side_bar_html = '<img src="' + iconurl + '" align = "middle" /> <a href="javascript:myclick(' + i + ')">' + loc.name + '</a><br>' + loc.address;
    var side_bar_html = '<img src="' + iconurl + '" align = "middle" class="iconimage" /> <strong>' + loc.title + ' </strong><span>' + loc.city + ', ' + loc.date; 

/*    if (loc.startdate != loc.enddate) {
        side_bar_html +=  ' to ' + loc.enddate ;
    }
*/    
    side_bar_html += '</span>';
    
    marker.html = html;
    marker.toHtml = to_html;
    marker.fromHtml = from_html;
    marker.sidebarHtml = side_bar_html;
    marker.index = i;
    marker.type = "Events";
    marker.id = loc.id;
    marker.address = loc.address;
    marker.city = loc.city;
    marker.state = loc.state;        

    var listItem = createSidebar (marker.index, marker.sidebarHtml);
    
    marker.listItem = listItem;

    marker.show = function () {
//GLog.write(this.type + " Marker " + this.index + " added");
        this.displayed = 1;        
        map.addOverlay(this);
	    document.getElementById('sidebar-list').appendChild(listItem);
    }

    marker.hide = function () {
//GLog.write(this.type + " Marker " + this.index + " removed");    
        this.displayed = 0;
        map.removeOverlay(this);
        if (listItem.parentNode == document.getElementById('sidebar-list')) {        
	       document.getElementById('sidebar-list').removeChild(listItem);
        }
    }

    marker.typeIndex = fi;        
    fi++;

    marker.displayed = 0;
    gmarkers[i] = marker;
    i++;
    return marker;
}


