$('document').ready(function(){

    $('#CharacterScrollArea').jCarouselLite({
        btnPrev: "#CharacterScrollLeftButton",
        btnNext: "#CharacterScrollRightButton",
        visible: 5,
        scroll: 5,
        speed: 500
    });
    /*
    var CharacterPaginator = function() {
        this.target = $('#CharacterSearch ul');
        this.numPerPage = 5;
        this.currentPage = 1;
        this.numOfItems = $('#CharacterSearch ul li').length;
        this.totalPages = Math.ceil(this.numOfItems / this.numPerPage);
    }

    CharacterPaginator.prototype = {

        setUp : function() {
            this.setCurrentPage(1);
            this.enablePaginateButtons();
        },

        setCurrentPage : function(num) {
            this.currentPage = num;
        },

        moveToPage : function(toPage) {
            var self = this;

            if (toPage > self.currentPage && toPage > self.totalPages) {
                return self.moveToPage(1);
            }
            if (toPage < self.currentPage && toPage < 1) {
                return self.moveToPage(self.totalPages);
            }

            if (toPage > self.currentPage && toPage <= self.totalPages) {
                var sIndex = (self.currentPage - 1) * self.numPerPage;
                var eIndex = (toPage - 1) * self.numPerPage;
                self.target.find('li').slice(sIndex, eIndex).hide();
                this.setCurrentPage(toPage);
            } else if (toPage < self.currentPage && toPage >= 1) {
                var sIndex = (toPage - 1) * self.numPerPage;
                var eIndex = (self.currentPage - 1) * self.numPerPage;
                self.target.find('li').slice(sIndex, eIndex).show();
                self.setCurrentPage(toPage);
            }
        },

        enablePaginateButtons : function() {
            var self = this;
            var prevButton = $('#CharacterScrollLeftButton');
            var nextButton = $('#CharacterScrollRightButton');

            nextButton.mouseover(function() {
                    $(this).css('cursor', 'pointer');
                }).click(function() {
                    self.moveToPage(self.currentPage + 1);
                });
            prevButton.mouseover(function() {
                    $(this).css('cursor', 'pointer');
                }).click(function() {
                    self.moveToPage(self.currentPage - 1);
                });
        }
    };

    var characterPaginator = new CharacterPaginator();
    characterPaginator.setUp();
    */

    // マウスオーバー画像のプリロード
    $('img.hover,img.hover_and_on,input[@type=image].hover').each(function() {
        var imgSrc = getImgSrc($(this));
        var hoverSrc = getHoverImageUrl(imgSrc, true);
        (new Image()).src = hoverSrc;
        return true;
    });
    setHoverHandler('img.hover');
    setHoverHandler('input[@type=image].hover');

    // ビギナーズガイド
    $('#BeginnersGuideButton').click(openBeginnersGuide).mouseover(function() {
        $(this).css('cursor', 'pointer');
    });
});


var IE6 = navigator.userAgent.indexOf('MSIE 6') != -1;

function getImgSrc(imgObj) {
    if (IE6) {
        var s = $(imgObj).attr('style');
        if (s.match(/src=["'](.+?)["']/i)) {
            return RegExp.$1;
        }
    } 
    return $(imgObj).attr('src');
}

function setImgSrc(imgObj, src) {
    if (IE6) {
        var s = $(imgObj).attr('style');
        if (s.indexOf('AlphaImageLoader') != -1) {
            var style = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src=\"" + src + "\"";
            $(imgObj).attr('style', style);
            return
        }
    }
    $(imgObj).attr('src', src);
}

function getHoverImageUrl(url, onoff) {
    var extPos = url.lastIndexOf('.');
    if (extPos == -1) {
        return url;
    }
    var path = url.slice(0, extPos);
    var ext = url.slice(extPos + 1);
    if (onoff) {
        if (!path.match(/_on$/)) {
            return path + '_on.' + ext;
        }
    } else {
        if (path.match(/_on$/)) {
            return path.slice(0, -3) + '.' + ext;
        }
    }
    return url;
}

/**
 * 指定されたセレクタ(img要素を想定)に合致する画像のマウスオーバー、
 * マウスアウトイベントを設定します。
 * マウスオーバー時に、画像ファイル名の末尾に _on を付けた画像ファイルに
 * 差し替えるようにします。
 */
function setHoverHandler(exp) {
    $(exp).hover(function() {
            var imgSrc = getImgSrc($(this));
            var hoverSrc = getHoverImageUrl(imgSrc, true);
            setImgSrc($(this), hoverSrc);
            $(this).css('cursor', 'pointer');
        }, function() {
        var imgSrc = getImgSrc($(this));
            var src = getHoverImageUrl(imgSrc, false);
            setImgSrc($(this), src);
            $(this).css('cursor', 'default');
        });
}
function resetHoverHandler(exp) {
    $(exp).unbind('mouseover').unbind('mouseout');
}

function setNewsTabHandler(exp) {
    var e = $(exp);
    e.unbind('mouseover').unbind('mouseout').unbind('click');
    e.mouseover(function() {
        var src = getHoverImageUrl(getImgSrc($(this)), true);
        setImgSrc($(this), src);
        $(this).css('cursor', 'pointer');
    });
    e.mouseout(function() {
        var src = getHoverImageUrl(getImgSrc($(this)), false);
        setImgSrc($(this), src);
        $(this).css('cursor', 'default');
    });
    e.click(function() {
        $(this).unbind();
        $(this).css('cursor', 'default');

        $('#NewsIndex .frame_contents li.none').remove();
        var cat = parseInt($(this).attr('id').slice(3));
        if (cat != 1) {
            var objs = $('#NewsIndex .frame_contents li').hide().filter('.cat' + cat).show();
            if (!objs || objs.length == 0) {
                var msg;
                if (cat == 3) {
                    msg = '現在、メンテナンス情報はありません。';
                } else {
                    msg = '現在、ニュースはありません。';
                }
                $('#NewsIndex .frame_contents').append("<li class='none'>" + msg + "</li>");
            }
        } else {
            $('#NewsIndex .frame_contents li').show();
        }

        var imgObjs = $(this).parent().parent().siblings().find('img');
        var prevTabImg = $('#NewsIndex .tabs .current_tab');
        var src = getHoverImageUrl(getImgSrc(prevTabImg), false);
        setImgSrc(prevTabImg, src);

        prevTabImg.removeClass('current_tab');
        $(this).addClass('current_tab');

        setNewsTabHandler(prevTabImg);
    });
}

/**
 * ビギナーズガイドを新しいウィンドウで開きます。
 */
function openBeginnersGuide() {
    var guideWin = window.open('/guide/', 'guide','toolbar=no,status=yes,width=820,height=735,directories=no,scrollbars=yes,location=no,resizable=no,menubar=no');
    guideWin.focus();
}

/* 画像のプリロード */
function preload(path) {
    var img = new Image();
    img.src = path;
}

var preloadImages = [
    '/static/img/28/common/btn_enquete_on.png',
    '/static/img/28/common/btn_faq_on.png',
    '/static/img/28/common/btn_gamesoft_on.png',
    '/static/img/28/common/btn_guide_on.png',
    '/static/img/28/common/btn_member_on.png',
    '/static/img/28/common/btn_mobile_on.png',
    '/static/img/28/common/btn_news_on.png',
    '/static/img/28/common/btn_toontown_on.png',
    '/static/img/28/common/btn_xd_on.png',
    '/static/img/28/common/icon_action_on.png',
    '/static/img/28/common/icon_castle_on.png',
    '/static/img/28/common/icon_fun_on.png',
    '/static/img/28/common/icon_puzzle_on.png',
    '/static/img/28/common/icon_sports_on.png',
    '/static/img/28/common/icon_table_on.png',
    '/static/img/28/xd/btn_enquete_on.png',
    '/static/img/28/xd/btn_faq_on.png',
    '/static/img/28/xd/btn_gamesoft_on.png',
    '/static/img/28/xd/btn_guide_on.png',
    '/static/img/28/xd/btn_member_on.png',
    '/static/img/28/xd/btn_mobile_on.png',
    '/static/img/28/xd/btn_news_on.png',
    '/static/img/28/xd/btn_toontown_on.png',
    '/static/img/28/common/btn_chara_search_left_on.png',
    '/static/img/28/common/btn_chara_search_right_on.png'
    ];

for (var i = 0; i < preloadImages.length; i++) {
    preload(preloadImages[i]);
}
