

var beaviour_basketLinks_re_remove = /removeFromBasket=([0-9]+)/;
var beaviour_basketLinks_re_add = /addToBasket=([0-9]+)/;

function beaviour_basketLinks() {
    function buildFunction(add) {
        var f = function() {
            if (!this.init) {
                this.add = add;
            }
            this.init = true;
            var id = beaviour_basketLinks_findId(this.href);
            var link = this;
            if (id != null) {
                if (this.add) {
                    ajaxBasket_add(id, function() {
                        link.innerHTML = BEHAVIOUR_BASKETLINKS_TEXT_REMOVE;
                        link.add = false;
                        link.parentNode.className = "removefrombasketlink";
                    });
                } else {
                    ajaxBasket_remove(id, function() {
                        link.innerHTML = BEHAVIOUR_BASKETLINKS_TEXT_ADD;
                        link.add = true;
                        link.parentNode.className = "addtobasketlink";
                    });
                }
                return false;
            }
        };
        return f;
    };


    // Links in the search result.
    var $links = ($('.wrapper-teaser-searchresult .addtobasketlink a').add('.wrapper-teaser-searchresult .removefrombasketlink a').not(".onbasketpage"))
    var url = 'http://hpm.org:80/controller/ajax/';
    var pars = '?service=SurveyBasket.Basket';
        pars += '&a=iib';
        pars += '&sid=';
        $links.each(
            function() {
                var id = beaviour_basketLinks_findId(this.href);
                var link = this;
                // Assign the callback a local scope variable.
                this.cb = function (data) {
                    var $link = $(link);
                    // Remove previous onclick events.
                    $link.unbind("click");
                    // Set to initial state.
                    link.init = false;
                    if (data == "1") {
                        $link.click(buildFunction(false))
                             .text(BEHAVIOUR_BASKETLINKS_TEXT_REMOVE);
                        $link.parent().attr("class", "removefrombasketlink");
                    } else {
                        $link.click(buildFunction(true))
                             .text(BEHAVIOUR_BASKETLINKS_TEXT_ADD);
                        $link.parent().attr("class", "addtobasketlink");
                    }
                };
                $.ajax({
                    url: url + pars + id,
                    type: 'GET',
                    timeout: 1000,
                    success: link.cb
                });
            }
    );

    // Links on the basket page.
    var $removeLinks = $('.wrapper-teaser-searchresult .removefrombasketlink a.onbasketpage');

    $removeLinks.each(
        function() {
            var id = beaviour_basketLinks_findId(this.href);
            var link = this;
            $.ajax({
                url: url + pars + id,
                type: 'GET',
                timeout: 1000,
                success: function (data) {
                    if (data == 0) {
                         $(link.parentNode.parentNode.parentNode.parentNode).fadeOut("slow");
                    } else {
                        $(link).click (
                            function() {
                                var id = beaviour_basketLinks_findId(this.href);
                                var link = this;
                                if (id != null) {
                                    ajaxBasket_remove(
                                         id,
                                         function() {
                                            // Remove wrapper of basket item.
                                            $(link.parentNode.parentNode.parentNode.parentNode).fadeOut("slow");
                                         }
                                    );
                                }
                                return false;
                            }
                        );
                    }
                }
            });
        });

    var $clearButton = $("#clearinfobasket");
    $clearButton.click(
        function() {
           $removeLinks.click();
           return false;
        }
    );
}

function beaviour_basketLinks_findId(href) {
    var id = "";
    var result = href.match(beaviour_basketLinks_re_add);
    if (result == null) {
       result = href.match(beaviour_basketLinks_re_remove);
    }
    if (result != null) {
        id = result[1];
    }
    return id;
}

$(document).ready(beaviour_basketLinks).ready(ajaxBasket_pollForChange);
