var RecaptchaWidget = {
    initHandler: function(opts) {
        RecaptchaWidget.recaptchaKey = opts['recaptchaKey'];
        RecaptchaWidget.submitFormId = opts['submitFormId'];
        RecaptchaWidget.eventId = opts['eventId'];
        RecaptchaWidget.postUrl = opts['postUrl'] || false;
        RecaptchaWidget.preFunc = opts['preFunc'] || function() { return true; };
        RecaptchaWidget.preFailFunc = opts['preFailFunc'] || function() { };
        RecaptchaWidget.submitFunc = opts['submitFunc'] || function() { return true; };
        RecaptchaWidget.submitFailFunc = opts['submitFailFunc'] || function() { };
        RecaptchaWidget.hideColorbox = opts['hideColorbox'] || false;

        if (!$.colorbox || $.colorbox === undefined) {
            RecaptchaWidget.preFailFunc();
        }

        $(RecaptchaWidget.submitFormId).click(function() {
            if (RecaptchaWidget.preFunc !== undefined) {
                if (RecaptchaWidget.preFunc() === false) {
                    RecaptchaWidget.preFailFunc();
                    return false;
                }
            }

            if (!RecaptchaWidget.hideColorbox) {
                $.colorbox({
                    innerWidth: 360,
                    innerHeight: 405,
                    inline:true,
                    href:"#captcha_container",
                    onLoad: function (){
                        $('#cboxClose').hide();
                        $('#captcha_status').html("");
                    },
                    onComplete: function() {
                        RecaptchaWidget.attachListeners();
                        $('.captcha_close').click(function() {
                            $.colorbox.close();
                        });
                    }
                });
            }
            else{
                $("#captcha_container").parent().show();
                $("#recaptcha_table").hide();
                $('.captcha_close').click(function() {
                    $("#captcha_container").parent().hide();
                });
                setTimeout(function(){
                    RecaptchaWidget.attachListeners();
                    try {
                        Recaptcha.focus_response_field();
                    } catch(e) {
                        // Let the users click the box
                        // Let the users click the box
                        // Let the users click the box
                        // Let the users click the ...
                        // BOOOOOOOOOOOOOXXXXXXXXXXXXX
                    }
                }, 200);
            }
            return false;
        });
    },

    attachListeners: function() {
        // ?
        $('#captcha_status').html("");

        try {
            Recaptcha.focus_response_field();
        } catch(e) {
            // Let the users click the box
        }
        //unbind previous submit functions
        $("#captcha_form").die();
        //ajax submit of captcha
        $("#captcha_form").live('submit', function() {
            //disable submit button
            $('.captcha_submit').attr('disabled','disabled');
            $('.captcha_submit').val('Loading...');
            $('.captcha_submit').css({ opacity: 0.3 });
            $('#captcha_status')
                .html("<span style='position: relative; top: -5px'> " +
                "Checking captcha...<img style='position: relative; top: 3px' " +
                "src='http://sc-images-checkout.s3.amazonaws.com/spinner.gif'></span>");
            var form = $("#captcha_form").serialize();
            $.post(
                RecaptchaWidget.postUrl || "/event/" + RecaptchaWidget.eventId + "/recaptcha",
                form,
                function(data) {
                    var reply = jQuery.parseJSON(data);
                    if (reply.status === true) {
                        $('#captcha_status').html("Captcha Correct! Loading...");
                        RecaptchaWidget.submitFunc();
                        //close colorbox to show activity to the user
                        //$.colorbox.close();
                    } else {
                        //enable submit button
                        $('.captcha_submit').attr('disabled','');
                        $('.captcha_submit').val('Continue >>');
                        $('.captcha_submit').css({ opacity: 1 });
                        RecaptchaWidget.submitFailFunc();
                        //reset captcha
                        RecaptchaWidget.refreshCaptcha();
                    }
                }
            );
            return false;
        });
    },

    refreshCaptcha: function() {
        $('#captcha_status').html('<strong>Your text did not match the image. Please try again.</strong>');
        Recaptcha.reload();
    }
};

