var metro_clusters = [[47, 145], [69, 117], [68, 131], [72, 103], [71, 126], [127, 143], [8, 81, 144], [30, 83], [11, 66, 129, 163, 49], [104, 128, 28], [9, 105], [48, 29, 10], [116, 146], [106, 147], [136, 156], [50, 164]];

function clearForm() {
	$('#form_search').get(0).reset();
	initCenterFactorTrackbar(); 
	sel_metros();
}

function filter_cf(start, end) {
    RERENDER_ENABLED = false;
    for (var i in db_metros) {
        if (db_metros[i].center_factor < start || db_metros[i].center_factor > end) {
            console_log('deselecting ' + i + ' because it has cf #' + db_metros[i].center_factor);
            deselectswf(i);
            deselect_metro(i);
        }
    }
    RERENDER_ENABLED = true;
    sel_metros();

}

function showFlashMap() {
    $('div#flash').css({'left':$('div#search').offset().left - 650});
    $('#flash').show();
    setTimeout("initFlashMap()", 1000);
//                                	initFlashMap();
    return false;
}

function hideFlashMap() {
    $('#form_search a#toggle_map').text('показать карту');
    $('#flash').hide();
    return false;
}

function toggleFlashMap() {
	if ($('#flash').css('display') == 'none') {
		$('#form_search a#toggle_map').text('скрыть карту');
		return showFlashMap();
	} else {
		$('#form_search a#toggle_map').text('показать карту');
		return hideFlashMap();
	}
}

//                                $('flashcontent').load(initFlashMap);

function initFlashMap() {
    RERENDER_ENABLED = false;

    var selected_metros = $('#sel_metro').val() ? $('#sel_metro').val() : [];

    for (i in selected_metros) {
        selectswf(selected_metros[i]);
    }

    var selected_metrolines = $('#sel_metroline').val() ? $('#sel_metroline').val() : [];
    for (i in selected_metrolines) {
        selectLines(selected_metrolines[i]);
    }

    RERENDER_ENABLED = true;

}

function handler_selectStation(m_id)
{
    //alert('selectStations('+m_id+')');
    console_log('handler_selectStation:' + m_id);
    select_metro(m_id);

}

function handler_selectLine(l_id) {
    console_log('handler_selectLine:' + l_id);
    select_metroline(l_id);

}

function handler_deselectLine(l_id) {
    console_log('handler_deselectLine:' + l_id);
    deselect_metroline(l_id);

}

function deselectStations(id) {
    console_log('deselectStations:' + id);
    deselect_metro(id);
}

function select_metro(id) {
    $('#sel_metro > option[@value=' + id + ']').attr('selected', 1);
    sel_metros();
}
function deselect_metro(id) {
    deselectswf(id);
    $('#sel_metro > option[@value=' + id + ']').removeAttr('selected');
    sel_metros();
}
function select_metroline(id) {
    $('#sel_metroline > option[@value=' + id + ']').attr('selected', 1);
    sel_metros();
}
function deselect_metroline(id) {
    $('#sel_metroline > option[@value=' + id + ']').removeAttr('selected');
    for (j in db_metro_lines[id]) {
        var metro_id = db_metro_lines[id][j];
        $('#sel_metro > option[@value=' + metro_id + ']').removeAttr('selected');
    }
    sel_metros();
}

var SM_LAST = (new Date()).getTime();
var SM_PENDING = false;
var SM_PENDING_COUNT = 0;

function get_selected_lines_calc(selected_metros) {
    //                            		return [[], selected_metros];
    var lines = [];
    for (i in selected_metros) {
        var metro_id = selected_metros[i];
        for (j in db_metros[metro_id].metro_lines) {
            metro_line_id = db_metros[metro_id].metro_lines[j];
            if (lines[metro_line_id] == undefined) {
                lines[metro_line_id] = [];
            }
            lines[metro_line_id][lines[metro_line_id].length] = metro_id;

        }
    }

    var ret = [];
    var stations = selected_metros;
    for (i in lines) {
        if (db_metro_lines[i].length == lines[i].length) {
            ret[ret.length] = i;
            stations = $.grep(stations, function(el) {
                // if station in collapsed line, do not show it
                if ($.inArray(el, lines[i]) > -1) return false;
                return true;
            });
        }
    }

                                        // if any cluster neighbour of stations is in collapsed line, do not show it
    stations = $.grep(stations, function(el) {
        el = parseInt(el);
        if (el == 131) {
            console_log(131);
        }
        for (i in metro_clusters) {
            var cluster = metro_clusters[i];
            if ($.inArray(el, cluster) > -1) {
                for (l in cluster)
                    if (cluster[l] != el)
                    {
                        var n = cluster[l];
                        for (r in ret) {
                            if ($.inArray(n, db_metro_lines[ret[r]]) > -1)
                                return false;
                        }
                    }
            }
        }

        return true;
    });

    return [ret, stations];

}

function sel_metros(pending) {
    /*                            		if (pending === undefined)
                                                        pending = false;
                                                if (!(pending === true))
                                                        pending = false;

                                                console_log('running with ' + pending);

                                                if (pending) {
                                                        console_log('SM_PENDING_COUNT='+SM_PENDING_COUNT);
                                                        SM_PENDING_COUNT--;
                                                        if (SM_PENDING_COUNT > 0) {
                                                                console_log('not last pend');
                                                                return;
                                                        } else {
                                                                console_log('seems like the last pended');
                                                        }
                                                } else {
                                                        if ((new Date()).getTime() - SM_LAST < 700) {
                                                                setTimeout('sel_metros(true)', 1000);
                                                                SM_PENDING_COUNT++;
                                                                console_log('delaying');
                                                                console_log('del SM_PENDING_COUNT='+SM_PENDING_COUNT);

                                                                return;
                                                        } else {
                                                                console_log('normall');
                                                        }
                                                }
    */

    SM_LAST = (new Date()).getTime();
    if (!RERENDER_ENABLED) return;

    console_log('rerendering!');

    var selected_metros = $('#sel_metro').val() ? $('#sel_metro').val() : [];

    var calc = get_selected_lines_calc(selected_metros);
    selected_metros = calc[1];

    $('#selected_stations').html('');
    for (i in selected_metros) {
        var name = $('#sel_metro > option[@value=' + selected_metros[i] + ']').text();
        var color = $('#sel_metro > option[@value=' + selected_metros[i] + ']').css('color');
        $('#selected_stations').append('<span class="station"><a href="#" style="color:' + color + '" onclick="$(this).parents(\'.station\').remove();deselect_metro(' + selected_metros[i] + ');return false;">' + name + '</a></span> ');
    }

    var selected_metrolines = calc[0];//$('#sel_metroline').val() ? $('#sel_metroline').val() : [];
    $('#selected_lines').html('');

    for (i in selected_metrolines) {
        var name = $('#sel_metroline > option[@value=' + selected_metrolines[i] + ']').text();
        var color = $('#sel_metroline > option[@value=' + selected_metrolines[i] + ']').css('color');
        name = name.replace('линия', '');
        $('#selected_lines').append('<span class="line"><a href="#" style="color:' + color + '" onclick="$(this).parents(\'.line\').remove();deselect_metroline(' + selected_metrolines[i] + ');return false;">' + name + '</a></span> ');
    }

    if ((selected_metrolines.length != db_metro_lines.length) && (selected_metros.length + selected_metrolines.length > 0)) {
        $('#selected_lines_stations_all').hide();
        $('#selected_lines_stations').show();
        if (selected_metros.length > 0) {
            $('#selected_stations_c').show();
            $('#selected_stations_c > h6').text(selected_metros.length > 1 ? 'Станции: ' : 'Станция: ')
        } else {
            $('#selected_stations_c').hide();
        }
        if (selected_metrolines.length > 0) {
            $('#selected_lines_c').show();
            $('#selected_lines_c > h6').text(selected_metrolines.length > 1 ? 'Линии: ' : 'Линия: ')

        } else {
            $('#selected_lines_c').hide();
        }
    } else {
        $('#selected_lines_stations').hide();
        $('#selected_lines_stations_all').show();
    }

}

$(document).ready(function() {
    $('a#toggle_districts').click(function () {
        if (this.innerHTML == 'выбрать все') {
            this.innerHTML = 'снять выделение';
            $('.cb_district').attr('checked', 1);
        } else {
            this.innerHTML = 'выбрать все';
            $('.cb_district').attr('checked', 0);
        }
        return false;
    });

    $('.cb_district').click(function() {

        RERENDER_ENABLED = false;
        for (var i in db_metros) {
            if (db_metros[i].district_id == this.value) {
                if (($(this).is(":checked"))) {
                    selectswf(i);
                    handler_selectStation(i);
                } else {
                    deselectswf(i);
                    deselect_metro(i);
                }
            }
        }
        RERENDER_ENABLED = true;
        sel_metros();
    }
            );

    if ($('#form_search').size() > 0) {

        var flashvars = {
        };
        var params = {
            allowScriptAccess: "always",
            swLiveConnect: "true"
        };
        var attributes = {
            id: "flash_id",
            name: "flash_id"
        };
        swfobject.embedSWF("/swf/metro2008.swf", "flashcontent", "620", "730", "9.0.0", "expressInstall.swf", flashvars, params, attributes);

        sel_metros();
    }

	update_stored();


});


