var geocoder;
var map=false;
var bounds;
var infowindow=false;
var circle=false;
var mgr;
var center;
var geocoder;
var loc = {};
var eviction_list = [];

function userLocation() {
    geocoder = new google.maps.Geocoder();
    if(google.loader.ClientLocation) {
        loc.lat = google.loader.ClientLocation.latitude;
        loc.lng = google.loader.ClientLocation.longitude;

        var latlng = new google.maps.LatLng(loc.lat, loc.lng);
        geocoder.geocode({'latLng': latlng}, function(results, status) {
            if(status === google.maps.GeocoderStatus.OK) {
                $('#address').val(results[0]['formatted_address']);
            }
        });
    }

}

function evictMarkers() {

    // clear all markers

    $(eviction_list).each( function () {
        this.setMap(null);
    });
    // reset the eviction array
    eviction_list = [];
}

function initialize(latitude,longitude) {
    bounds = new google.maps.LatLngBounds();
    var latlng = new google.maps.LatLng(latitude,longitude);
    center=latlng;
    var myOptions = {
        zoom: 8,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    if(!map) {
        map = new google.maps.Map(document.getElementById("nearby_map"), myOptions);
    }

    marker = new google.maps.Marker({
        position: latlng,
        map: map
    });

    eviction_list.push(marker);
}

function codeAddress() {
    evictMarkers();

    var address = document.getElementById("address").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            latitude=results[0].geometry.location.lat();
            longitude=results[0].geometry.location.lng();

            initialize(latitude,longitude);
            radius=parseInt($('#radius').val());

            if(circle) {
                circle.setMap();
            }

            circle = new google.maps.Circle({
                map: map,
                center:center,
                radius: radius,
                clickable:false,
                strokeColor:"#999999",
                strokeOpacity:"0.5"
            });

            token=$('input[name="csrfmiddlewaretoken"]').val()

            $.ajax({ type:"GET", data:"csrfmiddlewaretoken="+token+"&latitude="+latitude+"&longitude="+longitude+"&radius="+radius, url: '/self_nearby/', context: $('#body_home'), success: function(returned) {

                   try
                   {
                    var obj = jQuery.parseJSON(returned);
                    if(obj.length>0) {
                        $('#searched_locali_cont').removeClass('hidden');
                        $('#searched_locali_cont a.locale').remove()
                        for(i=0;i<obj.length;i++) {
                            text='<a href="'+obj[i].url+'">'+obj[i].nome+'</a>';
                            addMarker(obj[i].latitude,obj[i].longitude,text);
                            buildList(obj[i].nome,obj[i].indirizzo,obj[i].url,i,obj.length);
                        }
                        map.fitBounds(bounds);

                    } else {
                        jQuery.noticeAdd({
                            text: "Nessun locale nell'area richiesta. Prova ad allargare il raggio di ricerca",
                            stay: false
                        });
                    }
                    
                    }
                    catch(err)
                        {
                            
                            jQuery.noticeAdd({
                            text: "Nessun locale nell'area richiesta. Prova ad allargare il raggio di ricerca",
                            stay: false
                        }); 
                        
                        }
                    
                }},'json');
            
        } else {
            jQuery.noticeAdd({
                            text: "Ricontrolla l'indirizzo o prova ad essere pi&ugrave; preciso.",
                            stay: false
                        });
        }
    });
     $("#search_nearby_btn").removeClass('working');
   
}

function buildList(nome,indirizzo,url,i,tot) {
    $('#searched_locali_cont h2').removeClass('hidden');
    if(i%2==0){
        odd='odd';
    }else{
        odd='';
    }
    
   
    
    str=$('<a href="'+url+'" class="locale '+odd+'" title="'+nome+' '+indirizzo+'"><strong>'+nome+'</strong><span>'+indirizzo+'</span></a>');
    $('#searched_locali_cont').append(str);
    
     if(i==(tot-1))
    {
        $('#searched_locali_cont').append($('<div class="clear"></div>'));
    }
     $('#search_nearby_btn').removeClass('working');
}

function addMarker(lat,lon,title) {

    image_rel = new google.maps.MarkerImage('http://'+document.location.host+'/media/frontend/img/znzmap_rel.png',
    new google.maps.Size(15, 20),
    new google.maps.Point(0,0),
    new google.maps.Point(8, 20));

    latlng = new google.maps.LatLng(lat,lon);

    bounds.extend(latlng);

    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        icon: image_rel
    });
    eviction_list.push(marker);
    google.maps.event.addListener(marker, 'click', function() {
        if (infowindow)
            infowindow.close();

        infowindow = new google.maps.infoWindowHtml({
            content: title
        });
        infowindow.open(map,marker);
    });
}

$(document).ready( function() {
 
    $('#home_search_btn').click(function(ev){
        if($(this).prev().val()=='' || $(this).prev().val()==$(this).prev().attr('def'))
        {
            ev.preventDefault();
             jQuery.noticeAdd({
                            text: "Inserisci del testo da cercare!",
                            stay: false
                        });            
        }
        
    })

    $('input.default_text').each(function(index,item){
        
        $(this).val($(this).attr('def'));
        $(this).focus(function(){
            if($(this).val() === $(this).attr('def')){
                $(this).val('');
            }  
        });
         $(this).blur(function(){
            if($(this).val() === ''){
                $(this).val($(this).attr('def'));
            }  
        });
    });
 

    google.load("maps", "3.x", {other_params: "sensor=false", callback:userLocation});

    $('.citySelect').change( function() {
        document.location.href=$(this).attr('value');

    });
    $(".btn-slide").click( function() {
        $("#panel").slideToggle("slow");
        $(this).toggleClass("active");
    });
    $( "#site_select" ).combobox();
    $( "#radius" ).combobox();

    $('#search_nearby').click( function() {
        window.scroll(0,0)
        $('div.subform').fadeOut();
        $('#home_search_form').fadeOut('slow', function() {
            $('#search_nearby_cont').fadeIn();
        });
    });
    
    
      $('#close_nearby_btn').click( function() {
            
        $('#search_nearby_cont').fadeOut('slow', function() {
        $('#home_search_form').fadeIn();
            $('div.subform').fadeIn();
        });
    });
    
    $('#search_nearby_btn').click( function(ev) {
       if($('#address').val()=='' || $('#address').val()==$('#address').attr('def')){ 
            jQuery.noticeAdd({
                            text: "Inserisci un indirizzo valido!",
                            stay: false
                        });
                        return false;
           }
           if($(this).hasClass('working'))
           {
            return false;
           }
           $(this).addClass('working');
        ev.preventDefault();
        $('#nearby_map').addClass('ajax_loader');
        codeAddress();
        
    });
});
