var searchForm=new Ext.FormPanel({labelWidth:90,frame:false,border:false,width:215,defaults:{width:100},defaultType:'textfield',items:[{fieldLabel:'<img ext:qtitle="Schlagworte" ext:qtip="Sie können nach Tracks suchen, welche von anderen Nutzern mit Schlagworten versehen wurden."  src="images/icons/info.gif"/>&nbsp;&nbsp;Schlagworte',name:'keywords',id:'filter-keywords'},{fieldLabel:'<img ext:qtitle="PLZ" ext:qtip="Postleitzahlen müssen fünfstellig sein."  src="images/icons/info.gif"/>&nbsp;&nbsp;PLZ',name:'plz',id:'filter-plz',enableKeyEvents:true,maskRe:/^[0-9]*$/,validator:function(fieldValue){if(fieldValue.length!=5||!fieldValue.length!=0){return"Die PLZ muss fünfstellig sein.";}else{return true;}},listeners:{'render':function(field){var node=field.el.dom;var title='PLZ';var text='Postleitzahlen müssen fünfstellig sein.';if(node.setAttributeNS){node.setAttributeNS("ext","qtip",text);node.setAttributeNS("ext","qtitle",title);}else{node.setAttribute("ext:qtip",text);node.setAttribute("ext:qtitle",title);}},'valid':function(){Ext.getCmp('searchFormSubmitButton').enable();},'invalid':function(){Ext.getCmp('searchFormSubmitButton').disable();}}},{fieldLabel:'<img ext:qtitle="Ort" ext:qtip="Die Suche nach Orten funktioniert nur mit vollständig angegebenem Namen."  src="images/icons/info.gif"/>&nbsp;&nbsp;Ort',name:'location',id:'filter-location',listeners:{'render':function(field){var node=field.el.dom;var title='Ort';var text='Die Suche nach Orten funktioniert nur mit vollständig angegebenem Namen.';if(node.setAttributeNS){node.setAttributeNS("ext","qtip",text);node.setAttributeNS("ext","qtitle",title);}else{node.setAttribute("ext:qtip",text);node.setAttribute("ext:qtitle",title);}}}},{xtype:'combo',store:new Ext.data.SimpleStore({fields:['radiusKM','radius'],data:[['5km','5'],['10km','10'],['25km','25'],['50km','50'],['100km','100']]}),displayField:'radiusKM',valueField:'radius',mode:'local',triggerAction:'all',id:'radiusCombo',value:'5',selectOnFocus:false,fieldLabel:'Umkreis',editable:false},{xtype:'checkboxgroup',id:'filter-rectype',fieldLabel:'Art der Aufzeichnung',itemCls:'x-check-group-alt',columns:1,items:[{boxLabel:'Handy',name:'handy',checked:true,id:'filter-rectype-handy'},{boxLabel:'Laptop',name:'laptop',checked:true,id:'filter-rectype-laptop'}]},{xtype:'checkboxgroup',id:'filter-provider',fieldLabel:'Provider',itemCls:'x-check-group-alt',columns:1,items:[{boxLabel:'T-Mobile',name:'t-mobile',checked:true,id:'filter-provider-tmobile'},{boxLabel:'Vodafone',name:'vodafone',checked:true,id:'filter-provider-vodafone'},{boxLabel:'O2',name:'o2',checked:true,id:'filter-provider-o2'},{boxLabel:'E-Plus',name:'e-plus',checked:true,id:'filter-provider-eplus'},{boxLabel:'Andere',name:'other',checked:true,id:'filter-provider-other'}]},new Ext.form.DateField({maskRe:/^[.\d]*$/,fieldLabel:'von',name:'von',id:'filter-from',value:"01.01.2008",format:'d.m.Y',allowBlank:false,width:190,validator:function(fieldValue){if(Date.parseDate(fieldValue,"d.m.Y")!=null){if(Ext.getCmp('filter-to').getValue()!=""){if(Date.parseDate(fieldValue,"d.m.Y").getTime()>Ext.getCmp('filter-to').getValue().getTime()){return'Das Datum liegt hinter dem "bis"-Datum.';}else{return true;}}else{return true;}}else{return'Das Datum muss im Format "TT.MM.JJJJ" angegeben werden.';}},listeners:{'valid':function(){Ext.getCmp('searchFormSubmitButton').enable();},'invalid':function(){Ext.getCmp('searchFormSubmitButton').disable();}}}),new Ext.form.DateField({maskRe:/^[.\d]*$/,fieldLabel:'bis',name:'bis',allowBlank:false,value:getDate(),format:'d.m.Y',id:'filter-to',width:190,validator:function(fieldValue){if(Date.parseDate(fieldValue,"d.m.Y")!=null){if(Date.parseDate(fieldValue,"d.m.Y").getTime()<Ext.getCmp('filter-from').getValue().getTime()){return'Das Datum liegt vor dem "vom"-Datum.';}else{return true;}}else{return'Das Datum muss im Format "TT.MM.JJJJ" angegeben werden.';}},listeners:{'valid':function(){Ext.getCmp('searchFormSubmitButton').enable();},'invalid':function(){Ext.getCmp('searchFormSubmitButton').disable();}}})],buttons:[{text:'Zurücksetzen',listeners:{click:function(){searchForm.getForm().reset();}}},{text:'Suchen',id:'searchFormSubmitButton',listeners:{click:function(){devicetypes=[];if(Ext.get("filter-rectype-handy").dom.checked){devicetypes.push(1);}
if(Ext.get("filter-rectype-laptop").dom.checked){devicetypes.push(2);}
if(devicetypes.length===0){Ext.Msg.show({msg:'Bitte wählen Sie mindestens eine Aufzeichnungsart aus.',buttons:Ext.Msg.OK,icon:Ext.MessageBox.INFO,title:'Suchfilter'});return;}
provider=[];if(Ext.get("filter-provider-tmobile").dom.checked){provider.push(1);}
if(Ext.get("filter-provider-o2").dom.checked){provider.push(2);}
if(Ext.get("filter-provider-eplus").dom.checked){provider.push(4);}
if(Ext.get("filter-provider-vodafone").dom.checked){provider.push(3);}
if(Ext.get("filter-provider-other").dom.checked){provider.push(0);}
if(provider.length===0){Ext.Msg.show({msg:'Bitte wählen Sie mindestens einen Provider aus.',buttons:Ext.Msg.OK,icon:Ext.MessageBox.INFO,title:'Suchfilter'});return;}
store.baseParams={};store.baseParams.provider=provider.join(",");store.baseParams.from=Ext.get("filter-from").dom.value;store.baseParams.to=Ext.get("filter-to").dom.value;store.baseParams.location=Ext.get("filter-location").dom.value;store.baseParams.plz=Ext.get("filter-plz").dom.value;store.baseParams.keywords=Ext.get("filter-keywords").dom.value;store.baseParams.devicetypes=devicetypes.join(",");store.baseParams.radius=Ext.getCmp('radiusCombo').getValue();options={params:{start:0,limit:storePageSize}};store.load(options);}}}]});var hitlistGrid=Ext.extend(Ext.grid.GridPanel,{hideHeaders:true,cls:'hitlistgrid',initComponent:function(){Ext.apply(this,{store:new Ext.data.JsonStore({id:'hitlistStore',root:'hitlist',url:'STHitlistServlet',fields:[{name:'text'},{name:'hitlisttype'}]}),columns:[{header:"Top Ten Tracks",sortable:true,dataIndex:'text'},{header:"hitlisttype",sortable:true,dataIndex:'hitlisttype',hidden:true}],viewConfig:{autoFill:true,forceFit:true}});this.store.load();hitlistGrid.superclass.initComponent.apply(this,arguments);},listeners:{rowclick:function(grid,rowIndex,e){var rec=grid.store.getAt(rowIndex);options={params:{start:0,limit:10}};store.baseParams.hitlisttype=rec.get('hitlisttype');store.load(options);}}});Ext.reg('hitlistgrid',hitlistGrid);var searchPanel=new Ext.Panel({region:'west',autoScroll:true,title:'Tracks suchen',width:230,collapsible:true,split:true,minSize:215,maxSize:300,layout:'accordion',border:true,frame:false,margin:'0 0 0 0',defaults:{bodyStyle:'padding:6px 3px 3px 6px'},layoutConfig:{titleCollapse:true,animate:true,fill:false},items:[{title:'Suchfilter',items:searchForm},{title:'Tags / Keywords',contentEl:'tagcloud',listeners:{beforerender:function(){Ext.Ajax.request({url:'./STKeywordServlet',scope:this,success:function(responseObject){var response=Ext.util.JSON.decode(responseObject.responseText);var tagCC='';if(response.keywords.length>0){var minSize=response.keywords[0].size;var maxSize=response.keywords[0].size;for(i=1;i<response.keywords.length;i++){if(response.keywords[i].size<minSize){minSize=response.keywords[i].size;}else if(response.keywords[i].size>maxSize){maxSize=response.keywords[i].size;}}
var diff=maxSize-minSize;var steps=6;var stepsize=Math.ceil(diff/steps);for(i=0;i<response.keywords.length;i++){tagCC+=' <span class="tctag tagsize'
+((response.keywords[i].size-(response.keywords[i].size%stepsize))/stepsize)
+'"><a href="javascript:loadStoreWithKeyword(\''
+response.keywords[i].keyword
+'\')">'
+response.keywords[i].keyword
+'</a></span>';}}else{tagCC='Leider keine Tags vorhanden.';}
Ext.fly('tagcloud').update(tagCC);}});}}},{title:'Top Ten Tracks',id:'hitlistGrid',xtype:'hitlistgrid',autoHeight:true,autoWidth:true,layout:'fit',margins:'0 0 0 0',autoScroll:true}]});var avgrateRenderer=function(value,p,r){return'<span class="avgrate_'+r.data['avg_rate_status']+'">'+value
+'</span>';};var ratingRenderer=function(value,p,r){asfloat=parseFloat(value.replace(",","."));var stars='';for(var i=0;i<Math.floor(asfloat);i++){stars+='<img src="../images/icons/rating_on.gif" border="0"  alt="'
+value+'" title="'+value+'"" />';}
for(var i=Math.floor(asfloat);i<Math.ceil(asfloat);i++){stars+='<img src="../images/icons/rating_half.gif" border="0" alt="'
+value+'" title="'+value+'" />';}
for(var i=Math.ceil(asfloat);i<5;i++){stars+='<img src="../images/icons/rating_off.gif" border="0" alt="'
+value+'" title="'+value+'" />';}
return stars;};var distanceRenderer=function(value,p,r){return value+' km';};var providerRenderer=function(id){if(id>=0&&id<5){var img=["<img src='images/provider/prov_",id,".gif' class='columnicon'></img>"];return img.join("");}else if(id>=5){var img=["<img src='images/provider/prov.gif' class='columnicon'></img>"];return img.join("");}else{return"";}};var deviceRenderer=function(id){if(id>=0){var img=["<img src='images/trackdevices/device_",id,".gif' class='columnicon'></img>"];return img.join("");}else{return"";}};var movementtypeRenderer=function(id){if(id>=0){var img=["<img src='images/movementtypes/mov_",id,".gif' class='columnicon'></img>"];return img.join("");}else{return"";}};var record=new Ext.data.Record.create([{name:'date'},{name:'name'},{name:'avg_rate'},{name:'avg_rate_status'},{name:'username'},{name:'userid'},{name:'distance'},{name:'rating'},{name:'device_type'},{name:'movementtype'},{name:'provider'},{name:'id'},{name:'long'},{name:'lat'}]);var reader=new Ext.data.JsonReader({totalProperty:"total",root:'Points',id:'id'},record);var store=new Ext.data.Store({url:"./STGridDataServlet",remoteSort:true,reader:reader});var pagingBar=new Ext.PagingToolbar({pageSize:50,store:store,displayInfo:true,displayMsg:'Zeige Tracks {0} - {1} von {2}',emptyMsg:"Keine Tracks gefunden"});var selModel=new Ext.grid.RowSelectionModel({singleSelect:true});var trackGridView=new Ext.grid.GridView({emptyText:'Keine Tracks gefunden'});var trackGrid=new Ext.grid.GridPanel({view:trackGridView,loadMask:{msg:'Lade..'},region:'center',sm:selModel,title:'Verfügbare Tracks',id:'trackgrid',layout:'fit',store:store,columns:[{header:'Track-ID',dataIndex:'id',width:75,sortable:true,id:'trackID'},{header:'Datum der Messung',width:150,sortable:true,dataIndex:'date'},{header:'Name',sortable:true,dataIndex:'name',id:'gridColumnName'},{header:'Avg. Rate',width:75,sortable:true,dataIndex:'avg_rate',renderer:avgrateRenderer},{header:'Strecke',width:65,sortable:true,dataIndex:'distance',renderer:distanceRenderer},{header:'Qualität',sortable:true,dataIndex:'rating',renderer:ratingRenderer},{header:'Track von',hidden:true,sortable:true,dataIndex:'username'},{header:'Device',hidden:true,width:50,renderer:deviceRenderer,sortable:true,dataIndex:'device_type'},{header:'via',renderer:movementtypeRenderer,width:30,sortable:true,dataIndex:'movementtype'},{header:'Provider',renderer:providerRenderer,width:55,sortable:true,dataIndex:'provider'}],enableDragDrop:false,border:false,frame:false,stripeRows:true,enableColumnHide:true,autoExpandColumn:'gridColumnName',autoExpandMax:300,bbar:pagingBar,listeners:{rowdblclick:function(gridfrom,row,e){var id=store.getAt(row).get("id");trackWindow(id.substr(4,id.length));},rowclick:function(gridfrom,row,e){if(!gridDetails.rendered){gridDetails=new Ext.Panel({renderTo:'gridDetailPanel',layout:'fit',id:'gridDetails'});}
Ext.Ajax.request({url:'./STProfileServlet',params:{action:'a1',userid:store.getAt(row).get("userid")},success:function(responseObject){var response=Ext.util.JSON.decode(responseObject.responseText);var newDetails='<div>';newDetails+='<img src="./STProfileServlet?action=a2&userid='
+response.id
+'&random='
+((useImageCache)?'':parseInt(Math.random()*1000000000000))
+'" align="left" style="margin-right:15px;"/>';newDetails+='<table border="0">';newDetails+='<tr><td class="label">User:</td><td class="text">'
+response.name+'</td></tr>';if(response.place!=''){newDetails+='<tr><td class="label">Ort/Region:</td><td class="text">'
+response.place+'</td></tr>';}
if(response.country!=''){newDetails+='<tr><td class="label">Land:</td><td class="text">'
+response.country+'</td></tr>';}
if(response.trackcount!=''){newDetails+='<tr><td class="text" colspan="2"><a href="javascript:showTracksFromUser('
+response.id
+');">Alle Tracks von '
+response.name
+' anzeigen ('
+response.trackcount+')</a></td></tr>';}
if(response.website!=''){newDetails+='<tr><td colspan="2" class="text"><a href="'
+((response.website.search(/http:/)<0)?'http://':'')
+response.website
+'" target="_blank">Webseite anzeigen</a></td></tr>';}
newDetails+='</table>';newDetails+='</div>';newDetails+='<br/><span style="color:#333">Werbebanner des Users:</span>';newDetails+='<div style="text-align:center; margin-top:0px">'
+((response.website!='')?'<a target="_blank" href="'
+((response.website.search(/http:/)<0)?'http://':'')+response.website
+'">':'')
+'<img src="./STProfileServlet?action=a3&userid='
+response.id
+'&random='
+((useImageCache)?'':parseInt(Math.random()*1000000000000))
+'"/>'
+((response.website!='')?'</a>':'')
+'</div>';Ext.getCmp('gridDetails').el.update(newDetails);var displayBtn=Ext.getCmp('displayTrackBtn');Ext.getCmp('displayTrackBtn').setText('Track '
+store.getAt(row).get("id")+' anzeigen');if(displayBtn.disabled){displayBtn.enable();}}});if(!overviewMapInitialized){initializeOverviewMap();}
overview_mapCoords=new GLatLng(store.getAt(row).get("lat"),store.getAt(row).get("long"));overview_map.setCenter(overview_mapCoords,7);var tinyIcon=new GIcon();tinyIcon.image="images/marker_"
+store.getAt(row).get("movementtype")+".png";tinyIcon.shadow="images/markerschatten.png";tinyIcon.iconSize=new GSize(50,50);tinyIcon.shadowSize=new GSize(67,50);tinyIcon.iconAnchor=new GPoint(25,50);tinyIcon.infoWindowAnchor=new GPoint(5,1);markerOptions={icon:tinyIcon};if(point!=0&&!point.isHidden()){point.hide();}
if(marker!=0){marker.setLatLng(overview_mapCoords);marker.setImage(tinyIcon.image);marker.show();}else{marker=new GMarker(overview_mapCoords,markerOptions);overview_map.addOverlay(marker);}}}});function trackWindow(id){var win=Ext.getCmp("stwin_"+id);if(TaskbarManager.isWinAllowed()){var mainpanelHeight=Ext.get('mainpanel').getHeight();var winHeight=(mainpanelHeight>=700)?700:mainpanelHeight;if(win){win.show();}else{Ext.Ajax.request({url:'./STTrackDataServlet',params:{id:id},success:function(responseObject){var trackCache=Ext.util.JSON.decode(responseObject.responseText);if(trackCache.points.length>0){activeWindows.push(trackCache.id);track[trackCache.id]=trackCache;trackCache.user.aboutme=trackCache.user.aboutme.replace(/\r\n/g,'<br/>');trackCache.user.aboutme=trackCache.user.aboutme.replace(/\n/g,'<br/>');trackCache.user.aboutme=trackCache.user.aboutme.replace(/\r/g,'<br/>');trackWindow[trackCache.id]=new BasicWindow({trackid:trackCache.id,initialized:false,layout:'fit',title:trackCache.name,id:'stwin_'+trackCache.id,width:1010,height:winHeight,renderTo:'mainpanel',constrain:true,maximizable:true,minimizable:true,border:false,items:new Ext.TabPanel({id:'stwin_tabpanel_'+trackCache.id,activeTab:0,trackid:trackCache.id,plain:true,layoutOnTabChange:true,items:[new Ext.Panel({title:'Messverlauf in Karte',id:'speedMap_'+trackCache.id,layout:'border',border:false,plain:true,items:[{region:'center',html:'<div style="width:100%; height:100%;" id="sptMap-'
+trackCache.id+'"></div>',layout:'fit'},{region:'south',id:'sptGraph-'+trackCache.id,height:220,html:'<table class="graphTable" style="height: 100%; width: 100%;"><tbody><tr><td class="graphPoints"><h2>Messpunkt</h2><div><a href="#" onClick="switchPoint(markedPoint-1, '
+trackCache.id
+'); return false;" class="arrow_left"></a><div class="counter" style="float:left;"> (<span id="point_nr_'
+trackCache.id
+'" > - </span> / <span id="point_pointcount_'
+trackCache.id
+'"> - </span>) </div><a href="#" onClick="switchPoint(markedPoint+1,'
+trackCache.id
+'); return false;" class="arrow_right"></a></div><br/><br/><img ext:qtitle="Downloadrate" ext:qtip="Mit Downloadrate werden die Netto-Daten (d.h. ohne Routing und Latenzzeit) aus Sicht eines Mobilfunknutzers gemessen." class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_dlrate"/><span class="pointLabel">Downloadrate:</span><br/><span id="point_rate_'
+trackCache.id
+'">0</span> kb/s<br/>'
+'<img ext:qtitle="Latenzzeit" ext:qtip="Mit der Latenzzeit messen wir die Zeit, die vergeht bis eine Verbindung aufgebaut wird und die Leitung bereit ist zur Datenübertragung (Genaugenommen ist diese Messung eine Round-Trip-Zeit, also die Zeit bis wieder das erste Bit beim Client ankommt)" class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_latency"/><span class="pointLabel">Latenzzeit:</span><br/><span id="point_latency_'
+trackCache.id
+'">0</span>ms<br/><img ext:qtitle="Mögliche Anwendungen" ext:qtip="Welche Anwendungen sind bei aktueller Kombination aus Downloadgeschwindigkeit und Latenzzeit betreibbar?" class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_usecases"/><span class="pointLabel">M&ouml;gliche Anwendungen:</span>'
+'<div id="stwin_'
+trackCache.id
+'_appcontainer" class="appcontainer">'
+'<div id="stwin_'
+trackCache.id
+'_box_0" class="app_icons" style="background-image: url(../images/icons/usecases/use_0.gif);">Keine Anwendungen betreibbar</div>'
+'<div id="stwin_'
+trackCache.id
+'_box_1" class="app_icons" style="background-image: url(../images/icons/usecases/use_1.gif); display:none">Textbasierte Anwendungen</div>'
+'<div id="stwin_'
+trackCache.id
+'_box_2" class="app_icons" style="background-image: url(../images/icons/usecases/use_2.gif); display:none">Einfache Websiten</div>'
+'<div id="stwin_'
+trackCache.id
+'_box_3" class="app_icons" style="background-image: url(../images/icons/usecases/use_3.gif); display:none">Webanwendungen</div>'
+'<div id="stwin_'
+trackCache.id
+'_box_4" class="app_icons" style="background-image: url(../images/icons/usecases/use_4.gif); display:none">Multimediale Anwendungen</div>'
+'<div id="stwin_'
+trackCache.id
+'_box_5" class="app_icons" style="background-image: url(../images/icons/usecases/use_5.gif); display:none">Live Video Streaming</div>'
+'</div>'
+'</td>'
+'<td><div id="stwin_'
+trackCache.id
+'_container"  style="margin: 5px 5px 0px 0px; float:right; border:1px solid #ccc;width:737px;height:200px;cursor:pointer;">'
+'<div id="stwin_'
+trackCache.id
+'_inside" style="background-image:url(../images/caliper.gif); background-repeat:no-repeat; background-position:right top; height: 156px; margin-top:4px; margin-right:8px; width:0px; margin-left:53px;"></div>'
+'</div></td></tr></tbody></table>'}]}),new Ext.Panel({id:'trackDetails_'+trackCache.id,layout:'border',title:'Details zur Messung',items:[{region:'center',autoScroll:true,html:'<div class="trackDetails" id="stwin_'
+trackCache.id
+'_trackDetails">'
+'<table class="trackDetailsTable">'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Track ID" ext:qtip="Jeder Track hat eine eindeutige ID und kann über das Format SPT-XXX auch direkt in den Kommentaren verlinkt werden." class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_trackid"/>'
+'<h2>Track ID</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+'<span class="reportTrack" id="stwin_'
+trackCache.id
+'_reportLink"></span>'
+'<a href="/?track='
+trackCache.id
+'" target="_blank">SPT-'
+trackCache.id
+'</a>'
+'<span class="trackExport">  (<a href="./STExportTrackServlet?format=gpx&trackid='
+trackCache.id
+'">GPX</a> | <a href="./STExportTrackServlet?format=sptx&trackid='
+trackCache.id
+'">SPTX</a> | <a href="./STExportTrackServlet?format=csv&trackid='
+trackCache.id
+'">CSV</a>)</span>'
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="vom" ext:qtip="Das Startdatum und der Zeitpunkt, an dem die Messung begonnen wurde." class="infoButton" src="images/icons/info.gif"/>'
+'<h2>Track vom</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+trackCache.date
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="vom" ext:qtip="Das Datum des Track-Uploads" class="infoButton" src="images/icons/info.gif"/>'
+'<h2>Upload-Datum</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+trackCache.uploadDate
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Name" ext:qtip="Bezeichnung des Tracks" class="infoButton" src="images/icons/info.gif"/>'
+'<h2>Name</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue" id="stwin_'
+trackCache.id
+'_nameValue">'
+trackCache.name
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Name" ext:qtip="Dateiname des Tracks" class="infoButton" src="images/icons/info.gif"/>'
+'<h2>Dateiname</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue" id="stwin_'
+trackCache.id
+'_nameValue">'
+trackCache.logfilename
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Strecke" ext:qtip="Die Strecke, welche währender Messung zurückgelegt wurde." class="infoButton" src="images/icons/info.gif"/>'
+'<h2>Strecke</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+trackCache.distance
+' km'
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Aufgezeichnet via" ext:qtip="Gemessen wird mit einem Laptop (externe GPS-Maus) und/oder einem modernen Handy (internes GPS-Device)." class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_device"/>'
+'<h2>Aufgezeichnet via</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+'<div id="stwin_'
+trackCache.id
+'_devicetypeValue">'
+trackCache.hardware
+'</div>'
+'<div id="stwin_'
+trackCache.id
+'_devicetypeIcons">'
+getDetailIcons("device",trackCache.id)
+'</div>'
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Fortbewegung" ext:qtip="Wie verhalten sich Anwendungen in bewegenden Fahrzeuge? Gemessen wird realitätsnah zu Fuß, mit Fahrrad, Schiff, Auto, Flugzeug und Zug." class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_movement"/>'
+'<h2>Fortbewegung per</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+'<div id="stwin_'
+trackCache.id
+'_movementValue">'
+trackCache.movementname
+'</div>'
+'<div id="stwin_'
+trackCache.id
+'_movementIcons">'
+getDetailIcons("movement",trackCache.id)
+'</div>'
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Mobilfunknetz" ext:qtip="Mobilfunknetze, in denen bisher gemessen wurde." class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_provider"/>'
+'<h2>Mobilfunknetz</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue" id="stwin_'
+trackCache.id
+'_provider">'
+'<div id="stwin_'
+trackCache.id
+'_providerValue">'
+trackCache.providername
+'</div>'
+'<div id="stwin_'
+trackCache.id
+'_providerIcons">'
+getDetailIcons("provider",trackCache.id)
+'</div>'
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Messdatei" ext:qtip="Alternative Dateien welche für die Messung benutzt werden. <br/><br/> 50KB Binärdownload von doubleSlash<br/>Verwendung: Wenn bei der Messung eher eine niedrige Transferrate erwaretet wird.<br/>Protokoll: HTTP<br/>Größe: 50 KByte<br/>Dateityp: Binär<br/>Ort: Friedrichshafen<br/>Server: Apache 2.0.63<br/>GEO-Position: 47.66218 ; 9.49844<br/>Anbindung: Glasfaser 16MBit<br/><br/>100KB Binärdownload von doubleSlash<br/>Verwendung: Wenn bei der Messung eher eine höhere Transferrate erwaretet wird.<br/>Protokoll: HTTP<br/>Größe: 100 KByte<br/>Dateityp: Binär<br/>Ort: Friedrichshafen<br/>Server: Apache 2.0.63<br/>GEO-Position: 47.66218 ; 9.49844<br/>Anbindung: Glasfaser 16MBit<br/><br/>50KB ASCII-Download von doubleSlash<br/>Verwendung: Wenn bei der Messung eher eine niedrige Transferrate erwaretet wird.<br/>Protokoll: HTTP<br/>Größe: 50 KByte<br/>Dateityp: ASCII<br/>Ort: Friedrichshafen<br/>Server: Apache 2.0.63<br/>GEO-Position: 47.66218 ; 9.49844<br/>Anbindung: Glasfaser 16MBit" class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_server"/>'
+'<h2>Server / Messdatei</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+trackCache.server
+' / '
+trackCache.filename
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Beschreibung" ext:qtip="Besonderheiten, Anmerkungen und Interpretation der Messung." class="infoButton" src="images/icons/info.gif"/>'
+'<h2>Beschreibung</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue" id="stwin_'
+trackCache.id
+'_descriptionValue">'
+trackCache.descr.replace(/\r\n/g,'<br/>').replace(/\n/g,'<br/>').replace(/\r/g,'<br/>')
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Qualitätsbewertung" ext:qtip="Wie repräsentativ ist der Track? Sie entscheiden! 1 Stern für schlecht und 5 für sehr gut" class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_rating"/>'
+'<h2>Qualitätsbewertung</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue">'
+'<div><span id="stwin_'
+trackCache.id
+'_ratingValue">'
+trackCache.rating
+'</span> (Bewertungen: <span id="stwin_'
+trackCache.id
+'_ratingCount">'
+trackCache.ratingcount
+'</span>)</div>'
+'<span id="stwin_'
+trackCache.id
+'_ratingInfo" class="ratingInfo"></span>'
+'<div id="stwin_'
+trackCache.id
+'_ratingStarsDiv" class="ratingStarsDiv">'
+'<a href="javascript:onclick=rateTrack('
+trackCache.id
+',1);" onmouseout="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 0);" onmouseover="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 1)" class="ratingStar rating_off" id="stwin_'
+trackCache.id
+'_ratingStar_1">&nbsp;</a>'
+'<a href="javascript:onclick=rateTrack('
+trackCache.id
+',2);" onmouseout="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 0);" onmouseover="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 2)" class="ratingStar rating_off" id="stwin_'
+trackCache.id
+'_ratingStar_2">&nbsp;</a>'
+'<a href="javascript:onclick=rateTrack('
+trackCache.id
+',3);" onmouseout="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 0);" onmouseover="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 3)" class="ratingStar rating_off" id="stwin_'
+trackCache.id
+'_ratingStar_3">&nbsp;</a>'
+'<a href="javascript:onclick=rateTrack('
+trackCache.id
+',4);" onmouseout="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 0);" onmouseover="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 4)" class="ratingStar rating_off" id="stwin_'
+trackCache.id
+'_ratingStar_4">&nbsp;</a>'
+'<a href="javascript:onclick=rateTrack('
+trackCache.id
+',5);" onmouseout="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 0);" onmouseover="getRatingStars('
+trackCache.id
+', '
+parseFloat(trackCache.rating.replace(/,/g,"."))
+', 5)" class="ratingStar rating_off" id="stwin_'
+trackCache.id
+'_ratingStar_5">&nbsp;</a>'
+'</div>'
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel">'
+'<img ext:qtitle="Tags" ext:qtip="Durch die Vergabe von Tags können Tracks leichter wiedergefunden werden. Sie werden kommasepariert angegeben." class="infoButton" src="images/icons/info.gif" id="stwin_'
+trackCache.id
+'_info_rating"/>'
+'<h2>Tags</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue" id="stwin_'
+trackCache.id
+'_keywordsValue">'
+trackCache.keywords
+'</td>'
+'</tr>'
+'<tr>'
+'<td class="trackDetailsTD trackDetailsLabel" style="visibility: hidden;" id="stwin_'
+trackCache.id
+'_statusLabel">'
+'<h2>Status</h2>:'
+'</td>'
+'<td class="trackDetailsTD trackDetailsValue" style="visibility: hidden;" id="stwin_'
+trackCache.id
+'_statusValue">'
+trackCache.trackstatus
+'</td>'
+'</tr>'
+'</table>'
+'<div id="editTrackLink_'
+trackCache.id
+'" class="editTrackLink"></div>'
+'<div class="clearDiv"/>'
+'</div>'},{region:'east',id:'stwin_'+trackCache.id
+'_commentFrame',split:true,width:500,layout:'border',items:[{autoScroll:true,html:'<div id=stwin_'
+trackCache.id
+'commentFrameDisplay>'
+getComments(trackCache.comments)
+'</div>',region:'center'},{region:'south',id:'stwin_'+trackCache.id
+'_commentFormFrame',height:125,html:'<div class="commentsNoLogin">Sie m&uuml;ssen angemeldet sein, um diesen Track kommentieren zu k&ouml;nnen.</div>'}]}]}),new Ext.Panel({id:'stwin_'+trackCache.id+'_userDetails',title:'Details zum User',html:'<div style="margin-left:20px; margin-bottom:0px; margin-top: 20px; height: 72px"><img src="./STProfileServlet?action=a2&userid='
+trackCache.user.id
+'"/></div>'
+'<div class="trackDetails"> '
+'<table class="userDetails" style="width:30%;">'
+'   <tr>'
+'      <td class="trackDetailsTD trackDetailsLabel">'
+'         <h2>User:</h2>'
+'      </td>'
+'      <td class="trackDetailsTD trackDetailsValue">'
+trackCache.user.name
+'      </td>'
+'  </tr>'
+'   <tr>'
+'      <td class="trackDetailsTD trackDetailsLabel">'
+'         <h2>Bisher getrackt:</h2>'
+'      </td>'
+'      <td class="trackDetailsTD trackDetailsValue">'
+trackCache.user.trackcount
+'      </td>'
+'  </tr>'
+'   <tr>'
+'      <td class="trackDetailsTD trackDetailsLabel">'
+'         <h2>Land:</h2>'
+'      </td>'
+'      <td class="trackDetailsTD trackDetailsValue">'
+trackCache.user.country
+'      </td>'
+'  </tr>'
+'   <tr>'
+'      <td class="trackDetailsTD trackDetailsLabel">'
+'         <h2>Ort:</h2>'
+'      </td>'
+'      <td class="trackDetailsTD trackDetailsValue">'
+trackCache.user.place
+'      </td>'
+'  </tr>'
+'   <tr>'
+'      <td class="trackDetailsTD trackDetailsLabel">'
+'         <h2>Webseite:</h2>'
+'      </td>'
+'      <td class="trackDetailsTD trackDetailsValue">'
+'<a href="'
+((trackCache.user.website.search(/http:/)<0)?'http://':'')
+trackCache.user.website
+'" target="_blank">'+trackCache.user.website+'</a>'
+'      </td>'
+'  </tr>'
+'   <tr>'
+'      <td class="trackDetailsTD trackDetailsLabel">'
+'         <h2>&Uuml;ber mich:</h2>'
+'      </td>'
+'      <td class="trackDetailsTD trackDetailsValue">'
+trackCache.user.aboutme
+'      </td>'
+'  </tr>'
+'  <tr>'
+'      <td class="trackDetailsTD trackDetailsLabel">'
+'         <h2>Werbebanner des Users:</h2>'
+'      </td>'
+'  </tr>'
+'</table>'
+((trackCache.user.website!='')?'<a target="_blank" href="'
+((trackCache.user.website.search(/http:/)<0)?'http://':'')+trackCache.user.website
+'">':'')
+'<img src="./STProfileServlet?action=a3&userid='
+trackCache.user.id
+'" style="margin-left: 10px;"/>'
+((trackCache.user.website!='')?'</a>':'')
+'<div>'})]})});trackWindow[trackCache.id].on('show',function(){if(!this.initialized){vv[this.trackid]=0;caliperUsed[this.trackid]=false;driveInProgress[this.trackid]=false;map[this.trackid]=new GMap2(document.getElementById('sptMap-'+this.trackid));map[this.trackid].setCenter(new GLatLng(51.114728,9.998672),5);trackWindow[this.trackid].doLayout();map[this.trackid].addControl(new GLargeMapControl());map[this.trackid].addControl(new GMapTypeControl());map[this.trackid].enableScrollWheelZoom();Ext.get('stwin_'+this.trackid+'_container').dom.style.backgroundImage='url(./STChartBuilderServlet?trackid='
+this.trackid+')';markedPoint[this.trackid]=null;tmpLine[this.trackid]=null;clicked[this.trackid]=false;bounds[this.trackid]=new GLatLngBounds();pointCount[this.trackid]=track[this.trackid].points.length
-1;Ext.get('point_pointcount_'+this.trackid).dom.innerHTML=pointCount[this.trackid];var trackPoints=[];for(var i=0;i<=pointCount[this.trackid];i++){var curPoint=new GLatLng(parseFloat(track[this.trackid].points[i].la),parseFloat(track[this.trackid].points[i].lo));trackPoints.push(curPoint);bounds[this.trackid].extend(curPoint);}
var polyline=new GPolyline(trackPoints,"#EC6600",4,1);map[this.trackid].setCenter(bounds[this.trackid].getCenter(),map[this.trackid].getBoundsZoomLevel(bounds[this.trackid]));map[this.trackid].addOverlay(polyline);Ext.get('stwin_'+this.trackid+'_container').on('click',function(){toggleGraphMove(this.id);});Ext.get('stwin_'+this.trackid+'_container').on('mousemove',function(event){funcCache(event.browserEvent,this.id);});drawPoint(0,this.trackid);initDrive(this.trackid);this.initialized=true;Ext.getCmp('stwin_tabpanel_'+this.trackid).on('tabchange',function(){if(!Ext.getCmp(this.id).activeTab.id.startsWith('trackDetails')){Ext.getCmp(this.id).activeTab.doLayout();map[this.trackid].checkResize();}else{getRatingStars(this.trackid,track[this.trackid].rating);updateTracks();}});}
if(!Ext.getCmp('stwin_tabpanel_'+this.trackid).activeTab.id.startsWith('trackDetails')){Ext.getCmp('stwin_tabpanel_'+this.trackid).activeTab.doLayout();map[this.trackid].checkResize();}});trackWindow[trackCache.id].on('resize',function(){map[trackCache.id].checkResize();});trackWindow[trackCache.id].on('close',function(){activeWindows.remove(this.trackid);this.initialized=false;drive(this.trackid,0,100,true);editMode[this.trackid]=false;});trackWindow[trackCache.id].show();}else{Ext.Msg.show({title:'Fehler beim Öffnen des Tracks',msg:'Der von Ihnen gewählte Track existiert nicht.',buttons:Ext.Msg.OK,icon:Ext.MessageBox.ERROR});}}});}}else{Ext.Msg.show({title:'Info',msg:'Es können max. 3 Tracks gleichzeitig geoeffnet werden',buttons:Ext.Msg.OK,icon:Ext.MessageBox.INFO});}}
var iFrameComponent=Ext.extend(Ext.BoxComponent,{onRender:function(ct,position){this.el=ct.createChild({tag:'iframe',id:'framepanel'+this.id,frameBorder:0,src:this.url});}});Ext.reg('iframecmp',iFrameComponent);var registrationForm=new Ext.FormPanel({labelWidth:90,url:'STRegistrationServlet',frame:true,defaultType:'textfield',defaults:{width:200},monitorValid:true,items:[{xtype:'label',style:'padding: 2px; margin: 0px 0px 5px 10px; display: block;',width:300,html:'Das Registrieren ermöglicht Ihnen, selbst Tracks hochzuladen, zu bearbeiten und Kommentare zu schreiben.'},{fieldLabel:'Login*',name:'login',allowBlank:false},{fieldLabel:'Passwort*',name:'pass1',inputType:'password',allowBlank:false},{fieldLabel:'Passwort* (Wiederholung)',name:'pass2',inputType:'password',allowBlank:false},{fieldLabel:'E-Mail*',name:'email',vtype:'email',allowBlank:false,vtypeText:'Bitte geben Sie eine E-Mailadresse im Format "user@domain.de" an'},{fieldLabel:'Wichtige Hinweise',hidden:true,labelStyle:'width:200;',width:50},{xtype:'iframecmp',id:'wichtigehinweise',url:'testdata/wichtigehinweise.html',width:295,height:90},{xtype:'checkbox',hideLabel:true,boxLabel:'Ich habe die Hinweise zur Kenntnis genommen',width:295,handler:function(){if(this.getValue()){registrationForm.getForm().findField('accepted').setValue(true);}else{registrationForm.getForm().findField('accepted').reset();}}},{fieldLabel:'action',name:'action',value:'write',hidden:true,hideLabel:true,hideMode:'display'},{fieldLabel:'accepted',name:'accepted',id:'accepted',hidden:true,hideLabel:true,hideMode:'display',allowBlank:false}],buttons:[{text:'Registrieren',formBind:true,handler:function(){registrationForm.getForm().submit({method:'POST',waitTitle:'Registrierungs-Vorgang',waitMsg:'Sendet Daten...',success:function(form,action){var response=Ext.decode(action.response.responseText);Ext.Msg.show({title:'Registrierung erfolgreich',msg:response.message,buttons:Ext.Msg.OK,icon:'iconClass_ok'});registrationForm.getForm().reset();registrationWindow.hide();}});}},{text:'Abbrechen',handler:function(){registrationForm.getForm().reset();registrationWindow.hide();}}]});var registrationWindow=new Ext.Window({layout:'fit',modal:true,width:340,height:380,closable:true,closeAction:'hide',resizable:false,plain:true,border:false,title:'Registrierung um mitzumachen',items:[registrationForm]});var loginForm=new Ext.FormPanel({labelWidth:80,url:'STLoginServlet',frame:true,defaultType:'textfield',monitorValid:true,items:[{xtype:'panel',id:'loginfailuretxt',html:'<p style="padding:0 0 2 85">Login-Daten nicht korrekt.</p>',cls:'loginfailure',hidden:true,hideMode:'visibility'},{fieldLabel:'Login/E-Mail',id:'loginFieldName',name:'login',allowBlank:false,width:160},{fieldLabel:'Passwort',id:'loginFieldPassword',name:'passwd',inputType:'password',allowBlank:false,width:160},{xtype:'panel',id:'forgotpasswd',html:'<p style="padding-left:85px"><a href="javascript:forgotPassword()">Passwort vergessen</a></p>'}],buttons:[{text:'Login',formBind:true,id:'loginBtn',listeners:{click:function(){loginForm.getForm().submit({method:'POST',waitTitle:'Login-Vorgang',waitMsg:'Sendet Login-Daten...',success:function(form,action){Ext.getCmp('loginfailuretxt').hide();loginWindow.hide();loginForm.getForm().reset();user.doLogin(action.result.login,action.result.userid,action.result.isAdmin);},failure:function(){Ext.getCmp('loginfailuretxt').show();loginForm.getForm().reset();}});}}},{text:'Abbrechen',handler:function(){Ext.getCmp('loginfailuretxt').hide();loginForm.getForm().reset();loginWindow.hide();}}]});var loginWindow=new Ext.Window({layout:'fit',modal:true,id:'loginWindow',title:'Login',width:290,height:180,closable:true,closeAction:'hide',resizable:false,plain:true,border:false,items:[loginForm],listeners:{show:function(){window.setTimeout("Ext.get('loginFieldName').dom.focus();",500);}}});var editProfileForm=new Ext.FormPanel({url:'STEditServlet',frame:true,layout:'column',anchor:'100% 100%',defaults:{bodyStyle:'padding:10px 5px 5px 10px'},labelWidth:90,fileUpload:true,monitorValid:true,buttonAlign:'right',userid:user.getUserId(),items:[{layout:'form',defaultType:'textfield',width:335,defaults:{width:200},items:[{fieldLabel:'Login',name:'login',disabled:true},{fieldLabel:'Passwort*',name:'pass1',inputType:'password',value:'notchanged',allowBlank:false},{fieldLabel:'Passwort* (Wiederholung)',name:'pass2',inputType:'password',value:'notchanged',allowBlank:false,listeners:{change:function(){editProfileForm.getForm().findField('changed').setValue(true);}}},{fieldLabel:'E-Mail*',name:'email',vtype:'email',allowBlank:false,vtypeText:'Bitte geben Sie eine E-Mailadresse im Format "user@domain.de" an'},{fieldLabel:'Webseite',name:'website',maxLength:200,maxLengthText:'Der Text darf höchstens 200 Zeichen lang sein'},{fieldLabel:'Ort/Region',name:'place'},{fieldLabel:'Land',name:'country'},{fieldLabel:'Über mich',name:'aboutme',xtype:'textarea',height:85,maxLength:maxTextAreaLength,maxLengthText:maxTextAreaLengthError},{fieldLabel:'encryptPasswd',name:'encryptPasswd',hidden:true,hideLabel:true,hideMode:'display'},{fieldLabel:'changed',name:'changed',hidden:true,hideLabel:true,hideMode:'display',value:false},{html:'* Pflichtfeld',xtype:'label'}]},{layout:'form',defaultType:'textfield',labelWidth:80,columnWidth:1,defaults:{width:285},items:[{fieldLabel:'Mein Avatar¹',name:'avatar',xtype:'fileuploadfield',id:'avatar',emptyText:'Neues Bild wählen',buttonCfg:{text:'',iconCls:'upload-icon'}},{xtype:'label',html:'',name:'avatarimg',id:'avatarimg',width:235,cls:'profileEditWindowImage'},{fieldLabel:'Mein Banner¹',name:'banner',xtype:'fileuploadfield',id:'banner',emptyText:'Neues Bild wählen',buttonCfg:{text:'',iconCls:'upload-icon'}},{xtype:'label',id:'bannerimg',width:235,html:'',cls:'profileEditWindowImage'},{xtype:'label',width:230,html:'<div style="font-size:7pt; clear:left; padding-top:25px;">¹ Bilder in den Formaten .gif oder .jpg und max. 2 MB.<br/>Avatare werden auf die Gr&ouml;&szlig;e 73x74px, Banner auf 300x100px angepasst.<br/>Das Banner wird bei angegebener Webseite mit dieser verlinkt.</div>'},{fieldLabel:'edittype',name:'edittype',value:'e3',hidden:true,hideLabel:true,hideMode:'display'},{fieldLabel:'userid',name:'userid',id:'userid',value:'',hidden:true,hideLabel:true,hideMode:'display'}]}],buttons:[{text:'Übernehmen',formBind:true,handler:function(){editProfileForm.getForm().submit({method:'POST',waitTitle:'Speicher-Vorgang',waitMsg:'Sendet Daten...',success:function(form,action){var response=Ext.util.JSON.decode(action.response.responseText);Ext.Msg.show({title:'Profil erfolgreich geändert',msg:'Ihre neuen Daten wurden übernommen.',buttons:Ext.Msg.OK,icon:'iconClass_ok'});editProfileWindow.hide();editProfileForm.getForm().reset();},failure:function(form,action){var response=Ext.util.JSON.decode(action.response.responseText);if(response.message){Ext.Msg.show({title:'Es ist ein Fehler aufgetreten',msg:response.message,buttons:Ext.Msg.OK,icon:Ext.MessageBox.WARNING});}}});}},{text:'Abbrechen',handler:function(){editProfileForm.getForm().reset();editProfileWindow.hide();}}]});var editProfileWindow=new Ext.Window({modal:true,width:791,height:350,autoHeight:true,autoScroll:true,resizable:false,closable:true,closeAction:'hide',plain:true,border:false,title:'Profil bearbeiten',items:[editProfileForm],listeners:{'show':function(){Ext.get('avatarimg').dom.innerHTML='<img id="avatarImage" src="./STProfileServlet?action=a2&userid='
+user.getUserId()
+'&random='
+parseInt(Math.random()*1000000000000)
+'"/><a href="javascript:deleteAvatar();"><img style="width:16px; height:16px; margin:0px 0px 4px 6px" src="../images/icons/delete.gif"/></a>';Ext.get('bannerimg').dom.innerHTML='<img  id="bannerImage" src="./STProfileServlet?action=a3&userid='
+user.getUserId()
+'&random='
+parseInt(Math.random()*1000000000000)
+'"/><a href="javascript:deleteBanner();"><img style="width:16px; height:16px; margin:0px 0px 4px 6px" src="../images/icons/delete.gif"/></a>';}}});var showEditProfileWindow=function(){editProfileWindow.show();editProfileForm.load({url:'./STProfileServlet',params:{action:'a4',userid:user.getUserId()},method:'POST',waitMsg:'Lade..'});editProfileForm.getForm().findField('userid').setValue(user.getUserId());};var impressWindow=new Ext.Window({buttons:[{text:'Schließen',handler:function(){impressWindow.hide();}}],layout:'fit',title:'Impressum',width:300,height:300,closable:true,resizable:false,closeAction:'hide',plain:true,modal:true,border:false,items:[{contentEl:'impressum'}]});var infoWindow=new Ext.Window({buttons:[{text:'Schließen',handler:function(){infoWindow.hide();}}],layout:'fit',title:'Information',width:320,height:355,closable:true,resizable:false,closeAction:'hide',plain:true,border:false,modal:true,items:[{contentEl:'speedtrackInfo'}]});if(!window.console){console={log:function(){},debug:function(){},error:function(){}};}
console.log();Ext.onReady(function(){user.requestUserstatus();storePageSize=50;point=0;marker=0;gridDetails="";Ext.QuickTips.init();Ext.form.Field.prototype.msgTarget='side';var stViewport=new Ext.Viewport({id:'stvp',layout:'border',border:false,items:[{region:'north',height:50,margins:'0 0 0 0',frame:false,border:false,contentEl:'header_toprow'},{region:'center',id:'mainpanel',layout:'border',border:false,items:[searchPanel,{autoScroll:true,region:'east',title:'Kartenübersicht',margins:'0 0 0 0',width:300,minSize:100,maxSize:350,split:true,frame:false,border:true,collapsible:true,items:[{html:'<div id="trackListGMap" style="height:298px"><img src="http://maps.google.com/staticmap?center=51.114728,9.998672&zoom=5&size=298x298&key=ABQIAAAAr83k5X_2CmpzIzk7VLF5uhRSzICV6_YrqtNtCE8FulOcERkNLhSFs7OmMDMMLBka1Mt4SgTkC0GuLQ&random='+parseInt(Math.random()*1000000000000)+'"/></div>'},{id:'trackDetailPanel',buttonAlign:'center',buttons:[{id:'displayTrackBtn',disabled:true,text:'Track anzeigen',handler:function(){var grid=Ext.getCmp('trackgrid');var selectedTrack=grid.selModel.getSelected().json.id;trackWindow(selectedTrack.substr(4,id.length));}}]},{id:'gridDetailPanel',border:false}]},trackGrid]},{xtype:'taskBar'}]});trackGridView.on('beforerefresh',function(){if(reader.jsonData!=null){if(reader.jsonData.total==-1){if(reader.jsonData.message&&reader.jsonData.message!=""){trackGridView.emptyText=reader.jsonData.message;}else{trackGridView.emptyText="Keine Tracks gefunden.";}}else{trackGridView.emptyText="Keine Tracks gefunden.";}}});store.load({params:{start:0,limit:storePageSize}});store.on('load',function(storeFrom,records,options){if(store.getAt(0)){selModel.selectFirstRow();trackGrid.fireEvent("rowclick",this,0,null);}else{if(Ext.getCmp('gridDetails')){Ext.getCmp('gridDetails').el.update('');}
if(marker){marker.hide();}
var displayBtn=Ext.getCmp('displayTrackBtn');if(!displayBtn.disabled){displayBtn.disable();}
displayBtn.setText('Track anzeigen');}
if(user.isLoggedIn()){for(var i=0;i<store.data.length;i++){if(store.getAt(i).json.unpublished==1){trackGridView.getRow(i).style.background='#C6C6C6';}}}
if(options.params.userid&&options.params.hitlisttype==null){if(store.data.length>0){if(store.getAt(0)&&store.getAt(0).json.username==user.getLogin()){trackGrid.setTitle('Meine Tracks');}else{trackGrid.setTitle('Tracks des Users '
+store.getAt(0).json.username);}}else{trackGrid.setTitle('Tracks');}}else{trackGrid.setTitle('Tracks');}
trackGrid.setTitle(trackGrid.title
+' (Doppelklick für Detail-Ansicht)');});if(gup("track")!=""){trackWindow(gup("track"));}else if(gup("trackid")!=""){trackWindow(gup("trackid"));}
if(gup("show")=="impressum"){showImpressWindow();}
if(gup("activation")=="success"){Ext.Msg.show({title:'Accountaktivierung',msg:'Ihr Account wurde erfolgreich aktiviert. Sie k&ouml;nnen sich jetzt anmelden.',icon:'iconClass_ok',buttons:{cancel:'OK',ok:'Anmelden'},fn:function(btn){if(btn=='ok'){if(!user.isLoggedIn()){loginWindow.show();}}}});}
searchBtn=Ext.getCmp('searchFormSubmitButton');loginBtn=Ext.getCmp('loginBtn');function hitSearchButton(){if(!searchBtn.disabled){searchBtn.fireEvent("click",searchBtn);}}
Ext.getCmp('filter-keywords').on('specialkey',function(f,event){if(event.getKey()==event.ENTER){hitSearchButton();}},this);Ext.getCmp('filter-plz').on('specialkey',function(f,event){if(event.getKey()==event.ENTER){hitSearchButton();}},this);Ext.getCmp('filter-location').on('specialkey',function(f,event){if(event.getKey()==event.ENTER){hitSearchButton();}},this);Ext.getCmp('filter-from').on('specialkey',function(f,event){if(event.getKey()==event.ENTER){hitSearchButton();}},this);Ext.getCmp('filter-to').on('specialkey',function(f,event){if(event.getKey()==event.ENTER){hitSearchButton();}},this);Ext.getCmp('radiusCombo').on('specialkey',function(f,event){if(event.getKey()==event.ENTER){hitSearchButton();}},this);Ext.getCmp('loginFieldName').on('specialkey',function(f,event){if(event.getKey()==event.ENTER&&!loginBtn.disabled){loginBtn.fireEvent("click",loginBtn);}},this);Ext.getCmp('loginFieldPassword').on('specialkey',function(f,event){if(event.getKey()==event.ENTER&&!loginBtn.disabled){loginBtn.fireEvent("click",loginBtn);}},this);Ext.get('filter-keywords').dom.focus();});