/**
 * ホバー、クリック拡張JavaScript
 *
 * 指定範囲（.js_hover_click）内において
 * 指定エレメント（.js_hover_click_hover）のホバー時にクラス（.ov）を加え、
 * そのエレメントのクリック時に指定エレメント（.js_hover_click_click）のクリックを作動
 * （aタグが含まれる場合は最初のaのhrefに遷移）
 *
 * なお、js_hover_click、js_hover_click_hoverを同時に指定することで、
 * 選択範囲とホバー処理対象を同一のエレメントとすることが可能
 * 
 * HTMLのDOM構成
 * .js_hover_click  (1...N)          ホバー、クリックの1つの枠組み
 *   .js_hover_click_click  (0...N)  クリック時の対象エレメント
 *   .js_hover_click_hover  (1...N)  ホバー時の対象エレメント
 * または
 * .js_hover_click .js_hover_click_hover (1...N)  ホバー、クリックの1つの枠組み＋ホバー時の対象が一致している場合
 *   .js_hover_click_click  (0...N)  クリック時の対象エレメント
 *
 * @require jquery.js
 */

$(function(){
	//ホバー時の追加クラス
	var hoverClass = 'ov';
	//ホバー、クリックの枠組み群
	var $wrappers = $('.js_hover_click');
	$wrappers.each(
		function(){
			//枠自身
			var $wrapper = $(this);
			//クリック対象
			var $clickElm = $wrapper.find('.js_hover_click_click:first');
			//クリック対象が存在しなければ、そのまま終了
			if(!$clickElm.size()){
				return;
			}
			//ホバー対象
			var $hoverElms;

			//枠自体がホバー対象
			if($wrapper.hasClass('js_hover_click_hover'))
			{
				$hoverElms = $wrapper;
			}
			//枠内の対象
			else
			{
				$hoverElms = $wrapper.find('.js_hover_click_hover');
			}

			$hoverElms
				//ホバー処理
				.hover(
					function(e){
						$hoverElms.addClass(hoverClass);
					},
					function(e){
						$hoverElms.removeClass(hoverClass);
					}
				)
				//クリック処理
				.bind(
					"click.hover_click",
					function(e){
						e.stopPropagation();
						e.preventDefault();
						$clickElm.trigger("click");
						return false;
					}
				)
			;
			$clickElm.bind(
				"click.hover_click",
				function(e){
					e.stopPropagation();
					e.preventDefault();
					var target = $clickElm.attr('target');
					var targetWindow;
					switch(target){
						case "_top":
							targetWindow = top;
							break;
						case "_parent":
							targetWindow = parent;
							break;
						case "_blank":
							break;
						case "_self":
						case "":
						case undefined:
							targetWindow = self;
							break;
					}
					if(targetWindow != undefined){
						targetWindow.location.href = $clickElm.attr('href');
					}else{
						window.open($clickElm.attr('href'));
						if(target != "_blank"){
							window.name = target;
						}
					}
					return false;
				}
			);
		}
	);

});

