var mapview;
var compass;
var jdbc_theme;
var jdbc_theme2;
var compass;
var zoomPanel;
var foiDataList;
var themebasedfoi;
var themeX;
var themeY;
var currentHTMLFOI = '';
var inTimer;
var outTimer;
var initialMinX = 10000;
var initialMinY = 10000;
var initialMaxX = -5000;
var initialMaxY = -5000;
var homeCenterX = -93.880934;
var homeCenterY = 53.0327;
var initialBoundsSet = false;
var srid = 8307;
var preferedZoomLevel = 7;
var startZoomLevel = 0;
var homeZoomLevel = 0;
var basemap = new MVBaseMap("NAPA.NAPA_ONLINE_2");

function initMap() {
    var baseURL  = "http://mapviewer.mapanswer.com/mapviewer";
    mapview = new MVMapView(document.getElementById("map"), baseURL);    
    mapview.addBaseMapLayer(basemap, afterMapAdded);
}

function showDealerInfo(point, foi) {
    var dealerNo = foi['attrs'][0];
    goDetails(dealerNo);
}

function afterMapAdded() { 
    mapview.addScaleBar(2,0,0,false);
    if(searchType && searchType != '' && searchValue && searchValue != '') {
        getPOIsOnServer();
    } else {        
        //mapview.setEventListener('zoom_level_change', wheelMouseEvent);
        //mapview.display();
        //mapview.setCenterAndZoomLevel(MVSdoGeometry.createPoint(centerX, centerY, srid));
        //moveZoom(mapview.getZoomLevel());
        //mapview.setMouseWheelZoomEnabled(true);
    }
}
function goHome() {
    mapview.setCenterAndZoomLevel(MVSdoGeometry.createPoint(homeCenterX, homeCenterY, srid), homeZoomLevel);    
}
function addMapCenter(x, y, centerImage) {
    mapview.addFOI(MVFOI.createHTMLFOI('center', MVSdoGeometry.createPoint(x, y, srid), centerImage, -7,-7));
}

function onRecenter() {
    updatePOIs(false);
}

function wheelMouseEvent(zoomBefore, zoomAfter) {
    moveZoom(zoomAfter);
    updatePOIs(false);
}

function moveZoom(zoom) {
    mapview.setZoomLevel(zoom);
    document.getElementById('imgSlider').src = 'images/Pyramide_'+ (zoom+1) +'.gif';
}

var timer;
var startTimer;
var isShowing = false;
var isHiding = false;
var toHide = false;

function showScale() {
    if (isHiding) {
        isHiding = false;
        window.clearInterval(timer);
        window.clearTimeout(startTimer);
    }
    
    isShowing = true;
    
    timer = window.setInterval("addOpacity()", 20);
}

function hideScale() {
    
    if (isShowing) {
        isShowing = false;
        window.clearInterval(timer);
    }
    
    isHiding = true;
    startTimer = window.setTimeout("startHide()", 300);
}

function startHide() {
    timer = window.setInterval("removeOpacity()", 20);
}

function addOpacity() {
    var scaleImage = document.getElementById('imgCompass');
    var slider = document.getElementById('imgSlider');
    
    if (scaleImage.filters) {
        var opacText = scaleImage.filters.alpha.opacity;
        if (opacText < 100) {
            scaleImage.filters.alpha.opacity = opacText + 10;
            slider.filters.alpha.opacity = opacText + 10;
        } else {
            window.clearInterval(timer);
            isShowing = false;
        }
    } else if (scaleImage.style.MozOpacity) {
        var opacText = Number(scaleImage.style.MozOpacity);
        if (opacText < 1) {
            scaleImage.style.MozOpacity = opacText + (0.1);
            slider.style.MozOpacity = opacText + (0.1);
        } else {
            window.clearInterval(timer);
            isShowing = false;
        }
    } 
}

function removeOpacity() {
    var scaleImage = document.getElementById('imgCompass');
    var slider = document.getElementById('imgSlider');
    
    if (scaleImage.filters) {
        var opacText = scaleImage.filters.alpha.opacity;
        if (opacText > 60) {
            scaleImage.filters.alpha.opacity = opacText - 5;
            slider.filters.alpha.opacity = opacText - 5;
        } else {            
            window.clearInterval(timer);
            isHiding = false;
        }
    } else if (scaleImage.style.MozOpacity) {
        var opacText = Number(scaleImage.style.MozOpacity);
        if (opacText > 0.6) {
            scaleImage.style.MozOpacity = opacText - 0.05;
            slider.style.MozOpacity = opacText - 0.05;
        } else {
            window.clearInterval(timer);
            isHiding = false;
        }
    } 
}

function extractCenterAndZoomLevel() {
    if(!isDetail) {
        if(!initialBoundsSet) {
            if(centerX < initialMinX) {
                initialMinX = centerX;
            }
            if(centerX > initialMaxX) {
                initialMaxX = centerX;
            }
            if(centerY < initialMinY) {
                initialMinY = centerY;
            }
            if(centerY > initialMaxY) {
                initialMaxY = centerY;
            }
            for(i = 0; i < currentShownPOIs.length; i++) {
                tempX = new Number(currentShownPOIs[i].X);
                tempY = new Number(currentShownPOIs[i].Y);
                if(tempX < initialMinX) {
                    initialMinX = tempX;
                }
                if(tempX > initialMaxX) {
                    initialMaxX = tempX;
                }
                if(tempY < initialMinY) {
                    initialMinY = tempY;
                }
                if(tempY > initialMaxY) {
                    initialMaxY = tempY;
                }
            }
            initialBoundsSet = true;
        }
        if(initialMinX != initialMaxX && initialMinY != initialMaxY) {
            mapview.zoomToRectangle(MVSdoGeometry.createRectangle(initialMinX,initialMinY,initialMaxX,initialMaxY,srid));             
            if(mapview.getZoomLevel() > 0) {
                mapview.setZoomLevel(mapview.getZoomLevel());
            }
            homeCenterX = mapview.getCenter().getPointX();
            homeCenterY = mapview.getCenter().getPointY();
            homeZoomLevel = mapview.getZoomLevel();
        } else {
            homeCenterX = initialMaxX;
            homeCenterY = initialMaxY;
            homeZoomLevel = preferedZoomLevel;
            mapview.setCenterAndZoomLevel(MVSdoGeometry.createPoint(homeCenterX, homeCenterY, srid), preferedZoomLevel);
        }
    } else {
        homeCenterX = currentDetailedPOI.X;
        homeCenterY = currentDetailedPOI.Y;
        homeZoomLevel = preferedZoomLevel;
        mapview.setCenterAndZoomLevel(MVSdoGeometry.createPoint(homeCenterX, homeCenterY, srid), preferedZoomLevel);
    }
}
