// Create a JSON2 object only if one does not already exist. We create the // methods in a closure to avoid creating global variables. var JSON2; if (!JSON2) { JSON2 = {}; } (function () { "use strict"; function f(n) { // Format integers to have at least two digits. return n < 10 ? '0' + n : n; } if (typeof Date.prototype.toJSON2 !== 'function') { Date.prototype.toJSON2 = function (key) { return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z' : null; }; String.prototype.toJSON2 = Number.prototype.toJSON2 = Boolean.prototype.toJSON2 = function (key) { return this.valueOf(); }; } var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = { // table of character substitutions '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' }, rep; function quote(string) { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. escapable.lastIndex = 0; return escapable.test(string) ? '"' + string.replace(escapable, function (a) { var c = meta[a]; return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }) + '"' : '"' + string + '"'; } function str(key, holder) { // Produce a string from holder[key]. var i, // The loop counter. k, // The member key. v, // The member value. length, mind = gap, partial, value = holder[key]; // If the value has a toJSON2 method, call it to obtain a replacement value. if (value && typeof value === 'object' && typeof value.toJSON2 === 'function') { value = value.toJSON2(key); } // If we were called with a replacer function, then call the replacer to // obtain a replacement value. if (typeof rep === 'function') { value = rep.call(holder, key, value); } // What happens next depends on the value's type. switch (typeof value) { case 'string': return quote(value); case 'number': // JSON2 numbers must be finite. Encode non-finite numbers as null. return isFinite(value) ? String(value) : 'null'; case 'boolean': case 'null': // If the value is a boolean or null, convert it to a string. Note: // typeof null does not produce 'null'. The case is included here in // the remote chance that this gets fixed someday. return String(value); // If the type is 'object', we might be dealing with an object or an array or // null. case 'object': // Due to a specification blunder in ECMAScript, typeof null is 'object', // so watch out for that case. if (!value) { return 'null'; } // Make an array to hold the partial results of stringifying this object value. gap += indent; partial = []; // Is the value an array? if (Object.prototype.toString.apply(value) === '[object Array]') { // The value is an array. Stringify every element. Use null as a placeholder // for non-JSON2 values. length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value) || 'null'; } // Join all of the elements together, separated with commas, and wrap them in // brackets. v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']'; gap = mind; return v; } // If the replacer is an array, use it to select the members to be stringified. if (rep && typeof rep === 'object') { length = rep.length; for (i = 0; i < length; i += 1) { k = rep[i]; if (typeof k === 'string') { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ': ' : ':') + v); } } } } else { // Otherwise, iterate through all of the keys in the object. for (k in value) { if (Object.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ': ' : ':') + v); } } } } // Join all of the member texts together, separated with commas, // and wrap them in braces. v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}'; gap = mind; return v; } } // If the JSON2 object does not yet have a stringify method, give it one. if (typeof JSON2.stringify !== 'function') { JSON2.stringify = function (value, replacer, space) { // The stringify method takes a value and an optional replacer, and an optional // space parameter, and returns a JSON2 text. The replacer can be a function // that can replace values, or an array of strings that will select the keys. // A default replacer method can be provided. Use of the space parameter can // produce text that is more easily readable. var i; gap = ''; indent = ''; // If the space parameter is a number, make an indent string containing that // many spaces. if (typeof space === 'number') { for (i = 0; i < space; i += 1) { indent += ' '; } // If the space parameter is a string, it will be used as the indent string. } else if (typeof space === 'string') { indent = space; } // If there is a replacer, it must be a function or an array. // Otherwise, throw an error. rep = replacer; if (replacer && typeof replacer !== 'function' && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { throw new Error('JSON2.stringify'); } // Make a fake root object containing our value under the key of ''. // Return the result of stringifying the value. return str('', {'': value}); }; } // If the JSON2 object does not yet have a parse method, give it one. if (typeof JSON2.parse !== 'function') { JSON2.parse = function (text, reviver) { // The parse method takes a text and an optional reviver function, and returns // a JavaScript value if the text is a valid JSON2 text. var j; function walk(holder, key) { // The walk method is used to recursively walk the resulting structure so // that modifications can be made. var k, v, value = holder[key]; if (value && typeof value === 'object') { for (k in value) { if (Object.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } } return reviver.call(holder, key, value); } // Parsing happens in four stages. In the first stage, we replace certain // Unicode characters with escape sequences. JavaScript handles many characters // incorrectly, either silently deleting them, or treating them as line endings. text = String(text); cx.lastIndex = 0; if (cx.test(text)) { text = text.replace(cx, function (a) { return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }); } // In the second stage, we run the text against regular expressions that look // for non-JSON2 patterns. We are especially concerned with '()' and 'new' // because they can cause invocation, and '=' because it can cause mutation. // But just to be safe, we want to reject all unexpected forms. // We split the second stage into 4 regexp operations in order to work around // crippling inefficiencies in IE's and Safari's regexp engines. First we // replace the JSON2 backslash pairs with '@' (a non-JSON2 character). Second, we // replace all simple value tokens with ']' characters. Third, we delete all // open brackets that follow a colon or comma or that begin the text. Finally, // we look to see that the remaining characters are only whitespace or ']' or // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. if (/^[\],:{}\s]*$/ .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { // In the third stage we use the eval function to compile the text into a // JavaScript structure. The '{' operator is subject to a syntactic ambiguity // in JavaScript: it can begin a block or an object literal. We wrap the text // in parens to eliminate the ambiguity. j = eval('(' + text + ')'); // In the optional fourth stage, we recursively walk the new structure, passing // each name/value pair to a reviver function for possible transformation. return typeof reviver === 'function' ? walk({'': j}, '') : j; } // If the text is not JSON2 parseable, then a SyntaxError is thrown. throw new SyntaxError('JSON2.parse'); }; } }()); //add contains function in Array Array.prototype.contains = function(obj) { var i = this.length; while (i--) { if (this[i] === obj) { return true; } } return false; } Array.prototype.max = function() { var max = parseFloat(this[0]); var len = this.length; for (var i = 1; i < len; i++) if (parseFloat(this[i]) > max) max = parseFloat(this[i]); return max; } Array.prototype.min = function() { var min = parseFloat(this[0]); var len = this.length; for (var i = 1; i < len; i++) if (parseFloat(this[i]) < min) min = parseFloat(this[i]); return min; } window.net=window.net||{}; net.imapbuilder=net.imapbuilder||{}; net.imapbuilder.gmap=net.imapbuilder.gmap||{}; var map; var markers=[]; var labels=[]; var images=[]; var polylines=[]; var polygons=[]; var rectangles=[]; var circles=[]; var routes=[]; var current_route = 0; var route_count = 0 ; var map_geocoder; var markerCluster; var crowdMarkers=[]; var crowdMarkersId=0; var crowdMarkersData = [] ; //information box var gmap_locationdetails; var modal_div; var crowdForm_div; var markerID; var tempMarker; var tempMarkerAni; var crowdGetLocation_div; var errorMessage_div; var infoZIndex = 0 ; var heatMapArr = []; var heatMapCon_colorRatio; var cluster_infowindow ; var cs_title = "Add a Location" ; var cs_loginas = "Login as" ; var cs_address = "Address" ; var cs_desc = "Description" ; var cs_data = "Crowdsourced data"; var clickCircle; (function(){ var g=net.imapbuilder.gmap; // shorten the code of the namespace object // icon list g.iconlist=[]; g.iconlist[1]={}; g.iconlist[1].imagew="32"; g.iconlist[1].imageh="32"; g.iconlist[1].imageox="0"; g.iconlist[1].imageoy="0"; g.iconlist[1].imageax="16"; g.iconlist[1].imageay="32"; g.iconlist[2]={}; g.iconlist[2].imagew="32"; g.iconlist[2].imageh="32"; g.iconlist[2].imageox="0"; g.iconlist[2].imageoy="0"; g.iconlist[2].imageax="16"; g.iconlist[2].imageay="32"; g.iconlist[3]={}; g.iconlist[3].imagew="32"; g.iconlist[3].imageh="32"; g.iconlist[3].imageox="0"; g.iconlist[3].imageoy="0"; g.iconlist[3].imageax="16"; g.iconlist[3].imageay="32"; g.iconlist[4]={}; g.iconlist[4].imagew="32"; g.iconlist[4].imageh="32"; g.iconlist[4].imageox="0"; g.iconlist[4].imageoy="0"; g.iconlist[4].imageax="16"; g.iconlist[4].imageay="32"; g.iconlist[5]={}; g.iconlist[5].imagew="32"; g.iconlist[5].imageh="32"; g.iconlist[5].imageox="0"; g.iconlist[5].imageoy="0"; g.iconlist[5].imageax="16"; g.iconlist[5].imageay="32"; g.iconlist[6]={}; g.iconlist[6].imagew="32"; g.iconlist[6].imageh="32"; g.iconlist[6].imageox="0"; g.iconlist[6].imageoy="0"; g.iconlist[6].imageax="16"; g.iconlist[6].imageay="32"; g.iconlist[7]={}; g.iconlist[7].imagew="32"; g.iconlist[7].imageh="32"; g.iconlist[7].imageox="0"; g.iconlist[7].imageoy="0"; g.iconlist[7].imageax="16"; g.iconlist[7].imageay="32"; g.iconlist[8]={}; g.iconlist[8].imagew="32"; g.iconlist[8].imageh="32"; g.iconlist[8].imageox="0"; g.iconlist[8].imageoy="0"; g.iconlist[8].imageax="16"; g.iconlist[8].imageay="32"; g.iconlist[9]={}; g.iconlist[9].imagew="32"; g.iconlist[9].imageh="32"; g.iconlist[9].imageox="0"; g.iconlist[9].imageoy="0"; g.iconlist[9].imageax="16"; g.iconlist[9].imageay="32"; g.iconlist[10]={}; g.iconlist[10].imagew="32"; g.iconlist[10].imageh="32"; g.iconlist[10].imageox="0"; g.iconlist[10].imageoy="0"; g.iconlist[10].imageax="16"; g.iconlist[10].imageay="32"; g.iconlist[11]={}; g.iconlist[11].imagew="32"; g.iconlist[11].imageh="32"; g.iconlist[11].imageox="0"; g.iconlist[11].imageoy="0"; g.iconlist[11].imageax="16"; g.iconlist[11].imageay="32"; g.iconlist[12]={}; g.iconlist[12].imagew="32"; g.iconlist[12].imageh="32"; g.iconlist[12].imageox="0"; g.iconlist[12].imageoy="0"; g.iconlist[12].imageax="16"; g.iconlist[12].imageay="32"; g.iconlist[13]={}; g.iconlist[13].imagew="32"; g.iconlist[13].imageh="32"; g.iconlist[13].imageox="0"; g.iconlist[13].imageoy="0"; g.iconlist[13].imageax="16"; g.iconlist[13].imageay="32"; g.iconlist[14]={}; g.iconlist[14].imagew="32"; g.iconlist[14].imageh="32"; g.iconlist[14].imageox="0"; g.iconlist[14].imageoy="0"; g.iconlist[14].imageax="16"; g.iconlist[14].imageay="32"; g.iconlist[15]={}; g.iconlist[15].imagew="32"; g.iconlist[15].imageh="32"; g.iconlist[15].imageox="0"; g.iconlist[15].imageoy="0"; g.iconlist[15].imageax="11"; g.iconlist[15].imageay="32"; g.iconlist[16]={}; g.iconlist[16].imagew="32"; g.iconlist[16].imageh="32"; g.iconlist[16].imageox="0"; g.iconlist[16].imageoy="0"; g.iconlist[16].imageax="11"; g.iconlist[16].imageay="32"; g.iconlist[17]={}; g.iconlist[17].imagew="32"; g.iconlist[17].imageh="32"; g.iconlist[17].imageox="0"; g.iconlist[17].imageoy="0"; g.iconlist[17].imageax="11"; g.iconlist[17].imageay="32"; g.iconlist[18]={}; g.iconlist[18].imagew="32"; g.iconlist[18].imageh="32"; g.iconlist[18].imageox="0"; g.iconlist[18].imageoy="0"; g.iconlist[18].imageax="11"; g.iconlist[18].imageay="32"; g.iconlist[19]={}; g.iconlist[19].imagew="32"; g.iconlist[19].imageh="32"; g.iconlist[19].imageox="0"; g.iconlist[19].imageoy="0"; g.iconlist[19].imageax="11"; g.iconlist[19].imageay="32"; g.iconlist[20]={}; g.iconlist[20].imagew="32"; g.iconlist[20].imageh="32"; g.iconlist[20].imageox="0"; g.iconlist[20].imageoy="0"; g.iconlist[20].imageax="11"; g.iconlist[20].imageay="32"; g.iconlist[21]={}; g.iconlist[21].imagew="32"; g.iconlist[21].imageh="32"; g.iconlist[21].imageox="0"; g.iconlist[21].imageoy="0"; g.iconlist[21].imageax="11"; g.iconlist[21].imageay="32"; g.iconlist[22]={}; g.iconlist[22].imagew="31"; g.iconlist[22].imageh="35"; g.iconlist[22].imageox="0"; g.iconlist[22].imageoy="0"; g.iconlist[22].imageax="15"; g.iconlist[22].imageay="34"; g.iconlist[23]={}; g.iconlist[23].imagew="31"; g.iconlist[23].imageh="35"; g.iconlist[23].imageox="0"; g.iconlist[23].imageoy="0"; g.iconlist[23].imageax="15"; g.iconlist[23].imageay="34"; g.iconlist[24]={}; g.iconlist[24].imagew="31"; g.iconlist[24].imageh="35"; g.iconlist[24].imageox="0"; g.iconlist[24].imageoy="0"; g.iconlist[24].imageax="15"; g.iconlist[24].imageay="34"; g.iconlist[25]={}; g.iconlist[25].imagew="31"; g.iconlist[25].imageh="35"; g.iconlist[25].imageox="0"; g.iconlist[25].imageoy="0"; g.iconlist[25].imageax="15"; g.iconlist[25].imageay="34"; g.iconlist[26]={}; g.iconlist[26].imagew="31"; g.iconlist[26].imageh="35"; g.iconlist[26].imageox="0"; g.iconlist[26].imageoy="0"; g.iconlist[26].imageax="15"; g.iconlist[26].imageay="34"; g.iconlist[27]={}; g.iconlist[27].imagew="31"; g.iconlist[27].imageh="35"; g.iconlist[27].imageox="0"; g.iconlist[27].imageoy="0"; g.iconlist[27].imageax="15"; g.iconlist[27].imageay="34"; g.iconlist[28]={}; g.iconlist[28].imagew="31"; g.iconlist[28].imageh="35"; g.iconlist[28].imageox="0"; g.iconlist[28].imageoy="0"; g.iconlist[28].imageax="15"; g.iconlist[28].imageay="34"; g.iconlist[29]={}; g.iconlist[29].imagew="31"; g.iconlist[29].imageh="35"; g.iconlist[29].imageox="0"; g.iconlist[29].imageoy="0"; g.iconlist[29].imageax="15"; g.iconlist[29].imageay="34"; g.iconlist[30]={}; g.iconlist[30].imagew="31"; g.iconlist[30].imageh="35"; g.iconlist[30].imageox="0"; g.iconlist[30].imageoy="0"; g.iconlist[30].imageax="15"; g.iconlist[30].imageay="34"; g.iconlist[31]={}; g.iconlist[31].imagew="31"; g.iconlist[31].imageh="35"; g.iconlist[31].imageox="0"; g.iconlist[31].imageoy="0"; g.iconlist[31].imageax="15"; g.iconlist[31].imageay="34"; g.iconlist[32]={}; g.iconlist[32].imagew="31"; g.iconlist[32].imageh="35"; g.iconlist[32].imageox="0"; g.iconlist[32].imageoy="0"; g.iconlist[32].imageax="15"; g.iconlist[32].imageay="34"; g.iconlist[33]={}; g.iconlist[33].imagew="31"; g.iconlist[33].imageh="35"; g.iconlist[33].imageox="0"; g.iconlist[33].imageoy="0"; g.iconlist[33].imageax="15"; g.iconlist[33].imageay="34"; g.iconlist[34]={}; g.iconlist[34].imagew="31"; g.iconlist[34].imageh="35"; g.iconlist[34].imageox="0"; g.iconlist[34].imageoy="0"; g.iconlist[34].imageax="15"; g.iconlist[34].imageay="34"; g.iconlist[35]={}; g.iconlist[35].imagew="31"; g.iconlist[35].imageh="35"; g.iconlist[35].imageox="0"; g.iconlist[35].imageoy="0"; g.iconlist[35].imageax="15"; g.iconlist[35].imageay="34"; g.iconlist[36]={}; g.iconlist[36].imagew="31"; g.iconlist[36].imageh="35"; g.iconlist[36].imageox="0"; g.iconlist[36].imageoy="0"; g.iconlist[36].imageax="15"; g.iconlist[36].imageay="34"; g.iconlist[37]={}; g.iconlist[37].imagew="31"; g.iconlist[37].imageh="35"; g.iconlist[37].imageox="0"; g.iconlist[37].imageoy="0"; g.iconlist[37].imageax="15"; g.iconlist[37].imageay="34"; g.iconlist[38]={}; g.iconlist[38].imagew="31"; g.iconlist[38].imageh="35"; g.iconlist[38].imageox="0"; g.iconlist[38].imageoy="0"; g.iconlist[38].imageax="15"; g.iconlist[38].imageay="34"; g.iconlist[39]={}; g.iconlist[39].imagew="31"; g.iconlist[39].imageh="35"; g.iconlist[39].imageox="0"; g.iconlist[39].imageoy="0"; g.iconlist[39].imageax="15"; g.iconlist[39].imageay="34"; g.iconlist[40]={}; g.iconlist[40].imagew="31"; g.iconlist[40].imageh="35"; g.iconlist[40].imageox="0"; g.iconlist[40].imageoy="0"; g.iconlist[40].imageax="15"; g.iconlist[40].imageay="34"; g.iconlist[41]={}; g.iconlist[41].imagew="31"; g.iconlist[41].imageh="35"; g.iconlist[41].imageox="0"; g.iconlist[41].imageoy="0"; g.iconlist[41].imageax="15"; g.iconlist[41].imageay="34"; g.iconlist[42]={}; g.iconlist[42].imagew="31"; g.iconlist[42].imageh="35"; g.iconlist[42].imageox="0"; g.iconlist[42].imageoy="0"; g.iconlist[42].imageax="15"; g.iconlist[42].imageay="34"; g.iconlist[43]={}; g.iconlist[43].imagew="31"; g.iconlist[43].imageh="35"; g.iconlist[43].imageox="0"; g.iconlist[43].imageoy="0"; g.iconlist[43].imageax="15"; g.iconlist[43].imageay="34"; g.iconlist[44]={}; g.iconlist[44].imagew="31"; g.iconlist[44].imageh="35"; g.iconlist[44].imageox="0"; g.iconlist[44].imageoy="0"; g.iconlist[44].imageax="15"; g.iconlist[44].imageay="34"; g.iconlist[45]={}; g.iconlist[45].imagew="31"; g.iconlist[45].imageh="35"; g.iconlist[45].imageox="0"; g.iconlist[45].imageoy="0"; g.iconlist[45].imageax="15"; g.iconlist[45].imageay="34"; g.iconlist[46]={}; g.iconlist[46].imagew="31"; g.iconlist[46].imageh="35"; g.iconlist[46].imageox="0"; g.iconlist[46].imageoy="0"; g.iconlist[46].imageax="15"; g.iconlist[46].imageay="34"; g.iconlist[47]={}; g.iconlist[47].imagew="31"; g.iconlist[47].imageh="35"; g.iconlist[47].imageox="0"; g.iconlist[47].imageoy="0"; g.iconlist[47].imageax="15"; g.iconlist[47].imageay="34"; g.iconlist[48]={}; g.iconlist[48].imagew="31"; g.iconlist[48].imageh="35"; g.iconlist[48].imageox="0"; g.iconlist[48].imageoy="0"; g.iconlist[48].imageax="15"; g.iconlist[48].imageay="34"; g.iconlist[49]={}; g.iconlist[49].imagew="31"; g.iconlist[49].imageh="35"; g.iconlist[49].imageox="0"; g.iconlist[49].imageoy="0"; g.iconlist[49].imageax="15"; g.iconlist[49].imageay="34"; g.iconlist[50]={}; g.iconlist[50].imagew="31"; g.iconlist[50].imageh="35"; g.iconlist[50].imageox="0"; g.iconlist[50].imageoy="0"; g.iconlist[50].imageax="15"; g.iconlist[50].imageay="34"; g.iconlist[51]={}; g.iconlist[51].imagew="31"; g.iconlist[51].imageh="35"; g.iconlist[51].imageox="0"; g.iconlist[51].imageoy="0"; g.iconlist[51].imageax="15"; g.iconlist[51].imageay="34"; g.iconlist[52]={}; g.iconlist[52].imagew="31"; g.iconlist[52].imageh="35"; g.iconlist[52].imageox="0"; g.iconlist[52].imageoy="0"; g.iconlist[52].imageax="15"; g.iconlist[52].imageay="34"; g.iconlist[53]={}; g.iconlist[53].imagew="31"; g.iconlist[53].imageh="35"; g.iconlist[53].imageox="0"; g.iconlist[53].imageoy="0"; g.iconlist[53].imageax="15"; g.iconlist[53].imageay="34"; g.iconlist[54]={}; g.iconlist[54].imagew="31"; g.iconlist[54].imageh="35"; g.iconlist[54].imageox="0"; g.iconlist[54].imageoy="0"; g.iconlist[54].imageax="15"; g.iconlist[54].imageay="34"; g.iconlist[55]={}; g.iconlist[55].imagew="31"; g.iconlist[55].imageh="35"; g.iconlist[55].imageox="0"; g.iconlist[55].imageoy="0"; g.iconlist[55].imageax="15"; g.iconlist[55].imageay="34"; g.iconlist[56]={}; g.iconlist[56].imagew="31"; g.iconlist[56].imageh="35"; g.iconlist[56].imageox="0"; g.iconlist[56].imageoy="0"; g.iconlist[56].imageax="15"; g.iconlist[56].imageay="34"; g.iconlist[57]={}; g.iconlist[57].imagew="31"; g.iconlist[57].imageh="35"; g.iconlist[57].imageox="0"; g.iconlist[57].imageoy="0"; g.iconlist[57].imageax="15"; g.iconlist[57].imageay="34"; g.iconlist[58]={}; g.iconlist[58].imagew="31"; g.iconlist[58].imageh="35"; g.iconlist[58].imageox="0"; g.iconlist[58].imageoy="0"; g.iconlist[58].imageax="15"; g.iconlist[58].imageay="34"; g.iconlist[59]={}; g.iconlist[59].imagew="31"; g.iconlist[59].imageh="35"; g.iconlist[59].imageox="0"; g.iconlist[59].imageoy="0"; g.iconlist[59].imageax="15"; g.iconlist[59].imageay="34"; g.iconlist[60]={}; g.iconlist[60].imagew="31"; g.iconlist[60].imageh="35"; g.iconlist[60].imageox="0"; g.iconlist[60].imageoy="0"; g.iconlist[60].imageax="15"; g.iconlist[60].imageay="34"; g.iconlist[61]={}; g.iconlist[61].imagew="31"; g.iconlist[61].imageh="35"; g.iconlist[61].imageox="0"; g.iconlist[61].imageoy="0"; g.iconlist[61].imageax="15"; g.iconlist[61].imageay="34"; g.iconlist[62]={}; g.iconlist[62].imagew="31"; g.iconlist[62].imageh="35"; g.iconlist[62].imageox="0"; g.iconlist[62].imageoy="0"; g.iconlist[62].imageax="15"; g.iconlist[62].imageay="34"; g.iconlist[63]={}; g.iconlist[63].imagew="31"; g.iconlist[63].imageh="35"; g.iconlist[63].imageox="0"; g.iconlist[63].imageoy="0"; g.iconlist[63].imageax="15"; g.iconlist[63].imageay="34"; g.iconlist[64]={}; g.iconlist[64].imagew="31"; g.iconlist[64].imageh="35"; g.iconlist[64].imageox="0"; g.iconlist[64].imageoy="0"; g.iconlist[64].imageax="15"; g.iconlist[64].imageay="34"; g.iconlist[65]={}; g.iconlist[65].imagew="31"; g.iconlist[65].imageh="35"; g.iconlist[65].imageox="0"; g.iconlist[65].imageoy="0"; g.iconlist[65].imageax="15"; g.iconlist[65].imageay="34"; g.iconlist[66]={}; g.iconlist[66].imagew="31"; g.iconlist[66].imageh="35"; g.iconlist[66].imageox="0"; g.iconlist[66].imageoy="0"; g.iconlist[66].imageax="15"; g.iconlist[66].imageay="34"; g.iconlist[67]={}; g.iconlist[67].imagew="31"; g.iconlist[67].imageh="35"; g.iconlist[67].imageox="0"; g.iconlist[67].imageoy="0"; g.iconlist[67].imageax="15"; g.iconlist[67].imageay="34"; g.iconlist[68]={}; g.iconlist[68].imagew="31"; g.iconlist[68].imageh="35"; g.iconlist[68].imageox="0"; g.iconlist[68].imageoy="0"; g.iconlist[68].imageax="15"; g.iconlist[68].imageay="34"; g.iconlist[69]={}; g.iconlist[69].imagew="31"; g.iconlist[69].imageh="35"; g.iconlist[69].imageox="0"; g.iconlist[69].imageoy="0"; g.iconlist[69].imageax="15"; g.iconlist[69].imageay="34"; g.iconlist[70]={}; g.iconlist[70].imagew="31"; g.iconlist[70].imageh="35"; g.iconlist[70].imageox="0"; g.iconlist[70].imageoy="0"; g.iconlist[70].imageax="15"; g.iconlist[70].imageay="34"; g.iconlist[71]={}; g.iconlist[71].imagew="31"; g.iconlist[71].imageh="35"; g.iconlist[71].imageox="0"; g.iconlist[71].imageoy="0"; g.iconlist[71].imageax="15"; g.iconlist[71].imageay="34"; g.iconlist[72]={}; g.iconlist[72].imagew="20"; g.iconlist[72].imageh="20"; g.iconlist[72].imageox="0"; g.iconlist[72].imageoy="0"; g.iconlist[72].imageax="10"; g.iconlist[72].imageay="10"; g.iconlist[73]={}; g.iconlist[73].imagew="20"; g.iconlist[73].imageh="20"; g.iconlist[73].imageox="0"; g.iconlist[73].imageoy="0"; g.iconlist[73].imageax="10"; g.iconlist[73].imageay="10"; g.iconlist[74]={}; g.iconlist[74].imagew="20"; g.iconlist[74].imageh="20"; g.iconlist[74].imageox="0"; g.iconlist[74].imageoy="0"; g.iconlist[74].imageax="10"; g.iconlist[74].imageay="10"; g.iconlist[75]={}; g.iconlist[75].imagew="12"; g.iconlist[75].imageh="12"; g.iconlist[75].imageox="0"; g.iconlist[75].imageoy="0"; g.iconlist[75].imageax="6"; g.iconlist[75].imageay="12"; g.iconlist[76]={}; g.iconlist[76].imagew="12"; g.iconlist[76].imageh="12"; g.iconlist[76].imageox="0"; g.iconlist[76].imageoy="0"; g.iconlist[76].imageax="6"; g.iconlist[76].imageay="12"; g.iconlist[77]={}; g.iconlist[77].imagew="12"; g.iconlist[77].imageh="12"; g.iconlist[77].imageox="0"; g.iconlist[77].imageoy="0"; g.iconlist[77].imageax="6"; g.iconlist[77].imageay="12"; g.iconlist[78]={}; g.iconlist[78].imagew="12"; g.iconlist[78].imageh="12"; g.iconlist[78].imageox="0"; g.iconlist[78].imageoy="0"; g.iconlist[78].imageax="6"; g.iconlist[78].imageay="12"; g.iconlist[79]={}; g.iconlist[79].imagew="12"; g.iconlist[79].imageh="12"; g.iconlist[79].imageox="0"; g.iconlist[79].imageoy="0"; g.iconlist[79].imageax="6"; g.iconlist[79].imageay="12"; g.iconlist[80]={}; g.iconlist[80].imagew="12"; g.iconlist[80].imageh="12"; g.iconlist[80].imageox="0"; g.iconlist[80].imageoy="0"; g.iconlist[80].imageax="6"; g.iconlist[80].imageay="12"; g.iconlist[81]={}; g.iconlist[81].imagew="12"; g.iconlist[81].imageh="12"; g.iconlist[81].imageox="0"; g.iconlist[81].imageoy="0"; g.iconlist[81].imageax="6"; g.iconlist[81].imageay="12"; g.iconlist[82]={}; g.iconlist[82].imagew="12"; g.iconlist[82].imageh="12"; g.iconlist[82].imageox="0"; g.iconlist[82].imageoy="0"; g.iconlist[82].imageax="6"; g.iconlist[82].imageay="12"; g.iconlist[83]={}; g.iconlist[83].imagew="12"; g.iconlist[83].imageh="12"; g.iconlist[83].imageox="0"; g.iconlist[83].imageoy="0"; g.iconlist[83].imageax="6"; g.iconlist[83].imageay="12"; g.iconlist[84]={}; g.iconlist[84].imagew="12"; g.iconlist[84].imageh="12"; g.iconlist[84].imageox="0"; g.iconlist[84].imageoy="0"; g.iconlist[84].imageax="6"; g.iconlist[84].imageay="12"; g.iconlist[85]={}; g.iconlist[85].imagew="12"; g.iconlist[85].imageh="12"; g.iconlist[85].imageox="0"; g.iconlist[85].imageoy="0"; g.iconlist[85].imageax="6"; g.iconlist[85].imageay="12"; g.iconlist[86]={}; g.iconlist[86].imagew="12"; g.iconlist[86].imageh="12"; g.iconlist[86].imageox="0"; g.iconlist[86].imageoy="0"; g.iconlist[86].imageax="6"; g.iconlist[86].imageay="12"; g.iconlist[87]={}; g.iconlist[87].imagew="31"; g.iconlist[87].imageh="35"; g.iconlist[87].imageox="0"; g.iconlist[87].imageoy="0"; g.iconlist[87].imageax="15"; g.iconlist[87].imageay="35"; g.iconlist[88]={}; g.iconlist[88].imagew="31"; g.iconlist[88].imageh="35"; g.iconlist[88].imageox="0"; g.iconlist[88].imageoy="0"; g.iconlist[88].imageax="15"; g.iconlist[88].imageay="35"; g.iconlist[89]={}; g.iconlist[89].imagew="31"; g.iconlist[89].imageh="35"; g.iconlist[89].imageox="0"; g.iconlist[89].imageoy="0"; g.iconlist[89].imageax="15"; g.iconlist[89].imageay="35"; g.iconlist[90]={}; g.iconlist[90].imagew="31"; g.iconlist[90].imageh="35"; g.iconlist[90].imageox="0"; g.iconlist[90].imageoy="0"; g.iconlist[90].imageax="15"; g.iconlist[90].imageay="35"; g.iconlist[91]={}; g.iconlist[91].imagew="31"; g.iconlist[91].imageh="35"; g.iconlist[91].imageox="0"; g.iconlist[91].imageoy="0"; g.iconlist[91].imageax="15"; g.iconlist[91].imageay="35"; g.iconlist[92]={}; g.iconlist[92].imagew="31"; g.iconlist[92].imageh="35"; g.iconlist[92].imageox="0"; g.iconlist[92].imageoy="0"; g.iconlist[92].imageax="15"; g.iconlist[92].imageay="35"; g.iconlist[93]={}; g.iconlist[93].imagew="31"; g.iconlist[93].imageh="35"; g.iconlist[93].imageox="0"; g.iconlist[93].imageoy="0"; g.iconlist[93].imageax="15"; g.iconlist[93].imageay="35"; g.iconlist[94]={}; g.iconlist[94].imagew="31"; g.iconlist[94].imageh="35"; g.iconlist[94].imageox="0"; g.iconlist[94].imageoy="0"; g.iconlist[94].imageax="15"; g.iconlist[94].imageay="35"; g.iconlist[95]={}; g.iconlist[95].imagew="31"; g.iconlist[95].imageh="35"; g.iconlist[95].imageox="0"; g.iconlist[95].imageoy="0"; g.iconlist[95].imageax="15"; g.iconlist[95].imageay="35"; g.expire=true; var limit_object = 8; var object_count = 0 ; var opened_window ; var searchMarkerID = 0 ; g.run=function(d){ g.data=JSON2.parse(d); if( g.data.datalist == undefined){ g.data.datalist={}; g.data.datalist.position=""; // top , right, left, bottom g.data.datalist.width=""; // none if top or bottom g.data.datalist.height=""; // none if left or right g.data.datalist.bgcolor="#F0F0F0"; }else{ if( g.data.datalist.position != undefined){ var positionArr=["", "top", "bottom", "left", "right"]; g.data.datalist.position=positionArr[g.data.datalist.position] ; } } if(g.data.datalist.showmarkers== undefined) g.data.datalist.showmarkers=-1; if( g.data.crowdmap == undefined){ g.data.crowdmap={}; g.data.crowdmap.mode=""; g.data.crowdmap.markericon=3; } //g.data.width="800px"; //g.data.height="600px"; // modify to 100% if browser is mobile /* if(navigator.userAgent.indexOf('iPhone')!=-1||navigator.userAgent.indexOf('Android')!=-1){ g.data.width=100; g.data.width_unit='%'; g.data.height=100; g.data.height_unit='%'; } */ var gmap_informationbox_style="overflow: hidden; border: 1px solid #DDD; font-family: Verdana,Geneva,sans-serif; font-size: 12px; margin: 5px;"; var width = g.data.width+g.data.width_unit; var height = g.data.height+g.data.height_unit; if(g.data.width+g.data.width_unit == "100%" || g.data.height+g.data.height_unit == "100%"){ width = g.getWidth()+"px"; height = g.getHeight()+"px"; } if( g.data.datalist.position=="top"||g.data.datalist.position=="left" ) document.write('
'+ '
'+ '
'); else document.write('
'+ '
'+ '
'); var script=document.createElement('script'); var lang = ''; if(g.data.lang != undefined && g.data.lang != "") lang = '&language='+g.data.lang; // here we dynamically determine whether mapkey is used script.src='//maps.google.com/maps/api/js?key='+net.imapbuilder.gmap.mapkey+'&callback=net.imapbuilder.gmap.initialize&libraries=geometry'+lang; // &v=3.3 script.type='text/javascript'; document.body.appendChild(script); if( g.data.font_size!=undefined) document.getElementById('gmap_'+g.data.fileid).style.fontSize=g.data.font_size+'px'; if( g.data.font_family!=undefined) document.getElementById('gmap_'+g.data.fileid).style.fontFamily=g.data.font_family; } // get device width and height g.getWidth=function(){ xWidth = null; if(window.screen != null) xWidth = window.screen.availWidth; if(window.innerWidth != null) xWidth = window.innerWidth; if(document.body != null) xWidth = document.body.clientWidth; return xWidth; } g.getHeight=function() { xHeight = null; if(window.screen != null) xHeight = window.screen.availHeight; if(window.innerHeight != null) xHeight = window.innerHeight; if(document.body != null) xHeight = document.body.clientHeight; return xHeight; } g.initialize=function(){ map_geocoder=new google.maps.Geocoder(); // start of clustering function //if(g.data.clustering===true){ function MarkerClusterer(map, opt_markers, opt_options) { // MarkerClusterer implements google.maps.OverlayView interface. We use the // extend function to extend MarkerClusterer with google.maps.OverlayView // because it might not always be available when the code is defined so we // look for it at the last possible moment. If it doesn't exist now then // there is no point going ahead :) this.extend(MarkerClusterer, google.maps.OverlayView); this.map_ = map; /** * @type {Array.} * @private */ this.markers_ = []; /** * @type {Array.} */ this.clusters_ = []; this.sizes = [53, 56, 66, 78, 90]; /** * @private */ this.styles_ = []; /** * @type {boolean} * @private */ this.ready_ = false; var options = opt_options || {}; /** * @type {number} * @private */ this.gridSize_ = options['gridSize'] || 60; /** * @private */ this.minClusterSize_ = options['minimumClusterSize'] || 2; /** * @type {?number} * @private */ this.maxZoom_ = options['maxZoom'] || null; this.styles_ = options['styles'] || []; /** * @type {string} * @private */ this.imagePath_ = options['imagePath'] || this.MARKER_CLUSTER_IMAGE_PATH_; /** * @type {string} * @private */ this.imageExtension_ = options['imageExtension'] || this.MARKER_CLUSTER_IMAGE_EXTENSION_; /** * @type {boolean} * @private */ this.zoomOnClick_ = true; if (options['zoomOnClick'] != undefined) { this.zoomOnClick_ = options['zoomOnClick']; } /** * @type {boolean} * @private */ this.averageCenter_ = false; if (options['averageCenter'] != undefined) { this.averageCenter_ = options['averageCenter']; } this.setupStyles_(); this.setMap(map); /** * @type {number} * @private */ this.prevZoom_ = this.map_.getZoom(); // Add the map event listeners var that = this; google.maps.event.addListener(this.map_, 'zoom_changed', function() { var zoom = that.map_.getZoom(); if (that.prevZoom_ != zoom) { that.prevZoom_ = zoom; that.resetViewport(); } }); google.maps.event.addListener(this.map_, 'idle', function() { that.redraw(); }); // Finally, add the markers if (opt_markers && opt_markers.length) { this.addMarkers(opt_markers, false); } } /** * The marker cluster image path. * * @type {string} * @private */ MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_ = '//google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/' + 'images/m'; /** * The marker cluster image path. * * @type {string} * @private */ MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_ = 'png'; /** * Extends a objects prototype by anothers. * * @param {Object} obj1 The object to be extended. * @param {Object} obj2 The object to extend with. * @return {Object} The new extended object. * @ignore */ MarkerClusterer.prototype.extend = function(obj1, obj2) { return (function(object) { for (var property in object.prototype) { this.prototype[property] = object.prototype[property]; } return this; }).apply(obj1, [obj2]); }; /** * Implementaion of the interface method. * @ignore */ MarkerClusterer.prototype.onAdd = function() { this.setReady_(true); }; /** * Implementaion of the interface method. * @ignore */ MarkerClusterer.prototype.draw = function() {}; /** * Sets up the styles object. * * @private */ MarkerClusterer.prototype.setupStyles_ = function() { if (this.styles_.length) { return; } for (var i = 0, size; size = this.sizes[i]; i++) { this.styles_.push({ url: this.imagePath_ + (i + 1) + '.' + this.imageExtension_, height: size, width: size }); } }; /** * Fit the map to the bounds of the markers in the clusterer. */ MarkerClusterer.prototype.fitMapToMarkers = function() { var markers = this.getMarkers(); var bounds = new google.maps.LatLngBounds(); for (var i = 0, marker; marker = markers[i]; i++) { bounds.extend(marker.getPosition()); } this.map_.fitBounds(bounds); }; /** * Sets the styles. * * @param {Object} styles The style to set. */ MarkerClusterer.prototype.setStyles = function(styles) { this.styles_ = styles; }; /** * Gets the styles. * * @return {Object} The styles object. */ MarkerClusterer.prototype.getStyles = function() { return this.styles_; }; /** * Whether zoom on click is set. * * @return {boolean} True if zoomOnClick_ is set. */ MarkerClusterer.prototype.isZoomOnClick = function() { return this.zoomOnClick_; }; /** * Whether average center is set. * * @return {boolean} True if averageCenter_ is set. */ MarkerClusterer.prototype.isAverageCenter = function() { return this.averageCenter_; }; /** * Returns the array of markers in the clusterer. * * @return {Array.} The markers. */ MarkerClusterer.prototype.getMarkers = function() { return this.markers_; }; /** * Returns the number of markers in the clusterer * * @return {Number} The number of markers. */ MarkerClusterer.prototype.getTotalMarkers = function() { return this.markers_.length; }; /** * Sets the max zoom for the clusterer. * * @param {number} maxZoom The max zoom level. */ MarkerClusterer.prototype.setMaxZoom = function(maxZoom) { this.maxZoom_ = maxZoom; }; /** * Gets the max zoom for the clusterer. * * @return {number} The max zoom level. */ MarkerClusterer.prototype.getMaxZoom = function() { return this.maxZoom_; }; /** * The function for calculating the cluster icon image. * * @param {Array.} markers The markers in the clusterer. * @param {number} numStyles The number of styles available. * @return {Object} A object properties: 'text' (string) and 'index' (number). * @private */ MarkerClusterer.prototype.calculator_ = function(markers, numStyles) { var index = 0; var count = markers.length; var dv = count; while (dv !== 0) { dv = parseInt(dv / 10, 10); index++; } index = Math.min(index, numStyles); return { text: count, index: index }; }; /** * Set the calculator function. * * @param {function(Array, number)} calculator The function to set as the * calculator. The function should return a object properties: * 'text' (string) and 'index' (number). * */ MarkerClusterer.prototype.setCalculator = function(calculator) { this.calculator_ = calculator; }; /** * Get the calculator function. * * @return {function(Array, number)} the calculator function. */ MarkerClusterer.prototype.getCalculator = function() { return this.calculator_; }; /** * Add an array of markers to the clusterer. * * @param {Array.} markers The markers to add. * @param {boolean=} opt_nodraw Whether to redraw the clusters. */ MarkerClusterer.prototype.addMarkers = function(markers, opt_nodraw) { /* for (var i = 0, marker; marker = markers[i]; i++) { this.pushMarkerTo_(marker); } */ //Terry modified 20120326 for(var i = 0 ; i < markers.length ; i++){ if( markers[i] != undefined ) this.pushMarkerTo_(markers[i]); } if (!opt_nodraw) { this.redraw(); } }; /** * Pushes a marker to the clusterer. * * @param {google.maps.Marker} marker The marker to add. * @private */ MarkerClusterer.prototype.pushMarkerTo_ = function(marker) { marker.isAdded = false; if (marker['draggable']) { // If the marker is draggable add a listener so we update the clusters on // the drag end. var that = this; google.maps.event.addListener(marker, 'dragend', function() { marker.isAdded = false; that.repaint(); }); } this.markers_.push(marker); }; /** * Adds a marker to the clusterer and redraws if needed. * * @param {google.maps.Marker} marker The marker to add. * @param {boolean=} opt_nodraw Whether to redraw the clusters. */ MarkerClusterer.prototype.addMarker = function(marker, opt_nodraw) { this.pushMarkerTo_(marker); if (!opt_nodraw) { this.redraw(); } }; /** * Removes a marker and returns true if removed, false if not * * @param {google.maps.Marker} marker The marker to remove * @return {boolean} Whether the marker was removed or not * @private */ MarkerClusterer.prototype.removeMarker_ = function(marker) { var index = -1; if (this.markers_.indexOf) { index = this.markers_.indexOf(marker); } else { for (var i = 0, m; m = this.markers_[i]; i++) { if (m == marker) { index = i; break; } } } if (index == -1) { // Marker is not in our list of markers. return false; } marker.setMap(null); this.markers_.splice(index, 1); return true; }; /** * Remove a marker from the cluster. * * @param {google.maps.Marker} marker The marker to remove. * @param {boolean=} opt_nodraw Optional boolean to force no redraw. * @return {boolean} True if the marker was removed. */ MarkerClusterer.prototype.removeMarker = function(marker, opt_nodraw) { var removed = this.removeMarker_(marker); if (!opt_nodraw && removed) { this.resetViewport(); this.redraw(); return true; } else { return false; } }; /** * Removes an array of markers from the cluster. * * @param {Array.} markers The markers to remove. * @param {boolean=} opt_nodraw Optional boolean to force no redraw. */ MarkerClusterer.prototype.removeMarkers = function(markers, opt_nodraw) { var removed = false; for (var i = 0, marker; marker = markers[i]; i++) { var r = this.removeMarker_(marker); removed = removed || r; } if (!opt_nodraw && removed) { this.resetViewport(); this.redraw(); return true; } }; /** * Sets the clusterer's ready state. * * @param {boolean} ready The state. * @private */ MarkerClusterer.prototype.setReady_ = function(ready) { if (!this.ready_) { this.ready_ = ready; this.createClusters_(); } }; /** * Returns the number of clusters in the clusterer. * * @return {number} The number of clusters. */ MarkerClusterer.prototype.getTotalClusters = function() { return this.clusters_.length; }; /** * Returns the google map that the clusterer is associated with. * * @return {google.maps.Map} The map. */ MarkerClusterer.prototype.getMap = function() { return this.map_; }; /** * Sets the google map that the clusterer is associated with. * * @param {google.maps.Map} map The map. */ MarkerClusterer.prototype.setMap = function(map) { this.map_ = map; }; /** * Returns the size of the grid. * * @return {number} The grid size. */ MarkerClusterer.prototype.getGridSize = function() { return this.gridSize_; }; /** * Sets the size of the grid. * * @param {number} size The grid size. */ MarkerClusterer.prototype.setGridSize = function(size) { this.gridSize_ = size; }; /** * Returns the min cluster size. * * @return {number} The grid size. */ MarkerClusterer.prototype.getMinClusterSize = function() { return this.minClusterSize_; }; /** * Sets the min cluster size. * * @param {number} size The grid size. */ MarkerClusterer.prototype.setMinClusterSize = function(size) { this.minClusterSize_ = size; }; /** * Extends a bounds object by the grid size. * * @param {google.maps.LatLngBounds} bounds The bounds to extend. * @return {google.maps.LatLngBounds} The extended bounds. */ MarkerClusterer.prototype.getExtendedBounds = function(bounds) { var projection = this.getProjection(); // Turn the bounds into latlng. var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()); var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()); // Convert the points to pixels and the extend out by the grid size. var trPix = projection.fromLatLngToDivPixel(tr); trPix.x += this.gridSize_; trPix.y -= this.gridSize_; var blPix = projection.fromLatLngToDivPixel(bl); blPix.x -= this.gridSize_; blPix.y += this.gridSize_; // Convert the pixel points back to LatLng var ne = projection.fromDivPixelToLatLng(trPix); var sw = projection.fromDivPixelToLatLng(blPix); // Extend the bounds to contain the new bounds. bounds.extend(ne); bounds.extend(sw); return bounds; }; /** * Determins if a marker is contained in a bounds. * * @param {google.maps.Marker} marker The marker to check. * @param {google.maps.LatLngBounds} bounds The bounds to check against. * @return {boolean} True if the marker is in the bounds. * @private */ MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { return bounds.contains(marker.getPosition()); }; /** * Clears all clusters and markers from the clusterer. */ MarkerClusterer.prototype.clearMarkers = function() { this.resetViewport(true); // Set the markers a empty array. this.markers_ = []; }; /** * Clears all existing clusters and recreates them. * @param {boolean} opt_hide To also hide the marker. */ MarkerClusterer.prototype.resetViewport = function(opt_hide) { // Remove all the clusters for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { cluster.remove(); } // Reset the markers to not be added and to be invisible. for (var i = 0, marker; marker = this.markers_[i]; i++) { marker.isAdded = false; if (opt_hide) { marker.setMap(null); } } this.clusters_ = []; }; /** * */ MarkerClusterer.prototype.repaint = function() { var oldClusters = this.clusters_.slice(); this.clusters_.length = 0; this.resetViewport(); this.redraw(); // Remove the old clusters. // Do it in a timeout so the other clusters have been drawn first. window.setTimeout(function() { for (var i = 0, cluster; cluster = oldClusters[i]; i++) { cluster.remove(); } }, 0); }; /** * Redraws the clusters. */ MarkerClusterer.prototype.redraw = function() { this.createClusters_(); }; /** * Calculates the distance between two latlng locations in km. * @see http://www.movable-type.co.uk/scripts/latlong.html * * @param {google.maps.LatLng} p1 The first lat lng point. * @param {google.maps.LatLng} p2 The second lat lng point. * @return {number} The distance between the two points in km. * @private */ MarkerClusterer.prototype.distanceBetweenPoints_ = function(p1, p2) { if (!p1 || !p2) { return 0; } var R = 6371; // Radius of the Earth in km var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = R * c; return d; }; /** * Add a marker to a cluster, or creates a new cluster. * * @param {google.maps.Marker} marker The marker to add. * @private */ MarkerClusterer.prototype.addToClosestCluster_ = function(marker) { var distance = 40000; // Some large number var clusterToAddTo = null; var pos = marker.getPosition(); for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { var center = cluster.getCenter(); if (center) { var d = this.distanceBetweenPoints_(center, marker.getPosition()); if (d < distance) { distance = d; clusterToAddTo = cluster; } } } if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { clusterToAddTo.addMarker(marker); } else { var cluster = new Cluster(this); cluster.addMarker(marker); this.clusters_.push(cluster); } }; /** * Creates the clusters. * * @private */ MarkerClusterer.prototype.createClusters_ = function() { if (!this.ready_) { return; } // Get our current map view bounds. // Create a new bounds object so we don't affect the map. var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(), this.map_.getBounds().getNorthEast()); var bounds = this.getExtendedBounds(mapBounds); for (var i = 0, marker; marker = this.markers_[i]; i++) { if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { this.addToClosestCluster_(marker); } } }; /** * A cluster that contains markers. * * @param {MarkerClusterer} markerClusterer The markerclusterer that this * cluster is associated with. * @constructor * @ignore */ function Cluster(markerClusterer) { this.markerClusterer_ = markerClusterer; this.map_ = markerClusterer.getMap(); this.gridSize_ = markerClusterer.getGridSize(); this.minClusterSize_ = markerClusterer.getMinClusterSize(); this.averageCenter_ = markerClusterer.isAverageCenter(); this.center_ = null; this.markers_ = []; this.bounds_ = null; this.clusterIcon_ = new ClusterIcon(this, markerClusterer.getStyles(), markerClusterer.getGridSize()); } /** * Determins if a marker is already added to the cluster. * * @param {google.maps.Marker} marker The marker to check. * @return {boolean} True if the marker is already added. */ Cluster.prototype.isMarkerAlreadyAdded = function(marker) { if (this.markers_.indexOf) { return this.markers_.indexOf(marker) != -1; } else { for (var i = 0, m; m = this.markers_[i]; i++) { if (m == marker) { return true; } } } return false; }; /** * Add a marker the cluster. * * @param {google.maps.Marker} marker The marker to add. * @return {boolean} True if the marker was added. */ Cluster.prototype.addMarker = function(marker) { if (this.isMarkerAlreadyAdded(marker)) { return false; } if (!this.center_) { this.center_ = marker.getPosition(); this.calculateBounds_(); } else { if (this.averageCenter_) { var l = this.markers_.length + 1; var lat = (this.center_.lat() * (l-1) + marker.getPosition().lat()) / l; var lng = (this.center_.lng() * (l-1) + marker.getPosition().lng()) / l; this.center_ = new google.maps.LatLng(lat, lng); this.calculateBounds_(); } } marker.isAdded = true; this.markers_.push(marker); var len = this.markers_.length; if (len < this.minClusterSize_ && marker.getMap() != this.map_) { // Min cluster size not reached so show the marker. marker.setMap(this.map_); } if (len == this.minClusterSize_) { // Hide the markers that were showing. for (var i = 0; i < len; i++) { this.markers_[i].setMap(null); } } if (len >= this.minClusterSize_) { marker.setMap(null); } this.updateIcon(); return true; }; /** * Returns the marker clusterer that the cluster is associated with. * * @return {MarkerClusterer} The associated marker clusterer. */ Cluster.prototype.getMarkerClusterer = function() { return this.markerClusterer_; }; /** * Returns the bounds of the cluster. * * @return {google.maps.LatLngBounds} the cluster bounds. */ Cluster.prototype.getBounds = function() { var bounds = new google.maps.LatLngBounds(this.center_, this.center_); var markers = this.getMarkers(); for (var i = 0, marker; marker = markers[i]; i++) { bounds.extend(marker.getPosition()); } return bounds; }; /** * Removes the cluster */ Cluster.prototype.remove = function() { this.clusterIcon_.remove(); this.markers_.length = 0; delete this.markers_; }; /** * Returns the center of the cluster. * * @return {number} The cluster center. */ Cluster.prototype.getSize = function() { return this.markers_.length; }; /** * Returns the center of the cluster. * * @return {Array.} The cluster center. */ Cluster.prototype.getMarkers = function() { return this.markers_; }; /** * Returns the center of the cluster. * * @return {google.maps.LatLng} The cluster center. */ Cluster.prototype.getCenter = function() { return this.center_; }; /** * Calculated the extended bounds of the cluster with the grid. * * @private */ Cluster.prototype.calculateBounds_ = function() { var bounds = new google.maps.LatLngBounds(this.center_, this.center_); this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); }; /** * Determines if a marker lies in the clusters bounds. * * @param {google.maps.Marker} marker The marker to check. * @return {boolean} True if the marker lies in the bounds. */ Cluster.prototype.isMarkerInClusterBounds = function(marker) { return this.bounds_.contains(marker.getPosition()); }; /** * Returns the map that the cluster is associated with. * * @return {google.maps.Map} The map. */ Cluster.prototype.getMap = function() { return this.map_; }; /** * Updates the cluster icon */ Cluster.prototype.updateIcon = function() { var zoom = this.map_.getZoom(); var mz = this.markerClusterer_.getMaxZoom(); if (mz && zoom > mz) { // The zoom is greater than our max zoom so show all the markers in cluster. for (var i = 0, marker; marker = this.markers_[i]; i++) { marker.setMap(this.map_); } return; } if (this.markers_.length < this.minClusterSize_) { // Min cluster size not yet reached. this.clusterIcon_.hide(); return; } var numStyles = this.markerClusterer_.getStyles().length; var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); this.clusterIcon_.setCenter(this.center_); this.clusterIcon_.setSums(sums); this.clusterIcon_.show(); }; /** * A cluster icon * * @param {Cluster} cluster The cluster to be associated with. * @param {Object} styles An object that has style properties: * 'url': (string) The image url. * 'height': (number) The image height. * 'width': (number) The image width. * 'anchor': (Array) The anchor position of the label text. * 'textColor': (string) The text color. * 'textSize': (number) The text size. * 'backgroundPosition: (string) The background postition x, y. * @param {number=} opt_padding Optional padding to apply to the cluster icon. * @constructor * @extends google.maps.OverlayView * @ignore */ function ClusterIcon(cluster, styles, opt_padding) { cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); this.styles_ = styles; this.padding_ = opt_padding || 0; this.cluster_ = cluster; this.center_ = null; this.map_ = cluster.getMap(); this.div_ = null; this.sums_ = null; this.visible_ = false; this.setMap(this.map_); } /** * Triggers the clusterclick event and zoom's if the option is set. */ ClusterIcon.prototype.triggerClusterClick = function() { var markerClusterer = this.cluster_.getMarkerClusterer(); // Trigger the clusterclick event. google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_); if(g.data.clustering_click == "list"){ // show infowindow with marker content cluster_infowindow=new google.maps.InfoWindow(); var markers = this.cluster_.getMarkers(); var html = ''; var marker_link = ''; var marker_icon = ''; var marker_title = ''; var marker_desc = ''; html += ''+ markers.length + ' markers
'; html += '
'; for (var i = 0, marker; marker = markers[i]; i++) { marker_link = 'map.setCenter(new google.maps.LatLng('+marker.position.lat()+','+marker.position.lng()+')); map.setZoom(15);'+ 'google.maps.event.trigger(markers[\''+marker.markerid+'\'], \'click\');'+ 'cluster_infowindow.close();'; marker_icon = ''; marker_desc = ''; marker_title = ''; // markers icon marker_icon += ''; if( !isNaN(marker.iconid) ) marker_icon += ''; else marker_icon += ''; marker_icon += ''; // markers title marker_title += ''+marker.title +''; //markers description marker_desc += ''+marker.desc +''; // infowindow content html += ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ '
'+marker_icon+''+marker_title+'
'+marker_desc+'
'; } html += '
'; cluster_infowindow.setOptions({content:html,position:this.center_}); cluster_infowindow.open(map); }else{ // if click to zoom var markerClusterer = this.cluster_.getMarkerClusterer(); if (markerClusterer.isZoomOnClick()) { // Zoom into the cluster. this.map_.fitBounds(this.cluster_.getBounds()); } } }; /** * Adding the cluster icon to the dom. * @ignore */ ClusterIcon.prototype.onAdd = function() { this.div_ = document.createElement('DIV'); if (this.visible_) { var pos = this.getPosFromLatLng_(this.center_); this.div_.style.cssText = this.createCss(pos); this.div_.innerHTML = this.sums_.text; } var panes = this.getPanes(); panes.overlayMouseTarget.appendChild(this.div_); var that = this; google.maps.event.addDomListener(this.div_, 'click', function() { that.triggerClusterClick(); }); /* google.maps.event.addDomListener(this.div_, 'dblclick', function() { that.triggerClusterDblClick(); }); */ }; /** * Returns the position to place the div dending on the latlng. * * @param {google.maps.LatLng} latlng The position in latlng. * @return {google.maps.Point} The position in pixels. * @private */ ClusterIcon.prototype.getPosFromLatLng_ = function(latlng) { var pos = this.getProjection().fromLatLngToDivPixel(latlng); pos.x -= parseInt(this.width_ / 2, 10); pos.y -= parseInt(this.height_ / 2, 10); return pos; }; /** * Draw the icon. * @ignore */ ClusterIcon.prototype.draw = function() { if (this.visible_) { var pos = this.getPosFromLatLng_(this.center_); this.div_.style.top = pos.y + 'px'; this.div_.style.left = pos.x + 'px'; } }; /** * Hide the icon. */ ClusterIcon.prototype.hide = function() { if (this.div_) { this.div_.style.display = 'none'; } this.visible_ = false; }; /** * Position and show the icon. */ ClusterIcon.prototype.show = function() { if (this.div_) { var pos = this.getPosFromLatLng_(this.center_); this.div_.style.cssText = this.createCss(pos); this.div_.style.display = ''; } this.visible_ = true; }; /** * Remove the icon from the map */ ClusterIcon.prototype.remove = function() { this.setMap(null); }; /** * Implementation of the onRemove interface. * @ignore */ ClusterIcon.prototype.onRemove = function() { if (this.div_ && this.div_.parentNode) { this.hide(); this.div_.parentNode.removeChild(this.div_); this.div_ = null; } }; /** * Set the sums of the icon. * * @param {Object} sums The sums containing: * 'text': (string) The text to display in the icon. * 'index': (number) The style index of the icon. */ ClusterIcon.prototype.setSums = function(sums) { this.sums_ = sums; this.text_ = sums.text; this.index_ = sums.index; if (this.div_) { this.div_.innerHTML = sums.text; } this.useStyle(); }; /** * Sets the icon to the the styles. */ ClusterIcon.prototype.useStyle = function() { var index = Math.max(0, this.sums_.index - 1); index = Math.min(this.styles_.length - 1, index); var style = this.styles_[index]; this.url_ = style['url']; this.height_ = style['height']; this.width_ = style['width']; this.textColor_ = style['textColor']; this.anchor_ = style['anchor']; this.textSize_ = style['textSize']; this.backgroundPosition_ = style['backgroundPosition']; }; /** * Sets the center of the icon. * * @param {google.maps.LatLng} center The latlng to set as the center. */ ClusterIcon.prototype.setCenter = function(center) { this.center_ = center; }; /** * Create the css text based on the position of the icon. * * @param {google.maps.Point} pos The position. * @return {string} The css style text. */ ClusterIcon.prototype.createCss = function(pos) { var style = []; style.push('background-image:url(' + this.url_ + ');'); var backgroundPosition = this.backgroundPosition_ ? this.backgroundPosition_ : '0 0'; style.push('background-position:' + backgroundPosition + ';'); if (typeof this.anchor_ === 'object') { if (typeof this.anchor_[0] === 'number' && this.anchor_[0] > 0 && this.anchor_[0] < this.height_) { style.push('height:' + (this.height_ - this.anchor_[0]) + 'px; padding-top:' + this.anchor_[0] + 'px;'); } else { style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + 'px;'); } if (typeof this.anchor_[1] === 'number' && this.anchor_[1] > 0 && this.anchor_[1] < this.width_) { style.push('width:' + (this.width_ - this.anchor_[1]) + 'px; padding-left:' + this.anchor_[1] + 'px;'); } else { style.push('width:' + this.width_ + 'px; text-align:center;'); } } else { style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + 'px; width:' + this.width_ + 'px; text-align:center;'); } var txtColor = this.textColor_ ? this.textColor_ : 'black'; var txtSize = this.textSize_ ? this.textSize_ : 11; style.push('cursor:pointer; top:' + pos.y + 'px; left:' + pos.x + 'px; color:' + txtColor + '; position:absolute; font-size:' + txtSize + 'px; font-family:Arial,sans-serif; font-weight:bold'); return style.join(''); }; // Export Symbols for Closure // If you are not going to compile with closure then you can remove the // code below. window['MarkerClusterer'] = MarkerClusterer; MarkerClusterer.prototype['addMarker'] = MarkerClusterer.prototype.addMarker; MarkerClusterer.prototype['addMarkers'] = MarkerClusterer.prototype.addMarkers; MarkerClusterer.prototype['clearMarkers'] = MarkerClusterer.prototype.clearMarkers; MarkerClusterer.prototype['fitMapToMarkers'] = MarkerClusterer.prototype.fitMapToMarkers; MarkerClusterer.prototype['getCalculator'] = MarkerClusterer.prototype.getCalculator; MarkerClusterer.prototype['getGridSize'] = MarkerClusterer.prototype.getGridSize; MarkerClusterer.prototype['getExtendedBounds'] = MarkerClusterer.prototype.getExtendedBounds; MarkerClusterer.prototype['getMap'] = MarkerClusterer.prototype.getMap; MarkerClusterer.prototype['getMarkers'] = MarkerClusterer.prototype.getMarkers; MarkerClusterer.prototype['getMaxZoom'] = MarkerClusterer.prototype.getMaxZoom; MarkerClusterer.prototype['getStyles'] = MarkerClusterer.prototype.getStyles; MarkerClusterer.prototype['getTotalClusters'] = MarkerClusterer.prototype.getTotalClusters; MarkerClusterer.prototype['getTotalMarkers'] = MarkerClusterer.prototype.getTotalMarkers; MarkerClusterer.prototype['redraw'] = MarkerClusterer.prototype.redraw; MarkerClusterer.prototype['removeMarker'] = MarkerClusterer.prototype.removeMarker; MarkerClusterer.prototype['removeMarkers'] = MarkerClusterer.prototype.removeMarkers; MarkerClusterer.prototype['resetViewport'] = MarkerClusterer.prototype.resetViewport; MarkerClusterer.prototype['repaint'] = MarkerClusterer.prototype.repaint; MarkerClusterer.prototype['setCalculator'] = MarkerClusterer.prototype.setCalculator; MarkerClusterer.prototype['setGridSize'] = MarkerClusterer.prototype.setGridSize; MarkerClusterer.prototype['setMaxZoom'] = MarkerClusterer.prototype.setMaxZoom; MarkerClusterer.prototype['onAdd'] = MarkerClusterer.prototype.onAdd; MarkerClusterer.prototype['draw'] = MarkerClusterer.prototype.draw; Cluster.prototype['getCenter'] = Cluster.prototype.getCenter; Cluster.prototype['getSize'] = Cluster.prototype.getSize; Cluster.prototype['getMarkers'] = Cluster.prototype.getMarkers; ClusterIcon.prototype['onAdd'] = ClusterIcon.prototype.onAdd; ClusterIcon.prototype['draw'] = ClusterIcon.prototype.draw; ClusterIcon.prototype['onRemove'] = ClusterIcon.prototype.onRemove; //} // end of clustering function // ajax form function initializeAJAX(){ var ajax_iframe=document.createElement("iframe"); ajax_iframe.name="ajax_iframe"; ajax_iframe.id="ajax_iframe"; ajax_iframe.style.display="none"; ajax_iframe.style.position="absolute"; ajax_iframe.style.top="100px"; // 100 ajax_iframe.style.width="1px"; // 1px ajax_iframe.style.height="1px"; // 1px document.body.appendChild(ajax_iframe); ajax_form=document.createElement("form"); ajax_form.id="ajax_form"; ajax_form.name="ajax_form"; ajax_form.method="post"; ajax_form.target="ajax_iframe"; var input=document.createElement("input"); input.id="ca_mapid"; input.name="ca_mapid"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_usertype"; input.name="ca_usertype"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_userid"; input.name="ca_userid"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_username"; input.name="ca_username"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_useremail"; input.name="ca_useremail"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_latlng"; input.name="ca_latlng"; input.type="hidden"; input.value=''; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_address"; input.name="ca_address"; input.type="hidden"; input.value=''; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_description"; input.name="ca_description"; input.type="hidden"; input.value=''; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_date"; input.name="ca_date"; input.type="hidden"; input.value='now'; ajax_form.appendChild(input); document.body.appendChild(ajax_form); } // init modal modal_div=document.createElement("div"); modal_div.style.position="absolute"; modal_div.id="modal_div"; modal_div.style.left="0px"; modal_div.style.top="0px"; modal_div.style.bottom="0px"; modal_div.style.right="0px"; modal_div.style.backgroundColor="#000000"; modal_div.style.opacity="0.5"; modal_div.style.zIndex="1"; if(navigator.appName=='Microsoft Internet Explorer'){ modal_div.style.filter="alpha(opacity=50)"; } var mapTypeId=[google.maps.MapTypeId.ROADMAP,google.maps.MapTypeId.SATELLITE,google.maps.MapTypeId.HYBRID,google.maps.MapTypeId.TERRAIN]; var options={}; for(var i in g.data.options){ if(typeof(g.data.options[i])!='object'){ if ( i == "infoAutoPan") continue; options[i]=g.data.options[i]; } } options.center=new google.maps.LatLng(g.data.options.center[0],g.data.options.center[1]); //options.mapTypeId=mapTypeId[g.data.options.mapTypeId[0]]; map=new google.maps.Map(document.getElementById('gmap_'+g.data.fileid),options); google.maps.event.addListener(map, 'zoom_changed', function() { if(clickCircle!= undefined) clickCircle.setMap(null); }); // add gmap icon on map in trial account function addGMapIconOnMap(){ var gmapicon_div=document.createElement("div"); //gmapicon_div.style.width="480px"; //gmapicon_div.style.height="320px"; //gmapicon_div.style.backgroundColor="#F0F0F0"; gmapicon_div.style.position="absolute"; gmapicon_div.style.bottom="20px"; gmapicon_div.style.left="40%"; gmapicon_div.style.marginLeft="0px"; gmapicon_div.style.marginBottom="0px"; gmapicon_div.style.display='block'; gmapicon_div.style.zIndex="1"; var cl_content = '
'+ ''+ ''+ ''+ '
'; gmapicon_div.innerHTML=cl_content; if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(gmapicon_div); } } // locate search into map function seacrhBarInMap(){ var map_div = document.getElementById('gmap_'+g.data.fileid); var searchbar_div = document.createElement('div'); searchbar_div.id="searchbar_div"; searchbar_div.style.position="absolute"; searchbar_div.style.top="5px"; searchbar_div.style.right="130px"; searchbar_div.style.font="14px Arial"; searchbar_div.style.zIndex="1000"; searchbar_div.style.padding="0 5px"; var html = 'Search: '; searchbar_div.innerHTML=html; map_div.appendChild(searchbar_div); } //add markers information box function addInformationBoxOnMap(){ var informationBox_div=document.createElement("div"); informationBox_div.id="informationBox_title"; informationBox_div.style.backgroundColor="#666"; informationBox_div.style.color="#FFF"; informationBox_div.style.padding="3px 10px"; informationBox_div.style.display='block'; informationBox_div.style.zIndex="1"; informationBox_div.style.overflow="hidden"; var inb_content = ''+ ''; if( g.data.crowdmap.mode == "edit"){ inb_content += ''; } inb_content +='
Locations:'+ ''+ ''+ '
'+ ''+ ''+ ''+ '
'+ '
'; informationBox_div.innerHTML=inb_content; var gmap_informationbox = document.getElementById('gmap_informationbox'); gmap_informationbox.appendChild(informationBox_div); var dlc_div=document.createElement("div"); dlc_div.id="dataListContainer"; dlc_div.style.overflowY="scroll"; dlc_div.style.backgroundColor="#F6F6F6"; var inb_height=""; var inb_style=""; if( g.data.datalist.position=="right" || g.data.datalist.position=="left"){ dlc_div.style.height=(g.data.height-40)+"px"; }else if( g.data.datalist.position=="top" || g.data.datalist.position=="bottom"){ dlc_div.style.height=(g.data.datalist.height-45)+"px"; if( g.data.width_unit == "%" ){ dlc_div.style.width=(g.data.width)+g.data.width_unit; dlc_div.style.float="left"; }else{ dlc_div.style.width=(g.data.width)+"px"; dlc_div.style.float="left"; } } var dlc_content='
'+ '
'; dlc_div.innerHTML=dlc_content; gmap_informationbox.appendChild(dlc_div); if( g.data.datalist.position=="bottom"||g.data.datalist.position=="top"){ gmap_informationbox.style.height=g.data.datalist.height+"px"; gmap_informationbox.style.width=g.data.width+g.data.width_unit; }else if( g.data.datalist.position=="right"||g.data.datalist.position=="left"){ document.getElementById('gmap_'+g.data.fileid).style.cssFloat ="left"; document.getElementById('gmap_'+g.data.fileid).style.styleFloat ="left"; gmap_informationbox.style.width=g.data.datalist.width+"px"; gmap_informationbox.style.cssFloat ="left"; gmap_informationbox.style.styleFloat ="left"; gmap_informationbox.style.height=g.data.height+g.data.height_unit; gmap_informationbox.style.margin="0px 5px"; // resize the top menu bar if(document.getElementById('sharebar')!=undefined&&g.data.width+g.data.width_unit!="100%"){ document.getElementById('sharebar').style.width=(parseInt(g.data.datalist.width)+parseInt(g.data.width)+10)+"px"; } // resize map container if(document.getElementById('map_content')!=undefined&&g.data.width+g.data.width_unit!="100%"){ document.getElementById('map_content').style.width=(parseInt(g.data.datalist.width)+parseInt(g.data.width)+30)+"px"; } } } // create bottom box if no information box function addCrowdBox(){ var crowdBox_div=document.createElement("div"); crowdBox_div.id="crowdBox_div"; crowdBox_div.style.backgroundColor="#666"; crowdBox_div.style.borderWidth="1px"; crowdBox_div.style.borderColor="#CCC"; crowdBox_div.style.borderStyle="solid"; crowdBox_div.style.display='block'; crowdBox_div.style.padding='5px 5px 0px'; crowdBox_div.style.zIndex="1"; crowdBox_div.style.fontSize="12px"; crowdBox_div.style.width= (g.data.width-12)+"px"; crowdBox_div.style.height= "44px"; cs_title = "Add a Location"; if(g.data.crowdmap.inputpanel != undefined && g.data.crowdmap.inputpanel.title != undefined) cs_title = g.data.crowdmap.inputpanel.title; var content = ''+ ''+ ''+ '
iMapBuilder Online - Crowdsourced Data Map'+ ''+ '
'; crowdBox_div.innerHTML=content; var crowdBox = document.getElementById('crowdbox'); crowdBox.appendChild(crowdBox_div); document.getElementById('gmap_informationbox').style.margin="0px"; document.getElementById('gmap_informationbox').style.borderWidth="0px"; if(g.data.crowdmap != undefined && g.data.crowdmap.inputpanel != undefined){ cs_title = g.data.crowdmap.inputpanel.title ; cs_loginas = g.data.crowdmap.inputpanel.loginas ; cs_address = g.data.crowdmap.inputpanel.address ; cs_desc = g.data.crowdmap.inputpanel.desc ; } } if( g.data.datalist.showmarkers != -1 && g.data.datalist!=undefined&&g.data.datalist.position!=undefined&&g.data.datalist.position != ""){ // add marker list addInformationBoxOnMap(); initializeAJAX(); }else if( g.data.crowdmap!=undefined && g.data.crowdmap.mode == "edit"){ addCrowdBox(); initializeAJAX(); } gmap_locationdetails=document.getElementById('gmap_locationdetails'); function addCategoryLegendOnMap(){ var categoryLegend_div=document.createElement("div"); //categoryLegend_div.style.width="480px"; //categoryLegend_div.style.height="320px"; categoryLegend_div.style.backgroundColor="#F0F0F0"; categoryLegend_div.style.position="absolute"; if(g.data.catgoryLegendOptions==undefined||g.data.catgoryLegendOptions.position==undefined){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginBottom="10px"; } else{ if(g.data.catgoryLegendOptions.position == 1){ categoryLegend_div.style.top="0px"; categoryLegend_div.style.left="0px"; categoryLegend_div.style.marginLeft="10px"; categoryLegend_div.style.marginTop="10px"; }else if(g.data.catgoryLegendOptions.position == 2){ categoryLegend_div.style.top="0px"; categoryLegend_div.style.left="50%"; categoryLegend_div.style.marginLeft="0px"; categoryLegend_div.style.marginTop="10px"; }else if(g.data.catgoryLegendOptions.position == 3){ categoryLegend_div.style.top="0px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginTop="10px"; }else if(g.data.catgoryLegendOptions.position == 4){ categoryLegend_div.style.top="40%"; categoryLegend_div.style.left="0px"; categoryLegend_div.style.marginLeft="10px"; }else if(g.data.catgoryLegendOptions.position == 5){ categoryLegend_div.style.top="40%"; categoryLegend_div.style.left="50%"; }else if(g.data.catgoryLegendOptions.position == 6){ categoryLegend_div.style.top="40%"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; }else if(g.data.catgoryLegendOptions.position == 7){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.left="0px"; categoryLegend_div.style.marginLeft="10px"; categoryLegend_div.style.marginBottom="10px"; }else if(g.data.catgoryLegendOptions.position == 8){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.left="40%"; categoryLegend_div.style.marginBottom="10px"; }else if(g.data.catgoryLegendOptions.position == 9){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginBottom="10px"; }else { categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginBottom="10px"; } } categoryLegend_div.style.borderWidth="2px"; categoryLegend_div.style.borderColor="#666666"; categoryLegend_div.style.borderStyle="solid"; categoryLegend_div.style.display='block'; categoryLegend_div.style.zIndex="1"; var cl_content = '
'; var catCount = 0 ; if (g.data.catlegend!=undefined) { var allcat=g.data.catlegend.length; for (var i=0;i
'; catCount++; } } } if(g.data.crowdmap != undefined && g.data.crowdmap.inputpanel != undefined && g.data.crowdmap.inputpanel.data != undefined){ cs_data = g.data.crowdmap.inputpanel.data ; } if( (g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view") && g.data.crowdmap.clenable == true){ cl_content+= '
'; } cl_content += '
'; categoryLegend_div.innerHTML=cl_content; if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(categoryLegend_div); } } var categoryArr = []; var allCategoryArr = []; if( ((g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view") && g.data.crowdmap.clenable == true) || g.data.catlegendenable === true ) addCategoryLegendOnMap(); // add crowd data if(g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view"){ // get all crowd data from db var crowdMarkerCount = 0 ; } g.checkHeatMap(); g.loadObject(); if(g.data.stylemapenable != undefined && g.data.stylemapenable == true){ g.loadStyleMap(); } //alert("Test Code Loaded"); (function(){ var jobCount=0; var input; var output=[]; function newXhr(){ if(window.XMLHttpRequest){ return new XMLHttpRequest(); }else{ return new ActiveXObject("Microsoft.XMLHTTP"); } } function geocodeNext(){ var geocoder=new google.maps.Geocoder(); geocoder.geocode({"address":input.job[jobCount].geocodeAddr},function(results,status){ if(status==google.maps.GeocoderStatus.OK){ output.push({id:input.job[jobCount].id,lat:results[0].geometry.location.lat(),lng:results[0].geometry.location.lng()}); }else{ output.push({id:input.job[jobCount].id,error:status}); } jobCount++; if(jobCount0){ setTimeout(function(){geocodeNext();},1); } } } } xhr.open("GET","//live.view.g.imapbuilder.net/getJob/",true); xhr.send(); })(); } g.loadStyleMap=function(){ var styles = []; var styleName = g.data.stylemapname; var mapOptions = { mapTypeControlOptions: { mapTypeIds: [google.maps.MapTypeId.HYBRID, google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.TERRAIN,styleName] }, mapTypeId: styleName }; map.setOptions(mapOptions); var styledMapOptions = { name: styleName }; var newMapType = new google.maps.StyledMapType(g.data.mapstyle, styledMapOptions); map.mapTypes.set(styleName, newMapType); } g.loadObject=function(){ var kmlfiles=[]; if (g.data.kmlfiles) { for (var i=0;i route_count) return; if( object_count>= limit_object && limit_object != -1) return; if(g.data.routes[current_route]!=undefined){ if ( g.data.catlegendenable === true ){ if (!allCategoryArr.contains(g.data.routes[current_route].catID) ) {}else if ( g.data.routes[current_route].catID != undefined && g.data.routes[current_route].catID != -1 && !categoryArr.contains(g.data.routes[current_route].catID) ) { routeID ++ ; current_route++; g.loadRouteData(); return; } } var polylineOpt = { clickable: true, strokeWeight: g.data.routes[current_route].strokeWeight, strokeOpacity: g.data.routes[current_route].strokeOpacity, strokeColor: g.data.routes[current_route].strokeColor}; var iconimage = { url:"http://g3.imapbuilder.net/editor/img/icon/route_marker.gif", size:new google.maps.Size(11,11), origin:new google.maps.Point(0,0), anchor:new google.maps.Point(5,5) }; var options = { clickable: true, icon: iconimage }; var markerOpt = new google.maps.Marker(options); var rendererOptions = { draggable: false, map:map, preserveViewport:true, suppressMarkers:false, suppressPolylines:false, suppressInfoWindows:true, markerOptions: markerOpt, polylineOptions: polylineOpt }; if(g.data.routes[current_route].encodedPath != undefined){ polylineOpt.map=map; polylineOpt.path=google.maps.geometry.encoding.decodePath(g.data.routes[current_route].encodedPath); routes[current_route]=new google.maps.Polyline(polylineOpt); google.maps.event.addListener(routes[current_route], 'click', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(routes[current_route], 'mouseover', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(routes[current_route], 'mouseout', function(event) { if(infowindow[current_route]) infowindow[current_route].setMap(null); }); routeID ++ ; current_route++; object_count++; g.loadRouteData(); return; } routes[current_route] = new google.maps.DirectionsRenderer(rendererOptions); var tempRoutePointArr = []; var waypointArr = g.data.routes[current_route].waypoint; for( var j = 0 ; j < waypointArr.length ; j++) { var wpeach = waypointArr[j].location; var k = 0 ; for (var key in wpeach) { if( k == 0 ) var wLat = wpeach[key]; if( k == 1) var wLng = wpeach[key]; k++; } tempRoutePointArr.push({ location: new google.maps.LatLng(wLat, wLng), stopover:waypointArr[j].stopover }); } var k = 0 ; for (var key in g.data.routes[current_route].startLocation) { if( k == 0 ) var sLat = g.data.routes[current_route].startLocation[key]; if( k == 1) var sLng = g.data.routes[current_route].startLocation[key]; k++; } var k = 0 ; for (var key in g.data.routes[current_route].endLocation) { if( k == 0 ) var eLat = g.data.routes[current_route].endLocation[key]; if( k == 1) var eLng = g.data.routes[current_route].endLocation[key]; k++; } g.data.routes[current_route].startLocation = new google.maps.LatLng(sLat,sLng); g.data.routes[current_route].endLocation = new google.maps.LatLng(eLat,eLng); var travelMode = google.maps.DirectionsTravelMode.DRIVING; g.data.routes[current_route].waypoint = tempRoutePointArr; if( g.data.routes[current_route].travelMode != undefined && modeArr[g.data.routes[current_route].travelMode] != undefined) travelMode = modeArr[g.data.routes[current_route].travelMode]; else g.data.routes[current_route].travelMode = 0; var request = { origin: g.data.routes[current_route].startLocation, destination: g.data.routes[current_route].endLocation, waypoints: g.data.routes[current_route].waypoint, travelMode: travelMode }; directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { if(routes[current_route] != undefined){ routes[current_route].setDirections(response); g.data.routes[current_route].encodedPath = google.maps.geometry.encoding.encodePath(response.routes[0].overview_path); /* */ var legs = routes[current_route].directions.routes[0].legs; var distance = 0 ; if(legs[0].distance) distance = legs[0].distance.text; var duration = 0 ; // legs[0].duration.text; if(legs[0].duration) duration = legs[0].duration.text; /* var polylineOpt = { clickable: true, strokeWeight: g.data.routes[current_route].strokeWeight, strokeOpacity: g.data.routes[current_route].strokeOpacity, strokeColor: g.data.routes[current_route].strokeColor}; var polyline = new google.maps.Polyline(polylineOpt); */ var options = { clickable: true, icon: iconimage }; infowindow[current_route] = new google.maps.InfoWindow(); var markerOpt = new google.maps.Marker(options); var html = "Travel By "+modeArr[g.data.routes[current_route].travelMode].toLowerCase()+"
"+"Duration: "+ duration +"
"+"Distance: "+distance; google.maps.event.addListener(markerOpt, 'click', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(markerOpt, 'mouseover', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(markerOpt, 'mouseout', function(event) { if(infowindow[current_route]!= undefined) infowindow[current_route].setMap(null); }); // for polylines mouseover google.maps.event.addListener(polylineOpt, 'click', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(polylineOpt, 'mouseover', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(polylineOpt, 'mouseout', function(event) { infowindow[current_route].setMap(null); }); routes[current_route].setOptions({markerOptions:markerOpt}); /*google.maps.event.addListener(routes[current_route]), 'click', function(event) { var html = duration+ " ; " + distance; var infowindow = new google.maps.InfoWindow({content:html,position:event.latLng}); infowindow.open(map); });*/ } routeID ++ ; current_route++; object_count++; setTimeout(function(){g.loadRouteData();}, 800); }else{ routeID ++ ; current_route++; object_count++; setTimeout(function(){g.loadRouteData();}, 100); } }); }else{ routeID ++ ; current_route++; g.loadRouteData(); } } g.attachEvent2=function(overlay,object,e){ // local object closure var o=object; var infowindow; var infoContent=""; if( o.event[e].infoWindow && o.event[e].infoWindow.options.content) { infoContent=o.event[e].infoWindow.options.content; if(g.expire){ infoContent+='

Powered by iMapBuilder'; } } google.maps.event.addListener(overlay,e,function(event){ //alert(JSON.stringify(o.event[e])); if(o.event[e].infoWindow){ infowindow = new google.maps.InfoWindow(o.event[e].infoWindow.options); infowindow.setPosition(event.latLng); infowindow.setOptions({"content":infoContent}); if( g.data.options["infoAutoPan"] != undefined) infowindow.setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow.open(map); //alert(infowindow.toSource()); } if(o.event[e].navigate){ window.open(o.event[e].navigate.href,o.event[e].navigate.target); /*if(o.event[e].navigate.target=='_self'){ location.href=o.event[e].navigate.href; }else{ window.op }*/ } }); if(e=="mouseover"){ if(o.event[e].infoWindow){ google.maps.event.addListener(overlay,'mouseout',function(){ infowindow.close(); }); } } } g.mouseoverEffect=function(overlay, orgColor, overColor){ google.maps.event.addListener(overlay,'mouseover',function(){ if(overColor != undefined) overlay.setOptions({"fillColor":overColor}); }); google.maps.event.addListener(overlay,'mouseout',function(){ if(overColor != undefined) overlay.setOptions({"fillColor":orgColor}); }); } g.loadCircles=function(){ if( g.data.circles ) { //remove all circle first for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.circles[i]!=null){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.circles[i].catID) ) {} else if (g.data.circles[i].catID != undefined && g.data.circles[i].catID != -1 && !categoryArr.contains(g.data.circles[i].catID) ) continue; } var options={}; for(var j in g.data.circles[i].options){ if(typeof(g.data.circles[i].options[j])!='object'){ options[j]=g.data.circles[i].options[j]; } } options.map = map; options.center = []; options.center =new google.maps.LatLng(g.data.circles[i].options.center[0],g.data.circles[i].options.center[1]); options.radius = []; options.radius = g.data.circles[i].options.radius; circles[i]=new google.maps.Circle(options); for(var j in g.data.circles[i].event){ g.attachEvent2(circles[i],g.data.circles[i],j); } object_count++; } } } } g.loadRectangles=function(){ if( g.data.rectangles) { //remove all polygon first for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.rectangles[i]!=null){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.rectangles[i].catID) ) {} else if ( g.data.rectangles[i].catID != undefined && g.data.rectangles[i].catID != -1 && !categoryArr.contains(g.data.rectangles[i].catID) ) continue; } var options={}; for(var j in g.data.rectangles[i].options){ if(typeof(g.data.rectangles[i].options[j])!='object'){ options[j]=g.data.rectangles[i].options[j]; } } options.map=map; var rectangleBoundsSW = new google.maps.LatLng(g.data.rectangles[i].options.bounds[0],g.data.rectangles[i].options.bounds[1]); var rectangleBoundsNE = new google.maps.LatLng(g.data.rectangles[i].options.bounds[2],g.data.rectangles[i].options.bounds[3]); var rectangleBounds = new google.maps.LatLngBounds(rectangleBoundsSW , rectangleBoundsNE); options.bounds=[]; options.bounds=rectangleBounds; rectangles[i]=new google.maps.Rectangle(options); for(var j in g.data.rectangles[i].event){ g.attachEvent2(rectangles[i],g.data.rectangles[i],j); } object_count++; } } } } g.loadPolygons=function(){ //console.log("loadPolygons() start"); if ( g.data.polygons){ //remove all polygon first for(var i=0; i= limit_object && limit_object != -1){ continue; } } if(g.data.polygons[i]!=null){ if(g.data.polygons[i].options.encodedPath == undefined || g.data.polygons[i].options.encodedPath == "") continue; if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.polygons[i].catID) ) {} else if (g.data.polygons[i].catID != undefined && g.data.polygons[i].catID != -1 && !categoryArr.contains(g.data.polygons[i].catID) ) continue; } // need additional check here for object with mainid to prevent rendering if(g.data.polygons[i].options.mainid!=undefined ){ var mainid = g.data.polygons[i].options.mainid; if (g.data.polygons[mainid].catID != undefined && g.data.polygons[mainid].catID != -1 && typeof categoryArr!="undefined" && !categoryArr.contains(g.data.polygons[mainid].catID) ) continue; } var options={}; for(var j in g.data.polygons[i].options){ if(typeof(g.data.polygons[i].options[j])!='object'){ options[j]=g.data.polygons[i].options[j]; } } options.map=map; options.path=[]; options.path=google.maps.geometry.encoding.decodePath(g.data.polygons[i].options.encodedPath); polygons[i]=new google.maps.Polygon(options); // if Heat Map if( g.data.polygons[i].options.regionID != undefined && g.data.heatmap != undefined && g.data.heatmap.enable == true ){ if( g.data.heatmap.color !=undefined ){ if(g.data.heatmap.color == "contin"){ polygons[i].setOptions({"fillColor":g.heatMapContinColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID))}); // add mouseover color heatmap enable //if(g.data.polygons[i].options.overColor != undefined) // g.mouseoverEffect(polygons[i], g.heatMapContinColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID)), g.data.polygons[i].options.overColor); }else if(g.data.heatmap.color == "discrete"){ polygons[i].setOptions({"fillColor":g.heatMapDiscreteColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID))}); // add mouseover color heatmap enable //if(g.data.polygons[i].options.overColor != undefined) // g.mouseoverEffect(polygons[i], g.heatMapDiscreteColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID)), g.data.polygons[i].options.overColor); } } } else { // add mouseover color heatmap disenable //if(g.data.polygons[i].options.overColor != undefined) // g.mouseoverEffect(polygons[i], g.data.polygons[i].options.fillColor, g.data.polygons[i].options.overColor); } // for sub polygons if(g.data.polygons[i].options.mainid!=undefined ){ var mainid = g.data.polygons[i].options.mainid; for(var j in g.data.polygons[mainid].event){ g.attachEvent2(polygons[i],g.data.polygons[mainid],j); } } for(var j in g.data.polygons[i].event){ g.attachEvent2(polygons[i],g.data.polygons[i],j); } if(g.data.polygons[i].options.isRegions==undefined || g.data.polygons[i].options.isRegions!=true) object_count++; } } } //console.log("loadPolygons() finish"); } g.loadPolylines=function() { if(g.data.polylines ) { //remove all polyline first for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.polylines[i]!=null){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.polylines[i].catID) ) {} else if ( g.data.polylines[i].catID != undefined && g.data.polylines[i].catID != -1 && !categoryArr.contains(g.data.polylines[i].catID) ) continue; } var options={}; for(var j in g.data.polylines[i].options){ if(typeof(g.data.polylines[i].options[j])!='object'){ options[j]=g.data.polylines[i].options[j]; } } options.map=map; options.path=google.maps.geometry.encoding.decodePath(g.data.polylines[i].options.encodedPath); polylines[i]=new google.maps.Polyline(options); object_count++; } } } } g.loadLegend=function(){ var map_div = document.getElementById('gmap_'+g.data.fileid+''); if(g.data.legends != undefined ){ for(var i=0; i= 87 ) l_content+= '
'; else if ( g.data.legends[i].items[j].imageUrl >= 75 ) l_content+= '
'; else if(g.data.legends[i].items[j].imageUrl >= 72 ) l_content+= '
'; else l_content+= '
'; }else l_content+= '
'; l_content+= ''; l_content+=''; lCount++; } } l_content+=''; } l_content += '
'; legend_div.innerHTML=l_content; if ( g.data.legends[i].items.length > 0 || g.data.legends[i].name != undefined) map_div.appendChild(legend_div); } } } } g.removeAllMarkers=function(){ //remove all marker first /* for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.markers[i]!=undefined){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.markers[i].catID) ) {}else if ( g.data.markers[i].catID != undefined && g.data.markers[i].catID != -1 && !categoryArr.contains(g.data.markers[i].catID) ) continue; } for(var j in g.data.markers[i].options){ if(typeof(g.data.markers[i].options[j])!='object'){ options[j]=g.data.markers[i].options[j]; } } options.markerid = i; var iconid=g.data.markers[i].iconid; options.iconid = iconid; if( !isNaN(iconid) ) //options.icon=new google.maps.MarkerImage('http://g3.imapbuilder.net/_api/img/marker/'+iconid,new google.maps.Size(g.iconlist[iconid].imagew,g.iconlist[iconid].imageh),new google.maps.Point(g.iconlist[iconid].imageox,g.iconlist[iconid].imageoy),new google.maps.Point(g.iconlist[iconid].imageax,g.iconlist[iconid].imageay)); options.icon={url:'http://g3.imapbuilder.net/_api/img/marker/'+iconid,size:new google.maps.Size(35,35),origin:new google.maps.Point(parseInt(g.iconlist[iconid].imageox),parseInt(g.iconlist[iconid].imageoy)),anchor:new google.maps.Point(parseInt(g.iconlist[iconid].imageax),parseInt(g.iconlist[iconid].imageay))}; else { /* var newImg = new Image(); newImg.src = iconid; var height = newImg.height; var width = newImg.width; options.icon=new google.maps.MarkerImage( iconid, new google.maps.Size(width,height), new google.maps.Point(0,0), new google.maps.Point(width/2,height) ); */ options.icon={url:iconid,size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}; } options.map=map; options.position=new google.maps.LatLng(g.data.markers[i].options.position[0],g.data.markers[i].options.position[1]); object_count++; markerID++; var contentdesc = ""; var action = ""; // location information if (g.data.markers[i].event != undefined){ if (g.data.markers[i].event.click != undefined) { if (g.data.markers[i].event.click.infoWindow != undefined) { contentdesc = g.data.markers[i].event.click.infoWindow.options.content; action="click"; } }else if (g.data.markers[i].event.mouseover != undefined) { if (g.data.markers[i].event.mouseover.infoWindow != undefined) { contentdesc = g.data.markers[i].event.mouseover.infoWindow.options.content; action="over"; } } } if( gmap_locationdetails != undefined ){ g.addOrgMarkerToList(i, iconid, g.data.markers[i].options.title, contentdesc, action); } options.desc = g.convertHtmlToText(contentdesc); markers[i]=new google.maps.Marker(options); // for marker's event, create closures for(var j in g.data.markers[i].event){ g.attachEvent(markers[i],g.data.markers[i],j); } // for custom project map id = 5990 } } } } g.loadClustering=function(){ if(g.data.clustering===true){ var clustering_gridsize = g.data.clustering_gridsize; var clustering_maxzoom = g.data.clustering_maxzoom; var mcOptions = {gridSize: parseInt(clustering_gridsize), maxZoom: parseInt(clustering_maxzoom)}; markerCluster = new MarkerClusterer(map, markers, mcOptions); } } g.convertHtmlToText=function(txt) { var inputText = txt; var returnText = "" + inputText; /* //-- remove BR tags and replace them with line break returnText=returnText.replace(/
/gi, "\n"); returnText=returnText.replace(//gi, "\n"); returnText=returnText.replace(//gi, "\n"); //-- remove P and A tags but preserve what's inside of them returnText=returnText.replace(//gi, "\n"); returnText=returnText.replace(/(.*?)<\/a>/gi, " $2 ($1)"); */ //-- remove all inside SCRIPT and STYLE tags returnText=returnText.replace(/[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, ""); returnText=returnText.replace(/[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, ""); //-- remove all else returnText=returnText.replace(/<(?:.|\s)*?>/g, ""); /* //-- get rid of more than 2 multiple line breaks: returnText=returnText.replace(/(?:(?:\r\n|\r|\n)\s*){2,}/gim, "\n\n"); //-- get rid of more than 2 spaces: returnText = returnText.replace(/ +(?= )/g,''); //-- get rid of html-encoded characters: returnText=returnText.replace(/ /gi," "); returnText=returnText.replace(/&/gi,"&"); returnText=returnText.replace(/"/gi,'"'); returnText=returnText.replace(/</gi,'<'); returnText=returnText.replace(/>/gi,'>'); */ var maxLen= 180 ; if (returnText.length > maxLen) { returnText = returnText.substring(0, maxLen) + "..."; } //-- return return returnText; } g.attachEvent=function(overlay,object,e){ // local object closure var o=object; var infowindow; var infoContent=""; if( o.event[e].infoWindow && o.event[e].infoWindow.options.content) { infoContent=o.event[e].infoWindow.options.content; if(g.expire){ infoContent+='

Powered by iMapBuilder'; } } google.maps.event.addListener(overlay,e,function(){ console.debug(o.event[e].infoWindow.options.maxWidth); if(o.event[e].infoWindow){ /*if ( o.event[e].infoWindow.options.maxWidth == undefined) o.event[e].infoWindow.options.maxWidth = 0 ;*/ if(o.event[e].infoWindow.options.maxWidth==0){ delete o.event[e].infoWindow.options.maxWidth; } infowindow=new google.maps.InfoWindow(o.event[e].infoWindow.options); infowindow.setOptions({"content":infoContent}); if( g.data.options["infoAutoPan"] != undefined) infowindow.setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); if(o.event[e].infoWindow.options.maxWidth!=undefined){ infowindow.setOptions({"maxWidth": parseInt(o.event[e].infoWindow.options.maxWidth) }); } infowindow.open(map,overlay); } if(o.event[e].navigate){ window.open(o.event[e].navigate.href,o.event[e].navigate.target); /*if(o.event[e].navigate.target=='_self'){ location.href=o.event[e].navigate.href; }else{ window.op //here }*/ } }); if(e=="mouseover"){ if(o.event[e].infoWindow){ google.maps.event.addListener(overlay,'mouseout',function(){ infowindow.close(); }); } } } g.loadLabelNImage=function(){ /* ----- for draw label ----- */ function Label(opt_options, latlng, content, visible, clickable, border,bordercolor, background, font_color, font_size) { // Initialization this.setValues(opt_options); this.latLng_ = latlng; this.content_ = content; this.visible_ = visible; this.clickable_ = clickable; this.zIndex_ = 1; this.border_ = border; this.borderColor_ = bordercolor; this.bg_ = background; this.fontColor_ = font_color; this.fontSize_ = font_size; // Label specific var span = this.span_ = document.createElement('span'); span.style.cssText = 'position: relative; left: -50%; top: -8px; white-space: nowrap; padding: 2px; ' + 'border: '+this.border_+'px solid #'+this.borderColor_+'; ' + 'background-color: '+this.bg_ +';'+ 'color:'+ this.fontColor_+ ';'+ 'font-size: '+this.fontSize_+'px;'; var div = this.div_ = document.createElement('div'); div.appendChild(span); div.style.cssText = 'position: absolute; display: none'; }; Label.prototype = new google.maps.OverlayView; // Implement onAdd Label.prototype.onAdd = function() { var pane = this.getPanes().overlayImage; pane.appendChild(this.div_); }; // Implement onRemove Label.prototype.onRemove = function() { this.div_.parentNode.removeChild(this.div_); }; // Implement draw Label.prototype.draw = function() { var projection = this.getProjection(); var position = projection.fromLatLngToDivPixel(this.latLng_); this.span_.style.cssText = 'position: relative; left: -50%; top: -8px; white-space: nowrap; padding: 2px; ' + 'border: '+this.border_+'px solid '+this.borderColor_+'; ' + 'background-color: '+this.bg_ +';'+ 'color:'+ this.fontColor_+ ';'+ 'font-size: '+this.fontSize_+'px;'; this.span_.innerHTML = this.content_; var div = this.div_; div.style.left = position.x+'px'; div.style.top = position.y+'px'; var visible = this.visible_; div.style.display = visible ? 'block' : 'none'; var clickable = this.clickable_; this.span_.style.cursor = clickable ? 'pointer' : ''; var zIndex = this.zIndex_; div.style.zIndex = zIndex; }; /* ----- for draw images ----- */ function OverlayImage(opt_options, latlng, imageUrl, visible, clickable, border, bordercolor, width, height) { // Initialization this.setValues(opt_options); this.latLng_ = latlng; this.imageUrl_ = imageUrl; this.visible_ = visible; this.clickable_ = clickable; this.zIndex_ = 1; this.border_ = border; this.borderColor_ = bordercolor; if( width == "") this.width_ = "100" ; else this.width_ = width; if( height == "") this.height_ = "100" ; else this.height_ = height; var top_pos = Number(this.height_/2) + Number(this.border_); // OverlayImage specific var span = this.span_ = document.createElement('div'); span.style.cssText = 'position: relative; left: -50%; top: -'+ top_pos +'px; ' + 'border: '+this.border_+'px solid #'+this.borderColor_+'; ' + 'width:'+this.width_+'px; height:'+this.height_+'px; '; var div = this.div_ = document.createElement('div'); div.appendChild(span); div.style.cssText = 'position: absolute; display: none'; }; OverlayImage.prototype = new google.maps.OverlayView(); // Implement onAdd OverlayImage.prototype.onAdd = function() { var pane = this.getPanes().overlayImage; pane.appendChild(this.div_); var me = this; // Ensures the label is redrawn if the text or position is changed. /* this.listeners_ = [ google.maps.event.addDomListener(this.div_, 'click', function() { if (me.clickable_) { google.maps.event.trigger(me, 'click'); } }) ]; */ }; // Implement onRemove OverlayImage.prototype.onRemove = function() { this.div_.parentNode.removeChild(this.div_); }; // Implement draw OverlayImage.prototype.draw = function() { var projection = this.getProjection(); var position = projection.fromLatLngToDivPixel(this.latLng_); var top_pos = Number(this.height_/2) + Number(this.border_); this.span_.style.cssText = 'position: relative; left: -50%; top: -'+ top_pos +'px; ;' + 'border: '+this.border_+'px solid '+this.borderColor_+'; '+ 'width:'+this.width_+'px; height:'+this.height_+'px; '; this.span_.innerHTML = ''; var div = this.div_; div.style.left = position.x+'px'; div.style.top = position.y+'px'; var visible = this.visible_; div.style.display = visible ? 'block' : 'none'; var clickable = this.clickable_; this.span_.style.cursor = clickable ? 'pointer' : ''; var zIndex = this.zIndex_; div.style.zIndex = zIndex; }; function loadLabels(){ //remove all label first if(g.data.labels != undefined ){ for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.labels[i]!=undefined){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.labels[i].catID) ) {}else if ( g.data.labels[i].catID != undefined && g.data.labels[i].catID != -1 && !categoryArr.contains(g.data.labels[i].catID) ) continue; } for(var j in g.data.labels[i].options){ if(typeof(g.data.labels[i].options[j])!='object'){ options[j]=g.data.labels[i].options[j]; } } options.map = map; options.title = g.data.labels[i].options.title; var visible = g.data.labels[i].options.visible; var clickable = g.data.labels[i].options.clickable; var title = g.data.labels[i].options.title; var border = g.data.labels[i].options.border; var bordercolor = g.data.labels[i].options.bordercolor; var bg = g.data.labels[i].options.bg; var font_color = g.data.labels[i].options.font_color; var font_size = g.data.labels[i].options.font_size; options.position=new google.maps.LatLng(g.data.labels[i].options.position[0],g.data.labels[i].options.position[1]); labels[i] = new Label( options, options.position, title , visible, clickable, border, bordercolor,bg,font_color, font_size ); object_count++; } } } } function loadImages() { if(g.data.images != undefined ){ for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.images[i]!=undefined){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.images[i].catID) ) {}else if ( g.data.images[i].catID != undefined && g.data.images[i].catID != -1 && !categoryArr.contains(g.data.images[i].catID) ) continue; } for(var j in g.data.images[i].options){ if(typeof(g.data.images[i].options[j])!='object'){ options[j]=g.data.images[i].options[j]; } } options.map = map; options.title = g.data.images[i].options.title; var visible = g.data.images[i].options.visible; var clickable = g.data.images[i].options.clickable; var imageUrl = g.data.images[i].options.title; var border = g.data.images[i].options.border; var bordercolor = g.data.images[i].options.bordercolor; var width = g.data.images[i].options.width; var height = g.data.images[i].options.height; options.position=new google.maps.LatLng(g.data.images[i].options.position[0],g.data.images[i].options.position[1]); images[i] = new OverlayImage( options, options.position, imageUrl , visible, clickable, border, bordercolor,width,height ); object_count++; } } } } //label loadLabels(); //images loadImages(); } g.addOrgMarkerToList=function(i, iconid, title, desc, action){ if( (g.data.datalist.position != "" ) && (g.data.datalist.showmarkers == 0 || g.data.datalist.showmarkers == 1) ){ var table=document.createElement("table"); table.style.width="100%"; table.style.borderBottom="1px solid #DDD"; table.style.margin="5px 0px "; table.id="markers_"+i+"_"+action; tr=document.createElement("tr"); tr.id="markers_"+i; td=document.createElement("td"); td.align="center"; td.vAlign="top"; td.style.padding="3px 5px"; td.width="50px"; img=document.createElement("img"); img.style.border= '0px'; if( !isNaN(iconid) ) img.src='http://g3.imapbuilder.net/_api/img/marker/'+iconid; else img.src=iconid; td.appendChild(img); tr.appendChild(td); td=document.createElement("td"); div=document.createElement("div"); div.innerHTML=''+g.data.markers[i].options.title+'
'; var contentdesc = ""; if (g.data.markers[i].event != undefined){ if (g.data.markers[i].event.click != undefined) { if (g.data.markers[i].event.click.infoWindow != undefined) { contentdesc = g.data.markers[i].event.click.infoWindow.options.content; tr.id+="_click"; } }else if (g.data.markers[i].event.mouseover != undefined) { if (g.data.markers[i].event.mouseover.infoWindow != undefined) { contentdesc = g.data.markers[i].event.mouseover.infoWindow.options.content; tr.id+="_over"; } } } div.innerHTML+=''+g.convertHtmlToText(contentdesc)+''; td.appendChild(div); tr.appendChild(td); table.onmouseover=function(){ this.style.background="#FFF"; } table.onmouseout=function(){ this.style.background=""; } table.onclick=function(){ if ( this.id.split("_")[2] != undefined){ if(this.id.split("_")[2] == "click") google.maps.event.trigger(markers[this.id.split("_")[1]], "click"); else if(this.id.split("_")[2] == "over") google.maps.event.trigger(markers[this.id.split("_")[1]], "mouseover"); } } table.appendChild(tr); gmap_locationdetails.appendChild(table); } } g.reloadObject=function(){ //console.log("reloadObject() start"); if ( g.data.crowdmap.clenable == true || g.data.catlegendenable === true){ categoryArr = []; allCategoryArr = []; markerID=0; object_count=0 ; var cl_list = document.getElementById('categorylegend_list'); var chk = cl_list.getElementsByTagName('input'); var chkLen = chk.length; for (var i = 0; i < chkLen; i++) { if (chk[i].type === 'checkbox' && chk[i].checked === true) { categoryArr.push(chk[i].value); } allCategoryArr.push(chk[i].value); } if(g.data.clustering===true){ markerCluster.clearMarkers(); } // load object g.removeAllMarkers(); g.loadMarkers(); if(g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view") g.drawCrowdMarker(); g.loadLabelNImage(); //polylines g.loadPolylines(); //polygons g.loadPolygons(); //rectangle g.loadRectangles(); //circle g.loadCircles(); //route g.loadRoutes(); g.loadLegend(); g.loadClustering(); } //console.log("reloadObject() finish"); } // crowd map submit report g.submitLocation=function(){ var ajax_form=document.getElementById('ajax_form'); ajax_form.action='/_api/addlocation.php'; ajax_form.target='ajax_iframe'; if( document.getElementById('crowd_address').value == ""){ g.showMessage("Please Enter Address or Latitude/ Longitude", "#FF0000", "#FFF"); return; } if( document.getElementById('crowd_description').value == "" ){ g.showMessage("Please Enter Description!", "#FF0000", "#FFF"); return; } var fullAddress=document.getElementById('crowd_address').value; map_geocoder.geocode({'address':fullAddress, 'bounds': map.getBounds()},function(results,status){ if(status==google.maps.GeocoderStatus.OK){ var locationLat = results[0].geometry.location.lat(); var locationLng = results[0].geometry.location.lng(); var formattedAddress=results[0].formatted_address; var description = document.getElementById('crowd_description').value; var username = document.getElementById('crowd_username').value; document.getElementById("ca_latlng").value=locationLat+','+locationLng; document.getElementById("ca_address").value=formattedAddress; //document.getElementById("ca_address").value=fullAddress; document.getElementById("ca_mapid").value=g.data.fileid; document.getElementById("ca_usertype").value=document.getElementById('crowd_usertype').value; document.getElementById("ca_userid").value=document.getElementById('crowd_userid').value; document.getElementById("ca_username").value=document.getElementById('crowd_username').value; document.getElementById("ca_useremail").value=document.getElementById('crowd_useremail').value; document.getElementById("ca_description").value=description; ajax_form.submit(); //alert('Add Location Success'); }else{ g.showMessage("Address is not correct!", "#FF0000", "#FFF"); //alert('Add Location Fail'); } }); } // login with facebook , google, twitter, email g.loginFacebook=function(){ opened_window = window.open('https://www.facebook.com/dialog/oauth/?client_id=391367400907909&redirect_uri=http://g3.imapbuilder.net/_map/get_facebook.php&state='+g.data.fileid+'_fc3db09b3dcd58aeac40696f791a3e48&scope=email&response_type=token','fboauth_window','width=860,height=540'); g.removeCrowdForm(); } g.loginGoogle=function(){ opened_window = window.open('https://accounts.google.com/o/oauth2/auth?'+ 'response_type=code'+ '&redirect_uri=http%3A%2F%2Fg3.imapbuilder.net%2F_map%2Fgoogleapi'+ '&client_id=17030872649-20f1n1b2fojm8ksfgdt0dj9oinmtjosl.apps.googleusercontent.com'+ '&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile'+ '&approval_prompt=force&state='+g.data.fileid+'','google_oauth_window','width=860,height=540'); g.removeCrowdForm(); } g.loginTwitter=function(){ opened_window = window.open('http://g3.imapbuilder.net/_map/twitterapi/redirect.php?mapid='+g.data.fileid+'','google_oauth_window','width=860,height=540'); g.removeCrowdForm(); } g.loginEmail=function(){ if( document.getElementById("customName").value == ""){ alert('Please provide your Name'); }else if( document.getElementById("customEmail").value == "" ){ alert('Please provide your Email Address'); }else if( !g.checkEmail(document.getElementById("customEmail").value) ){ alert('Please provide a valid Email Address'); }else{ opened_window = window.open('http://g3.imapbuilder.net/_map/new_user.php?mapid='+g.data.fileid+'&email='+document.getElementById("customEmail").value+'&name='+document.getElementById("customName").value,'google_oauth_window','width=860,height=540'); g.removeCrowdForm(); } } g.checkEmail=function(email) { var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if (!filter.test(email)) { return false; }else{ return true; } } g.updateCS=function(userName){ opened_window.document.getElementById('cs_title').innerHTML = cs_title; opened_window.document.getElementById('crowd_userinfo').innerHTML = cs_loginas + " "+ userName; opened_window.document.getElementById('cs_address').innerHTML = cs_address; opened_window.document.getElementById('cs_desc').innerHTML = cs_desc; opened_window.window.centermap(g.data.options.center[0],g.data.options.center[1], g.data.options.zoom); } // add crowd markers g.addCrowdMarker=function(cmarkerid, latLng, AddressName, description,uid, username, usertype, email, date, isNew){ // center location on the map var location = new google.maps.LatLng(latLng.split(",")[0], latLng.split(",")[1]); if( isNew == true){ map.setCenter(location); } cmarkerid=markerID; var infowindow = new google.maps.InfoWindow(); var iconpath = ""; if( !isNaN(g.data.crowdmap.markericon) ) iconpath='http://g3.imapbuilder.net/_api/img/marker/'+g.data.crowdmap.markericon; else iconpath=g.data.crowdmap.markericon; markers[cmarkerid] = new google.maps.Marker({ map: map, animation: google.maps.Animation.DROP, position: location, icon: {url:iconpath,size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}, title: AddressName }); google.maps.event.addListener(markers[cmarkerid], 'click',function(event){ var userImagePath=''; var userDesc=''+description+''; var userAddress=''+AddressName+''; var userName=''+username+''; if(usertype=="google") userImagePath='https://profiles.google.com/s2/photos/profile/'+uid; else if(usertype=="facebook") userImagePath='https://graph.facebook.com/'+uid+'/picture'; else if(usertype=="twitter") userImagePath='https://api.twitter.com/1/users/profile_image?screen_name='+email+'&size=normal'; else userImagePath='http://g3.imapbuilder.net/editor/img/crowd/emailuser.png'; var userTypeIcon=''; if(usertype=="google") userTypeIcon=''; else if(usertype=="facebook") userTypeIcon=''; else if(usertype=="twitter") userTypeIcon=''; else userTypeIcon=''; var userDate=''+date+''; var infoContent=''; infoContent=''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ '
'+userTypeIcon+' '+userName+'
'+userAddress+'
'+userDesc+'
'+userDate+'
'; infowindow.setContent(infoContent); infowindow.open(map, markers[cmarkerid]); }); markerID++; crowdMarkersId++; if( isNew == true){ var crowdMarkerCount = crowdMarkersData.length; crowdMarkersData[crowdMarkerCount]={}; crowdMarkersData[crowdMarkerCount].address=AddressName; crowdMarkersData[crowdMarkerCount].latlng =location.lat()+","+location.lng(); crowdMarkersData[crowdMarkerCount].userid =uid; crowdMarkersData[crowdMarkerCount].email =email; crowdMarkersData[crowdMarkerCount].username =username; crowdMarkersData[crowdMarkerCount].username =usertype; crowdMarkersData[crowdMarkerCount].description =description; crowdMarkersData[crowdMarkerCount].date =date; crowdMarkersData[crowdMarkerCount].isapproved = "1"; } g.addCrowdMarkerToList(g.data.crowdmap.markericon, AddressName, description,uid, username, usertype,email, date, markers[cmarkerid], cmarkerid, isNew); } // add markers to data list g.addCrowdMarkerToList=function(iconid, address, description,uid, username, usertype,email, date, obj, i){ if( (g.data.datalist.position != "") && (g.data.datalist.showmarkers == 0 || g.data.datalist.showmarkers == 2) ){ if( gmap_locationdetails != undefined ){ var table=document.createElement("table"); table.style.width="100%"; table.style.borderBottom="1px solid #DDD"; table.style.margin="5px 0px "; table.id="markers_"+i; table.style.cursor="pointer"; tr=document.createElement("tr"); tr.style.cursor="pointer"; td=document.createElement("td"); td.align="center"; td.vAlign="top"; td.width="50px"; td.rowSpan="4"; td.style.padding="3px 5px"; td.style.verticalAlign="top"; img=document.createElement("img"); img.style.border= '0px'; img.style.width= '50px'; img.style.height= '50px'; if(usertype=="google") img.src='https://profiles.google.com/s2/photos/profile/'+uid; else if(usertype=="facebook") img.src='https://graph.facebook.com/'+uid+'/picture'; else if(usertype=="twitter") img.src='https://api.twitter.com/1/users/profile_image?screen_name='+email+'&size=normal'; else img.src='http://g3.imapbuilder.net/editor/img/crowd/emailuser.png'; td.appendChild(img); tr.appendChild(td); table.appendChild(tr); table.id="markers_"+i; tr=document.createElement("tr"); // description td=document.createElement("td"); td.colSpan="2"; td.vAlign="top"; div=document.createElement("div"); div.innerHTML=''+g.convertHtmlToText(description)+'
'; td.appendChild(div); tr.appendChild(td); table.appendChild(tr); tr=document.createElement("tr"); // social icon td=document.createElement("td"); td.vAlign="top"; td.width="12px"; div=document.createElement("div"); div.innerHTML=''; if(usertype=="google") div.innerHTML+=''; else if(usertype=="facebook") div.innerHTML+=''; else if(usertype=="twitter") div.innerHTML+=''; else div.innerHTML+=''; td.appendChild(div); tr.appendChild(td); // name td=document.createElement("td"); td.vAlign="top"; div=document.createElement("div"); div.innerHTML=' '+ ''+username + '
'; td.appendChild(div); tr.appendChild(td); table.appendChild(tr); // pin icon tr=document.createElement("tr"); td=document.createElement("td"); td.vAlign="top"; td.width="12px"; div=document.createElement("div"); var contentAdd = address; var imapath = ""; if( !isNaN(iconid) ) imapath='http://g3.imapbuilder.net/_api/img/marker/'+iconid; else imapath=iconid; div.innerHTML=' '; td.appendChild(div); tr.appendChild(td); // address td=document.createElement("td"); td.vAlign="top"; div=document.createElement("div"); div.innerHTML=''+ contentAdd+ ''; td.appendChild(div); tr.appendChild(td); table.appendChild(tr); //div.innerHTML+='
' + date+ ''; tr=document.createElement("tr"); // empty td=document.createElement("td"); tr.appendChild(td); // clock icon& time td=document.createElement("td"); td.vAlign="bottom"; if( g.data.datalist.position=="right"||g.data.datalist.position=="left" ) td.align="left"; else if( g.data.datalist.position=="top"||g.data.datalist.position=="bottom" ) td.align="right"; td.colSpan="2"; td.innerHTML=' ' + date+ '';; tr.appendChild(td); table.appendChild(tr); // setup the mouse over effect table.onmouseover=function(){ this.style.background="#FFF"; } table.onmouseout=function(){ this.style.background=""; } table.onclick=function(){ google.maps.event.trigger(obj, "click"); } //gmap_locationdetails.appendChild(table); var markerlist = document.getElementById('gmap_locationdetails'); if( markerlist.getElementsByTagName('table').length > 0 ){ var t= markerlist.getElementsByTagName('table')[0]; markerlist.insertBefore(table, t); }else{ gmap_locationdetails.appendChild(table); } } } } g.drawCrowdMarker=function(){ for( var i=0; i= limit_object && limit_object != -1) break; if ( crowdMarkersData[i].catID != undefined && crowdMarkersData[i].catID != -1 && !categoryArr.contains(crowdMarkersData[i].catID) ) continue; } g.addCrowdMarker(crowdMarkersId, crowdMarkersData[i].latlng, crowdMarkersData[i].address, crowdMarkersData[i].description,crowdMarkersData[i].userid, crowdMarkersData[i].username, crowdMarkersData[i].usertype, crowdMarkersData[i].email, crowdMarkersData[i].date, false); object_count++; } } } // create & remove dark background g.createModel=function(){ var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(modal_div); } g.removeModel=function(){ if(document.getElementById("modal_div")) { var map_div = document.getElementById('gmap_'+g.data.fileid); var md = document.getElementById("modal_div"); map_div.removeChild(md); } } // add a submit form g.addCrowdForm=function(){ g.createModel(); if(document.getElementById("crowdForm_div")){ document.getElementById("crowdForm_div").style.display="block"; }else{ crowdForm_div=document.createElement("div"); crowdForm_div.id="crowdForm_div"; crowdForm_div.style.position="absolute"; crowdForm_div.style.top="20%"; crowdForm_div.style.left="25%"; crowdForm_div.style.right="25%"; crowdForm_div.style.backgroundColor="#F0F0F0"; crowdForm_div.style.borderWidth="1px"; crowdForm_div.style.borderColor="#CCC"; crowdForm_div.style.borderStyle="solid"; crowdForm_div.style.display='block'; crowdForm_div.style.zIndex="2"; crowdForm_div.style.borderRadius="5px"; crowdForm_div.align="center"; var ci_style=""; var loginCount = 0 ; var loginFacebook = ''; var loginGoogle = ''; var loginTwitter = ''; var loginOR =''; var loginEmail = ''; if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.facebook ) { loginFacebook='
'; loginCount++; } if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.google ) { loginGoogle='
'; loginCount++ } if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.twitter ){ /*loginTwitter = '
'; loginCount++;*/ } if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.email ){{ loginOR = '
'; if( g.data.crowdmap.login == undefined || loginCount >0) loginOR +='or '; loginOR += 'Enter your name and email
'; loginEmail = ''+ ''+ ''+ ''+ '
Name:
Email:
'+ ''+ ''+ '
'; loginCount++; } } var content=""; content+='
'+ '
'+ '
'+ '
'+cs_title+'
'+ '
'+ '
'+ //'
Login
'+ '
'+ loginFacebook+ loginGoogle+ loginTwitter+ '
'+ loginOR+ loginEmail+ '
'+ ''+ '
'; crowdForm_div.innerHTML=content; if(true || g.data.crowdmap.mode=="edit" ){ if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(crowdForm_div); } } } } g.removeCrowdForm=function(){ g.removeModel(); if(document.getElementById("crowdForm_div")) { //var map_div = document.getElementById('gmap_'+g.data.fileid); //var cf = document.getElementById("crowdForm_div"); //map_div.removeChild(cf); document.getElementById("crowdForm_div").style.display="none"; } } g.addMore=function(){ document.getElementById('crowd_done').style.display="none"; document.getElementById('crowd_input').style.display="block"; document.getElementById('crowd_inputdata').style.display="block"; } // add temp marker for user to set location g.addLocationMarker=function(){ if( !isNaN(g.data.crowdmap.markericon) ) iconpath='http://g3.imapbuilder.net/_api/img/marker/'+g.data.crowdmap.markericon; else iconpath=g.data.crowdmap.markericon; tempMarker = new google.maps.Marker({ map: map, animation: google.maps.Animation.DROP, position: map.getCenter(), icon: {url:iconpath,size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}, draggable: true }); document.getElementById('crowd_address').value="("+map.getCenter().lat()+","+map.getCenter().lng()+")"; google.maps.event.addListener(tempMarker, 'position_changed',function(){ document.getElementById('crowd_address').value="("+tempMarker.getPosition().lat()+", "+tempMarker.getPosition().lng()+")"; }); var tempMarkerAni = setInterval("tempMarker.setAnimation(google.maps.Animation.BOUNCE)", 3000); } g.removeLocationMarker=function(){ if( tempMarker != undefined){ tempMarker.setMap(null); clearTimeout(tempMarkerAni); } } // confirm button for temp marker g.addLocationDiv=function(){ if(document.getElementById("crowdGetLocation_div")){ }else{ crowdGetLocation_div=document.createElement("div"); crowdGetLocation_div.id="crowdGetLocation_div"; crowdGetLocation_div.style.position="absolute"; crowdGetLocation_div.style.bottom="20px"; crowdGetLocation_div.style.left="30%"; crowdGetLocation_div.style.right="30%"; crowdGetLocation_div.style.display='block'; crowdGetLocation_div.style.zIndex="3"; crowdGetLocation_div.style.opacity="0.8"; crowdGetLocation_div.style.align="center"; var ci_style=""; var content=""; content+='
'+ '
Drag Marker and Confirm the Location.
'+ ''+ '
'; crowdGetLocation_div.innerHTML=content; if(true || g.data.crowdmap.mode=="edit" ){ if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(crowdGetLocation_div); } } } } g.removeLocationDiv=function(){ if(document.getElementById("crowdGetLocation_div")) { var map_div = document.getElementById('gmap_'+g.data.fileid); var cf = document.getElementById("crowdGetLocation_div"); map_div.removeChild(cf); } } // show and hide temp marker g.addLocationMode=function(){ document.getElementById('reportPanel').style.display="none"; g.removeModel(); g.addLocationDiv(); g.addLocationMarker(); } g.comfirmLocation=function(){ g.createModel(); document.getElementById('reportPanel').style.display="block"; g.removeLocationMarker(); g.removeLocationDiv(); } // message dialog g.showMessage=function(message, bgcolor, fontColor){ if(document.getElementById("errorMessage_div")){ }else{ errorMessage_div=document.createElement("div"); errorMessage_div.id="errorMessage_div"; errorMessage_div.style.position="absolute"; errorMessage_div.style.bottom="20px"; errorMessage_div.style.left="30%"; errorMessage_div.style.right="30%"; errorMessage_div.style.display='block'; errorMessage_div.style.zIndex="3"; errorMessage_div.style.opacity="1"; errorMessage_div.align="center"; var ci_style=""; var content=""; content+='
'+ '
'+message+'
'+ '
'; errorMessage_div.innerHTML=content; if(true || g.data.crowdmap.mode=="edit" ){ if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(errorMessage_div); } } setTimeout('net.imapbuilder.gmap.removeMessageDiv()', 3000); } } g.removeMessageDiv=function(){ if(document.getElementById("errorMessage_div")) { var map_div = document.getElementById('gmap_'+g.data.fileid); var cf = document.getElementById("errorMessage_div"); map_div.removeChild(cf); } } // function for data list scroll to bottom /* g.scrollDataListToBottom=function(){ if(document.getElementById('dataListContainer')!=undefined ) { var objDiv = document.getElementById('dataListContainer'); objDiv.scrollTop = objDiv.scrollHeight; } } */ g.refreshPage=function(){ window.location.reload(); return false; } // heat map g.checkHeatMap=function(){ heatMapArr = []; // check if it is heatmap if( g.data.heatmap != undefined && g.data.heatmap.enable == true ){ var heatMapData = g.data.heatmap.data; for(var i=0; i=0;i--){ if(str.charAt(i)!=" "&&str.charAt(i)!=" ") break; } str = str.substring(0,i+1); return str; } g.Trim=function(str){ return g.LTrim(g.RTrim(str)); } g.numToHex=function(num){ var hex = num.toString(16); if( hex.length == 1 ) return "0"+hex; else return hex; } var searchMarker = []; g.searchInMapAction=function(address){ if(address != " "){ map_geocoder=new google.maps.Geocoder(); var map_bound_SW = new google.maps.LatLng(-32.768800, -86.923828); var map_bound_NE = new google.maps.LatLng(9.188870, -16.611328); var map_bound = new google.maps.LatLngBounds(map_bound_SW, map_bound_NE); map_geocoder.geocode({'address':address +" Bazil", 'bounds':map_bound},function(results,status){ if(status==google.maps.GeocoderStatus.OK){ map.setCenter(results[0].geometry.location); //searchInMapAddMarker(results[0].geometry.location, results[0].formatted_address, searchMarkerID); searchMarker[searchMarkerID] = new google.maps.Marker({ map: map, animation: google.maps.Animation.DROP, position: results[0].geometry.location, icon: {url:'http://g3.imapbuilder.net/_api/img/marker/17',size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}, title: results[0].formatted_address }); google.maps.event.addListener(searchMarker[searchMarkerID], 'click',function(event){ var infowindow = new google.maps.InfoWindow({content:results[0].formatted_address,position:event.latLng}); infowindow.open(map); }); searchMarkerID++ } }); } } g.zoomInPolygonCenter=function(path){ var bounds = new google.maps.LatLngBounds(); var pglength = path.getLength(); for (i = 0; i < pglength; i++) { bounds.extend(path.getAt(i)); } map.fitBounds(bounds); } g.zoomInPolygon=function(polygonID){ if(polygons[polygonID] != undefined){ g.zoomInPolygonCenter(polygons[polygonID].getPath()); } } })();net.imapbuilder.gmap.expire=true;net.imapbuilder.gmap.mapkey="AIzaSyBsJ00itihfix0LqWl2nQ86J5AYBQK_XQg";net.imapbuilder.gmap.run("{\"width\":\"870\",\"width_unit\":\"px\",\"height\":\"350\",\"height_unit\":\"px\",\"fileid\":18888,\"filename\":\"Healthy Lakes Success Stories\",\"font_size\":\"11\",\"font_family\":\"Arial\",\"options\":{\"mapTypeId\":\"hybrid\",\"disableDoubleClickZoom\":false,\"draggable\":true,\"keyboardShortcuts\":true,\"scrollwheel\":true,\"mapTypeControl\":true,\"panControl\":true,\"scaleControl\":true,\"streetViewControl\":true,\"zoomControl\":true,\"center\":[45.43155620395896,-80.53317483749998],\"zoom\":5,\"infoAutoPan\":false},\"markers\":[{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.422812,-90.81857300000001],\"visible\":true,\"title\":\"Troutmere Creek Fish Passage/Road Crossing\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Troutmere Creek Fish Passage/Road Crossing

\\nA low-budget fish passage project has big benefits for a Wisconsin trout stream. \\n

\\nType: Habitat\\n
\\nLocation: Marengo, Wisconsin\\n
\\nCost: $14,700\\n
\\nResult: The work gave trout access to two miles of prime habitat in Troutmere Creek. Assessments have not been completed, but the project is expected to improve fish populations by creating access to more habitat and reducing sedimentation, which buried some gravel beds where trout spawn. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[41.900211,-80.79183599999999],\"visible\":true,\"title\":\"Ashtabula River cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Ashtabula River cleanup

\\nA sediment cleanup and habitat restoration work have restored the lower Ashtabula River. \\n

\\nType: Toxics, Habitat\\n
\\nLocation: Ashtabula, Ohio\\n
\\nCost: $61.5 million\\n
\\nResult: The cleanup removed 630,000 cubic yards of contaminated sediment that contained more than 25,000 pounds of hazardous polychlorinated biphenyls and other toxic compounds. The project improved water quality and deepened the river channel, making the lower Ashtabula suitable again for maritime commerce, fishing and recreational boating. A habitat restoration project created 1,500 feet of prime fish habitat in the lower two miles of the river, which will bolster populations of muskellunge and northern pike. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[42.4868039,-78.36150909999998],\"visible\":true,\"title\":\"Clear Creek habitat restoration project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Clear Creek habitat restoration project

\\nStabilizing stream banks and improving fish passage could improve conditions in a trout stream. \\n\\n

\\n\\nType: Polluted runoff, Habitat\\n
\\nLocation: Freedom, New York\\n
\\nCost: $106,211\\n
\\nResult: The project begins to restore prime habitat in a section of stream where trout were once abundant by restoring natural stream function. The New York Department of Environmental Conservation maintains 5.5 miles of easement along Clear Creek, along the project site, to support recreational fishing. An additional 1,200 linear feet of habitat was restored immediately downstream of the completed project.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"300\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://www.healthylakes.org/mapicons/ico-invasive-a.png\",\"options\":{\"position\":[47.1197612,-88.5464662],\"visible\":true,\"title\":\"Great Lakes ballast water treatment system\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Great Lakes ballast water treatment system

\\nThe National Park Service installed the first permanent ballast water treatment system on a Great Lakes freshwater ship \\n\\n

\\n\\nType: Invasive species\\n
\\nLocation: Houghton, Michigan\\n
\\nCost: $500,000\\n
\\nResult: The ballast water treatment system will prevent the M/V Ranger III from transporting aquatic species between Isle Royale and the port at Houghton, Michigan. Currently, there are invasive species in Houghton that have not yet invaded Isle Royale, and vice-versa. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[45.63436421323712,-78.01515804687506],\"visible\":true,\"title\":\"Undo the Great Lakes Chemical Brew\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Undo the Great Lakes Chemical Brew

\\nProper disposal of prescription medications keeps biologically active compounds out of waterways.\\n\\n

\\n\\nType: Reducing polluted runoff\\n
\\nLocation: Region-wide.\\n
\\nCost: $530,759\\n
\\nResult: More than 2 million pills were collected at drug drop-off events in the five states. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.6214609,-82.57440099999997],\"visible\":true,\"title\":\"Lake sturgeon reef construction\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Lake sturgeon reef construction

\\nManmade reefs created 40,000 square feet of sturgeon spawning habit in the St. Clair River. \\n\\n

\\n\\nType: Habitat\\n
\\nLocation: Algonac, Michigan\\n
\\nCost: $1.1 million\\n
\\nResult: The rocky reef is already attracting lake sturgeon to the St. Clair River Delta. Scientists will continue to study the area to determine if the reefs are increasing the lake sturgeon population in the river.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[47.8279022,-90.70968149999999],\"visible\":true,\"title\":\"Restoring Moose Habitat on Lake Superior Uplands\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoring Moose Habitat on Lake Superior Uplands

\\nScientists are working to preserve moose population by restoring foraging habitat. \\n\\n

\\n\\nType: Habitat\\n
\\nLocation: Near Grand Marais, Minnesota\\n
\\nCost: $193,432\\n
\\nResult: Moose are actively using 1,000 acres of restored foraging areas, which could help the animals survive climate change. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.8477752,-79.0619896],\"visible\":true,\"title\":\"Allegheny National Fish Hatchery renovation\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Allegheny National Fish Hatchery renovation

\\nThe lake trout hatchery re-opened after being closed for seven years. \\n

\\nType: Habitat\\n
\\nLocation: Warren, Pennsylvania\\n
\\nCost: $1.7 million\\n
\\nResult: The renovated hatchery will provide a reliable supply of native lake trout for lakes Erie and Ontario and bolster efforts to create self-sustaining lake trout populations in those lakes. The first batch of lake trout reared at the hatchery will be released in the lakes in May 2013.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.6622647,-84.09091030000002],\"visible\":true,\"title\":\"Using trees to create habitat in a trout stream\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Using trees to create habitat in a trout stream

\\nHelicopters placed 126 large pine trees in Michigan\'s Au Sable River. \\n

\\nType: Habitat\\n
\\nLocation: Mio, Michigan\\n
\\nCost: $171,600\\n
\\nResult: Placing trees in the Au Sable River created new habitat for fish and other aquatic life and restored more natural conditions in the river.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.7898799,-81.17244199999999],\"visible\":true,\"title\":\"Lake Erie Bluffs Park\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Lake Erie Bluffs Park

\\nA land purchase created the 139-acre Lake Erie Bluffs Park in Ohio.\\n

\\nType: Habitat\\n
\\nLocation: Perry Township, Ohio\\n
\\nCost: $2.3 million\\n
\\nResult: Lake Erie Bluffs permanently protects 139 acres of natural Lake Erie shoreline, which includes meadows, wetlands and other features that provide habitat for 20 rare species of plants and animals. The park also increases public access to Lake Erie. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.7783884,-83.9372146],\"visible\":true,\"title\":\"Nayanquing Point Coastal Wetland Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Nayanquing Point Coastal Wetland Project

\\nReplacing a failed pump structure restored a large wetland and improved hunting opportunities. \\n

\\nType: Habitat\\n
\\nLocation: Bay City, Michigan\\n
\\nCost: $192,862\\n
\\nResult: The project provided more and better habitat for waterfowl and other wetland dependent species, and increased hunting opportunities at Nayanquing Point. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.9091937,-90.7805621],\"visible\":true,\"title\":\"Frog Bay Tribal National Park\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Frog Bay Tribal National Park

\\nA federal grant helped establish the nation’s first tribal national park on the shores of Lake Superior.\\n

\\nType: Habitat\\n
\\nLocation: Bayfield, Wisconsin\\n
\\nCost: $488,000\\n
\\nResult: The project preserved a globally significant forest and a quarter-mile of pristine Lake Superior shoreline; increased public access to Lake Superior and the Apostle Islands; and protects water quality in Lake Superior’s Frog Bay. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.864237,-78.8192679],\"visible\":true,\"title\":\"Buffalo Creek wetland\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Buffalo Creek wetland

\\nRemoving invasive plants restored a wetland and wildlife habitat in and along Buffalo Creek.\\n

\\nType: Habitat\\n
\\nLocation: West Seneca, New York\\n
\\nCost: $65,000\\n
\\nResult: Work crews removed thousands of knotweed plants and other invasive species from 12,000 square feet of land on the oxbow and replanted several areas with native plants, greatly increasing species diversity on the site. The Riverkeeper organization facilitated the transfer and conservation easement on the original 14 acres from a private donor to the town of West Seneca and was working on a second land transfer that would protect a total of 30 acres in perpetuity. They also developed booklets that have prepared government officials and property owners better protect their stream corridors within the Buffalo River Watershed.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.10814079688665,-83.19450000000006],\"visible\":true,\"title\":\"Humbug Marsh preservation\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Humbug Marsh preservation

\\nThe project saved the last mile of natural shoreline on the U.S. side of the Detroit River. \\n

\\nType: Habitat\\n
\\nLocation: Gibraltar, Michigan\\n
\\nCost: $8,600,000\\n
\\nResult: The Humbug Marsh project preserved the last mile of natural shoreline along the U.S. side of the Detroit River. It has become the centerpiece of the Detroit River International Wildlife Refuge—a destination for people to watch wildlife, to fish and to go boating. More than $2 million has subsequently been spent to clean up pollution on land adjoining Humbug Marsh, erect an environmental education shelter and build 1.5 miles of trails around the perimeter of the marsh. Site work began in 2011 on the Refuge Gateway project. The Refuge Gateway includes a visually stunning visitor’s center, interpretive trails, fishing piers and kayak launch sites.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.3432541,-82.97434950000002],\"visible\":true,\"title\":\"Belle Isle\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Belle Isle

\\nFish and wildlife habitat are being restored on Detroit\'s Belle Isle. \\n

\\nType: Habitat\\n
\\nLocation: Detroit, Michigan\\n
\\nCost: $2,000,000\\n
\\nResult: Common terns have already returned to nest at the north end of Belle Isle. Work is underway on the Blue Heron Lagoon and South Fishing Pier projects. The wetland and habitat restoration projects will increase fish and wildlife habitat in the Detroit River and bolster efforts to eliminate beneficial use impairments in the Detroit River Area of Concern.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.4383317,-85.6982994],\"visible\":true,\"title\":\"Wheeler Creek Dam removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Wheeler Creek Dam removal

\\nA dam removal project restored a trout stream and eliminated a safety hazard. \\n

\\nType: Habitat\\n
\\nLocation: Mesick, Michigan\\n
\\nCost: $246,000\\n
\\nResult: Removing the dam restored natural conditions in seven miles of Wheeler Creek and reestablished the creek’s natural connection to the Manistee River. Crews also removed 1,446 cubic yards of sediment from the creek, which restored the natural movement of sediment and nutrients in the creek and provided miles of new habitat for the native brook trout population.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.6454792,-86.11602349999998],\"visible\":true,\"title\":\"Kalamazoo River sturgeon\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Kalamazoo River sturgeon

\\nLake sturgeon are returning to a Michigan river after decades of decline. \\n

\\nType: Habitat\\n
\\nLocation: Fennville, Michigan\\n
\\nCost: $220,000\\n
\\nResult: The U.S. Fish and Wildlife Service in 2011 released 100 small sturgeon in the Kalamazoo River. More sturgeon raised in the streamside fish-rearing facility will be released every year. Because female lake sturgeon don’t reproduce until they are 18-20 years old, scientists won’t know how for years well the fish-rearing program worked. They already know that it is possible to raise the fish with human assistance, an achievement that is expected to stave off the elimination of sturgeon from the Great Lakes.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.72725919318411,-92.09728160468751],\"visible\":true,\"title\":\"Hog Island/Newton Creek cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Hog Island/Newton Creek cleanup

\\nA cleanup transformed a notorious pollution site into a recreational haven. \\n

\\nType: Habitat\\n
\\nLocation: Superior, Wisconsin\\n
\\nCost: $630,000\\n
\\nResult: Local anglers have said fishing has improved in and around the Hog Island inlet, Newton creek and Allouez Bay. Sixty-four acres of wetland and associated shoreline habitat are being restored on Hog Island and in Hog Island inlet. Among the improvements: More than eight acres of invasive plants were removed, 18 acres of native, vegetative buffers were planted and more than 20 acres of wetlands were restored. The work provides habitat for fish and migratory birds, including the federally endangered piping plover.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.6011805,-76.18050170000004],\"visible\":true,\"title\":\"Atlantic Salmon fishery restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Atlantic Salmon fishery restoration

\\nAtlantic salmon and bloater populations are being bolstered in Lake Ontario. \\n

\\nType: Habitat\\n
\\nLocation: Cortland, New York\\n
\\nCost: $2.1 million \\n
\\nResult: About 65,000 Atlantic salmon were released in Lake Ontario tributaries in September 2011. Another 8,000 fall fingerling salmon were released in St. Lawrence River tributaries in October 2011 in partnership with the St. Regis Mohawk Tribe. The USGS hatchery is also rearing lake herring and bloater, which will be released into Lake Ontario and the St. Lawrence River.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.87140418956987,-83.51786292499997],\"visible\":true,\"title\":\"Lake Huron artificial reefs\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Lake Huron artificial reefs

\\nArtificial reefs created new fish habitat and improved spawning in Lake Huron. \\n

\\nType: Habitat\\n
\\nLocation: Alpena, Michigan\\n
\\nCost: $1,400,000 \\n
\\nResult: Lake trout and whitefish are already spawning on the artificial reefs, which will increase fish populations in Thunder Bay and Lake Huron.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[47.3752879,-87.96721379999997],\"visible\":true,\"title\":\"Expansion of Bete Grise Preserve\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Expansion of Bete Grise Preserve

\\nA federal grant preserved 1,475 acres of pristine Lake Superior shoreline.\\n

\\nType: Habitat\\n
\\nLocation: Grant, Michigan\\n
\\nCost: $1,700,000\\n
\\nResult: The grant from NOAA and the GLRI added 1,475 acres to the Bete Grise Preserve, which will protect in perpetuity one of the highest quality dune and wetland complexes in the upper Great Lakes.\\n

\\nVisit the Website\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.654146,-82.82250269999997],\"visible\":true,\"title\":\"Saving the Lake Erie watersnake\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Saving the Lake Erie watersnake

\\nThe Lake Erie watersnake was brought back from the brink of extinction. \\n

\\nType: Habitat\\n
\\nLocation: Put-In-Bay, Ohio\\n
\\nCost: $3,700,000\\n
\\nResult: The Lake Erie watersnake population is approaching 12,000 snakes. In 2011, it became just the 23rd species — joining the bald eagle, American alligator and the peregrine falcon — to be removed from the federal Endangered Species list. About 300 acres of the watersnake’s inland habitat and 11 miles of shoreline also were protected.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.5985978,-88.27092970000001],\"visible\":true,\"title\":\"Removal of the Campbellsport Dam\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Removal of the Campbellsport Dam

\\nRemoving an obsolete dam restored a long stretch of the upper Milwaukee River.\\n

\\nType: Habitat\\n
\\nLocation: Campbellsport, Wisconsin\\n
\\nCost: $684,000\\n
\\nResult: The project opened fish passage throughout the uppermost 25 miles of the Milwaukee River. It also restored about 22 acres of wetlands and 3,000 feet of free flowing river, which restored the river’s natural flow and provided more habitat for fish and wildlife.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[45.4271079,-83.968592],\"visible\":true,\"title\":\"Silver Creek Super Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Silver Creek Super Project

\\nModifying road-stream crossings restored the natural flow in a Michigan river. \\n

\\nType: Habitat\\n
\\nLocation: Rogers City, Michigan\\n
\\nCost: $600,000\\n
\\nResult: The project allowed trout and other fish to move freely throughout Silver Creek, reduced the amount of harmful sand and silt washing into the creek, and increased public awareness and stewardship of the waterway.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.157069,-80.02353],\"visible\":true,\"title\":\"Restoring fish passage in Fourmile Creek\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoring fish passage in Fourmile Creek

\\nA fish passage structure gave steelhead access to more of a Lake Erie tributary in Pennsylvania.\\n

\\nType: Habitat\\n
\\nLocation: Erie, Pennsylvania\\n
\\nCost: $130,000\\n
\\nResult: Constructed a bypass channel to restore upstream fish passage to four miles of stream habitat along Fourmile Creek. The project restored steelhead access in the middle and upper reaches of Fourmile Creek and created a recreational steelhead fishery.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.6911466,-85.00341430000003],\"visible\":true,\"title\":\"Flowing Well dam removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Flowing Well dam removal

\\nRemoving several small dams restored 37 miles of a trout stream.\\n

\\nType: Habitat\\n
\\nLocation: Kalkaska, Michigan\\n
\\nCost: $626,000\\n
\\nResult: The project restored natural conditions in 37 miles of a trout stream, increased the native brook trout population, lowered water temperatures, eliminated sediment buildup, removed the risk of dams failing and restored 100 acres of wetlands.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.528613,-83.3701777],\"visible\":true,\"title\":\"Danvers Pond dam removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Danvers Pond dam removal

\\nA dam removal project restored a tributary of the Rouge River and created fish habitat.\\n

\\nType: Habitat\\n
\\nLocation: Farmington Hills, Michigan\\n
\\nCost: $499,254\\n
\\nResult: The Danvers Dam Removal and an associated stream restoration project made substantial progress toward eliminating the “Benthosâ€\\u009d and “Fish and Wildlife Habitatâ€\\u009d beneficial use impairments for the Rouge River Area of Concern. The projects also fulfilled local and subwatershed goals by improving the quality of the ecosystem and restoring approximately two acres of habitat for fish and terrestrial wildlife. The reduction in sedimentation within the creek and the re-vegetation of 300 linear feet of naturalized stream channel created improved habitat conditions for fish and wildlife using the Pebble Creek stream corridor. The dam removal and the enhancements to Pebble Creek allowed unencumbered fish passage for the entire Pebble Creek (approximately 6.5 miles) and created a natural buffer of native vegetation and wildflowers between private property and the stream corridor.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.0421169,-83.6603417],\"visible\":true,\"title\":\"Potagannissing Dam modifications\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Potagannissing Dam modifications

\\nModifying a dam on northern Lake Huron’s Drummond Island improved the pike fishery.\\n

\\nType: Habitat\\n
\\nLocation: Drummond Island, Michigan\\n
\\nCost: $50,000\\n
\\nResult: Providing fish passage at the dam was expected to increase the number of northern pike in the Potagannissing River and Potagannissing Bay, which is part of the St. Marys river. Modifying the dam gave fish access to 800 acres of high quality habitat on Drummond Island. Biologists said it would take several years for the northern pike fishery to realize the benefits of the dam modifications.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.682432,-85.88937809999999],\"visible\":true,\"title\":\"Platte River/Burnt Mill Bridge\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Platte River/Burnt Mill Bridge

\\nReplacing a narrow bridge culvert improved a trout stream in northern Michigan.\\n

\\nType: Habitat\\n
\\nLocation: Maple City, Michigan\\n
\\nCost: $328,000\\n
\\nResult: The project: Restored the river’s natural flow, which will help the native brook trout population; reduced the volume of sediment washing into the river by 5 tons annually; and restored the natural movement of nutrients and aquatic life above and below the road crossing.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.617001422818106,-86.74879702499999],\"visible\":true,\"title\":\"Black River/Sucker Road bridge\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Black River/Sucker Road bridge

\\nA new bridge over the Black River reconnected 18 miles of trout stream to Lake Huron.\\n

\\nType: Habitat\\n
\\nLocation: Harrrisville, Michigan\\n
\\nCost: $350,000\\n
\\nResult: Reconnected 18 miles of a free-flowing section of the Black River to Lake Huron, which created new habitat for migratory fish species. The project also reduced by about 80 tons annually the amount of sediment washing into the stream near the bridge.\\n

\\nVisit the Website\\n

\\n\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.185341,-84.113426],\"visible\":true,\"title\":\"Chesaning Dam removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Chesaning Dam removal

\\nModifying a failing dam improved a river and preserved a popular community festival. \\n

\\nType: Habitat\\n
\\nLocation: Chesaning, Michigan\\n
\\nCost: $1,410,000\\n
\\nResult: The project gave walleye and lake sturgeon in the Saginaw River and Lake Huron access to 37 miles of spawning habitat in the Shiawassee River and saved the popular Chesaning Showboat Festival.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.26735070800208,-83.11589229999993],\"visible\":true,\"title\":\"Detroit River habitat at US Steel site\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Detroit River habitat at U.S. Steel site

\\nRestoring natural shoreline along the Detroit River improved fish and wildlife habitat. \\n

\\nType: Habitat\\n
\\nLocation: Ecorse, Michigan\\n
\\nCost: $1,400,000\\n
\\nResult: The project is underway. When complete, it is expected to increase populations of fish, amphibians and waterfowl species that are native to the Detroit River.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.5831559,-81.55965960000003],\"visible\":true,\"title\":\"Euclid Creek Dam Removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Euclid Creek Dam Removal

\\nRemoving a dam improved water quality and the fishery in an urban stream in Cleveland. \\n

\\nType: Habitat, nearshore pollution\\n
\\nLocation: Euclid, Ohio\\n
\\nCost: $526,585\\n
\\nResult: Removing the dam and abutments restored the natural flow to 500 linear feet of Euclid Creek upstream of the dam and allowed fish and other aquatic life in the creek’s main branch to reach waters in the East Branch. The result: New habitat for fish and other aquatic life and increased recreational fishing opportunities. The improved water quality also will help Euclid Creek meet Ohio’s water quality standards. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.69953779999999,-90.85467690000002],\"visible\":true,\"title\":\"Preservation of Houghton Falls\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Preservation of Houghton Falls

\\nGrants preserved a unique stretch of Lake Superior shoreline in northern Wisconsin.\\n

\\nType: Habitat, nearshore pollution\\n
\\nLocation: Bayview, Wisconsin\\n
\\nCost: $2,800,000\\n
\\nResult: The acquisition preserved an ecologically significant natural area and guaranteed public access to the area, which has long been popular with hikers, birders and other outdoor enthusiasts.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.58457490000001,-81.56184830000001],\"visible\":true,\"title\":\"Restoration of Lacustrine Refuge\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoration of Lacustrine Refuge

\\nRestoring a small wetland near Lake Erie produced big results for the local economy.\\n

\\nType: Habitat, nearshore pollution\\n
\\nLocation: Cleveland, Ohio\\n
\\nCost: $1,400,000\\n
\\nResult: The project restored 1,100 linear feet of Euclid Creek, returned the creek to its natural channel and restored four acres of coastal wetlands near Lake Erie. The project also created new recreational opportunities and advanced efforts to the get the Cuyahoga River removed from a list of Great Lakes Areas of Concern.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.658317,-87.06264190000002],\"visible\":true,\"title\":\"Daylighting of Dunes Creek\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Daylighting of Dunes Creek

\\nA long submerged Lake Michigan tributary was uncovered at Indiana Dunes State Park.\\n

\\nType: Habitat, nearshore pollution\\n
\\nLocation: Chesterson, Indiana\\n
\\nCost: $2 million\\n
\\nResult: Restored the natural channel in a portion of Dunes Creek, which created new fish habitat, reduced polluted runoff and bacterial pollution on a nearby Lake Michigan beach.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.41580400000001,-81.75492600000001],\"visible\":true,\"title\":\"Restoration of Big Creek\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoration of Big Creek

\\nRestoring natural conditions in an urban Ohio stream reduced flooding and helped wildlife. \\n

\\nType: Habitat, nearshore pollution.\\n
\\nLocation: Cleveland, Ohio\\n
\\nCost: $923,758\\n
\\nResult: The restoration work created wetlands and other habitat for fish and wildlife and restored a more natural flow in the creek. The work also curtailed flooding and reduced the volume of sediment and other pollutants that wash into the Cuyahoga River and Lake Erie following rain showers or periods of snow melt.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.1928651,-86.2589888],\"visible\":true,\"title\":\"Watervliet Dams removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Watervliet Dams removal

\\nRemoving two dams restored a long stretch of an important Lake Michigan tributary. \\n

\\nType: Habitat, water quality\\n
\\nLocation: Watervliet, Michigan\\n
\\nCost: $1,103,957\\n
\\nResult: Removing the dams liberated and restored a stretch of the Paw Paw River that had been submerged by dam impoundments for five decades. The project reconnected 100 miles of free-flowing stream to Lake Michigan, created new fish and wildlife habitat and increased recreational opportunities for anglers and paddlers. The project also eliminated a financial strain on taxpayers by ending the Berrien County’s need to maintain the dams. Restoring the river is also expected to generate economic benefits for communities along the river by reestablishing a fishery for salmon and other migratory species.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.73934,-83.167327],\"visible\":true,\"title\":\"Paint Creek Dam removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Paint Creek Dam removal

\\nRemoving a dam restored a long stretch of a trout stream in suburban Detroit. \\n

\\nType: Habitat, water quality\\n
\\nLocation: Oakland Township, Michigan\\n
\\nCost: $704,725\\n
\\nResult: Restored 1,500 linear feet of a trout stream, gave fish access to 7.5 miles of the river, restored floodplains and wetlands along the river. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/invasive_species.png\",\"options\":{\"position\":[46.5041886,-84.33892759999998],\"visible\":true,\"title\":\"Enhanced St Mary’s River Sea Lamprey Control\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Enhanced St. Mary’s River Sea Lamprey Control

\\nA new trapping technique enables scientists to kill more sea lamprey. \\n

\\nType: Invasive species\\n
\\nLocation: Sault Ste. Marie, Michigan\\n
\\nCost: $228,000\\n
\\nResult: Scientists killed 400 more sea lamprey in the St. Mary’s River and improved trapping techniques, which can be used to trap and kill sea lamprey in other Great Lakes tributaries.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/invasive_species.png\",\"options\":{\"position\":[45.61472769969501,-80.34485456250002],\"visible\":true,\"title\":\"Stop Aquatic Hitchhikers Campaign\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

\\\"Stop Aquatic Hitchhikers\\\" campaign

\\nThe Stop Aquatic Hitchhikers!â„¢ program is expanding to slow spread of invasive species.\\n

\\nType: Invasive species\\n
\\nLocation: Region-wide.\\n
\\nCost: $1.9 million\\n
\\nResult: The first phase of the campaign, which received a $1.5 million Great Lakes Restoration Initiative grant in 2010, was viewed by 10 million people across the Great Lakes basin. The latest GLRI grant of $400,000 is expected to help the campaign reach another 7 million people. The program has educated millions of boaters about the need to wash their boats to avoid transporting aquatic invasive species.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/invasive_species.png\",\"options\":{\"position\":[41.7185367,-86.8945162],\"visible\":true,\"title\":\"Trail Creek lamprey barrier\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Trail Creek lamprey barrier

\\nA new barrier will keep invasive sea lamprey from infesting an Indiana Creek. \\n

\\nType: Invasive species\\n
\\nLocation: Michigan City, Indiana\\n
\\nCost: $1.6 million\\n
\\nResult: The barrier will prevent tens of thousands of sea lamprey — each of which consumes up to 40 pounds of fish during its lifetime — from spawning in Trail Creek and feeding in Lake Michigan. The barrier also eliminates the need for chemical treatments of Trail Creek, which will free up financial resources that fishery managers can use to fight sea lamprey in other Great Lakes tributaries.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/invasive_species.png\",\"options\":{\"position\":[41.64176400000001,-87.11736012031241],\"visible\":true,\"title\":\"Restoration of Cowles Bog\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoration of Cowles Bog

\\nA nationally recognized coastal wetland is being restored near Chicago. \\n

\\nType: Invasive species, habitat\\n
\\nLocation: Chesterton, Indiana\\n
\\nCost: $1,600,000 \\n
\\nResult: Crews have restored more than 55 acres of Cowles Bog by replacing invasive plants with native species and restoring natural water flow in the marsh, which filters pollutants out of surface water before it flows into Lake Michigan.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[41.504861,-81.70816969999998],\"visible\":true,\"title\":\"Urban waterway debris removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Urban waterway debris removal

\\nTwo specially designed vessels remove debris from Cleveland\'s waterfront.\\n

\\nType: Nearshore pollution\\n
\\nLocation: Cleveland, Ohio\\n
\\nCost: $425,000\\n
\\nResult: The two vessels remove 400 to 800 cubic yards of debris from Cleveland\'s waterfront each year.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[43.38358525806586,-86.36452492812498],\"visible\":true,\"title\":\"Urban Stormwater Management in White Lake Area of Concern\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Urban Stormwater Management in White Lake Area of Concern

\\nA city street was renovated to reduce polluted runoff in a Great Lakes Area of Concern. \\n

\\nType: Reducing polluted runoff\\n
\\nLocation: Whitehall, Michigan\\n
\\nCost: $1 million\\n
\\nResult: The stormwater collection systems installed under and along Lake Street capture stormwater runoff from 60 acres of streets and industrial properties, thereby reducing the volume of pollutants that reach White Lake. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[42.313715417842744,-83.16538009999994],\"visible\":true,\"title\":\"Ford Motor Co\'s living roof\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Ford Motor Co.\'s living roof

\\nA green, vegetated roof at a Ford Motor Co. factory is reducing polluted runoff.\\n

\\nType: Reducing polluted runoff\\n
\\nLocation: Dearborn, Michigan\\n
\\nCost: $18,000,000\\n
\\nResult: The living roof, which keeps the factory cooler in the summer and warmer in the winter, decreased energy use at Ford’s Rouge plant by 7 percent. The living roof was also a cornerstone of green infrastructure that can filter up to 20 billion gallons of stormwater annually at the manufacturing facility.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[42.1299149,-80.11302490000003],\"visible\":true,\"title\":\"Presque Isle Bay Cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Presque Isle Bay Cleanup

\\nCleanup removed Presque Isle Bay from list of Great Lakes toxic hotspots.\\n

\\nType: Toxics\\n
\\nLocation: Erie, Pennsylvania\\n
\\nCost: $97 million\\n
\\nResult: Bottom sediment in the bay is cleaner and fewer fish have tumors. Restoration work in streams that drain into the bay, and the replacement of paved areas with permeable surfaces that trap polluted runoff, improved fish habitat and reduced the amount of sediment washing into the bay by 334 tons annually. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[42.36386600000001,-87.82448],\"visible\":true,\"title\":\"Waukegan Harbor cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Waukegan Harbor cleanup

\\nA sediment cleanup in the severely contaminated harbor began after years of planning. \\n

\\nType: Toxics\\n
\\nLocation: Waukegan, Illinois\\n
\\nCost: $48 million\\n
\\nResult: The dredging of 175,000 cubic yards of contaminated sediment commenced in 2012. The dredging, scheduled for completion in late 2013, is one of the last steps in a long effort to clean up the harbor and redevelop Waukegan’s waterfront. Federal officials hope to remove the harbor from a list of Great Lakes Areas of Concern in 2014. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[43.745838,-87.70552989999999],\"visible\":true,\"title\":\"Sheboygan River cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Sheboygan River cleanup

\\nMore than 400,000 cubic yards of contaminated sediment was removed from the river.\\n

\\nType: Toxics\\n
\\nLocation: Sheboygan, Wisconsin\\n
\\nCost: $83 million\\n
\\nResult: Crews dredged over 425,000 cubic yards of contaminated sediment from the Sheboygan River and restored over 70 acres of fish and wildlife habitat along a 2.5 mile corridor. The dredging was one of the final steps in a long process to get the Sheboygan River delisted as a Great Lakes Area of Concern. The cleanup made the river and harbor cleaner, deeper and bolstered economic development efforts in Sheboygan. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[41.7144959,-83.48957289999998],\"visible\":true,\"title\":\"Ottawa River cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Ottawa River cleanup

\\nA huge dredging project cleaned up five miles of the lower Ottawa River. \\n

\\nType: Toxics\\n
\\nLocation: Toledo, Ohio\\n
\\nCost: $47 million\\n
\\nResult: The project brought about the removal of 260,000 cubic yards of toxic mud from the river bottom, which improved water quality in the river and reduced the volume of pollution flowing into Lake Erie. Crews removed more than 7,500 pounds of PCBs and more than 1 million pounds of heavy metals from the river.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[42.155814836531384,-83.17273569999998],\"visible\":true,\"title\":\"Black Lagoon cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Black Lagoon cleanup

\\nA Detroit River cleanup project restored a fishery and sparked waterfront development.\\n

\\nType: Toxics\\n
\\nLocation: Trenton, Michigan\\n
\\nCost: $9 million\\n
\\nResult: Crews removed 115,000 cubic yards of polluted sludge from the Black Lagoon in 2004 and 2005. The cleanup removed more than 470,000 pounds of contaminants from the lagoon, including 160 pounds of PCBs, 38,000 pounds of lead, 360 pounds of mercury, 300,000 pounds of oil and grease and 140,000 pounds of zinc. The project improved water quality in the lagoon and the lower Detroit River and fish and birds have returned to the lagoon. It also sparked economic development along that stretch of the Detroit River — the city of Trenton plans to develop a marina in the lagoon. Because water in the lagoon is no longer black, the city of Trenton renamed the lagoon Elias Cove.\\n

\\nIn 2010, Trenton received $14,286 as part of the Great Lakes Restoration Initiative. The funds allowed the city to plant aquatic vegetation around the restored Elias Cove, providing critically needed spawning and nursery habitat for native fish species in the Detroit River.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[46.49077,-84.31750369999997],\"visible\":true,\"title\":\"Tannery Bay/St Marys River\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Tannery Bay/St. Marys River

\\nA cleanup removed 500,000 pounds of pollutants from the St. Mary’s River.\\n

\\nType: Toxics\\n
\\nLocation: Sault Ste. Marie, Michigan\\n
\\nCost: $12,000,000\\n
\\nResult: 40,000 cubic yards of contaminated sediment that contained 500,000 pounds of chromium and 25 pounds of mercury was removed from the St. Marys River. The contaminated sediment that was removed would have covered an area the size of a football field to a height of 24 feet. In 2010, crews dredged another 26,000 cubic yards of contaminated sediment in an area of the river near the MCM Marine Facility. That area was contaminated in the early 1900s by a manufactured gas plant. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[43.101780000000005,-87.92296799999997],\"visible\":true,\"title\":\"Milwaukee River-Lincoln Park cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Milwaukee River-Lincoln Park cleanup

\\nThe cleanup removed the largest source of toxic PCBs in the Milwaukee River. \\n

\\nType: Toxics\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: $24,600,000\\n
\\nResult: Removed about 140,000 cubic yards of sediment contaminated with polychlorinated biphenyls and polycyclic aromatic hydrocarbons.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[43.216862770516535,-86.277184428125],\"visible\":true,\"title\":\"Muskegon Lake-Division Street cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Muskegon Lake-Division Street cleanup

\\nA cleanup removed 43,000 cubic yards of toxic sediment from a Lake Michigan harbor.\\n

\\nType: Toxics\\n
\\nLocation: Muskegon, Michigan\\n
\\nCost: $12,000,000\\n
\\nResult: Removed 43,000 cubic yards of sediment contaminated with mercury and petroleum compounds from Muskegon Lake, which will reduce fish contaminants. The project cleaned up 46 acres on the bottom of Muskegon Lake, a popular fishing and boating lake in west Michigan.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[42.3658925,-83.4167888],\"visible\":true,\"title\":\"Newburgh Lake\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Newburgh Lake

\\nA sediment cleanup removed 544,000 tons of toxic mud from a Michigan river. \\n

\\nType: Toxics\\n
\\nLocation: Livonia, Michigan\\n
\\nCost: $11,800,000\\n
\\nResult: The project reduced PCB concentrations in fish by 90 percent. Coupled with the restoration of fish habitat, the cleanup resurrected the once-popular fishery in Newburgh Lake, which is located in a heavily populated urban area. The cleanup also contributed to the larger effort to improve water quality and restore fish and wildlife habitat in the Rouge River, which is a Great Lakes Area of Concern.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[42.291617604881324,-83.1490751910157],\"visible\":true,\"title\":\"Fordson Island\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Fordson Island

\\nRemoving dozens of abandoned boats restored an island in the lower Rouge River. \\n

\\nType: Toxics, habitat\\n
\\nLocation: Dearborn, Michigan\\n
\\nCost: $150,000\\n
\\nResult: Crews removed 18 abandoned boats from the island. Studies were planned to determine the biological health of the island and nearshore areas, and what could be done to make the site a more attractive recreational area.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[41.618137,-87.48369400000001],\"visible\":true,\"title\":\"Grand Calumet River cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Grand Calumet River cleanup

\\nA cleanup has removed tons of toxic mud from one of America\'s most polluted rivers.\\n

\\nType: Toxics, habitat\\n
\\nLocation: East Chicago, Indiana\\n
\\nCost: $33,000,000\\n
\\nResult: Crews removed 92,000 cubic yards of contaminated bottom sediments from a one-mile stretch of the river and placed a cap over remaining contaminants in that stretch of the river bottom. The cleanup was followed by habitat restoration work that created new habitat for fish and wildlife. \\n

\\nVisit the Website\\n

\\n\\\"\\\"\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[44.7266193,-86.13327049999998],\"visible\":true,\"title\":\"Sleeping Bear Dunes bird toxins\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Sleeping Bear Dunes bird toxins

\\nScientists are working to reduce bird die-offs at Sleeping Bear Dunes National Lakeshore.\\n

\\nType: Toxics, habitat\\n
\\nLocation: Empire , Michigan\\n
\\nCost: $2,100,000\\n
\\nResult: Scientists have established a comprehensive water quality monitoring station and mapped coastal areas at Sleeping Bear Dunes where Type E botulism outbreaks are likely to occur. The research is aimed at improving water quality and reducing bird die-offs.\\n

\\nVisit the Website\\n

\\n\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[41.4548464,-82.16041330000002],\"visible\":true,\"title\":\"Black River restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Black River restoration

\\nCleanup removed more than 1 million cubic yards of steel waste removed the Black River.\\n

\\nType: Toxics, habitat\\n
\\nLocation: Lorain, Ohio\\n
\\nCost: $12,000,000\\n
\\nResult: The project had removed more than 1 million cubic yards of steel waste from the riverbank. Where the slag once stood, native shrubs and trees are taking root in a variety of habitats in the floodplain. Anecdotal evidence shows newly-created pools and fish shelves — areas of stone and rubble in the river where fish can find refuge and forage — improved fish populations. More fish shelves and additional habitat restoration is continuing. All told, about 200 acres along the river are being restored and preserved.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.36704,-81.86352590000001],\"visible\":true,\"title\":\"Baldwin Creek Dam Removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Baldwin Creek Dam Removal and Habitat Enhancement

\\nThree small dams were removed from Baldwin Creek, a tributary of Lake Erie in Berea, Ohio. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Near Berea, Ohio\\n
\\nCost:$506,000\\n
\\nResult: A series of small dams blocked fish passage, damaged habitat, and trapped debris in Baldwin Creek. Removing the dams restored the creek’s natural flow, removed barrier to fish passage and restored in-stream habitat for fish, including the state-threatened Bigmouth Shiner.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://www.healthylakes.org/mapicons/ico-invasive-a.png\",\"options\":{\"position\":[43.5100871,-76.00226650000002],\"visible\":true,\"title\":\"Orwell Brook Sea Lamprey Barrier\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Orwell Brook Sea Lamprey Barrier

\\nA new sea lamprey barrier and trap will protect fish in Lake Ontario. \\n

\\nType: Invasive Species\\n
\\nLocation: Near Altmar, New York\\n
\\nCost: $350,000\\n
\\nResult: The new sea lamprey barrier at Orwell Brook is an adjustable crest, low-head barrier that blocks sea lamprey from spawning in the stream while allowing fish to migrate further upstream. The barrier also captures sea lamprey in a built-in trap. Ending the use of chemical lampricides in Orwell Brook, above the new barrier, will save hundreds of thousands of dollars in treatment costs.\\n

\\nVisit the Website\\n

\\n\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[46.7834827,-92.10659709999999],\"visible\":true,\"title\":\"Stryker Bay Cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Stryker Bay Cleanup

\\nFish and wildlife have returned to a previously severely polluted Minnesota waterway.\\n

\\nType: Toxic Pollution\\n
\\nLocation: Duluth Harbor in Duluth, Minnesota\\n
\\nCost: $62,000,000\\n
\\nResult: The project to clean Stryker Bay removed about 200,000 cubic yards of toxic mud from the bottom of the bay; another 175,000 acres of contaminated sediment were permanently isolated. About 13 acres of green space was created, providing a habitat for migratory birds and endangered piping plovers. Fish and wildlife have returned to the bay and it is now safe to swim in the water.\\n

\\nVisit the Website\\n

\\n\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.6417133,-82.64990030000001],\"visible\":true,\"title\":\"Protecting Critical Habitat on Kelleys Island\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Protecting Critical Habitat on Kelleys Island

\\nThe preservation of two parcels of land on Ohio’s Kelleys Island protected an imperiled Great Lakes alvar ecosystem and a rare red cedar forest.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Kelleys Island, Ohio in western Lake Erie\\n
\\nCost: $1,300,000\\n
\\nResult: Kelleys Island is the largest American island in Lake Erie and home to an alvar ecosystem. Two grants preserved 59 acres of an imperiled Great Lakes alvar ecosystem and 18 acres of mature red cedar forest. The parcels were added to a larger assemblage of protected lands that provide important habitat for migratory birds. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"-1\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.7630567,-85.62063169999999],\"visible\":true,\"title\":\"Boardman River Dam Removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Boardman River Dam Removal

\\nThe first of three dams has been removed as part of the largest dam removal in Michigan history.\\n

\\nType:Habitat Restoration\\n
\\nLocation: Traverse City, Michigan\\n
\\nCost:$4,200,000\\n
\\nResult: The Boardman River is one of Michigan’s ten best trout streams and one of the most ecologically significant and popular rivers in northern Michigan. The removal the Brown Bridge Dam gave fish access to 145 miles of stream above the dam for the first time in nearly 100 years. Removal of the Boardman and Sabin dams is expected to begin in 2014. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.544538,-87.49247000000003],\"visible\":true,\"title\":\"Mashek Creek Property Acquisition\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Mashek Creek Property Acquisition

\\nA land purchase in northern Wisconsin increased public access to the Lake Michigan shoreline and protected valuable bird habitat.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Pierce, Wisconsin\\n
\\nCost: $1,100,000\\n
\\nResult: The property purchased includes 1,700 feet of Lake Michigan shoreline and 1,400 feet of frontage on both sides of Mashek Creek. Wooded areas on the site provide stopover habitat for neo-tropical migratory birds and raptors that move along the shores of Lake Michigan. Salmon and steelhead migrate into the creek from Lake Michigan, creating fishing opportunities. The acquisition provided the first public parcel along the shores of Lake Michigan in Kewaunee County. The land buy protected the site’s ecological values and provided new recreational opportunities and educational programs. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.7817011,-87.5728254],\"visible\":true,\"title\":\"Chicago Beach and Dune Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Chicago beach and dune restoration

\\nRestoring 21 acres of sand dunes and aquatic habitat lured native plants and birds back to a Chicago beach. \\n

\\nType: Habitat\\n
\\nLocation: Chicago, Illinois\\n
\\nCost: $969,000\\n
\\nResult: The restored beach is now a popular stopover for migratory birds. Rare plants and animals also can be found at the beach, included the state endangered sea rocket and the federally endangered piping plover.\\n\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.2529949,-81.4158195],\"visible\":true,\"title\":\"Hudson High School Stream Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Hudson High School Stream Restoration and Land Lab

\\n

\\nType: Habitat\\n
\\nLocation: Hudson, Ohio\\n
\\nCost: $687,808\\n
\\nResult: The project restored 2,000 linear feet of stream, along with an adjoining meadow and forested wetland. The project provides storage for about two million gallons of storm water without flooding nearby streets or properties. A 6.28-acre conservation easement will protect the site. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[41.0157022,-77.53256970000001],\"visible\":true,\"title\":\"Fish disease surveillance\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Fish disease surveillance

\\nIncreased disease surveillance is identifying pathogens that could affect the $7 billion Great Lakes fishery. \\n

\\nType: Toxic pollution \\n
\\nLocation: Lamar, Pennsylvania \\n
\\nCost: $129,000\\n
\\nResult: The project discovered two new two new diseases that could affect salmon and trout populations in the Great Lakes basin. The finding will improve fisheries management programs. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.88203483108327,-84.17569718906248],\"visible\":true,\"title\":\"myBeachCast beach safety app\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

myBeachCast beach safety app

\\nA smart-phone app called myBeachCast allows users to check real-time conditions at 1,800 beaches in the Great Lakes region.\\n

\\nType: Habitat\\n
\\nLocation: Ann Arbor, Michigan \\n
\\nCost: $99,937\\n
\\nResult: The myBeachCast app has been downloaded more than 1,000 times. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.171969,-79.04942799999998],\"visible\":true,\"title\":\"Niagara River lake trout restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Niagara River lake trout and sturgeon restoration

\\nNew research findings are advancing efforts to restore the Niagara River lake trout population. \\n

\\nType: Habitat \\n
\\nLocation: Lewiston, New York\\n
\\nCost: $600,000\\n
\\nResult: Scientists identified the first lake trout spawning site in the Niagara River and natural reproduction by the imperiled fish. The discovery will bolster efforts to restore the lake trout and lake sturgeon populations in the Niagara River.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[41.4046049,-81.72297200000003],\"visible\":true,\"title\":\"West Creek Neighborhood Stormwater Initiative\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

West Creek Neighborhood Stormwater Initiative

\\nResidents of two streets in a Cleveland suburb are installing rain barrels and rain gardens to reduce storm water impacts— and to inspire other neighbors to take simple steps to eliminate a major stressor facing the watershed and Lake Erie. \\n

\\nType: Polluted Runoff \\n
\\nLocation: Parma, Ohio\\n
\\nCost: $400,000\\n
\\nResult: Like many cities, the City of Parma has storm drains that empty into West Creek. The storm water carries excess nutrients and chemicals from lawn fertilizer, and oils and grease from pavement, all of which hurts water quality in the creek. And the intense volume of the storm water that follows heavy rains scours the banks of the creek, harming habitat and exacerbating erosion downstream. To solve the problem, city residents will install rain barrels and rain gardens to slow and filter the water before it reaches West Creek. The Northeast Ohio Regional Sewer District will also encourage these practices by assessing a stormwater fee to households in the area.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.486597398001244,-81.65482129296873],\"visible\":true,\"title\":\"Restoration of Mentor Marsh\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoration of Mentor Marsh

\\nRestoration efforts are helping control the invasive weed Phragmites, and allowing native plants and wildlife to return, including bald eagles. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Cleveland, Ohio\\n
\\nCost: About $10,000 annually\\n
\\nResult: Mentor Marsh is one of the largest examples of a natural marsh and wetland along Lake Erie. At 850 acres, the marsh provides critical spawning habitat for Lake Erie fish and serves as an important stop for migratory birds. The marsh is home to 12 state-listed endangered or threatened species. The dense invasive plant Phragmites thrives on the salty water in the marsh, and is therefore persistent and difficult to control. The elimination of Phragmites remains critical to the success of the habitat.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.4815316,-81.66292670000001],\"visible\":true,\"title\":\"West Creek Confluence Project \"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

West Creek Confluence Project

\\nThe ongoing project shows that even heavily developed properties in urbanized areas can be restored to improve ecological functioning. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Cleveland, Ohio\\n
\\nCost: $2.4 million for the upcoming restoration work\\n
\\nResult: A 10-acre development bisected by West Creek, with impervious surfaces covering 85 percent of the site. As a result, the property became a major conduit of non-point source pollution into West Creek, the Cuyahoga River and Lake Erie. During heavy rains, water ran so quickly through the creek that it scoured away aquatic species and habitat. The West Creek Preservation Committee bought the property in 2008, demolished the building and removed the blacktop. West Creek will be given a more natural hydrology with meandering sections will be created. Floodplain and wetlands will be restored. More than 10,000 streamside plants will be added. The project will create or restore habitat for aquatic species, amphibians and birds.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[43.00292848886405,-87.88674106347656],\"visible\":true,\"title\":\"Bradford Beach Stormwater Management Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Bradford Beach Stormwater Management Project

\\nA coalition of more than 20 government agencies, business and community groups developed and implemented a $705,500 plan for reducing bacterial pollution at Bradford Beach, a Lake Michigan beach on Milwaukee’s north side. \\n

\\nType: Polluted Runoff\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: About $1,000,000\\n
\\nResult: Scientists discovered that urban stormwater discharged onto Bradford Beach—a 27-acre park on the Lake Michigan coast—along with a large population of seagulls, was causing bacterial pollution in the sand and water. The county hired the engineering firm AECOM to design a series of rain gardens that were installed around the stormwater discharge pipes and parking lot at the beach. The gardens absorb and filter the stormwater, which helped lower bacteria concentrations in the sand and adjoining waters of Lake Michigan. When the bacteria problem was resolved, the county hired lifeguards and opened a concession stand to lure the public back to Bradford Beach.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[43.034793086954494,-87.93285327236327],\"visible\":true,\"title\":\"Kinnickinnic River Cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Kinnickinnic River Cleanup

\\nState and federal agencies joined forces to complete a $22 million cleanup project that resulted in the removal of 167,000 cubic yards of toxic mud from the bottom of the Kinnickinnic River, on Milwaukee’s south side.\\n

\\nType: Toxic Pollution\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: $22,000,000\\n
\\nResult: Years of abuse and neglect caused a bend in the Kinnickinnic River to become a collection spot for toxic mud, garbage, sunken boats and other refuse making that part of the river unsightly and non-navigable. In the early 2000s, business leaders and local government officials joined forces with state and federal agencies to draft a cleanup plan. Over the course of four months in 2009, crews dredged 167,000 cubic yards of contaminated sediment from the river bottom. The cleanup pumped new life into the riverfront community. An abandoned factory was razed to make way for a 40,000 square foot office complex and existing marinas added new docks and moorings.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://www.healthylakes.org/mapicons/ico-invasive-a.png\",\"options\":{\"position\":[41.9164343,-83.39771009999998],\"visible\":true,\"title\":\"Phragmites Control at William C. Sterling State Park\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Phragmites Control at William C. Sterling State Park

\\nIn 2003, the Michigan Department of Natural Resources declared war on an invasive strain of common reed, known as Phragmites, which had taken over large areas of William C. Sterling State Park. \\n

\\nType: Invasive Species\\n
\\nLocation: Monroe, Michigan\\n
\\nResult: The state of Michigan in 2003 launched an effort to reduce the abundance of Phagmites in Sterling State Park, a 1,240-acre park that lies within the River Raisin delta. The project was part of an effort to restore a Great Lakes marsh and lakeplain prairie. Using repeated applications of herbicides and controlled burns to kill Phragmites, crews reduced the abundance of the invasive plant by about 85 percent. With Phragmites controlled, a diverse mix of native plants returned to the marsh.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[43.69269111378771,-83.93287343574218],\"visible\":true,\"title\":\"Tobico Marsh Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Tobico Marsh Restoration

\\nRestoring Tobico Marsh was part of a larger effort to heal damaged wetlands and remove contaminated sediments from the Saginaw River and Saginaw Bay. \\n

\\nType: Toxic Pollution\\n
\\nLocation: Saginaw Bay, Michigan\\n
\\nCost: $3,100,000\\n
\\nResult: Tobico Marsh is a 1,652-acre national landmark adjacent to Saginaw Bay. Land use changes over the past 150 years—due primarily to agricultural activities and urban development—polluted bottom sediments in the Saginaw River, caused significant loss of wetlands around Saginaw Bay and altered the natural movement of water and aquatic life between the bay and Tobico Marsh, which features a large lagoon and extensive marshes. In 1987, the Saginaw River/Bay was designated a Great Lakes Area of Concern. The designation spurred on action: more than 900 acres of wetlands were restored in Tobico Marsh and roughly 25,000 acres of wetlands around Saginaw Bay were permanently protected through land purchases and conservation easements. Restoring wetlands could pay huge dividends for the Saginaw Bay region, which is very popular among anglers, hunters and birders.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[43.4100107,-86.34867919999999],\"visible\":true,\"title\":\"White Lake Area of Concern Cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

White Lake Area of Concern Cleanup

\\nIntensive cleanup activities have improved water quality, fish health and reduced phosphorus concentrations in White Lake, which is one of 43 Great Lakes Areas of Concern. \\n

\\nType: Toxic Pollution\\n
\\nLocation: Whitehall, Michigan\\n
\\nCost: $22,100,000 with $2,100,000 of that coming from the Great Lakes Restoration Initiative\\n
\\nResult: White Lake was designated a Great Lakes Area of Concern in 1987 after contaminated groundwater beneath the former Hooker Chemical manufacturing facility seeped into the lake, polluting the water, bottom sediments and tainting fish and wildlife. Two cleanup projects removed a total of 97,000 cubic yards of contaminated sediments, which improved water quality, improved fish and wildlife populations and bolstered a resurgent tourism industry centered largely on the lake. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.2341813,-86.24839209999999],\"visible\":true,\"title\":\"Muskegon Lake Area of Concern Habitat Restoration Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Muskegon Lake Area of Concern Habitat Restoration Project

\\nCrews restored two miles of hardened shoreline to a more natural condition and restored 50 acres of wetlands to improve fish and wildlife habitat and increase public access to one of the Great Lakes’ most ecologically diverse bays.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Muskegon, Michigan\\n
\\nCost: $10,000,000\\n
\\nResult: Sawmills and factories located around Muskegon Lake in the past dumped countless tons of wood, sawdust, concrete and other fill material in the lake to create new land, destroying 798 acres of shallow water wetlands. Fifty acres of wetlands were restored and created by removing 182,826 cubic yards of unnatural fill (broken concrete, foundry slag, sheet metal and sawmill waste) from the south shore of the lake. Fish, turtles, shore birds and waterfowl have returned to parts of the lake that were previously uninhabitable.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.4994954,-81.6954088],\"visible\":true,\"title\":\"Cuyahoga River Fish Restoration Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Cuyahoga River Fish Restoration Project

\\nAs part of the long-term effort that’s bringing the Cuyahoga River back to life, work began in late July to create habitat for fish, restore wetlands and improve public access to the river. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Cleveland, Ohio\\n
\\nCost: $8,000,000, including site acquisition\\n
\\nResult: Lack of habitat in the shipping channel hampers the migration of fish from Lake Erie to spawning areas upstream. Some boat slips will be repurposed to create a 2-acre slice of lake marsh habitat for fish. Natural features, such as rock refuges, will be added to sections of the steel bulkhead that lines the river, in an attempt to provide more habitat for aquatic life. The river banks and terrestrial areas will be restored through the remediation of some contamination and planting of new vegetation.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.00847599999999,-80.40134999999998],\"visible\":true,\"title\":\"Roderick Wildlife Reserve Expansion\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Roderick Wildlife Reserve Expansion

\\nNearly 300 acres of public land were added to a Pennsylvania wildlife reserve. \\n

\\nType: Habitat\\n
\\nLocation: Lake City, Pennsylvania\\n
\\nCost: $1,250,000\\n
\\nResult: Two land acquisitions added 297 acres to the David M. Roderick Wildlife Reserve, which increased public access to the Lake Erie shoreline and ensured the protection of valuable fish and wildlife habitat.\\n

\\nVisit the Website

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.616706,-87.48467700000003],\"visible\":true,\"title\":\"Roxana Marsh Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Roxana Marsh Restoration

\\nA $52 million project cleaned up and restored a marsh in the Grand Calumet River. \\n

\\nType: Habitat, Toxic Pollution\\n
\\nLocation: East Chicago, Indiana\\n
\\nCost: $52,000,000\\n
\\nResult: Crews removed nearly 252,000 cubic yards of contaminated sediment in a stretch of the Grand Calumet River and restored 25 acres of wetlands in the Roxana Marsh. Fish and birds have already returned to the restored marsh, which is a critical part of the river’s ecosystem.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.03906289176715,-87.89809098339845],\"visible\":true,\"title\":\"Floating Island Habitats \"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Floating Island Habitats

\\nFloating islands along the industrialized corridor of the Milwaukee River have provided fish, such as smallmouth bass and green-eared sunfish, habitat and a way to navigate upstream.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: $175,000 with $110,000 from the Great Lakes Restoration Initiative.\\n
\\nResult: Steel bulkheads that line rivers in urban areas are void of plant life, and provide little or no shelter for young fish as they travel along the channel. About 80 percent of native Great Lakes fish rely on wetland ecosystems for part of their lifecycle, but especially in urban areas along the Great Lakes, these ecosystems no longer exist. Researchers are installing small containers filled with wetland plants and soil that are attached to steel bulkheads along the river in an attempt to mimic the conditions in wetlands that benefit young fish. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.49948819999999,-87.85036709999997],\"visible\":true,\"title\":\"A Migratory Flyway on Lake Michigan\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

A Migratory Flyway on Lake Michigan

\\nTurning a 116-acre golf course into a nature preserve has allowed migratory birds a place to shelter along the coast of Lake Michigan.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Belgium, Wisconsin\\n
\\nCost: $2,900,000 with some funding from the Great Lakes Restoration Initiative\\n
\\nResult: Forest Beach Migratory Preserve, a former golf course near Lake Michigan, is 116 acres, with a mix of hardwood forest with seasonal ponds, prairie, and constructed wetlands. The land trust that owns the site has removed invasive species and is encouraging native plants to thrive. The preserve has already recorded 230 bird species using the site, a number that exceeds expectations. Nine different habitat types on site provide shelter for at least 80 rare or declining bird species that use the Lake Michigan Flyway each year.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.4316835,-88.04651480000001],\"visible\":true,\"title\":\"Lake Sturgeon Imprinting Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Lake Sturgeon Imprinting Project

\\nThe lake sturgeon may be able to return to the Great Lakes in greater numbers thanks to this sturgeon rearing facility that has introduced more than 7,400 of the native fish back to the Lakes.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Newburg, Wisconsin\\n
\\nCost: $200,000\\n
\\nResult: For the last 150 years, the spawning success of the lake sturgeon has been on the decline as their upstream spawning habitats, in places like the Milwaukee River, have been decimated. The Milwaukee River lake sturgeon streamside rearing facility uses a biological signal to help maximize the probability lake sturgeon will return to successfully spawn. The Wisconsin Department of Natural Resources has stocked 7,400 sturgeons into the Great Lakes population through the Milwaukee River program.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[43.07618939214635,-87.88298478222657],\"visible\":true,\"title\":\"University Decreases Runoff\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

University Decreases Runoff

\\nThe University of Wisconsin at Milwaukee has installed green rooftops, bioswales, and other natural landscaping projects that have lead to a dramatic decrease in the water the campus discharges into the Milwaukee sewer system.\\n

\\nType: Polluted Runoff\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: Between $2,000,000 and $2,500,000, with some funding from the Great Lakes Restoration Initiative\\n
\\nResult: Seven buildings on the University of Wisconsin at Milwaukee campus have green roofs incorporated into their design, including a Wisconsin native dry-prairie, one with solar panels in the landscape, and a vegetable garden used by a campus cafe. A spiral rain garden in combination with the green rooftops are estimated to reduce average stormwater runoff into the city’s sewerage system by 97 percent.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.02500916496566,-87.95988907910157],\"visible\":true,\"title\":\"Kinnickinnic River Naturalization\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Kinnickinnic River Naturalization

\\nRestoring Milwaukee’s Kinnickinnic River is helping to reduce flooding risks, improve public safety, provide a home for fish and wildlife, and bring families back to their neighborhood river.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: $93,000,000, with some funding coming from the Great Lakes Restoration Initiative\\n
\\nResult: The Kinnickinnic River was placed into a concrete channel in the 1960s, and had a long history of overflowing these artificial banks. To work on naturalizing the river channel, an aging bridge that restricted the flow of the river was restructured, and the downstream channel has been widened and concrete has been removed. Because of these changes, more aquatic life has returned to the river, flood risks have been reduced, residents will have new green space near the channel to enjoy the Kinnickinnic, and a neighborhood has a better understanding of how they impact their watershed.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.5924428,-90.8837982],\"visible\":true,\"title\":\"Whittlesey Creek Debris Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Whittlesey Creek Debris Project

\\nPlacing logs and other large woody debris in Whittlesey Creek in Wisconsin has restored a more natural flow to the river and provided habitat for fish and wildlife.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Ashland, Wisconsin\\n
\\nCost: $44,000 with some funding from the Great Lakes Restoration Initiative\\n
\\nResult: Adding 210 logs to the Whittlesey Creek has restored the streambed to a more natural state and created a variety of habitats. The addition of woody debris has filtered sediment, protected fish eggs, and stopped macroinvertebrates from being smothered. This debris has also allowed pools and riffles to form, expanding the type of habitat available to aquatic life.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.0265150753362,-87.99078812695313],\"visible\":true,\"title\":\"Menomonee River Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Menomonee River Restoration

\\nOnce a railroad yard for the Milwaukee Road, the land adjacent to the Menonmonee River in Milwaukee has been restored to a more natural state, allowing wildlife to return and providing the public with outdoor recreational opportunities.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: $26,000,000 with some funding from the Great Lakes Restoration Initiative\\n
\\nResult: The Menomonee has had its riverbanks restored, preventing erosion from adding sediment to the river. Boulder clusters have also increased the complexity of the river, allowing a variety of aquatic habitats to form. Native prairie plants have been returned to the park, while invasive species like Crown Vetch and Purple Loosestrife are being eradicated. Wetlands and a River Lawn flood plain have been installed to absorb and filter the water from flooding events.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[43.323953,-88.16699189999997],\"visible\":true,\"title\":\"High School Wastewater Wetland\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

High School Wastewater Wetland

\\nThe Kettle Moraine Lutheran High School replaced an old septic tank with an engineered wetland to filter their wastewater, thereby removing excess nutrients from the water supply and creating a habitat for local wildlife.\\n

\\nType: Polluted Runoff\\n
\\nLocation: Jackson, Wisconsin\\n
\\nCost: $20,000\\n
\\nResult: By using an engineered wetland to treat wastewater, the Kettle Moraine Lutheran High School has improved water quality and increased community understanding of the importance of wetland ecosystems. The wetland has also created a space on campus for waterfowl, amphibians, and even beavers to live. The filtration system works so well that in about 25 years the water filtered by this wetland would be drinkable.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.5192233,-88.01978120000001],\"visible\":true,\"title\":\"Shoreline Protected by Barrier Island\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Shoreline Protected by Barrier Island

\\nA former barrier island chain off the coast of Green Bay is being rebuilt to protect wetlands and habitat, allowing native fish like bluegill and largemouth bass to return.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Green Bay, Wisconsin\\n
\\nCost: $34,000,000, with $1,500,000 coming from the Great Lakes Restoration Initiative\\n
\\nResult: A wave barrier, ranging between four and eight feet in height, has been built on the old outline of the Cat Island chain to calm the waters nearshore. The restoration of natural nearshore habitat has allowed bluegill, largemouth bass, and pumpkinseed fish to return. On the island chain, nesting water birds, shorebirds, and other invertebrates will benefit from the newly constructed land. By protecting the nearshore waters, the island chain will also provide fish nursery habitat.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.3681112,-87.92732239999998],\"visible\":true,\"title\":\"Ozaukee County Fish Passage Program\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Ozaukee County Fish Passage Program

\\nRemoving dams, culverts, and other obstructions along the upper Milwaukee River has reconnected more than 100 miles of streams, allowing native fish like northern pike to return to parts of the river they had been cut off from.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Ozaukee County, Wisconsin\\n
\\nCost: $8,000,000 with some funding from the Great Lakes Restoration Initiative\\n
\\nResult: Fish and other aquatic life have been able to move throughout the Milwaukee River, thanks to the removal of two large dams and over 180 smaller impediments. Other dams remaining in the area now have natural fish passageways to connect the upper and lower parts of the river. Floodplains were constructed or identified, to help prevent floodwaters from reaching communities along the river.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.89018934209775,-88.03815889999998],\"visible\":true,\"title\":\"Muskego Lakes Wildlife Area\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Muskego Lakes Wildlife Area

\\nRestoring habitat on the site of former Wisconsin farmland has helped reduce runoff, created a home for wildlife and created outdoor recreation for people in the community.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Near Franklin, Wisconsin\\n
\\nCost: $2,010,825\\n
\\nResult: The Big Muskego Lakes Wildlife Area has restored multiple habitat types, diversifying options for wildlife and reducing nutrient and sediment loading into nearby rivers. Wetlands on the 274-acre property, as well as Dumke Lake, mitigate the flood potential from storm events. In total, the Wildlife Area has the ability to absorb and hold about 18 million gallons of water on site thereby moderating flood risk and sequestering nutrients and sediments that could otherwise harm the Great Lakes.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[44.39179118836323,-88.11179169804689],\"visible\":true,\"title\":\"Fox River Phosphorous Pilot Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Fox River Phosphorous Pilot Project

\\nRunoff from dairy farms with high nutrient levels can cause algal blooms, but the Brickstead Dairy is working to reduce the amount of nutrients that enter surface water to protect water quality.\\n

\\nType: Polluted Runoff\\n
\\nLocation: Near Green Bay, Wisconsin\\n
\\nCost: $3,000,000 for the entire 20,000-acre pilot project with some funding from the Great Lakes Restoration Initiative\\n
\\nResult: Nutrient management plans on Brickstead Dairy are improving water quality, allowing aquatic life to return. Cover crops have been planted on 100 acres, over three miles of grassed waterways are planned—these will slow the speed of runoff, allowing the water to slowly absorb into the soil and preventing any excess nutrients or sediment in the runoff from reaching streams. Edge-of-field and in-stream monitoring stations have been installed to measure the water quality improvements as a result of implementation of conservation practices.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"-1\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[42.7259797,-87.78285040000003],\"visible\":true,\"title\":\"Restoring the Urban Root River\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoring the Urban Root River

\\nStabilizing the river banks, removing invasive species, installing rain gardens and adding a park along the Root River has improved the health of the river, while providing public access.\\n

\\nType: Polluted Runoff\\n
\\nLocation: Racine, Wisconsin\\n
\\nCost: $3,500,000\\n
\\nResult: The health of the Root River has been improved by removing invasive species, installing rain gardens, and plantings that prevent erosion. Holding ponds and basins have been installed beside the river to slow runoff and filter out sediment before the water makes its way into the main channel. The rain gardens that are currently installed around the city also contribute to water quality by slowing the rate at which water enters the river and allowing plants to absorb some of the excess nutrients in the stormwater that would otherwise cause algal blooms in the water. In the future the community hopes to focus on repurposing old industrial buildings to keep up the momentum that is bringing the city of Racine back to its river. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[43.05010284803597,-87.91800370312501],\"visible\":true,\"title\":\"Sustainable Brewery Redevelopment\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Sustainable Brewery Redevelopment

\\nThe former Pabst Blue Ribbon Brewery is being turned into a sustainable neighborhood that follows best stormwater management practices and is now able to absorb 75 percent of the stormwater that falls on the site, in the process preventing 85 percent of the pollutants in the stormwater from reaching the city’s drains.\\n

\\nType: Polluted Runoff\\n
\\nLocation: Milwaukee, Wisconsin\\n
\\nCost: $1,700,000 for the total project; to date $1,000,000 has been spent\\n
\\nResult: The old, abandoned Pabst brewery complex is being given new life. The 25-acre site of the former brewery is being repurposed into a neighborhood with hotels, apartments, offices, and bars. The instillation of swales, rain gardens, and large underground water holding tanks that drain slowly has decreased the rate rainwater enters the Milwaukee stormwater system. The Brewery site now absorbs 75 percent of the annual rainfall and through these features it is able to remove 85 percent of the pollutants in the water. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"-1\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[44.43985594651467,-88.08981904179689],\"visible\":true,\"title\":\"Oneida Tribe Buffalo Farm\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Oneida Tribe Buffalo Farm

\\nNew grazing and monitoring programs are helping reduce excessive fertilizer and manure runoff from entering the Fox River.\\n

\\nType: Polluted Runoff\\n
\\nLocation: Near Green Bay, Wisconsin\\n
\\nCost: $70,000 with some funding from the Great Lakes Restoration Initiative\\n
\\nResult: On the Oneida Buffalo farm, a rotational grazing system was implemented, allowing the plant life to recover and ultimately be more nutritious for the buffalo. A well and watering facilities were also installed on the property, which controls how often the herd interacts with water. These changes have improved forage quality, are keeping pastures healthier, and have reduced ways for pathogens from the buffalo to enter the water supply.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.61293089999999,-83.22513359999999],\"visible\":true,\"title\":\"Blausey Tract wetland restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Blausey Tract Wetland Restoration

\\nNearly 200 acres of farmland near Lake Erie was transformed into wetland habitat for fish, birds and other wildlife.\\n

\\nType: Habitat\\n
\\nLocation: Ottawa National Wildlife Refuge, Oak Harbor, Ohio.\\n
\\nCost: $1,300,000\\n
\\nResult: The project restored 171 acres of coastal wetland and marsh habitat, providing more habitat for fish and wildlife and improving water quality in nearby Lake Erie tributaries. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://www.healthylakes.org/mapicons/ico-invasive-a.png\",\"options\":{\"position\":[45.79610150723387,-77.34065144375],\"visible\":true,\"title\":\"Ultrasound ballast water treatment system\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Ultrasound Technology for Ballast Water Treatment

\\nA New Jersey scientist invented a system that uses ultrasound to kill invasive species in ballast water. \\n

\\nType: Invasive species\\n
\\nLocation: Region-wide.\\n
\\nCost: $673,500\\n
\\nResult: Tests have shown that the BallastSolution system kills 99 percent of all organisms in ballast water. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[47.0131692,-90.55904650000002],\"visible\":true,\"title\":\"Apostle Islands Deer Cull\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Protect Great Lakes Ecosystems from Overabundant Wildlife\\n

\\nFederal officials culled excess deer that were decimating unique vegetation at the Apostle Islands National Lakeshore.\\n

\\nType: Habitat\\n
\\nLocation: Apostle Islands National Lakeshore, Bayfield, Wisconsin.\\n
\\nCost: $822,000\\n
\\nResult: Excessive deer browsing of one of the region’s largest stands of Canada yew, and loss of wildlife habitat. \\n

\\nVisit the Website

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[42.868274,-78.86922400000003],\"visible\":true,\"title\":\"Buffalo River cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Buffalo River cleanup reaches milestone

\\nThe first phase of a massive sediment cleanup in the Buffalo River is already producing results. \\n

\\nType: Toxics\\n
\\nLocation: Buffalo, New York\\n
\\nCost: $44 million\\n
\\nResult: Crews have removed 550,000 cubic yards of contaminated sediments from the Buffalo River, and will remove another 488,000 cubic yards by 2015. The project will improve water quality and reduce human exposure to toxins via direct contact with the contaminated river bottom or by eating contaminated fish. \\n

\\nVisit the Website\\n

\\n \\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.6553479,-92.20919700000002],\"visible\":true,\"title\":\"Radio Tower Bay cleanup\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Wood waste cleanup in Radio Tower Bay

\\nRemoving thousands of tons of wood waste will restore fish habitat \\n

\\nType: Habitat\\n
\\nLocation: Duluth, Minnesota\\n
\\nCost: $2.4 million\\n
\\nResult: During the first phase of the project, crews removed 146 metric tons of wood waste, including 250 derelict wood pilings. Once complete, the project will remove near 117,000 cubic yards of wood waste from Radio Tower Bay, restore the natural depth of the bay, and improve fish habitat. \\n

\\nVisit the Website\\n

\\n

\\n\\\"<imgâ€\\u009d /> \",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.8256016,-83.421877],\"visible\":true,\"title\":\"Dusseau Tract wetland\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restored Wetland in Erie State Game Area

\\nA wetland that was drained for agricultural purposes was restored into habitat for migratory birds and other wildlife.

\\nType: Habitat\\n
\\nLocation: Erie State Game Area in Monroe, Michigan.\\n
\\nCost: $284,477 \\n
\\nResult: Partnerships between groups like the Michigan DNR and Ducks Unlimited, in conjunction with funding opportunities such as the Great Lakes Restoration Initiative, are critical for the continued success in protecting, enhancing and restoring vital lake plain prairie and coastal wetland habitats. Through these efforts, a wetland area previously drained for agricultural purposes was restored and now enhances water quality flowing to Lake Erie, provides habitat for ducks and other wildlife and allows for public recreation activities including bird watching, hunting and hiking.\\n\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.72614859999999,-92.15618469999998],\"visible\":true,\"title\":\"Grassy Point restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Grassy Point restoration.

\\nA former industrial wasteland in the Duluth-Superior harbor is now of the region’s best birding areas.\\n

\\nType: Habitat\\n
\\nLocation: Duluth, Minnesota\\n
\\nCost: $340,000\\n
\\nResult: Removing 11,000 cubic yards of wood waste from the wetland at Grassy Point created wildlife habitat that attracts dozens of bird species every spring. New trails provided public access to the site. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.4226874,-81.41927249999998],\"visible\":true,\"title\":\"Sulphur Springs Assessment and Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Sulphur Springs Assessment and Restoration

\\n

\\nRestoring the channel of an Ohio stream that was dammed for decades has cleared the way for the possible reintroduction of native brook trout. \\n

\\nType: Habitat\\n
\\nLocation: Cities of Solon and Bentleyville, in suburban Cleveland, Ohio.\\n
\\nCost: $46,000.\\n
\\nResult: The project restored 400 linear feet of stream and five acres of high quality riparian habitat in the Chagrin River watershed. Sulphur Springs is being evaluated as a possible site for the reintroduction of native Ohio brook trout. \\n

\\nVisit the Website\\n

\\n\\\"\\\"\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.8635355,-78.85036530000002],\"visible\":true,\"title\":\"Buffalo River Bend Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Buffalo River Bend restoration

\\nA nearly mile-long section of the Buffalo River is being transformed from an industrial wasteland into a greenway that beautifies that community and improves water quality and wildlife habitat in the river. \\n

\\nType: Habitat\\n
\\nLocation: Buffalo, New York.\\n
\\nCost: Nearly $1 million.\\n
\\nResult: The first phase of the project restored more than 2,800 linear feet of the River Bend by removing 1,200 cubic yards of debris and planting more than 2,000 native trees and other vegetation. \\n

\\nVisit the Website\\n

\\n\\\"\\\"\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.2849571,-83.38352859999998],\"visible\":true,\"title\":\"Wayne Road Dam Removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Wayne Road Dam Removal

\\nRemoving a small dam in the Rouge River, near Detroit, has restored fish passage and reconnected part of the river to the larger Great Lakes ecosystem.\\n \\n

\\nType: Habitat\\n
\\nLocation: Wayne, Michigan.\\n
\\nCost: $1,033,536\\n
\\nResult: Removing the dam reconnected 11 miles of the main stem of Rouge River and 110 miles of the river’s tributaries to the Great Lakes. Fish in the lower Rouge are now migrating further upstream and a greater diversity of fish has been noted in the river. \\n

\\nVisit the Website\\n

\\n\\\"\\\"\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.1171191,-80.11577779999999],\"visible\":true,\"title\":\"Cascade Creek restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Cascade Creek Restoration

\\nReducing storm water runoff into an urban stream restored the waterway and kept tons of sediment from reaching Lake Erie. \\n

\\nType: Habitat\\n
\\nLocation: Erie, Pennsylvania\\n
\\nCost: $947,000\\n
\\nResult: The projects restored 1,900 linear feet of the creek, reduced the amount of sediment flowing into Presque Isle Bay by 333 tons annually, and created new wildlife habitat.\\n

\\nVisit the Website\\n

\\n\\\"\\\"\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[45.6279920153943,-79.62130960312498],\"visible\":true,\"title\":\"Bird-friendly Wind Power\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Bird-friendly Wind Power

\\nA project tracked bird movements in the Great Lakes to help place wind turbines in the least disruptive areas.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Region-wide\\n
\\nCost: $2,000,000\\n
\\nResult: Researchers have mapped the busiest bird migration corridors and areas with high concentrations of bats. The data will guide where wind power facilities and communication towers should be located in order to minimize the impact on birds and bats. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.3538209,-85.5097786],\"visible\":true,\"title\":\"Crisp Point Project\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Crisp Point Project

\\nA federally funded land acquisition will preserve forest along with some Lake Superior shoreline in Michigan.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Newberry, Michigan\\n
\\nCost: $6,000,000\\n
\\nResult: The project preserved more than two miles of Lake Superior shoreline and 3,810 acres of adjacent forestland, which will ensure the protection of wildlife habitat, sustainable forestry practices and enhance the overall health of the Lake Superior ecosystem. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.4789168,-87.82374140000002],\"visible\":true,\"title\":\"Dead Dog Creek Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Dead Dog Creek Restoration

\\nAn eroding stream was restored in Illinois.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Winthrop Harbor, IL\\n
\\nCost: $1,518,251\\n
\\nResult: The project has repaired severely eroded stream banks, including several 25-to-35 foot bluffs, restored the natural streambeds and channels, restored riparian areas, and created a bio-retention basin to redirect stormwater and reduce future erosion. Once complete in the summer of 2014, the project is expected to annually prevent 73 pounds of phosphorous from flowing into Lake Michigan.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.782446,-86.09970799999996],\"visible\":true,\"title\":\"Former Golf Course Converted Into Macatawa Green Space\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Former Golf Course Converted Into Macatawa Green Space

\\nA former golf course was restored to its natural conditions and converted into a public green space. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Holland, Michigan\\n
\\nCost: $1,419,000\\n
\\nResult: A former golf course was restored to its natural conditions by stabilizing stream banks, planting native vegetation, and restoring wetlands. This project has reduced erosion, prevented sediment and nutrients from entering the Macatawa River, reduced the threat of floods to adjacent homes, and has created a new public green space for outdoor recreation.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[47.8422024,-89.9668575],\"visible\":true,\"title\":\"Flute Reed River Stablization\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Flute Reed River Stabilization

\\nRiverbanks along the Flute Reed River in Northern Minnesota were stabilized using logs to reduce erosion, establish a flood plain, and provide habitat for fish and wildlife.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Near Hovland, Minnesota\\n
\\nCost: $546,603\\n
\\nResult: The Flute Reed River\'s riverbanks are lined with distinctive red clay, high in phosphorus. High levels of erosion in recent years along the river increase the potential for algal blooms in Lake Superior and have diminished water quality in the river for wildlife. Citizens living along the Flute Reed formed a partnership to solve these erosion problems by rebuilding the riverbank, creating a floodplain, and planting trees to support the health of the stream and the wildlife that depend on it.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://www.healthylakes.org/mapicons/ico-invasive-a.png\",\"options\":{\"position\":[43.3383689574918,-87.90035412343758],\"visible\":true,\"title\":\"Removing Invasive Plants Limits Their Spread Through Wisconsin\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Invasive Species Removal in Southeast Wisconsin

\\nInvasive species colonies are being removed to restore the area’s natural conditions.\\n

\\nType: Invasive Species\\n
\\nLocation: Southeast Wisconsin\\n
\\nCost: $573,663\\n
\\nResult: Four invasive plant species are being targeted for eradication, with 130 acres of a planned 1500 treated thus far. Removing these invasive weeds will protect fish and wildlife habitat, improve soil and water quality, prevent damage to infrastructure, and increase opportunities for outdoor recreation.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.312287,-76.755337],\"visible\":true,\"title\":\"Fish Habitat Restoration at Lake Shore Marshes\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Fish Habitat Restoration at Lake Shore Marshes

\\nExcavating through invasive cattail mats has restored fish spawning habitats. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Wayne County, New York\\n
\\nCost: $174,784\\n
\\nResult: The project has created and restored 20 potholes that provide fish with spawning habitat, and has created channels through the cattail stands to provide passage to these sites. Eighty acres of wetlands have been restored, including almost 11 acres of spawning sites and 7,600 linear feet of migratory channels. Naturalizing conditions has also improved opportunities for recreational activities.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-toxic-b.png\",\"options\":{\"position\":[46.4885917,-87.6675004],\"visible\":true,\"title\":\"Partridge Creek Diversion\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Partridge Creek Diversion

\\nRestoring the natural channel of a northern Michigan creek stopped the flow of mercury from underground mines into nearby Deer Lake and Lake Superior. \\n

\\nType: Toxic Pollution\\n
\\nLocation: Ishpeming, Mich.\\n
\\nCost: $8,000,000\\n
\\nResult: As a flood control measure in the 1970s, Partridge Creek in Michigan was diverted from its natural course into nearby mines, where the water picked up traces of mercury. The toxic creek contributed to the contamination of Deer Lake, a Great Lakes Area of Concern, designated in 1987. Restoring the creek’s natural course by removing it from a manmade channel has not only diverted it from the contaminated mines but also has restored fish habitat. Eliminating the active source of mercury entering Deer Lake was one of the last steps in a lengthy effort to get the lake removed from the list of Great Lakes Areas of Concern.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"7\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.283033,-87.84990199999999],\"visible\":true,\"title\":\"Lake Bluffs Ravine Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Lake Bluffs Ravine Restoration

\\nCurbing storm water runoff and reducing erosion in a ravine near Chicago will keep hundreds of tons of sediment from washing into Lake Michigan. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Lake Bluffs, Ill.\\n
\\nCost: $788,900\\n
\\nResult: A ravine that slices through the Village of Lake Bluff is one of about three dozen ravines along the western Lake Michigan shoreline, from Chicago to the Wisconsin border.Flash floods in the ravines due to heavy development around the area have caused severe erosion of the stream channel and adjacent stream banks. By strengthening streambanks, this project is expected to reduce the amount of sediment washing into Lake Michigan from the Lake Bluff Ravine by 302 tons annually.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.15393174713181,-87.76431328124994],\"visible\":true,\"title\":\"Lake Michigan Ravine Health and Education\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Lake Michigan Ravine Health and Education

\\nGroups in Northeastern Illinois are working with private landowners to reintroduce native plants to ravines, helping reduce sediment in Lake Michigan.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Northeastern Illinois\\n
\\nCost: $297,332\\n
\\nResult: By working with private landowners to reintroduce native plants the ravine ecosystem will be strengthened and sediment build-up in Lake Michigan will be reduced. So far, over 40,000 native trees and shrubs have been planted.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.5666615,-85.68764149999998],\"visible\":true,\"title\":\"Restoring Connectivity in the Two Hearted River Watershed\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Restoring Connectivity in the Two Hearted River Watershed

\\nRoad-stream crossings in the Two Hearted River were restored to naturalize the river.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Luce County, Michigan\\n
\\nCost: $1,399,255\\n
\\nResult: The culverts at several road-stream crossings in the Two Hearted River were either too small or broken down to allow natural stream flow, creating partial impoundments. Replacing these culverts and stabilizing stream banks restored the river’s natural flow, removed barriers to fish passage, and reduced sedimentation.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://www.healthylakes.org/mapicons/ico-invasive-a.png\",\"options\":{\"position\":[45.64514671835739,-78.82897734687498],\"visible\":true,\"title\":\"Stopping the Spread of Aquatic Invasives Through the Bait Trade\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Stopping the Spread of Aquatic Invasives Through the Bait Trade

\\nResearchers revealed that aquatic invasive species are potentially being sold to anglers as live bait, and are taking steps to combat this.\\n

\\nType: Invasive Species\\n
\\nLocation: Region-wide\\n
\\nCost: $276,150\\n
\\nResult: By genetically screening for the presence of aquatic invasive species in bait shops, researchers revealed that invasives are potentially being sold to anglers as live bait. The researchers are working with agencies, bait shop owners, and anglers to develop a monitoring and public education campaign to prevent the spread of invasive species through the bait trade.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[44.337293,-75.71842400000003],\"visible\":true,\"title\":\"Indian River Lakes Preserved\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Indian River Lakes Preserved

\\n540 acres of shorelines, wetlands, and uplands in the St. Lawrence Valley’s Indian River Lakes will be protected from future development.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Jefferson and St. Lawrence Counties, New York\\n
\\nCost: $608,699\\n
\\nResult: In the rapidly developing St. Lawrence Valley, 540 acres of high quality habitat were obtained and will be protected from future development. These acres are contiguous with previously protected land, combatting fragmentation and preserving habitat quality for the fish, wildlife, and declining bird species reliant on this diverse ecosystem.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.34058015385787,-82.96158931621096],\"visible\":true,\"title\":\"South Fishing Pier Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

South Fishing Pier Restored

\\nRestoring a fishing pier in Detroit has provided diverse habitat for fish to rest in, making the area suitable for fish and fishermen alike.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Belle Isle, Detroit, Mich.\\n
\\nCost: $557,522\\n
\\nResult: The Detroit River has few areas with slow current where fish can rest, feed, or spawn. By adding shoals in the waters around the South Fishing Pier on Detroit’s Belle Isle Park, the currents in the Detroit River slowed, providing habitat for fish and wildlife. The area has become popular with fishermen, too.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.34793900882711,-82.95609615214846],\"visible\":true,\"title\":\"Blue Heron Lagoon Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Blue Heron Lagoon Restoration

\\nReconnecting the Blue Heron Lagoon to the Detroit River provided a home fish and wildlife—habitat improvements that can help get the Detroit River removed from the list of the region’s most toxic water bodies.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Belle Isle, Detroit, Mich.\\n
\\nCost: $1,495,280\\n
\\nResult: The Detroit River has few areas with slow current where fish can rest, feed, or spawn. By reconnecting the Blue Heron Lagoon with the Detroit River, fish and wildlife now have a variety of habitats to live in. The water quality in the lagoon has improved, too.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[41.4809361,-87.05372399999999],\"visible\":true,\"title\":\"Thorgren Basin Naturalization\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Thorgren Basin Naturalization

\\nA retention basin in Indiana was naturalized to improve water quality. \\n

\\nType: Polluted Runoff\\n
\\nLocation: Valparaiso, Indiana\\n
\\nCost: $815,000\\n
\\nResult: The Thorgren Basin allowed stormwater contaminated with sediments and nutrients to enter the Salt Creek watershed, degrading water quality and aquatic habitats. The basin was retrofitted and naturalized to treat contaminated stormwater by filtering out sediments and pollutants, decreasing the harmful impact of storms and improving aquatic wildlife habitats and water quality.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.961319,-85.655461],\"visible\":true,\"title\":\"Grand River Connections Map\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"Your Description Here

Grand River Infrastructure Map

\\nA map of the Grand River is allowing communities to plan their green infrastructure investments more strategically.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Grand River Watershed, Mich.\\n
\\nCost: $15,000\\n
\\nResult: Through identifying areas around Grand Rapids that have the greatest potential to provide an interconnected network of land and water, the Natural Connections Map of the Lower Grand River Watershed aims to protect the region’s plants, animals, air, water, health, and quality of life.

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.99748812928124,-85.53461139062495],\"visible\":true,\"title\":\"Coldwater River Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Coldwater River Restoration

\\nAdding tree trunks to the Coldwater River has provided enhanced trout habitat to the river.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Outside of Grand Rapids, Mich.\\n
\\nCost: $127,000\\n
\\nResult: Placing fallen trees in the Coldwater River restored fish habitat and led to a 38-fold increase in the site’s trout population. The submerged tree trunks provide needed habitat for trout and other aquatic life.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.3228864455335,-85.62250201562495],\"visible\":true,\"title\":\"Kalamazoo Fen Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Kalamazoo Fen Restoration

\\nFens along the Kalamazoo River are being restored by removing invasive species, allowing native species to return.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Kalamazoo, Mich.\\n
\\nCost: $196,000\\n
\\nResult: Fens along the Kalamazoo River help filter and slow stormwater runoff that makes its way into the river before entering Lake Michigan. By removing invasive species from these fens, the native species have been able to return naturally, providing habitat and filtration services. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.16198933030133,-86.20477740624995],\"visible\":true,\"title\":\"Muskegon Lake Brownfield Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Muskegon Lake Brownfield Site

\\nPlanting poplar trees around Muskegon Lake has removed contaminates from the soil while also preventing erosion.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Muskegon Lake, Mich.\\n
\\nCost: $400,000\\n
\\nResult: Planting poplar trees around Muskegon Lake is helping remove toxins in the soil by absorbing and degrading the chemicals as the trees grow. The poplar trees also will reduce runoff and provide a sustainable source of wood for local manufacturers.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[43.069762554216126,-85.35883014062495],\"visible\":true,\"title\":\"Thornapple River Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Thornapple River Restoration

\\nRemoving a dam on the Thornapple River restored fish and wildlife to the river.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Outside of Grand Rapids, Mich.\\n
\\nCost: $550,000\\n
\\nResult: Removing the Nashville Dam on the Thornapple River improved fish habitat, facilitating the return of bass, walleye, and northern pike. The restore river has improved water quality, providing opportunities for fishing and kayaking.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[42.9489153,-85.69864259999997],\"visible\":true,\"title\":\"Plaster Creek Watershed Restored\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Plaster Creek Watershed Restored

\\nA diverse community is coming together to reduce harmful stormwater impacts in their watershed. \\n

\\nType: Polluted Runoff\\n
\\nLocation: Grand Rapids, Michigan\\n
\\nCost: Above $1,600,000\\n
\\nResult: This project is reducing the harmful impacts of stormwater on this watershed. Treating stormwater will reduce the levels of sedimentation, nutrient runoff, thermal pollution, trash, and toxic effluent in the Plaster Creek, restoring water quality and reducing bacterial contamination. This project is also promoting environmental justice by promoting partnerships between upstream and downstream communities and fostering a stewardship mentality.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.690239,-85.96621099999999],\"visible\":true,\"title\":\"Updated National Wetlands Inventory to Help Guide Restoration, Conservation Planning\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Updated National Wetlands Inventory to Help Guide Restoration, Conservation Planning

\\nMaps of wetland coverage in four Great Lake states were updated to help guide future wetland restoration efforts.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Michigan, Illinois, Indiana, and Ohio\\n
\\nCost: Roughly $1,000,000\\n
\\nResult: The updated maps will help resource managers target wetland conservation efforts to reverse declines in wetland habitat and to make Great Lakes restoration efforts as effective as possible. Potential applications include developing models of suitable wetland habitat, identifying potential migratory corridors or spawning and nesting sites, and forecasting the impacts of proposed development or conservation projects on available wetland habitat.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.5129949,-83.14666399999999],\"visible\":true,\"title\":\"Ottawa National Wildlife Refuge\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Ottawa National Wildlife Refuge

\\nA former wheat field in Ohio was transformed into a 171-acre coastal wetland along western Lake Erie. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Oak Harbor, Ohio\\n
\\nCost: $1.3 million\\n
\\nResult: The first phase of the project, which created a 171-acre wetland in a former wheat field, included the installation of water control devices, pumps and fish ladders. The fish ladders allow desirable species to enter the wetland while keeping out destructive species, such as carp. The restored marsh and wetlands provide new habitat for fish and wildlife, control flooding and reduce the amount of polluted runoff that reaches Lake Erie.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.3383124,-83.88863549999996],\"visible\":true,\"title\":\"Mill Creek Dam Removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Mill Creek Dam Removal

\\nRemoving the Mill Creek Dam in southeast Michigan improved a Lake Erie tributary, restored natural rapids and prompted the development of a waterfront park and trails.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Dexter, Michigan\\n
\\nCost: $1.24 million\\n
\\nResult: The project restored the natural flow in Mill Creek, improved fish habitat and increased the number of fish and desirable insects around the dam site. The former dam site also became the centerpiece of a waterfront park that has attracted visitors and pumped life into Dexter’s downtown business community. \\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.37007,-87.87107600000002],\"visible\":true,\"title\":\"Chiwaukee Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Chiwaukee Illinois Beach Lake Plain Project

\\nGroups have come together to remove invasive species north of Chicago so that native species can thrive.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Near Chicago, Ill.\\n
\\nCost: $2,508,786\\n
\\nResult: Diverse habitats in the Chicago area had become choked with invasive species. Removing the invasives has allowed native plants to thrive, providing habitat for wildlife and helping keep Lake Michigan ecosystems healthy.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.6143107,-87.545324],\"visible\":true,\"title\":\"Calumet Conservation Corps\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Calumet Conservation Corps

\\nChicago youth work together to remove invasive species in parks throughout Chicago so that native species can thrive.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Near Chicago, Ill.\\n
\\nCost: $518,467\\n
\\nResult: Parks in the Chicago area had become choked with invasive species. Removing the invasives has allowed native plants to thrive, providing habitat for wildlife and more enjoyable space for Chicago residents.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://www.healthylakes.org/mapicons/ico-invasive-a.png\",\"options\":{\"position\":[45.0616794,-83.4327528],\"visible\":true,\"title\":\"Alpena Wildlife Sanctuary Invasive Plant Removal\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Alpena Wildlife Sanctuary Invasive Plant Removal

\\nVolunteers were trained to recognize and remove invasive frog-bit from the Alpena Wildlife Sanctuary. \\n

\\nType: Invasive Species\\n
\\nLocation: Alpena, Michigan\\n
\\nCost: Roughly $180,000\\n
\\nResult: Frog-bit is an invasive aquatic plant that forms thick, dense mats that can quickly crowd out native plants and degrade fish and wildlife habitat. The Michigan United Conservation Clubs and Michigan Department of Natural Resources partnered to train volunteers to recognize and effectively remove frog-bit. Teams of volunteers were then sent out in kayaks to hand-pull all the frog-bit they could find.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"4\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[45.3855647,-84.93034510000001],\"visible\":true,\"title\":\"Stormwater Management in Little Traverse Bay\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Stormwater Management in Little Traverse Bay

\\nRestoring streams and installing rain gardens has reduced sedimentation and nutrient loading in Little Traverse Bay. \\n

\\nType: Polluted Runoff\\n
\\nLocation: Little Traverse Bay, Michigan\\n
\\nCost: $887,723\\n
\\nResult: This project significantly improves water quality for both the people and wildlife of the Little Traverse Bay watershed. The project will reduce the amount of sediment carried into Little Traverse Bay by 900 tons annually, decrease nutrient levels in the bay and its tributaries, and increase habitat availability and quality for native wildlife.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.81950421830721,-87.59062506542966],\"visible\":true,\"title\":\"Burnham Wildlife Corridor\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Burnham Wildlife Corridor

\\nA wildlife corridor has been established along Chicago’s Lake Shore Drive.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Chicago, Ill\\n
\\nCost: $1,000,000\\n
\\nResult: Migratory birds and butterflies have a safe place to stop over, thanks to the Burnham Wildlife Corridor. Invasive species have been removed and volunteers have planted thousands of native trees and shrubs in their place.

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.85915038627614,-87.60092474804685],\"visible\":true,\"title\":\"Northerly Island Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Northerly Island Restoration

\\nAn old airstrip near downtown Chicago was turned into a native ecosystem on Lake Michigan.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Chicago, Ill\\n
\\nCost: $8,400,000\\n
\\nResult: : Funding from the Great Lakes Restoration Initiative is restoring a native prairie and marsh ecosystem to Chicago’s Northerly Island in Lake Michigan to provide habitat to native fish and wildlife, and an outdoor recreation space in the city for people. \\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.48720322673501,-87.80155178925781],\"visible\":true,\"title\":\"North Point Marina Beach Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

North Point Marina Beach Restoration

\\nWater quality and habitat were improved at North Point Marina Beach near Chicago, Ill.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Winthrop Harbor, Ill\\n
\\nCost: $250,000\\n
\\nResult: By restoring native plants to Lake Michigan beach and the dune habitat, gulls stopped frequenting the beach and water quality has been restored, allowing a popular beach to remain open most of the season.

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/polluted_run_off.png\",\"options\":{\"position\":[41.93625757371267,-82.14194335312499],\"visible\":true,\"title\":\"Mapping Historic Harmful Algal Blooms\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Mapping Historic Harmful Algal Blooms

\\nMapping historic harmful algal blooms has increased our understanding of the relationship between blooms and their causal factors and will lead to more effective future management. \\n

\\nType: Polluted Runoff\\n
\\nLocation: Region wide\\n
\\nCost: $400,000\\n
\\nResult: The study provided a fuller understanding of what causes harmful algal blooms, leading to the creation of more advanced models to help researchers target solutions to reduce future outbreaks. Health and environmental officials hope to work collaboratively with farmers to find new and creative approaches to limit nutrient runoff.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"5\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.78175178326107,-92.13061746445311],\"visible\":true,\"title\":\"Duluth Stream Corps\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Duluth Stream Corps

\\nDuluth residents worked with landowners to restore shorelines for rivers and streams in Duluth, Minnesota. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Duluth, Minnesota\\n
\\nCost: $655,625\\n
\\nResult: The program has planted 18,177 trees and shrubs along 22 miles of shorelines. This helps filter out sediments and pollutants from Duluth’s streams and rivers, and improves water quality for both people and wildlife. The Stream Corps program provided training and employment for 14 un- or underemployed Duluth residents.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[47.61249227184368,-91.55695414374998],\"visible\":true,\"title\":\"Knife River Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Knife River Restoration

\\nErosive stream banks on the Knife River were restored by reducing the stress from water flowing into the bank, decreasing sedimentation in the Knife River.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Lake County, Minnesota\\n
\\nCost: $500,000\\n
\\nResult: Two of the highest priority stream banks, which contribute significant sedimentation, have been stabilized, reducing the Knife River’s total sediment load by 17 percent. This significantly enhances habitat quality for aquatic species and reduces filtration costs for Lake Superior’s drinking water.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.29238189351571,-83.69074320624998],\"visible\":true,\"title\":\"Huron River Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Huron River Restoration

\\nRestoring the Huron River has improved its ecological health and enhanced recreational opportunities. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Southeast Michigan\\n
\\nCost: $29 million\\n
\\nResult: Installing woody debris and boulders enhanced aquatic habitats, while removing dams naturalized stream flow. Stabilizing stream banks and cleaning contaminated sites reduced the flow of pollutants and sediment into the river. Repairing portages and launches increased safety for boaters travelling down the Huron River Water Trail. Integration with the Huron River Water Trail will spur economic development for riverfront communities.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[46.66111913921061,-92.28318174189457],\"visible\":true,\"title\":\"Chambers Grove Park Shoreline Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Chambers Grove Park Shoreline Restoration

\\nThe shoreline in Chambers Grove Park was naturalized.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Duluth, Minn.\\n
\\nCost: $1,200,000\\n
\\nResult: Removing a steel wall and installing rock weirs in the St. Louis River is providing habitat for fish and aquatic wildlife, reducing erosion and protecting a local park from flooding.Flat rock fishing opportunities will now be available in the park, thanks to the restoration.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.779275541441265,-78.83789100000001],\"visible\":true,\"title\":\"Times Beach Habitat Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Times Beach Habitat Restoration

\\nInvasive plants were removed and replaced with natives in Times Beach, a nature preserve in Buffalo, New York. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Buffalo, New York\\n
\\nCost: About $3.5 million\\n
\\nResult: Decades of human activity have allowed invasive plants to spread through Times Beach Nature Preserve in Buffalo, N.Y., displacing native plants and degrading important migratory bird habitat. Removing these invasives and replacing them with natives has encouraged the return of warblers, herons, waterfowl, and other migratory bird species. This has also enhanced recreational opportunities for birdwatchers and hikers.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.64059172031612,-81.4083484584961],\"visible\":true,\"title\":\"Lost Nation Golf Course Creek Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Lost Nation Golf Course Creek Restoration

\\nA creek was stabilized, reducing flooding along the Lost Nation Golf Course and increasing water quality before the creek enters Lake Erie.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Willoughby, Ohio\\n
\\nCost: $286,000\\n
\\nResult: With help from the Great Lakes Restoration Initiative, the Lost Nation Golf Course reshaped Ward Creek to slow water flow and reduce flooding. Native species were planted along the sides of the creek to help absorb water and reduce erosion.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.63808491749582,-87.33507536718753],\"visible\":true,\"title\":\"Great Marsh Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Great Marsh Restoration

\\nAn old ditch system was removed and invasive plants were eradicated to restore the natural ecology of the Great Marsh in Chesterton, Indiana. \\n

\\nType: Habitat Restoration\\n
\\nLocation: Chesterton, Indiana\\n
\\nCost: About $3 million\\n
\\nResult: A ditch system constructed in the 19th Century altered the hydrology of the Great Marsh, allowing invasive plants to spread. Removing the ditch system naturalized the Marsh, decreasing the frequency of damaging floods. Removing invasive plants and replacing them with natives has encouraged the return of sandhill cranes, great egrets, herons, and a variety of waterfowl to their native nesting sites.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.771311863884925,-88.24218787500001],\"visible\":true,\"title\":\"Wilmette Tree Planting\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Wilmette Tree Planting

\\nFifty trees planted along roads to partially replace the ash trees lost following an emerald ash borer infestation are decreasing runoff into Lake Michigan.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Wilmette, Illinois\\n
\\nCost: $8,000\\n
\\nResult: Once the trees have matured, they will prevent the discharge of almost 40,000 gallons of untreated stormwater into Lake Michigan each year. This will significantly improve water quality throughout the Lake Michigan watershed. Wilmette has also been recognized by the Arbor Day Foundation for their efforts to raise awareness about emerald ash borer management for other Midwestern communities and groups.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[42.73995254272385,-87.88925208398439],\"visible\":true,\"title\":\"Pike River Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Pike River Restoration

\\nThe Pike River was naturalized to meander more, reducing flooding near Mt. Pleasant, Wis.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Mt. Pleasant, Wis.\\n
\\nCost: $6.7 million\\n
\\nResult: Restoring the natural curves and riverbank of the Pike River in Wisconsin has reduced flooding and erosion, while increasing fish and wildlife habitat.\\n

\\nVisit the Website\\n

\\n\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"},{\"iconid\":\"http://healthylakes.org/mapicons/ico-habitat-c.png\",\"options\":{\"position\":[41.95798764547465,-83.78512796249998],\"visible\":true,\"title\":\"Ford Marsh Restoration\"},\"event\":{\"click\":{\"infoWindow\":{\"options\":{\"content\":\"

Ford Marsh Restoration

\\nRestoring wetlands in the Detroit International Wildlife Refuge is allowing native plants and wildlife to return, supporting outdoor recreation opportunities.\\n

\\nType: Habitat Restoration\\n
\\nLocation: Monroe County, Michigan\\n
\\nCost: $360,000\\n
\\nResult: The project has restored 175 acres of Lake Erie coastal wetland and improved hunting experiences for the surrounding area’s waterfowl hunters. Once the de-watering process is complete, the wetland will be predominately dry to allow for the marsh bottom to stabilize and set the stage for native emergent vegetation to germinate and grow once water is pumped back on the wetland.\\n

\\nVisit the Website\\n

\\n\",\"maxWidth\":\"350\"}}}},\"catID\":\"3\"}],\"labels\":[],\"images\":[],\"polylines\":[],\"polygons\":[],\"rectangles\":[],\"circles\":[],\"kmlfiles\":[],\"routes\":[],\"catlegendenable\":true,\"catlegend\":[null,null,null,\"Habitat Restoration\",\"Invasive Species\",\"Polluted Runoff\",null,\"Toxic Pollution\",null],\"legends\":[null,{\"items\":[]},{\"items\":[]},null],\"lang\":\"en\",\"clustering\":false,\"clustering_gridsize\":\"50\",\"clustering_maxzoom\":\"12\",\"clustering_click\":\"\",\"datalist\":{\"position\":\"2\",\"height\":\"300\",\"width\":\"230\",\"showmarkers\":\"0\"},\"savetime\":\"2017-6-29 13:43:1\",\"stylemapenable\":false,\"stylemapname\":\"\",\"style\":[],\"catgoryLegendOptions\":{\"position\":\"9\",\"enabled\":\"3,4,5,7,\"},\"crowdmap\":{\"mode\":\"\",\"markericon\":11,\"login\":{\"facebook\":true,\"twitter\":true,\"google\":true,\"email\":true},\"clenable\":true},\"heatmap\":{}}"); // test 1 2018-03-08 23:40:57 41837 // qoute test 0 0