LocaMain=Class.create({index:webroot+"/server.php?",lastMouseAction:new Date().getTime(),lastMouseActionDelay:(1000*60)*5,pollActionsRefresh:15,pollEventsRefresh:5,pollUserRefresh:30,pollFriendsRefresh:60,delOldBounds:120,actionCursor:0,maxHeight:0,allowPollData:true,debug:false,feed:{public:{type:'worldwide'},personal:{type:'messages'}},initialize:function(){main=this;this.pageTitle=document.title;this.pollingStopped=false;this.pollingBreak=false;this.myUser=null;this.currentUser=null;this.maxEvent=null;this.url_control=null;this.pollCounter=0;this.mapFilter=false;this.lang=null;this.targets={map:$("map_canvas")};if(!google.loader.ClientLocation){google.loader.ClientLocation={"latitude":51.483,"longitude":7.217,def:true,"address":{"city":"Bochum","region":"North Rhine-Westphalia","country":"Germany","country_code":"DE"}};}this.defaultLatLng=new google.maps.LatLng(google.loader.ClientLocation.latitude,google.loader.ClientLocation.longitude);if(main.debug)console.debug(Object.toJSON(google.loader.ClientLocation));this.data=new Hash();this.bounds=new Array();this.groups=new Hash();this.cluster=new Hash();this.marker=new Hash();this.visibleMarkers=new Array();this.visibleUsers=new Hash();this.search=null;this.searchMapControl=null;this.events=new Hash();this.actions=new Hash();this.initMap();this.LOverlay=this.getLOverlay();},initMap:function(){this.map=new google.maps.Map2(this.targets.map);this.map.enableContinuousZoom();this.map.setMapType(G_PHYSICAL_MAP);this.load=new LocaLoad();this.helpers=new LocaHelpers();this.tile=new Tile();this.gui={base:new LocaGuiBase()};this.loadMap();},initListener:function(){google.maps.Event.addListener(main.map,"mousemove",function(){main.lastAction=new Date().getTime();if(main.pollingStopped){if(main.debug)console.debug("Polling Return All");main.pollingStopped=false;main.initPeriodicalExecuter();}});google.maps.Event.addListener(main.map,"movestart",function(){main.pollingBreak=true;});google.maps.Event.addListener(main.map,"moveend",function(){main.pollingBreak=false;if(main.map.getZoom()>0)main.loadMarker();});google.maps.Event.addListener(main.map,"infowindowopen",function(){if(main.LOverlay){main.map.removeOverlay(main.LOverlay);}});google.maps.Event.addListener(main.map,"zoomend",function(){main.updateCluster(true);});google.maps.Event.addListener(main.map,"click",function(overlay,point,overlaylatlng){if(overlay&&main.LOverlay){main.map.removeOverlay(main.LOverlay);}});if(window.addEventListener){window.addEventListener('resize',function(){main.checkResize();main.loadMarker();},false);}},initPeriodicalExecuter:function(){main.load.pollData(this.pollCounter,false);new PeriodicalExecuter(function(pe){if(!main.pollingBreak&&main.allowPollData){main.load.pollData(++this.pollCounter,false);var diff=new Date().getTime()-main.lastMouseAction;if(diff>=main.lastMouseActionDelay){if(main.debug)console.debug("Polling Delay: "+Math.round(diff/1000)+" sec");pe.stop();main.pollingStopped=true;}}}.bind(this),5);},jumpToLocation:function(location_ID,tab){if(main.LOverlay)main.map.removeOverlay(main.LOverlay);this.gui.base.removeContent();this.gui.base.window.createLocationInfoWindow("",location_ID,tab);},jumpToUser:function(user_ID,tab){main.gui.base.updateMyEvents('visits',user_ID);main.gui.base.updateMyEvents('requests',user_ID);if(user_ID==this.myUser.id){this.jumpToMe();return;}if(main.LOverlay)main.map.removeOverlay(main.LOverlay);this.gui.base.removeContent();this.gui.base.window.createUserInfoWindow(this.visibleUsers.get(user_ID),user_ID,tab);},jumpToMe:function(tab){if(main.LOverlay)main.map.removeOverlay(main.LOverlay);var user_ID=this.myUser.id;this.gui.base.removeContent();this.gui.base.window.createMyInfoWindow(this.visibleUsers.get(user_ID),user_ID,tab);},selectTab:function(tab,user_ID){main.map.getInfoWindow().selectTab(tab);if(tab==1&&user_ID)$('userWindowChat').scrollTop=$('messageBox'+user_ID).getHeight();},loadMap:function(){new Ajax.Request(index,{method:'get',parameters:{f:'initSession',s:session},onSuccess:function(transport){var jd=transport.responseJSON;this.l=jd.lang;if(jd.session){this.url_control=jd.url;this.gui.base.initFrame();if(jd.user_ID){this.myUser=jd.user;this.switchToWindow();if(jd.url&&jd.url.data){this.map.setCenter(this.defaultLatLng);this.map.setZoom(11);}else{this.map.setCenter(new google.maps.LatLng(this.myUser.lat,this.myUser.lng));this.map.setZoom(12);}}else{this.map.setCenter(this.defaultLatLng);this.map.setZoom(11);if(jd.url&&jd.url.data&&jd.url.control=="invite")this.gui.base.window.showUserInviteAccount();else if(jd.url&&jd.url.data&&jd.url.control=="activate"){this.load.updateUserActivation();}else if(jd.url&&jd.url.data)this.gui.base.showContent('login');else this.gui.base.window.showUserNewAccount();}this.initListener();this.initPeriodicalExecuter();}else alert('Site nicht verfügbar!')}.bind(this)});main.checkResize();},switchToWindow:function(){if(this.url_control&&this.url_control.control){if(this.url_control.control=="message")this.jumpToUser(this.url_control.data.user_ID,1);else if(this.url_control.control=="user")this.jumpToUser(this.url_control.data.user_ID,0);if(this.url_control.control=="activate")this.load.updateUserActivation();else if(this.url_control.control=="request")this.gui.base.window.showAnswerFriendRequest();this.url_control=null;}else this.jumpToMe();},pollMyEvents:function(){},manageMarkers:function(markerItems){main.updateCluster();main.visibleMarkers.each(function(marker){main.map.removeOverlay(marker);});var addLocations=0;var addUsers=0;var addCluster=0;markerItems.each(function(item){var point=item;var pMarker=null;if(point.meta.type=="user"){var latlng=new google.maps.LatLng(point.data.lat,point.data.lng);var pMarker=main.buildUserMarker(latlng,point.data);main.visibleMarkers.push(pMarker);main.map.addOverlay(pMarker);addUsers++;}else if(point.meta.type=="location"){var latlng=new google.maps.LatLng(point.data.lat,point.data.lng);var pMarker=main.buildLocationMarker(latlng,point.data);main.visibleMarkers.push(pMarker);main.map.addOverlay(pMarker);addLocations++;}else if(point.meta.type=="group"){var ne=new google.maps.LatLng(point.meta.bounds.ne.lat,point.meta.bounds.ne.lng);var sw=new google.maps.LatLng(point.meta.bounds.sw.lat,point.meta.bounds.sw.lng);var bounds=new google.maps.LatLngBounds(sw,ne);var pMarker=main.buildGroupMarker(bounds.getCenter(),point,bounds);if(main.setCluster(pMarker)){main.map.addOverlay(pMarker);addCluster++;}}});if(main.debug)GLog.write("L: "+addLocations+" U: "+addUsers+" C: "+addCluster);},buildUserMarker:function(markerPoint,user){var userTitle=user.username+" | "+user.vorname+" ("+user.alter+")";var isaFriend=false;var icon_size=0;var labelClass="";var sleep;if(user.online_status=="offline"){icon_size=32;labelClass="smallUserLabelMarker";}else{icon_size=48;labelClass="bigUserLabelMarker";}var icon=main.gui.base.getUserIcon(user.user_gender,icon_size,user.user_icon);var userMarker=new am(markerPoint,{icon:icon,object:{'type':'user','markerPoint':markerPoint,'user':user,'isaFriend':isaFriend,'isMe':false,'icon_size':icon_size,'userTitle':userTitle},m:main,labelClass:labelClass,labelOffset:new google.maps.Size(-icon_size/2,-icon_size/2)});google.maps.Event.addListener(userMarker,"click",function(){if(user.id==main.myUser.id)main.gui.base.window.createMyInfoWindow(userMarker,user.id);else main.gui.base.window.createUserInfoWindow(userMarker,user.id);});google.maps.Event.addListener(userMarker,"mouseover",function(){userMarker.setImage(webroot+"/inc/bilder/map/user_bg_over_"+icon_size+".png");userMarker.update('mouseover');});google.maps.Event.addListener(userMarker,"mouseout",function(){userMarker.setImage(webroot+"/inc/bilder/map/user_bg_"+icon_size+".png");userMarker.update('mouseout');});return userMarker;},buildLocationMarker:function(markerPoint,location){var sleep;icon_size=16;var icon=main.gui.base.getLocationIcon(location.icon,icon_size,location.data_type);var locationMarker=new am(markerPoint,{icon:icon,object:{'type':location.data_type,'markerPoint':markerPoint,'location':location,'icon_size':icon_size,'title':location.name1},m:main});google.maps.Event.addListener(locationMarker,"click",function(){main.gui.base.window.createLocationInfoWindow(locationMarker,location.id);});google.maps.Event.addListener(locationMarker,"mouseover",function(){locationMarker.setImage(webroot+"/inc/bilder/map/user_bg_over_"+icon_size+".png");locationMarker.update('mouseover');});google.maps.Event.addListener(locationMarker,"mouseout",function(){locationMarker.setImage(webroot+"/inc/bilder/map/user_bg_"+icon_size+".png");locationMarker.update('mouseout');});return locationMarker;},buildGroupMarker:function(markerPoint,point,bounds){if(point.meta.num<10)var digits=1;else if(point.meta.num<100)var digits=2;else var digits=3;var icon=main.gui.base.getGroupIcon(digits);var offset=icon.iconAnchor.x;if(main.myUser){var userLatLng=new google.maps.LatLng(main.myUser.lat,main.myUser.lng);var me=bounds.containsLatLng(userLatLng);}var labelClass="groupMarker";if(point.meta.online)labelClass=labelClass+" groupOnline";if(me)labelClass=labelClass+" groupMe";var div=new Element("div").update(point.meta.num);var groupMarker=new am(markerPoint,{icon:icon,div:div,m:main,object:{'type':'group','markerPoint':markerPoint,'point':point,'bounds':bounds,'me':me},labelClass:labelClass,labelOffset:new google.maps.Size(-22,-10)});google.maps.Event.addListener(groupMarker,"click",function(){main.map.removeOverlay(main.LOverlay);main.map.setCenter(markerPoint,main.map.getBoundsZoomLevel(bounds));main.map.closeInfoWindow();});google.maps.Event.addListener(groupMarker,"mouseover",function(){groupMarker.setImage(webroot+"/inc/bilder/map/group_"+digits+"_o.png");groupMarker.update('mouseover');});google.maps.Event.addListener(groupMarker,"mouseout",function(){groupMarker.setImage(webroot+"/inc/bilder/map/group_"+digits+"_n.png");groupMarker.update('mouseout');});return groupMarker;},loadMarker:function(){this.load.loadMarker();},checkResize:function(){this.map.checkResize();if($('content')){var height=(document.documentElement.clientHeight-25)+"px";$('content').setStyle({height:height});}this.maxHeight=$('content').getHeight()-100;this.gui.base.updateRightBoxHeights();},stopUpload:function(funcname,data){main.gui.base.removeMapLoading();if(this[funcname])this[funcname](data);else alert("Function: "+funcname+" nicht gefunden!");},updateUploadImage:function(data){$('uploadImage').update(data.code.image);},updateUploadAlbum:function(data){main.gui.base.removeContent();main.gui.base.window.showAlbumListImages(data.album_ID);if(data.num_images){var imgs=new Array();for(var index=0;index<data.new_images.length;++index){var item=data.new_images[index];imgs.push({"src":main.gui.base.buildImageSrc(item,"64"),"href":"http://beta.locamap.de/user/"+main.myUser.user_key});};main.helpers.connection.fbShowFeedDialog("94009010565",{"album":data.album_name,"num_images":data.num_images,"images":imgs,"key":""},"user_album");}},delUploadImage:function(){new Ajax.Request(index,{method:'get',parameters:{f:'delUploadImage',s:session},onSuccess:function(transport){var jd=transport.responseJSON;$('uploadImage').update(jd.code.image);}});},setMapFilter:function(value){if(value=="locations")this.mapFilter={locations:"1"};else if(value=="user")this.mapFilter={user:"1"};else this.mapFilter=false;main.updateCluster(true);main.loadMarker(true);},setCluster:function(marker){var object=marker.getObject();if(this.cluster.get(object.point.meta.m))return false;else{t=new Date();var item={time:t.getTime(),marker:marker};this.cluster.set(object.point.meta.m,item);return true;}},updateCluster:function(reset){t=new Date();main.cluster.each(function(pair){if(t.getTime()-pair.value.time>(main.delOldBounds*1000)||reset){var item=main.cluster.unset(pair.key);main.map.removeOverlay(item.marker);if(main.debug)console.debug('Del Group '+pair.key);}});},getLOverlay:function(){if(!this.LOverlay){this.LOverlay=new LOverlay();return this.LOverlay;}this.map.removeOverlay(this.LOverlay);return this.LOverlay;},updateActionPolling:function(){if(!dir){if(main.pollActions)main.pollActions=false;else{main.actionCursor=0;main.load.pollUserActions(true);main.pollActions=true;}}else{main.pollActions=false;main.load.pollUserActions(true,dir);}$('actionControlPoll').removeClassName('iconBreak');$('actionControlPoll').removeClassName('iconPlay');if(main.actionCursor==0)$('actionControlUp').addClassName('dis');else if(main.actionCursor>=4)$('actionControlUp').removeClassName('dis');if(main.pollActions){$('actionControlPoll').addClassName('iconBreak');$('actionControlPoll').writeAttribute('title','Feed gestartet | -> unterbrechen');}else{$('actionControlPoll').addClassName('iconPlay');$('actionControlPoll').writeAttribute('title','Feed unterbrochen | -> starten');}}});
