
/**
* Географическая система на основе Google Maps.
* @author Баштанник Андрей, bashtannik@gmail.com, 09/12/2009
* @version 1.0
*/

var only_one_infowindow; // Только одно информационное окно может быть открыто и не ебет!
var map; // Глобал мэп
var deflat;
var deflng
var searchmode=false; // В режиме поиска при перемещении информация на запрашивается.
/**
 * Инициализация Google Maps.
 */
function initialize() {
var myOptions = {
    zoom: 10,
    center: new google.maps.LatLng(deflat,deflng),
    mapTypeId: google.maps.MapTypeId.ROADMAP
};

map = new google.maps.Map(document.getElementById("map"),myOptions);
//Обработка событий
google.maps.event.addListener(map, 'bounds_changed', function() {
      	//Пок-пок-пок переместились
        if(!searchmode)
        loadObjectsByBounds(this.getBounds().toUrlValue());

    });




}


/**
 * Создает маркер на карте.
 * @param map Карта Google.
 * @param lat Широта.
 * @param lng Долгота.
 * @param image_url Адрес картинки
 * @param title Заголовок.
 * @return Marker Маркер на карте.
 */
function createMarker(map, lat, lng, image_url, title)
{
    // Создаем картинку

    var image = new google.maps.MarkerImage(image_url);

    var myLatLng = new google.maps.LatLng(lat, lng);

    var marker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        icon: image,
        title: title,
    });
    map.addMarker(marker);
    return(marker);
}


/**
* Навигация центра. Устанавливает центр окна на указанные координаты.
* @param map Карта Google.
* @param lat Широта.
* @param lng Долгота.
* @return Bounds Координаты получившегося квадрата видимости.
*/
function setCenter(map, lat, lng)
{
    var latlng=new google.maps.LatLng(lat, lng);
    map.panTo(latlng);
    return(map.getBounds());
}


/**
* Создает информационное окно к маркеру на карте
* @param marker Объект маркера (точка).
* @param html HTML-код содержимого окна.
* @return InfoWindow Объект окна.
*/

function createInfoWindow(map, marker, html)
{
   var infowindow = new google.maps.InfoWindow({
        content: html
    });
    google.maps.event.addListener(marker, 'click', function() {
    if(only_one_infowindow!=null)  
        only_one_infowindow.close();
    only_one_infowindow=infowindow;
      infowindow.open(map,marker);
    });

   google.maps.event.addListener(infowindow, 'domready', function() { // Событие, прикрипление элементов к DOM дереву
    $('#gallery a').lightBox(); // Только теперь можно создать галерею
});

    return(infowindow);
}

/**
* Формирует HTML для заполнения InfoWindow.
* @param Array data Данные для HTML
* data['name'] - Название
* data['description'] - Описание
* data['photo'] - Фотография
* data['phone'] - Телефон
* data['website'] - Сайт
* data['email'] - Емайл
* data['feed'] - Двумерный массив с информационной лентой ([]['title'] - Заголовок, []['content'] - Текст)
* data['video_code'] - HTML-код от видеохостинга
* data['address'] - Адрес
* data['help'] - как добраться
* @return String HTML код.
*/
function buildHTML(data)
{
    var html="<h1>"+data['name']+"</h1>";
    var html="<table class=\"container-table\">";
    html+="<tr><td>";
    html+="<table class=\"container-table\"><tr>";
    html+="<td id=\"gallery\"><a href=\"photos/"+data['photo']+"\"><img src=\"photos/"+data['photo']+"\" class=\"photo\"></a><td>";
    html+="<td><h1 class=\"name\"><a href=\"user/"+data['ID']+"\">"+data['name']+"</a></h1><p class=\"description\">"+data['description']+"</p></td></table>";
    html+="</td></tr><tr><td>";
    html+="<p class=\"phone\">"+data['phone']+"</p>";
    html+="<a class=\"link\" href=\"mailto: "+data['email']+"\">"+data['email']+"</a>&nbsp;";
    html+="<a class=\"link\" href=\""+data['website']+"\">"+data['website']+"</a><br>";
    html+="</td></tr><tr><td>";
    //html+="<div class=\"video\">"+data['video_code']+"</div>";
    html+="</td></tr><tr><td>";
    html+="<p class=\"address\">"+data['address']+"</p>";
    html+="</table>";
    return(html);
}

// Расширение Google API

google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.addMarker = function(marker) {
    this.markers[this.markers.length] = marker;
};

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {

    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

