/*--------------------------------------------------------------------------*
 *  
 *  tabset JavaScript Library beta1
 *  
 *  jQuery required.
 *  
 *  MIT-style license. 
 *  
 *  August 31st , 2009 Written by Koji Kimura
 *  http://www.starryworks.co.jp/
 *  
 *--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------*

タブ切り替え用JavaScript（jQueryに依存）

＜使い方＞

（１）タブをaでマークアップして「tab」というクラスを付与し、同じグループのタブを全て含む親要素に
「tabset」というクラスを付与する。「tabset」にある全てのa要素をタブとして作動させる場合は
各a要素に「tab」というクラスを付与しなくても良い。

（２）タブの各a要素のhref属性は「#」と表示する対象の要素のIDに。（例：#TabPanel01）

（３）タブに画像を使う場合はタブの各a要素の子のimg要素はロールオーバー用と選択時用の
画像ファイルを用意しておき、画像ファイル名の末尾に「-over」、「-selected」を付けたものを用意しておく。

（４）選択されているタブには「selected」というクラスが付与されるので、選択時のスタイルを設定しておく。

＜その他の機能説明＞
・タブが切り替わる度にURLのハッシュが変わり、ハッシュ付きのURLにアクセスするとそのタブがあらかじめ選択状態になる。
・selectedというクラスを付与したタブはあらかじめ選択状態になるが、上記のハッシュが優先される。
・上記２点にどちらもあてはまらない場合、一つ目のタブが選択状態になる。

 *--------------------------------------------------------------------------*/

$(function(){
	
	function parseHash(hash) {
		var h = hash.replace(/^#/,"");
		var p = h.split("&");
		var o = {};
		var a;
		for ( var i=0; i<p.length; i++ ) {
			if ( !p[i] ) continue;
			a = p[i].split("=");
			o[a[0]] = a[1];
		}
		return o;
	}
	
	var tabsetIndex = 0;
	$(".tabset").each(function(){
		$.data(this,"tabsetIndex",tabsetIndex);
		var hashData = parseHash(document.location.hash);
		var selectedByHash = hashData["tabset"+tabsetIndex];
		var $selected = null;
		var $tabs = $("a.tab[href^=#]",this);
		if ( $tabs.length ) {
			if ( selectedByHash && $("a.tab[href^=#"+selectedByHash+"]",this).length ) $selected = $("a.tab[href^=#"+selectedByHash+"]",this);
		} else {
			$tabs = $("a[href^=#]",this);
			if ( selectedByHash && $("a[href^=#"+selectedByHash+"]",this).length ) $selected = $("a[href^=#"+selectedByHash+"]",this);
		}
		if ( !$tabs.length ) return;
		//click
		$tabs.click(function(){
			if ( !$(this).attr("href").length ) return false;
			$.data(this,"tabs").each( function(){
				$($(this).attr("href")).hide();
				$("img",this).attr("src",$.data(this,"img"));
				$(this).removeClass("selected");
			});
			$($(this).attr("href")).show();
			$(this).addClass("selected");
			$("img",this).attr("src",$.data(this,"selected"));
			var h = parseHash(document.location.hash);
			var i = $.data($(this).parents(".tabset").get(0),"tabsetIndex");
			h["tabset"+i] = $(this).attr("href").replace("#","");
			var st = $(document).scrollTop();
			$("html,body").scrollTop(st);
			
			if(pageTracker){
				pageTracker._trackPageview(location.href);
			}
			
			return false;
		});
		
		//hover
		$tabs.hover(
			function(){
				if ( !$("img",this).length ) return;
				if ( !$(this).hasClass("selected") ) $("img",this).attr("src",$.data(this,"over"));
			},
			function(){
				if ( !$("img",this).length ) return;
				var i = $(this).hasClass("selected") ? "selected" : "img";
				$("img",this).attr("src",$.data(this,i));
			}
		);
		
		//init
		$tabs.each(function(){
			$.data(this,"tabs",$tabs);
			
			//tab images
			if ( $("img",this).length ) {
				var src = $("img",this).attr("src");
				var o = src.split(".");
				var ext = o.pop();
				var over = o.join(".")+"-over."+ext;
				var selected = o.join(".")+"-selected."+ext;
				
				//preload
				$("<img>").attr("src", over);
				$("<img>").attr("src", selected);
				
				//save
				$.data(this,"img",src);
				$.data(this,"over",over);
				$.data(this,"selected",selected);
			}
			//selected tab
			if ( $(this).hasClass("selected") && !$selected ) $selected = $(this);
		});
		if ( !$selected ) $selected = $tabs.eq(0);
		$selected.click();
		tabsetIndex++;
	});
});

