summaryrefslogtreecommitdiff
path: root/game.js
blob: 9c7ec3e2421b6953388335dfe68d17d4b7fcfc22 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
(function($) {
    $.fn.randomize = function(childElem) {
        return this.each(function() {
            var $this = $(this);
            var elems = $this.children(childElem);

            elems.each(function() {
                $(this).data("sortIndex", Math.random());
            });
            elems.sort(function(a,b) { var as = $(a).data("sortIndex"); var bs = $(b).data("sortIndex"); return as < bs ? -1 : bs < as ? 1 : 0;});

            $this.remove(childElem);  

            for(var i=0; i < elems.length; i++)
                $this.append(elems[i]);      

        });    
    };

    $.fn.fullclick = function(callback) {
        var mousedown = false;
        this.mousedown(function() {
            mousedown = true;
        });
        this.mouseup(function() {
            if (mousedown) {
                callback.apply(this, arguments);
            }
            mousedown = false;
        });
    };
})(jQuery);


var startGame = (function () {

    return function(source, target, message) {
        var $message = $(message);

        var $source = $(source);
        var $target = $(target);
        var $both = $source.add($target);
        $source.randomize("li");

        var areAllOver = function() {
            return $source.find("li").size() == 0;
        };

        var areInOrder = function() {
            var success = true;
            $target.find("li").each(function(i, val) {
                success = success && (i == $(val).data("index"));
            });
            return success;
        };

        var checkGameResult = function() {
            if (areAllOver() && areInOrder()) {
                $message.text("Well done!");
                $target.addClass("success");
            } else {
                $message.text(null);
                $target.removeClass("success");
            }
        };



        $source.fullclick(function(event) {
            if (event.target != $(source)[0]) {
                $target.append(event.target);
                checkGameResult();
            }
        });
        $target.fullclick(function(event) {
            if (event.target != $(target)[0]) {
                $source.append(event.target);
                checkGameResult();
            }
        });
        $both.sortable({
            connectWith: ".bible-game",
            update: function (event) {
                checkGameResult();
            }
        });
    };

})();