/**
@prefix : <http://purl.org/net/ns/doas#> .
<http://factory.yusukenakanishi.com/javascript/jquery/plugin/querytabs/js/queryTabs.js> a :JavaScript;
 :shortdesc "queryTabs.js";
 :created "2010-09-28";
 :release [:revision "1.0"; :created "2010-09-28"];
 :author [:name "Yusuke. Nakanishi"; :homepage <http://yusukenakanishi.com/> ];
 :license <http://sam.zoy.org/wtfpl/>;
 :dependencies "none" .
*/

(function($){

    // クエリの有無判定
    var query = window.location.search;
    var regexp01 = /tabArea=[\w|-]+/i;
    var regexp02 = /openTab=[\w|-]+/i;
    if(query) {
        if(query.match(regexp01)) {
            var queryTabArea = query.match(regexp01).toString();
            queryTabArea = queryTabArea.replace(/tabArea=/, "#");
        }
        if(query.match(regexp02)) {
            var queryOpenTab = query.match(regexp02).toString();
            queryOpenTab = queryOpenTab.replace(/openTab=/, "");
        }
    }

    $.fn.queryTabs = function(options){

        // 引数のデフォルト値を渡す
        var conf = $.extend({
            form: 'text',
            animate: 'show',
            duration: '',
            openTab: ''
        }, options); // optionsに値があれば上書きする

        // 初期設定
        var target = this;
        var tabPanel = $('div.tabPanel', target);
        tabPanel.hide();
        var handler = $('ul.tab li a', target);

        // クエリでTabAreaの指定があった場合
        if(queryTabArea == '#' + $(this).attr('id')) {
            var queryPosition = $(queryTabArea).offset();
            // スクロールさせない
            //$('html,body').animate({scrollTop: queryPosition.top}, 1000);
            // 合わせてopenTabの指定があった場合
            handler.each(function() {
                if('#' + queryOpenTab == $(this).attr('href')) {
                    conf.openTab = queryOpenTab;
                }
            });
        }

        // タブが画像の場合
        if(conf.form == 'image') {
            // ウィンドウを開いた時のタブの位置
            if(conf.openTab) {
                tabPanel.each(function() {
                    if($(this).attr('id') == conf.openTab) {
                        $(this).show();
                    }
                });
                handler.each(function() {
                    if($(this).attr('href') == '#' + conf.openTab) {
                        var imgSrc = $(this).children('img').attr('src');
                        var imgDot = imgSrc.lastIndexOf('.');
                        var onSrc = imgSrc.substr(0, imgDot) + '_cr' + imgSrc.substr(imgDot, 4);
                        $(this).children('img').attr('src',onSrc).addClass('active');
                    }
                });
            } else {
                $('div.tabPanel:first', target).show();
                var imgSrc = $('ul.tab li:first a', target).children('img').attr('src');
                var imgDot = imgSrc.lastIndexOf('.');
                var onSrc = imgSrc.substr(0, imgDot) + '_cr' + imgSrc.substr(imgDot, 4);
                $('ul.tab li:first a', target).children('img').attr('src',onSrc).addClass('active');
            }
            // クリック時の動作
            handler.click(function() {
                var classJudgment = $(this).children('img').attr('class');
                if(classJudgment !== 'active') {
                    // タブ画像の切り替え
                    var imgSrc = $(this).children('img').attr('src').replace(/_cr/g, ""); // _onが複数付かないように
                    var imgDot = imgSrc.lastIndexOf('.');
                    var onSrc = imgSrc.substr(0, imgDot) + '_cr' + imgSrc.substr(imgDot, 4);
                    $(this).children('img').attr('src',onSrc);
                    var imgOff = $('ul.tab li img.active', target).attr('src').replace(/_cr/g, "");
                    $('ul.tab li img.active', target).attr('src',imgOff);
                    $('ul.tab li img.active', target).removeClass('active');
                    $(this).children('img').addClass('active');
                    // コンテンツの切り替え
                    var clickAttr = $(this).attr('href');
                    var boxHeight = $('div.tabPanelGroup').height();
                    $('div.tabPanelGroup').css('height', boxHeight);
                    $('div.tabPanel:visible', target).stop(true, true).hide();
                    $('div#' + clickAttr)[conf.animate](conf.duration);
                    $('div.tabPanelGroup').css('height', 'auto');
                }
                return false;
            });
        }

        // タブがテキストの場合
        if(conf.form == 'text') {
            // ウィンドウを開いた時のタブの位置
            if(conf.openTab) {
                tabPanel.each(function() {
                    if($(this).attr('id') == conf.openTab) {
                        $(this).show();
                    }
                });
                handler.each(function() {
                    if($(this).attr('href') == '#' + conf.openTab) {
                        $(this).addClass('active');
                    }
                });
            } else {
                $('div.tabPanel:first', target).show();
                $('ul.tab li:first a', target).addClass('active');
            }
            // クリック時の動作
            handler.click(function() {
                var classJudgment = $(this).attr('class');
                if(classJudgment !== 'active') {
                    // タブ切り替え
                    $('ul.tab li a.active', target).removeClass('active');
                    $(this).addClass('active');
                    // コンテンツの切り替え
                    var clickAttr = $(this).attr('href');
                    var boxHeight = $('div.tabPanelGroup').height();
                    $('div.tabPanelGroup').css('height', boxHeight);
                    $('div.tabPanel:visible', target).stop(true, true).hide();
                    $('div#' + clickAttr)[conf.animate](conf.duration);
                    $('div.tabPanelGroup').css('height', 'auto');
                }
                return false;
            });
        }

    }

})(jQuery);
