﻿//2008-06-20 リダイレクト対応
//2008-07-21 主番組ID検索対応
//========================================
// HTTPクエリパラメータ
//========================================
var param_genre_id = "";
var param_error=false;

//========================================
// ページ制御変数
//========================================
var page_break_count = 10;
var page_count = 20;
var page_number = 1;

//========================================
// 検索ツールパラメータ
//========================================
var filter_genre_id = 0;
var filter_genre_step = 1;
var filter_genre_name = "";
var filter_option_index = 0;
var filter_sort_index = 0; //価格
var filter_sort_order = 1; //昇順

//========================================
// リンク
//========================================
var linkText = new Array();
var linkUrl = new Array();
var page_title = "";

//========================================
// パラメータ オブジェクト
//========================================
var Parameters = new function()
{
    var var_path = "/shop/result2.html?";
    var var_keys = new Array("filter_category", "filter_date", "page_number");
    var var_values = new Array("", "", "");

    this.key = function(index){return var_keys[index];}
    this.value = function(index){return var_values[index];}
    this.setParameter = function(key, value){
        for(var i=0; i<var_keys.length; i++){
            if(var_keys[i]==key){
                var_values[i]=value+"";
                break;
            }
        }
    }
    this.getParameter = function(key){
        var value = "";
        for(var i=0; i<var_keys.length; i++){
            if(var_keys[i]==key){
                value = var_values[i];
                break;
            }
        }
        return value;
    }
    this.toString = function(){
        var params = "";
        for(var i=0; i<var_keys.length; i++){
            if(var_values[i].length>0){
                if(params.length>0){params += "&";}
                params += var_keys[i] + "=" + var_values[i];
            }
        }
        return var_path + params;
    }
}

//========================================
// カテゴリ絞り込み
//========================================
function category(genreID){
    Parameters.setParameter("page_number", "");
    Parameters.setParameter("filter_category", genreID);
    location.href = Parameters.toString();
}

//========================================
// 絞り込み
//========================================
function filter(filterName, index){
    Parameters.setParameter("page_number", "");
    Parameters.setParameter(filterName, index);
    location.href = Parameters.toString();
}

//========================================
// 改ページ
//========================================
function newPage(pageNumber){
    Parameters.setParameter("page_number", pageNumber);
    location.href = Parameters.toString();
}

//========================================
// ジャンル名取得
//========================================
function getGenreName(genreID)
{
    var name="";
    var params = "service=product-category&search=_INT/EQ/21001/"+genreID+"&result-count=1&show-results&result-info=all&result-format=xml";
    var req = new SearchRequest(params);

	if (req.ok) {
	    if(req.totalhits>0){
    	    var data = req.getRecordElement();
	        name = getXmlNodeValue(data[0], "subtitle");
	    }
	}
	
	req = null;
	
	return name;
}

//========================================
// 一覧出力
//========================================
function itemList(){

    var ctrlResultList = document.getElementById('result_list');
    var ctrlPageHeaderTop = document.getElementById('page_header_top');
    var ctrlPageHeaderLeft = document.getElementById('page_header_left');
    var ctrlPageHeaderRight = document.getElementById('page_header_right');
    var ctrlPageFooterLeft = document.getElementById('page_footer_left');
    var ctrlPageFooterRight = document.getElementById('page_footer_right');

    //ページの初期化
    ctrlResultList.innerHTML = "<div style=\"margin-top: 10px; margin-bottom: 10px;\">しばらくお待ちください</div>";
    ctrlPageHeaderTop.innerHTML = "";
    ctrlPageHeaderLeft.innerHTML = "";
    ctrlPageHeaderRight.innerHTML = "";
    ctrlPageFooterLeft.innerHTML = "";
    ctrlPageFooterRight.innerHTML = "";

    //パラメータエラーの場合は処理を中断
    if(this.param_error){
        ctrlResultList.innerHTML = "パラメータ エラー";
        return false;
    }

    //検索条件設定
    var query_token = "_INT/EQ/21000/1";
    
    //放送日絞り込み
    var span = (new ProductFilters()).value(this.filter_option_index);

    if(span=="0"){        //指定しない
    }
    else if(span=="1"){   //今日
        query_token += " AND _DATE/EQ/23000/"+addDate();
    }
    else if(span=="2"){   //昨日
        query_token += " AND _DATE/EQ/23000/"+addDate(-1);
    }
    else if(span=="3"){   //一昨日
        query_token += " AND _DATE/EQ/23000/"+addDate(-2);
    }
    else if(span=="4"){   //過去1週間
        query_token += " AND _DATE/GT/23000/"+addDate(-7);
    }

    var sort_order = "date-12:z,text-13:a,text-14:a,text-5:z,url:a";

    var options = "";

    //カテゴリ
    if(this.filter_genre_id > 0){
        options += "&category=" + encodeURI(getGenreName(this.filter_genre_id));
    }
    
    var fields = "&result-fields=text-1,text-2,text-3,text-4,text-5,text-6,text-7,float-8,int-9,text-10,text-11,date-12,text-13,text-14,int-16,text-17,text-19,text-20,int-22";
    var params = "service=program-det&search="+encodeURI(query_token)+fields+"&sort-order="+sort_order+options+"&result-count="+this.page_count+"&result-page="+this.page_number+"&show-results&result-info=all&result-format=xml";

    SearchIssueRequest(params, handleResponse);
}

//========================================
// 日付取得
//========================================
function addDate(number)
{
    var dateObj = new Date();

    if(number != null){
        if(!isNaN(number)){
            dateObj.setDate(dateObj.getDate() + number);
        }
    }

    var y = dateObj.getFullYear();
    var m = dateObj.getMonth() + 1;
    var d = dateObj.getDate();
    var mm;
    var dd;
    if(m<10){
        mm = "0" + m;
    }
    else{
        mm = m;
    }
    if(d<10){
        dd = "0" + d;
    }
    else{
        dd = d;
    }
    var valueDate = y+"/"+mm+"/"+dd;
    
    return valueDate;
}

//========================================
// 結果リスト出力
//========================================
function handleResponse(totalhits, data, status_ok, responseMessage){

    if(!status_ok){
        document.getElementById('result_list').innerHTML = "<div>只今、検索が行えません</div><br /><div>"+responseMessage+"</div>";
	    return false;
    }

	var recordCount = data.length;
	var startId = 0;
	var endId = 0;
	var contents = "";
	var contents_header = "";
	var contents_footer = "";
	var tableColumnCount = 0;
	var station = new Stations();

    contents_header += "<table cellpadding=\"0\" cellspacing=\"0\">";
    contents_footer += "</table>";

    //----------------------------------------
    // 結果リスト出力
    //----------------------------------------

	// データ行読み込み
	for (var i = 0; i < recordCount; i++) {
	    var resultid = parseInt(getXmlNodeValue(data[i], "resultid"));
	    if(i==0)
	    {
	        startId = resultid;
	        endId = startId;
	    }
	    else
	    {
	        endId += 1;
	    }

	    var programName = getXmlNodeValue(data[i], "title");
	    var title = getXmlNodeValue(data[i], "subtitle");
	    var date = getXmlNodeValue(data[i], "date");
	    var price = getXmlNodeValue(data[i], "price");
	    var siteCode = getXmlNodeValue(data[i], "text-1");
	    var genre = getXmlNodeValue(data[i], "text-2");
	    var subgenre = getXmlNodeValue(data[i], "text-3");
	    var genres = getXmlNodeValue(data[i], "text-4");
	    var url = getXmlNodeValue(data[i], "text-5");
	    var image = getXmlNodeValue(data[i], "text-6");
	    var discount = getXmlNodeValue(data[i], "float-7");
	    var regularPrice = getXmlNodeValue(data[i], "int-8");
	    var modelNo = getXmlNodeValue(data[i], "text-9");
	    var headline = getXmlNodeValue(data[i], "text-10");
	    var outline = getXmlNodeValue(data[i], "text-11");
	    var programDate = getXmlNodeDate(data[i], "date-12");
	    var hh = getXmlNodeValue(data[i], "text-13");
	    var mi = getXmlNodeValue(data[i], "text-14");
        var tvCode = getXmlNodeValue(data[i], "text-19");
        var programID = getXmlNodeInt(data[i], "int-22");

        //商品カテゴリ編集
        var categories = "";
        var genreList = genres.split(",");
        var link = "";
        for(genreIndex=0; genreIndex<genreList.length && genreIndex<PRODUCT_CATEGORY_LENGTH; genreIndex++){
	        if(categories.length>0){categories+="&nbsp;&gt;&nbsp;";}

            if(link.length>0){link+=",";}
            link+=genreList[genreIndex];
            if(url.length>0){
               categories+="<a href=\"javascript:goCagegoryList('"+link+"')\" title=\""+genreList[genreIndex]+"\">";
            }
            categories+=genreList[genreIndex];
            if(url.length>0){
                categories+="</a>";
            }
           
        }

        //番組情報編集
        var tvLink = "";

	    var href = getProgramListPath(programID, programDate);

	    var tvLinkText = ""+formatDateTime(programDate, hh, mi, 1)+"&nbsp;&nbsp;&nbsp;"+programName+" ("+station.shortTextOf(tvCode)+")";
	    tvLink += "<a href=\""+href+"\" title=\""+tvLinkText+"\">";
	    tvLink += tvLinkText;
	    tvLink += "</a>";

		var begin_anc = "";
		var end_anc = "";

        if(url.length > 0){
		    begin_anc = "<a href=\"\" title=\""+title+"\" onclick=\"javascript:w=window.open('"+url+"', '_blank');w.focus();return false;\">";
		    end_anc = "</a>";
        }

        var td = "";

		// ito add
		contents += "<tr><td>";

		// ito add
		if (i == 0)
		{
			// 最初のデータのみトップなし
            contents += "<div class=\"item\" style=\"border-top:none; height: 110px;\">";
        }
        else
        {
            contents += "<div class=\"item\" style=\"height: 120px; margin: 2px 0 0 0;\">";
        }

        contents += begin_anc;


        //商品名
        contents += "<div class=\"name\" style=\"font-weight:bold;\">";

        if(url.length>0){
            contents += "<a href=\"\" title=\""+title+"\" onclick=\"javascript:w=window.open('"+url+"', '_blank');w.focus();return false;\">"+title+"</a>";
        }
        else
        {
            contents += "<strong>"+title+ "</strong>";
        }

        contents += "</div>";

        //価格
        if (price.length>0 && price!="0"){
            contents += "<div class=\"price\">"+formatNumber(price)+"円</div>";
        }

        //商品カテゴリ
        contents += "<div class=\"expl\" style=\"margin-top: 2px;\">"+categories+"</div>";

        //番組名
        contents += "<div class=\"expl\">"+tvLink+"</div>";

        //紹介内容
        contents += "<div class=\"expl\" style=\"margin-top: 2px;\">"+replaceOutline(outline)+"</div>";

        contents += "<div class=\"clear\"></div>";

        contents += "</div>";

		// ito add
		contents += "</td></tr>";

	}

	req = null;

	// データ行出力
	if(recordCount == 0){
	    contents = "";
        contents += "<div style=\"margin-top: 10px; margin-bottom: 10px;\">";
        contents += "検索結果がありません";
        contents += "</div>";
	}

    document.getElementById('result_list').innerHTML = contents_header + contents + contents_footer;


    //----------------------------------------
    // ページ番号出力
    //----------------------------------------
    var pageHtml = new PagingHTML(totalhits, this.page_number, this.page_count, this.page_break_count);

	document.getElementById('page_header_top').innerHTML = pageHtml.pageHeader;
	document.getElementById('page_header_left').innerHTML = pageHtml.paging;
	document.getElementById('page_header_right').innerHTML = pageHtml.nextPage;
	document.getElementById('page_footer_left').innerHTML = pageHtml.paging;
	document.getElementById('page_footer_right').innerHTML = pageHtml.nextPage;

	pageHtml = null;

}

//========================================
// 検索ツール出力
//========================================
function searchTool(){
    
    var htmlObj = new function()
    {
        //
        // 絞り込みHTML取得
        //
        this.getFilterHtml = function(filterName, selectedIndex)
        {
            var disable = param_error;
            var html = "";
            var listObj = null;

            //絞り込みオプション
            if(filterName=="filter_date"){
                listObj = new ProductFilters();
            }

            for(i=0; i<listObj.length(); i++){

                var anc = "";
                var href = "#";

                if(disable){
                    anc += "<a href=\"#\" disabled=\"disabled\">"+listObj.text(i)+"</a>";
                }
                else if(selectedIndex==i){
                    anc += "<a class=\"selected\" title=\""+listObj.text(i)+"\">"+listObj.text(i)+"</a>";
                }
                else{
                    href = "javascript:filter('"+filterName+"', "+i+");";

                    anc += "<a href=\""+href+"\" title=\""+listObj.text(i)+"\">";
                    anc += listObj.text(i);
                    anc += "</a>";
                }

                html += "<li>";
                html += anc;
                html += "</li>";
            }
            
            listObj = null;

            return html;
        }

    }
    
    //放送日
    document.getElementById('filter_option').innerHTML = htmlObj.getFilterHtml("filter_date", this.filter_option_index);

}

//========================================
// 左ナビ出力
//========================================
function leftNavi(genreID){

    //コントロール設定
    var ctrlGenreBlock = document.getElementById('products_category_block');
    var ctrlGenreTitle = document.getElementById('products_category_title');
    var ctrlGenreList = document.getElementById('products_category');
    var ctrlLink = document.getElementById('link_current_page');

    //カテゴリデータ読み込み
    var params = "service=product-category&search=_INT/EQ/21002/1&result-count=100&sort-order=int-5:a&show-results&result-info=all&result-format=xml";

    var req = new SearchRequest(params);

	var return_value = "";

	if (req.ok) {
        var totalhits = req.totalhits;
	    var data = req.getRecordElement();

        var html = "";
        var selectedGenreName = "";

        html = "<ul>\n";

        for (var i = 0; i < data.length; i++) {
	        var id = getXmlNodeValue(data[i], "int-2");
	        var name = getXmlNodeValue(data[i], "subtitle");
            var selected = (id == genreID);

            var href = "";

            if(this.param_error){
                href += "<a href=\"\" disabled=\"disabled\">"+name+"</a>";
            }
            else if(selected){
                href += "<a class=\"selected\" title=\""+name+"\">"+name+"</a>";
                selectedGenreName = name;
            }
            else{
                href += "<a href=\"javascript:category("+id+");\" title=\""+name+"\">"+name+"</a>";
            }

            html += "<li>"+href+"</li>\n";
        }

        html += "</ul>\n";

        ctrlGenreList.innerHTML = html;
	}
	
	req = null;

    //----------------------------------------
    // タイトル、リンクナビ出力
    //----------------------------------------

	var textList = new Array();
    var urlList = new Array();
    
    textList.push("テレビで紹介された商品");
    urlList.push("<a href=\"./result2.html\" title=\"テレビで紹介された商品\">テレビで紹介された商品</a>");

    var title = "";

    if(genreID>0){
        textList.push(selectedGenreName);
        urlList.push("");
    }
    
    var title = "商品｜日テレ7";
    var linkHtml = "";
    
    if(textList.length == 1){
	    title = textList[textList.length - 1] + "｜" + title;
	}
    else if(textList.length > 1){
	    title = textList[textList.length - 1] + "｜" + textList[textList.length - 2] + "｜日テレ7";
    }

	for (var i = 0; i < textList.length; i++) {
	    
	    if(linkHtml.length>0){linkHtml += "&nbsp;>&nbsp;";}

	    if(i == textList.length-1){
    	    linkHtml += textList[i];
	    }
	    else{
    	    linkHtml += urlList[i];
	    }

	}

    document.title = title;
	document.getElementById('link_current_page').innerHTML = linkHtml;

	current = null;
}

//========================================
// ページロード処理
//========================================
function pageLoad(){

    //HTTPクエリパラメータ取得
    query = new Response.QueryString();
    for(var i=0; i<query.length; i++){
        var key = query.key(i);
        var value = query.value(i);

        Parameters.setParameter(key, value);

	    //番組カテゴリで絞り込み
	    if(key=="filter_category"){
  	        this.param_genre_id = value;
	    }
	    //放送日で絞り込み
	    else if(key=="filter_date"){
	        if(value >= 0 || value <= 3){
    	        this.filter_option_index = parseInt(value);
	        }
	    }
	    //ページ番号
	    else if(key=="page_number"){
	        if(value >= 1 && value <= 100){
    	        this.page_number = parseInt(value);
	        }
	    }

    }
    query = null;

    //パラメータチェック
    if(this.param_genre_id.length>0){
        this.filter_genre_id = this.param_genre_id;
    }

    //左ナビ出力
    leftNavi(this.filter_genre_id);

    //右ナビ出力
    programTodayList();

    //検索ツール出力
    searchTool();

    //一覧出力
    itemList();

}

//========================================
// 絞り込み
//========================================
var ProductFilters = function()
{
    var valueList = new Array("0", "1", "2", "3", "4");
    var textList = new Array("指定しない", "今日", "昨日", "一昨日", "過去1週間");

    this.value = function(index){return valueList[index];};
    this.text = function(index){return textList[index];};
    this.length = function(){return valueList.length;};
    this.textOf = function(value){var text="";for(i=0; i<valueList.length; i++){if(valueList[i]==value){text=textList[i];break;}}return text;};
    this.indexOf = function(value){var index=0;for(i=0; i<valueList.length; i++){if(valueList[i]==value){index=i;break;}}return index;};
}

function replaceOutline(value){
    return value.replace(/&lt;br \/&gt;/g, " ");
}

