﻿var jtv_api = (function() {
    var k = {};
    var a = !!(document.all && !window.opera);
    var d = function(u, t) {
        for (var s in u) {
            if (u.hasOwnProperty(s)) {
                t(s, u[s])
            }
        }
    };
    var b = function(s, v) {
        var t = s.length;
        for (var u = 0; u < t; u++) {
            v(s[u], u)
        }
    };
    var i = function(s, v) {
        if (s.indexOf) {
            return (s.indexOf(v) != -1)
        } else {
            var t = s.length;
            for (var u = 0; u < t; u++) {
                if (s[u] == v) {
                    return true
                }
            }
            return false
        }
    };
    var m = function(u, s) {
        var t = {};
        d(u, function(x, w) {
            if (i(s, x)) {
                t[x] = w
            }
        });
        return t
    };
    var g = function(t) {
        var s = [];
        d(t, function(w, u) {
            s.push(w + "=" + u)
        });
        return s.join("&")
    };
    var q = function(s) {
        var t = {};
        b(s.split("&"), function(u, v) {
            var w = u.split("=");
            var x = w[1];
            if (x.indexOf('"') != -1) {
                t[w[0]] = x.split('"')[1]
            } else {
                t[w[0]] = x
            }
        });
        return t
    };
    var o = function(t, s) {
        var u = {};
        d(t, function(x, w) {
            u[x] = w
        });
        d(s, function(x, w) {
            u[x] = w
        });
        return u
    };
    var n = function() {
        var s = "abcdefghujklmnopqrstuvwxyz";
        var u = [];
        for (var t = 0; t < 20; t++) {
            u.push(s.charAt(Math.random() * s.length))
        }
        var v = u.join("");
        if (document.getElementById(v)) {
            return n()
        } else {
            return v
        }
    };
    var j = function(u, t, s) {
        if (u && u[t]) {
            u[t].apply(u, Array.prototype.slice.call(arguments).slice(2))
        } else {
            window.setTimeout(function() {
                j(u, t, s)
            },
            10)
        }
    };
    var h = function(s, t) {
        if (typeof (s) != "undefined" && s !== null) {
            t(s)
        } else {
            window.setTimeout(function() {
                h.apply(this, arguments)
            },
            10)
        }
    };
    var e = function(t, s) {
        if (t()) {
            s()
        } else {
            window.setTimeout(function() {
                e(t, s)
            },
            10)
        }
    };
    k.javascript_callbacks = [];
    var f = function(s) {
        return function(u, t) {
            return s[u](t)
        }
    };
    var r = function(s) {
        if (typeof (s) == "string") {
            return document.getElementById(s)
        } else {
            return s
        }
    };
    var c = function(s) {
        if (window.addEventListener) {
            window.addEventListener("DOMContentLoaded", s, false)
        } else {
            if (document.attchEvent) {
                document.attachEvent("onreadystatechange", function() {
                    if (document.readyState === "complete") {
                        s();
                        document.detachEvent("onreadystatechange", arguments.callee)
                    }
                })
            } else {
                e(function() {
                    try {
                        document.documentElement.doScroll("left");
                        return document.documentElement.doScroll && window == window.top
                    } catch (t) {
                        return false
                    }
                },
                s)
            }
        }
    };
    var p = function(t) {
        if (!a) {
            return document.getElementsByName(t)
        } else {
            var u = [];
            var s = document.getElementsByTagName("*");
            b(s, function(w, v) {
                if (w.getAttribute("name") == t) {
                    u.push(w)
                }
            });
            return u
        }
    };
    var l = function(x, s, C, v, B) {
        var A = g(C);
        x = r(x);
        var u = o({
            allowScriptAccess: "always",
            allowNetworking: "all",
            allowFullscreen: "true",
            wmode: "transparent"
        },
        v);
        var t = null;
        if ("id" in B) {
            t = B.id;
            delete B.id
        } else {
            t = n()
        }
        if ("flashvars" in u) {
            u.flashvars += "&" + A
        } else {
            u.flashvars = A
        }
        if (a) {
            var z = "<object";
            B.codebase = "http://macromedia.com/cabs/swflash.cab#version=6,0,0,0";
            B.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
            B.type = "application/x-swf";
            B.id = t;
            d(B, function(E, D) {
                z += " " + E + '="' + D + '"'
            });
            z += " >";
            u.data = s;
            u.movie = s;
            d(u, function(E, D) {
                z += '<param name="' + E + '" value="' + D + '">'
            });
            z += "</object>";
            var y = document.createElement("div");
            x.appendChild(y);
            y.innerHTML += z;
            return document.getElementById(t)
        } else {
            var w = document.createElement("embed");
            w.setAttribute("pluginspage", "http://www.macromedia.com/go/getflashplayer");
            w.setAttribute("src", s);
            w.setAttribute("type", "application/x-swf");
            w.setAttribute("name", t);
            d(u, function(E, D) {
                w.setAttribute(E, D)
            });
            d(B, function(E, D) {
                w.setAttribute(E, D)
            });
            x.appendChild(w);
            return w
        }
    };
    k.new_player = function(v, y) {
        var t = ["channel", "start_volume", "watermark_position", "auto_play", "namespace", "consumer_key"];
        var A = ["width", "height", "id", "class", "name", "title", "bgcolor", "style"];
        var s = null;
        if (y.custom) {
            s = "http://www.justin.tv/widgets/live_api_player.swf?channel=" + y.channel
        } else {
            s = "http://www.justin.tv/widgets/live_embed_player.swf?channel=" + y.channel
        }
        var u = {};
        var x = o({
            start_volume: "26",
            watermark_position: "top_right",
            auto_play: "false"
        },
        m(y, t));
        var z = o({
            height: "295",
            width: "353",
            bgcolor: "#000000"
        },
        m(y, A));
        x.enable_javascript = !!(y.custom);
        var w = l(v, s, x, u, z);
        if (y.custom) {
            if (y.events) {
                x.javascript_callback_path = "jtv_api.javascript_callbacks[" + k.javascript_callbacks.length + "]";
                k.javascript_callbacks.push(f(y.events))
            }
            if ("buffer_time" in y) {
                j(w, "set_buffer_time", y.buffer_time)
            }
            if ("password" in y) {
                j(w, "set_channel_password", y.password)
            }
            if (y.auto_play) {
                if (y.namespace) {
                    j(w, "play_live", y.channel, y.namespace)
                } else {
                    j(w, "play_live", y.channel)
                }
            }
        }
        return w
    };
    k.new_broadcaster = function(x, w) {
        var t = ["stream_key", "consumer_key"];
        var s = ["height", "width", "bgcolor", "id", "name", "title", "style"];
        var u = {};
        var y = {
            javascript_callback_path: "jtv_api.javascript_callbacks[" + k.javascript_callbacks.length + "]"
        };
        k.javascript_callbacks.push(f(w.events));
        var v = l(x, "http://www.justin.tv/widgets/live_embed_publisher.swf", m(w, t), y, o(u, m(w, s)));
        return v
    };
    k.new_chat = function(x, v) {
        var u = ["channel", "hide_chat", "default_chat", "tweet_suffix", "over18"];
        var w = g(m(v, u));
        var t = document.createElement("iframe");
        t.setAttribute("src", "http://www.justin.tv/chat/embed?" + w);
        var s = {
            width: "320",
            height: "450"
        };
        d(v, function(z, y) {
            if (i(u, z)) {
                delete v[z]
            }
        });
        s = o(s, v);
        d(s, function(z, y) {
            t.setAttribute(z, y)
        });
        r(x).appendChild(t);
        return t
    };
    c(function() {
        b(p("jtv_api.new_player"), function(t, u) {
            var s = q(t.getAttribute("title"));
            k.new_player(t, s)
        });
        b(p("jtv_api.new_chat"), function(t, u) {
            var s = q(t.getAttribute("title"));
            k.new_chat(t, s)
        });
        b(p("jtv_api.new_broadcaster"), function(t, u) {
            var s = q(t.getAttribute("title"));
            k.new_broadcaster(t, s)
        })
    });
    return k
})();
