/*
 * Copyright © 2008  Neogeo Technologies, Toulouse, France

 * This file is part of Opencarto web map publishing system project
 *
 * Opencarto is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Opencarto is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with Opencarto.  If not, see <http://www.gnu.org/licenses/>.
 */
Ext.BLANK_IMAGE_URL = '/opencarto_media/js/ext-2.2/resources/images/default/s.gif';
Ext.namespace('opencarto');
opencarto.tm = null; // timeout
opencarto.gisobjects = {};
opencarto.layercounter = 0;
opencarto.lastControlUsed = 'olControlNavigation';


Ext.onReady(function() {
    var url_layers = 'layers/';
    
    if( globalParams.view != -1 && globalParams.position != -1 ){
    	url_layers += '?view=' + globalParams.view + '&position=' + globalParams.position;
    }else if( globalParams.view != -1 ){
    	url_layers += '?view=' + globalParams.view;
    }else if( globalParams.position != -1 ){
    	url_layers += '?position=' + globalParams.position;
    }
    // chargement du flux JSON d'initialisation
    Ext.Ajax.request({
		url: url_layers,
		success:function(res,opt) {   
		    eval('opencarto.gisobjects = ' + res.responseText);
		    // ajout éventuel du fond Google
		    if( globalParams.googlelayer ){
		        opencarto.gisobjects.layers.unshift({"name":"Google Layer","label":"Couche Google","alwaysInRange":false,"url":"",
		        "params":{"type":globalParams.googlelayer,'sphericalMercator': true},
		        "options":{"layerid":0,"alpha":true,"opacity":70,"showInLegend":true,"resolutions":globalParams.resolutions,"buffer":0,"exporter":false,"visibility":true,"groupe":0,
		            "groupname":"GOOGLE","grouporder":"0","rang":1,"typegeo":"RASTER","sld":"null","search":false}});
		    }
		    // ajout éventuel du fond OSMap
		    if( globalParams.osmlayer ){
		        opencarto.gisobjects.layers.unshift({"name":"OpenStreetMap Layer","label":"Couche OpenStreetMap","alwaysInRange":false,"url":"",
		        "params":{"type":globalParams.osmlayer,'sphericalMercator': true},
		        "options":{"layerid":0,"alpha":true,"opacity":100,"showInLegend":true,"resolutions":globalParams.resolutions,"buffer":0,"exporter":false,"visibility":true,"groupe":0,
		            "groupname":"OSM","grouporder":"0","rang":1,"typegeo":"RASTER","sld":"null","search":false}});
		    }
		    
		    // chargement des couches dans la carte (cf OCmap.js)
	 	    opencarto.loadLayers();
	 	    // chargement éventuel du panneau de contrôle des couches
		    if (opencarto.layerControl)
	 			opencarto.layerControl.load();
	 	// affichage éventuel de la légende
		    if (opencarto.legend)
		    	opencarto.legend.show();
		},
		failure: function(res,opt){
		   	Ext.Msg.show({
				title: oMessages.error_title,
				msg: oMessages.error_load_layers,buttons: Ext.Msg.OK,icon: Ext.MessageBox.ERROR
           		});
		   	return;
		}   
	});
   // FIN DE LA FONCTION AJAX DE CHARGEMENT DES COUCHES

	// début "vrai" du script, car le contenu de la fonction Ajax est effectué après
	// Préparation des options de  l'objet carte OpenLayers
   opencarto.createMap();
    
    // Création du panel cartographique
    opencarto.mapPanel = new Ext.ol.OLPanel(mapOptions);

 	
   
   // création du contenu des panneaux en fonction des modules chargés
    if (opencarto.legend){
    	opencarto.legendPanel = new Ext.Panel({
            id: 'legendPanel',
            title: oMessages.legend_txt,
            iconCls: 'legend',
            collapsible:true,
            border:true,
            frame:false,
            autoScroll:true,
            autoHeight:true,
            titleCollapse: true
    	});
    
    }
    else{
    	// on crée quand même un panel bidon, pour pouvoir créér le panneau gauche (à moins que...)
    	opencarto.legendPanel = new Ext.Panel({
            id: 'legendPanel',
            title: '',
            collapsible:true,
            collapsed:true,
            border:true,
            frame:false,
            autoScroll:true,
            autoHeight:true,
            titleCollapse: true
    	})
    }
    
    opencarto.toolbar = new Ext.Toolbar();
    opencarto.Mask = new Ext.LoadMask(Ext.getBody(), {msg:oMessages.wait_msg});
    opencarto.bbar = new Ext.StatusBar({
        defaultText: oMessages.ready_txt ,
        autoHeight:true,
        id: 'basic-statusbar',
        busyText:oMessages.loading_txt,
        items: [{xtype: 'tbtext',text: oMessages.coord_sys + ' : ' + globalParams.projectionName}, ' ', ' ']
    });
    
    opencarto.drawbar = new Ext.Toolbar();
    
    
    opencarto.mainPanel = new Ext.Panel({
        region:'center',
        layout: 'border',
        border: false,
        frame: false,
        bbar:opencarto.bbar,
        items:[{
            region: 'center',
            tbar:opencarto.toolbar,
            title: globalParams.mapLibelle,
            layout: 'fit',
            collapsible: true,
            collapsed: false,
            //split: true,            
            minSize: 100,
            maxSize: 500,
            items: [opencarto.mapPanel]
        },{
            x : '380',
            y : '25',
            anchor : '100% 100%',
            tbar: opencarto.drawbar 
        }]

    })
    // ajout du datagrid si un module le nécessite
    if (opencarto.layerControl && opencarto.displayDataGrid){
    	opencarto.mainPanel.items.add(opencarto.datagrid.panel);
    }
    // création du panneau gauche si nécessaire
    if (opencarto.legend || opencarto.layerControl || opencarto.position || opencarto.vues){
	    opencarto.leftPanel = new Ext.Panel({
            region:'west',
            id:'west-panel',
            //title:'OUTILS',
            split:true,
            width: 200,
            minSize: 175,
            maxSize: 400,
            animate:true,
            collapsible: false,
            collapseMode: 'mini',
            collapsed:false,
            border:false,
            margins:'0 0 0 0',
            autoScroll:true,
            items: [opencarto.legendPanel],
            listeners:{
                collapse:opencarto.resizeMap,
                expand:opencarto.resizeMap
            }
	    	
	    })
	}
    
    
    //images pour anima
    var myimages = '<table width="100%">'+
						'<tr>'+
							'<td id="white" align=left colspan=3 border=0>'+
								'<a href="http://www.animaweb.org" target="_blank">'+
									'<img src="/opencarto_media/images/AIN_LogoTexte.png" width=380 height=100/>'+
								'</a>'+
							'</td>'+
							'<th align=center colspan=3>Atlas économique<br> de la Méditerranée<p>Mediterranean Economic Atlas</p></th>'+
							'<td id="white" align=right colspan=1><img src="/opencarto_media/images/logo-ue.gif" width=92 height=45><br>'+
								'<a href="http://www.invest-in-med.eu" target="_blank">'+
									'<img src="/opencarto_media/images/logoinvest.png" width=146 height=40/>'+
								'</a>'+
							'</td>'+
						'</tr>'+
						'<tr>'+
							'<td align=left width="14%"><a href="http://www.animaweb.org" target="_blank">Accueil</a></td>'+
							'<td id="blue" align=center width="14%">MedMaps</td>'+
							'<td align=center width="14%">'+
								'<a href="http://www.animaweb.org/uploads/Guide%20d\'utilisation%20SIG_12_8_10_2(2).pdf" target="_blank">'+
									'<b>Guide d\'utilisation</b>'+
								'</a>'+
							'</td>'+
							'<td align=center width="14%"></td>'+
							'<td align=left width="14%"></td>'+
							'<td align=center width="14%">&nbsp;</td>'+
							'<td align=right width="14%">'+
								'<a href="http://www.iciatechnologies.com" target="_blank">ICIA Technologies&nbsp;'+
									'<img src="/opencarto_media/images/icialogo.jpg" width=35 height=33 align="top"/>'+
								'</a>'+
							'</td>'+
						'</tr>'+
						'</table>'
						
    
    opencarto.logoPanel = new Ext.Panel({
            region:'north',
            id:'logo-panel',
            //width: 600,
            height: 140,
            collapsible: false,
            border:false,
            margins:'0 0 0 0',
            bodyCfg: {
				tag: 'center',
				cls: 'x-panel-logoheader',
				html:  myimages
   
			}
	    	
	    })
	    
	    opencarto.iciaPanel = new Ext.Panel({
            region:'south',
            id:'icia-panel',
            //width: 600,
            height: 28,
            collapsible: false,
            border:false,
            margins:'0 0 0 0',
            bodyCfg: {
				//tag: 'center',
				cls: 'x-panel-logofooter',
				html:  '<table><tr><td><a href="http://www.ic-ia.com" target="_blank"><img src="/opencarto_media/images/icia.jpg" width=20 height=20 align="middle"/>&nbsp; D&eacute;velopp&eacute; par ICIA Technologies</a></td></tr></table>'
   
			}
	    	
	    })
	
    
    // ajout éventuel du panneau des positions
    if (opencarto.position){
    	opencarto.leftPanel.insert(0,opencarto.position.positionPanel);
		// et de la fonction d'ajout si l'utilisateur est administrateur
    	if (globalParams.userAdmin === true){
    		opencarto.position.positionForm.addButton({text: oMessages.add_pos, tooltipType:'title', tooltip: oMessages.add_pos, handler: opencarto.addPosition}) }
    	//opencarto.position.positionForm.findById('pos').setValue('parcs');
    
    }
    
 // ajout éventuel du formulaire vues
    if (opencarto.vues){
    	opencarto.leftPanel.insert(0,opencarto.vues.vuesPanel);
    	// et de la fonction d'ajout si l'utilisateur est administrateur
    	if (globalParams.userAdmin === true){
    		opencarto.vues.vuesForm.addButton({text: oMessages.add_view, tooltipType:'title', tooltip: oMessages.add_view, handler: opencarto.vues.addVue}) }
    }
 
    // préparation du contenu de la vue principale
    viewportItems = new Array(opencarto.mainPanel);
    //Logos	
    viewportItems.unshift(opencarto.logoPanel);
    viewportItems.unshift(opencarto.iciaPanel);
    if (opencarto.leftPanel){
    	viewportItems.unshift(opencarto.leftPanel);
    } 
    // création du viewport (vue principale)
    opencarto.viewport = new Ext.Viewport({
            layout:'border',
            items:viewportItems
    });
    
    // ajout éventuel du bouton 'Administration' en bas à droite
    if (globalParams.userAdmin === true){
        opencarto.bbar.addButton({text: oMessages.admin_txt, tooltipType:'title', tooltip:oMessages.admin_module, handler: opencarto.adminHandler});
    }   
    // chargement du contenu par défaut de la Toolbar (toolbar.js)
	opencarto.loadToolbar();

    
 // ajout éventuel de la barre d'outils de dessin
    if ( opencarto.geoEditor ){
    	opencarto.geoEditor.loadtools();
    }
    // mise en attente de la statusbar du bas
    opencarto.bbar.showBusy();
    // à l'initialisation, OpenLayers n'arrive pas à récupérerle x,y du curseur, alors on l'aide :
    // hack pour bon redimensionnement du MapPanel au lancement, et le recalcul du x,y du curseur par OpenLayers.fuck
   
    if (window.outerWidth)
        window.outerWidth = window.outerWidth - 1;
    else if (document.documentElement.clientWidth){
        try{
        window.resizeTo(document.documentElement.clientWidth-1,document.documentElement.clientHeight + 160);
        }
        catch(e){
        	
        }
    }
});





