// STOCK CAFE Labs Gadgets "RANK" with YUI Library [20080115]

//
// WeeklyRanking class
//
YAHOO.SCL.WeeklyRanking = function(id, args) {
    YAHOO.SCL.WeeklyRanking.superclass.constructor.call(this, id, args);
};
YAHOO.lang.extend(YAHOO.SCL.WeeklyRanking, YAHOO.SCL.Window);

// static values
YAHOO.SCL.WeeklyRanking.prototype.CLASSNAME = 'SCL_WeeklyRanking';
YAHOO.SCL.WeeklyRanking.prototype.ADVIEW_URL = 'http://www.stockcafe.jp/ad/adview.php?what=zone:175&amp;n=a074f646';
YAHOO.SCL.WeeklyRanking.prototype.ADCLICK_URL = 'http://www.stockcafe.jp/ad/adclick.php?n=a074f646';
YAHOO.SCL.WeeklyRanking.prototype.ALL_TYPES 
    = [ 'bestRate', 'worstRate', 'turnover', 
        'bestWorst', 'worstBest', 'brandAccess', 
        'bestSector', 'worstSector', 'themeRate', 
        'themeAccess', 'memberAccess', 'folderRate' ];
YAHOO.SCL.WeeklyRanking.prototype.TITLES = {
    bestRate:    '値上率ランキング',
    worstRate:   '値下率ランキング',
    turnover:    '出来高ランキング',
    bestWorst:   '出遅れ銘柄ランキング',
    worstBest:   'しっかり銘柄ランキング',
    brandAccess: '注目銘柄ランキング',
    bestSector:  '上昇業種ランキング',
    worstSector: '下落業種ランキング',
    themeRate:   'テーマ騰落率ランキング',
    themeAccess: '注目テーマランキング',
    memberAccess:'人気メンバーランキング',
    folderRate:  'フォルダ騰落率ランキング'
};
YAHOO.SCL.WeeklyRanking.prototype.DEFAULTS = {
    x:                   null,
    y:                   null,
    width:               '170px',
    height:              null,
    zIndex:              null,
    constraintoviewport: false,
    underlay:            'none',
    close:               false,
    draggable:           false,
    effect:              null
};

// init method
YAHOO.SCL.WeeklyRanking.prototype.init = function(args) {
    YAHOO.SCL.WeeklyRanking.superclass.init.call(this, args);

    var time = new Date().getTime();

    this.data = StockCafeJSON_Ranking2Data;

    if (args['type'] && args['type'] instanceof Array) {
        this.type = args['type'][time % args['type'].length];
    }
    else if (args['type'] && typeof (args['type'].valueOf()) == 'string') {
        this.type = args['type'];
    }
    else {
        this.type = this.ALL_TYPES[time % this.ALL_TYPES.length];
    }

    var width = parseInt(this.attrs['width']);
    var normalLen = Math.floor(width-1-5-17-45-5-1) / 12;
    var shortLen  = Math.floor(width-1-5-25-45-5-1) / 12;
    this.largeSectorNameLen = shortLen;
    this.mediumSectorNameLen = normalLen;
    this.brandNameLen = normalLen;
    this.themeNameLen = normalLen;
    this.nicknameLen = normalLen;
    this.folderNameLen = normalLen;

    //    this.title = '週間株式ランキング';
    this.title = this.TITLES[this.type];
    this.credit = '週間株式ランキング by <a href="' + YAHOO.SCL.SCAFE_URL + '" target="_blank" title="株式投資するなら！株式投資コミュニティ - ストックカフェ">ストックカフェ<a/>';
};

// makeDOM method
YAHOO.SCL.WeeklyRanking.prototype.makeDOM = function() {
    YAHOO.SCL.WeeklyRanking.superclass.makeDOM.call(this);

    YAHOO.util.Dom.addClass(this.id, YAHOO.SCL.WeeklyRanking.prototype.CLASSNAME);
    var body = document.getElementById(this.id + '_body');

    var box = document.createElement('div');
    YAHOO.util.Dom.addClass(box, 'rankingBox2');
    body.appendChild(box);

    if (this.type == 'bestRate') {                  // 値上率
//         this.makeBestRateRanking(box, this.data['bestRate']);
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'worstRate') {            // 値下率
//         this.makeWorstRateRanking(box, this.data['worstRate']);
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'turnover') {             // 出来高
//         this.makeTurnoverRanking(box, this.data['turnover']);
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'bestSector') {           // 上昇業種
//         this.makeBestSectorRanking(box, this.data['bestSector']);
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'worstSector') {          // 下落業種
//         this.makeWorstSectorRanking(box, this.data['worstSector']);
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'bestWorst') {            // 出遅れ銘柄
//         this.makeBestWorstRanking(box, this.data['bestWorst']);
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'worstBest') {            // しっかり銘柄
//         this.makeWorstBestRanking(box, this.data['worstBest']);
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'brandAccess') {          // 注目銘柄
        this.makeBrandAccessRanking(box, this.data['brandAccess']);
    }
    else if (this.type == 'themeAccess') {          // 注目テーマ
        this.makeThemeAccessRanking(box, this.data['themeAccess']);
    }
    else if (this.type == 'themeRate') {            // テーマ騰落率
//         this.makeThemeRateRanking(box, this.data['themeRate']);
        this.makeThemeAccessRanking(box, this.data['themeAccess']);
    }
    else if (this.type == 'memberAccess') {         // 人気メンバー
        this.makeMemberAccessRanking(box, this.data['memberAccess']);
    }
    else if (this.type == 'folderRate') {           // フォルダ騰落率
//         this.makeFolderRateRanking(box, this.data['folderRate']);
        this.makeMemberAccessRanking(box, this.data['memberAccess']);
    }
};

// makeBestRateRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeBestRateRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'bestRateBanner');
    box.appendChild(bannerDiv);

    this.makeRateRanking(box, data);

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_best_rate");
    moreA.setAttribute('title', '値上率ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeWorstRateRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeWorstRateRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'worstRateBanner');
    box.appendChild(bannerDiv);

    this.makeRateRanking(box, data);

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_worst_rate");
    moreA.setAttribute('title', '値下率ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeRateRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeRateRanking = function(box, data) {
    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：%';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.brandList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var nameTd = document.createElement('td');
        YAHOO.util.Dom.addClass(nameTd, 'rank' + data.brandList[i].rank);
        tr.appendChild(nameTd);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.brandList[i].url);
        a.setAttribute('title', data.brandList[i].name + 'の株価・企業情報');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatBrandName(data.brandList[i].name);
        nameTd.appendChild(a);

        var rateTd = document.createElement('td');
        YAHOO.util.Dom.addClass(rateTd, 'rate');
        rateTd.innerHTML = this.formatRate(data.brandList[i].rate);
        tr.appendChild(rateTd);
    }
};

// makeTurnoverRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeTurnoverRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'turnoverBanner');
    box.appendChild(bannerDiv);

    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：千株';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.brandList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var nameTd = document.createElement('td');
        YAHOO.util.Dom.addClass(nameTd, 'rank' + data.brandList[i].rank);
        tr.appendChild(nameTd);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.brandList[i].url);
        a.setAttribute('title', data.brandList[i].name + 'の株価・企業情報');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatBrandName(data.brandList[i].name);
        nameTd.appendChild(a);

        var turnoverTd = document.createElement('td');
        YAHOO.util.Dom.addClass(turnoverTd, 'number');
        turnoverTd.innerHTML = this.formatTurnover(data.brandList[i].turnover);
        tr.appendChild(turnoverTd);
    }

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_turnover");
    moreA.setAttribute('title', '出来高ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeBestSectorRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeBestSectorRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'bestSectorBanner');
    box.appendChild(bannerDiv);

    this.makeSectorRanking(box, data);

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_best_sector");
    moreA.setAttribute('title', '上昇業種ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeWorstSectorRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeWorstSectorRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'worstSectorBanner');
    box.appendChild(bannerDiv);

    this.makeSectorRanking(box, data);

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_worst_sector");
    moreA.setAttribute('title', '下落業種ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeSectorRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeSectorRanking = function(box, data) {
    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：%';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.sectorList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var nameTd = document.createElement('td');
        YAHOO.util.Dom.addClass(nameTd, 'rank' + data.sectorList[i].rank);
        tr.appendChild(nameTd);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.sectorList[i].url);
        a.setAttribute('title', '業種「' + data.sectorList[i].name + '」の銘柄一覧');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatMediumSectorName(data.sectorList[i].name);
        nameTd.appendChild(a);

        var rateTd = document.createElement('td');
        YAHOO.util.Dom.addClass(rateTd, 'rate');
        rateTd.innerHTML = this.formatRate(data.sectorList[i].rate);
        tr.appendChild(rateTd);
    }
};

// makeBestWorstRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeBestWorstRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'bestWorstBanner');
    box.appendChild(bannerDiv);

    this.makeSectorRateRanking(box, data);

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_best_worst");
    moreA.setAttribute('title', '出遅れ銘柄ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeWorstBestRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeWorstBestRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'worstBestBanner');
    box.appendChild(bannerDiv);

    this.makeSectorRateRanking(box, data);

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_worst_best");
    moreA.setAttribute('title', 'しっかり銘柄ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeSectorRateRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeSectorRateRanking = function(box, data) {
    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：%';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.sectorList.length; i++) {
        var sectorTr = document.createElement('tr');
        tbody.appendChild(sectorTr);
        
        var nameTh = document.createElement('th');
        YAHOO.util.Dom.addClass(nameTh, 'rank' + data.sectorList[i].rank);
        nameTh.innerHTML = data.sectorList[i].rank + '位&nbsp;' + this.formatLargeSectorName(data.sectorList[i].name);
        sectorTr.appendChild(nameTh);

        var rateTh = document.createElement('th');
        rateTh.innerHTML = this.formatRate(data.sectorList[i].rate);
        YAHOO.util.Dom.addClass(rateTh, 'rate');
        sectorTr.appendChild(rateTh);

        for (var j = 0; j < data.sectorList[i].brandList.length; j++) {
            var brandTr = document.createElement('tr');
            tbody.appendChild(brandTr);

            var nameTd = document.createElement('td');
            YAHOO.util.Dom.addClass(nameTd, 'rank' + data.sectorList[i].brandList[j].rank);
            brandTr.appendChild(nameTd);

            var a = document.createElement('a');
            a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.sectorList[i].brandList[j].url);
            a.setAttribute('title', data.sectorList[i].brandList[j].name + 'の株価・企業情報');
            a.setAttribute('target', '_blank');
            a.innerHTML = this.formatBrandName(data.sectorList[i].brandList[j].name);
            nameTd.appendChild(a);

            var rateTd = document.createElement('td');
            YAHOO.util.Dom.addClass(rateTd, 'rate');
            rateTd.innerHTML = this.formatRate(data.sectorList[i].brandList[j].rate);
            brandTr.appendChild(rateTd);
        }
    }
};

// makeBrandAccessRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeBrandAccessRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'brandAccessBanner');
    box.appendChild(bannerDiv);

    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：ページビュー';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.brandList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var nameTd = document.createElement('td');
        YAHOO.util.Dom.addClass(nameTd, 'rank' + data.brandList[i].rank);
        tr.appendChild(nameTd);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.brandList[i].url);
        a.setAttribute('title', data.brandList[i].name + 'の株価・企業情報');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatBrandName(data.brandList[i].name);
        nameTd.appendChild(a);

        var countTd = document.createElement('td');
        YAHOO.util.Dom.addClass(countTd, 'number');
        countTd.innerHTML = this.formatNumber(data.brandList[i].count);
        tr.appendChild(countTd);
    }

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_brand_access");
    moreA.setAttribute('title', '注目銘柄ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeThemeAccessRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeThemeAccessRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'themeAccessBanner');
    box.appendChild(bannerDiv);

    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：ページビュー';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.themeList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var nameTd = document.createElement('td');
        YAHOO.util.Dom.addClass(nameTd, 'rank' + data.themeList[i].rank);
        tr.appendChild(nameTd);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.themeList[i].url);
        a.setAttribute('title', '注目テーマ「' + data.themeList[i].name + '」');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatThemeName(data.themeList[i].name);
        nameTd.appendChild(a);

        var countTd = document.createElement('td');
        YAHOO.util.Dom.addClass(countTd, 'number');
        countTd.innerHTML = this.formatNumber(data.themeList[i].count);
        tr.appendChild(countTd);
    }

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_theme_access");
    moreA.setAttribute('title', '注目テーマランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeThemeRateRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeThemeRateRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'themeRateBanner');
    box.appendChild(bannerDiv);

    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：%';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.themeList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var nameTd = document.createElement('td');
        YAHOO.util.Dom.addClass(nameTd, 'rank' + data.themeList[i].rank);
        tr.appendChild(nameTd);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.themeList[i].url);
        a.setAttribute('title', '注目テーマ「' + data.themeList[i].name + '」');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatThemeName(data.themeList[i].name);
        nameTd.appendChild(a);

        var rateTd = document.createElement('td');
        YAHOO.util.Dom.addClass(rateTd, 'rate');
        rateTd.innerHTML = this.formatRate(data.themeList[i].rate);
        tr.appendChild(rateTd);
    }

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_theme_rate");
    moreA.setAttribute('title', 'テーマ騰落率ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeMemberAccessRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeMemberAccessRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'memberAccessBanner');
    box.appendChild(bannerDiv);

    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：あしあと';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.memberList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var td = document.createElement('td');
        YAHOO.util.Dom.addClass(td, 'rank' + data.memberList[i].rank);
        tr.appendChild(td);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.memberList[i].url);
        a.setAttribute('title', data.memberList[i].nickname + 'さんのマイページ');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatNickname(data.memberList[i].nickname) + 'さん';
        td.appendChild(a);

        var countTd = document.createElement('td');
        YAHOO.util.Dom.addClass(countTd, 'number');
        countTd.innerHTML = this.formatNumber(data.memberList[i].count);
        tr.appendChild(countTd);
    }

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_member_access");
    moreA.setAttribute('title', '人気メンバーランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeFolderRateRanking method
YAHOO.SCL.WeeklyRanking.prototype.makeFolderRateRanking = function(box, data) {
    this.makeRankingTerm(box, data);

    var bannerDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(bannerDiv, 'folderRateBanner');
    box.appendChild(bannerDiv);

    var unitDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(unitDiv, 'numberUnit');
    unitDiv.innerHTML = '単位：%';
    box.appendChild(unitDiv);

    var table = document.createElement('table');
    table.setAttribute('width', '100%');
    box.appendChild(table);

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);

    for (var i = 0; i < data.folderList.length; i++) {
        var tr = document.createElement('tr');
        tbody.appendChild(tr);

        var td = document.createElement('td');
        YAHOO.util.Dom.addClass(td, 'rank' + data.folderList[i].rank);
        tr.appendChild(td);

        var a = document.createElement('a');
        a.setAttribute('href', YAHOO.SCL.SCAFE_URL + data.folderList[i].url);
        a.setAttribute('title', data.folderList[i].nickname + 'さんの「' + data.folderList[i].name + '」フォルダ');
        a.setAttribute('target', '_blank');
        a.innerHTML = this.formatFolderName(data.folderList[i].nickname + 'さんの' + data.folderList[i].name);
        td.appendChild(a);

        var countTd = document.createElement('td');
        YAHOO.util.Dom.addClass(countTd, 'number');
        countTd.innerHTML = this.formatNumber(data.folderList[i].rate);
        tr.appendChild(countTd);
    }

    var moreDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(moreDiv, 'more');
    box.appendChild(moreDiv);

    var moreA = document.createElement('a');
    moreA.setAttribute('href', YAHOO.SCL.SCAFE_URL + "?m=stock&a=page_ranking2_folder_rate");
    moreA.setAttribute('title', 'フォルダ騰落率ランキングをもっと見る');
    moreA.setAttribute('target', '_blank');
    moreA.innerHTML = "もっと見る ≫";
    moreDiv.appendChild(moreA);
};

// makeRankingTerm method
YAHOO.SCL.WeeklyRanking.prototype.makeRankingTerm = function(box, data) {
    var termFrom = new Date(data['termFrom']);
    var termTo   = new Date(data['termTo']);

    var term = (termFrom.getMonth() + 1 ) + '/' + termFrom.getDate()
    + '〜' + (termTo.getMonth() + 1) + '/' + termTo.getDate();

    var termDiv = document.createElement('div');
    YAHOO.util.Dom.addClass(termDiv, 'rankingTerm');
    termDiv.innerHTML = "集計期間：" + term;
    box.appendChild(termDiv);
};

// formatLargeSectorName method
YAHOO.SCL.WeeklyRanking.prototype.formatLargeSectorName = function(name) {
    if (name.length > this.largeSectorNameLen) {
        name = name.substring(0, this.largeSectorNameLen) + '…';
    }
    else {
        name = name.substring(0, this.largeSectorNameLen);
    }
    return name;
};
// formatMediumSectorName method
YAHOO.SCL.WeeklyRanking.prototype.formatMediumSectorName = function(name) {
    if (name.length > this.mediumSectorNameLen) {
        name = name.substring(0, this.mediumSectorNameLen) + '…';
    }
    else {
        name = name.substring(0, this.mediumSectorNameLen);
    }
    return name;
};
// formatBrandName method
YAHOO.SCL.WeeklyRanking.prototype.formatBrandName = function(name) {
    if (name.length > this.brandNameLen) {
        name = name.substring(0, this.brandNameLen) + '…';
    }
    else {
        name = name.substring(0, this.brandNameLen);
    }
    return name;
};
// formatThemeName method
YAHOO.SCL.WeeklyRanking.prototype.formatThemeName = function(name) {
    if (name.length > this.themeNameLen) {
        name = name.substring(0, this.themeNameLen) + '…';
    }
    else {
        name = name.substring(0, this.themeNameLen);
    }
    return name;
};
// formatNickname method
YAHOO.SCL.WeeklyRanking.prototype.formatNickname = function(name) {
    if (name.length > this.nicknameLen) {
        name = name.substring(0, this.nicknameLen) + '…';
    }
    else {
        name = name.substring(0, this.nicknameLen);
    }
    return name;
};
// formatFolderName method
YAHOO.SCL.WeeklyRanking.prototype.formatFolderName = function(name) {
    if (name.length > this.folderNameLen) {
        name = name.substring(0, this.folderNameLen) + '…';
    }
    else {
        name = name.substring(0, this.folderNameLen);
    }
    return name;
};
// formatRate method
// see: http://www.openspc2.org/reibun/javascript/business/011/index.html
YAHOO.SCL.WeeklyRanking.prototype.formatRate = function(rate) {
    if (rate > 0) {
        rate = '' + rate + '.';
        rate = rate.split(".")[0]+"."+(rate.split(".")[1]+"00").substring(0,2);
//        rate = '+' + rate + '%';
        rate = '+' + rate;
    }
    else {
        rate = '' + rate + '.';
        rate = rate.split(".")[0]+"."+(rate.split(".")[1]+"00").substring(0,2);
//        rate = rate + '%';
        rate = rate;
    }
    return rate;
};
// formatTurnover method
YAHOO.SCL.WeeklyRanking.prototype.formatTurnover = function(turnover) {
    return this.formatNumber(Math.round(turnover / 1000.0));
};
// formatNumber method
// see: http://iandeth.dyndns.org/mt/ian/archives/000661.html
YAHOO.SCL.WeeklyRanking.prototype.formatNumber = function(num) {
    var num = String( num );
    var tmp = "";
    while (num != (tmp = num.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))){
        num = tmp;
    }
    return num;
};

