/*
 * Ext Map Window
 * Copyright(c) 2008, David Davis
 * 
 */
/**
 * @author David Davis
 */

Ext.namespace('Ext.ux');

Ext.ux.GMapWindow = Ext.extend(Ext.Window, {

    initComponent: function() {

        this.mapPanel = new Ext.ux.GMapPanel({
                xtype: 'gmappanel',
                region: 'center',
                zoomLevel: this.zoomLevel || 12,
                gmapType: this.gmapType || 'map',
                mapConfOpts: this.mapConfOpts || [
                    'enableScrollWheelZoom',
                    'enableDoubleClickZoom',
                    'enableDragging'
                ],
                mapControls: this.mapControls || ['GSmallMapControl'],
                mapTypes: this.mapTypes || [G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP,G_PHYSICAL_MAP],
                setCenter: this.setCenter || {
                    geoCodeAddr: 'USA',
                    marker: {title: 'USA'}
                },
                markers: this.markers || []
        });
        
        this.mapMenu = new Ext.menu.Menu({
            id: 'mainmenu',
            items: [],
            listeners: {
                beforeshow: this.buildTypeMenu.createDelegate(this),
                itemclick: this.onItemCheck.createDelegate(this)
            }
        });

        var defConfig = {
            layout: 'fit',
            title: '',
            maximizable: true,
            width: 400,
            height: 400,
            minheight: 140,
            minwidth: 200,
            gmapChangeMapTypeAtToolbar: true,
            items: [ this.mapPanel ],
            hasExternalTypeControl: false,
            externalTypeControlMapID: '',
            externalTypeControlSatelliteID: '',
            tbar: new Ext.Toolbar({
            	id: 'gmapwindow_change_view_bar',
                items: [{
                    text: 'Görünüm Değiştir',
                    menu: this.mapMenu
                }]
            }),
            bbar: new Ext.StatusBar({
                defaultText: '',
                id: 'statusbar',
                items: [{ text: 'Görünüm Değiştir', menu: this.mapMenu }, ' ', ' ' ]
            })
        };

        Ext.applyIf(this,defConfig);
        
        this.addListener('render', function(){
        	if(this.gmapChangeMapTypeAtToolbar!=true){
        		if( this.getTopToolbar().getId() == 'gmapwindow_change_view_bar' ) {
        			this.getTopToolbar().destroy();
        		}
        	}
        });
        
        this.addListener('beforeclose', function(gmapwindow){
        	gmapwindow.hide();
        	return false;
        });
        
        
        Ext.ux.GMapWindow.superclass.initComponent.call(this);        
    },

    buildTypeMenu: function() {
        var map = this.mapPanel.getMap();
        var t = map.getMapTypes();
        this.mapMenu.removeAll();
        var curType = map.getCurrentMapType();
        for ( var i = 0, len = t.length; i < len; i++ ) {
            var name = t[i].getName();
            this.mapMenu.addMenuItem({
                text: name,
                checked: ( ( t[i] == curType ) ? true : false ),
                group: 'maptype'
            });
        }
    },

    onItemCheck: function(item, checked) {
        if ( checked ) {
            var map = this.mapPanel.getMap();
            var t = map.getMapTypes();
            for ( var i = 0, len = t.length; i < len; i++ )
                if ( t[i].getName() == item.text ) {
                    map.setMapType(t[i]);
                    if(this.hasExternalTypeControl) {
                    	switch(i) {
                		case 0:
                			Ext.get(this.externalTypeControlSatelliteID).dom.style.display = 'block';
                			Ext.get(this.externalTypeControlMapID).dom.style.display = 'none';
                			break;
                		default:
                			Ext.get(this.externalTypeControlSatelliteID).dom.style.display = 'none';
                			Ext.get(this.externalTypeControlMapID).dom.style.display = 'block';
                		}
                    }
                    
                }
        }
    }
});

Ext.reg('gmapwindow',Ext.ux.GMapWindow);
