/*
 * Vroomtrap
 * Copyright(c) 2009, Nubesoft, LLC.
 */
Ext.namespace('nubesoft.google');
nubesoft.google.Vroomtrap = function() {
  var tabLinks = ['/help/browser-compatibility','/downloads', '/help/windows-mobile', '/help/iphone','/help/website'];
  var videoLinks = ['/video/website-getting-started', '/video/iphone-getting-started'];
  var trapCluster;
  var websiteHelpPanelDisabled = true;
  var iphoneHelpPanelDisabled = true;
  var winmoHelpPanelDisabled = true;
  var subscriptionPanelDisabled = true;
  var downloadPanelDisabled = true;
  var browserPanelDisabled = true;
	var baseIcon = new GIcon(); 
	var urlToLoadAfterMap = "";
  baseIcon.shadow = '/static/images/shadow.png';
  baseIcon.iconSize = new GSize(32, 32);
  baseIcon.shadowSize = new GSize(49.0, 32.0);
  baseIcon.iconAnchor = new GPoint(16, 32);
  baseIcon.infoWindowAnchor = new GPoint(16, 1);
	
  var clusterIcon = new GIcon(); 
  clusterIcon.image = '/static/images/cluster.png';
  clusterIcon.shadow = '/static/images/shadow.png';
  clusterIcon.iconSize = new GSize(32, 32);
  clusterIcon.shadowSize = new GSize(49.0, 32.0);
  clusterIcon.iconAnchor = new GPoint(16, 32);
  clusterIcon.infoWindowAnchor = new GPoint(16, 1);
  return {
    openNewPanoramaWindow: function(markerLat, markerLng, trapID) {
      var panWindow = new Ext.Window({
        layout: 'fit',
      	title: trapID+' Trap Street View',
      	width:744,
      	height:450,
        resizable: false,
        plain    : true,
        iconCls: 'icnstreetview',
        layout   : 'border',
        items: [{
            region: 'center',
            xtype: 'gmappanel',
        		gmapType: 'panorama',
        		id: 'panwindow',
        		setCenter: {
        			lat: markerLat,
        			lng: markerLng
        		},
        		buttons: [{
                text    : 'Close',
                handler : function(){
                  panWindow.hide();
                }
            }]
        },
        new Ext.Panel({
          region      : 'south',
          closeAction: 'hide',
          split       : false,
          width       : 728,
          height      : 90,
          collapsible : false,
          margins     : '0 0 0 0',
          cmargins    : '0 0 0 0',
          bodyStyle   :'padding:0px 0px 0px 0px',
          html        : '<iframe width="728px" height="90px" align="left" scrolling="no" frameborder="0" src="/ads/adblock728.html"/>'
        })
        ]   
      });
    	panWindow.show();      
    },
    hideLoadingMask: function() {
        Ext.get('loading').remove();
        Ext.get('loading-mask').fadeOut({remove: true});        
    },

    changeView: function(viewType) {
      Ext.getCmp('map').changeView(viewType);
    },

    onStreetClick: function(btn) {
      this.toggleOverlay(btn, this.streetViewOverlay);
      if (!btn.pressed) {
        Ext.getCmp('panorama').disable();
      }
    },

    onTrafficClick: function(btn) {
      this.toggleOverlay(btn, this.trafficOverlay);
    },

    onSpeedTrapsClick: function(btn){
      if (btn.pressed){
        nubesoft.google.Vroomtrap.loadMarkers();
      } else {
        trapCluster.removeMarkers();
        Ext.getCmp('right-statusbar').defaultText = "0 Traps Loaded";
        Ext.getCmp('right-statusbar').clearStatus({useDefaults:true});
      }
    },
    
    toggleOverlay: function(btn, overlay) {
      var map = Ext.getCmp('map').getMap();
      if (btn.pressed) {
        map.addOverlay(overlay);
      } else {
        map.removeOverlay(overlay);
      }	
    },
    
    addTab: function (tabname){
      if (tabname == "/help/website" && websiteHelpPanelDisabled) {
          Ext.getCmp('vroomtraptabs').add({
              title    : 'Website Help',
              id       : 'websiteHelp',
              closable : true,
              iconCls  : 'icnwww',
              html     : '<iframe width="100%" height="100%" align="left" frameborder="0" src="/support/website"/>',
              listeners: {
              	destroy: function(ct, pnl) {
              		websiteHelpPanelDisabled = true;
              	},
                beforeshow : function(tabPanel) {
                    SWFAddress.setValue("/help/website");
                    SWFAddress.setTitle(Trap.constants.siteTitle+"Website Help");
                },
                beforeclose: function(tabPanel) {
              	  SWFAddress.back();
                }
              }
          }).show();
          Ext.getCmp('vroomtraptabs').setActiveTab('websiteHelp');
          websiteHelpPanelDisabled = false;
      } else if (tabname == "/help/iphone" && iphoneHelpPanelDisabled) {
          Ext.getCmp('vroomtraptabs').add({
              title    : 'iPhone Help',
              id       : 'iphoneHelp',
              closable : true,
              iconCls  : 'icnapple',
              html     : '<iframe width="100%" height="100%" align="left" frameborder="0" src="/support/iphone"/>',
              listeners: {
              	destroy: function(ct, pnl) {
              		iphoneHelpPanelDisabled = true;
              	},
                beforeshow : function(tabPanel) {
                    SWFAddress.setValue("/help/iphone");
                    SWFAddress.setTitle(Trap.constants.siteTitle+"iPhone Help");
                },
                beforeclose: function(tabPanel) {
              	  SWFAddress.back();
                }
              } 
          }).show();
          Ext.getCmp('vroomtraptabs').setActiveTab('iphoneHelp');
          iphoneHelpPanelDisabled = false;       
      } else if (tabname == "/help/windows-mobile" && winmoHelpPanelDisabled) { 
          Ext.getCmp('vroomtraptabs').add({        
              title    : 'Windows Mobile Help',
              id       : 'windowsMobileHelp',
              closable : true,
              iconCls  : 'icnwindows',
              html     : '<iframe width="100%" height="100%" align="left" frameborder="0" src="/support/windows-mobile"/>',
              listeners: {
              	destroy: function(ct, pnl) {
              		winmoHelpPanelDisabled = true;
              	},
                beforeshow : function(tabPanel) {
                    SWFAddress.setValue("/help/windows-mobile");
                    SWFAddress.setTitle(Trap.constants.siteTitle+"Windows Mobile Help");
                },
                beforeclose: function(tabPanel) {
              	  SWFAddress.back();
                }
              }     
          }).show();
          Ext.getCmp('vroomtraptabs').setActiveTab('windowsMobileHelp');
          winmoHelpPanelDisabled = false;
      } else if (tabname == "/subscription" && subscriptionPanelDisabled) {
          Ext.getCmp('vroomtraptabs').add({   
            title    : 'Subscription',
            id       : 'subscriptionPanel', 
            closable : true,
            iconCls  : 'icncalendarmonth',
            html     : '<iframe width="100%" height="100%" align="left" frameborder="0" src="'+nubesoft.google.Vroomtrap.subscriptionServiceURL+'"/>',
            listeners: {
               destroy: function(ct, pnl) {
                 subscriptionPanelDisabled = true;
             	},
              beforeshow : function(tabPanel) {
                   SWFAddress.setValue("/subscription");
                   SWFAddress.setTitle(Trap.constants.siteTitle+"Subscription");
               },
               beforeclose: function(tabPanel) {
             	  SWFAddress.back();
               }
            }     
          }).show();
          Ext.getCmp('vroomtraptabs').setActiveTab('subscriptionPanel');
          subscriptionPanelDisabled = false;
      } else if (tabname == "/downloads" && downloadPanelDisabled) { 
        Ext.getCmp('vroomtraptabs').add({
            title    : 'Downloads',
            id       : 'downloads',
            closable : true,
            iconCls  : 'icndownload',
            html     : '<iframe width="100%" height="100%" align="left" frameborder="0" src="/downloads"/>',
            listeners: {
            	destroy: function(ct, pnl) {
            		downloadPanelDisabled = true;
            	},
              beforeshow : function(tabPanel) {
                  SWFAddress.setValue("/downloads");
                  SWFAddress.setTitle(Trap.constants.siteTitle+"Downloads");
              },
              beforeclose: function(tabPanel) {
            	  SWFAddress.back();
              }
            } 
        }).show(); 
        Ext.getCmp('vroomtraptabs').setActiveTab('downloads');
        downloadPanelDisabled = false;
      } else if (tabname == "/help/browser-compatibility" && browserPanelDisabled) {

          Ext.getCmp('vroomtraptabs').add({
              title    : 'Browser Compatibility',
              id       : 'browserCompatability',
              closable : true,
              iconCls  : 'icnhtmlvalid',
              html     : '<iframe width="100%" height="100%" align="left" frameborder="0" src="/support/browser"/>',
              listeners: {
              	destroy: function(ct, pnl) {
              		browserPanelDisabled = true;
              	},
                beforeshow : function(tabPanel) {
                    SWFAddress.setValue("/help/browser-compatibility");
                    SWFAddress.setTitle(Trap.constants.siteTitle+"Browser Compatibility");
                },
                beforeclose: function(tabPanel) {
              	  SWFAddress.back();
                }
              } 
          }).show();
          Ext.getCmp('vroomtraptabs').setActiveTab('browserCompatability');
          browserPanelDisabled = false;
        }
    },

    loadMarkers: function(){
      if (nubesoft.google.Vroomtrap.notLoadingTraps){
        Ext.getCmp('right-statusbar').showBusy();
        nubesoft.google.Vroomtrap.notLoadingTraps = false;
      
        var map = Ext.getCmp('map').getMap();
        mapBounds = map.getBounds();
        
        northEast = mapBounds.getNorthEast().toUrlValue(6);
        souhtWest = mapBounds.getSouthWest().toUrlValue(6);
         
        if (!trapCluster) trapCluster = new ClusterMarker(map, {clusterMarkerTitle:'Click to zoom in and see %count traps',fitMapToMarkers:false,intersectPadding:20,clusterMarkerIcon:clusterIcon});
        	    
        exml = new EGeoXml("exml", map, "/traps?frmt=xml&devi=ws&grve="+nubesoft.google.Vroomtrap.graveyard+"&nhet="+northEast+"&shwt="+souhtWest,{addmarker:function(marker){
          GEvent.addListener(marker, 'click', function() {
            SWFAddress.setValue("/speedtrap/"+marker.getTitle());
            SWFAddress.setTitle(Trap.constants.siteTitle+"Speed Trap ID: "+marker.getTitle());
            });
           GEvent.addListener(marker, "infowindowopen", function() {
             var streetViewCallback = function(result) {
               if (result) {
                 document.getElementById('streetViewLink').innerHTML=" | <a href=\"javascript:nubesoft.google.Vroomtrap.openNewPanoramaWindow("+marker.getLatLng().lat()+","+marker.getLatLng().lng()+",'"+marker.getTitle()+"');\">Street View</a>";
               } else {
                 document.getElementById('streetViewLink').innerHTML="&nbsp;";
               }
             }
             nubesoft.google.Vroomtrap.streetViewClient.getNearestPanoramaLatLng( new GLatLng(marker.getLatLng().lat(),marker.getLatLng().lng()), streetViewCallback)
          }); 
        },iwwidth: 350,baseicon:baseIcon,nozoom:true});
        exml.parse();        
               
        GEvent.addListener(exml, "parsed", function() {
          trapCluster.removeMarkers();
          Ext.getCmp('right-statusbar').clearStatus();
          if (exml.gmarkers.length > 100){
            Ext.getCmp('right-statusbar').setStatus({text:"Over "+nubesoft.google.Vroomtrap.maxTraps+" traps have been found, <b>Zoom In</b> to see traps."});
            Ext.popup.msg('Too Many Traps', 'Over '+nubesoft.google.Vroomtrap.maxTraps+' traps have been found, <b>Zoom In</b> to see traps.');
            trapCluster.removeMarkers();
          } else if (exml.gmarkers.length == 1){
            trapCluster.addMarkers(exml.gmarkers);
            trapCluster.refresh();
            Ext.getCmp('right-statusbar').setStatus({text:exml.gmarkers.length + " Trap Loaded"});
          } else if (exml.gmarkers.length > 1){
            trapCluster.addMarkers(exml.gmarkers);
            trapCluster.refresh();
            Ext.getCmp('right-statusbar').setStatus({text:exml.gmarkers.length + " Traps Loaded"});
          } else {
            Ext.getCmp('right-statusbar').setStatus({text:exml.gmarkers.length + " Traps Loaded"});
          }
          nubesoft.google.Vroomtrap.notLoadingTraps = true;
        });      	    

      }
       
    },
  
      init: function() {
        var dirn = new GDirections();
        this.streetViewOverlay = new GStreetviewOverlay();
        this.streetViewClient = new GStreetviewClient();
        this.trafficOverlay = new GTrafficOverlay();
      	var toolbar = [{
 		        text: 'Address Search',
 		        id: 'searchaddy',
 		        iconCls: 'icnsrchaddy',
 		        toggleGroup: 'search',
 		        allowDepress: false,
 		        pressed: true                     
 		        },{  
 		        text: 'Trap Search',
 		        id: 'searchtrap',
 		        iconCls: 'icnsrchtrap',
 		        toggleGroup: 'search',
 		        allowDepress: false	        
 	        },'->',{
 	            text: 'Traffic',
 	            id: 'traffic',
 	            iconCls: 'icncar',
 	            enableToggle: true,
 	            handler: this.onTrafficClick,
 	            scope: this		        		
 	        },'  ',{
 	            text: 'Street',
 	            id: 'street',
 	            iconCls: 'icnstreet',
 	            enableToggle: true,
 	            handler: this.onStreetClick,
 	            scope: this		        		
 	        },'  ',{
 	            text: 'Speed Traps',
 	            id: 'speedtraps',
 	            iconCls: 'icntrapcamera',
 	            enableToggle: true,
 	            pressed: true,
 	            handler: this.onSpeedTrapsClick,
 	            scope: this		        		
 		    },'-',' ',{
 		        text: 'Map',
 		        iconCls: 'icnmap',
 		        enableToggle: true,
 		        allowDepress: false,
 		        pressed: true,
 	            toggleGroup: 'view',
 	            handler: this.changeView.createDelegate(this, [G_NORMAL_MAP])		        		
 	        },'  ',{
 		        text: 'Satellite',
 		        iconCls: 'icnsatellite',
 		        enableToggle: true,
 		        allowDepress: false,
 		        toggleGroup: 'view',		        
 	            handler: this.changeView.createDelegate(this, [G_SATELLITE_MAP])		        		
 	        },'  ',{
 	            text: 'Hybrid',
 	            iconCls: 'icnhybrid',
 	            enableToggle: true,
   		        allowDepress: false,
 	            toggleGroup: 'view',		        
 	            handler: this.changeView.createDelegate(this, [G_HYBRID_MAP])		        		
 	        },'  ',{
 	            text: 'Terrain',
 	            iconCls: 'icnterrain',
 	            enableToggle: true,
   		        allowDepress: false,
 	            toggleGroup: 'view',		        
 	            handler: this.changeView.createDelegate(this, [G_PHYSICAL_MAP])		        		
 	      }];
 	      var startLat = 40;
 	      var startLng = -94;
 	      var startZoom = 4;
        if (google.loader.ClientLocation && google.loader.ClientLocation.latitude && google.loader.ClientLocation.longitude) {
            startLat = google.loader.ClientLocation.latitude;
            startLng = google.loader.ClientLocation.longitude;
            startZoom = 12;
        }
       	var viewport = new Ext.Viewport({
       	  title: 'GMap Panel',
          layout: 'border',
          items: [
              Ext.toppanel.toppanel,
              new Ext.TabPanel({
                  region    : 'center',
                  id        : 'vroomtraptabs',
                  enableTabScroll:true,
                  layoutOnTabChange: true,
                  activeTab : 0,
                  width       : nubesoft.google.Vroomtrap.winWidth,
                  height      : nubesoft.google.Vroomtrap.winHeight-125,
            			plugins: new Ext.ux.TabCloseMenu(),
            			items : [{
                    title    : 'Speed Trap Map',
                    xtype: 'gmappanel',
                    region: 'center',
                    id: 'map',
                    zoomLevel: startZoom,
                    gmapType: 'map',
                    tbar: toolbar,
                    featureConfig: ['enableContinuousZoom','enableDoubleClickZoom', 'enableScrollWheelZoom'],
                    mapTypes: G_DEFAULT_MAP_TYPES.concat(G_PHYSICAL_MAP),
                    controls: [new GLargeMapControl3D(),new GScaleControl(),new GOverviewMapControl()],
                    setCenter: {
                      lat: startLat,
                      lng: startLng
                    },
                    listeners: {
                      show : function(tabPanel) {
                          SWFAddress.setValue("/map");
                          SWFAddress.setTitle(Trap.constants.siteTitle+"Speed Trap Map"); 
                      }
                    }
                  }]
              })
              ,new Ext.StatusBar({
                   defaultText: '0 Traps Loaded',
                   region: 'south',
                   id: 'right-statusbar',
                   statusAlign: 'right', // the magic config
                   items: ['&#169; 2009 Vroomtrap&#153;', ' ', ' ']
              })
          ],
          listeners: {
              beforerender : function() {
                urlToLoadAfterMap = SWFAddress.getValue();
                SWFAddress.setValue("/map");
                SWFAddress.setTitle(Trap.constants.siteTitle+"Speed Trap Map");                
              },
              afterlayout : function() {
                loadedPath = urlToLoadAfterMap;
                
                if ( tabLinks.contains(loadedPath) ) {
                  nubesoft.google.Vroomtrap.addTab(loadedPath);
                }
                if (loadedPath == '/video/website-getting-started') {
                  Ext.videowindow.videowindow.openVideoWindow(0);
                } else if (loadedPath == '/video/iphone-getting-started') {
                  Ext.videowindow.videowindow.openVideoWindow(1);
                } else if (loadedPath == '/about'){
                  Ext.aboutwindow.aboutwindow.openAboutWindow();
                }       
                  
                 if (speedtrappath = loadedPath.match('^/speedtrap/(VT[0-1024]-\\d*$)')) {
                   setTimeout( "nubesoft.google.Vroomtrap.findTrap('"+speedtrappath[1]+"')", 2000);
                 }
              }
          }
       	});

        
        var map = Ext.getCmp('map').getMap();

        viewport.doLayout();
        new GKeyboardHandler(map);

      	GEvent.addListener(map,"singlerightclick",function(pixel,tile, overlay) {
      		nubesoft.google.Vroomtrap.clickedPixel = pixel;
      		point = map.fromContainerPixelToLatLng(pixel);
      		value = point.toUrlValue(6).split(",");
      		Ext.getCmp('addTrapLat').setValue(value[0]);
          Ext.getCmp('addTrapLng').setValue(value[1]);
      		dirn.loadFromWaypoints([point.toUrlValue(6),point.toUrlValue(6)],{getPolyline:true});
      	});	
      	
      	GEvent.addListener(map, "move", function() {
      		nubesoft.google.Vroomtrap.contextMenu.hide(true);
      	});
      	
        GEvent.addListener(map, "dragend", function() {
          if (map.getZoom() > 10) {
            nubesoft.google.Vroomtrap.loadMarkers(); 
          } else {
            trapCluster.removeMarkers();
            Ext.getCmp('right-statusbar').setStatus({text:"<table border='0' cellspacing='2' cellpadding='2'><tr><td><img src='/static/images/icn/icn_warn.png'></td><td>Please zoom in closer to see speed traps.</td></tr></table>"});
          }
        }); 
        GEvent.addListener(map, "zoomend", function() {
          if (map.getZoom() > 10) {
            nubesoft.google.Vroomtrap.loadMarkers(); 
          } else {
            trapCluster.removeMarkers();
            Ext.getCmp('right-statusbar').setStatus({text:"<table border='0' cellspacing='2' cellpadding='2'><tr><td><img src='/static/images/icn/icn_warn.png'></td><td>Please zoom in closer to see speed traps.</td></tr></table>"});
          }
        });
        GEvent.addListener(map, "moveend", function() {
          if (Ext.getCmp('linkBox')) Ext.getCmp('linkBox').destroy();
        });       	
      	GEvent.addListener(map, "click", function() {
      		nubesoft.google.Vroomtrap.contextMenu.hide(true);
      		if (Ext.getCmp('linkBox')) Ext.getCmp('linkBox').destroy();
      	});
      	
      	GEvent.addListener(dirn,"load", function() {
      	  if (nubesoft.google.Vroomtrap.loggedIn){
    	      Ext.getCmp('show-addtrap').enable();
  	      }
      		var x=nubesoft.google.Vroomtrap.clickedPixel.x;
      		var y=nubesoft.google.Vroomtrap.clickedPixel.y+125;

          if (x > map.getSize().width - 163) { x = map.getSize().width - 163 }
      		if (y > map.getSize().height - 190) { y = map.getSize().height - 190 }
      		
          nubesoft.google.Vroomtrap.contextMenu.showAt([x,y]);
        });
      	GEvent.addListener(dirn,"error", function() {
      		var x=nubesoft.google.Vroomtrap.clickedPixel.x;
      		var y=nubesoft.google.Vroomtrap.clickedPixel.y+125;

          if (x > map.getSize().width - 163) { x = map.getSize().width - 163 }
      		if (y > map.getSize().height - 190) { y = map.getSize().height - 190 }
      		
          nubesoft.google.Vroomtrap.contextMenu.showAt([x,y]);
          Ext.popup.msg('Warning', 'The trap you are adding may not be on a road.');
      	});

      	this.loadMarkers();
        var msgIndex = 0;
        var msg = Ext.get('msg'),
        	msgInner = Ext.get('msg-inner'), 
        	active = null;

        msgInner.addClassOnOver('msg-over');
      	msg.on('click', function(){
      	  if (active.url) window.location = active.url;
      	  if (active.vid) Ext.videowindow.videowindow.openVideoWindow(active.vid);
      	  if (active.tip){
      	    if (!Ext.getCmp('quickTipBox') || !Ext.getCmp('quickTipBox').isVisible()){
        	    new Ext.Tip({
                  target: 'msg',
                  id: 'quickTipBox',
                  title: active.text,
                  autoHide: false,
                  closable: true,
                  draggable:true,
                  width:218,
                  html: active.tip
              }).showBy('msg');
            }
      	  }
      	});

        function doUpdate(){
        	msgInner.update(active.text);
        	msg.slideIn('t');
        }
        function showMsg(index){
        	if(!msgInner.hasClass('msg-over')) {
        		active = nubesoft.google.Vroomtrap.quickTips[index];
        		if(msg.isVisible()){
        			msg.slideOut('t', {callback: doUpdate});
        		}else{
        			doUpdate();	
        		}			
        	}
        }
        setInterval(function(){
        	msgIndex = nubesoft.google.Vroomtrap.quickTips[msgIndex+1] ? msgIndex+1 : 0;
        	showMsg(msgIndex);		
        }, 30000);
        showMsg(0);
        nubesoft.google.Vroomtrap.loadPreLoad();  
      }     
    }
}();
nubesoft.google.Vroomtrap.clickedPixel;
nubesoft.google.Vroomtrap.notLoadingTraps = true;
nubesoft.google.Vroomtrap.loggedIn = false;
nubesoft.google.Vroomtrap.graveyard = 'False';
nubesoft.google.Vroomtrap.quickTips = [{text: 'Welcome to Vroomtrap'}];
nubesoft.google.Vroomtrap.winWidth = 0;
nubesoft.google.Vroomtrap.winHeight = 0;
nubesoft.google.Vroomtrap.maxTraps = 100;
nubesoft.google.Vroomtrap.zoomInHeldAlert;
nubesoft.google.Vroomtrap.startedFind = true;


nubesoft.google.Vroomtrap.loadPreLoad = function(){
    Ext.Ajax.request({
    	url : 'proxy' , 
    	params : { v : 'preload' },
    	method: 'GET',
    	success: function ( result, request ) { 
    	  var preloadInfo = Ext.util.JSON.decode(result.responseText);
        if (preloadInfo.welcome == "true") { // Cookie
          Ext.welcomewindow.welcomewindow.openWelcomeWindow(preloadInfo.msgdate);
        }
        if (preloadInfo.maxtraps != 0){
          nubesoft.google.Vroomtrap.maxTraps = preloadInfo.maxtraps;
        }
    	},
    	failure: function ( result, request) { 
    		Ext.MessageBox.alert('Failed', result.responseText); 
    	} 
    });
};

nubesoft.google.Vroomtrap.findTrap = function(trapID){
  if (nubesoft.google.Vroomtrap.startedFind) {
    nubesoft.google.Vroomtrap.startedFind = false;
    Ext.getCmp('searchtrap').toggle();
    Ext.toppanel.searchField.setRawValue(trapID);
    Ext.toppanel.searchField.onTrigger2Click();
  }
};

nubesoft.google.Vroomtrap.loadQuicktips = function() {  
  Ext.Ajax.request({
  	url : 'proxy' , 
  	params : { v : 'quicktips' },
  	method: 'GET',
  	success: function ( result, request ) { 
  	  nubesoft.google.Vroomtrap.quickTips = Ext.util.JSON.decode(result.responseText);    
  	},
  	failure: function ( result, request) { 
  		Ext.MessageBox.alert('Failed', result.responseText); 
  	} 
  });
}();

nubesoft.google.Vroomtrap.navHandler = function(direction){
	var l = Ext.getCmp('subscriptionPanel').getLayout();
	var i = l.activeItem.id.split('subscription-')[1];
	var next = parseInt(i) + direction;
	l.setActiveItem(next);
	Ext.getCmp('card-prev').setDisabled(next==0);
	Ext.getCmp('card-next').setDisabled(next==4);
};    

nubesoft.google.Vroomtrap.windowSize = function() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  nubesoft.google.Vroomtrap.winWidth = myWidth;
  nubesoft.google.Vroomtrap.winHeight = myHeight;
}();

nubesoft.google.Vroomtrap.contextMenu = new Ext.menu.Menu({
    items:[{
		text    : 'Add Trap',
		iconCls : 'iconadd',
		disabled: true,
		id      : 'show-addtrap',
		handler : function(item) {
      nubesoft.google.Vroomtrap.contextMenu.hide(true);
      Ext.addtrapwindow.addtrapwindow.show();
      Ext.addtrapwindow.addtrapwindow.center();
			}
	},{
		text    : 'Refresh Traps',
		iconCls : 'iconrefresh',
    handler : function(item) {
                            nubesoft.google.Vroomtrap.loadMarkers();
     }
	},{
		text    : 'Toggle Dead Traps',
		iconCls : 'iconswitch',
    handler : function(item) {
                        if (nubesoft.google.Vroomtrap.graveyard == 'False'){
                          nubesoft.google.Vroomtrap.graveyard = 'True';
                        } else {
                          nubesoft.google.Vroomtrap.graveyard = 'False';
                        }
                        nubesoft.google.Vroomtrap.loadMarkers();              
     }
	}, '-', {
		text    : 'Zoom In',
		iconCls : 'iconzoomin',
		handler : function(item) {
                        Ext.getCmp('map').getMap().zoomIn();
			}
	},{
		text    : 'Zoom Out',
		iconCls : 'iconzoomout',
		handler : function(item) {
                        Ext.getCmp('map').getMap().zoomOut();
			}
	},{
		text    : 'Zoom Here',
		iconCls : 'iconzoom',
		handler : function(item) {
		                var map = Ext.getCmp('map').getMap();
                    var point = map.fromContainerPixelToLatLng(nubesoft.google.Vroomtrap.clickedPixel);
                    map.zoomIn(point,true);
			}
	},{
		text    : 'Center Map Here',
		iconCls : 'iconcenter',
		handler : function(item) {
		                var map = Ext.getCmp('map').getMap();
                        var point = map.fromContainerPixelToLatLng(nubesoft.google.Vroomtrap.clickedPixel);
                        map.panTo(point);

			}
	} 
]});

Ext.popup = function(seconds){
    var msgCt;

    function createBox(t, s){
        return ['<div class="msg">',
                '<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
                '<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3>', t, '</h3>', s, '</div></div></div>',
                '<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
                '</div>'].join('');
    }
    return {
        msg : function(title, format){
            pauseTime = (seconds != null && seconds < 3)?seconds:3;
            if(!msgCt){
                msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true);
            }
            msgCt.alignTo(document, 't-t');
            var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1));
            var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true);
            m.slideIn('t').pause(pauseTime).ghost("t", {remove:true});
        },

        init : function(){
            var t = Ext.get('exttheme');
            if(!t){ // run locally?
                return;
            }
            var theme = Cookies.get('exttheme') || 'aero';
            if(theme){
                t.dom.value = theme;
                Ext.getBody().addClass('x-'+theme);
            }
            t.on('change', function(){
                Cookies.set('exttheme', t.getValue());
                setTimeout(function(){
                    window.location.reload();
                }, 250);
            });

            var lb = Ext.get('lib-bar');
            if(lb){
                lb.show();
            }
        }
    };
}();
Array.prototype.contains = function(obj) {
  var i = this.length;
  while (i--) {
    if (this[i] === obj) {
      return true;
    }
  }
  return false;
}

Ext.onReady(nubesoft.google.Vroomtrap.init, nubesoft.google.Vroomtrap, nubesoft.google.Vroomtrap.loadQuicktips, nubesoft.google.loadComboBoxes, Ext.popup, nubesoft.google.Vroomtrap.windowSize, nubesoft.google.Vroomtrap.navHandler, nubesoft.google.Vroomtrap.findTrap);

   
