var AppHeaderController = (function(EventDispatcher, bjUtil) {
	var appHeaderView = (function(EventDispatcher) {
		var Targets = {
			USER_AVATAR: 'user_avatar',
			IC_FILTER: 'ic_filter_pc'
		};

		var Events = {
			TAP: 'tap'
		};

		var $headerDom = null;
		var $avatar = null;
		var eventDispatcher = null;

		function init(hd) {
			$headerDom = hd;
			_initEventDispatcher($headerDom);
		}

		function _initEventDispatcher($hd) {
			eventDispatcher = new EventDispatcher();
			_registerTargets(eventDispatcher, $hd);
			_registerEventTriggers(eventDispatcher);
		}

		function _registerTargets(dispatcher, $hd) {
			$avatar = $hd.find('.user_avatar');
			dispatcher.registerTarget(Targets.USER_AVATAR, $avatar);
			$filter = $hd.find('.ic_filter_pc');
			dispatcher.registerTarget(Targets.IC_FILTER, $filter);
		}

		function _registerEventTriggers(dispatcher) {
			dispatcher.registerEventTrigger(Targets.USER_AVATAR, Events.TAP);
			dispatcher.registerEventTrigger(Targets.IC_FILTER, Events.TAP);
		}

		function on(targetName, eventName, callback) {
			eventDispatcher.on(targetName, eventName, callback);
		}

		function isLoggedIn() {
			return !!$avatar.data('logged-in');
		}

		return {
			init: init,
			Targets: Targets,
			Events: Events,
			on: on,
			isLoggedIn: isLoggedIn
		};
	})(EventDispatcher);

	function init(headerDom) {
		appHeaderView.init(headerDom);
		_registerEventHandlers(appHeaderView);
	}

	function _registerEventHandlers(header) {
		header.on(header.Targets.USER_AVATAR, header.Events.TAP, function() {
			bjUtil.globalVersionFallback(function() {
				if (appHeaderView.isLoggedIn()) {
					bjUtil.navigate('/me/');
				} else {
					showSecond();
				}
			}, function() {
				showSecond();
			});
		});
		header.on(header.Targets.IC_FILTER, header.Events.TAP, function() {
			BJBridgeReceiver.triggerBridgeEvent('onEventCallback', { key: 'filter' });
		});
	}

	return {
		init: init
	};
})(MultiTargetEventDispatcher, BJUtil);
