$(function(){
    // キャラクターサーチ
    var options = {
        btnPrev: "#CharacterScrollLeftButton",
        btnNext: "#CharacterScrollRightButton",
        visible: 5,
        scroll: 5,
        speed: 300,
        circular: true,
        afterEnd: function(elements) {
            var e = $(elements[0]);
            var csIndex = e.attr('class').substr(4);
            $.cookie('cs_index', csIndex, {path: '/'});
        }
    };
    var csIndex = $.cookie('cs_index');
    if (csIndex) {
        options.start = parseInt(csIndex);
    }
    $('#CharacterScrollArea ul li').show();
    $('#CharacterScrollArea').jCarouselLite(options);

    // マウスオーバー画像のプリロード
    $('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');
    });
});


/**
 * SiteCatalyst
 *
 * @param link リンク先URL
 * @param name リンク名
 * @param type "custom"(デフォルト値) または "download"。通常は "custom"
 */
function tracklink(link, name, type) {
    type = type || 'custom';
    if (window.cto != undefined) {
        try {
            var obj = {
                href: link,
                name: name,
                type: type
            };
            cto.tracklink(obj);
        } catch(e) {
            // ignore
        }
    }
}

var ua = navigator.userAgent.toLowerCase();
var IE6 = ua.indexOf('msie 6') != -1;
var isSmartPhone = ua.indexOf('iphone') != -1 || ua.indexOf('ipad') != -1 || ua.indexOf('android') != -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 setCastleBlockTabHandler(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().css('cursor', 'default');
        var contentsToShow = $(this).attr('id').slice(0, -3);
        $('#CastleBlockContents > div').hide();
        $('#' + contentsToShow).show();

        var imgObjs = $(this).parent().parent().siblings().find('img');
        var prevTabImg = $('#CastleBlock .tabs .current_tab');
        var src = getHoverImageUrl(getImgSrc(prevTabImg), false);
        setImgSrc(prevTabImg, src);

        prevTabImg.removeClass('current_tab');
        $(this).addClass('current_tab');

        setCastleBlockTabHandler(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]);
}

