var map;
var geocoder;
var marker;
var zoom = 17;
var address;
var center;

function parseXml(xml) {
   if (jQuery.browser.msie) {
     var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
     xmlDoc.loadXML(xml);
     xml = xmlDoc;
   }
   return xml;
}

function createMap() {

    if (GBrowserIsCompatible()) {

        if( $('#address').val() != "" && $('#address').val() != $('#address').attr('title') ){

            $("#errorSearch").hide();
            $("#map").slideDown("slow");

            if( $('#zoomlevel').val() == "" ) $('#zoomlevel').val(zoom);
            else zoom = $('#zoomlevel').val()*1;
            
            map = new GMap2(document.getElementById("gmaps"));
            var center = new GLatLng(42.65012181368022, 25.3125);
            map.setCenter(center, zoom);
            map.setUIToDefault();
            map.setMapType(G_HYBRID_MAP);
            map.disableScrollWheelZoom();
            
            geocoder = new GClientGeocoder();
            address = $('#address').val();

            showLocation();

            GEvent.addListener(map,'zoomend',function(oldLvl, newLvl){
                zoom = newLvl;
                $('#zoomlevel').val(zoom);
            });

            GEvent.addListener(map, "moveend", function() {
              var center = map.getCenter();
              marker.setLatLng(center);
              
              getAddress(center);

            });

            
        }else {
            // empty address
             $("#map").hide();
             $("#errorSearch").slideDown("slow");
        }

    }
}

function createMapEdit(lat, longt, newzoom) {

    if (GBrowserIsCompatible()) {

        if( $('#address').val() != "" && $('#address').val() != $('#address').attr('title') ){

            $("#errorSearch").hide();
            $("#map").slideDown("slow");

            if( $('#zoomlevel').val() == "" ) $('#zoomlevel').val(zoom);
            else zoom = $('#zoomlevel').val()*1;

            map = new GMap2(document.getElementById("gmaps"));
            var center = new GLatLng(lat, longt);
            map.setCenter(center, newzoom);
            map.setUIToDefault();
            map.setMapType(G_HYBRID_MAP);
            map.disableScrollWheelZoom();

            geocoder = new GClientGeocoder();
            address = $('#address').val();

            point = new GLatLng(lat, longt);
            marker = new GMarker(point, {draggable: true});
            map.addOverlay(marker);

            GEvent.addListener(map,'zoomend',function(oldLvl, newLvl){
                zoom = newLvl;
                $('#zoomlevel').val(zoom);
            });

            GEvent.addListener(marker, "dragend", function() {

               var centerG = new GLatLng(marker.getLatLng().y,  marker.getLatLng().x);
               getAddress(centerG);

               $('#latitude').val( marker.getLatLng().y );
               $('#longitude').val( marker.getLatLng().x );

            });


        }else {
            // empty address
             $("#map").hide();
             $("#errorSearch").slideDown("slow");
        }

    }
}

function showLocation() {
    var address = $('#address').val();
    geocoder.getLocations(address, addAddressToMap);
}

function addAddressToMap(response) {
    map.clearOverlays();
    if (!response || response.Status.code != 200) {
        // on error
        $("#map").hide();
        $("#errorSearch").slideDown("slow");
    } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
        marker = new GMarker(point, {draggable: true});
        map.addOverlay(marker);

        $('#latitude').val( marker.getLatLng().y );
        $('#longitude').val( marker.getLatLng().x );
        
        var center = new GLatLng(marker.getLatLng().y, marker.getLatLng().x);
        map.setCenter(center, ($('#zoomlevel').val()*1) );
       
        GEvent.addListener(marker, "dragend", function() {
           
           var centerG = new GLatLng(marker.getLatLng().y,  marker.getLatLng().x);
           getAddress(centerG);

           $('#latitude').val( marker.getLatLng().y );
           $('#longitude').val( marker.getLatLng().x );

        });
    }
}

function centerMap(){

    var center = new GLatLng($('#latitude').val(), $('#longitude').val());
    
    map.setCenter(center, ($('#zoomlevel').val()*1) );

    marker.setLatLng(center);
    
    GEvent.addListener(marker, "dragend", function() {

       var centerG = new GLatLng(marker.getLatLng().y,  marker.getLatLng().x);
       getAddress(centerG);

       $('#latitude').val( marker.getLatLng().y );
       $('#longitude').val( marker.getLatLng().x );

    });

    map.addOverlay(marker);

}

function getAddress(latlng) {
  if (latlng != null) {
    geocoder.getLocations(latlng, showAddress);
  }
}

function showAddress(response) {
  if (!response || response.Status.code != 200 ) {
    //alert("Status Code:" + response.Status.code);
  } else {
    place = response.Placemark[0];

    if(place.address != '') {
        var brokenstring = place.address.split(",");
        var last = brokenstring.length;
        if(place.AddressDetails.Country.AdministrativeArea.Locality == null){
            city = brokenstring[1];
            //alert(brokenstring[0]);
        }
        else city = place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;

        $("#address").val(place.address);
        $("#country").val(brokenstring[last-1]);
        $("#country_code").val(place.AddressDetails.Country.CountryNameCode);
        $("#city").val(city);
    }
    $('#latitude').val( marker.getLatLng().y );
    $('#longitude').val( marker.getLatLng().x );
  }
}

function initSmallMap() {

    map = new GMap2(document.getElementById("bigMap"));
    map.setUIToDefault();
    map.setMapType(G_HYBRID_MAP);
    map.setCenter(new GLatLng(lat, longt), zoom);
    map.disableScrollWheelZoom();

    var posn = new GLatLng(lat, longt);
    map.addOverlay(new GMarker(posn));

}

$(document).ready(function() {
    if($('#homeGmap').length > 0){

        map = new GMap2(document.getElementById("homeGmap"));
       // map.setUIToDefault();
        map.setMapType(G_HYBRID_MAP);
        map.disableScrollWheelZoom();
        map.setCenter(new GLatLng(42.6917729144571, 23.3222794532776), 4);

        getRandomMarker();

        GEvent.addListener(map, 'click', redirectToMap);
        GEvent.addListener(map, 'dragend', redirectToMap);
    }
});

function redirectToMap() {
    location.href = "http://twitspot.net/map";
}

function getRandomMarker(){

    $.ajax({
                 type: "POST",
                 url: "/ajaxMarker",
                 dataType: 'json',
                 success: function(data) {
                     
                     $.each(data.markers, function(i,marker){

                         map.clearOverlays();
                         lat = marker.lat;
                         longt = marker.longt;
                         text = marker.text;

                         marker = new GMarker(new GLatLng(lat,longt));
                         setTimeout( function(){marker.openInfoWindowHtml(text);}, 100);
                         map.addOverlay(marker);
                         map.panTo(new GLatLng(lat, longt), 4);

                       setTimeout ("getRandomMarker()",10000);

                     });
                }
    });
    
    
}

function initBigMap() {
    if(getLatVar == '') {
        getLatVar = geoip_latitude();
        getLongVar = geoip_longitude();
    }

    map = new GMap2(document.getElementById("bigMap"));
    map.setUIToDefault();
    map.setMapType(G_HYBRID_MAP);
    map.disableScrollWheelZoom();


    address = $('#address').val();

    if(address != '' && address != 'See what people are sharing around ...'){
        geocoder = new GClientGeocoder();
        findLocation( address );
    }

    bigMapLoad();

}

function findLocation( address ) {
    geocoder.getLocations(address, showAddressOnMap);
}

function showAddressOnMap(response) {
    map.clearOverlays();
    if (!response || response.Status.code != 200) {
        // on error
         bigMapLoad();
    } else {
        place = response.Placemark[0];
        
        getLatVar = place.Point.coordinates[1];
        getLongVar = place.Point.coordinates[0]
        
         bigMapLoad();
    }
}

function bigMapLoad(){

      GEvent.clearListeners(map);
      
      center = new GLatLng(getLatVar, getLongVar);
      map.setCenter(center, zoom);
      map.enableScrollWheelZoom();

      // ajax to get results div
      getMapResults();

      GEvent.addListener(map,'zoomend',function(oldLvl, newLvl){
        zoom = newLvl;
      });

      GEvent.addListener(map, "moveend", function() {
          center = map.getCenter();
          getLatVar = center.lat();
          getLongVar = center.lng();
          bigMapLoad();
      });

}

function getMapResults(){

    //create the boundary for the data
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();

    var southWestU = northEast.toUrlValue();
    var northEastU = southWest.toUrlValue();

    if(zoom > 8 ) {
        var markers = new Array();
        // loader
        $('#results').html('<div id="mapLoader"><img src="images/small-loader.gif" alt="" /></div>');
        var i = 0;
        $.ajax({
                 type: "POST",
                 url: "/ajaxMapResults",
                 data: "southWest="+southWestU+"&northEast="+northEastU+"",
                 dataType: 'json',
                 success: function(data) {
                     $.each(data.markers, function(i,marker){
                         
                       if(i == 0) $('#results').html('');
                       id = marker.id;
                       
                       markers[id] = {
                           'lat': marker.lat,
                           'longt': marker.longt,
                           'name': marker.name,
                           'photo': marker.photo,
                           'address': marker.address,
                           'shorturl' :marker.shorturl,
                           'text': marker.text
                       };
                       
                       initializePoint(markers[id]);
                     });
                     if(markers.length == 0){
                        map.clearOverlays();
                        $('#results').html('No places found. Try zooming the map in or use a more general search and try again.');
                    }
                }
        });
    }
    else {
        map.clearOverlays();
        $('#results').html('No places found. Try zooming the map in or use a more general search and try again.');
    }
}
var m = 0
function initializePoint(pointData) {

    //create an icon for the pins
    baseIcon = new GIcon();
    baseIcon.image = "http://twitspot.net/images/single.png";
    baseIcon.shadow = "http://twitspot.net/images/single_shadow.png"
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);
    
    m++;

    if( (m%2) == 0 ) second = 'second';
    else second = '';

    var point = new GPoint(pointData.longt, pointData.lat);
    var marker = new GMarker(point, baseIcon);
    var listItemLink = document.createElement('a');
    listItemLink.className = 'resElement '+second;

    if(pointData.photo) {
       img = 'image.php?path=photos/'+pointData.shorturl+'/'+pointData.photo+'&w=32&h=32';
    }else {
        img = 'image.php?path=images/no-photo.gif&w=32&h=32';
    }

    html = '<img src="'+img+'" alt="" />'+
           '<span class="text">'+
           '<h4>'+pointData.name+'</h4>'+
           '<p>'+pointData.address+'</p>'+
           '</span>'+
           '<div class="clear"></div>';

    listItemLink.innerHTML = html;

    var focusPoint = function() {
        marker.openInfoWindowHtml(pointData.text);
        map.panTo(point);
        return false;
    }
    
    GEvent.addListener(marker, 'click', focusPoint);
    listItemLink.onclick = focusPoint;
    document.getElementById('results').appendChild(listItemLink);
    map.addOverlay(marker);

}