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(canvas){main=this;if(canvas==null&&$('map_canvas'))var canvas_object="map_canvas";else if($(canvas))var canvas_object=canvas;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:$(canvas_object)};if(this.lat&&this.lng){this.defaultLatLng=new google.maps.LatLng(this.lat,this.lng);}else{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.client="web";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);},jumpTo:function(target,params){switch(target){case "location":this.jumpToLocation(params[0],params[1]);break;case "user":this.jumpToUser(params[0],params[1]);break;case "position":this.load.zoomToPosition(params[0],params[1]);break;}},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;this.o=jd.options;if(jd.session){this.url_control=jd.url;this.gui.base.initFrame();if(jd.user_ID){this.myUser=jd.user;this.switchToWindow();this.updateSound();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);else if(this.url_control.control=="location")this.jumpToLocation(this.url_control.data.location_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 LocamapMarker(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(){main.jumpTo('user',Array(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 LocamapMarker(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.jumpTo('location',Array(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 LocamapMarker(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({"type":"image","src":main.gui.base.buildImageSrc(item,"64"),"href":webroot+"/user/"+main.myUser.user_key});};var attachment={'name':main.lang.texts.facebook.new_album_pictures.name,'href':webroot+"/user/"+main.myUser.user_key,'caption':main.lang.texts.facebook.new_album_pictures.caption+":",'description':"'"+data.album_name+"' | "+data.num_images+" "+main.lang.texts.facebook.new_album_pictures.num_pictures,'media':imgs};main.helpers.connection.fbStreamPublish(attachment,false);}},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');}},updateSound:function(){if(this.myUser.flags.play_sound&&this.myUser.flags.play_sound=="0")soundManager.mute();else soundManager.unmute();},playSound:function(sound){if(!soundManager.muted)soundManager.play(sound);},});LocaStart=Class.create(LocaMain,{initialize:function($super,canvas,lat,lng){this.lat=lat;this.lng=lng;$super(canvas);},initMap:function(){this.client="guide";main.feed.public.type="worldwide";main.mapFilter={"locations":"1"};main.registerLocationEvents();if(this.targets.map){this.map=new google.maps.Map2(this.targets.map);this.map.enableContinuousZoom();this.map.setMapType(G_PHYSICAL_MAP);this.map.addControl(new google.maps.SmallMapControl());}this.load=new LocaLoad();this.helpers=new LocaHelpers();this.gui={base:new LocaGuiBase()};this.tile=new Tile();if(this.targets.map){this.loadMap();this.map.setCenter(this.defaultLatLng);this.map.setZoom(12);this.load.loadMarker();this.initListener();}setTimeout(function(){$('actions').appear();}.bind(this),500);},initListener:function(){google.maps.Event.addListener(main.map,"moveend",function(){if(main.map.getZoom()>0)main.loadMarker();});google.maps.Event.addListener(main.map,"zoomend",function(){main.updateCluster(true);});},initPeriodicalExecuter:function(){main.load.pollUserActions(true,20,"guide");new PeriodicalExecuter(function(pe){if(!main.pollingBreak&&main.allowPollData){main.load.pollUserActions(false,20,"guide");}}.bind(this),15);},loadMap:function(){new Ajax.Request(index,{method:'get',parameters:{f:'initSession',s:session},onSuccess:function(transport){var jd=transport.responseJSON;this.l=jd.lang;this.o=jd.options;}.bind(this)});},jumpTo:function(target,params){if(!params)params=new Array();this.gui.base.window.showGuideWelcomeScreen(target,params);},changeDescriptionBox:function(over,type){if(over==true){$('description_'+type).appear();}else{$('description_mobile').hide();$('description_web').hide();}},registerLocationEvents:function(){$$('div.box_over').each(function(e){e.observe('mouseover',respondToOver);e.observe('mouseout',respondToOut);});function respondToOver(event){var element=event.element();element.parentNode.addClassName('over');};function respondToOut(event){var element=event.element();element.parentNode.removeClassName('over');}},changeLocationButton:function(){var data=Form.serialize('form_link_button_generator',true);$('link_button_generator_img').setStyle({'backgroundImage':""});$('link_button_generator_img').addClassName("load");new Ajax.Request(index,{method:'get',parameters:{f:'buildLocationButton',s:session,data:Object.toJSON(data)},onSuccess:function(transport){var jd=transport.responseJSON;var img="url("+jd.button.src+")";$('link_button').value=jd.button.link;setTimeout(function(){$('link_button').select();$('link_button_generator_img').removeClassName("load");$('link_button_generator_img').setStyle({'backgroundImage':img});}.bind(this),200);}.bind(this)});}});
