var alarmSound=null;soundManager.onready(function(){alarmSound=soundManager.createSound({id:'aSound',url:'alarm.mp3',volume:100,onfinish:function(){alarmSound.play('aSound')}})});Ext.onReady(function(){Ext.getBody().on({'contextmenu':function(){},scope:this,preventDefault:true});Ext.BLANK_IMAGE_URL="http://extjs.cachefly.net/ext-3.2.1/resources/images/default/s.gif";if(Ext.isSecure){Ext.SSL_SECURE_URL=Ext.BLANK_IMAGE_URL}Ext.QuickTips.init();Ext.form.Field.prototype.msgTarget='side';var isLoaded=null;var map=null;var map2=null;var map2marker=null;var zoom=15;var ieversion=0;var toolID=1;var polyShape;var polyShape2;var polygonMode=false;var circlemode=null;var mylistener;var editlistener=null;var editing=false;var notext=false;var polyPoints=[];var marker2=null;var mousemovepoint;var refreshUI=0;var fillColorcur="#FF0000";var lineColorcur="#FF0000";var polygonlineColorcur="#FF0000";var lineopacitycur=0.4;var fillopacitycur=0.4;var opacityhexcur="66";var lineWeightcur=3;var polygonLineWeightcur=0.1;var centerMarker=null;var radiusMarker=null;var finishediting=false;var marker1=[];var geoFencePolygon=[];var geoFenceAttributes=[];var InGeo=[];var popUpWin=null;var deviceName=null;var param_iconType="green";var param_iconOverType="orange";var param_iconTypeStop="blue";var param_iconTypeSpeeding="pink";var param_iconTypeSOS="red";var cm_baseIcon=new GIcon();cm_baseIcon.shadow="markers/shadow50.png";cm_baseIcon.iconSize=new GSize(20,34);cm_baseIcon.shadowSize=new GSize(37,34);cm_baseIcon.iconAnchor=new GPoint(9,34);cm_baseIcon.infoWindowAnchor=new GPoint(9,2);cm_baseIcon.infoShadowAnchor=new GPoint(18,25);var arrowIcon=new GIcon();arrowIcon.iconSize=new GSize(24,24);arrowIcon.shadowSize=new GSize(1,1);arrowIcon.iconAnchor=new GPoint(12,12);arrowIcon.infoWindowAnchor=new GPoint(0,0);var spotted=null;var geo=null;var geopoints=null;var sos=null;var layername='-';var treeText=null;var pageSize=50;var runningTask=null;var togglePoly=0;var toggleBallon=0;var removePopupMarker=false;var prevGridRow=0;var login_url='data/login.ashx';var store_url='data/customdetails.ashx';var tree_url='data/tree.ashx';var uploadPicture_url='data/pictureUpload.ashx';var deletePicture_url='data/pictureDelete.ashx';var download_track_report_url='data/downloadtrackreport.ashx';var download_group_track_report_url='data/downloadgrouptrackreport.ashx';var download_vehcle_Log_report_url='data/downloadvehclelogreport.ashx';var download_sos_report_url='data/downloadsosreport.ashx';var download_speed_report_url='data/downloadspeedreport.ashx';var updateSOSVoltage_url='data/updateSOSVoltage.ashx';var runner=new Ext.util.TaskRunner();var Cookies=Ext.util.Cookies;var KeyMap=new Ext.KeyMap(Ext.getDoc(),[{key:113,stopEvent:true,fn:function(key,e){if(e.shiftKey){if(togglePoly==1){togglePoly=0;toggleBallon=0}else{togglePoly=1}}else if(e.ctrlKey){if(toggleBallon==1){toggleBallon=0}else{toggleBallon=1;togglePoly=1}}Grid.getStore().reload()}},{key:Ext.EventObject.F2,stopEvent:true,fn:function(key,e){removePopupMarker=true;refreshUI=4}},{key:Ext.EventObject.F4,stopEvent:true,fn:function(key,e){winLogin.show()}},{key:Ext.EventObject.F5,stopEvent:true,fn:function(key,e){Grid.getStore().reload()}},{key:Ext.EventObject.F8,stopEvent:true,fn:function(key,e){alarmSound.stop()}},{key:38,stopEvent:true,fn:function(key,e){var selectionModel=Grid.getSelectionModel();var selectedRow=selectionModel.getSelected();if(selectedRow){selectionModel.selectPrevious()}}},{key:40,stopEvent:true,fn:function(key,e){var selectionModel=Grid.getSelectionModel();var selectedRow=selectionModel.getSelected();if(selectedRow){selectionModel.selectNext()}}}]);var Tree=Ext.tree;var root=new Tree.AsyncTreeNode({text:localize('GPSDevices'),nodeType:'async',draggable:false,id:'0'});Tree=new Ext.tree.TreePanel({id:'tree_panel',region:'west',minSize:250,width:250,containerScroll:true,autoScroll:true,split:true,rootVisible:true,collapsible:true,collapsed:true,collapseMode:'mini',titleCollapse:true,lines:false,singleExpand:true,useArrows:true,loader:new Ext.tree.TreeLoader({dataUrl:tree_url}),tools:[{id:'refresh',on:{click:function(){try{Tree.body.mask('Loading','x-mask-loading');Tree.root.reload();Tree.root.collapse(true,false);setTimeout(function(){Tree.body.unmask();Tree.root.expand(true,true)},1000)}catch(ex){}}}}]});Tree.setRootNode(root);Tree.on('click',function(node){Cookies.set('id',node.id);treeText=node.text;if(node.id>0){pagingCombo.setValue(node.id);Ext.getCmp('refresh_window').setTitle(localize('Customize Detail Tracks')+' - '+treeText);Ext.ComponentMgr.get('reportDetailTracksMenu').enable();Ext.ComponentMgr.get('reportSOSAlerts').enable();Ext.ComponentMgr.get('groupBatchDetailTracks').disable();}else{pagingCombo.setValue(localize('GPSDevices'));Ext.ComponentMgr.get('reportDetailTracks').disable();Ext.ComponentMgr.get('reportSOSAlerts').disable();Ext.ComponentMgr.get('groupBatchDetailTracks').enable();}cleanUp();store.load({params:{start:0,limit:pageSize,layername:layername}});pictureStore.load()});function treeClearFlag(node,isRoot){if(node.firstChild){treeClearFlag(node.firstChild,false)}if(isRoot){Cookies.set('id',node.id);treeText=node.text;Ext.getCmp('refresh_window').setTitle(localize('Customize Detail Tracks')+' - '+treeText);var fn=function(){Tree.getSelectionModel().select(node,null,true);store.load({params:{start:0,limit:pageSize,layername:layername}});pictureStore.load()};fn.defer(2);pagingCombo.setValue(node.id);Ext.ComponentMgr.get('reportDetailTracks').disable();Ext.ComponentMgr.get('reportSOSAlerts').disable();Ext.ComponentMgr.get('groupBatchDetailTracks').enable();return}if(node!==null){return}if(node.nextSibling){treeClearFlag(node.nextSibling,false)}}function treeComboAdd(node,isRoot){if(node.firstChild){treeComboAdd(node.firstChild,false)}if(isRoot){var r=new(relationComboStore.recordType)({id:0,text:localize('GPSDevices')});relationComboStore.add(r);return}if(node!==null){var r=new(relationComboStore.recordType)({id:node.id,text:node.text});relationComboStore.add(r)}if(node.nextSibling){treeComboAdd(node.nextSibling,false)}}Tree.on('load',function(node){pagingCombo.getStore().removeAll();treeComboAdd(Tree.getRootNode(),true);treeClearFlag(Tree.getRootNode(),true);Ext.getCmp('vehicleLogVehicleEditor').store=pagingCombo.getStore()});var store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:store_url}),reader:new Ext.data.JsonReader({root:'spotted',totalProperty:'count',id:'id'},Ext.data.Record.create([{name:'id',type:'int'},{name:'mark',type:'int'},{name:'msgfrom'},{name:'msgspeed',type:'float'},{name:'target'},{name:'msgdatetime',type:'date'},{name:'sms'},{name:'alert',type:'int'},{name:'alertmsgid'},{name:'lat'},{name:'lon'},{name:'smsname'},{name:'fullname'},{name:'diff',type:'int'},{name:'geofence',type:'int'},{name:'layername'},{name:'engine'},{name:'gid',type:'int'}]))});store.on({'load':{fn:function(store,records,options){if(store.getTotalCount()==0){refreshUI=5;return}try{marker1=[];geoFenceAttributes=[];geoFencePolygon=[];geoStore.removeAll();spotted=null;geo=null;geopoints=null;sos=null;if(store.reader.jsonData.spotted.length>0){map.clearOverlays();spotted=store.reader.jsonData.spotted;var tid=Cookies.get('id');if(spotted!=null){if(tid!=0){if(store.reader.jsonData.geo.length>0){geo=store.reader.jsonData.geo}if(store.reader.jsonData.geopoints.length>0){geopoints=store.reader.jsonData.geopoints}if(geo!=null){geoStore.loadData(geo,true)}if(geopoints!=null){addGeoPoints()}}addMarkers();if(store.reader.jsonData.sos.length>0){sos=store.reader.jsonData.sos}}if(tid!=0){fn.defer(1)}}}catch(ex){}},scope:this},'loadexception':{fn:function(httpProxy,dataObject,args,exception){},scope:this},'add':{fn:function(store,records,index){},scope:this},'beforeload':{fn:function(store,options){},scope:this},'clear':{fn:function(store){},scope:this},'datachanged':{fn:function(store){},scope:this},'remove':{fn:function(store,record,index){},scope:this},'update':{fn:function(store,record,operation){},scope:this}});Array.prototype.HasValue=function(obj){var i=this.length;while(i--){if(this[i]===obj){return true}}return false};function contains(a,obj){var i=a.length;while(i--){if(a[i]===obj){return true}}return false}function GPolygonContains(list,point){var j=0;var oddNodes=false;var x=point.lng();var y=point.lat();for(var i=0;i<list.length;i++){j++;if(j==list.length){j=0}if(((list[i].lat()<y)&&(list[j].lat()>=y))||((list[j].lat()<y)&&(list[i].lat()>=y))){if(list[i].lng()+(y-list[i].lat())/(list[j].lat()-list[i].lat())*(list[j].lng()-list[i].lng())<x){oddNodes=!oddNodes}}}return oddNodes}var degreesPerRadian=180.0/Math.PI;var radiansPerDegree=Math.PI/180.0;function bearing(from,to){var lat1=from.latRadians();var lon1=from.lngRadians();var lat2=to.latRadians();var lon2=to.lngRadians();var angle=-Math.atan2(Math.sin(lon1-lon2)*Math.cos(lat2),Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(lon1-lon2));if(angle<0.0){angle+=Math.PI*2.0}angle=angle*degreesPerRadian;angle=angle.toFixed(1);return angle}function createArrowHeadMarker(point,icon){var marker=new GMarker(point,icon);map.addOverlay(marker)}function arrowHead(points){var p1=points[points.length-1];var p2=points[points.length-2];var dir=bearing(p2,p1);var dir=Math.round(dir/3)*3;while(dir>=120){dir-=120}arrowIcon.image="http://www.google.com/intl/en_ALL/mapfiles/dir_"+dir+".png";createArrowHeadMarker(p1,arrowIcon)}function midArrows(points){for(var i=1;i<points.length-1;i++){var p1=points[i-1];var p2=points[i+1];var dir=bearing(p1,p2);var dir=Math.round(dir/3)*3;while(dir>=120){dir-=120}arrowIcon.image="http://www.google.com/intl/en_ALL/mapfiles/dir_"+dir+".png";createArrowHeadMarker(points[i],arrowIcon)}}function midLineArrows(points){for(var i=0;i<points.length-1;i++){var p1=points[i];var p2=points[i+1];var p3=new GLatLng((p1.lat()+p2.lat())/ 2, (p1.lng() + p2.lng()) /2);var dir=bearing(p1,p2);var dir=Math.round(dir/3)*3;while(dir>=120){dir-=120}arrowIcon.image="http://www.google.com/intl/en_ALL/mapfiles/dir_"+dir+".png";createArrowHeadMarker(p3,arrowIcon)}}function showAlerts(alertMsg,device,speed,datetime){new Ext.ux.window.MessageWindow({title:alertMsg,autoDestroy:true,autoHeight:true,autoHide:true,resizable:true,help:false,sound:false,hideFx:{delay:5000,mode:'standard',useProxy:false},html:device+": Speed "+speed+" km.<br>Date & Time: "+datetime,iconCls:'x-icon-error',pinState:'pin',listeners:{'beforerender':function(){}},showFx:{delay:0,duration:0.5,mode:'standard',useProxy:false},width:250}).show(Ext.getDoc())}if(!popUpWin){popUpWin=new Ext.Window({title:'Alert',id:'popUpWinBox',width:400,height:300,closeAction:'hide',autoHeight:true,resizable:true,shadow:false,border:false,bodyBorder:false,bodyStyle:'padding: 5px;',layout:'anchor',autoScroll:true,x:50,y:(Ext.getBody().getSize().height-500),items:[{xtype:'tabpanel',bodyStyle:'padding: 5px;',activeTab:0,deferredRender:false,items:[{title:'Follow These Instructions',height:280,id:'popUpWinSOP'},{title:'Respond',layout:'anchor',defaultType:'textfield',bodyStyle:'padding:5px 5px 0',items:[{xtype:'label',text:'Type your comments:'},{xtype:'hidden',name:'sopMsgfrom',id:'sopMsgfrom'},{xtype:'hidden',name:'sopID',id:'sopID'},{xtype:'hidden',name:'sopAlertMsgid',id:'sopAlertMsgid'},{xtype:'textarea',autoScroll:true,name:'sopComments',id:'sopComments',anchor:'100% 80%'}],buttons:[{text:'Submit',handler:function(){Ext.Ajax.request({url:updateSOSVoltage_url,method:'POST',callback:function(result,request){},success:function(result,request){if(selectionModel!=null){selectionModel=null}alarmSound.stop();store.load({params:{start:0,limit:pageSize,layername:layername}})},failure:function(result,request){},params:{msgid:Ext.getCmp('sopAlertMsgid').getValue(),response:Ext.util.Format.stripScripts(Ext.getCmp('sopComments').getValue()),responsetime:new Date().format('g:i:s A')}})}}]}]}],buttons:[{text:'Sound On',handler:function(){alarmSound.play()}},{text:'Sound Off',handler:function(){alarmSound.stop()}}]})}var filterRow=new Ext.ux.grid.FilterRow({autoFilter:true,listeners:{change:function(data){if(data.layername!='-'){layername=data.layername;store.load({params:{start:0,limit:pageSize,layername:layername}})}}}});var Grid=new Ext.grid.GridPanel({id:'grid_panel',region:'center',title:'Spotted Details',tools:[{id:'refresh',on:{click:function(){Grid.getStore().reload()}}}],store:store,columns:[{id:'mark',header:'Marker',sortable:true,dataIndex:'mark',hidden:true},{id:'fullname',header:'Device',dataIndex:'fullname',sortable:true,width:200,filter:{test:"/^{0}/i"}},{id:'msgdate',header:'Date',sortable:true,hidden:true,dataIndex:'msgdatetime',renderer:Ext.util.Format.dateRenderer('m/d/Y')},{id:'msgtime',header:'Time',sortable:true,dataIndex:'msgdatetime',renderer:Ext.util.Format.dateRenderer('g:i:s A')},{id:'msgspeed',header:'Speed',sortable:true,dataIndex:'msgspeed',align:'right'},{id:'sms',header:'Spotted',sortable:true,align:'right',dataIndex:'sms'},{id:'layername',header:'Layer',sortable:true,dataIndex:'layername',width:120,hidden:true,filter:{field:{xtype:"combo",mode:'local',store:new Ext.data.ArrayStore({id:0,fields:['value'],data:[['-'],['K9'],['Kazi'],['KK Embassy'],['KK Escort'],['KK-Eldoret'],['KK-Kisumu'],['KK-New'],['Knight Support'],['Spotted Clients'],['Zulu']]}),valueField:'value',displayField:'value',triggerAction:'all',value:"-"},fieldEvents:["select"],test:function(filterValue,value,record){return filterValue==="-"||filterValue===value}}},{id:'lon',header:'Longitude',dataIndex:'lon',align:'right',hidden:true},{id:'lat',header:'Latitude',dataIndex:'lat',align:'right',hidden:true},{id:'target',header:'Target',sortable:true,dataIndex:'target',hidden:true},{id:'alert',header:'Alerts',align:'right',dataIndex:'alert',hidden:true},{id:'geofence',header:'Geo',dataIndex:'geofence',align:'right',hidden:true},{id:'diff',header:'Health',dataIndex:'diff',align:'right',hidden:true},{id:'engine',header:'Engine',dataIndex:'engine',align:'right',hidden:true},{id:'id',header:'ID',dataIndex:'id',align:'right',hidden:true}],plugins:[filterRow],stripeRows:true,autoScroll:true,maskDisabled:true,view:new Ext.grid.GridView({forceFit:true,enableRowBody:true,ignoreAdd:true,emptyText:localize('NoTracks'),getRowClass:function(r,idx,rowParams,ds){if(r.get("alert")>3){return'sos-row'}if(r.get("engine")==1&&r.get("target")!="Moving"){return'idling-row'}if(r.get("alert")==1){return'speeding-row'}if(r.get("geofence")==1){return'geofence-row'}if(r.get("diff")>60){return'health-row'}if(r.get("target")=="Moving"){return'moving-row'}if(r.get("msgspeed")=="0"){return'stop-row'}},onLoad:Ext.emptyFn,listeners:{beforerefresh:function(v){v.scrollTop=v.scroller.dom.scrollTop;v.scrollHeight=v.scroller.dom.scrollHeight},refresh:function(v){v.scroller.dom.scrollTop=v.scrollTop+(v.scrollTop==0?0:v.scroller.dom.scrollHeight-v.scrollHeight)}}}),selModel:new Ext.grid.RowSelectionModel({singleSelect:true,listeners:{beforerowselect:function(sm,row,keepExisting,rec){try{var index=rec.data.gid;marker1[prevGridRow].setImage(marker1[prevGridRow].getIcon().imageOut);marker1[index].setImage(marker1[index].getIcon().imageOver);}catch(e){}},rowselect:function(sm,row,rec){var index=rec.data.gid;prevGridRow=index;var bounds=new GLatLngBounds();bounds.extend(marker1[index].getLatLng());map.getBoundsZoomLevel(bounds);map.panTo(marker1[index].getLatLng());if(rec.data.alert=="4"){Ext.getCmp('popUpWinBox').setTitle('Alert From - '+rec.data.fullname);Ext.getCmp('sopMsgfrom').setValue(rec.data.msgfrom);Ext.getCmp('sopID').setValue(rec.data.id);Ext.getCmp('sopAlertMsgid').setValue(rec.data.alertmsgid);Ext.Ajax.request({url:'data/sop.ashx',params:{msgfrom:rec.data.msgfrom},callback:function(options,success,response){var obj=response.responseText;if(response.responseText.length>0){Ext.getCmp('popUpWinSOP').body.update(obj)}},scope:this});popUpWin.show()}else{Ext.getCmp('sopComments').setValue('');popUpWin.hide()}}}}),autoExpandColumn:'fullname',listeners:{rowClick:function(grid,rowIndex,e){var RowRecord=grid.getStore().getAt(rowIndex);var index=RowRecord.data.gid;var bounds=new GLatLngBounds();bounds.extend(marker1[index].getLatLng());map.getBoundsZoomLevel(bounds);map.panTo(marker1[index].getLatLng())},rowdblClick:function(grid,rowIndex,e){var RowRecord=grid.getStore().getAt(rowIndex);var index=RowRecord.data.gid;var bounds=new GLatLngBounds();bounds.extend(marker1[index].getLatLng());map.setCenter(bounds.getCenter());map.setZoom(map.getBoundsZoomLevel(bounds))},rowcontextmenu:function(Grid,RowIndex,Event){RowRecord=Grid.getStore().getAt(RowIndex);Grid.getSelectionModel().selectRow(RowIndex);if(!this.contextMenu){this.contextMenu=new Ext.menu.Menu({id:'gridCtxMenu',items:[{text:'Trigger remote Panic/SOS Alert',handler:function(){Ext.Msg.show({title:'Trigger Panic?',msg:'Are you sure?',buttons:Ext.Msg.YESNO,fn:function(button){switch(button){case'yes':Ext.Ajax.request({url:'data/remoteSOS.ashx',method:'GET',params:{msgFrom:RowRecord.data.msgfrom,thisDate:new Date().format('m/d/Y'),thisTime:new Date().format('g:i:s A'),thisDateTime:new Date().format('m/d/Y g:i:s A')},success:function(){store.load({params:{start:0,limit:pageSize,layername:layername}})},failure:function(){Ext.Msg.alert('Error','Could not trigger remote SOS.')}});break;case'no':break}},icon:Ext.MessageBox.QUESTION})}},'-',{text:'Change Your Profile',handler:function(){if(Cookies.get('admin')=="true"){var changeProfile=new Ext.Window({width:440,height:270,id:'changeYourProfile',title:'Change Your Profile',resizable:false,closable:false,layout:'fit',modal:true,plain:true,bodyStyle:'padding:5px;',buttonAlign:'right',items:[{xtype:'form',id:'changeYourProfileForm',bodyStyle:'padding:15px',defaultType:'textfield',labelWidth:140,items:[{fieldLabel:'New User Name',name:'newUserName',id:'newUserName',allowBlank:false,maxLength:50,minLength:3,anchor:'95%'},{fieldLabel:'New User Password',name:'newUserPwd',id:'newUserPwd',allowBlank:false,maxLength:50,minLength:3,anchor:'95%'},{fieldLabel:'New Pin Code',name:'newPinCode',id:'newPinCode',value:RowRecord.data.pincode,allowBlank:false,maxLength:50,minLength:3,anchor:'95%'},{fieldLabel:'Your Cell Phone #',name:'newContact1',id:'newContact1',value:RowRecord.data.contact1,allowBlank:false,maxLength:50,minLength:10,anchor:'95%'},{xtype:'textfield',fieldLabel:'Contact 2 Cell Phone #',name:'newContact2',id:'newContact2',value:RowRecord.data.contact2,allowBlank:false,maxLength:50,minLength:10,anchor:'95%'},{xtype:'textfield',fieldLabel:'Contact 3 Cell Phone #',name:'newContact3',id:'newContact3',value:RowRecord.data.contact3,allowBlank:false,maxLength:50,minLength:10,anchor:'95%'}]}],buttons:[{text:'Submit',handler:function(){var form=Ext.getCmp('changeYourProfileForm').getForm();if(form.isValid()){Ext.Ajax.request({url:'data/changeYourProfile.ashx',method:'POST',callback:function(result,request){},success:function(result,request){},failure:function(result,request){},params:{username:Ext.getCmp('newUserName').getValue(),userpwd:Ext.getCmp('newUserPwd').getValue(),pincode:Ext.getCmp('newPinCode').getValue(),contact1:Ext.getCmp('newContact1').getValue(),contact2:Ext.getCmp('newContact2').getValue(),contact3:Ext.getCmp('newContact3').getValue(),localDT:new Date().format('m/d/Y g:i:s A')}});changeProfile.close()}}},{text:'Cancel',handler:function(){changeProfile.close()}}]})}if(changeProfile!=null){changeProfile.show()}else{Ext.Msg.alert('Rights','You do not have access.')}}},'-',{text:'Change Device Name',handler:function(){if(Cookies.get('admin')=="true"){Ext.MessageBox.prompt('Current device: '+RowRecord.data.fullname,'Please enter new device name:',function(btn,text){switch(btn){case'ok':if(text!=""){Ext.Ajax.request({url:'data/changeDeviceName.ashx',method:'POST',success:function(result,request){},failure:function(result,request){},params:{msgfrom:RowRecord.data.msgfrom,devicename:text,localDT:new Date().format('m/d/Y g:i:s A')}})}break;case'cancel':break}})}else{Ext.Msg.alert('Rights','You do not have access.')}}}]})}Event.preventDefault();var xy=Event.getXY();this.contextMenu.showAt(xy)}}});var winCustom=new Ext.Window({width:500,height:150,minHeight:150,id:'refresh_window',layout:'fit',border:false,closeAction:'hide',closable:true,collapsible:true,iconCls:'x-icon-database_refresh',title:localize('Customize Detail Tracks'),items:[{xtype:'form',labelWidth:130,id:'custom_form',bodyStyle:'padding:15px',items:[{xtype:'xdatetime',id:'startDT',fieldLabel:localize('Start Date & Time'),anchor:'-18',timeFormat:'g:i:s A',timeConfig:{altFormats:'g:i:s A',allowBlank:false,value:'12:00:00 AM'},dateFormat:'n/j/Y',dateConfig:{altFormats:'Y-m-d|Y-n-d',allowBlank:false}},{xtype:'xdatetime',id:'endDT',fieldLabel:localize('End Date & Time'),anchor:'-18',timeFormat:'g:i:s A',timeConfig:{altFormats:'g:i:s A',allowBlank:false,value:'11:45:00 PM'},dateFormat:'n/j/Y',dateConfig:{altFormats:'Y-m-d|Y-n-d',allowBlank:false}}]}],buttons:[{text:'Submit',handler:function(){var form=Ext.getCmp('custom_form').getForm();if(form.isValid()){Cookies.set('startDTdate',Ext.getCmp('startDT-date').value);Cookies.set('startDTtime',Ext.getCmp('startDT-time').value);Cookies.set('endDTdate',Ext.getCmp('endDT-date').value);Cookies.set('endDTtime',Ext.getCmp('endDT-time').value);Ext.getCmp('GPS_Devices_window').setTitle('Date: '+Cookies.get('startDTdate')+' '+Cookies.get('startDTtime')+' To: '+Cookies.get('endDTdate')+' '+Cookies.get('endDTtime'));Ext.getCmp('vehcle_Log_History').setTitle('Date: '+Cookies.get('startDTdate')+' '+Cookies.get('startDTtime')+' To: '+Cookies.get('endDTdate')+' '+Cookies.get('endDTtime'));form.submit({waitMsg:localize('Wait while I retrieve data ...'),url:store_url,reset:false,params:{start:0,limit:pageSize},success:function(form,action){serverMsg=Ext.decode(action.response.responseText);cleanUp();if(serverMsg.spotted.length>0){store.loadData(serverMsg,true)}},failure:function(form,action){Ext.MessageBox.show({title:localize('Failure'),msg:localize('Date and time specified not valid.'),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING})}})}else{Ext.MessageBox.show({title:localize('Sorry'),msg:localize('Please enter all the required information.'),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING})}}},{text:'Close',handler:function(){winCustom.hide()}}]});var body=Ext.getBody();var frame=body.createChild({tag:'iframe',cls:'x-hidden',id:'iframe',name:'iframe'});var downloadReports=body.createChild({tag:'form',cls:'x-hidden',id:'form',action:'',target:'iframe'});var scrollMenu=new Ext.menu.Menu();scrollMenu.add({text:'Detail Tracks Report',id:'reportDetailTracks',menu:{items:[{text:'Today',handler:function(){Cookies.set('findate','1');downloadReports.dom.action=download_track_report_url;downloadReports.dom.submit()}},{text:'This Week',handler:function(){Cookies.set('findate','2');downloadReports.dom.action=download_track_report_url;downloadReports.dom.submit()}},{text:'This Month',handler:function(){Cookies.set('findate','3');downloadReports.dom.action=download_track_report_url;downloadReports.dom.submit()}},{text:'Customize',handler:function(){Cookies.set('findate','0');downloadReports.dom.action=download_track_report_url;downloadReports.dom.submit()}}]}});scrollMenu.add({text:'SOS Alerts Report',id:'reportSOSAlerts',menu:{items:[{text:'Today',handler:function(){Cookies.set('findate','1');downloadReports.dom.action=download_sos_report_url;downloadReports.dom.submit()}},{text:'This Week',handler:function(){Cookies.set('findate','2');downloadReports.dom.action=download_sos_report_url;downloadReports.dom.submit()}},{text:'This Month',handler:function(){Cookies.set('findate','3');downloadReports.dom.action=download_sos_report_url;downloadReports.dom.submit()}},{text:'Customize',handler:function(){Cookies.set('findate','0');downloadReports.dom.action=download_sos_report_url;downloadReports.dom.submit()}}]}});scrollMenu.add({text:'Group Batch Detail Tracks Report',id:'groupBatchDetailTracks',menu:{items:[{text:'Today',handler:function(){Cookies.set('findate','1');downloadReports.dom.action=download_group_track_report_url;downloadReports.dom.submit()}},{text:'This Week',handler:function(){Cookies.set('findate','2');downloadReports.dom.action=download_group_track_report_url;downloadReports.dom.submit()}},{text:'This Month',handler:function(){Cookies.set('findate','3');downloadReports.dom.action=download_group_track_report_url;downloadReports.dom.submit()}},{text:'Customize',handler:function(){Cookies.set('findate','0');downloadReports.dom.action=download_group_track_report_url;downloadReports.dom.submit()}}]}});var gps_devices=new Ext.Window({layout:'border',width:400,height:(Ext.getBody().getSize().height-60),closeAction:'hide',title:localize('GPSDetails'),id:'GPS_Devices_window',plain:false,resizable:true,maximizable:true,collapsible:true,closable:false,border:false,x:(Ext.getBody().getSize().width-405),y:30,items:[Tree,Grid],buttons:[{id:'customizeBtnWin',text:'Customize',iconCls:'x-icon-page_refresh',tooltip:{text:'Customize detail tracks date & time range'},scope:this,handler:function(){winCustom.show()}},{text:'Report',id:'reportBtn',menu:scrollMenu,tooltip:{text:'Click report to download to Microsoft Excel'}},{text:'Vehicle Log History',id:'_VehicleLogHistory',tooltip:{text:'Vehicle log history'},handler:function(){vehcleLogHistory.show()}}]});var geoStore=new Ext.data.Store({proxy:new Ext.data.MemoryProxy(geo),reader:new Ext.data.JsonReader({},[{name:'id',type:'int'},{name:'contactid'},{name:'geoname'},{name:'geoaction'},{name:'polymode'}])});var geoGrid=new Ext.grid.GridPanel({id:'geoGrid_panel',store:geoStore,columns:[{id:'id',header:'ID',dataIndex:'id',sortable:false,hidden:true},{id:'geoname',header:'Geo Fence Name',width:300,dataIndex:'geoname',hideable:false},{id:'geoaction',header:'Action',dataIndex:'geoaction'},{id:'polymode',header:'Poly Mode',dataIndex:'polymode',hidden:true}],stripeRows:true,autoScroll:true,loadMask:true,view:new Ext.grid.GridView({forceFit:true,enableRowBody:true,ignoreAdd:true,emptyText:'No Geo Fence to display'}),selModel:new Ext.grid.RowSelectionModel({singleSelect:true}),autoExpandColumn:'geoname',listeners:{rowcontextmenu:function(geoGrid,RowIndex,Event){RowRecord=geoGrid.getStore().getAt(RowIndex);geoGrid.getSelectionModel().selectRow(RowIndex);if(!this.contextMenu){this.contextMenu=new Ext.menu.Menu({id:'gridCtxGeoFenceMenu',items:[{text:'Delete Geo Fence',handler:function(){Ext.Ajax.request({url:'data/geoDelete.ashx',method:'GET',params:{rowID:RowRecord.id},success:function(){},failure:function(){Ext.Msg.alert('Error','Could not delete Geo Fence.')}})}}]})}Event.preventDefault();var xy=Event.getXY();this.contextMenu.showAt(xy)}}});var groupingReader=Ext.data.Record.create([{name:'id',type:'int'},{name:'contactid',type:'int'},{name:'vehicle',type:'string'},{name:'reason',type:'string'},{name:'unitalarm',type:'string'},{name:'kilometerout',type:'int'},{name:'kilometerin',type:'int'},{name:'logdatetime',type:'date'},{name:'msgfrom',type:'string'},{name:'logdate'},{name:'logstarttime'},{name:'logarrivaltime'}]);var groupingStore=new Ext.data.GroupingStore({reader:new Ext.data.JsonReader({fields:groupingReader}),proxy:new Ext.data.HttpProxy({url:'data/vehicleLog.ashx'})});var editor=new Ext.ux.grid.RowEditor({saveText:'Update',cancelText:'Cancel',listeners:{'canceledit':function(editor,value){this.stopEditing(false);var s=groupingGrid.getSelectionModel().getSelections();for(var i=0,r;r=s[i];i++){if(r.data.id==0){groupingStore.remove(r)}}groupingGrid.addBtn.setDisabled(false)}}});function fnDelete(btn){if(btn=='yes'){var selectedRows=groupingGrid.getSelectionModel().getSelections();for(var i=0,r;r=selectedRows[i];i++){Ext.Ajax.request({url:'data/vehicleLogDelete.ashx',method:'POST',success:function(result,request){},failure:function(result,request){},params:{lodid:r.data.id}});groupingStore.remove(r)}}}var groupingGrid=new Ext.grid.GridPanel({store:groupingStore,loadMask:true,id:'ID_grid1',plugins:[editor],tbar:[{ref:'../addBtn',iconCls:'icon-user-add',text:'Add Log',handler:function(){groupingGrid.addBtn.setDisabled(true);var e=new groupingReader({id:0,contactid:0,vehicle:'',reason:'',unitalarm:'',kilometerout:'',kilometerin:'',logdatetime:new Date(),logdate:new Date().format('m/d/Y'),logstarttime:new Date().format('g:i A'),logarrivaltime:''});editor.stopEditing();groupingStore.insert(0,e);groupingGrid.getView().refresh();groupingGrid.getSelectionModel().selectRow(0);editor.startEditing(0)}},{ref:'../removeBtn',iconCls:'icon-user-delete',text:'Remove Log',disabled:true,handler:function(){editor.stopEditing();var selectedRows=groupingGrid.getSelectionModel().getSelections();if(selectedRows.length>0){Ext.MessageBox.confirm('Confirm','Do you really want to delete these rows?',fnDelete)}}}],columns:[{header:'ID',width:10,sortable:true,hidden:true,dataIndex:'id'},{xtype:'datecolumn',header:'Date',width:30,sortable:true,dataIndex:'logdate',editor:{xtype:'datefield',allowBlank:false,minValue:'01/01/2011',maxValue:(new Date()).format('m/d/Y')}},{id:'vehicle',header:"Vehicle",width:40,sortable:true,dataIndex:'vehicle',editor:new Ext.ux.form.ComboBoxMatch({mode:'local',triggerAction:'all',editable:true,allowBlank:false,id:'vehicleLogVehicleEditor',name:'vehicleLogVehicleEditor',displayField:'text',valueField:'id',forceSelection:false,anyMatch:true,queryIgnoreCase:true,matchWordStart:true,createValueMatcher:function(value){value=String(value).replace(/\s*/g,'');if(Ext.isEmpty(value,false)){return new RegExp('^')}value=Ext.escapeRe(value.split('').join('\\s*')).replace(/\\\\s\\\*/g,'\\s*');return new RegExp('\\b('+value+')','i')}})},{header:'Reason',width:40,sortable:true,dataIndex:'reason',editor:new Ext.ux.form.ComboBoxMatch({mode:'local',triggerAction:'all',editable:true,allowBlank:false,id:'vehicleLogReasonEditor',name:'vehicleLogReasonEditor',displayField:'name',valueField:'value',forceSelection:false,anyMatch:true,queryIgnoreCase:true,matchWordStart:true,createValueMatcher:function(value){value=String(value).replace(/\s*/g,'');if(Ext.isEmpty(value,false)){return new RegExp('^')}value=Ext.escapeRe(value.split('').join('\\s*')).replace(/\\\\s\\\*/g,'\\s*');return new RegExp('\\b('+value+')','i')},store:['Alarm','Convoy','Escort','Fuel','Patrol','Personal Protection','Supervision','Team Assignment']})},{header:'Destination/Unit',width:30,sortable:true,dataIndex:'unitalarm',editor:new Ext.form.TextField({allowBlank:false,allowNegative:false,style:'text-align:left'})},{header:'Start Km',width:20,sortable:true,dataIndex:'kilometerout',editor:new Ext.form.NumberField({allowBlank:false,allowNegative:false,style:'text-align:left'})},{header:'Arrival Km',width:20,sortable:true,dataIndex:'kilometerin',editor:new Ext.form.NumberField({allowBlank:true,allowNegative:false,style:'text-align:left'})},{header:'Total Km',id:'kilometer',width:20,sortable:false,groupable:false,renderer:function(v,params,record){return Ext.util.Format.number(record.data.kilometerin-record.data.kilometerout)},dataIndex:'kilometer'},{header:'Start Time',width:28,sortable:true,dataIndex:'logstarttime',editor:{xtype:'timefield',minValue:'12:00 AM',maxValue:'11:59 PM',increment:1,allowBlank:false,style:'text-align:left'}},{header:'Arrival Time',width:28,sortable:true,dataIndex:'logarrivaltime',editor:{xtype:'timefield',format:'g:i A',minValue:'12:00 AM',maxValue:'11:59 PM',increment:1,allowBlank:true,style:'text-align:left'}}],title:'Vehicle Log History',tools:[{id:'print',on:{click:function(){Ext.ux.GridPrinter.print(groupingGrid)}}},{id:'refresh',on:{click:function(){groupingStore.load()}}}],view:new Ext.grid.GroupingView({forceFit:true,markDirty:false,groupTextTpl:'{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'})});groupingStore.on({'load':{fn:function(store,records,options){},scope:this},'loadexception':{fn:function(httpProxy,dataObject,args,exception){},scope:this},'add':{fn:function(store,records,index){},scope:this},'beforeload':{fn:function(store,options){},scope:this},'clear':{fn:function(store){},scope:this},'datachanged':{fn:function(store){},scope:this},'remove':{fn:function(store,record,index){},scope:this},'update':{fn:function(store,record,operation){Ext.Ajax.request({url:'data/vehicleLogInsert.ashx',method:'POST',success:function(result,request){},failure:function(result,request){},params:{lodid:record.data.id,vehicle:Ext.getCmp('vehicleLogVehicleEditor').getValue(),reason:record.data.reason,unitalarm:record.data.unitalarm,kilometerout:record.data.kilometerout,kilometerin:record.data.kilometerin,localDT:record.data.logdatetime,msgfrom:record.data.msgfrom,logdate:record.data.logdate,logstarttime:record.data.logstarttime,logarrivaltime:record.data.logarrivaltime}});groupingGrid.addBtn.setDisabled(false);},scope:this}});groupingGrid.getSelectionModel().on('selectionchange',function(sm){groupingGrid.removeBtn.setDisabled(sm.getCount()<1)});var vehcleLogHistory=new Ext.Window({layout:'fit',width:800,height:400,closeAction:'hide',title:'Vehicle Log History',id:'vehcle_Log_History',border:false,autoScroll:true,plain:false,resizable:true,maximizable:true,closable:true,collapsible:true,x:5,items:[groupingGrid],buttons:[{text:'Export',scope:this,handler:function(){downloadReports.dom.action=download_vehcle_Log_report_url;downloadReports.dom.submit()}},{text:'Clear Grouping',scope:this,handler:function(){groupingStore.clearGrouping()}},{text:'Refresh',handler:function(){groupingStore.load()}},{text:'Close',handler:function(){vehcleLogHistory.hide()}}]});var geo_Fence=new Ext.Window({layout:'fit',width:600,height:300,closeAction:'hide',title:'Geo Fence',plain:false,resizable:true,maximizable:true,closable:true,items:[geoGrid],buttons:[{text:'Create Geo Fence',tooltip:{title:'Create Geo Fence',text:'Create Geo Fence'},scope:this,handler:function(){createGeoFence.show()}},{text:'Close',handler:function(){geo_Fence.hide()}}]});var selectionModel=null;var geoFenceCircle=new Ext.form.Checkbox({id:'nocircle',name:'nocircle',boxLabel:'Circle',inputValue:'no',listeners:{check:function(field,value){circlemode=value}}});var dsPoly=new Ext.data.ArrayStore({data:[[1,'Polyline'],[2,'Polygon']],fields:['id','text']});var polyCombo=new Ext.form.ComboBox({store:dsPoly,id:'polyCombo',displayField:'text',valueField:'id',typeAhead:true,mode:'local',triggerAction:'all',allowBlank:false,selectOnFocus:true,forceSelection:true,editable:false,listeners:{'select':function(combo,row,index){toolID=polyCombo.getValue();setTool()}}});var dsAction=new Ext.data.ArrayStore({data:[[1,'Notify'],[2,'Notify when arrived and left location'],[3,'Do not notify']],fields:['id','text']});var GeoAction=new Ext.form.ComboBox({store:dsAction,id:'geoFenceAction',fieldLabel:"Action",displayField:'text',valueField:'id',typeAhead:true,mode:'local',triggerAction:'all',allowBlank:false,selectOnFocus:true,forceSelection:true,editable:false,anchor:'95%',listeners:{'select':function(combo,row,index){}}});var geoFenceLayout={id:'geoFenceLayout_panel',layout:'border',border:false,items:[{region:'north',height:75,collapsible:false,items:[{xtype:'form',id:'geoFenceLayout_form_panel',labelWidth:100,bodyStyle:'padding:15px',border:false,items:[{xtype:'textfield',fieldLabel:'Description',name:'geoFenceDescription',id:'geoFenceDescription',blankText:'You must enter Geo Fence Description',allowBlank:false,anchor:'95%',emptyText:'Type Geo Fence Description',maxLength:50,maxLengthText:'Geo Fence Description cannot exceed 50 characters',minLength:3},GeoAction]}]},{collapsible:false,region:'center',margins:'5 5 0 0',html:'<div id="geoMap" style="width:100%; height:100%"></div>',tbar:[{text:'Clear Map',iconCls:'clearMapBtn',id:'clearMap',handler:function(){clearMap()}},'-',polyCombo,'-',geoFenceCircle,'-',{text:'Delete Last Point',iconCls:'deleteLastPointBtn',id:'deleteLastPoint',handler:function(){deleteLastPoint()}},'-',{text:'Close Poly',iconCls:'closePolyBtn',id:'closePoly',handler:function(){closePoly()}},'-',{text:'Edit Lines',iconCls:'editlinesBtn',id:'editLines',handler:function(){editlines()}},'-',{text:'Finish',iconCls:'nextshapeBtn',id:'nextShape',handler:function(){if(polyPoints.length>0){nextshape();Ext.ComponentMgr.get('nocircle').disable();Ext.ComponentMgr.get('polyCombo').disable();Ext.ComponentMgr.get('deleteLastPoint').disable();Ext.ComponentMgr.get('closePoly').disable();Ext.ComponentMgr.get('editLines').disable();Ext.ComponentMgr.get('nextShape').disable();finishediting=true}}},'->',{text:'Help',iconCls:'geoHelpBtn',id:'geoHelp',handler:function(){}}]}]};var createGeoFence=new Ext.Window({id:'geo_fence',layout:'fit',width:800,height:450,minWidth:800,minHeight:450,closeAction:'hide',modal:true,title:'Create Geo Fence',plain:false,closable:true,maximizable:true,resizable:true,border:false,items:[geoFenceLayout],buttons:[{text:'Synch Maps',tooltip:{title:'Synch Maps',text:'Synchronous both maps'},scope:this,handler:function(){var bounds=map.getBounds();var southWest=bounds.getSouthWest();var northEast=bounds.getNorthEast();map2.checkResize();map2.setCenter(new GLatLng(southWest.lat(),southWest.lng()),map.getZoom());map2marker=marker1[0];map2.addOverlay(map2marker);map2.panTo(map2marker.getLatLng())}},{text:'Resize Map',tooltip:{title:'Resize Map',text:'Resize map to fit screen'},handler:function(){map2.checkResize();map2marker=marker1[0];map2.addOverlay(map2marker);map2.panTo(map2marker.getLatLng())}},{text:'Submit',type:'button',id:'submit_geo_fence',handler:function(){var data=[];var pts=[];for(var i=0;i<polyPoints.length;i++){var lat=polyPoints[i].lat();var lng=polyPoints[i].lng();var fld={};fld.latlng=roundVal(lat)+","+roundVal(lng);data.push(fld);pts.push(new GLatLng(roundVal(lat),roundVal(lng)))}var poly='polyline';if(polygonMode){poly='polygon'}var form=Ext.getCmp('geoFenceLayout_form_panel').getForm();var geoname=form.findField('geoFenceDescription').getValue();if(form.isValid()&&polyPoints.length>0){form.submit({waitMsg:localize('Wait while I save data ...'),url:'data/geoSave.ashx',params:{action:GeoAction.getValue(),geo:Ext.encode(data),mode:poly},success:function(form,action){serverMsg=Ext.decode(action.response.responseText);geoFencePolygon.push(pts);map.addOverlay(new GPolyline(pts,'#FF0000',3,0.4));var fld={};fld.id=0;fld.contactid=0;fld.geoname=geoname;fld.geoaction=GeoAction.getValue();fld.polymode=poly;geoFenceAttributes.push(fld);clearMap();createGeoFence.hide()},failure:function(form,action){Ext.MessageBox.show({title:localize('Failure'),msg:localize('Geo Fence data was not saved, please try again.'),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING})}});map2marker=null}else{Ext.MessageBox.show({title:localize('Sorry'),msg:localize('Please enter Description and draw your Geo Fence.'),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING})}}},{text:'Close',handler:function(){map2marker=null;createGeoFence.hide()}}],listeners:{activate:function(c){var setfocus=function(){Ext.getCmp('geoFenceLayout_form_panel').getEl().child("input[type!=hidden]").focus();map2marker=marker1[0];map2.addOverlay(map2marker);map2.panTo(map2marker.getLatLng())};setfocus.defer(1000)}}});var uploadFiles=new Ext.ux.SwfUploadPanel({border:true,file_types:'*.jpg;*.gif;*.png',file_types_description:'Image Files',upload_url:uploadPicture_url,labelWidth:110});var winSwfUploadPanel=new Ext.Window({width:600,minWidth:400,modal:true,height:300,minHeight:300,resizable:false,id:'picture_window',layout:'fit',border:false,closable:false,iconCls:'x-icon-database_refresh',title:localize('Picture Upload (Max Filesize 1 MB)'),items:uploadFiles,buttons:[{text:'Close',handler:function(){uploadFiles.removeAllFiles();pictureStore.load();winSwfUploadPanel.hide()}}]});var pictureStore=new Ext.data.JsonStore({url:'data/pictures.ashx',root:'images',fields:['filename','url']});var tpl=new Ext.XTemplate('<tpl for=".">','<div class="thumb-wrap" id="{filename}">','<div class="thumb"><img src="{url}"></div>','<span class="x-editable">{shortName}</span></div>','</tpl>','<div class="x-clear"></div>');var fDataView=new Ext.DataView({id:'myfilesfolderview',store:pictureStore,tpl:tpl,bodyStyle:'padding:15px;',height:400,width:600,autoScroll:true,singleSelect:true,overClass:'x-view-over',itemSelector:'div.thumb-wrap',emptyText:'<div style="padding:10px;">No images to display</div>',listeners:{'contextmenu':{fn:rightClick,scope:this}}});var upload_picture=new Ext.Window({id:'upload_picture',title:'Pictures',closable:true,maximizable:true,resizable:true,closeAction:'hide',layout:'fit',width:800,height:400,items:fDataView,tbar:[{id:'pictureBtn',text:'Upload Pictures',iconCls:'x-icon-database_refresh',tooltip:'Click to upload pictures',scope:this,handler:function(){winSwfUploadPanel.show()}}],buttons:[{text:'Close',handler:function(){upload_picture.hide()}}]});function rightClick(dataView,index,node,e){dataView.menu=new Ext.menu.Menu({id:'dataView-ctx',items:[{text:'Delete',scope:this,handler:function(){var selNode=fDataView.getRecord(node).data.filename;if(selNode!==""){Ext.Ajax.request({url:deletePicture_url,method:'GET',params:{filename:selNode},success:function(){pictureStore.load()},failure:function(){Ext.Msg.alert('Error','Could not delete the file.')}})}}},'-',{text:'Refresh',scope:this,handler:refreshImage}]});dataView.menu.showAt(e.getXY());e.stopEvent()}function refreshImage(){pictureStore.load()}new Ext.ux.Fisheye("menu");Ext.get("menu_gps_devices").on("click",function(){gps_devices.show()});Ext.get("menu_geo_fence").on("click",function(){geo_Fence.show()});Ext.get("menu_upload_pictures").on("click",function(){upload_picture.show()});Ext.get('menu').setVisible(false);var winLogin=new Ext.Window({modal:true,width:500,height:150,minWidth:500,minHeight:150,id:'login_window',layout:'fit',border:false,closable:false,title:'Login',iconCls:'x-icon-application_key',keys:[{key:[Ext.EventObject.ENTER],fn:function(){tryLogin()}}],items:[{xtype:'form',id:'login_form',bodyStyle:'padding:15px',items:[{xtype:'textfield',fieldLabel:'User Name',name:'UserName',id:'UserName',blankText:'You must enter your user name',allowBlank:false,anchor:'95%',emptyText:'Type your user name',maxLength:50,maxLengthText:'User name cannot exceed 50 characters',minLength:3,tooltip:{tip:'Enter your <b>User Name</b>',width:150},listeners:{render:function(c){var setfocus=function(){Ext.getCmp('login_form').getEl().child("input[type!=hidden]").focus()};setfocus.defer(2000)}}},{xtype:'textfield',fieldLabel:'User Password',name:'UserPwd',id:'UserPwd',allowBlank:false,inputType:'password',anchor:'95%',maxLength:50,maxLengthText:'User password cannot exceed 50 characters',minLength:3,tooltip:{tip:'Enter your <b>User Password</b>',width:150}}]}],buttons:[{text:'Exit',handler:function(){window.location='http://www.spottedanywhere.com/'}},{text:'Login',id:'loginBtn',handler:function(){tryLogin()}}]});function tryLogin(){var form=Ext.getCmp('login_form').getForm();if(form.isValid()){form.submit({waitMsg:localize('Wait while I login ...'),url:login_url,success:function(form,action){serverMsg=Ext.decode(action.response.responseText);Cookies.set('cid',serverMsg.cid);Cookies.set('admin',serverMsg.admin.toLowerCase());winLogin.hide();if(Cookies.get('startDTdate')!==""){Ext.getCmp('startDT').setDate(new Date());Ext.getCmp('endDT').setDate(new Date());Cookies.set('startDTdate',Ext.getCmp('startDT-date').value);Cookies.set('startDTtime',Ext.getCmp('startDT-time').value);Cookies.set('endDTdate',Ext.getCmp('endDT-date').value);Cookies.set('endDTtime',Ext.getCmp('endDT-time').value)}Ext.getCmp('GPS_Devices_window').setTitle('Date: '+Cookies.get('startDTdate')+' '+Cookies.get('startDTtime')+' To: '+Cookies.get('endDTdate')+' '+Cookies.get('endDTtime'));Ext.getCmp('vehcle_Log_History').setTitle('Date: '+Cookies.get('startDTdate')+' '+Cookies.get('startDTtime')+' To: '+Cookies.get('endDTdate')+' '+Cookies.get('endDTtime'));if(Cookies.get('admin')=="false"){Ext.getCmp('_VehicleLogHistory').disable()}gps_devices.show();Tree.getRootNode().expand();groupingStore.load();if(serverMsg.refresh=="True"){runner.start(task);runningTask=1;Ext.getCmp('taskRefresh_btn').setText('Stop')}else{removePopupMarker=true}},failure:function(form,action){Ext.MessageBox.show({title:localize('Failure'),msg:localize('User name and password specified not valid.'),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING})}})}else{Ext.MessageBox.show({title:localize('Sorry'),msg:localize('Please enter all the required information.'),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING})}}var relationComboStore=new Ext.data.JsonStore({fields:[{name:'id'},{name:'text'}]});var pagingCombo=new Ext.ux.form.ComboBoxMatch({store:relationComboStore,id:'combo_gps',displayField:'text',valueField:'id',mode:'local',triggerAction:'all',allowBlank:false,width:200,listWidth:250,resizable:false,selectOnFocus:true,forceSelection:true,emptyText:'Select a device...',anyMatch:true,queryIgnoreCase:true,matchWordStart:true,createValueMatcher:function(value){value=String(value).replace(/\s*/g,'');if(Ext.isEmpty(value,false)){return new RegExp('^')}value=Ext.escapeRe(value.split('').join('\\s*')).replace(/\\\\s\\\*/g,'\\s*');return new RegExp('\\b('+value+')','i')},listeners:{'select':function(combo,row,index){Cookies.set('id',combo.getValue());Tree.getNodeById(combo.getValue()).select();treeText=Tree.getNodeById(combo.getValue()).text;Ext.getCmp('refresh_window').setTitle(localize('Customize Detail Tracks')+' - '+treeText);cleanUp();var tid=Cookies.get('id');if(tid!=0){Ext.ComponentMgr.get('reportDetailTracks').enable();Ext.ComponentMgr.get('reportSOSAlerts').enable();Ext.ComponentMgr.get('groupBatchDetailTracks').disable();Grid.getColumnModel().setHidden(0,false);Ext.get('menu').setVisible(true);gps_devices.show()}else{Ext.ComponentMgr.get('reportDetailTracks').disable();Ext.ComponentMgr.get('reportSOSAlerts').disable();Ext.ComponentMgr.get('groupBatchDetailTracks').enable();Grid.getColumnModel().setHidden(0,true);Ext.get('menu').setVisible(false);geo_Fence.hide();upload_picture.hide();gps_devices.show()}store.load({params:{start:0,limit:pageSize,layername:layername}});pictureStore.load()}}});var paging=new Ext.PagingToolbar({pageSize:pageSize,store:store,displayInfo:true,displayMsg:'Displaying track {0} - {1} of {2}',emptyMsg:"No tracks to display",items:['-',pagingCombo,'-',{id:'customizeBtnTb',text:'Customize',iconCls:'x-icon-page_refresh',tooltip:'Customize Detail Tracks',scope:this,handler:function(){winCustom.show()}},'-',{id:'taskRefresh_btn',text:'Start',iconCls:'x-icon-page_refresh',tooltip:'Start & Stop Tracks Automatic Refresh',handler:function(){if(runningTask===null){runner.start(task);runningTask=1;Ext.getCmp('taskRefresh_btn').setText('Stop')}else if(runningTask==1){runner.stop(task);runningTask=null;Ext.getCmp('taskRefresh_btn').setText('Start');}}}]});var viewport=new Ext.Viewport({layout:"border",items:[{title:localize('SpottedAnywhereEverywhere'),region:'center',id:'center_panel',layout:"fit",margins:'2 2 0 0',bbar:paging,items:[{html:'<div id="map" style="width:100%; height:100%"></div>',hideBorders:true,border:false,bodyBorder:false}]}]});function cleanUp(){Ext.getCmp('grid_panel').getStore().removeAll();map.clearOverlays()}function init(){if(GBrowserIsCompatible()){map=new GMap2(document.getElementById("map"));map.setCenter(new GLatLng(39.91,116.38),2);var customUI=map.getDefaultUI();customUI.controls.maptypecontrol=false;customUI.controls.menumaptypecontrol=true;map.setUI(customUI);GEvent.addListener(map,"click",function(overlay,point){if(!overlay&&geoFencePolygon.length>0){var side="";for(var i=0;i<geoFencePolygon.length;i++){if(GPolygonContains(geoFencePolygon[i],point)){side=geoFenceAttributes[i].geoname;break}}if(side!==""){map.openInfoWindowHtml(point,side)}}});createGeoFence.show();createGeoFence.hide();map2=new GMap2(document.getElementById("geoMap"),{draggableCursor:'default',draggingCursor:'pointer'});map2.setCenter(new GLatLng(39.91,116.38),2);map2.setUI(customUI);mylistener=GEvent.addListener(map2,'click',mapClick);GEvent.addListener(map2,"mousemove",function(point){mousemovepoint=point});if(navigator.appVersion.indexOf("MSIE 8")!=-1){ieversion=8}clearMap()}else{Ext.Msg.alert('Sorry','The Google Maps API is not compatible with this browser.')}}function addGeoPoints(){if(geopoints!=null){var pts=[];var id=geopoints[1].id;for(n=0;n<geopoints.length;n++){if(id!=geopoints[n].id){geoFencePolygon.push(pts);map.addOverlay(new GPolyline(pts,'#FF0000',3,0.4));pts=[];id=geopoints[n].id}pts.push(new GLatLng(geopoints[n].lat,geopoints[n].lon));for(m=0;m<geo.length;m++){if(!geoFenceAttributes.HasValue(geo[m])){geoFenceAttributes.push(geo[m])}}}geoFencePolygon.push(pts);map.addOverlay(new GPolyline(pts,'#FF0000',3,0.4))}}function addMarkers(){var tid=Cookies.get('id');if(spotted.length){var bounds=new GLatLngBounds();var pts=[];InGeo=[];for(n=0;n<spotted.length;n++){var point=new GLatLng(spotted[n].lat,spotted[n].lon);pts.push(point);bounds.extend(point);var inside="";if(geoFencePolygon.length>0){for(var i=0;i<geoFencePolygon.length;i++){if(GPolygonContains(geoFencePolygon[i],point)){inside=inside+geoFenceAttributes[i].geoname+';';if(!InGeo.HasValue(inside)){InGeo.push(inside)}}}}var marker=createMarker(point,spotted[n],spotted[n].mark,inside,tid);if(toggleBallon==0){map.addOverlay(marker)}marker1.push(marker);if(spotted[n].alert==1&&spotted[n].msgspeed>0&&tid==0){showAlerts("Alert",spotted[n].fullname,spotted[n].msgspeed,spotted[n].msgdatetime)}}zoom=map.getZoom();if(tid==0){if(isLoaded==null){map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds));isLoaded=1;}}if(togglePoly==1&&tid>0){map.addOverlay(new GPolyline(pts,'#FF0000',3,0.4));midArrows(pts.reverse());}}}function createMarker(point,data,rank,inside,tid){var nIcon=new GIcon(cm_baseIcon);var markerOpts={icon:nIcon,title:spotted[n].fullname+" spotted at "+data.msgdatetime+"; "+data.target+"; "+data.msgspeed+" Km; "+inside,id:data.id,text:data.smsname,textColor:"000000",bgColor:"CCCCFF",draggable:true};if(rank>0&&rank<100){if(data.alert=="1"||data.alert=="2"||data.alert=="3"){nIcon.imageOut="markers/"+param_iconTypeSpeeding+"/marker"+rank+".png";nIcon.imageOver="markers/"+param_iconOverType+"/marker"+rank+".png";nIcon.image=nIcon.imageOut;markerOpts.bgColor="F5A9F2"}else if(data.alert=="4"||data.alert=="5"){nIcon.imageOut="markers/"+param_iconTypeSOS+"/marker"+rank+".png";nIcon.imageOver="markers/"+param_iconOverType+"/marker"+rank+".png";nIcon.image=nIcon.imageOut;markerOpts.bgColor="FF0000"}else if(data.target!="Moving"){nIcon.imageOut="markers/"+param_iconTypeStop+"/marker"+rank+".png";nIcon.imageOver="markers/"+param_iconOverType+"/marker"+rank+".png";nIcon.image=nIcon.imageOut;markerOpts.bgColor="8ea3fb"}else{nIcon.imageOut="markers/"+param_iconType+"/marker"+rank+".png";nIcon.imageOver="markers/"+param_iconOverType+"/marker"+rank+".png";nIcon.image=nIcon.imageOut;markerOpts.bgColor="9ce71a"}}else{if(data.alert=="1"||data.alert=="2"||data.alert=="3"){nIcon.imageOut="markers/"+param_iconTypeSpeeding+"/blank.png";nIcon.imageOver="markers/"+param_iconOverType+"/blank.png";nIcon.image=nIcon.imageOut}else if(data.alert=="4"||data.alert=="5"){nIcon.imageOut="markers/"+param_iconTypeSOS+"/blank.png";nIcon.imageOver="markers/"+param_iconOverType+"/blank.png";nIcon.image=nIcon.imageOut}else if(data.target!="Moving"){nIcon.imageOut="markers/"+param_iconTypeStop+"/blank.png";nIcon.imageOver="markers/"+param_iconOverType+"/blank.png";nIcon.image=nIcon.imageOut}else{nIcon.imageOut="markers/"+param_iconType+"/blank.png";nIcon.imageOver="markers/"+param_iconOverType+"/blank.png";nIcon.image=nIcon.imageOut}}if(data.diff>9){markerOpts.bgColor="FFCC99"}var marker=null;if(tid=="0"&&spotted.length>1&&removePopupMarker){marker=new PopupMarker(point,markerOpts)}else{marker=new GMarker(point,markerOpts)}GEvent.addListener(marker,"click",function(){var rowIndex=0;store.each(function(storeRec){if(marker.id==storeRec.data.id){Grid.getSelectionModel().selectRow(rowIndex,true);Grid.getView().focusRow(rowIndex);Grid.getView().focusEl.focus();return}rowIndex++})});GEvent.addListener(marker,"mouseover",function(){marker.setImage(marker.getIcon().imageOver)});GEvent.addListener(marker,"mouseout",function(){marker.setImage(marker.getIcon().imageOut);});GEvent.addListener(marker,"infowindowopen",function(){marker.setImage(marker.getIcon().imageOver)});GEvent.addListener(marker,"infowindowclose",function(){marker.setImage(marker.getIcon().imageOut)});return marker}function mapClick(section,clickedPoint){if(!finishediting){if(editing===true){stopediting()}if(ieversion===8){pushpoint(mousemovepoint)}else{if(section===null){pushpoint(clickedPoint)}else{if(polyPoints.length===0){var j=section.getVertexCount();for(var i=0;i<j;i++){polyPoints[i]=section.getVertex(i);}polyShape=section;}}}}}function pushpoint(point){if(!circlemode){polyPoints.push(point);drawCoordinates()}else{if(circlemode){clickforCircle(point)}}}function clickforCircle(point){if(!centerMarker){centerMarker=new GMarker(point,{title:"Start"});map2.addOverlay(centerMarker)}else if(!radiusMarker){radiusMarker=point;collectcirclepoints();map2.removeOverlay(centerMarker);centerMarker=null;radiusMarker=null;drawCoordinates()}}function deleteLastPoint(){if(editing===true){stopediting()}if(!circlemode){if(polyPoints){polyPoints.pop();drawCoordinates()}}}function closePoly(){if(!circlemode){if(polyPoints.length>2){polyPoints.push(polyPoints[0])}drawCoordinates()}}function editlines(){if(editing===true){stopediting();drawCoordinates()}else{if(polyPoints.length>0){polygonMode=false;drawCoordinates();polyShape.enableEditing();editlistener=GEvent.addListener(polyShape,'lineupdated',updateCoordinates);editing=true;if(polyShape2!==null){polyShape2.enableEditing()}}}}function updateCoordinates(){var j=polyShape.getVertexCount();for(var i=0;i<j;i++){polyPoints[i]=polyShape.getVertex(i);}}function collectcirclepoints(){var zoom=map2.getZoom();var normalProj=G_NORMAL_MAP.getProjection();var centerPt=normalProj.fromLatLngToPixel(centerMarker.getPoint(),zoom);var radiusPt=normalProj.fromLatLngToPixel(radiusMarker,zoom);with(Math){var radius=floor(sqrt(pow((centerPt.x-radiusPt.x),2)+pow((centerPt.y-radiusPt.y),2)));for(var a=0;a<361;a+=10){var aRad=a*(PI/180);y=centerPt.y+radius*sin(aRad);x=centerPt.x+radius*cos(aRad);var p=new GPoint(x,y);polyPoints.push(normalProj.fromPixelToLatLng(p,zoom))}}}function clearMap(){if(editing==true)stopediting();map2.clearOverlays();subclean()}function subclean(){nooverlayvariables();removesomemodes();Ext.ComponentMgr.get('nocircle').enable();Ext.ComponentMgr.get('polyCombo').enable();Ext.ComponentMgr.get('deleteLastPoint').enable();Ext.ComponentMgr.get('closePoly').enable();Ext.ComponentMgr.get('editLines').enable();Ext.ComponentMgr.get('nextShape').enable();finishediting=false}function removesomemodes(){Ext.getCmp("nocircle").setValue(false);circlemode=false}function nooverlayvariables(){polyShape=null;polyShape2=null;polyPoints=[]}function stopediting(){GEvent.removeListener(editlistener);polyShape.disableEditing();editing=false;if(polyShape2!=null){polyShape2.disableEditing()}}function showCodeintextarea(){if(notext==false){notext=true}else{notext=false}}function removeshape(){map2.removeOverlay(polyShape);nooverlayvariables()}function nextshape(){if(polyPoints.length>0){}}function setTool(){if(toolID==1)polygonMode=false;if(toolID==2)polygonMode=true;if(polyPoints.length>1){drawCoordinates()}if(editing==true)stopediting()}function drawCoordinates(){if(polyPoints.length>0){if(polyShape)map2.removeOverlay(polyShape);if(polyShape2)map2.removeOverlay(polyShape2);if(marker2)map2.removeOverlay(marker2);if(polygonMode){polyShape=new GPolygon(polyPoints,polygonlineColorcur,polygonLineWeightcur,lineopacitycur,fillColorcur,fillopacitycur)}else{polyShape=new GPolyline(polyPoints,lineColorcur,lineWeightcur,lineopacitycur)}marker2=new GMarker(polyPoints[0]);map2.addOverlay(marker2);map2.addOverlay(polyShape)}}function roundVal(val){if(val.toString().length<9){return val}else{var dec=6;var result=Math.round(val*Math.pow(10,dec))/Math.pow(10,dec);return result}}function getopacityhex(opa){var hexopa=opacityhexcur;if(opa==0)hexopa="00";if(opa==.0)hexopa="00";if(opa==.1)hexopa="1a";if(opa==.2)hexopa="33";if(opa==.3)hexopa="4d";if(opa==.4)hexopa="66";if(opa==.5)hexopa="80";if(opa==.6)hexopa="9a";if(opa==.7)hexopa="b3";if(opa==.8)hexopa="cd";if(opa==.9)hexopa="e6";if(opa==1.0)hexopa="ff";if(opa==1)hexopa="ff";return hexopa}var dt=new Ext.util.DelayedTask();dt.delay(300,function(){Ext.get('loading').remove();Ext.get('loading-mask').fadeOut({remove:true});Cookies.set('id','0');init();winLogin.show();toolID=polyCombo.setValue(1);Ext.getCmp("nocircle").setValue(false);circlemode=false;GeoAction.setValue(2);setTool();},this);var task={run:function(){if(refreshUI<4){Ext.Ajax.request({url:"data/sos.ashx",callback:function(options,success,response){var obj=Ext.decode(response.responseText);if(obj!=null&treeText!=null){if(obj.success){alarmSound.play();store.load({params:{start:0,limit:pageSize,layername:layername}})}else{alarmSound.stop()}}}})}else{Grid.getStore().reload();refreshUI=0}refreshUI++},interval:15000}});soundManager.ontimeout(function(){});soundManager.onerror=function(){}
