var search = {};

search.xhrSearch = null;
search.queryField = null;
search.filtersElement = null;
search.resultElement = null;

search.setQueryField = function(field) {
    search.queryField = field;
};

search.setFiltersElement = function(field) {
    search.filtersElement = field;
};

search.setResultElement = function(field) {
    search.resultElement = field;
};

search.queryStringManager = function() {
    var query = getParameterByName("q");
    if (query !== "") {
        $(search.queryField).val(query);
        search.doSearch();
    } else {
        $(search.queryField).focus();
    }
};

search.doSearch = function() {
    var query = $(search.queryField).val();

    if (query && history && history.pushState) {
        history.pushState({}, "", "?q=" + query.replace(/ /g, "+"));
    }

    if (search.xhrSearch !== null) {
        search.xhrSearch.abort();
    }

    search.xhrSearch = $.get("php/search.php", {
        q : query
    }, function(json) {
        if (json.success === true) {
            search.makeHtml(json.data.search);
        } else {
            $(search.resultElement).html("Desculpe, fizemos alguma coisa errada... :(");
        }
    });

};

search.makeHtml = function(jsonResult) {
    $(search.resultElement).html("");

    $(search.filtersElement).show();

    if (jsonResult.suggestion !== undefined) {
        $(search.resultElement).append(
            '<p>Você quis dizer: <a href="?q='
            + jsonResult.suggestion.replace(/ /g, "+") + '">'
            + jsonResult.suggestion + '</a></p>');
    }

    if (jsonResult.result_count == 0) {
        $(search.resultElement).append("Nenhum local encontrado.");
        return;
    }

    $(jsonResult.places).each(function(index, searchResult) {
        search.makePlaceHtml(searchResult.place);
    });
};

search.makePlaceHtml = function(place) {
    var address = place.address;
    var placeElementId = place.id;
    var placeElement = "#" + place.id;

    $(search.resultElement).append('<div id="' + placeElementId + '" class="vcard item" onclick=\'window.location="'+place.main_url+'"\'></div>');
    $(placeElement).append('<span class="fn org"><a href="' + place.main_url + '">' + place.name + '</a></span>');
    $(placeElement).append('<div class="adr"></div>');
    $(placeElement + " div").append('<span class="street-address">' + address.street + ', ' + address.number + '</span>');
    if (address.complement != "") {
        $(placeElement + " div").append(' - ' + address.complement);
    }
    $(placeElement + " div").append('<br/>');
    if (address.district != "") {
        $(placeElement + " div").append(address.district);
        $(placeElement + " div").append(' - ');
    }
    $(placeElement + " div").append('<span class="locality">' + address.city.name + '</span>');
    $(placeElement + " div").append(' - ');
    $(placeElement + " div").append('<span class="region">' + address.city.state + '</span>');
    if (place.phone.number != "") {
        $(placeElement).append(
            '<span class="tel">Fone: <a href="tel:' + place.phone.area
            + ' ' + place.phone.number + '">' + place.phone.area
            + ' ' + place.phone.number + '</a></span>');
        $(placeElement).append('<br/>');
    }
};

