/*============================================================================ 
jquery.function.js

============================================================================ */

/**********************************************************
setClassBtn
--------
指定の要素のclass属性に"btn"を設定
@param / @return
**********************************************************/
function setClassBtn() {
	$("ul#navGlobal li img, ul#navAssist li img, ul#navFooter li img, .setButton img, .setButton input").each(function() {
		$(this).addClass("btn");
	});
}


/**********************************************************
setExternal
--------
別窓_blankでウィンドウ開く
a要素のclass属性に"external"を指定
@param / @return
**********************************************************/
function setExternal() {
	$("a.external").click(function() {
		window.open(this.href, '_blank');
		return false;
	});	
}


/**********************************************************
initRollOverImages
--------
マウスオーバーで画像を切換
@param / @return
**********************************************************/
function initRollOverImages() {
	var image_cache = new Object();
	$("a img.btn,input[type=image].btn").each(function(i) {
		var imgsrc = this.src.replace('_o.', '.');
		var dot = imgsrc.lastIndexOf('.');
		var imgsrc_on = imgsrc.substr(0, dot) + '_o' + imgsrc.substr(dot, 4);
		image_cache[this.src] = new Image();
		image_cache[this.src].src = imgsrc_on;
		$(this).hover(
			function() { this.src = imgsrc_on; },
			function() {
				if (!$(this).parent('a').parent('li').hasClass('current')) {
					this.src = imgsrc;
				}
			}
		);
	});
}


/**********************************************************
pageScroll
--------
ページをスムーズにスクロール（ href属性値が#で始まるものが対象 ）
@param / @return
**********************************************************/
function pageScroll() {
	$("a[href*=#]").click(function() {
		if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
			var $target = $(this.hash);
			$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
			if ($target.length) {
				var targetOffset = $target.offset().top;
				$('html,body').animate({scrollTop: targetOffset}, 500);
				return false;
			}
		}
	});
}







/**********************************************************
tabInit
--------
タブで表示を切り替え
**********************************************************/
$.fn.tab = function(opts){
    var $naviItem, $tabImgs, targetItemsExp, hideAllItems, $initActive, convertTarget;

    opts = $.extend({
        // クリックされたタブに設定するクラス
        activeClass: 'current',
        imgPostfix: '_o'
    },opts);

    // excape regexp meta character
    opts.imgPostfix = opts.imgPostfix.replace(/([^0-9A-Za-z_])/g, '\\$1');
    // ロールオーバーオフsrc正規表現
    offPat = new RegExp("^(.+)(\\.[a-zA-Z]+)$");
    // ロールオーバーオンsrc正規表現
    onPat = new RegExp("^(.+)" + opts.imgPostfix + "(\\.[a-zA-Z]+)$");


    $naviItem = this;
    $tabImgs = this.find('img');
    // 表示を切り替える対象のjQuery Expression
    targetItemsExp = [];

    hideAllItems = function(){
        $(targetItemsExp.join(',')).hide();
    };

    // すべてのタブのロールオーバーを解除
    rollOffAllImg = function(){
        $tabImgs.each(function(){
            $(this).attr('src', $(this).data('srcOff'));
        });
    };
    
    // Ajax.load()したコンテンツ内のa.hrefがIE6/7でhttpからはじまる件
    convertTarget = function(href){
        if (href.match(/^http/)){
        	href = href.replace(/^.*#/, '#');
        }
        return href;
    };

    $naviItem.each(function(){
        var tab, targetExp, $img, imgSrc;

        tab = this;
        imgSrc = {};

        // ロールオーバー画像処理が必要なときのみ
        $img = $(this).find('img');
        if ($img.length > 0) {
            // detect src
            if ($img.attr('src').match(onPat)) {
                $img.data('srcOn', $img.attr('src'));
                $img.data('srcOff', $img.attr('src').replace(onPat, "$1$2"));
            } else {
                $img.data('srcOff', $img.attr('src'));
                $img.data('srcOn', $img.attr('src').replace(offPat, "$1" + opts.imgPostfix + "$2"));
            }
            $img.hover(
                function(){
                    $(this).attr('src', $(this).data('srcOn'));
                    return;
                },
                function(){
                    if ($(tab).hasClass(opts.activeClass)) {
                        return;
                    }
                    $(this).attr('src', $(this).data('srcOff'));
                }
            );
            if ($(tab).hasClass(opts.activeClass)) {
                $img.mouseover().mouseout();
            }
        }

        targetExp = $(this).find('a').attr('href');
        targetExp = convertTarget(targetExp);
        targetItemsExp.push(targetExp);

        $(this).click(function(){
            hideAllItems();
            $(targetExp).show();
            $naviItem.removeClass(opts.activeClass);
            $(this).addClass(opts.activeClass);

            rollOffAllImg();
            $img.attr('src', $img.data('srcOn'));
            return false;
        });
    });

    // 初期化
    hideAllItems();
    // 初期状態で表示するアイテム
    $initActive = $naviItem.filter('.' + opts.activeClass);
    if ($initActive.length > 0) {
    	var initTargetExp = convertTarget($initActive.find('a').attr('href'));
        $(initTargetExp).show();
    } else {
        $naviItem.filter(':first').click();
    }

    return this;
};

function tab() {
	$('div#tab>ul>li').tab();
}

/**********************************************************
initPlaceholder
--------
プレースホルダー
**********************************************************/
$.fn.placeholder = function(){
if(!$('.placeholder').length) return;
$('.placeholder').each(function ()
{
    (function ( elm )
    {
        // placeholder時の文字色を設定
        var defaultColor    = 'silver';
        
        // title属性をplaceholder用の文字列として保持
        $.data(elm, 'placeholder-string', $(elm).attr('title'));
        // 元の文字色を保持 => 入力があったら戻します
        $.data(elm, 'placeholder-color', $(elm).css('color'));
        switch ( $(elm).val() ) {
            case '' :
                $(elm).val($.data(elm, 'placeholder-string'));
            case $.data(elm, 'placeholder-string') :
                $(elm).css('color', defaultColor);
            break;
        }
        // フォーカスされたときに、placeholderを消して色を戻す
        $(elm).focus(function ( )
        {
            if ( $(this).val() == $.data(this, 'placeholder-string') ) {
                $(this).val('');
                $(this).css('color', $.data(this, 'placeholder-color'));
            }
        });
        // フォーカスが外れたときに、valueがカラならplaceholderを代入
        $(elm).blur(function ( )
        {
            if ( $(this).val() == '' ) {
                $(this).val($.data(this, 'placeholder-string'));
                $(this).css('color', defaultColor);
            }
        });
        // フォームのsubmit時に、placeholderのままなら消してから送る
        $(elm).parents().filter('form').submit(function ( )
        {
            if ( $(elm).val() == $.data(elm, 'placeholder-string') ) {
                $(elm).val('');
            }
            return true;
        });
    })( this )
});
}

function initPlaceholder() {
	$(document).placeholder();
}


/**********************************************************
stripe
--------
テーブルのストライプ
**********************************************************/

$.fn.stripe = function() {
		var element = $('body');

		_stripe(element.find('table.striped'));
		_stripe(element.find('ul.striped'));

		return this;

		function _stripe(element) {
			if (!element.length) return;
			var tag;
			switch (element[0].tagName.toLowerCase()) {
			case 'table':
				tag = 'tr';
				break;
			case 'ul':
				tag = 'li';
				break;
			}
			
			if (!tag) return;
			element
				.find(tag+':even').removeClass('even').addClass('odd').end()
				.find(tag+':odd').removeClass('odd').addClass('even');
	}
}
	
function stripe() {
	$(document).stripe();
}


/**********************************************************
実行処理
**********************************************************/
$(function(){
	setClassBtn();
	initRollOverImages();
	setExternal();
})




