Joao's version of sapo map driver.
authorJan <jan@horde.org>
Thu, 4 Nov 2010 12:52:44 +0000 (12:52 +0000)
committerJan <jan@horde.org>
Thu, 4 Nov 2010 12:52:44 +0000 (12:52 +0000)
horde/js/hordemap/sapo.js

index 53b80f8..ccb7c21 100755 (executable)
  * SAPO specific version of HordeMap javascript.
  *
  * Copyright 2009-2010 The Horde Project (http://www.horde.org/)
- *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
  *
  * @author Michael J. Rubinsky <mrubinsk@horde.org>
- */
-
-/* Include the sapo maps javascript */
-document.write('<script src="http://js.sapo.pt/Bundles/SAPOMapsAPI-1.1.js"></script>');
-
-
-
-var isIE = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
+ * @João Machado <joao.machado@co.sapo.pt>
+*/
 
 HordeMap.Map.SAPO = Class.create({
-    map: null,
-    mapMarker: null,
-    markers: [],
-    markersLayer: null,
-
-    selectedMarker: null,
-    addingAMarker: false,
-    imgDiv: null,
-    updateImgDivFunc: null,
-    cancelFunc: null,
-    firstUpdate: true,
-    markerOut: true,
-    lockMarker: false,
-    panTimer: null,
-    borders: null,
-    BORDER_TOP: 120,
-    BORDER_LEFT: 25,
-    BORDER_BOTTOM: 5,
-    BORDER_RIGHT: 10,
-    MOVE_X: 100,
-    MOVE_Y: 100,
-    TIMER_INTERVAL: 100,
-    search: null,
-    navigation: null,
-    sliderOpen: 0,
-    markAction: 0,
-
-// COMPARE WITH: /fasmounts/webmail/www/mai.webmail.labs.sapo.pt/webmail/sapoMapas/js/sapoMapasWidget.js :>> function init(){
-    initialize: function(opts)
-    {
-
-            var o = {
-                    showLayerSwitcher: true,
-                    delayed: false,
-                    layers: [],
-                    fallThrough: false
-            };
-    
-            this.opts = Object.extend(o, opts || {});
-         
-
-            this.borders = {left:10, top:50, right:10, bottom:10};
-
-            this.map = new SAPO.Maps.Map('kronolithEventMap',this.opts);
-
-            this.map.zoomTo(5);
-
-            if (!window.isIE) {
-                this.map.setMapCenter(new OpenLayers.LonLat(-16.652530624659608, 37.288788193170646));
-            }
-
-            this.map.addControl(new SAPO.Maps.Control.MapType2());
-            this.navigation = new SAPO.Maps.Control.Navigation2()
-            this.map.addControl(this.navigation);
-
-            this.markersLayer = new SAPO.Maps.Markers('Markers');
-            this.map.addMarkers(this.markersLayer);
-
-            OpenLayers.Util.extend(this, opts);
-
-            this.search = new SAPO.Maps.Search(this.map, 'kronolithEventResults', { borders : {left: 260, top:40} });
-            this.search.registerEvent('completed',this, this._onCompleted);
-            this.search.registerEvent('timeout',this, this._onTimeOut);
-            this.search.registerEvent('error',this, this._onError);
-            this.search.registerEvent('selected', this, this._onSelected);
-
-            this.closeSliderDiv = $('closeSlider');
-            this.closeSliderDiv.onclick = this.removeSearch.bindAsEventListener(this, 'click');
-            this.openSliderDiv = $('openSlider');
-            this.openSliderDiv.onclick = this.openSlider.bindAsEventListener(this, 'click');
-    },
-
-       searchPOIs: function(evt) {
-
-               OpenLayers.Event.observe($('kronolithEventResults'), 'click', OpenLayers.Event.stop);
-               OpenLayers.Event.observe($('kronolithEventResults'), 'dblclick', OpenLayers.Event.stop);
-               OpenLayers.Event.observe($('kronolithEventResults'), 'mousemove', OpenLayers.Event.stop);
-
-               this.clearResults();
-               var query = $F('kronolithEventLocation');
-               if(query.length == 0) return false;
-               this.lastSearch=query;
-               this.sliderOpen = 0;
-               this.openSlider('click');
-               this.search.search(query, { showDashboard : false, categorizedSearch: true, resultsPerPage : 3, allowPaging: true } );
-       },
-
-   clearResults: function(){
-          if (this.search == null) return;
-          this.search.cancel();
-          this.search.clear();
-    },
-
-
-   _onSelected: function (search) {
-          var index = search.selectedIdx;
-          document.getElementById('kronolithEventLocationLon').value = search.pois[0].POIs[index].Longitude;
-          document.getElementById('kronolithEventLocationLat').value = search.pois[0].POIs[index].Latitude;
-       },
-
-   _onCompleted: function (pois)
-   {
-          if(!this.search.getTotalResults()) {
-                  KronolithCore.showNotifications([ { type: 'horde.warning', message: 'O SAPO Mapas ainda não suporta endereços fora de Portugal. Por favor confirme se digitou correctamente o endereço.' } ]);
-          }
-   },
-
-
-   openSlider: function (evt)
-   {
-        if(this.sliderOpen)
-        {
-                 evt = evt || window.event;
-                 OpenLayers.Event.stop(evt);
-
-                 this.navigation.div.style.left = '10px';
-                 $('kronolithEventResults').style.marginLeft='-202px';
-                 this.sliderOpen = 0;
-        }
-        else
-        {
-                if (this.navigation == null) return;
-                this.navigation.div.style.left = '220px';
-                $('kronolithEventResults').style.marginLeft='0px';
-                $('kronolithEventResults').style.display='block';
-                this.sliderOpen = 1;
-        }
-   },
-
-   removeSearch: function (evt)
-   {
-        this.navigation.div.style.left = '10px';
-        evt = evt || window.event;
-        OpenLayers.Event.stop(evt);
-        this.sliderOpen = 0;
-        $('kronolithEventResults').style.display='none';
-        this._removeMarkers();
-        this.clearResults();
-   },
-
-    /**
-     * Set the map center and zoom level.
-     *
-     * @param object p   {lon:, lat:}
-     * @param integer z  Zoom level
-     *
-     * @return void
-     */
-
-   setCenter: function(p, z)
-   {
-        this.map.setMapCenter(new OpenLayers.LonLat(p.lon, p.lat), z);
-   },
-
-    /**
-     * Display the map if it is not visible, or move to a new container.
-     * (Not implemented in SAPO driver).
-     *
-     * @param n
-     * @return
-     */
-
-    display: function(n)
-    {
-        return;
-    },
-
-    destroy: function()
-    {
-        // fix navigation bar
-        this.clearResults();
-        var resultDiv = $w('category_results');
-        var titleDiv = $w('search_title_header');
-        if(resultDiv.lenght > 0) { resultDiv.remove(); }
-        if(titleDiv.lenght > 0) { titleDiv.remove(); }
-
-        if(this.map==null) return;
-        this.map.destroy();
-    },
-
-
-    /**
-     * Add a marker to the map.
-     *
-     * @param object p {lat:, lon: }
-     * @param object o Options object
-     * @param object e  Event handlers
-     *                  {context: <context to bind to> , click: , mouseover: <etc...>}
-     */
-
-    addMarker: function(lonlat,o,e){
-
-        if (!lonlat) {
-            this.markAction = 1;
-            if (this.addingAMarker) {
-                return;
-            }
-
-            this._removeMarkers();
-
-            this.map.events.register('mouseout', this, this.mouseout);
-            this.map.events.register('mousemove', this, this.mousemove);
-            this.map.events.register('click', this, this.markerAnchored);
-
-            this.addDivImg();
-            this.addingAMarker = true;
-        } else if (this.markAction == 1) {
-
-           if ( window.isIE) {
-                var marker = new SAPO.Maps.Marker(lonlat, {draggable: true});
-            } else {
-                var marker = new SAPO.Maps.Marker(new OpenLayers.LonLat(lonlat.lon, lonlat.lat), o || {});
-            }
-            
-            this.markersLayer.addMarker(marker);
-            this.markers.push(marker);
-
-            
-            if (!window.isIE) {
-               this.setCenter(lonlat,this.map.getZoom());
-            }
-            
-            e = e || {};
-            e.context = e.context || marker;
-            if (e.click) { marker.registerEvent('click', e.context, e.click) };
-            if (e.mouseover) { marker.registerEvent('mouseover', e.context, e.mouseover) };
-            if (e.mouseout) { marker.registerEvent('mouseout', e.context, e.mouseout) };
-            if (e.drag) { marker.registerEvent('drag', e.context, e.drag) };
-            if (e.dragend) { marker.registerEvent('dragend', e.context, e.dragend) };
-            if (e.dragstart) { marker.registerEvent('dragstart', e.context, e.dragstart) };
-        }
-
-    },
-
-
-    cancel: function(evt){
-        if((this.addingAMarker == true) || (!evt && this.addingAMarker) || (evt && evt.keyCode == 27) || (evt && evt.type === 'mouseup')){
-            e = e || {};
-            e.context = e.context || marker;
-            if (e.click) { marker.registerEvent('click', e.context, e.click) };
-            if (e.mouseover) { marker.registerEvent('mouseover', e.context, e.mouseover) };
-            if (e.mouseout) { marker.registerEvent('mouseout', e.context, e.mouseout) };
-            if (e.drag) { marker.registerEvent('drag', e.context, e.drag) };
-            if (e.dragend) { marker.registerEvent('dragend', e.context, e.dragend) };
-            if (e.dragstart) { marker.registerEvent('dragstart', e.context, e.dragstart) };
-
-            this.removeDivImg();
-            this.addingAMarker = false;
-        }
-    },
-
-
-    addDivImg: function(){
-        var div = document.createElement('div');
-        var img = document.createElement('img');
-        img.src = 'http://imgs.sapo.pt/fotos_gis/mapas_api/v1.1/Markers/new/pin.png';
-        img.width = 22;
-        img.height = 28;
-
-        div.style.position = 'absolute';
-        div.style.zIndex = '1000';
-        div.appendChild(img);
-        if(SAPO.Maps.Utils.checkIE6()){
-            div.className += ' search_item_marker_ie6';
-            img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',src='" + img.src + "')";
-        }
-
-        this.updateImgDivFunc = OpenLayers.Function.bindAsEventListener(this.updateDivImg, this);
-        this.cancelFunc = OpenLayers.Function.bindAsEventListener(this.removeMarker, this);
-
-        OpenLayers.Event.observe(document.body, 'mousemove', this.updateImgDivFunc, true);
-        OpenLayers.Event.observe(document.body, 'keydown', this.cancelFunc, true);
-        this.map.events.register('singlerightclick', this, this.cancelFunc.bindAsEventListener(this));
-
-        this.imgDiv = div;
-
-    },
-
-    removeDivImg: function(){
-        if (this.imgDiv == null) return;
-        this.imgDiv.parentNode.removeChild(this.imgDiv);
-        OpenLayers.Event.stopObserving(document.body, 'mousemove', this.updateImgDivFunc, true);
-        OpenLayers.Event.stopObserving(document.body, 'keydown', this.cancelFunc, true);
-        this.map.events.unregister('singlerightclick', this, this.cancelFunc.bindAsEventListener(this));
-
-        this.firstUpdate = true;
-        this.markerOut = true;
-        this.imgDiv = null;
-        this.updateImgDivFunc = null;
-        this.cancelFunc = null;
-    },
-
-    updateDivImg: function(evt){
-        if(this.lockMarker){return;}
-        if(this.firstUpdate) {
-            document.body.appendChild(this.imgDiv);
-            this.firstUpdate = false;
-        }
-
-        this.imgDiv.style.top = (evt.clientY - 38) + 'px';
-        this.imgDiv.style.left = (evt.clientX - 12) + 'px';
-    },
-
-    /**
-     * Event handle called when the user moves the mouse out of the map.
-     * Drag the map.
-     */
-
-    mouseout: function(evt){
-         this.mousemove(evt);
-    },
-
-
-    /**
-     * Event handle called when the user is moving the mouse over the map.
-     * Update the marker position
-     */
-    mousemove: function(evt){
-
-        var size = this.map.size;
-        if(evt.xy.x <= this.borders.left || evt.xy.y <= (this.borders.top - 30)){
-            //lock marker and pan map up
-            this.panUp(evt.xy);
-        }else{
-            if(evt.xy.x + this.borders.right >= size.w || evt.xy.y + this.borders.bottom >= size.h){
-                //lock marker and pan map down
-                this.panDown(evt.xy);
-            }
-            else{
-                //if panning stop it
-                if(this.panTimer){
-                    window.clearInterval(this.panTimer);
-                    this.lockMarker = false;
-                    this.panTimer = null;
-                }
-            }
-        }
-
-    },
-
-    panUp: function(xy){
-        //first time the mouse enters on the map
-        if(this.panTimer){return;}
-        if(this.markerOut){
-            this.markerOut = false;
-            return;
-        }
-        this.lockMarker = true;
-
-        var x = 0;
-        var y = 0;
-        if(xy.x <= this.borders.left && xy.y <= (this.borders.top - 30)){
-            x = -1 * this.MOVE_X;
-            y = -1 * this.MOVE_Y;
-        }else{
-            if(xy.x <= this.borders.left){
-                x = -1 * this.MOVE_X;
-            }else{
-                y = -1 * this.MOVE_Y;
-            }
-        }
-
-        var map = this.map;
-        //set a timeout to pan the map
-        this.panTimer = window.setInterval(function(){ map.pan(x, y); }.bind(this), 100);
-    },
-
-
-    panDown: function(xy){
-        //first time the mouse enters on the map
-        if(this.panTimer){return;}
-        if(this.markerOut){
-            this.markerOut = false;
-            return;
-        }
-        this.lockMarker = true;
-
-        var size = this.map.size;
-
-        var x = 0;
-        var y = 0;
-        if(xy.x + this.borders.right >= size.w && xy.y + this.borders.bottom >= size.h){
-            x = this.MOVE_X;
-            y = this.MOVE_Y;
-        }else{
-            if(xy.x + this.borders.right >= size.w){
-                x = this.MOVE_X;
-            }else{
-                y = this.MOVE_Y;
-            }
-        }
-
-        var map = this.map;
-        //set a timeout to pan the map
-        this.panTimer = window.setInterval(function(){ map.pan(x, y); }.bind(this), 100);
-    },
-
-
-
-    /**
-     * Event handle called when the marker, is handled on the map.
-     */
-    markerAnchored: function(evt){
-
-
-        this.map.events.unregister('mouseout', this, this.mouseout);
-        this.map.events.unregister('mousemove', this, this.mousemove);
-        this.map.events.unregister('click', this, this.markerAnchored);
-
-        this.removeDivImg();
-        this.addingAMarker = false;
-
-        var lonlat = this.map.getLonLatFromContainerPixel(evt.xy);
-        if (this.opts.mapClick) { this.opts.mapClick({ lonlat: lonlat }); }
-
-        this.markAction = 0;
-    },
-
-    removeMarker: function(marker){
-        this.markersLayer.removeMarker(marker);
-        this.markers.splice(marker.idx, 1);
-    },
-
-    closeOpenedPopup: function(){
-        if(this.selectedMarker){
-            this.selectedMarker.closePopup();
-            this.selectedMarker = null;
-        }
-    },
-
-    _removeMarkers: function(){
-        this.markersLayer.removeMarkers();
-        this.markers.splice(0);
-    },
-
-    /**
-     * API Method
-     * This method recevives a string with the object state, and recovers all the state.
-     *
-     * The state is a string in a following format:
-     *  lon,lat,opened,title,desc@lon,lat,opened,title,desc
-     * @param {String} state
-     */
-    setState: function(state){
-        var markers = state.split('@');
-
-        var m = false;
-        var mInfo = false;
-        var lat = false;
-        var lon = false;
-        var opened = false;
-        var title = false;
-        var desc = false;
-
-
-        for(var i = 0; i< markers.length; ++i){
-            mInfo = markers[i].split(',');
-            try {
-                lon = Number(mInfo[0]);
-                lat = Number(mInfo[1]);
-                opened = Number(mInfo[2]);
-                title = mInfo.length > 3? mInfo[3] : '';
-                desc = mInfo.length > 4? mInfo[4] : '';
-
-                m = new SAPO.Maps.Marker(new OpenLayers.LonLat(lon, lat), {draggable: true});
-                
-                if (window.isIE) {
-                    var lonlat = false;
-                    lonlat.lon = lon;
-                    lonlat.lat = lat;
-                    m = new SAPO.Maps.Marker(lonlat, {draggable: true});
-                } else {
-                    m = new SAPO.Maps.Marker(new OpenLayers.LonLat(lon, lat), {draggable: true});
-                }
-                
-                m.title = decodeURIComponent(title);
-                m.description = decodeURIComponent(desc);
-                m.idx = markers.length;
-
-                this.markersLayer.addMarker(m);
-                this.markers.push(m);
-
-            }catch(e){}
-        }
-    },
-
-    getState: function(){
-        var str = '';
-
-        m = false;
-        var opened = false;
-        var lonlat = false;
-        var title = false;
-        var desc = false;
-        for(var i=0; i< this.markers.length; ++i){
-            m = this.markers[i];
-            lonlat = m.getLonLat();
-            opened = m.hasOpenedPopup()? 1 : 0;
-            title = encodeURIComponent(encodeURIComponent(m.title));
-            desc = encodeURIComponent(encodeURIComponent(m.description));
-            str += lonlat.lon + ',' + lonlat.lat + ',' + opened + ',' +
-                    title + ',' + desc;
-
-            if(i < this.markers.length - 1){
-                str += '@';
-            }
-        }
-
-        return str;
-    },
-
-     getMapsURL: function() {
-         var coord = this.map.getMapCenter();
-         var url ='http://mapas.sapo.pt/?ll=' +coord.lat +',' +coord.lon +'&z='+this.map.getZoom();
-
-         if(!this.search == null) {
-             var page = this.search.getCurrentPage(this.search.openedZone);
-             var selectedIndex = this.search.getSelectedIndex();
-             if(page >0 ) {
-                 url += '&q='+encodeURI(this.lastSearch)+','+page+','+selectedIndex+','+encodeURI(this.search.openedZone)+',true';
-             }
-         }
-         var zz = this.getState();
-         if(zz) {
-             url += '&mks='+zz;
-         }
-
-         switch(this.map.baseLayer.layername) {
-            case 'map' : url += '&t=m'; break;
-            case 'hybrid' : url += '&t=h'; break;
-            case 'satellite' : url += '&t=s'; break;
-            case 'terrain' : url += '&t=t'; break;
-         }
-
-         return url;
-     },
-
-     getImageURL: function() {
-         var coord = this.map.getMapCenter();
-         var ll = 'll='+coord.lat+','+coord.lon;
-         var mks = this.getState();
-         mks = (mks) ? mks : '';
-         if(this.search.getSelectedIndex() != null) {
-             var selectedSearch = this.search.getMarker(this.search.getSelectedIndex());
-             if(mks != '') { mks+='@'}
-             mks+= selectedSearch.getLonLat().lon+','+ selectedSearch.getLonLat().lat+ ',1,'+encodeURIComponent(selectedSearch.html.getElementsByTagName('p')[0].innerHTML)+',';
-         }
-
-         if(mks != '') { mks='&mks='+ mks; }
-         var url = 'http://services.sapo.pt/Maps/GetMapByLinkParameters?'+ll+'&z='+(this.map.getZoom()-1) +'&width=340&height=225'+mks+'&t=' + this.map.baseLayer.layername;
-         return url;
-     },
-
-
-    /**
-     * Move a marker to new location.
-     *
-     * @param object m   An ol vector feature object representing the marker.
-     * @param object ll  {lat: lon:}
-     *
-     * @return void
-     */
-
-    moveMarker: function(m, ll)
-    {
-        var point = new OpenLayers.LonLat(ll.lon, ll.lat);
-        m.setLonLat(point);
-    },
-
-    /**
-     * Zoom map to the best fit while containing all markers
-     *
-     * @param integer max  Highest zoom level (@TODO)
-     */
-
-    zoomToFit: function(max)
-    {
-        this.map.zoomToExtent(this.map.vectorLayer.getDataExtent());
-    },
-
-    getMap: function()
-    {
-        return this.map;
-    },
-
-    getMapNodeId: function()
-    {
-        return this.map.div;
+    initialize: function(opts) {},
+    display: function(){
+            var ifr = document.createElement('iframe');
+            ifr.src = "/sapo/maps/sapoMapas.php";
+            ifr.height = '100%';
+            ifr.width = '100%';
+            ifr.style.border = 'none';
+            ifr.id='mapsIframe';
+            ifr.frameBorder=0;
+            ifr.scrolling='no';
+            $('kronolithEventMap').appendChild(ifr);
+
+            $('kronolithEventMap').style.width='620px';
+            $('kronolithEventMap').style.height='257px';
+    },
+    destroy: function(){
+        $('mapsIframe').contentWindow.map = null;
+        $('mapsIframe').remove();
+    },
+    getZoom: function(){
+        return $F('kronolithEventMapZoom');//stupid :D
     }
-
-
+    ,//JP : This methods are ignored, mapsWidget will solve this :)
+    setCenter: function(coords){},
+    zoomToFit: function(zoom){},
+    addMarker: function(mark){}
 });
 
-
-
-
 /**
  * SAPO geocoding service.
  */
@@ -623,299 +48,22 @@ HordeMap.Geocoder.SAPO = Class.create({
   initialize: function(opts)
   {
         this.opts = opts || {};
-        this.gc = new SAPO.Maps.Geocoder();
-        this.syndication = new SAPO.Communication.Syndication();
   },
 
-   /**
-    * Perform a geocode operation. Textual address => latlng.
-    *
-    * @param string address            The textual address to geocode.
-    * @param function callback         The callback function.
-    * @param function onErrorCallback  The error callback.
-    *
-    *
-    */
    geocode: function(address, callback, onErrorCallback)
    {
+       queryToBeDone = address;//if maps iframe not ready, then iframe will use this text to search
+       $('kronolithEventGeo_loading_img').style.display='none';
 
-       if (KronolithCore.map.markAction == 0 ) {
-          KronolithCore.map.searchPOIs(true);
-       }
-
-   },
+       KronolithCore.openTab($('kronolithEventLinkMap'));
 
-   _onGeocodeComplete: function(r)
-   {
-       var ll = [];
-       r.each(function(i) {
-          var p =  { lat: i.Latitude, lon: i.Longitude };
-          ll.push(p);
-       });
-       if (ll.length) {
-           this._userGeocodeCallback(ll);
-       } else {
-           this._errorCallback(r);
-       }
+       if(typeof($('mapsIframe').contentWindow.getResults) == 'function' && $('mapsIframe').contentWindow.navigation)
+            $('mapsIframe').contentWindow.getResults(address); 
    },
-
-   /**
-    * Perform a reverse geocode operation. latlng -> textual address.
-    *
-    * Hack to support reverse geocoding by using the GetRoute API. Will
-    * refactor this once an actual reverse geocoder is available via SAPO.
-    */
-
-   reverseGeocode: function(lonlat, completeCallback, errorCallback)
-   {
-   },
-
-   /**
-    * onComplete
-    */
-
-   _onComplete: function(obj, args)
-   {
-       var place = '';
-
-       if(!obj.segs){
-           try {
-               args.onError();
-           } catch(e1) { }
-       }
-       try {
-           $F('kronolithEventGeo');
-           var r = { lon: this._ll.lon, lat: this._ll.lat, address: place };
-           args.onComplete([r]);
-       } catch(e2) {}
-   },
-
-   /**
-    * onTimeout
-    */
-
-
-   _onTimeout: function()
-   {
-       if (this.onErrorCallback) {
-           try {
-               this.onErrorCallback();
-           } catch(e1) {}
-       }
-       this.onCompleteCallback = this.onErrorCallback = null;
-   }
-
-});
-
-
-/* auxiliary Event */
-
-    function addEvent(obj, evType, fn) {
-        try {
-
-            if (obj.addEventListener){
-                obj.addEventListener(evType, fn, false);
-               return true;
-            } else if (obj.attachEvent) {
-                var r = obj.attachEvent("on"+evType, fn);
-                return r;
-            } else {
-                return false;
-            }
-        } catch (e) {
-            alert("addEvent Element error:" + obj + "\nError:\n" + e);
-        }
-    }
-
-
-
+   _onGeocodeComplete: function(r){ },
+   reverseGeocode: function(lonlat, completeCallback, errorCallback) {},
+   _onComplete: function(obj, args){},
+   _onTimeout: function(){}
 });
 
 
-/*  element.setAttribute('style', ...) workaround for IE */
- function rzCC(s){
-   // thanks http://www.ruzee.com/blog/2006/07/\
-   // retrieving-css-styles-via-javascript/
-   for(var exp=/-([a-z])/; 
-       exp.test(s); 
-       s=s.replace(exp,RegExp.$1.toUpperCase()));
-   return s;
- }
-
- function _setStyle(element, declaration) {
-   if (declaration.charAt(declaration.length-1)==';')
-     declaration = declaration.slice(0, -1);
-   var k, v;
-   var splitted = declaration.split(';');
-   for (var i=0, len=splitted.length; i<len; i++) {
-      k = rzCC(splitted[i].split(':')[0]);
-      v = splitted[i].split(':')[1];
-      eval("element.style."+k+"='"+v+"'");
-
-   }
- }
-
-function addSapoMapasUI() {
-    /* template in: /horde/kronolith/templates/index/edit.inc */
-    if (document.getElementById('b_adicionar') == undefined) {
-        var tabmap = document.getElementById('kronolithEventTabMap');
-        var mark_in_map_link = document.createElement('button');
-        mark_in_map_link.className = 'b_adicionar';
-        mark_in_map_link.setAttribute('id', 'b_adicionar');
-        mark_in_map_link.setAttribute('type', 'button');
-/*
-        var gesture = '';
-        if (mark_in_map_link.addEventListener){
-            gesture = 'mousedown';                
-        } else if (mark_in_map_link.attachEvent) {
-            gesture = 'onmousedown';
-        }
-        mark_in_map_link.setAttribute(gesture,'KronolithCore.map.addMarker();');
-*/
-
-//        var isIE = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
-//        mark_in_map_link.setAttribute((isIE ? 'onmousedown' : 'mousedown'),'KronolithCore.map.addMarker();');
-/*
-        if (isIE) {
-            mark_in_map_link.setAttribute('onmousedown','KronolithCore.map.addMarker();');
-        } else {
-            mark_in_map_link.setAttribute('mousedown','KronolithCore.map.addMarker();');
-        }
-*/
-        mark_in_map_link.innerHTML = 'Adicionar Marcador';
-
-        var action_container = document.createElement('div');
-        action_container.className = 'action_container';
-        tabmap.appendChild(action_container);
-        action_container.appendChild(mark_in_map_link);
-    }
-
-    if (document.getElementById('kronolithEventResults') == undefined) {
-      var eventmap = document.getElementById('kronolithEventMap');
-      eventmap.className = 'mapa';
-      // eventmap.setAttribute('style', 'width:100%; height:270px;');
-      _setStyle(eventmap, 'width:100%; height:270px');              // Sapo Mapas: Mandatory width and height !!!!!!!
-
-      var resultBox = document.createElement('div');
-      resultBox.setAttribute('id', 'kronolithEventResults');
-      resultBox.className = 'slider';
-
-      var closeSlider = document.createElement('div');
-      closeSlider.className = 'sliderDoorTop';
-      closeSlider.setAttribute('id', 'closeSlider');
-
-      var openSlider = document.createElement('div');
-      openSlider.className = 'sliderDoor';
-      openSlider.setAttribute('id', 'openSlider');
-
-      var _a = document.createElement('a');
-      var _span = document.createElement('span');
-      var slidetxt = document.createTextNode('slide');
-
-      eventmap.appendChild(resultBox);
-      resultBox.appendChild(closeSlider);
-      resultBox.appendChild(openSlider);
-      openSlider.appendChild(_a).appendChild(_span).appendChild(slidetxt);
-    }
-
-// alert(document.getElementById('kronolithEventTabMap').innerHTML);
-
-      var openSlider = document.createElement('div');
-      openSlider.className = 'sliderDoor';
-      openSlider.setAttribute('id', 'openSlider');
-
-
-    // On KeyPress Search Fix
-    function ie8SafePreventEvent(e){
-        if (e.preventDefault){
-            e.preventDefault();
-        } else {
-            if (e.stop) { e.stop(); }
-        }
-
-      eventmap.appendChild(resultBox);
-      resultBox.appendChild(closeSlider);
-      resultBox.appendChild(openSlider);
-      openSlider.appendChild(_a).appendChild(_span).appendChild(slidetxt);
-    }
-
-    addEvent(document.getElementById('kronolithEventLocation'), 'keydown',
-        function(event){
-
-            if (event.which || event.keyCode) {
-                if ((event.which == 13) || (event.keyCode == 13)) {
-                    ie8SafePreventEvent(event);
-                    KronolithCore.ensureMap();
-                    KronolithCore.geocode(document.getElementById('kronolithEventLocation'));
-                } else if ((event.which == 27) || (event.keyCode == 27)) {
-                    ie8SafePreventEvent(event);
-                    document.getElementById('kronolithEventLocation').value = "";
-                    document.getElementById('kronolithEventLocation').focus();
-                }
-
-            } else {
-                ie8SafePreventEvent(event);
-            }
-        }
-    );
-
-
-
-
-
-
-    addEvent(document.getElementById('b_adicionar'), 'mousedown',
-        function(event){
-            KronolithCore.map.addMarker();
-        }
-    );
-
-
-
-
-
-}
-
-function init(){
-
-    // quit if this function has already been called
-    if (arguments.callee.done) return;
-    // flag this function so we don't do the same thing twice
-    arguments.callee.done = true;
-
-    if (document.getElementById('kronolithEventResults') == undefined) {
-       addSapoMapasUI();
-    }
-
-}
-
-//    window.onload = init();
-
-/* for Mozilla/Opera9 */
-if (document.addEventListener) {
-  document.addEventListener("DOMContentLoaded", init, false);
-}
-
-/* for Internet Explorer */
-/*@cc_on @*/
-/*@if (@_win32)
-  document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
-  var script = document.getElementById("__ie_onload");
-  script.onreadystatechange = function() {
-    if (this.readyState == "complete") {
-      init(); // call the onload handler
-    }
-  };
-/*@end @*/
-
-/* for Safari */
-if (/WebKit/i.test(navigator.userAgent)) { // sniff
-  var _timer = setInterval(function() {
-    if (/loaded|complete/.test(document.readyState)) {
-      init(); // call the onload handler
-    }
-  }, 10);
-}
-
-/* for other browsers */
-window.onload = init;