/**
 * Yii Captcha widget.
 *
 * This is the JavaScript widget used by the yii\captcha\Captcha widget.
 *
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
(function ($) {
	$.fn.yiiCaptcha = function (method) {
		if (methods[method]) {
			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
		} else if (typeof method === 'object' || !method) {
			return methods.init.apply(this, arguments);
		} else {
			$.error('Method ' + method + ' does not exist on jQuery.yiiCaptcha');
			return false;
		}
	};

	var defaults = {
		refreshUrl: undefined,
		hashKey: undefined
	};

	var methods = {
		init: function (options) {
			return this.each(function () {
				var $e = $(this);
				var settings = $.extend({}, defaults, options || {});
				$e.data('yiiCaptcha', {
					settings: settings
				});

				$e.on('click.yiiCaptcha', function() {
					methods.refresh.apply($e);
					return false;
				});

			});
		},

		refresh: function () {
			var $e = this,
				settings = this.data('yiiCaptcha').settings;
			$.ajax({
				url: $e.data('yiiCaptcha').settings.refreshUrl,
				dataType: 'json',
				cache: false,
				success: function(data) {
					$e.attr('src', data.url);
					$('body').data(settings.hashKey, [data.hash1, data.hash2]);
				}
			});
		},

		destroy: function () {
			return this.each(function () {
				$(window).unbind('.yiiCaptcha');
				$(this).removeData('yiiCaptcha');
			});
		},

		data: function() {
			return this.data('yiiCaptcha');
		}
	};
})(window.jQuery);