﻿var map;
var mapCenterLat;
var mapCenterLng;
var pointCenter;
var countryZoom = null;
var currentZoom;
var autoZoomEnable = false;
var geocoder;
var currentCountryCode;
var zoomLevelIsTooSmall = false;
var stringsLatsLngs;
var arrCurrentMarkers;
var currentInfoPanel = null;

var SHIFT_ON_FOCUS_X = 170;
var SHIFT_ON_FOCUS_Y = 70;

var googleMapCountry_hfCountryCenterLat;
var googleMapCountry_hfCountryCenterLng;
var googleMapCountry_hfCountryZoomLevel;
var googleMapCountry_hfCountryCode;
var googleMapCountry_spanCountryCenterPoint;
var googleMapCountry_spanCountryZoomLevel;

function initializeCountryMap() {
    if (!GBrowserIsCompatible()) {
        return;
    }
    
    initVars();

    currentZoom = parseInt(countryZoom);
    map = new GMap2(document.getElementById("divGoogleMapCountry"));
    pointCenter = new GLatLng(mapCenterLat, mapCenterLng);
    map.setCenter(pointCenter, currentZoom);

    for (cityMarket = 0; cityMarket < marketsCoordinates.length; cityMarket++) {
        var parameters = marketsCoordinates[cityMarket].split(";;");
        var cityLatutude = parameters[0];
        var cityLongitude = parameters[1];
        var linkToCity = parameters[2];
        var popupInfoText = parameters[3];
        var cityShopPageId = parameters[4];

        cityCenterpoints = new GLatLng(cityLatutude, cityLongitude);
       
        icon = new GIcon();
        icon.image = "/App_Themes/Biva-New/Images/pin-biva.png";
        icon.shadow = "";
        //icon.iconSize = new GSize(13, 13);
        icon.shadowSize = new GSize(0, 0);
        icon.iconAnchor = new GPoint(5, 5);
        icon.infoWindowAnchor = new GPoint(5, 5);
        icon.infoShadowAnchor = new GPoint(0, 0)

        //popupDiv = '<div class="popDiv">' + popupInfoText + '</div>';
        var marker = createMarker(cityCenterpoints, cityShopPageId, '', icon, '');
        map.addOverlay(marker);
        
    }

    window.setTimeout(correctMapCenter, 1000);
    //map.addControl(new GLargeMapControl3D());
    map.addControl(new GSmallZoomControl());
    geocoder = new GClientGeocoder();

    GEvent.addListener(map, "zoomend", zoomLevelChanged);
    GEvent.addListener(map, "dragend", viewMoved);

    if (autoZoomEnable) {
        proceedAutoZoom();
    }
}

function createMarker(point, cityShopPageId, popupDiv, markCountryMap, popupText) {
    var marker;
    if ((markCountryMap != undefined) && (markCountryMap != '')) {
        marker = new GMarker(point, markCountryMap);
    }
    else 
    {
        marker = new GMarker(point);
    }

    /*GEvent.addListener(marker, "click", function() {
      showAddressInfo(cityShopPageId, point);
    });*/
  
    return marker;
}

/*function showAddressInfo(cityShopPageId, point) {
    if (cityShopPageId != null && cityShopPageId != 0) {
        var requestUrl = "/Templates/BivaGoogleMap/GetAddressInfo.ashx?cityShopPageId=" + cityShopPageId;
        if ($("#divAddressInfo") != null) {
          $("#divAddressInfo").html("");
          //$("#divAddressInfo").show();
          $("#divAddressInfo").load(requestUrl.toString(), function() {
            AddOverlay(cityShopPageId, point.lat(), point.lng(), $("#divAddressInfo").html());
          });
        }
    }
}*/

function AddOverlay(id, lat, lng, html) {
  if (currentInfoPanel != null) {
    currentInfoPanel.remove();
  }

  //currentInfoPanel = new ContactInfo(id, lat, lng, html);

  map.setCenter(new GLatLng(lat, lng));

  var xyPoint = map.fromLatLngToDivPixel(map.getCenter());
  
  //var ()
  xyPoint.x += SHIFT_ON_FOCUS_X;
  xyPoint.y += SHIFT_ON_FOCUS_Y;
  var newCenter = map.fromDivPixelToLatLng(xyPoint);
  map.setCenter(newCenter);
  map.addOverlay(currentInfoPanel);
}

function RemoveOverlay() {
  if (currentInfoPanel != null) {
    currentInfoPanel.remove();
  }
}

function onmarkerclic(link) {
    document.location = link;
}

function correctMapCenter() {
    map.panTo(pointCenter);
}

function proceedAutoZoom() {
    checkCountryForMapZoomLevel(true);
}

var returnsFromLevelPoints;
var isZoomLevelValid;
function checkCountryForMapZoomLevel(isStart) {
    if (!isStart) {
        if (currentZoom > 2) {
            currentZoom = currentZoom - 1;
            map.setZoom(currentZoom);
        }
    }

    returnsFromLevelPoints = 0;
    isZoomLevelValid = true;

    var p1 = new GPoint(10, Math.round(470 / 2));
    var p2 = new GPoint(671 - 10, Math.round(470 / 2));
    var p3 = new GPoint(Math.round(671 / 2), 10);
    var p4 = new GPoint(Math.round(671 / 2), 470 - 10);

    var p5 = new GPoint(10, 10);
    var p6 = new GPoint(671 - 10, 10);
    var p7 = new GPoint(10, 470 - 10);
    var p8 = new GPoint(671 - 10, 470 - 10);

    var latLng1 = map.fromDivPixelToLatLng(p1);
    var latLng2 = map.fromDivPixelToLatLng(p2);
    var latLng3 = map.fromDivPixelToLatLng(p3);
    var latLng4 = map.fromDivPixelToLatLng(p4);

    var latLng5 = map.fromDivPixelToLatLng(p5);
    var latLng6 = map.fromDivPixelToLatLng(p6);
    var latLng7 = map.fromDivPixelToLatLng(p7);
    var latLng8 = map.fromDivPixelToLatLng(p8);

    var strLatLng1 = latLng1.lat() + "," + latLng1.lng();
    var strLatLng2 = latLng2.lat() + "," + latLng2.lng();
    var strLatLng3 = latLng3.lat() + "," + latLng3.lng();
    var strLatLng4 = latLng4.lat() + "," + latLng4.lng();

    var strLatLng5 = latLng5.lat() + "," + latLng5.lng();
    var strLatLng6 = latLng6.lat() + "," + latLng6.lng();
    var strLatLng7 = latLng7.lat() + "," + latLng7.lng();
    var strLatLng8 = latLng8.lat() + "," + latLng8.lng();

    stringsLatsLngs = [];
    stringsLatsLngs.push(strLatLng1);
    stringsLatsLngs.push(strLatLng2);
    stringsLatsLngs.push(strLatLng3);
    stringsLatsLngs.push(strLatLng4);

    stringsLatsLngs.push(strLatLng5);
    stringsLatsLngs.push(strLatLng6);
    stringsLatsLngs.push(strLatLng7);
    stringsLatsLngs.push(strLatLng8);

    arePointsInCountry(stringsLatsLngs);
}

function checkStartContions() {
    if (returnsFromLevelPoints < 8) {
        return false;
    }

    if (!isZoomLevelValid) {
        return false;
    }

    return true;
}

function arePointsInCountry(stringsLatsLngs) {
    var i;
    for (i = 0; i < stringsLatsLngs.length; i++) {
        geocoder.getLocations(stringsLatsLngs[i], getZoomLevelPoint);
        pausecomp(200);
    }
}

function getZoomLevelPoint(response) {
    returnsFromLevelPoints++;

    if (!response || response.Status.code != 200) {
        //error
    } else {
        var place = response.Placemark[0];

        var countryCode = "";
        if (isset(place.AddressDetails)) {
            if (isset(place.AddressDetails.Country)) {
                if (isset(place.AddressDetails.Country.CountryNameCode)) {
                    countryCode = place.AddressDetails.Country.CountryNameCode
                }
            }
        }

        if ((currentCountryCode == countryCode)) {
            isZoomLevelValid = false;
        }
    }

    if (returnsFromLevelPoints == 8 && !isZoomLevelValid) {
        checkCountryForMapZoomLevel(false);
    }
}

function initVars() {
    googleMapCountry_hfCountryCenterLat = getGoogleMapCountry_hfCountryCenterLat();
    googleMapCountry_hfCountryCenterLng = getGoogleMapCountry_hfCountryCenterLng();
    googleMapCountry_hfCountryZoomLevel = getGoogleMapCountry_hfCountryZoomLevel();
    googleMapCountry_hfCountryCode = getGoogleMapCountry_hfCountryCode();

    var spanCounrtyZoom = getGoogleMapCountry_spanCountryZoomLevel();
    var spanCountryCenterPoint = getGoogleMapCountry_spanCountryCenterPoint();
    if (spanCounrtyZoom && spanCountryCenterPoint) {
        googleMapCountry_spanCountryCenterPoint = spanCountryCenterPoint;
        googleMapCountry_spanCountryZoomLevel = spanCounrtyZoom;
    }
    countryZoom = googleMapCountry_hfCountryZoomLevel.value;
    if (countryZoom == "") {
        autoZoomEnable = true;
    }

    mapCenterLat = parseFloat(googleMapCountry_hfCountryCenterLat.value);
    mapCenterLng = parseFloat(googleMapCountry_hfCountryCenterLng.value);
    if (spanCounrtyZoom) {
        googleMapCountry_spanCountryZoomLevel.innerHTML = countryZoom;
    }
    currentCountryCode = googleMapCountry_hfCountryCode.value;
 
}

function viewMoved() {
    var newCenter = map.getCenter();
    googleMapCountry_hfCountryCenterLat.value = newCenter.lat();
    googleMapCountry_hfCountryCenterLng.value = newCenter.lng();

    var spanCountryCenterPoint = getGoogleMapCountry_spanCountryCenterPoint();
    if (spanCountryCenterPoint) {
        googleMapCountry_spanCountryCenterPoint.innerHTML = "<b><font color='red'>" + googleMapCountry_hfCountryCenterLat.value
        + ", " + googleMapCountry_hfCountryCenterLng.value + "</font></b>";
    }
}

function zoomLevelChanged(oldLevel, newLevel) {
    if ((newLevel < minZoomLevel) || (newLevel > maxZoomLevel)) {
        map.setZoom(oldLevel);
         
        return;
    }

    currentZoom = newLevel;
    googleMapCountry_hfCountryZoomLevel.value = newLevel;

    var spanCounrtyZoom = getGoogleMapCountry_spanCountryZoomLevel();
    if (spanCounrtyZoom) {
        googleMapCountry_spanCountryZoomLevel.innerHTML = "<b><font color='red'>" + newLevel + "</font></b>";
    }
}

///Points Functions
var currentStep;
var currentLevel;
var arr;
var arrPointsIn;
var arrLatLng;
var maxLevel = 16;
var currentPointsDistanceLat;
var currentPointsDistanceLng;
var isSearchMarkersSuccesfull;

//Help function to check if a object is set or not
function isset(varname) {
    return (typeof (varname) != 'undefined');
}

function pausecomp(millis) {
    var date = new Date();
    var curDate = null;

    do { curDate = new Date(); }
    while (curDate - date < millis);
}
