/**
@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.5"; :created "2010-11-10"];
 :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: '',
            cookie: '0'
        }, 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;
                }
            });
//       }
        
        // idの取得
        var clickArea = $(this).attr('id');
        
        // cookieの書き込み
        function writeCookie(value, days) {
            var str = clickArea + 'tes=' + value + ';';
            if (days != 0) {
                var dt = new Date();
                dt.setDate(dt.getDate() + days);
                str += ' expires=' + dt.toGMTString() + ';';
            }
            document.cookie = str;
        }
        
        // cookieの読み込み
        var clicked = false;
        if(document.cookie) {
            var cookieValue = document.cookie;
            cookieValue = cookieValue.split('; ');
            for(var i=0; i<cookieValue.length; i++) {
                if (cookieValue[i].match(clickArea)) {
                    var cookieTab = cookieValue[i].split('=');
                    clicked = cookieTab[1];
                }
            }
        }
        
        // タブが画像の場合
        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) + '_on' + imgSrc.substr(imgDot, 4);
                        $(this).children('img').attr('src',onSrc).addClass('active');
                    }
                });
            } else if(conf.cookie != 0) {
                if(clicked) {
                    tabPanel.each(function() {
                        if($(this).attr('id') == clicked) {
                            $(this).show();
                        }
                    });
                    handler.each(function() {
                        if($(this).attr('href') == '#' + clicked) {
                            var imgSrc = $(this).children('img').attr('src');
                            var imgDot = imgSrc.lastIndexOf('.');
                            var onSrc = imgSrc.substr(0, imgDot) + '_on' + 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) + '_on' + imgSrc.substr(imgDot, 4);
                    $('ul.tab li:first a', target).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) + '_on' + 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(/_on/g, ""); // _onが複数付かないように
                    var imgDot = imgSrc.lastIndexOf('.');
                    var onSrc = imgSrc.substr(0, imgDot) + '_on' + imgSrc.substr(imgDot, 4);
                    $(this).children('img').attr('src',onSrc);
                    var imgOff = $('ul.tab li img.active', target).attr('src').replace(/_on/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');
                }
                
                // cookieの保存
                var clickTab = $(this).attr('href');
                clickTab = clickTab.replace('#', '');
                writeCookie(clickTab ,conf.cookie);
                return false;
            });
            // ロールオーバー
            handler.hover(function() {
                var classJudgment = $(this).children('img').attr('class');
                if(classJudgment !== 'active') {
                    var imgSrc = $(this).children('img').attr('src');
                    var imgDot = imgSrc.lastIndexOf('.');
                    var onSrc = imgSrc.substr(0, imgDot) + '_on' + imgSrc.substr(imgDot, 4);
                    $(this).children('img').attr('src',onSrc);
                }
            }, function() {
                var classJudgment = $(this).children('img').attr('class');
                if(classJudgment !== 'active') {
                    var imgOff = $(this).children('img').attr('src').replace(/_on/g, "");
                    $(this).children('img').attr('src',imgOff);
                }
            });
        }
        
        // タブがテキストの場合
        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 if(conf.cookie != 0) {
                if(clicked) {
                    tabPanel.each(function() {
                        if($(this).attr('id') == clicked) {
                            $(this).show();
                        }
                    });
                    handler.each(function() {
                        if($(this).attr('href') == '#' + clicked) {
                            $(this).addClass('active');
                        }
                    });
                } else {
                    $('div.tabPanel:first', target).show();
                    $('ul.tab li:first a', target).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');
                }
                
                // cookieの保存
                var clickTab = $(this).attr('href');
                clickTab = clickTab.replace('#', '');
                writeCookie(clickTab ,conf.cookie);
                
                return false;
            });
        }
        
    }
    
})(jQuery);
