
Lycos.use("util");Lycos.webon.modules.map=function(instId,subInstId)
{this.type="map";this.instId=instId;this.subInstId=subInstId;this.lyModule=Lycos.webon.module;this.lyModule(instId,subInstId);var varName="(Lycos.webon.getInstance(\"map\", "+instId+"))";this.varName=varName;this.pts=new Array();this.curId=-1;this.map=null;this.connectDots=false;this.iconImgBase='http://maps.google.com/mapfiles/ms/micons/';this.initTries=1;this.oldInitTries=1;this.maxInitTries=50;this.minLgMap=350;this.makeMarkerIcon=function(imgName){var icon=new this.jsWindow.GIcon();icon.image=this.iconImgBase+imgName+'.png';var pattern1=/pushpin$/;var pattern2=/(-dot|pink|green|blue|red|yellow|purple)$/;if(pattern1.exec(imgName))
icon.shadow=this.iconImgBase+"pushpin_shadow.png";else if(pattern2.exec(imgName))
icon.shadow=this.iconImgBase+"msmarker.shadow.png";else
icon.shadow=this.iconImgBase+imgName+'.shadow.png';icon.iconSize=new this.jsWindow.GSize(32,32);icon.shadowSize=new this.jsWindow.GSize(59,32);icon.iconAnchor=new this.jsWindow.GPoint(16,32);icon.infoWindowAnchor=new this.jsWindow.GPoint(16,1);return icon;}
this.addMarker=function(_id,_t,_d,_loc,_url,_linkId,_imgName,replaceImgOnly){try{if(this.map)
{var loc=_loc?_loc:this.map.getCenter();if(replaceImgOnly&&_id&&this.pts[_id])
loc=this.pts[_id].getLatLng();var marker;if(_imgName){var markerIcon=this.makeMarkerIcon(_imgName);marker=new this.jsWindow.GMarker(loc,{draggable:!this.readOnly,icon:markerIcon});}
else
marker=new this.jsWindow.GMarker(loc,{draggable:!this.readOnly});var id;if(replaceImgOnly){var oldMarker=this.pts[_id];if(oldMarker){marker.lyData=oldMarker.lyData;marker.lyData.icon=_imgName;marker.lyOpenInfoWindow=oldMarker.lyOpenInfoWindow;marker.getLinkHtml=oldMarker.getLinkHtml;marker.storeChanges=oldMarker.storeChanges;marker.addLink=oldMarker.addLink;marker.deleteLink=oldMarker.deleteLink;marker.setLatLng(oldMarker.getLatLng());oldMarker.remove();}}
if(_id!=null){this.pts[_id]=marker;id=_id;}
else{this.pts.push(marker);id=this.pts.length-1;}
if(!replaceImgOnly){var title=_t?_t:"Marker "+(id+1);var desc=_d?_d:"Enter address or description here.";var url=_url?_url:null;var linkId=_linkId?_linkId:null;var inited=(_id!=null);marker.lyData={id:id,title:title,desc:desc,mapName:varName,inited:inited,instId:instId,subInstId:subInstId,url:url,linkId:linkId,icon:_imgName};if(this.readOnly){marker.getLinkHtml=function(mapName,id){var data=this.lyData;return data.url?'<a href="'+data.url+'" target="_new">'+data.title+"</a>":data.title;}
marker.lyOpenInfoWindow=function(mapName){var marker=this;var data=this.lyData;var title=this.getLinkHtml(mapName,id);Lycos.webon.modules.map.currentInfoWindow=this.openInfoWindowHtml("<div><h2>"+title+"</h2><p style=\"max-width:300px;max-height:100px;overflow-y:auto\">"+data.desc+"</p></div>");}}
else{marker.storeChanges=function(){var marker=this;var data=marker.lyData;var loc=marker.getLatLng();eval('var myMap = '+marker.lyData.mapName+';');myMap.lyAjaxObj({action:"updateMarker",marker_id:data.id,title:data.title,description:data.desc,lat:loc.lat(),lng:loc.lng(),icon:data.icon});}
var tmp=this;marker.getLinkHtml=function(mapName,id){var data=this.lyData;var m=eval(mapName);var escMapName=mapName.replace(/\"/g,"\\\"");var nameStr=m.type+"_"+m.instId+"_"+m.subInstId;var mapLinkAction;var mapLinkIcon;var mapLinkStr='';if(data.url){mapLinkIcon="unlink";mapLinkAction=mapName+".pts["+id+"].deleteLink(\""+escMapName+"\","+id+")";mapLinkStr="<div id=\"mapLinkDisplay_"+nameStr+"_"+id+"\" style=\"margin-top: 5px; margin-bottom: -15px; padding-left: 28px;\"><a style=\"color: blue;\" href='"+data.url+"' target='_new'>"+tmp.lyDotDotDot(data.url,30)+"</a></div>";}
else{mapLinkIcon="link";mapLinkAction=mapName+".pts["+id+"].addLink(\""+escMapName+"\","+id+")";}
if(window.manager==null||window.manager.instId==null){mapLinkAction="alert(\"This feature is only available from webon.com\")";}
return"<span id='mapLink_"+nameStr+"_"+id+"' style=\"position: relative; top: 4px; left: 5px;\"><a onclick='"+mapLinkAction+"'><img src=\"/adm/js/tinymce/themes/advanced/images/"+mapLinkIcon+".gif\" /></a></span>"+mapLinkStr;}
marker.lyOpenInfoWindow=function(mapName){var marker=this;var data=this.lyData;if(data.inited){var spots=new Array('blue-dot','red-dot','green-dot','ltblue-dot','yellow-dot','purple-dot','pink-dot','blue','red','green','lightblue','yellow','purple','pink','blue-pushpin','red-pushpin','grn-pushpin','ltblu-pushpin','ylw-pushpin','purple-pushpin','pink-pushpin','restaurant','coffeehouse','bar','snack_bar','tram','lodging','wheel_chair_accessible','shopping','movies','grocerystore','convienancestore','arts','homegardenbusiness','electronics','mechanic','partly_cloudy','realestate','salon','dollar','parkinglot','gas','cabs','bus','truck','rail','plane','ferry','helicopter','subway','info','flag','earthquake','webcam','postoffice-us','police','firedept','hospitals','info_circle','phone','caution','fallingrocks','camera','tree','campfire','picnic','campground','rangerstation','toilets','POI','hiker','cycling','motorcycling','horsebackriding','sportvenue','golfer','trail','water','snowflake_simple','marina','fishing','sailing','swimming','ski','woman','man','rainy','volcano','sunny','euro','yen');var width=34;var height=34;var cols=7;var htmlData="<map name='map_icon_key'>";var x1,x2,y1,y2,imgTxt;for(i=0;i<spots.length;i++)
{x1=(i%cols)*width;x2=x1+width;y1=Math.floor(i/cols)*height;y2=y1+height;htmlData+="<area href='javascript:"+mapName+".changeIcon("+id+",\""+spots[i]+"\")' coords='"+x1+","+y1+","+x2+","+y2+"'>";}
htmlData+="</map><div id='infoWinIcons' style='margin-left:10px;display:none'><a onclick='document.getElementById(\"infoWinIcons\").style.display=\"none\";document.getElementById(\"infoWinMain\").style.display=\"block\";'>&laquo; Back</a><br/><div style='width:264px;height:125px;overflow:auto'><img src=\"/adm/modules/map/gIcons_7x13.png\" usemap='#map_icon_key' width='244' height='446'/></div></div>";eval("var iconImgBase = "+mapName+".iconImgBase;");var t=data.title.replace(/\'/g,"&#039;");t=t.replace(/\"/g,"&quot;");var d=data.desc.replace(/\'/g,"&#039;");d=d.replace(/\"/g,"&quot;");var iconImg=this.lyData.icon?iconImgBase+this.lyData.icon+".png":iconImgBase+"red-dot.png";htmlData+="<div id='infoWinMain'><form id='infoPopupForm'><div style='position:relative;padding-left:46px;height:42px;width:240px'>Title <input name='title' id='infoPopupTitle' value=\""+t+"\" />"+this.getLinkHtml(mapName,id)+"<img src=\""+iconImg+"\" border='1' onclick='var m="+mapName+".pts["+id+"];var d=m.lyData;d.title=document.getElementById(\"infoPopupTitle\").value;d.desc=document.getElementById(\"infoPopupDesc\").value;document.getElementById(\"infoWinMain\").style.display=\"none\";document.getElementById(\"infoWinIcons\").style.display=\"block\";' style='border:2px outset #6261d8;cursor:pointer;position:absolute;left:0px;top:5px;padding:2px'/><br /></div><textarea style=\"margin-top: 10px;\" rows='4' cols='34' id='infoPopupDesc'>"+d+"</textarea><br/><div style=\"margin-top: 10px; position: relative;\"><input type='button' value='Reposition' name='Reposition' onclick='var mymap="+mapName+";var m=mymap.pts["+id+"];var d=m.lyData;d.title=document.getElementById(\"infoPopupTitle\").value;d.desc=document.getElementById(\"infoPopupDesc\").value;m.closeInfoWindow();mymap.getMarkerLocation(d.desc,"+id+")'/> <input type='button' value='Delete' name='Delete' onclick='var m="+mapName+".pts["+id+"];if(confirm(\"Are you sure you want to delete this placemark?\")){"+mapName+".deleteMarker("+id+")}'/> <input type='button' value='Done' name='Done' style=\"position: absolute; right: 0;\" onclick='var m="+mapName+".pts["+id+"];var d=m.lyData;d.title=document.getElementById(\"infoPopupTitle\").value;d.desc=document.getElementById(\"infoPopupDesc\").value;m.storeChanges();m.closeInfoWindow();'/></div></form></div>";Lycos.webon.modules.map.currentInfoWindow=this.openInfoWindowHtml(htmlData);}else{this.openInfoWindowHtml(Lycos.webon.modules.map.initMarkerHtml(id,mapName));}}
this.changeIcon=function(id,newIconName){this.addMarker(id,null,null,null,null,null,newIconName,true);}
marker.addLink=function(mapName,id){Lycos.ui.linkpicker.pick
("site="+manager.instId,function(newUrl)
{var currObj=Lycos.webon.getInstance('map',instId,0);marker.lyData.url=newUrl;marker.closeInfoWindow();marker.lyOpenInfoWindow(mapName);currObj.lyAjaxObj({"action":"addLink","marker_id":marker.lyData['id'],"description":newUrl,"url":newUrl});return true;});}
marker.deleteLink=function(mapName,id){var currObj=Lycos.webon.getInstance('map',instId,0);var m=eval(mapName);var nameStr=m.type+"_"+m.instId+"_"+m.subInstId;this.lyData.url=null;document.getElementById("mapLink_"+nameStr+"_"+id).innerHTML=marker.getLinkHtml(mapName,id);document.getElementById("mapLinkDisplay_"+nameStr+"_"+id).parentNode.removeChild(document.getElementById("mapLinkDisplay_"+nameStr+"_"+id));currObj.lyAjaxObj({"action":"deleteLink","marker_id":this.lyData.id});}}}
this.map.addOverlay(marker);this.jsWindow.GEvent.addListener(marker,"click",function(){marker.lyOpenInfoWindow(varName)});this.jsWindow.GEvent.addListener(marker,"dragstart",function(){marker.closeInfoWindow();});this.jsWindow.GEvent.addListener(marker,"dragend",function(){marker.lyData.inited=true;marker.storeChanges();eval('var m='+marker.lyData.mapName+';');m.connectTheDots();});if(!inited)
marker.lyOpenInfoWindow(varName);this.curId=id;}}
catch(e){}}
this.loadMarkers=function(){var regex=new RegExp("[\\?&]m=([^&#]*)");var results=regex.exec(window.location.href);this.lyAjaxObj({action:"loadMarkers",site:(results?results[1]:0)});}
this.deleteMarker=function(id){var marker=this.pts[id];this.lyAjaxObj({"action":"deleteMarker","marker_id":id});marker.remove();this.pts[id]=null;this.updateMapBorder(false);}
this.savePosition=function(){this.mapCenter=this.map.getCenter();this.mapZoomLevel=this.map.getZoom();this.lyAjaxObj({"action":"setPosition","zoom":this.mapZoomLevel,"lat":this.mapCenter.lat(),"lng":this.mapCenter.lng()});}
this.saveView=function(){this.mapCenter=this.map.getCenter();this.mapZoomLevel=this.map.getZoom();if(manager&&page){var req={"action":"setSessionOptions","mod_uid":Lycos.ui.dragdrop.activeDockClickUid,"mod_page":page,"mod_subtype":"main","saveZoom":this.mapZoomLevel,"saveLat":this.mapCenter.lat(),"saveLng":this.mapCenter.lng()};manager.lyAjaxObj(req);}
this.lyAjaxObj({"action":"setPosition","zoom":this.mapZoomLevel,"lat":this.mapCenter.lat(),"lng":this.mapCenter.lng()});}
this.updateMapBorder=function(redraw){var points=new Array();for(i=0;i<this.pts.length;i++){if(this.pts[i]!=null&&isFunction(this.pts[i].getLatLng))
points.push(this.pts[i].getLatLng());}
if(points.length>1){var poly=new this.jsWindow.GPolygon(points);var bounds=poly.getBounds();this.mapCenter=bounds.getCenter();this.mapZoomLevel=this.map.getBoundsZoomLevel(bounds)-1;}
else if(points.length==1){this.mapCenter=points[0];}
else
return;if(redraw){this.map.setCenter(this.mapCenter);this.map.setZoom(this.mapZoomLevel);}}
this.onDirectionsLoad=function(){var currObj=this.parentMap;if(currObj.polyline!=null)
currObj.map.removeOverlay(currObj.polyline);currObj.polyline=currObj.directions.getPolyline();currObj.map.addOverlay(currObj.polyline);var pts=new Array();var max=currObj.polyline.getVertexCount();for(i=0;i<max;i++)
{var pt=currObj.polyline.getVertex(i);pts.push(pt.lat(),pt.lng());}
currObj.lyAjaxObj({action:"connectTheDots",polyline:pts});}
this.setConnectMode=function(newMode){this.connectDots=newMode;if(newMode)
this.connectTheDots();else if(this.polyline){this.map.removeOverlay(this.polyline);this.polyline=null;}}
this.connectTheDots=function(){if(this.connectDots==false)
return;var points=new Array();for(i=0;i<this.pts.length;i++){if(this.pts[i]!=null&&isFunction(this.pts[i].getLatLng))
points.push(this.pts[i].getLatLng());}
if(points.length>1){if(this.directions==null){this.directions=new this.jsWindow.GDirections();this.directions.parentMap=this;this.jsWindow.GEvent.addListener(this.directions,"load",this.onDirectionsLoad);}
this.directions.loadFromWaypoints(points,{getPolyline:true});}}
this.initMap=function(zoom,lat,lng,readOnly,height){var mapObj=Lycos.webon.getInstance("map",this.instId,0);if(typeof(mapObj.jsWindow)=="undefined")
mapObj.jsWindow=window;var id=mapObj.type+'_'+mapObj.instId+'_0';var hiddenDiv=document.getElementById(id+'_b');mapObj.mapEl=document.getElementById(id);if(mapObj.mapEl&&typeof(mapObj.jsWindow.GBrowserIsCompatible)!="undefined"&&typeof(mapObj.jsWindow.GMap2)!="undefined"&&typeof(mapObj.jsWindow.GEvent)!="undefined"&&typeof(mapObj.jsWindow.GClientGeocoder)!="undefined"&&mapObj.jsWindow.GBrowserIsCompatible()){var instId=mapObj.instId;var m=new mapObj.jsWindow.GMap2(mapObj.mapEl);m.enableDoubleClickZoom();m.enableScrollWheelZoom();m.enableContinuousZoom();var mCntnr=document.getElementById("mapContainer"+instId);if(mCntnr&&mCntnr.style.height){mapObj.checkResize(0,height);}
this.lgMapControl=(height>=this.minLgMap);if(this.lgMapControl)
this.mapControl=new mapObj.jsWindow.GLargeMapControl();else
this.mapControl=new mapObj.jsWindow.GSmallMapControl();this.mapTypeControl=new mapObj.jsWindow.GMapTypeControl();m.addControl(this.mapTypeControl);m.addControl(this.mapControl);var mlat=lat?lat:42.34;var mlng=lng?lng:-71.06;mapObj.mapCenter=new mapObj.jsWindow.GLatLng(mlat,mlng);mapObj.mapZoomLevel=zoom?zoom:11;m.setCenter(mapObj.mapCenter,mapObj.mapZoomLevel);m.hideControls();mapObj.jsWindow.GEvent.addListener(m,"mouseover",function(){m.showControls();});mapObj.jsWindow.GEvent.addListener(m,"mouseout",function(){m.hideControls();});mapObj.map=m;mapObj.readOnly=readOnly;mapObj.loadMarkers();mapObj.connectTheDots();if(!mapObj.geocoder)
Lycos.webon.modules.map.geocoder=new mapObj.jsWindow.GClientGeocoder();if(!mapObj.unloadHandlerDefined){mapObj.unloadHandlerDefined=1;Lycos.util.addUnloadListener(mapObj.jsWindow.GUnload);}
if(hiddenDiv)hiddenDiv.style.display="none";clearTimeout(mapObj.initTimer);return mapObj.map;}
if(hiddenDiv)hiddenDiv.style.display="";if(mapObj.initTries<mapObj.maxInitTries){var fib=mapObj.initTries+mapObj.oldInitTries;mapObj.oldInitTries=mapObj.initTries;mapObj.initTries=fib;mapObj.initTimer=setTimeout("(Lycos.webon.getInstance('map', "+mapObj.instId+",0)).initMap('"+id+"',"+zoom+","+lat+","+lng+","+readOnly+")",mapObj.initTries*100);}
else{clearTimeout(mapObj.initTimer);}
return null;}
this.focusOnMarker=function(_id){var id=_id;if(id==null){var str=document.location+'';if(str.match(/\#marker/)=="#marker"){var arr=str.split("#marker");id=arr[arr.length-1];if(id.length<=0)
return;}}
if(id==null||this.pts[id]==null)return;this.map.setCenter(this.pts[id].getLatLng());this.pts[id].lyOpenInfoWindow(this.varName);}
this.getMarkerLocation=function(addr,id){var marker=this.pts[id];marker.lyData.desc=addr;marker.lyData.inited=true;marker.closeInfoWindow();this.curId=id;Lycos.webon.modules.map.currObj=this;Lycos.webon.modules.map.geocoder.getLatLng(addr,Lycos.webon.modules.map.moveMarker);}
this.lyOnResize=function(newWidth,newHeight,resizeIframe){this.checkResize(newWidth,newHeight,resizeIframe);}
this.lyOnResizing=function(newWidth,newHeight,resizeIframe){this.checkResize(newWidth,newHeight,resizeIframe);}
this.checkResize=function(newWidth,newHeight,resizeIframe){var iframe=document.getElementById(resizeIframe);var cntnr=(iframe)?iframe.contentWindow.document.getElementById("mapContainer"+this.instId):document.getElementById("mapContainer"+this.instId);if(cntnr.style.height.replace("px","")!=newHeight){cntnr.style.height=newHeight+"px";var td=(iframe)?iframe.contentWindow.document.getElementById(this.type+"_"+this.instId+"_0"):document.getElementById(this.type+"_"+this.instId+"_0");if(td){var mapTools=(iframe)?iframe.contentWindow.document.getElementById("mapTools"+this.instId):document.getElementById("mapTools"+this.instId);var offset=(mapTools)?57:0;td.style.height=(newHeight-offset)+"px";}}
if(this.map){if(newHeight<this.minLgMap&&this.lgMapControl){this.map.removeControl(this.mapControl);this.mapControl=new this.jsWindow.GSmallMapControl();this.map.addControl(this.mapControl);this.lgMapControl=false;}
else if(newHeight>=this.minLgMap&&!this.lgMapControl){this.map.removeControl(this.mapControl);this.mapControl=new this.jsWindow.GLargeMapControl();this.map.addControl(this.mapControl);this.lgMapControl=true;}}}
this.lyOnAjaxSuccess=function(data){if(data.action=="setPosition"){alert("Position successfully saved.");}
else if(data.action=="updateMarker"){}
else if(data.action=="deleteMarker"){}
else if(data.action=="loadMarkers"){this.pts=new Array(data.maxMarkerId+1);var markers=data.markers;for(i in markers){var marker=markers[i];if(marker.id==undefined)
continue;var loc=new this.jsWindow.GLatLng(marker.lat,marker.lng);this.addMarker(marker.id,marker.title,marker.description,loc,marker.url,marker.link_id,marker.icon);}
this.focusOnMarker();}
else{}}}
Lycos.webon.modules.map.moveMarker=function(point){currObj=Lycos.webon.modules.map.currObj;var marker=currObj.pts[currObj.curId];if(point!=null){marker.setLatLng(point);}
marker.lyOpenInfoWindow(currObj.varName);currObj.updateMapBorder(true);marker.storeChanges();currObj.connectTheDots();}
Lycos.webon.modules.map.initMarkerHtml=function(id,mapName){var m=eval(mapName);var nameStr="\""+m.type+"_"+m.instId+"_"+m.subInstId+"_searchBox\"";return"<p style=\"position: relative; top: -10px; margin-bottom: -10px;font-family:Arial;font-size:12px; color: black; \"><span class=\"bold\">New Marker</span><br/>To move this marker, enter an address,<br/>or just click and drag its icon.<p><form style=\"margin-bottom: 10px;\" onsubmit='"+mapName+".getMarkerLocation(document.getElementById("+nameStr+").value,"+id+");return false;'><input id="+nameStr+" name='searchBox'/><input type='submit' value='Find'/></form>";};Lycos.webon.modules.map.currentInfoWindow=null;function isFunction(function_name){if(typeof function_name=='string'){return(typeof window[function_name]=='function');}else{return(function_name instanceof Function);}}
