/*
 * Ext JS Library 2.2.1
 * Copyright(c) 2006-2009, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

/*
 * SPOT Simple Viewer
 * 
 * contact@apem.asso.fr
 * http://www.apem.asso.fr
 * date de dernière modification : 13/03/2009
 */ 
 

Ext.onReady(function(){
	
	Ext.BLANK_IMAGE_URL = './ext-2.2.1/resources/images/default/s.gif';
	Ext.QuickTips.init();
	
	//
	// Initialization
	//
	
	// Extension de la librairie Ajax pour permettre le mode synchrone
	Ext.lib.Ajax.request = function(method, uri, cb, data, options) {
		this.initHeader('X-UA-Compatible', 'IE=7', false);
		if(options){
			var hs = options.headers;
			if(hs){
				for(var h in hs){
					if(hs.hasOwnProperty(h)){
						this.initHeader(h, hs[h], false);
					}
				}
			}
			if(options.xmlData){
				this.initHeader('Content-Type', 'text/xml', false);
				method = 'POST';
				data = options.xmlData;
			}else if(options.jsonData){
				this.initHeader('Content-Type', 'text/javascript', false);
				method = 'POST';
				data = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData;
			}
			if (options.sync) {
				return this.syncRequest(method, uri, cb, data);
			}
		}
		return this.asyncRequest(method, uri, cb, data);
	};

	Ext.lib.Ajax.syncRequest = function(method, uri, callback, postData){
		var o = this.getConnectionObject();

		if (!o) {
			return null;
		}
		else {
			o.conn.open(method, uri, false);

			if (this.useDefaultXhrHeader) {
				if (!this.defaultHeaders['X-Requested-With']) {
					this.initHeader('X-Requested-With', this.defaultXhrHeader, true);
				}
			}

			if(postData && this.useDefaultHeader){
				this.initHeader('Content-Type', this.defaultPostHeader);
			}

			if (this.hasDefaultHeaders || this.hasHeaders) {
				this.setHeader(o);
			}

			o.conn.send(postData || null);
			this.handleTransactionResponse(o, callback);
			return o;
		}
	};
	
	Ext.Ajax.request({
		url : './config.json',
		method: 'GET',
		sync: true,
		success: function (response, opts) { 
			var res = Ext.util.JSON.decode(response.responseText);
			layoutType = res.layout;
			widthBorder = parseFloat(res.width);
			heightBorder = parseFloat(res.height);
			latCenter = parseFloat(res.lat_center);
			lngCenter = parseFloat(res.lng_center);
			zoomLevel = parseFloat(res.zoom);
			extendPercent = parseFloat(res.extend_percent);
			
			var before = "'";
			var after = "";
			
			// modifie les chaines de  caractères map_control, map_option et map_layer contenues dans le fichier config.json en tableaux exploitables par l'extension Ext.ux.GMapPanel
			var temp = res.map_control;
			temp = temp.substring(1, temp.length-1);
			temp = temp.replace(new RegExp(before,"g"),after);
			var reg = RegExp(",+","g");
			gmapControl = temp.split(reg);
			
			temp = res.map_option;
			temp = temp.substring(1, temp.length-1);
			temp = temp.replace(new RegExp(before,"g"),after);
			reg = RegExp(",+","g");
			gmapOption = temp.split(reg);
			
			temp = res.map_layer;
			temp = temp.substring(1, temp.length-1);
			temp = temp.replace(new RegExp(before,"g"),after);
			reg = RegExp(",+","g");
			var arrayTemp = temp.split(reg);
			gmapLayer = new Array();
			for (i=0;i<arrayTemp.length;i++){
				if (arrayTemp[i] === 'G_NORMAL_MAP'){
					gmapLayer.push(G_NORMAL_MAP);
				}
				if (arrayTemp[i] === 'G_SATELLITE_MAP'){
					gmapLayer.push(G_SATELLITE_MAP);
				}
				if (arrayTemp[i] === 'G_HYBRID_MAP'){
					gmapLayer.push(G_HYBRID_MAP);
				}
				if (arrayTemp[i] === 'G_PHYSICAL_MAP'){
					gmapLayer.push(G_PHYSICAL_MAP);
				}
				if (arrayTemp[i] === 'G_SATELLITE_3D_MAP'){
					gmapLayer.push(G_SATELLITE_3D_MAP);
				}
			}
		}
	});
	
	//
	// Map Panel
	//
	var mapPanel = new Ext.ux.GMapPanel({
		id: 'carto',
		title: '&nbsp;',
		region: 'center',
		zoomLevel: zoomLevel,
		gmapType: 'map',
		mapConfOpts: gmapOption,
		mapControls: gmapControl,
		layersDefault: gmapLayer,
		extendPercent: extendPercent,
		setCenter: {
			lat: latCenter,
			lng: lngCenter
		}
	});
	
	
	//
	// Tree Panel
	//
	var treePanel = new Ext.tree.TreePanel({
    	id: 'tree-panel',
		region: 'east',
    	title: '&nbsp;',
        split: true,
        height: 370,
        minSize: 150,
		width: 200,
        autoScroll: true,
		collapsible: false,
        
        rootVisible: false,
		autoScroll: true,
		useArrows: true,
		root: new Ext.tree.AsyncTreeNode(),
		
		dataUrl: './function/getTreeJson.php',
        
		listeners: {
			'click': function(n){
				n.getUI().toggleCheck();
				if (n.leaf){
					Ext.getCmp('carto').addTreeLayers(this.getChecked());
				}
			},
			'checkchange': function(n){
				if (n.leaf){
					Ext.getCmp('carto').addTreeLayers(this.getChecked());
				}
			}
		}
		
    });
	
	if (layoutType == 'border'){
		
		// Border Panel
		var border = new Ext.Panel({
			layout: 'border',
			width: widthBorder,
			height: heightBorder,
			items: [treePanel, mapPanel],
			renderTo: 'content_explore_map' // div html
		});
		
	}
	else if (layoutType == 'viewport'){
		
		// Viewort Panel
		var viewport = new Ext.Viewport({
			layout:'border',
			items: [treePanel, mapPanel]
		});
	}
	
	
});
