(function($){
    $.fn.captcha = function (opts) {
        opts = $.extend({}, $.fn.captcha.defaults, opts);

        return this.each(function(){
            new Captcha(this, opts);
        });
    };
    var Captcha = function(context, opts) {
        $(context).click(function(){
            process();
        });
        $('#'+opts.reload).click(function(){
            process();
        });
        $(context).addClass('oldCaptcha');
        $('#'+opts.reload).addClass('pointerCaptcha').addClass('reloadCaptcha');
        $('#'+opts.progress).addClass('loadCaptcha');
        $('#'+opts.progress).removeAttr('style');

        function process(){
            $(context).removeClass('oldCaptcha').addClass('newCaptcha');
            $('#'+opts.reload).removeClass('reloadCaptcha').addClass('loadCaptcha');
            $('#'+opts.progress).removeClass('loadCaptcha').addClass('reloadCaptcha');
            var hash  = new Date().getTime();
            $(context).attr('src', '/images/img.php?'+hash).bind("load", function() {
                $(context).removeClass('newCaptcha').addClass('oldCaptcha');
                $('#'+opts.reload).removeClass('loadCaptcha').addClass('reloadCaptcha');
                $('#'+opts.progress).removeClass('reloadCaptcha').addClass('loadCaptcha');
            })
        }
    }
    $.fn.captcha.defaults = {
        reload: 'captcha_reload',
        progress: 'captcha_progress'
    }
})(jQuery);
