﻿var filter;
var m_types = [
[40, 41, 42, 43, 44, 46, 47, 48, 49, 50],   //merchants
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 17], //craft
[20, 21, 22, 23, 24, 25, 26, 27, 28], //trainers
[11, 12, 13, 14, 15, 45] //misc
];
var a_types = ["a0", "a1", "a2", "a3"];   //extra
var filters = new Array();
var f_visible = false;

function InitFilter() {
    filter = document.getElementById("filtercont");
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].type == "checkbox") {AttachEvent(inputs[i],"click",FilterChecked,false);inputs[i].checked=true;filters.push(inputs[i]); }
    }

    AttachEvent(document.getElementById("filter"), "click", ToggleFilterPane, false);
}

function FilterChecked(e) {
    e = Event(e);
    if (e.Element.value != null) {
        var type=e.Element.value;
        if (/a(\d)/.test(e.Element.value)) type = m_types[RegExp.$1];
        
        if (e.Element.checked) FilterShow(type);
        else FilterHide(type);
    }
}

function ToggleFilterPane() { f_visible = !f_visible; filter.style.visibility = f_visible ? "visible" : "hidden"; }

function FilterShow(types) {
    var tmp = new Array();
    var all = (types == null);
    if (all) {
        types = new Array();
        types.push(1, 2, 3, 4, 10);
        types = types.concat(m_types[0], m_types[1], m_types[2], m_types[3], a_types);
    }
    if (types.constructor != Array) {
        types = new Array(types);
    }

    var tar = null;
    for (var v = 0; v < types.length; ++v) {
        for (var i = 0; i < m_types.length; ++i) {
            if (m_types[i].inArray(types[v])) {
                tar = m_types[i];
                break;
            }
        }
    }


    for (var f = 0; f < filters.length; ++f) {
        if (tar != null) {
            if (tar.inArray(filters[f].value)) {
                if (filters[f].checked && !tmp.inArray(filters[f].value)) {
                    tmp.push(filters[f].value);
                }
            }
        }
        for (var t = 0; t < types.length; ++t) {
            if (filters[f].value == types[t]) { filters[f].checked = true; }
        }
    }

    for (var m = 0; m < m_types.length; ++m) {
        if (m_types[m].Equals(tmp)) {
            for (var i = 0; i < filters.length; ++i) {
                if (filters[i].value == ("a" + m)) { filters[i].checked = true; break; }
            }
        }
    }

    for (var i = 0; i < map.Markers.length; i++) {
        for (var t = 0; t < types.length; t++) {
            if (map.Markers[i].Type == types[t]) { map.Markers[i].Visible(true); }
        }
    }
}

function FilterHide(types) {
    var tmp = new Array();
    var all = (types == null);
    if (all) {
        types = new Array();
        types.push(1, 2, 3, 4, 10);
        types = types.concat(m_types[0], m_types[1], m_types[2], m_types[3], a_types);
    }
    if (types.constructor != Array) { types = new Array(types); }

    var tar = null;
    for (var v = 0; v < types.length; ++v) {
        for (var i = 0; i < m_types.length; ++i) {
            if (m_types[i].inArray(types[v])) {
                tar = m_types[i];
                break;
            }
        }
    }

    for (var f = 0; f < filters.length; ++f) {
        if (tar != null) {
            if (tar.inArray(filters[f].value)) {
                if (!filters[f].checked && !tmp.inArray(filters[f].value)) {
                    tmp.push(filters[f].value);
                }
            }
        }
        for (var t = 0; t < types.length; ++t) {
            if (filters[f].value == types[t]) { filters[f].checked = false; }
        }
    }

    for (var m = 0; m < m_types.length; ++m) {
        if (m_types[m].Equals(tmp)) {
            for (var i = 0; i < filters.length; ++i) {
                if (filters[i].value == ("a" + m)) { filters[i].checked = false; break; }
            }
        }
    }

    for (var i = 0; i < map.Markers.length; i++) {
        for (var t = 0; t < types.length; t++) {
            if (map.Markers[i].Type == types[t]) { map.Markers[i].Visible(false); }
        }
    }

}