/*
 * 各設定変数
 */
var baseUrl       = 'http://kdreams.jp/index.php';
var loginBaseUrl  = 'https://my.kdreams.jp/index.php';

var imgDir   = '/images/bnr/navi/'
var xmlUrl   = imgDir + 'banner.xml';
var cycle    = 10000;       // 広告ループ秒数
var kaisaiCycle = 15000;    // 開催場切替え秒数
var slideMin = 1200;        // 右広告バナースライド秒数
var clickSlideMin = 700;    // 右広告バナースライド秒数
var clickFlg = false;       // クリックフラグ
var waitMin  = 300;         // Wait処理秒数
var naviTimeOutId   = null; // 右バナー広告表示タイマーID
var kaisaiTimeOutId = null; // 開催情報表示タイマーID
var xmlInfos  = {}          // XML情報格納
var saleInfos = {}          // API情報格納
var viewCount = 4;          // 1回に表示されるナビバナーの表示数
var saleInfoCnt = 0;

/*
 * トップページに表示されるNaviバナー生成
 */
$(document).ready(function() {
    $('div#TOP_NOWSALE').show();
    autoChangeNavigation()
});

/*
 * 最初に呼び出される関数
 * 各情報表示のベースを生成
 */
function autoChangeNavigation()
{
    // 最初のID宣言
    $('#TOP_NOWSALE').append('<div id=\"TOP_NOWSALE_PRICE\"></div><div id=\"TOP_NOWSALE_BANNER\"></div>');

    // #TOP_NOWSALE_BANNER_UP生成
    $('div#TOP_NOWSALE > div#TOP_NOWSALE_BANNER').append('<p id=\"TOP_NOWSALE_BANNER_UP\"><a href=\"\" onClick=\"clickSlideNavi(-1); return false;\"><img src=\"images/common/nowsale_allow_top.gif\" alt=\"▲\" width=\"140\" height=\"12\" /></a></p>');

    // .nowsale_on生成
    $('div#TOP_NOWSALE > div#TOP_NOWSALE_BANNER').append('<p class=\"nowsale_on\"><img src=\"images/common/top_nowsale_bnron.png\" alt=\"▲\" width=\"145\" height=\"50\" /></p>');

    // 広告XML読み込みとul li リスト生成
    $('div#TOP_NOWSALE > div#TOP_NOWSALE_BANNER').append('<div style=\"overflow:hidden; height:246px;\"><ul></ul></div>');

    $('#TOP_NOWSALE_BANNER').append('<p id=\"TOP_NOWSALE_BANNER_BOTTOM\"><a href=\"\" onClick=\"clickSlideNavi(1); return false;\"><img src=\"images/common/nowsale_allow_bottom.gif\" alt=\"▼\" width=\"140\" height=\"12\" /></a></p>')

    // XML広告情報取得
    var tmpXmlInfos = {}
    tmpXmlInfos = getXmlInfo();

    // 競輪場別開催情報一覧取得
    saleInfos = getSaleInfo();

    var naviCnt = 0;
    var kaisaiInfoFlg = false;

    // 開催情報取得
    if (saleInfos != false) {
        kaisaiInfoFlg = true;

        xmlInfos[naviCnt] = {
        'img'       : 'images/bnr/bnr_sales.gif',
        'alt'       : '現在の販売金額',
        'naviWidth' : '140',
        'naviHeight': '50',
        'mainImg'   : null,
        'mainImgUrl': null,
        'mainWidth' : null,
        'mainHeight': null,
        }
        naviCnt++;
        makeTopSales();
    }

    // XML情報からバナーを生成する為の情報をセット
    for (key in tmpXmlInfos) {

        xmlInfos[naviCnt] = {
        'img'        : imgDir + tmpXmlInfos[key]['navi_name'],
        'alt'        : null,
        'naviWidth'  : '140',
        'naviHeight' : '50',
        'mainImg'    : imgDir + tmpXmlInfos[key]['file_name'],
        'mainWidth'  : '594',
        'mainHeight' : '244',
        'mainImgUri' : (tmpXmlInfos[key]['uri'] == undefined)? '' : tmpXmlInfos[key]['uri'],
        }
        naviCnt++;
    }
    bannerCnt = naviCnt;

    i = 0;
    for (key in xmlInfos) {
        $('div#TOP_NOWSALE > div#TOP_NOWSALE_BANNER > div > ul').append('<li class=\"cm_' + i + '\"><a href=\"\" onClick=\"clickSlideNavi(' + i + '); return false;\"><img src=\"' + xmlInfos[i]['img'] + '\" alt=\"' + xmlInfos[i]['alt'] + '\" width=\"' + xmlInfos[i]['naviWidth'] + '\" height=\"' + xmlInfos[i]['naviHeight'] + '\"></a></li>')
        i++;
    }

    var diffViewCnt = viewCount - i;
    if (diffViewCnt > 0) {
        var topPosition = 180;
        for (i=0; i<diffViewCnt; i++) {
            $('div#TOP_NOWSALE > div#TOP_NOWSALE_BANNER').append('<div style=\"position:absolute; top:' + String(topPosition) + 'px; right:0px;\"><img src=\"/images/bnr/bnr_blank.gif\" alt=\"\" width=\"140\" height=\"54\" ></div>')
            topPosition = parseInt(topPosition) - 54;
        }
    }

    if (naviCnt == 0) {
        return false;
    }

    // 開催が存在しない場合は1番目のメイン画像を表示します
    if (kaisaiInfoFlg == false) {
        var clickEvent = '';
        if (xmlInfos[0]['mainImgUri'] == '') {
            clickEvent = 'onClick=\"return false;\"'
        }
        $('#TOP_NOWSALE_PRICE').html('<a href=\"' + xmlInfos[0]['mainImgUri'] + '\" ' + clickEvent + ' target=\"_blank\"><img src=\"' + xmlInfos[0]['mainImg'] + '"\ width=\"' + xmlInfos[0]['mainWidth'] + '\" height=\"' + xmlInfos[0]['mainHeight'] + '\"></a>')
        naviTimeOutId = setTimeout("slideNavi(1)", cycle)
    }
}

/*
 * 右広告バナースライド処理
 */
function clickSlideNavi(cnt)
{
    // 繰り返し処理を一時中断
    _timerClear(naviTimeOutId)
    _timerClear(kaisaiTimeOutId)

    if ($('#TOP_NOWSALE_BANNER > div > ul > li').size() == bannerCnt) {
        clickFlg = true
        slideNavi(cnt)
        _wait(waitMin)
    }
}

/*
 * 右広告バナースライド処理
 */
function slideNavi(cnt)
{
    if (clickFlg == true) {
        slideMin = clickSlideMin;
        clickFlg = false;
    } else {
        slideMin = 1200;
    }

    cnt = (cnt == undefined)? 1 : cnt;
    var clickArg = $('#TOP_NOWSALE_BANNER > div > ul > li').size() - cnt;
    var liCnt    = $('#TOP_NOWSALE_BANNER > div > ul > li').size();
    var liInfos = {}
    for (var i=0; i<$('#TOP_NOWSALE_BANNER > div > ul > li').size(); i++) {
        var classNm = $('#TOP_NOWSALE_BANNER > div > ul > li:eq(' + i + ')').attr("class");
        var htmlTgs = $('#TOP_NOWSALE_BANNER > div > ul > li:eq(' + i + ')').find('a').html();
        if (htmlTgs == null) {
            htmlTgs  = $('#TOP_NOWSALE_BANNER > div > ul > li:eq(' + i + ')').html()
        }
        liInfos[i] =  {'cnm': classNm, 'htm': htmlTgs};
    }

    // 各値の初期値セット
    var i  = 0;
    var j  = 0;
    var no = 0;
    var kaisaiFlg = false;
    var n  = new Array();
    var sort = {};

    if (cnt == -1) {
        // 連想配列降順
        liCnt--;
        liInfos = _arsort(liInfos, liCnt)
        j++;
        for (var key in liInfos) {
            if (key >= liCnt) {
                var rem = 0;
                $('#TOP_NOWSALE_BANNER > div > ul').prepend('<li class=\"' + liInfos[key]['cnm'] + '\" style=\"margin-top:-54px; opacity:0;\">' + liInfos[key]['htm'] + '</li>');
                liInfos[key]['cnm']
                n = liInfos[key]['cnm'].split("_");
                no = parseInt(n[1]);
                if (xmlInfos[no]['mainImg'] != null) {
                    var clickEvent = '';
                    if (xmlInfos[no]['mainImgUri'] == '') {
                        clickEvent = 'onClick=\"return false;\"'
                    }
                    $('#TOP_NOWSALE_PRICE').html('<a href=\"' + xmlInfos[no]['mainImgUri'] + '\" '+ clickEvent +' target=\"_blank\"><img src=\"' + xmlInfos[no]['mainImg'] + '"\ width=\"' + xmlInfos[no]['mainWidth'] + '\" height=\"' + xmlInfos[no]['mainHeight'] + '\"></a>')
                } else {
                    kaisaiFlg = true;
                    _timerClear(naviTimeOutId)
                    makeTopSales()
                }

                $('#TOP_NOWSALE_BANNER > div > ul > li.' + liInfos[key]['cnm']).animate({'margin-top':10, opacity:1}, slideMin, function (){
                    if (rem) {
                        $(this).remove();
                        _wait(100);
                    }
                    rem++;
                });
                continue;
            }
            $('#TOP_NOWSALE_BANNER > div > ul > li.' + liInfos[i]['cnm']).replaceWith('<li class=\"' + liInfos[i]['cnm'] + '\"><a href=\"\" onClick=\"clickSlideNavi(' + (j++) + '); return false;\">' + liInfos[i]['htm'] + '</a></li>');
            i++;
        }
        if (kaisaiFlg == false) {
            naviTimeOutId = setTimeout("slideNavi(1)", cycle)
        }
        return
    }

    for (var key in liInfos) {
        var tmp = null;

        // 一番目の要素削除
        if (key < cnt) {
            $('#TOP_NOWSALE_BANNER > div > ul > li.' + liInfos[key]['cnm']).animate({'margin-top':-54, opacity:"toggle"}, slideMin, function(){
                $(this).remove();
                _wait(100);
            });
            $('#TOP_NOWSALE_BANNER > div > ul').append('<li class=\"' + liInfos[key]['cnm'] + '\"><a href=\"\" onClick=\"clickSlideNavi(' + (clickArg) + '); return false;\">' + liInfos[key]['htm'] + '</a></li>').animate({height: 'show'}, slideMin);

            clickArg += 1
            continue;
        }

        if (i == 0) {
            $('#TOP_NOWSALE_BANNER > div > ul > li.' + liInfos[key]['cnm'] + ' > a').each(function(){
                $(this).replaceWith($(this).html());
            });
            var n = liInfos[key]['cnm'].split("_");
            no = parseInt(n[1]);

            if (xmlInfos[no]['mainImg'] != null) {
                var clickEvent = '';
                if (xmlInfos[no]['mainImgUri'] == '') {
                    clickEvent = 'onClick=\"return false;\"'
                }
                $('#TOP_NOWSALE_PRICE').html('<a href=\"' + xmlInfos[no]['mainImgUri'] + '\" ' + clickEvent + ' target=\"_blank\"><img src=\"' + xmlInfos[no]['mainImg'] + '"\ width=\"' + xmlInfos[no]['mainWidth'] + '\" height=\"' + xmlInfos[no]['mainHeight'] + '\"></a>')
            } else {
                kaisaiFlg = true;
                _timerClear(naviTimeOutId)
                makeTopSales()
            }
            i++;
            continue;
        }
        tmp = $('#TOP_NOWSALE_BANNER > div > ul > li.' + liInfos[key]['cnm'] + ' > a').html();
        $('#TOP_NOWSALE_BANNER > div > ul > li.' + liInfos[key]['cnm']).html('<a href=\"\" onClick=\"clickSlideNavi(' + i + '); return false;\">' + tmp + '</a>');

        i++;
    }
    if (kaisaiFlg == false) {
        naviTimeOutId = setTimeout("slideNavi(1)", cycle)
    }
}

/*
 * 開催情報取得・表示処理
 */
function makeTopSales()
{
    if (saleInfoCnt >= 1) {
        // 再読み込み処理
        getSaleInfo();
    }

    if (saleInfos == false || saleInfos['bank_num'] == 0) {
        naviTimeOutId = setTimeout("slideNavi(1)", cycle)
        return;
    }
    $('#TOP_NOWSALE_PRICE').html('<div id=\"TOP_NOWSALE_PRICE_WRAPPER\"></div>');
    $('#TOP_NOWSALE_PRICE_WRAPPER').append('<div id="\TOP_NOWSALE_TITLE"\></div>');
    $('#TOP_NOWSALE_TITLE').append('<h2 class=\"h2_nowsale\"><img src=\"images/common/h2_nowsale.png\" alt=\"現在の販売金額\" width=\"179\" height=\"32\" /></h2>');
    $('#TOP_NOWSALE_PRICE').append('<div id=\"TOP_NOWSALE_ODDS\"></div>');

    // グラフ用MAX値セット
    maxScale = saleInfos['max_sale'];

    // 現在時間をセット
    $('#TOP_NOWSALE_TITLE').append('<p>' + saleInfos['now_date'] + '</p>');

    // ul li リスト生成
    $('#TOP_NOWSALE_PRICE_WRAPPER').append('<div id=\"TOP_NOWSALE_PLACE\"><ul></ul></div>');

    var i = 0;
    var firstBank = new Array();
    for (var key in saleInfos['bank']) {
        var kyogijoId = 'placeno' + saleInfos['bank'][key]['cd'];
        // 一番最初に選択
        if (i == 0) {
            kyogijoId += '_stay';
            firstBank = saleInfos['bank'][key];
        }
        $('#TOP_NOWSALE_PLACE > ul').append('<li id=\"' + kyogijoId + '\"><a href=\"\" onClick=\"clickChangeKaisai(\'' + kyogijoId + '\'); return false;\">' + saleInfos['bank'][key]['name'] + '</a></li>')
        i++;
    }

    saleInfoCnt++;

    changeBank(firstBank)
}

/*
 * XMLの広告情報を取得します
 */
function getXmlInfo()
{
    var obj = $.ajax({
        url:'/images/bnr/navi/banner.xml',
        type: 'POST',
        dataType: 'xml',
        cache: false,
        async: false,
    }).responseXML;

    if (obj == undefined) {
        return false;
    }

    var res = {};
    var i = 0;
    $(obj).find("data").find("banner").each(function(){
        res[i] = {}
        res[i]['file_name'] = $(this).find("file_name").text();
        res[i]['navi_name'] = $(this).find("navi_name").text();
        res[i]['uri']       = $(this).find("uri").text();
        i++;
    });
    return res
}

/*
 * 開催情報を取得します
 */
function getSaleInfo()
{
    var returnInfo = null;

    if ($("#l_status").val() == 1) {
        baseUrl = loginBaseUrl;
    }
    var param = 'ac=Api_Top_SaleInfo'

    if ($("#t_status").val() == 1){
        param += '&ts=' + $("#t_status").val();
    }

    // Api情報を取得し開催情報を生成します
    var obj = $.ajax({
        url:  baseUrl,
        data: param,
        dataType:'json',
        type: 'POST',
        cache: false,
        async: false,
    }).responseText;

    if (obj == undefined) {
        returnInfo = false;
    } else {
        if (obj.match(/error_status/i)) {
            returnInfo = eval("("+obj+")");
            if (returnInfo['error_status'] != 0 ||
                returnInfo['bank_num'] == 0) {
                returnInfo = false;
            }
        } else {
            return false;
        }
    }
    return returnInfo
}

/*
 * 開催情報切り替え処理
 */
function changeKaisai()
{
    // 現在選択されているIDを取得します
    var stayId = $('#TOP_NOWSALE_PLACE > ul > [id*=_stay]').attr("id");

    var ulNo = $('#TOP_NOWSALE_PLACE > ul > li').index($('#' + stayId)) + 1;
    if ($('#TOP_NOWSALE_PLACE > ul > li').size() <= ulNo || ulNo == -1 || ulNo == undefined) {
        // 一周したらバナーを下にずらす
        _timerClear(kaisaiTimeOutId)
        slideNavi(1)
    }
    clickChangeKaisai($('#TOP_NOWSALE_PLACE > ul > li:eq(' + ulNo + ')').attr('id'), true, saleInfos)
}

/*
 * クリック時、開催情報切り替え処理
 */
function clickChangeKaisai(id, flg)
{
    if (flg == undefined) {
        _timerClear(kaisaiTimeOutId);
    }
    if (id == undefined) {
        _timerClear(kaisaiTimeOutId);
        return false;
    }

    if (id.match(/_stay/i)) {
        return false;
    }
    var no = parseInt( $('#TOP_NOWSALE_PLACE > ul > li').index($('#' + id)) );

    // 選択されていたIDから選択を外す
    var oldId = $('#TOP_NOWSALE_PLACE > ul > [id*=_stay]').attr("id");
    var oldIdArr = oldId.split("_")
    $('#TOP_NOWSALE_PLACE > ul > [id*=_stay]').attr('id', oldIdArr[0])
    $('#TOP_NOWSALE_PLACE > ul > li#'+oldIdArr[0]).html($('#TOP_NOWSALE_PLACE > ul > li#'+oldIdArr[0]).html().replace(oldId, oldIdArr[0]))

    var newId = id + '_stay'
    $('#TOP_NOWSALE_PLACE > ul > li#'+id).attr('id', newId)
    $('#TOP_NOWSALE_PLACE > ul > li#'+newId).html($('#TOP_NOWSALE_PLACE > ul > li#'+newId).html().replace(id, newId))

    changeBank(saleInfos['bank'][no])
}

/*
 * 開催情報切り替え処理
 */
function changeBank(bankInfo)
{
    // 初期値セット
    var tableItem = null;
    var j = 0;

    // 賭け式数セット
    var kakeshikiCnt = bankInfo['kakeshiki'].length - 1;

    // tableタグセット
    tableItem = '<table>'

    for (key in bankInfo['kakeshiki']) {
        // 締切り時間セット
        var closeTime   = bankInfo['kakeshiki'][key]['close'].substr(8,  2) + ":" + bankInfo['kakeshiki'][key]['close'].substr(10, 2);
        // 販売金額（単位 漢字）セット
        var kanjiSales  = changeSales(bankInfo['kakeshiki'][key]['sales']);
        // 払戻し額（単位 漢字）セット
        var kanjiReturn = changeSales(bankInfo['kakeshiki'][key]['return']);

        // キャリーオーバーHTML格納
        var carryHtml   = '';
        // キャリーオーバーグラフ画像格納
        var carryImg    = '';

        // 販売金額グラフ画像格納
        var saleImg = '';

        // 販売金額グラフサイズセット
        var saleScaleSize = getScale(bankInfo['kakeshiki'][key]['sales']);
        if (saleScaleSize > 0) {
            saleImg = '<img src=\"images/common/meter_blue.gif\" alt=\"販売金額\" width=\"' + saleScaleSize + '\" height=\"10\" />'
        }

        var addClass = null;
        if (j == kakeshikiCnt) {
            addClass = 'class=\"top_nowsale_oddsNone\"';
        }

        tableItem += '<tr><th ' + addClass + '><p><img src=\"images/common/icon_' + bankInfo['kakeshiki'][key]['icon_img'] + '.gif\" alt=\"' + bankInfo['kakeshiki'][key]['icon'] + '\" /></p><p><span class=\"txt_size_small\">締切&nbsp;</span><span class=\"txt_clr_white_1\">' + closeTime + '</span></p></th><td ' + addClass + '><dl><dt class=\"nowsale_icon_none\">払戻総額</dt><dd class=\"top_nowsale_oddsPrice\">' + kanjiReturn + '</dd>';

        // キャリーオーバーが存在したら処理
        if (bankInfo['kakeshiki'][key]['carry_flg'] != 0) {
            // キャリーオーバー額セット
            var carryOver = changeSales(bankInfo['kakeshiki'][key]['carry']);
            // キャリーオーバーグラフサイズセット
            var carryScaleSize = getScale(bankInfo['kakeshiki'][key]['carry']);
            // キャリーオーバーHTMLセット
            carryHtml = '<dt class="nowsale_icon"><img src=\"images/common/icon_pinkbox.gif\" alt=\"\" width=\"15\" height=\"10\" />キャリー</dt><dd class=\"txt_clr_white_1\">' + carryOver + '</dd>';
            // キャリーオーバーグラフ画像セット
            if (carryScaleSize > 0) {
                carryImg  = '<img src=\"images/common/meter_pink.gif\" alt=\"キャリー\" width=\"' + carryScaleSize + '\" height=\"10\" />';
            }
        }

        if (carryHtml != '') {
            tableItem += carryHtml;
        }

        tableItem += '<dt class=\"nowsale_icon\"><img src="images/common/icon_bluebox.gif" alt="" width="15" height="10" />販売金額</dt><dd class=\"txt_clr_white_1\">' + kanjiSales + '</dd><p class=\"top_nowsale_oddsMeter\">' + carryImg + saleImg + '</p></td></tr>';

        j++;
    }
    tableItem += '</table>'
    $('#TOP_NOWSALE_ODDS').html(tableItem)

    kaisaiTimeOutId = setTimeout("changeKaisai()", kaisaiCycle)
}

/*
 * Wait処理を行います
 */
function _wait(time) {
    var d1 = new Date().getTime();
    var d2 = new Date().getTime();
    while(d2 < d1 + time) {
        d2 = new Date().getTime();
    }
    return
}

/*
 * ソートを行います
 */
function _arsort(info, maxNum)
{
    sort = {};
    for (var key in info) {
        sort[maxNum] = info[maxNum];
        maxNum--;
    }
    return sort;
}

/*
 * setTimeoutで得たIDを基にタイマーをクリアします
 */
function _timerClear(timerId)
{
    if (isNaN(timerId) == false) {
        clearTimeout(timerId);
    }
}

/*
 * グラフのサイズを生成し返却します
 */
defaultScaleSize = 490;
function getScale(num)
{
    var resScale = 0;

    // 引数が「0」なら「0」を返却
    if (num == 0) return resScale;

    // 縮小率取得
    var rate = defaultScaleSize / maxScale;

    // サイズ計算
    var resScale = Math.floor(rate * num);

    // サイズが10pxに満たない場合は「10」返却
    if (resScale <= 10) {
        resScale = 10;
    }
    return resScale;
}

/*
 * 数字に単位をつけて返却します
 */
function changeSales(sales)
{
    var n     = '';
    var count = 0;
    var ptr   = 0;
    var kanjiUnitList = ["万","億","兆","京"];
    var yen   = '円'
    str = String(sales);
    if (str.length <= 4) {
        return str + yen;
    }

    for (var i=str.length - 1; i>=0; i--){
        n = str.charAt(i) + n;
        count++;
        if (((count % 4) == 0) && (i != 0)) {
            var notZeroStr = n.search('[1-9]')
            if (notZeroStr == -1) {
                n = kanjiUnitList[ptr++]
            } else {
                n = n.substr(notZeroStr, n.length)
                n = kanjiUnitList[ptr++] + String(n);
            }
        }
    }
    return n + yen;
}
