function yandexMapsSetSearchPanel() {
    //yandexMapGeneral.addControl(new YMaps.SearchControl());
}
/*
 * Обработчик ошибок загрузки Яндекс карт
 */
function yandexMapsLoadError(err)
{
	/*
	window.onload = function()
	{
		alert( 'Ошибка загрузки Яндекс карт: ' + err );
    }*/
}

// Глобальный объект Яндекс карты
var yandexMapGeneral = null;

// для редактирования объявлений:
// при первом открытии карты нужно показать выбранное пользователем место
// и не показывать его при выборе нового
var initialLocationShow = true;


/*
 * При добавлени\редактировании объявления показывает попап с картой 
 * для выбора расположения объекта	
 */
adMapObject = null;
function showAdMapDialog(lng, lat, zoom)
{
	var coords = [lng, lat];
	var validUserCoords = true;

	if( lng == '' || lat == '')
	{
		coords = [55.038962, 82.928066];
		zoom = 10;

		validUserCoords = false;
	}
	else
	{
		coords = [parseFloat( lng ), parseFloat( lat )];
		zoom = parseInt( zoom );
	}

	if( !zoom ) zoom = 16;

    $( '#ie6frame' ).show();
	$( '#overlay' ).show();
    
    if( !Boxy.get( '#adMapDialog' ) ) {
        yandexMapsInit( 'yandexMap', coords, zoom, function() {
            adMapObject = new YMaps.Map( $( '#yandexMap' ) );

            yandexMapsSetCenter( coords[0], coords[1], zoom, adMapObject );
		    if( validUserCoords && initialLocationShow ) {
			    yandexMapsAddBubble( '', '', coords[0], coords[1], adMapObject );
		    }
            yandexMapsAddControls( adMapObject );

            YMaps.Events.observe( adMapObject, adMapObject.Events.Click, function( correctMap, event ) {
				var point = event.getGeoPoint();
				var lng   = point.getY();
				var lat   = point.getX();

				$( '#formMaps' ).val( lng + ',' + lat + '/16' );
				
				correctMap.removeAllOverlays();
				
				yandexMapsAddBubble( '', '', lng, lat, correctMap );
				initialLocationShow = false;
			} );
            
		    var agencyMapDialog = new Boxy( $( '#adMapDialog' ), {
				title: 'Выберите расположение объекта на карте',
				draggable: false,
				closeText: 'закрыть',
				afterHide: function()
				{
					$( '#overlay' ).hide();
					$( '#ie6frame:visible' ).hide();
				},
				afterShow: function()
				{
					adMapObject.redraw();
				}
			} );

		    $( '#adMapDialog .close' ).click( function() {
			    initialLocationShow = false;
			    $( '#formMaps' ).val( '' );
			    adMapObject.removeAllOverlays();
		    } );
	    } );
    } else {
        Boxy.get( '#adMapDialog' ).show();
    }
}

function yandexMapsAddControls( map, settings ) {

    if( !settings ) settings = {};
    
    if( !settings.typeCtl || settings.typeCtl == 'yes' ) {
		map.addControl( new YMaps.TypeControl() );
    }

    if( !settings.zoomCtl || settings.zoomCtl == 'yes' ) {
		var zoomControl = new YMaps.Zoom(
			{
				customTips: 
				[
					{ index: 10, value: "Город" },
					{ index: 13, value: "Улица" },
					{ index: 16, value: "Дом" }
				]
			} );
        
		map.addControl( zoomControl );
    }

    if( !settings.toolsCtl || settings.toolsCtl == 'yes' ) {
		var toolbarControl = new YMaps.ToolBar( 
			[ 
				new YMaps.ToolBar.MoveButton(),
				new YMaps.ToolBar.RulerButton()
			] );
		map.addControl( toolbarControl );
    }

}

/*
 * Инициализация Яндекс карт, изменения контролов,
 * центрирование по умолчанию на Новосибирск
 */
function yandexMapsInit(element, coords, zooming, loadCallback, settings)
{
	YMaps.load( function()
				{
                    var map = new YMaps.Map( $( '#' + element ) );

					var lng = 55.038962;
					var lat = 82.928066;
					var zoom = (zooming) ? zooming : 16;

					if( coords.length == 2 && coords[0] != '' && coords[1] != '' )
					{
						lng = coords[0];
						lat = coords[1];

					} else {
                    }

                    if( !yandexMapGeneral || yandexMapGeneral == map ) yandexMapGeneral = map;

					if( loadCallback ) loadCallback();
				} );
}

/*
 * Установка центрирования для Яндекс карты
 */
function yandexMapsSetCenter(lng, lat, zoom, object)
{
	if( (!yandexMapGeneral && !object) || !lng || !lat ) return;
	if( !zoom ) zoom = 13;

    var obj = ( object ) ? object : yandexMapGeneral;
    
	var point = new YMaps.GeoPoint( lat, lng );
	obj.setCenter( point, zoom );

}

/*
 * Получение координат по названию места, передача их
 * в виде массива в колбек функцию, указанную во втором 
 * параметре
 */
function yandexMapsGetPoint(where, finishCallback, object)
{
    var settings = { results: 1 };
    if( object ) settings.boundedBy = object.getBounds();
    else settings.boundedBy = yandexMapGeneral.getBounds();
    
    var geocoder = new YMaps.Geocoder( where, settings );
	
    YMaps.Events.observe( geocoder, geocoder.Events.Load, 
	function()
	{
        if( this.length() )
		{
            geoResult = this.get( 0 );
			var point = geoResult.getGeoPoint();

			if( finishCallback ) finishCallback( [point.getY(), point.getX()] );
        }
    } );

    YMaps.Events.observe( geocoder, geocoder.Events.Fault, 	function( geocoder, error ) {
		if( finishCallback ) finishCallback( [] );
    } );
}

/*
 * Показать одиночный попап с текстом	
 */
function yandexMapsShowSingleBaloon(lng, lat, content, object)
{
	if( (!yandexMapGeneral && !object) || (!lng && !lat) || content == '' ) return;

    var obj = ( object ) ? object : yandexMapGeneral;
	obj.openBalloon( new YMaps.GeoPoint( lat, lng ), content );
}

/*
 * Добавление маркера и всплывающего окна на карту
 */
function yandexMapsAddBubble(title, content, lng, lat, object)
{
	if( (!yandexMapGeneral && !object ) || (!lng && !lat) ) return;

    var obj = ( object ) ? object : yandexMapGeneral;

	if( !title ) title = '';
	if( !content ) content = '';

	var point = new YMaps.GeoPoint( lat, lng );
	var placemark = new YMaps.Placemark( point );

	if( title != '' ) placemark.name = title;
	if( content != '' ) placemark.description = content;

    obj.addOverlay( placemark );
}
