// Root namespace
var uwvakman = {}

$(document).ready(function(){
    uwvakman.enableCityAutoComplete();
});


uwvakman.enableCityAutoComplete = function() {
        
    var elem = $("#cityAutoComplete");

    if (elem) {
        elem.autocomplete('/cities/autocomplete', {
            minChars: 2,
            cacheLength: 10,
            autoFill: true 
        });
        if ((elem[0]) && (elem[0].value=='')) elem[0].value = 'Plaatsnaam';
        elem.focus(function() { 
           if (elem[0].value=='Plaatsnaam') elem[0].value = '';
        });
    }
}

uwvakman.map = {}
uwvakman.map.geocoder = null;
uwvakman.map.map = null;

uwvakman.map.lookupAddress = function(address, pinpoint) {
    if (!uwvakman.map.geocoder) return; 

    //console.log('Looking up: ' + address);
    uwvakman.map.geocoder.geocode({ 'address' : address }, function(results,status) {

        if(status != google.maps.GeocoderStatus.OK) return;
        uwvakman.map.map.setCenter(results[0].geometry.location);
        uwvakman.map.map.setZoom(14);
        if (pinpoint) {
            marker = new google.maps.Marker({
                position: results[0].geometry.location,
                map: uwvakman.map.map 
            });
        }
    });
}


uwvakman.map.markers = [];

uwvakman.map.initMap = function() {
    var mapOptions = {
        zoom: 7,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center : new google.maps.LatLng(52.1,5.15),
        mapTypeControl: false
    }

    uwvakman.map.map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
    uwvakman.map.geocoder = new google.maps.Geocoder();
}

uwvakman.companysearch = function(formElem) {
    var city = $(formElem.city).val();
    var branch = $(formElem.branch).val();

    if (city.length>1) 
        uwvakman.map.lookupAddress(city + ', Netherlands');

    $.ajax({
        url: "/p/" + city + "/" + branch + ".json",
        data : {
            limit: 100
        },
        success : uwvakman.companysearchResult,
        dataType : 'json'
    });
}

uwvakman.getIconUrl = function(index, company)
{
    if ((index < 9) && (company.User['accounttype_id'] >= 4))
        return '/img/map/17px-' + (index + 1) + '.png';
    else if (company.User['accounttype_id'] !== null)
        return '/img/map/17px.png';
    else
        return '/img/map/17px_grey.png';
}

uwvakman.companysearchResult = function(data) {
    // Clear all existing markers
    for(var ii = 0; ii < uwvakman.map.markers.length; ii++) {

        uwvakman.map.markers[ii].setMap(null);
    }
    uwvakman.map.markers.length = 0;
    $('#searchResults').text('');
    
    // Add all new companies as markers
    for(var ii=0; ii < data.companies.length; ii++) {

        var company = data.companies[ii];
        var iconUrl = uwvakman.getIconUrl(ii, company);
        var marker = new google.maps.Marker({
            position : new google.maps.LatLng(company.Company.lat, company.Company.lng),
            map      : uwvakman.map.map,
            icon     : iconUrl,
            zIndex   : 1000 - ii
        });

        uwvakman.map.markers.push(marker);

        var companyLink = '/company/' + $.htmlEncode(company.Company.id);

        var infoHTML = 
                '<h3><a href="'+ companyLink + '">' + $.htmlEncode(company.Company.name) + '</a></h3>' +
                "<div class=\"companyInfo\">" + 
                $.htmlEncode(company.Company.address + ' ' + company.Company.postalcode.substr(0,4) + ' ' + company.Company.postalcode.substr(4,2)) + ' ' + company.City.name + '<br />';

        if (company.Company.phonenumber) { 
            infoHTML+='Tel. ' + $.htmlEncode(company.Company.phonenumber); 
        }

        infoHTML+='<span class="companyInfoLink">';
        if (company.Company.url && company.Company.url.length>1) {
            infoHTML+='<a class="link1" href="'+$.htmlEncode(company.Company.url)+'"> Bezoek website</a> ';
        }
        if (company.Company.requestproposal=="1") {
            infoHTML+='<a class="link1" href="'+companyLink+'"> Offerte aanvragen</a> ';
        }
        if (company[0].AdCount > 0)
            infoHTML += '<a class="link1" href="/ads/index/company/' + company.Company.id + '">' + company[0].AdCount + ' ' + (company[0].AdCount > 1 ? 'aanbiedingen' : 'aanbieding') + '</a>';
        infoHTML+='</span>';
        infoHTML+='<br style="clear:both" />';
        infoHTML+='</div>';

        var infowindow = new google.maps.InfoWindow();

        marker.infoHTML = infoHTML;
        google.maps.event.addListener(marker, 'click', function() {
            
            infowindow.setContent(this.infoHTML);
            infowindow.open(this.map, this);

        });
        
        if (ii < 9) {

            var searchHTML = $(infoHTML); 

            var mapLink = $('<img src="' + iconUrl + '" style="float: left; padding: 0 5px 0 0"/>');
            mapLink.bind('click', {marker: marker}, function(event) {
                google.maps.event.trigger(event.data.marker,'click');
              });
            $('#searchResults').append(mapLink);
            $('#searchResults').append(searchHTML);
        }
    }
}

/* Custom html encoding function */
$.htmlEncode = function(value) {
    return $('<div/>').html(value).text(); 
}

