var stickybits = {
    stream: function () {
        this.map = null;
        this.max_num = 15;
        this.divid = null;
        this.bits = new Array();
        this.washere = new Array();
        this.bits_shown = new Array();
        this.washere_shown = new Array();
        this.initialize = function (divid, map, max_num) {
            this.map = map;
            this.divid = divid;
            this.get_stream();
            this.show_item();
            if (max_num) {
                this.max_num = max_num
            }
        };
        this.get_stream = function (limit) {
            if (!limit) {
                limit = 50
            }
            var obj = this;
            $.getJSON("/api/media.stream/?limit=" + limit, function (data) {
                obj.media_stream(data)
            })
        };
        this.media_stream = function (data) {
            var bits_list = new Array();
            if (data && data.media) {
                for (var x = 0; x < data.media.length; ++x) {
                    if (!this.bits_shown[data.media[x]["_id"]]) {
                        bits_list.push(data.media[x]);
                        this.bits_shown[data.media[x]["_id"]] = true
                    }
                }
            }
            this.bits = bits_list.concat(this.bits);
            var washere_list = new Array();
            if (data && data.washere) {
                for (var x = 0; x < data.washere.length; ++x) {
                    if (!this.washere_shown[data.washere[x]["_id"]]) {
                        washere_list.push(data.washere[x]);
                        this.washere_shown[data.washere[x]["_id"]] = true
                    }
                }
            }
            this.washere = washere_list.concat(this.washere);
            var obj = this;
            setTimeout(function () {
                obj.get_stream()
            }, 35000)
        };
        this.show_item = function () {
            var show_what = Math.floor(Math.random() * 2);
            var divcontent = "";
            if ((show_what == 0 || !this.washere.length) && this.bits.length) {
                var bit = this.bits.shift();
                var href = "/c/" + bit.codeid + "/" + bit.hash;
                divcontent += '<a style="display:none" class="streamcontent" href="' + href + '"><div>';
                var name = bit.display_name;
                if (!name) {
                    name = bit.username
                }
                var title = bit.title;
                if (!title) {
                    title = "a barcode"
                }
                var bodytext = '<h3>' + name + " attached a bit to " + title + ":</h3>";
                var bodycontent = '<div class="grid_13 alpha">';
                if (bit.thumb) {
                    bodycontent += '<img src="' + bit.thumb + '" class="avatar"/>'
                } else {
                    if (bit.type == "text") {
                        bodycontent += this.truncate(bit.text, 200)
                    } else {
                        if (bit.type == "file") {
                            bodycontent += "file: " + bit.filename
                        }
                    }
                }
                bodycontent += "</div>";
                divcontent += bodytext + bodycontent;
                divcontent += "<div class='clear'></div></div></a>";
                if (this.map && bit.addedloc) {
                    var point = new GLatLng(bit.addedloc["lat"], bit.addedloc["long"]);
                    marker = this.createMarker(point, bodytext);
                    this.map.addOverlay(marker)
                }
            } else {
                if (this.washere.length) {
                    var scan = this.washere.shift();
                    var href = "/c/" + scan.codeid + "/" + scan.hash;
                    divcontent += '<a style="display:none" class="streamcontent" href="' + href + '">';
                    var name = scan.display_name;
                    if (!name) {
                        name = scan.username
                    }
                    var avatar = scan.avatar;
                    if (!avatar) {
                        avatar = scan.avatar_link
                    }
                    if (!avatar) {
                        avatar = "http://static.stickybits.com/web/images/noavatar.png"
                    }
                    var title = scan.title;
                    if (!title) {
                        title = "a barcode"
                    }
                    divcontent += '<img src="' + avatar + '" width="50" height="50" class="avatar"><h3>' + name + " scanned " + title + "</h3>";
                    divcontent += "<div class='clear'></div></div></a>"
                }
            }
            $(this.divid).prepend(divcontent);
            var divs = $(this.divid + " > .streamcontent");
            if (divs.length) {
                $(divs[0]).slideDown();
                if (divs.length > this.max_num) {
                    $(divs[divs.length - 1]).slideUp("normal", function () {
                        $(this).remove()
                    })
                }
            }
            var obj = this;
            setTimeout(function () {
                obj.show_item()
            }, (Math.floor(Math.random() * 4) + 1) * 1000)
        };
        this.truncate = function (str, len) {
            if (!str || str.length <= len) {
                return str
            }
            return str.substr(str, len - 3) + "..."
        };
        this.createMarker = function (point, html) {
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function () {
                marker.openInfoWindowHtml(html)
            });
            return marker
        }
    }
};
