var map;
var geocoder;
var clusterer;
var markers;
var host = 'http://kriminala.net/';
var searchUrl = host + 'ru/api/map/markers';
var addUrl = host + 'ru/api/map/add';


function load() {
    if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map_canvas'));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();
        map.setCenter(new GLatLng(55.750378, 37.616631), 11);

        if (logged) {
            addSaveListener();
        }
        searchAll();
    }
}


function addSaveListener() {
   GEvent.addListener(map, "click", function(overlay, latlng) {
      if (latlng) {
        marker = new GMarker(latlng, {draggable:true});
        GEvent.addListener(marker, "click", function() {
          var html = '<b>Происшествие</b><br><textarea cols="40" rows="5" id="text" name="text"/></textarea><br>' +
                        getSelect()
                     + '<br><input type="button" value="Сохранить" onclick="saveData()"/>';

          marker.openInfoWindow(html);
        });
        map.addOverlay(marker);
      }
    });
}


function getSelect() {
    var html = '<select id="type_id">';
    for (option in types) {
        html += '<option value="' + option + '">' + types[option]['tname'] + '</option>';
    }
    html += '</select>';
    return html;
}

function saveData() {
    var text = encodeURIComponent(document.getElementById("text").value);
    var typeId = document.getElementById("type_id").value;
    var latlng = marker.getLatLng();
    var lat = latlng.lat();
    var lng = latlng.lng();      

    var postBody = 'text=' + text + '&type_id=' + typeId + '&lat=' + lat + '&lng=' + lng;

    GDownloadUrl(addUrl, function(data, responseCode) {
        if (responseCode == 200 && data.length <= 1) {
            markers = undefined;
            marker.closeInfoWindow();
        } else if (data.length < 60) {
            alert(data);
        } else {
            alert('Ошибка. Попробуйте позже');
        }
    }, postBody, "application/x-www-form-urlencoded");
}

function searchAddress() {
    var address = document.getElementById('address').value;
    geocoder.getLatLng(address, function(latlng) {
        if (!latlng) {
            alert('Адрес ' + address + ' не найден');
        } else {
            map.setCenter(latlng, 13);
        }
    });
}

    
function getCheckedTypes() {
    var checkboxes = document.getElementsByName('types');
    
    var checked = {};
    for (var i = 0; i < checkboxes.length; i++) {
        checked[checkboxes[i].id] = checkboxes[i].checked;
    }
    return checked;
}
    
    
function buildMarkers(markers) {
    map.clearOverlays();
    clusterer = new Clusterer(map);
    var bounds = new GLatLngBounds();
    var checked = getCheckedTypes();

    for (var i = 0; i < markers.length; i++) {
        var text = markers[i].getAttribute('text');
        var type = markers[i].getAttribute('type');
        var type_id = markers[i].getAttribute('type_id');
        var username = markers[i].getAttribute('username');

        if (checked[type_id] !== true) {
            continue;
        }


        var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                             parseFloat(markers[i].getAttribute('lng')));

        var marker = createMarker(point, text, username, type, type_id);
        clusterer.AddMarker(marker, shortTitle(text));
        bounds.extend(point);
    }

    return bounds;
}


function shortTitle(text) {
    return text.substr(0, 35) + '&nbsp;...';
}


function searchAll() {
    if (typeof(markers) === 'undefined') {
        GDownloadUrl(searchUrl, function(data) {
            var xml = GXml.parse(data);
            markers = xml.documentElement.getElementsByTagName('marker');
            buildMarkers(markers);
        });
    } else {
       buildMarkers(markers);
    }
}

function createMarker(point, text, username, type, type_id) {
    var tinyIcon = new GIcon();
    tinyIcon.image = types[type_id]['icon'];
    tinyIcon.iconSize = new GSize(32, 32); //размеры иконки
    tinyIcon.iconAnchor = new GPoint(16, 16); // "центр" иконки
    tinyIcon.infoWindowAnchor = new GPoint(16, 10); // точка привязки инфоокна 

    markerOptions = { icon:tinyIcon };

    var marker = new GMarker(point, markerOptions);
    var html = 'Добавил <img src="http://kriminala.net/images/i_account.gif"> <b>' + username + '</b> <span class="type">(' + type + ')</span> <br/><textarea class="message" readonly="readonly" cols="40" rows="6">' + text + '</textarea>';

    var i = 0;
    GEvent.addListener(marker, 'mouseover', function() {
        marker.openInfoWindowHtml(html);
        i = 0;
    });
    GEvent.addListener(marker, 'mouseout', function() {
        if (i == 0) {
            marker.closeInfoWindow();
        }
    });
    GEvent.addListener(marker, 'click', function() {
        i = 1;
    });

    return marker;
}


$(document).ready(function() {
    
    var colors = ['DarkSlateBlue', 'DarkSlateGray', 'ForestGreen', 'IndianRed', 'DarkViolet', 'GoldenRod', 'MediumPurple', 'DarkTurquoise', 'DodgerBlue', 'DimGray', 'LightBlue', 'LimeGreen', 'LightSteelBlue', 'MediumOrchid', 'Maroon', 'LightSlateGray', 'LightSalmon', 'LightCoral', 'LightSkyBlue', 'LightSeaGreen', 'CornflowerBlue', 'Coral', 'DarkCyan', 'Crimson', 'Chocolate', 'Brown', 'CadetBlue', 'BurlyWood', 'DarkGoldenRod', 'DarkSalmon', 'DarkRed', 'darkSeaGreen', 'DarkSeaGreen', 'DarkOrchid', 'DarkGreen', 'DarkGray', 'DarkOliveGreen', 'DarkKhaki', 'MediumSeaGreen', 'Tomato', 'Thistle', 'YellowGreen', 'Violet', 'Teal', 'SlateGray', 'SlateBlue', 'Tan', 'SteelBlue', 'MediumTurquoise', 'SkyBlue', 'OliveDrab', 'Olive', 'PaleVioletRed', 'Orchid', 'Navy', 'MediumSlateBlue', 'MidnightBlue', 'MediumVioletRed', 'Peru', 'SeaGreen', 'SandyBrown', 'Silver', 'Sienna', 'Salmon', 'RosyBrown', 'Plum', 'SaddleBrown', 'RoyalBlue'];
    
    $(".balloon").mouseover(function() {
        var random_position = Math.floor(Math.random() * colors.length);
        $(this).css('background-color', colors[random_position]);
    });



    $(".banner").each(function() {
        var url = 'http://kriminala.net/rotator/rotation.php?format=' + $(this).attr('id') + '&callback=?';
        var banner_div = $(this);
        
        $.getJSON(url, function(data) {
            banner_div.html(data);
        });
    });




    $("#countries_menu a").click(function() {
        var page = '#c_' + $(this).attr('rel');
        $("#countries_menu > a").removeClass('active');
        $(this).attr('class', 'active');
        $(".countries").hide();
        $("#code").hide();
        $(".forms").hide();
        $("#all_forms").hide();
        $(page).show();
        
        return false;
    });

    $(".form_links").click(function() {
        var num = "#" + $(this).attr('rel');
        $(".forms").hide();
        $("#code").hide();
        $("#all_forms").show();
        $(num).show();
        return false;
    });
    
    $("button").click(function() {
        var nomer_id = $(this).attr("value").replace('num', '');
        var text = '';
        $('#' + $(this).attr("value") + ' > input, #' + $(this).attr("value") + ' > select').each(function() {
            text = text + $(this).attr('value');
        });

        var image_url = host + 'ru/api/nomera/' + nomer_id + '/' + text + '.png';
        var inf_url = host + 'ru/informer';
        
        var image_code = '<table><tr><td colspan="2"><img src="' + image_url + '"></td></tr>';
        var html_code = '<a href="' + inf_url + '" target="_blank"><img src="' + image_url + '"></a>';
        var bb_code = '[url=' + inf_url + '][img]' + image_url + '[/img][/url]';
        var output_html = image_code + '<tr><td>HTML-код<br><textarea rows="5" cols="30">' + html_code + '</textarea></td>' +
                          '<td>Код для форума<br><textarea rows="5" cols="30">' + bb_code + '</textarea></td></tr></table>';
        $("#code").html(output_html);
        $("#code").show();
    });

    $("div.column").hover(function() {
        $(this).toggleClass('hvr');
    });


    $(".hideshow").click(function(event) {
        event.preventDefault();
        
        // Блок с короткой версией счета
        var short_bill = $(this).parent().parent();
        // Блок с полной версией счета
        var full_bill = short_bill.next();
        
        // Блок с полным счетом показан или нет?
        var isShow = full_bill.css('display') != 'none';
        
        // Блоки, которые нужно скрывать при открытие полного счета
        var hide_blocks = short_bill.find('span:not(.more)');
        // Ссылка в которой нужно менять стрелку
        // (при открытом — вверх, призакрытом — вниз)
        var more = short_bill.find('span.more > a');
        
        if (isShow) {
            $(this).attr('title', 'Развернуть');
            hide_blocks.fadeTo('fast', 1);
            more.html('&darr;'); // Стрелка вверх
            full_bill.slideUp();
        } else {
            $(this).attr('title', 'Свернуть');
            hide_blocks.fadeTo('fast', 0.1);
            more.html('&uarr;'); // Стрелка вниз
            full_bill.slideDown();
        }
    });

    $("span.status.cancel a").click(function(event) {
        confirm('Вы точно хотите отменить этот счёт?') || event.preventDefault();
    });
    
    
    $("span.status.delete a").click(function(event) {
        confirm('Вы точно хотите удалить этот счёт?') || event.preventDefault();
    });
    
    $("span.status.claim a").click(function(event) {
        confirm('Вы точно хотите написать претензию?') || event.preventDefault();
    });
    
    $("a.payment_group").click(function(event) {
        event.preventDefault();
        $(this).next().slideToggle();
    });
    
    
    var toggle_forms = $("a.toggle_forms");
    if (toggle_forms) {
        var form_hash = window.location.hash;
        if (form_hash) {
            $(form_hash).slideDown();
        }
    }
    
    toggle_forms.click(function(event) {
        event.preventDefault();
        
        var form_block = $(this).parent().next();
        var form_block_id = form_block.attr('id');
        $("div.send_forms:not(#" + form_block_id + ")").slideUp();
        form_block.slideToggle();
        
        window.location.hash = form_block_id;

    });
    
    // Кнопка "У вас есть вопрос?"
    (function() {
        var hide = document.getElementById("hide_contact");
        var contact = document.getElementById("contact");
        
        if (! hide || ! contact) {
            return;
        }
        
        
        hide.onclick = function() {
            // Статус ссылки (показана или нет)
            var isShowed = contact.style.display == 'none' ? false : true;
            
            // Если ссылка показана, то скрываем её и наборот (toggle).
            contact.style.display = isShowed ? 'none' : 'block';
            // Меняем статус
            isShowed = ! isShowed;
            // В зависимости от статуса ссылки показывает картинку "скрыть" или "показать" (toggle)
            hide.style.backgroundImage = 'url("/images/' + (isShowed ? 'hide' : 'show')  + '.png")';
        
            // Запоминаем текущий статус.
            rememberStatus(isShowed);
        
            return false;
        };
        
    })();
    
    
    $("#review .pagination a").live('click', function() {
        var url = 'http://' + window.location.hostname + $(this).attr("href");
        $.get(url, function(data) {
            $("#review").html(data);
        });

        return false;
    });
    
    
    $("#pokOffer").click(function(event) {
        event.preventDefault();
        showFirstTab();
    });

    $("#pokUse").click(function(event) {
        event.preventDefault();
        showSecondTab();
    });
    
    $("#change_theme #black_theme").click(function(event) {
        if (! confirm("В темной теме возможны проблемы с корректной работой некоторых модулей")) {
            event.preventDefault();
        }
    });
    
    
    $("span.f_password").each(function() {
        var pass = $(this).attr('rel');
        $(this).replaceWith('<input type="hidden" name="password" value="' + pass + '">');
    });
    
});

function getStatus() {
    return getCookie('contact_button_status') == 'false' ? false : true;
}

function rememberStatus(status) {
    var one_year = new Date();
    one_year.setFullYear(2012);
    document.cookie = "contact_button_status=" + status + "; path=/; expires=" + one_year.toUTCString();
}


// возвращает cookie если есть или undefined
function getCookie(name) {
    var matches = document.cookie.match(new RegExp(
      "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ))
    return matches ? decodeURIComponent(matches[1]) : undefined 
}
    
    
function showFirstTab() {
    $("#pokRight").attr('id', 'pokLeft');
    $("#fpage").show();
    $("#spage").hide();
}

function showSecondTab() {
    $("#pokLeft").attr('id', 'pokRight');
    $("#spage").show();
    $("#fpage").hide();
}

