﻿function filterChanged(init, title) {

    String.prototype.startsWith = function (str) {
        return (this.match("^" + str) == str)
    }

    var target;
    if (!e) var e = window.event;
    if (e.target) target = e.target;
    else if (e.srcElement) target = e.srcElement;
    if (target.nodeType == 3) // defeat Safari bug
        target = target.parentNode;


    var isChecked = target.checked;
    var newParamValue = target.value;
    var args = new Object();
    var query = location.search.substring(1);
    var url = location;
    var pairs = query.split("&");

    for (var i = 0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('=');
        if (pos == -1) {
            continue;
        }
        var argname = pairs[i].substring(0, pos);
        var value = pairs[i].substring(pos + 1);

        if (argname == "filter") {

            if (isChecked) {
                if (pairs[i].lastIndexOf("|") == pairs[i].length - 1) {
                    pairs[i] += newParamValue;
                }
                else {
                    pairs[i] += "|" + newParamValue;
                }
                //alert("pairs[i].lastIndexOf(\"|\") = " + pairs[i].lastIndexOf("|"));
                //alert("pairs[i].length = " + pairs[i].length);

                //alert("pairs[" + i + "] = " + pairs[i]);
                //alert("pairs[" + i + "] = " + pairs[i]);

                var newQS = "";
                for (var j = 0; j < pairs.length; j++) {
                    newQS += pairs[j];
                    if (j < pairs.length - 1) {
                        newQS += "&";
                    }
                }

                //alert("newQS: " + newQS);
                var newURL = window.location.protocol + "//" + window.location.host + window.location.pathname + "?" + newQS;
                //alert("newURL: " + newURL);
                newURL.replace("?&", "?");
                window.location.assign(newURL);
                return;
            }
            else {

                //alert("pairs: " + pairs + " newParamValue: " + newParamValue);
                var oldParams = checkOldParams(pairs[i], newParamValue);
                //alert("oldParams: " + oldParams);

                pairs.splice(i, 1);


                var newQS = "";
                for (var j = 0; j < pairs.length; j++) {
                    newQS += pairs[j];
                    if (j < pairs.length - 1) {
                        newQS += "&";
                    }
                }

                if (newQS.length > 0) {
                    var newURL = window.location.protocol + "//" + window.location.host + window.location.pathname + "?" + newQS + "&filter=" + title + "|" + oldParams;

                }
                else {
                    var newURL = window.location.protocol + "//" + window.location.host + window.location.pathname + "?filter=" + title + "|" + oldParams;
                }


                if (init != "") {
                    newURL = newURL + "|" + init;
                    //alert("newURL5: " + newURL);
                    newURL.replace("?&", "?");
                    window.location.assign(newURL);
                }
                else if (init == "") {
                    //alert("newURL6: " + newURL);
                    newURL.replace("?&", "?");
                    window.location.assign(newURL);

                }
                else {
                    //alert("something went wrong");
                }

                return;
            }

        }
    }

    if (!isChecked) {

        var inputs = document.getElementsByTagName("input");
        var newParams = "";
        for (var i = 0; i < inputs.length; i++) {
            //alert("inputs[i].id = " + inputs[i].id);
            if (inputs[i].id.startsWith("filter_")) {
                var pos = inputs[i].id.indexOf("_");
                //alert("pos = " + pos);
                var param = inputs[i].id.substring(pos + 1);
                //alert("param = " + param);
                if (param != newParamValue) {
                    newParams += param + "|";
                }
                //alert("newParams = " + newParams);
            }
        }
        if (query == "") {
            var newURL = url + "?filter=" + title + "|" + newParams;
        }
        else {
            var newURL = url + "&filter=" + title + "|" + newParams;
        }
        if (newURL.lastIndexOf("|") == newURL.length - 1) {
            newURL = newURL.substring(0, newURL.length - 1);
        }
        //alert("newURL7: " + newURL);
        newURL.replace("?&", "?");
        window.location.assign(newURL);


        return;
    }

    var inits;
    if (init != "") {
        inits = init.split(",");

        for (var i = 0; i < inits.length; i++) {
            init = inits[i] + "|";
        }
    }

    if (query == "" && init != "") {
        var newURL = url + "?filter=" + title + "|" + newParamValue + "|" + init;
        //alert("newURL1: " + newURL);
        newURL.replace("?&", "?");
        window.location.assign(newURL);
    }
    else if (query == "" && init == "") {
        var newURL = url + "?filter=" + title + "|" + newParamValue;
        //alert("newURL2: " + newURL);
        newURL.replace("?&", "?");
        window.location.assign(newURL);
    }
    else if (query != "" && init != "") {
        var newURL = url + "&filter=" + title + "|" + newParamValue + "|" + init;
        //alert("newURL3: " + newURL);
        newURL.replace("?&", "?");
        window.location.assign(newURL);
    }
    else if (query != "" && init == "") {
        var newURL = url + "&filter=" + title + "|" + newParamValue;
        //alert("newURL4: " + newURL);
        newURL.replace("?&", "?");
        window.location.assign(newURL);
    }
    else {
        //alert("something went wrong");
    }
}

function checkOldParams(_old, _new) {

    var found = false;

    //alert("_old: " + _old);
    var temp = _old.split("|");
    //alert("temp: " + temp);
    var temp2 = temp.splice(0, 1);
    //alert("temp: " + temp);

    for (var i = 0; i < temp.length; i++) {
        if (temp[i] == _new) {
            //alert("found!");
            found = true;
            temp.splice(i, 1);
            break;
        }
    }
    var returnValue = "";
    for (var i = 0; i < temp.length; i++) {
        returnValue += temp[i];
        if (i < temp.length - 1) {
            returnValue += "|";
        }
        //alert("returnValue: " + returnValue);
    }

    if (!found) {
        returnValue += _new;
    }

    return returnValue;
}
