Shared = {

    Settings: {
        EniroMapApiBasic : {
           activeLayers: [Eniro.Map.LAYER_MAP, Eniro.Map.LAYER_AERIAL, Eniro.Map.LAYER_HYBRID ],
           layerSelector: true,
           zoomBar: true,
           language: 'da_dk'
        },
        
        EniroMapApiExtended : {
           activeLayers: [Eniro.Map.LAYER_MAP, Eniro.Map.LAYER_AERIAL, Eniro.Map.LAYER_HYBRID ], //Eniro.Map.LAYER_OBLIQUE ],
           layerSelector: true,
           zoomBar: true,
           language: 'da_dk'
        }
    },
    
    Data : {
    
        /**
        * Make a route request
        */
        Route : function(_c1,_c2) {
           // object to pass to route engine
           var data = {
                waypoints: '' + _c1.lon + ',' + _c1.lat + ';' + _c2.lon + ','+ _c2.lat +'', 
                res: Math.round(map.getResolution()), //1,highest resolution
                instr: true,
                contentType: 'json', 
                lang: 'dk'
            };
            // route!
            jQuery.jsonp({
                url: Eniro.AppNode.appUrl('/api/route'),
                data: data,
                callbackParameter: 'callback',
                success: OpenLayers.Function.bind(this.onRouteQuerySuccess, this),
                error: OpenLayers.Function.bind(this.onRouteQueryError, this)                
            });
        },
        
        /**
        * Handles result from successful routing
        */
        onRouteQuerySuccess : function(data) {    
	        //Removes previous routeGeometry and startpoi
	        map.wfs.removeFeatures(routeFeature);
	        if(marker1 != undefined){
	            map.removeFeature(marker1);
	        }
	        // add geometry to map
	        routeFeature = map.getGeometryFeature(data);
	        map.wfs.addFeatures(routeFeature);
	       
	        var page = window.location.pathname;
	        var popuptext = '';
	        var style;
	        //For Map.aspx: show buttons when successfull
            if(page.toLowerCase() === '/map.aspx'){
                jQuery('#routeSearchContainer').show()
                popuptext = 'Start<br />' + jQuery('#fromaddress').val();
        	    style = 'green';
            }else if(page.toLowerCase() === '/routedescription.aspx'){//For Routedescription.aspx: show description when successfull
                jQuery('#descContainer').empty();
                showRouteDescription(data, 'descContainer');
                if(!reverted){
                    popuptext = 'Start<br />' + jQuery('#FromImgGif').attr('title');
        	        style = 'green';
        	    }else{
        	        popuptext = 'Slut<br />' + jQuery('#FromImgGif').attr('title');
        	        style = 'red';
        	    }
            }
            //Create Marker
            marker1 = new Eniro.Feature.PopupFeature(c1.clone().transform(rproj, map.getProjectionObject()), {}, {
                popupContents: function() { return popuptext; },
                mouseover: true,
                defaultStyle: style
            });
            //Add Marker to Map
            map.addFeature(marker1);
           
            if(newRoute){
                map.zoomToExtent(routeFeature.bounds.transform(rproj, map.getProjectionObject()),false);
                newRoute = false;
 	       }
        },

        /**
         * Handles result from failed routing
         */
        onRouteQueryError : function() {
            OpenLayers.Console.log("Routing failed");
        }, 
        
        /**
        * Reverse Geocode
        */
        ReverseGeocode : function(_c) {
           var data = {
                p: '' + _c.lon + ',' + _c.lat, //wgs84 
                distance: 5000,
                type: 'any',
                contentType: 'json', 
                country: 'dk',
                hits: 1
            };
            // geocode!
            jQuery.jsonp({
                url: Eniro.AppNode.appUrl('/api/revgeocode'),
                //url: 'http://map.krak.dk.test.eniro.net/api/revgeocode',
                data: data,
                callbackParameter: 'callback',
                success: OpenLayers.Function.bind(this.onRevGeocodeQuerySuccess, this),
                error: OpenLayers.Function.bind(this.onRevGeocodeQueryError, this)                
            });
        },
        
        /**
        * Handles result from successful routing
        */
        onRevGeocodeQuerySuccess : function(data) {    
	       //Nearest address/street or city
	       var rows = new Array();
	        if(data.search.geocodingResponse.totalHits > 0){//If Responsedata exists	
	            var _data = data.search.geocodingResponse.locations;
		        for(var i=0; i<1; i++){
        	        rows[i] = { data:_data[i], value:(_data[i].roadname + ' ' + _data[i].housenumber + ', ' + _data[i].zip + ' ' + _data[i].postarea), result:(_data[i].roadname + ' ' + _data[i].housenumber + ', ' + _data[i].zip + ' ' + _data[i].postarea) };
    		
	                createTravelPlaneLink(_data[i].roadname,
                        _data[i].housenumber,
                        _data[i].zip,
                        _data[i].postarea,
                        $('#fromaddress').val()
	                );
		        }
  	        }else{
                rows = [];
            }
        
	        //return data;
	    },
	    
        /**
         * Handles result from failed routing
         */
        onRevGeocodeQueryError : function() {
            OpenLayers.Console.log("Reverse geocoding failed");
        } 
    },

    Util : {
        SplitWktMultiPoint : function(multipoint)
        {
            var tmpstr = multipoint.replace(/MULTIPOINT/, '');
            tmpstr = tmpstr.replace(/[()]/g, '');

            var ptrn = /[,\s+]/;
            var result = tmpstr.split(ptrn);
            return result;
        },

        // Gets querystring value.
        GetQs : function getQsVar(name)
        {
            var query = location.search.substring(1);
            var pairs = query.split('&');
            var queryString;

            for (var i=0; i < pairs.length; i++)
            {
                queryString = pairs[i].split('=');
                if (name == queryString[0])
                {
                    return queryString[1];
                }
            }
            return null;
        },
        
        TransformZlTcToEmap : function(zlTc)
        {
            switch(zlTc)
            {
                case 0: {return 17} //Not a bug
                case 1: {return 17} //Not a bug
                case 2: {return 17}
                case 3: {return 16}
                case 4: {return 15}
                case 5: {return 14}
                case 6: {return 13}
                case 7: {return 12}
                case 8: {return 11}
                case 9: {return 10}
                case 10: {return 9}
                case 11: {return 8}
                case 12: {return 7}
                case 13: {return 7} //Not a bug
                case 14: {return 6}
                case 15: {return 5}
                case 16: {return 4}
                default: {return 17}
            }
        },

        TransformZlEmapToTc : function(zlEmap)
        {
            switch(zlEmap)
            {
                case 4: {return 16}
                case 5: {return 15}
                case 6: {return 14}
                case 7: {return 13}
                case 8: {return 11} //Not a bug
                case 9: {return 10}
                case 10: {return 9}
                case 11: {return 8}
                case 12: {return 7}
                case 13: {return 6}
                case 14: {return 5}
                case 15: {return 4}
                case 16: {return 3}
                case 17: {return 2}
                default: {return 2}
            }
        }
    }
};

