var placemark, banks = {}, searchResults = {};
var DAY = 24 * 60 * 60 * 1000;
var date = new Date();
date.setTime(date.getTime() + (365 * DAY)); // сколько будут хранится куки

function setPlacemark(obj)
{
    placemark.name = obj.address;
    placemark.setCoordPoint (new YMaps.GeoPoint(obj.position[0], obj.position[1]));
    YMap.addOverlay(placemark);
}



function behaviour() {

    // Получаем JSON данные: банки, url загрузки данных о банкоматах, url иконки
    $.getJSON('/data/banks', {}, function(json)  // TODO: sandbox
    {
        var checked = $.cookie('banks');
        var isCooked = Boolean(checked);
        var checkBank = getParam("cb");
        checked = String(checked).split(',');
        if (checkBank)
            checked[checked.length] = parseInt(checkBank);
        $.each(json.items, function(index, bank)
        {
            banks[index] = {};
            banks[index].id = bank.id;
            banks[index].title = bank.title;
            banks[index].description = bank.description;
            banks[index].dataUrl = bank.dataUrl;
            banks[index].iconUrl = bank.iconUrl;
            banks[index].amount = bank.amount;
            banks[index].overlay = new YMaps.YMapsML(banks[index].dataUrl);

            $('#mDolly').clone()
                .attr('id','mItem'+index)
                .attr('index',index)
                .find('input:checkbox')
                    .attr('checked', (checked.in_array(banks[index].id) || !isCooked)?'checked':'')
                    .attr('id', 'mCheckbox'+index)
                    .attr('name', 'mCheckbox')
                    .val(index)
                    .end()
                .find('img.bankIcon')
                    .attr('src', banks[index].iconUrl)
                    .end()
                .find('span.bankTitle')
                    .html(banks[index].title)
                    .end()
                .find('span.bankAtmAmount')
                    .html(banks[index].amount)
                    .end()
                .appendTo('#menu');
        });

        
        if (isCooked)
        {
            $.each(banks, function(index)
            {
                if (checked.in_array(banks[index].id))
                    YMap.addOverlay(banks[index].overlay);
            });
        }
        else
            $.each(banks, function(index)
            {
                YMap.addOverlay(banks[index].overlay);
            });
    });

    $("#menu input:checkbox").live('change', function ()
    {
        var checked = [];
        $("#menu input:checked").each(function(){
            checked[checked.length] = banks[$(this).parents('#menu > li').attr('index')].id;
        });
        $.cookie('banks', checked.join(','), {expires: date});
        if ($(this).attr('checked'))
            YMap.addOverlay(banks[$(this).parents('#menu > li').attr('index')].overlay);
        else
            YMap.removeOverlay(banks[$(this).parents('#menu > li').attr('index')].overlay);
    });

    $("#mCheckboxAll").live('change', function ()
    {
        var ch = $(this).attr('checked');
        $("#menu input:checkbox").not("#_inputId_").each(function(){
            $(this).attr('checked', ch);
            if (ch)
                YMap.addOverlay(banks[$(this).parents('#menu > li').attr('index')].overlay);
            else
                YMap.removeOverlay(banks[$(this).parents('#menu > li').attr('index')].overlay);
        });
        var checked = [];
        $("#menu input:checked").each(function(){
            checked[checked.length] = banks[$(this).parents('#menu > li').attr('index')].id;
        });
    });

    YMaps.Events.observe(YMap, YMap.Events.BalloonOpen,  function () {
        $('.balloonBodyPosition').click(function(){
            YMap.panTo(new YMaps.GeoPoint($(this).attr('lon'), $(this).attr('lat')));
            return false;
        });
        $('.balloonBodyComplain').click(function(){
            $('#infoMessage ul').html('<li>Загрузка…</li>');
            $.getJSON($(this).attr('href'), function(json)
            {
                $('#infoMessage ul').html(
                    '<li class="'+json.status+'">'+json.message+'</li>'
                );
                $('#infoMessage').slideDown('fast');
            });
            return false;
        });
    });

    $('#searchForm').submit(function(){
        $('#searchResults ul').html('<li>Загрузка…</li>');
        $.getJSON(
            '/data/geocoder?'
            +'geocode='+$('#searchQuery').val()
            +'&rspn='+1
            +'&ll=' + YMap.getCenter().toString()
            +'&spn=' + YMap.getBounds().getSpan().toString(6)
            ,
            {},
            function(json)
            {

                if (json.found > 0)
                {
                    $('#searchResults ul').empty();
                    $.each(json.items, function(index, searchResult)
                    {
                        searchResults[index] = {};
                        searchResults[index].address = searchResult.address;
                        searchResults[index].lowerCorner = searchResult.lowerCorner;
                        searchResults[index].upperCorner = searchResult.upperCorner;
                        searchResults[index].position = searchResult.position;

                        $('#Dolly').clone()
                        .removeAttr('id')
                        .find('a.searchResult')
                        .attr('index',index)
                        .attr('href', 'http://maps.yandex.ru/?text='+encodeURIComponent(searchResult.address))
                        .html(searchResult.address)
                        .end()
                        .find('div.position')
                        .html(searchResult.position.join(', '))
                        .end()
                        .wrap('<li></li>')
                        .appendTo('#searchResults ul');
                    });
                }
                else
                {
                    $('#searchResults ul').html('<li>Ничего не нашлось</li>');
                }
            });
        $("#searchResults").slideDown('fast');
        return false;
    });
    $('#searchResults a').live('click', function(){
        var obj = searchResults[$(this).attr('index')];
        setPlacemark(obj);
        $.cookie('home', obj.position[0]+','+obj.position[1]);
        YMap.panTo(new YMaps.GeoPoint(obj.position[0], obj.position[1]));
        return false;
    });
    $('#searchResults .closeDivButton').click(function(){
        YMap.removeOverlay(placemark);
    });
    var style = new YMaps.Style();
    style.iconStyle = new YMaps.IconStyle();
    style.iconStyle.href = "/images/placemarks/_home.png";
    style.iconStyle.size = new YMaps.Point(26, 28);
    style.iconStyle.offset = new YMaps.Point(-4, -27);
    placemark = new YMaps.Placemark(YMap.getCenter(), {
        style: style,
        draggable:true,
        hasBalloon:false,
        hasHint:true
    });
    YMaps.Events.observe(placemark, placemark.Events.DragEnd, function (obj) {
        placemark.name = "Координаты: " + placemark.getCoordPoint().toString();
        $.cookie('home', placemark.getCoordPoint().toString());
        obj.update();
    });

    /*var oldHeight = $('#leftContainer').height();
    $('#leftContainer').css('max-height', $('#YMapsID').height()-50);
    $('#menu').css('max-height', $('#menu').height()-(oldHeight-$('#leftContainer').height()));*/
};
