function random_t(){
    this.S_WIDTH = "300";
    this.S_HEIGHT = "300";
    this.S_FLASH_VERSION = 13;
    this.o_flash_pending = {};
    this.o_flash_loaded = {};
    this.b_flash_laoded = false;
    this.b_cam_started = false;
    this.b_connected = false;
}
random_t.prototype = {
    init: function(){
        this.init_events();
        this.add_flash_local();
        this.add_flash_remote();
    },
    ext_flash_ready: function(s_dir){
        this.o_flash_loaded[s_dir] = true;
        if (!this.o_flash_loaded['i'] || !this.o_flash_loaded['o']) {
            return;
        }
        this.b_flash_loaded = true;
        var n_length = null; var a = null; var n_i = 0;
        for (s_dir_pending in this.o_flash_pending) {
            n_length = this.o_flash_pending[s_dir_pending].length;
            for (n_i = 0; n_i < n_length; ++n_i) {
                a = this.o_flash_pending[s_dir_pending].shift();
                this.call_flash(a[0], a[1], a[2], a[3]);
            }
        }
    },
    ext_found_random_partner: function(s_partner_user_id){
        this.call_flash(true, "flash_random_connect_partner", s_partner_user_id);
        this.chat_output_clear();
        this.chat_output("You are connected! Say Hello!", "info");
        random.b_connected = true;
    },
    ext_disconnect_random_partner: function(){
        this.call_flash(true, "flash_random_disconnect_partner");
        random.b_connected = false;
    },
    ext_init_incoming_user_id: function(s_user_id){
        this.call_flash(true, "flash_random_init", s_user_id);
    },
    ext_random_chat: function(s_chat){
        random.chat_output(s_chat, null, "i");
    },
    ext_searching_new_partner: function(){
        random.call_flash(true, "flash_random_searching_partner");
        random.b_connected = false;
    },
    ext_cam_started: function(){
        random.b_cam_started = true;
    },
    ext_no_cam_exist: function(){
        random.chat_output("Sorry, You Need a Web Cam to Play", "error");
    },
    init_events: function(){
        $("#cam_cntrl_not_working").click(function(){
            random.call_flash(false, "flash_settings", false);
            return false;
        });
        $("#cam_cntrl_stop").click(function(){
            random.call_flash(false, "flash_random_pause_partner");
            random.ext_disconnect_random_partner();
            return false;
        });
        $("#cam_cntrl_bug_report").click(function(){
            var s_display = $("#error_reporting").css("display");
            if (s_display == "none") {
                $("#error_reporting").css({display:"block"});
            } else {
                $("#error_reporting").css({display:"none"});
            }
            return false;
        });
        $("#error_reporting_hide").click(function(){
            $("#error_reporting").css({display:"none"});
            return false;
        });
        $("#error_reporting_button").click(function(){
            var o_this = this;
            $(o_this).attr("readonly", true);
            var s_user = $("#error_reporting_problem").attr("value");
            var s_flash = random.call_flash(false, "flash_get_debug_log");
            $.post("/main.php", {a:"main.index", tab:"quickstart_error", user_text:s_user, flash_text:s_flash}, function(s_data){
                $(o_this).attr("readonly", false);
                alert("Thanks for Reporting your Problem!");
                $("#error_reporting_hide").click();
            });
        });
        
        $("#cam_cntrl_share_mic").change(function(){
            random.call_flash(false, "flash_mic", parseInt($(this).attr("value"), 10));
            var s_txt = "NO";
            if (parseInt($(this).attr("value"), 10)) {
                s_txt = "YES";
            }
            $("#cam_cntrl_share_mic_lbl").html("Share Mic: <b>" + s_txt + "</b>");
        });
        $("#cam_cntrl_share_mic_lbl").mousedown(function(e){
            var n_new_val = 1;
            if (parseInt($("#cam_cntrl_share_mic").attr("value"), 10)) {
                n_new_val = 0;
            }
            $("#cam_cntrl_share_mic").attr("value", n_new_val);
            $("#cam_cntrl_share_mic").change();
            e.stopPropagation();
            return false;
        }).css({cursor:"pointer"});
        $(".cam_cntrl_find_new").click(function(){
            if (!random.b_cam_started) {
                random.chat_output("Click on \"Click to Start Video\" in the Box Above to Begin!", "error")
                return;
            }
            random.ext_disconnect_random_partner();
            random.call_flash(false, "flash_random_find_partner");
            random.call_flash(true, "flash_random_searching_partner");
            random.chat_output("Searching for a New Chat Partner...", "info");
            return false;
        });
        $("#cam_cntrl_autostart").change(function(){
            var n_val = 0;
            if ($(this).attr("checked")) {
                n_val = 1;
            }
            random.call_flash(false, "flash_random_change_autostart", n_val);
        });
        $("#cam_cntrl_autostart_lbl").mousedown(function(e){
            $("#cam_cntrl_autostart").attr("checked", !$("#cam_cntrl_autostart").attr("checked"));
            $("#cam_cntrl_autostart").change();
            e.stopPropagation();
            return false;
        }).css({cursor:"pointer"});
        $("#chat_input").keydown(function(e){
            if (e.keyCode != 13) {
                return;
            }
            random.chat_enter();
        });
        $("#cam_cntrl_send").click(function(){
            random.chat_enter();
        });
    },
    add_flash_local: function(){
        var s_id = "flash_me";
        var o_param = {quality: "high", menu:false, allowscriptaccess:"always"};
        var o_vars = {random: true, dir: 'o', dim:this.S_WIDTH, server:init.s_server};
        if (init.b_audio) {
            o_vars.b_audio = true;
        }
        this.add_flash(s_id, this.S_WIDTH, this.S_HEIGHT, o_vars, o_param);
    },
    add_flash_remote: function(){
        var s_id = "flash_other";
        var o_param = {quality: "high", menu:false, allowscriptaccess:"always"};
        var o_vars = {random:true, dir: 'i', dim:this.S_WIDTH, server:init.s_server};
        this.add_flash(s_id, this.S_WIDTH, this.S_HEIGHT, o_vars, o_param);
    },
    add_flash: function(s_id, s_width, s_height, o_vars, o_param){
        var s_file = "/s/cam.swf";
        o_param.wmode = "opaque";
        if (init.flash_window) {
            if (init.flash_window == "blank") {
                o_param.wmode = "";
            } else {
                o_param.wmode = init.flash_window;
            }
        }
        if (init.b_debug) {
            o_vars.debug = true;
            s_file += "?" + Math.floor(Math.random() * 9999999999);
        } else {
            s_file += "?" + this.S_FLASH_VERSION;
        }
        swfobject.embedSWF(s_file, s_id, s_width, s_height, "9.0.0", "", o_vars, o_param);
    },
    call_flash: function(b_incoming, s_func, m_data1, m_data2){
        if (typeof(b_incoming) == "undefined") {
            b_incoming = false;
        }
        var s_flash_id = "flash_me";
        if (b_incoming) {
            s_flash_id = "flash_other";
        }
        if (!this.b_flash_loaded || !$("#" + s_flash_id).length) {
            if (!this.o_flash_pending[s_flash_id]) {
                this.o_flash_pending[s_flash_id] = [];
            }
            this.o_flash_pending[s_flash_id].push([b_incoming, s_func, m_data1, m_data2]);
            return;
        }
        var o = $("#" + s_flash_id).get(0);
        if (!o[s_func]) {
            return;
        }
        if (typeof(m_data1) != "undefined" && typeof(m_data2) != "undefined") {
            return o[s_func](m_data1, m_data2);
        }
        if (typeof(m_data1) != "undefined") {
            return o[s_func](m_data1);
        }
        return o[s_func]();
    },
    chat_enter: function(){
        var $e = $("#chat_input");
        var s_raw = $e.attr("value");
        s_raw = $.trim(s_raw);
        if (!s_raw.length) {
            return;
        }
        $e.attr("value", "");
        if (!this.b_connected) {
            random.chat_output("You are not Talking to Anybody", "error");
            return;
        }
        random.call_flash(false, "flash_random_chat", s_raw);
        random.chat_output(s_raw);
    },
    chat_output: function(s_text, s_type, s_dir){
        if (typeof(s_type) == "undefined" || !s_type) {
            s_type = "chat";
        }
        if (typeof(s_dir) == "undefined" || !s_dir) {
            s_dir = 'o';
        }
        var $e = $(".chat_output");
        var e = $e.get(0);
        var b_adjust = true; var b_msie = true;
        if (document.all && navigator.appVersion.indexOf("MSIE 7.") != -1) {
            if (!e.scrollTop) {
                b_msie = false;
            }
        }
        if (b_msie && e.scrollTop && (e.scrollTop + $e.height() != e.scrollHeight)) {
            b_adjust = false;
        }
        var s_class = "";
        var s_out = "";
        switch (s_type) {
        case "chat":
            s_out = '<span class="ident">';
            if (s_dir == 'o') {
                s_class = "chatout_chat chatout_chat_me";
                s_out += 'Me:&nbsp;&nbsp;';
            } else {
                s_class = "chatout_chat chatout_chat_partner";
                s_out += 'Partner:&nbsp;&nbsp;';
            }
            s_out += '</span>';
            s_out += s_text;
            break;
        case "info":
            s_class = "chatout_info";
            s_out = s_text;
            break;
        case "error":
            s_class = "chatout_error";
            s_out = s_text;
            break;
        }
        var s_output = '<div class="' + s_class + '">' + s_out + '</div>';
        $e.append(s_output);
        if (b_adjust) {
            e.scrollTop = e.scrollHeight;
        }
    },
    chat_output_clear: function(){
        $(".chat_output").empty();
    }
};

random = null;
$(function(){
    random = new random_t();
    random.init();
});
