/**
 * @fileOverview Ajaxを用いて種々のデータを取得するクラス群
 *
 * @author Nippon RAD Inc.
 * @version 1.0
 */

/**
 * ライブ(番組)、アーカイブ取得用クラス
 *
 * @class 番組情報、アーカイブ情報を取得するために使用するクラス
 */
var IMJLiveInfo = function() {
    this.initialize();
};
IMJLiveInfo.prototype = {
    /**
     * コンストラクタ(初期化処理)
     */
    initialize: function() {
    },
    /**
     * 番組情報取得の際の初期化処理
     *
     * Getリクエストのパラメータ値から、事業者識別子と番組識別子をグローバル設定変数にセットする。
     * Getリクエストパラメータがなければ、グローバル設定の変数をそのまま用いる。
     *
     * @return {void}
     */
    initLiveInfo: function() {

        var get = this.getRequest();
        if (get) {
            _g_program_id = get['program_identifier'];
            _g_asp_id     = get['asp_identifier'];
        }
    },
    /**
     * 番組に該当するまたはアーカイブ動画に該当するアーカイブ動画取得時の初期化処理
     *
     * 番組に該当するまたはアーカイブ動画に該当するアーカイブ動画を取得する際に使用するグローバル変数の初期化
     *
     * @return {void}
     */
    initLiveArchive: function() {

        _g_scroll_pagenum = 0;
        _g_scroll_flag = 1;

    },
    /**
     * アーカイブ情報取得の際の初期化処理
     *
     * Getリクエストのパラメータ値から、事業者識別子と番組識別子をグローバル設定変数に、アーカイブ識別子をグローバル変数にセットする。
     * Getリクエストパラメータがなければ、事業者識別子と番組識別子はグローバル設定の変数をそのまま用いる。
     *
     * @return {void}
     */
    initArchInfo: function() {
    
        var get = this.getRequest();
    
        if (get) {
           _g_program_id = get['program_identifier'];
           _g_asp_id     = get['asp_identifier'];
           _g_archive_id = get['archive_identifier'];
        }

    },
    /**
     * アーカイブ情報一覧取得処理
     *
     * クッキー情報の初期化を行い、アーカイブ情報を取得する。
     * 実際の一覧取得はIMJPaginateクラスで行う。
     *
     * @return {void}
     * @see IMJPaginate
     */
    getArchList: function() {

        _g_list_selectedpage = 0;
        _g_list_pageTotal    = 0;   
 
        var get = this.getRequest();

        if (get) {
            _g_program_id = get['program_identifier'];
            _g_asp_id     = get['asp_identifier'];
            _g_paginate_search_keyword = get['keywords'];

            getTotal();
        }

    },
    /**
     * 番組情報の取得
     * 
     * グローバル変数で指定した番組識別子、事業者識別子をもとに番組詳細情報を取得する。
     * FlashVarに引数として与えるために、同期処理としている
     *
     * @return {void}
     * @see displayProgramInfo 取得成功時呼出関数
     * @see displayProgramInfoErr 取得失敗時呼出関数
     */
    getProgramInfo: function() {
    
        var program_identifier = _g_program_id;
        var asp_identifier = _g_asp_id;

        var date = new Date();
        var timestamp = date.getTime();
        var url = _g_php_jp_url + "/getProgramDetail.php?call_back=displayProgramInfo&program_identifier=" + program_identifier + "&asp_identifier=" + asp_identifier + "&time=" + timestamp;

        var sc = document.createElement("script");
        sc.type    = 'text/javascript';
        sc.charset = 'UTF-8';
        sc.src     = url;
        document.body.appendChild(sc);

    },
    /**
     * getProgramInfo()のリクエストが成功した際に、呼び出される関数
     * 
     * グローバル変数_g_live_url, _g_live_alt_url, _g_live_onairをセットし、
     * 番組情報出力関数dispalyProgramInfo()を呼び出す。
     * @param {Request} r Getリクエスト
     * @return {void}
     * @see displayProgramInfo 呼出関数
     */
    displayProgramInfoWrapper: function(r) {
        var data= eval('(' + r.responseText + ')');
        if (data != null) {
            if (data.alt_info != null) {
                _g_live_alt_url = data.alt_info.flv_file_location;
            }
            if (data.program_info != null) {   
                _g_live_url = data.program_info.stream_cdn_path;
                if (data.program_info.on_air_flg == 1) {
                    _g_live_onair = "onair";
                } else {
                    _g_live_onair = "offair";
                }
            }
        }
        displayProgramInfo(r);
    },
    /**
     * 番組に該当するアーカイブ動画一覧の取得
     *
     * グローバル変数で指定した番組識別子、事業者識別子をもとにアーカイブ動画一覧を取得する。
     * スクロール表示する際には、表示用関数で、_g_scroll_pagenumの値をセットする必要がある。
     *
     * @return {void}
     * @see displayLiveArchive 取得成功時呼出関数
     * @see displayError       取得失敗時呼出関数
     */
    getLiveArchive: function() {
        var program_identifier = _g_program_id;
        var asp_identifier = _g_asp_id;

        var page_num = _g_scroll_pagenum;   

        var date = new Date();
        var timestamp = date.getTime();

        var url = _g_php_jp_url + "/getLiveArchives.php?call_back=displayLiveArchive&program_identifier=" + program_identifier + "&asp_identifier=" + asp_identifier + "&page_num=" + page_num + "&t_num=" + 100 + "&time=" + timestamp;
        var sc = document.createElement("script");
        sc.type    = 'text/javascript';
        sc.charset = 'UTF-8';
        sc.src     = url;
        document.body.appendChild(sc);

    },
    /**
     * アーカイブ情報の取得
     * 
     * グローバル設定で指定した番組識別子、事業者識別子、グローバル変数で指定したアーカイブ識別子をもとにアーカイブ動画情報を取得する。
     * なお、アーカイブ動画の関連アーカイブ動画一覧を取得するために、この処理は同期処理でアーカイブ動画情報を取得した際に、
     * アーカイブ動画に該当する検索キーワードをdisplayArchiveInfoWrapperを呼出してグローバル変数にセットする。
     *
     * @return {void}
     * @see IMJLiveInfo#displayArchiveInfoWrapper 取得成功時呼出関数
     * @see displayArchiveInfoErr     取得失敗時呼出関数
     */
    getArchInfo: function() {
        var program_identifier = _g_program_id;
        var asp_identifier     = _g_asp_id;
        var archive_identifier = _g_archive_id;
    
        var date = new Date();
        var timestamp = date.getTime();
        var url = _g_php_jp_url + "/getArchiveInfo.php?call_back=displayArchiveInfo&program_identifier=" + program_identifier + "&asp_identifier=" + asp_identifier + "&archive_identifier=" + archive_identifier + "&time=" + timestamp;

        var sc = document.createElement("script");
        sc.type    = 'text/javascript';
        sc.charset = 'UTF-8';
        sc.src     = url;
        document.body.appendChild(sc);
        
    },
    /**
     * ライブ画面のアーカイブ動画の情報「取得」
     *
     * @see displayLiveArchive 取得成功時呼出関数
     * @see displayError       取得失敗時呼出関数
     * @return {void}
     */
    getArchives: function() {

        var program_identifier = _g_program_id;
        var asp_identifier     = _g_asp_id;
        var keyword            = _g_search_keyword;
    
        var date = new Date();
        var timestamp = date.getTime();
    
        var page_num = _g_scroll_pagenum;   
 
        var url = _g_php_url + '/searchArchives1_3.php?program_identifier=' + program_identifier + '&asp_identifier=' + asp_identifier 
                + '&keywords=' + keyword + '&page_num=' + 0 + '&t_num=' + 10 +'&time=' + timestamp;
        var ops = {
            method : 'get',
            onSuccess : displayLiveArchive,
            onFailure : displayLiveArchiveErr
        };
        new Ajax.Request(url, ops);
    },
    /**
     * getArchInfo()のリクエストが成功した際に、呼び出される関数
     * 
     * グローバル変数_g_search_keywordに検索キーワードをセットし、
     * アーカイブ動画情報出力関数dispalyArchiveInfo()を呼び出す。
     * @param {Request} r Getリクエスト
     * @return {void}
     * @see displayArchiveInfo 呼出関数
     */
    displayArchiveInfoWrapper: function(r) {

        var data= eval('(' + r.responseText + ')');
        _g_search_keyword  = encodeURI(data.keyword);
    
        displayArchiveInfo(r);
    },
    /**
     * Getメソッドパラメータ取得
     *
     * @return {array} 各パラメータ名とパラメータ値を保持する連想配列を返す。パラメータがなければfalseを返す。
     */
    getRequest: function() {
		 /*
		 var get = new Object();
		 //get['program_identifier'] = "4ac5dcbe-8274-4a85-bf5a-33da3d0eab4f";
       get['program_identifier'] = "4ad68489-ecc4-449e-811c-3c6b3d0eab4f";
		 //get['program_identifier'] = "o";
		 //get['asp_identifier'] = "asp-4aa8c316dc00e";
		 get['asp_identifier'] = "asp-4ad56e099d3b9";
		 get['keywords'] = "";
		 //get['archive_identifier'] = "1254561953353";
       get['archive_identifier'] = "1255573493270";
		 return get;
		 */
		 // ↑20091021 truelyre：テスト用
        if(location.search.length > 1) {
            var get = new Object();
            var ret = location.search.substr(1).split("&");
            for (var i=0; i < ret.length; i++) {
                var r = ret[i].split("="); 
                get[r[0]] = r[1];
            }
            return get;
        } else {
            return false;
        }
    }

};

/**
 * 一覧表示の際に用いるページネーション用クラス
 * 
 * @class 検索結果を一覧表示する際にページネーション付きで表示するクラス
 *
 * @param {String} program_identifier 番組識別子
 * @param {String} asp_identifier     事業者識別子
 * @param {String} keywords           検索キーワード
 */
var IMJPaginate = function(program_identifier, asp_identifier, keywords) {
    this.initialize(program_identifier, asp_identifier, keywords);
};
IMJPaginate.prototype = {

    /**
     * コンストラクタ(初期化処理)
     *
     * @param {String} program_identifier 番組識別子
     * @param {String} asp_identifier     事業者識別子
     * @param {String} keywords           検索キーワード
     */
    initialize: function(program_identifier, asp_identifier) {
        this.loadstatustext        = _g_paginate_loadstatustext;
        this.ajaxbustcache         = _g_paginate_ajaxbustcache;
        this.paginatepersist       = _g_paginate_paginatepersist;
        this.pagerange             = _g_paginate_pagerange;
        this.ellipse               = _g_paginate_ellipse;
        this.program_identifier    = program_identifier;
        this.asp_identifier        = asp_identifier;
    },
    /**
     * 検索総数のセット
     *
     * getTotal関数のRequestの返り値から検索総数をグローバル変数に保存する
     * @param {Request} requet Getリクエスト
     */
    setPageTotal: function(request) {
        var data = eval('(' + request.responseText + ')');
        var count = data['count'];
        var vn = _g_paginate_number;
        //_g_page_total = Math.floor(count / vn) + 1;
        _g_page_total = Math.ceil(count / vn);
        // ↑20091021 truelyre：総ページ数取得方法変更
        _g_list_pageTotal = this.pageTotal;

		  _g_list_countTotal = count;
		  //↑20091021 truelyre：件数表示の為、総件数を保持する変数追加
    },
    /**
     * 検索総数の取得
     *
     * Ajaxリクエスト(同期処理)を用いて検索総数を取得する.
     * 処理が完了したらsetPageTotal()関数を呼び出すことで検索総数を取得し、
     * createBook()関数を呼び出すことで一覧を表示する
     * @see setPageTotal
     */
    getTotal: function() {
        var date      = new Date();
        var timestamp = date.getTime();
        var keywords  = _g_paginate_search_keyword;
        var url = '/getTotalSearchArchives.php?program_identifier=' 
            + this.program_identifier + '&asp_identifier=' + this.asp_identifier + '&keywords=' + keywords + '&time=' + timestamp;

        var ajax = new Ajax.Request(url, {method: 'get', onComplete: this.setPageTotal, asynchronous: false});
        this.createBook(["paginate-top", "paginate-bottom"]);
    },
    /**
     * Ajaxリクエストを用いて検索情報一覧を取得する
     *
     * 情報の取得に成功したらshowSearchResult()を、情報の取得に失敗したらshowSearchResultErr()を呼び出す
     * @see showSearchResult 
     * @see showSearchResultErr
     * @param {int} page_num 表示するページ番号
     */
    connect: function(page_num){
        var date      = new Date();
        var timestamp = date.getTime();
        var keywords  = _g_paginate_search_keyword;
        var url = _g_php_jp_url + '/searchArchives1_3.php?call_back=showSearchResult&program_identifier=' 
            + this.program_identifier + '&asp_identifier=' + this.asp_identifier + '&keywords=' + keywords + '&page_num=' 
            + page_num + '&t_num=' + _g_paginate_number + '&time=' + timestamp;

        var sc = document.createElement("script");
        sc.type    = 'text/javascript';
        sc.charset = 'UTF-8';
        sc.src     = url;
        document.body.appendChild(sc);
        
    },
    /**
     * 最初に表示するページ番号を取得する
     *
     * @return {int} クッキー情報に選択ページが登録されていたら、その選択ページを返す
     */
    getInitialPage: function(){
        var persistedpage = _g_list_selectedpage;
        var selectedpage  = (this.paginatepersist && _g_list_selectedpage) ? parseInt(_g_list_selectedpage) : 0;
        return (selectedpage > _g_list_pageTotal - 1) ? 0 : selectedpage; //check that selectedpage is not out of range
    },
    /**
     * ページネーション表示
     *
     * buildpagenation(),selectedpage()を呼出し、実際の一覧表示を生成する
     * @see IMJPaginate#buildpagination
     * @see IMJPaginate#selectpage
     * @param {array} paginateIds ページネーションを表示するdiv要素名
     */
    createBook: function(paginateIds) {

        //array of ids corresponding to the pagination DIVs defined for this pageinstance
        this.paginateIds = paginateIds;
        //NOTE: this.paginateInfo stores references to various components of each pagination DIV defined for this pageinstance
        //NOTE: Eg: divs[0] = 1st paginate div, pagelinks[0][0] = 1st page link within 1st paginate DIV, 
        //      prevlink[0] = previous link within paginate DIV etc
        this.paginateInfo = {divs:[], pagelinks:[[]], prevlink:[], nextlink:[], 
                       previouspage:null, previousrange:[null,null], leftellipse:[], rightellipse:[]};
        this.dopagerange = false;
        this.pagerangestyle = '';
        this.ellipse = '<span style="display:none">'+this.ellipse+'</span>'; //construct HTML for ellipse
        
        var initialpage = this.getInitialPage();
        this.buildpagination(initialpage);
        this.selectpage(initialpage);
    },
    /**
     * ページネーションの遷移情報を作成
     *
     * 検索ページトータル分作成する。
     * 検索ページトータルが1ページの場合は、その旨のコメントを出力する
     * @param {int} selectedpage 表示するページ番号
     */
    buildpagination: function(selectedpage){
    
        var pageTotal = _g_list_pageTotal; 
        //Bool: enable limitpagerange if pagerange value is less than total pages available
        this.dopagerange = (pageTotal > this.pagerange);
        //if limitpagerange enabled, hide pagination links when building them
        this.pagerangestyle = this.dopagerange? 'style="display:none"' : '';
        this.paginateInfo.previousrange = null; //Set previousrange[start, finish] to null to start

        if (pageTotal <= 1) { //no 0 or just 1 page
            document.getElementById(this.paginateIds[0]).innerHTML = (pageTotal==1) ? "Page&nbsp;1&nbsp;of&nbsp;1" : "";
            return;
        } else { //construct paginate interface
            var paginateHTML = '<div class="pagination"><ul>\n';
            paginateHTML += "<li><a href=\"#previous\" rel=\"'+(selectedpage-1)+'\"><<前へ</a></li>\n"; //previous link HTML

            for (var i=0; i < pageTotal; i++) {
                //if this is 1st or last page link, add ellipse next to them, hidden by default
                var ellipses={left: (i==0? this.ellipse : ''), right: (i==pageTotal-1? this.ellipse : '')};
                paginateHTML+='<li>'+ellipses.right+'<a href="#page'+(i+1)+'" rel="'+i+'" '+this.pagerangestyle+'>'+(i+1)+'</a>'+ellipses.left+'</li>\n';
            }

            paginateHTML += "<li><a href=\"#next\" rel=\"'+(selectedpage+1)+'\">次へ>></a></li>\n"; //next link HTML
            paginateHTML += '</ul></div>';
        }// end construction

        //remember last viewed page
        this.paginateInfo.previouspage = selectedpage;

        //loop through # of pagination DIVs specified
        for (var i=0; i<this.paginateIds.length; i++) { 
            //reference pagination DIV
            var paginatediv = document.getElementById(this.paginateIds[i]);
            //store ref to this paginate DIV
            this.paginateInfo.divs[i] = paginatediv;
            paginatediv.innerHTML = paginateHTML;

            //set page navigation
            var paginatelinks = paginatediv.getElementsByTagName("a");
            this.paginateInfo.prevlink[i] = paginatelinks[0];
            if (paginatelinks.length>0) {
                this.paginateInfo.nextlink[i]=paginatelinks[paginatelinks.length-1];
            }
            //set ellipse
            var ellipsespans = paginatediv.getElementsByTagName("span");
            this.paginateInfo.leftellipse[i] = ellipsespans[0];
            this.paginateInfo.rightellipse[i] = ellipsespans[1];

            //array to store the page links of pagination DIV
            this.paginateInfo.pagelinks[i] = [];
            for (var p=1; p<paginatelinks.length-1; p++) {
                this.paginateInfo.pagelinks[i][p-1] = paginatelinks[p];
            }
            var pageinstance=this;
            paginatediv.onclick=function(e) {
                var targetobj = window.event ? window.event.srcElement : e.target;
                if (targetobj.tagName=="A" && targetobj.getAttribute("rel")!=""){
                    if (!/disabled/i.test(targetobj.className)) { 
                        //if this pagination link is not  disabled (CSS classname "disabled")
                        pageinstance.selectpage(parseInt(targetobj.getAttribute("rel")));
                    }
                }
                return false;
            }
        }
    },
    /**
     * 選択ページの作成
     * 
     * 引数selectedpageのページ番号に該当する検索一覧をconnect関数を呼び出すことで表示する。
     * @param {int} selectedpage 表示するページ番号
     * @see IMJPaginate#connect
     * @see IMJPaginate#limitpagerange
     */
    selectpage: function(selectedpage) {
        var pageTotal = _g_list_pageTotal;
        //replace URL root domain with dynamic root domain (with or without "www"), for ajax security sake:
        if (pageTotal > 0) {
            this.connect(selectedpage); //fetch requested page and display it inside DIV
        }
		  
		  
		  var html = "";
		  var paginatediv = document.getElementById(this.paginateIds[0]);
		  var keywords = decodeURI(_g_paginate_search_keyword);
		  var countTotal = _g_list_countTotal;
		  var offset = _g_paginate_number;
		  var nowOffset = selectedpage * offset;
		  var sC = nowOffset + 1;
		  var eC = nowOffset + offset;
		  if (eC > countTotal) {
			  eC = countTotal;
		  }
		  html += '<div class="pagenateTxtBox">';
		  if (keywords) {
		     html += '<div class="pagenateTitle">' + keywords + '</div>';
		  } else {
			  html += '<div class="pagenateTitle">キーワード指定なし</div>';
		  }
		  if (countTotal > 0) {
           html += '<div class="pagenateInfo">：全' + countTotal + '件から' + sC + '-' + eC + '件' +'を表示</div>';
		  } else {
           html += '<div class="pagenateInfo">：全0件　該当するデータはありません';
		  }
		  html += '</div>';
		  paginatediv.innerHTML = html;
		  //↑20091021 truelyre：検索結果の表示
		  
		  
        //if this book only contains only 1 page (or 0)
        if (pageTotal <= 0)
            return; //stop here

        var paginateInfo = this.paginateInfo;
        //loop through # of pagination DIVs specified
        for (var i=0; i < paginateInfo.divs.length; i++){ 
            //var paginatediv=document.getElementById(this.paginateIds[i])
            //if current page is 1st page, disable "prev" button
            paginateInfo.prevlink[i].className = (selectedpage == 0) ? "prevnext disabled" : "prevnext";
          
            //update rel attr of "prev" button with page # to go to when clicked on
            paginateInfo.prevlink[i].setAttribute("rel", selectedpage-1);
            paginateInfo.nextlink[i].className = (selectedpage == pageTotal - 1)? "prevnext disabled" : "prevnext";
            paginateInfo.nextlink[i].setAttribute("rel", selectedpage+1);

            //deselect last clicked on pagination link (previous)
            paginateInfo.pagelinks[i][paginateInfo.previouspage].className = "";

            //select current pagination link
            paginateInfo.pagelinks[i][selectedpage].className = "currentpage";
        }
        //Update last viewed page info
        paginateInfo.previouspage = selectedpage;
        _g_list_selectedpage = selectedpage;
        //limit range of page links displayed (if applicable)
        this.limitpagerange(selectedpage);
    },
    /**
     * 表示ページ数の制限
     * 
     * @param {int} selectedpage 表示するページ番号
     */
    limitpagerange: function(selectedpage){
        var pageTotal = _g_list_pageTotal;
        //reminder: selectedpage count starts at 0 (0=1st page)
        var paginateInfo = this.paginateInfo;
        
        if (this.dopagerange){
            //# of visible page links other than currently selected link
            var visiblelinks = this.pagerange - 1;
            //calculate # of visible links to the left of the selected page
            var visibleleftlinks = Math.floor(visiblelinks / 2);
            //calculate # of visible links to the right of the selected page
            var visiblerightlinks = visibleleftlinks + (visiblelinks % 2 == 1 ? 1 : 0);

            //if not enough room to the left to accomodate all visible left links
            if (selectedpage < visibleleftlinks){

                var overage = visibleleftlinks - selectedpage;
                visibleleftlinks -= overage; //remove overage links from visible left links
                visiblerightlinks += overage; //add overage links to the visible right links

            //else if not enough room to the left to accomodate all visible right links
            } else if ((pageTotal - selectedpage - 1) < visiblerightlinks) { 

                var overage = visiblerightlinks - (pageTotal-selectedpage-1);
                visiblerightlinks -= overage; //remove overage links from visible right links
                visibleleftlinks += overage; //add overage links to the visible left links

            }

            //calculate indices of visible pages to show: [startindex, endindex]
            var currentrange = [selectedpage - visibleleftlinks, selectedpage + visiblerightlinks];
            //retrieve previous page range
            var previousrange = paginateInfo.previousrange;
          
            //loop through paginate divs
            for (var i=0; i < paginateInfo.divs.length; i++){ 
                if (previousrange){ //if previous range is available (not null)
                    for (var p=previousrange[0]; p<=previousrange[1]; p++){ //hide all page links
                        paginateInfo.pagelinks[i][p].style.display = "none";
                    }
                }
                for (var p=currentrange[0]; p<=currentrange[1]; p++){ //reveal all active page links
                    paginateInfo.pagelinks[i][p].style.display = "inline";
                }
                paginateInfo.pagelinks[i][0].style.display = "inline"; //always show 1st page link
                paginateInfo.pagelinks[i][pageTotal-1].style.display = "inline"; //always show last page link
                //if starting page is page3 or higher, show ellipse to page1
                paginateInfo.leftellipse[i].style.display = (currentrange[0] > 1) ? "inline" : "none";
                //if end page is 2 pages before last page or less, show ellipse to last page
                paginateInfo.rightellipse[i].style.display = (currentrange[1] < pageTotal - 2) ? "inline" : "none";
            }
        }
        paginateInfo.previousrange=currentrange;
    }
};

/**
 * ロード完了時にライブ情報取得
 */
function callLive(){
    //番組情報を取得する。取得結果は <div id ="infoLiveFlg"></div>内に表示する
    liveinfo = new IMJLiveInfo();
    liveinfo.initLiveInfo();
    liveinfo.getProgramInfo();

    var mediaURL = _g_live_url;
    var altURL   = _g_live_alt_url;
    var onAir    = _g_live_onair;
    var _width   = 640;
    var _height  = 515;
    var _pheight = 480;
    if (_g_css_id == 0) {
        var so = new SWFObject("http://imj.vo.llnwd.net/r1/imjlive/items/livePlayer2009101501_white.swf", "liveplayer", "100%", "100%", "10", "#FFFFFF");
    } else {
        var so = new SWFObject("http://imj.vo.llnwd.net/r1/imjlive/items/livePlayer2009101501_black.swf", "liveplayer", _width, _height, "10", "#FFFFFF");
    }
    so.addParam("width", _width);
    so.addParam("height", _height);
    so.addParam("allowFullScreen", "true");
    so.addParam("allowScriptAccess","always");
    so.addParam("quality","high");
    so.addParam("type", "application/x-shockwave-flash");
    so.addParam("pluginspage", "http://www.macromedia.com/go/getflashplayer");
    so.addParam("FlashVars", "mediaURL="+ _g_live_url + "&altURL=" + _g_live_alt_url + "&streamName=livestream&buffer=0&imageURL=/themes/llnwnew/flash/players/AS3/llnwLogo.jpg&streamType=LiveStream&autoPlay=true&playerWidth=" + _width + "&playerHeight=" + _pheight + "&autoHideControls=false&autoHideTime=5&initialVolume=50&autoRepeat=true&mode="+ _g_live_onair);
    so.write("flashcontent");
};

/**
 * 検索総数のセット
 *
 * getTotal関数のRequestの返り値から検索総数をグローバル変数に保存する
 * @param {Request} requet Getリクエスト
 */
function setPageTotal(data) {

    var count = data['count'];
    var vn = _g_paginate_number;

    //_g_page_total = Math.floor(count / vn) + 1;
    _g_page_total = Math.ceil(count / vn);
    // ↑20091021 truelyre：総ページ数取得方法変更
    _g_list_pageTotal = _g_page_total;

    _g_list_countTotal = count;
    //↑20091021 truelyre：件数表示の為、総件数を保持する変数追加

    var paginate = new IMJPaginate(_g_program_id, _g_asp_id);
    paginate.createBook(["paginate-top", "paginate-bottom"]);

};

/**
 * 検索総数の取得
 *
 * Ajaxリクエスト(同期処理)を用いて検索総数を取得する.
 * 処理が完了したらsetPageTotal()関数を呼び出すことで検索総数を取得し、
 * createBook()関数を呼び出すことで一覧を表示する
 * @see setPageTotal
 */
function getTotal() {
    var date      = new Date();
    var timestamp = date.getTime();
    var program_identifier = _g_program_id;
    var asp_identifier     = _g_asp_id;
    var keywords  = _g_paginate_search_keyword;
    var url = _g_php_jp_url + '/getTotalSearchArchives.php?call_back=setPageTotal&program_identifier=' 
       + program_identifier + '&asp_identifier=' + asp_identifier + '&keywords=' + keywords + '&time=' + timestamp;


    var sc = document.createElement("script");
    sc.type    = 'text/javascript';
    sc.charset = 'UTF-8';
    sc.src     = url;
    document.body.appendChild(sc);
};
