﻿$(document).ready(function () {
    $("a[data-paramlink-param]").each(function (index, element) {
        var link = $(element);
        var paramName = link.attr("data-paramlink-param");
        var textBoxId = link.attr("data-paramlink-input-id");
        var preserveFocus = link.attr("data-paramlink-preserve-focus") && link.attr("data-paramlink-preserve-focus").toLowerCase() == "true";
        var textBox = $("#" + textBoxId);

        function updateSelection(element, elementAttr) {
            var havingAdd = /(\?|&)add=/;
            var oldValue = element.attr(elementAttr);
            var indexOfAdd = oldValue.search(havingAdd);
            var text = textBox.val() || "";
            text = text.replace(/^\s*/, "").replace(/\s*$/, "");

            if (indexOfAdd == -1) {
                var separator = (oldValue.lastIndexOf("?") == -1) ? "?" : "&";
                var newHref = oldValue + separator + paramName + '=' + encodeURI(text);
                element.attr(elementAttr, newHref);
            } else {
                var lastIndexOfAdd = oldValue.indexOf("&", indexOfAdd + 3);
                var newHref = oldValue.substring(0, indexOfAdd + 1);
                newHref += paramName + '=' + encodeURI(text);
                if (lastIndexOfAdd != -1)
                    oldValue.substring(lastIndexOfAdd);
                element.attr(elementAttr, newHref);
            }
        }

        textBox.keypress(function (event) {
            if (event.which == 13) {
                updateSelection(link, "href");
                if (!preserveFocus) {
                    link.focus();
                    window.location.href = link.attr("href");
                    return false;
                }
            }
            return true;
        });

        link.click(function () {
            updateSelection(link, "href");
            return true;
        });
    });
});
