/*
 * 画面出力部分です。 HTML 側と連動して設定します。
 */


// 画面描写処理 部分
top.View =
{
    // オリジナル テンプレートHTML 保存用配列
    formHTMLStack: {},
    
	// 画面の描画を行う (id="information" 用)
	dispInformation: function(id, arrayData) {
		var str = "";
		
		str += "<h2><span class=\"alt\">お知らせ</span>";
		str += "<a href=\"./news/\" class=\"more\">";
		str += "<span class=\"alt\">その他お知らせはこちら</span></a></h2>";
		str += "<ul>";
		if (arrayData != null 
			&& arrayData.itemList[0] != null 
			& arrayData.itemList[0].item != null) 
		{
			var itemList = arrayData.itemList[0];
			for (var i=0;i<itemList.item.size();i++) {
				var item = itemList.item[i];
				str += "<li>";
				str += "<span class=\"date\">";
				str += DateFormatter.format(new Date(item.date.toString()), "m/d");
				str += "</span>";
				str += "<span class=\"title\">";
				if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"" + item.target +"\">";
				str += item.title;
				if(item.url!=null && item.url!='') str += "</a>";
				str += "</span></li>";
		    }
		} else {
			str += "<li>";
//			str += "<span class=\"date\">";
//			str += "◎";
//			str += "</span>";
//			str += "<span class=\"title\">";
//			str += "ただいまお知らせはありません。";
//			str += "</span>";
			str += "</li>";
		}
		str += "</ul>";
		$(id).innerHTML = str;
	},
	
    // 画面の描画を行う (id="event" 用)
    dispEvent: function(id, arrayData) {
		var str = "";
		str += "<h2><a href=\"/event/\"><span class=\"alt\">イベント情報</span></a></h2>";
		str += "<ul>";
		
		if (arrayData != null 
			&& arrayData.itemList[0] != null 
			& arrayData.itemList[0].item != null) 
		{
			var itemList = arrayData.itemList[0];
			for (var i=0;i<itemList.item.size();i++) {
				var item = itemList.item[i];
				str += "<li>";

				// 2008/04/26 画像なし時の表示不具合対応
				if (item.img != null && item.img != '') {
					str += "<span class=\"thum\">";
					if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"_self\">";
					str += "<img src=\""+ item.img + "\" alt=\"\" width=\"180\" heifht=\"60\" />";
					if(item.url!=null && item.url!='') str += "</a>";
					str += "</span>";
				}
				
				str += "<span class=\"title\">";
				if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"_self\">";

				// 2008/04/14 LF→'<br>' 変換処理追加
				var changetxt = item.title[0];
				var REbr = new RegExp(String.fromCharCode(10),"g");
				// 改行の2重出力の防止処理(firefoxのみ)
//				changetxt = changetxt.replace('\n\n',"\n");
				// 2008/04/26 改行変換処理追加
				changetxt = changetxt.replace(/\n\n/g,"\n");
				// LF→'<br>' 変換
				changetxt = changetxt.replace(REbr,"<br>");
				str += changetxt;

				if(item.url!=null && item.url!='') str += "</a>";
				str += "</span>";
				str += "</li>";
				
			}
		} else {
			str += "<li>";
			str += "<span class=\"thum\">";
			str += "<img src=\"images/no_event_banner.jpg\" alt=\"\" width=\"180\" heifht=\"60\" />";
			str += "</span>";
			str += "</li>";
		}
		str += "</ul>";
		$(id).innerHTML = str;
    },

    // 画面の描画を行う (id="ana" 用)
    dispAna: function(id, arrayData) {
        top.View.dispTemplate(id, "ul", arrayData, "m/d");
    },

    // 画面の描画を行う (id="prerelease" 用)
    dispPrerelease: function(id, arrayData) {
		var str = "";
		str += "<h2><a href=\"/preview/\"><span class=\"alt\">試写会情報</span></a></h2>";
		str += "<ul>";

		if (arrayData != null 
			&& arrayData.itemList[0] != null 
			& arrayData.itemList[0].item != null) 
		{
			var itemList = arrayData.itemList[0];
			for (var i=0;i<itemList.item.size();i++) {
				var item = itemList.item[i];
				str += "<li>";

				// 2008/04/26 画像なし時の表示不具合対応
				if (item.img != null && item.img != '') {
					str += "<span class=\"thum\">";
					if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"_self\">";
					str += "<img src=\""+ item.img + "\" alt=\"\" width=\"180\" heifht=\"60\" />";
					if(item.url!=null && item.url!='') str += "</a>";
					str += "</span>";
				}
				
				str += "<span class=\"title\">";
				if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"_self\">";

				// 2008/04/14 LF→'<br>' 変換処理追加
				var changetxt = item.title[0];
				var REbr = new RegExp(String.fromCharCode(10),"g");
				// 改行の2重出力の防止処理(firefoxのみ)
//				changetxt = changetxt.replace('\n\n',"\n");
				// 2008/04/26 改行変換処理追加
				changetxt = changetxt.replace(/\n\n/g,"\n");
				// LF→'<br>' 変換
				changetxt = changetxt.replace(REbr,"<br>");
				str += changetxt;

				if(item.url!=null && item.url!='') str += "</a>";
				str += "</span>";
				str += "</li>";
				
			}
		} else {
			str += "<li>";
			str += "<span class=\"thum\">";
			str += "<img src=\"images/no_preview_banner.jpg\" alt=\"\" width=\"180\" heifht=\"60\" />";
			str += "</span>";
			str += "</li>";
		}
		str += "</ul>";
		$(id).innerHTML = str;
    },

    // 画面の描画を行う (id="present" 用)
    dispPresent: function(id, arrayData) {
		var str = "";

		str += "<h2><a href=\"/present/\"><span class=\"alt\">プレゼント</span></a></h2>";
		str += "<ul>";

		if (arrayData != null 
			&& arrayData.itemList[0] != null 
			& arrayData.itemList[0].item != null) 
		{
			var itemList = arrayData.itemList[0];
			for (var i=0;i<itemList.item.size();i++) {
				var item = itemList.item[i];
				str += "<li>";

				// 2008/04/26 画像なし時の表示不具合対応
				if (item.img != null && item.img != '') {
					str += "<span class=\"thum\">";
					if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"_self\">";
					str += "<img src=\""+ item.img + "\" alt=\"\" width=\"180\" heifht=\"60\" />";
					if(item.url!=null && item.url!='') str += "</a>";
					str += "</span>";
				}
				
				str += "<span class=\"title\">";
				if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"_self\">";

				// 2008/04/14 LF→'<br>' 変換処理追加
				var changetxt = item.title[0];
				var REbr = new RegExp(String.fromCharCode(10),"g");
				// 改行の2重出力の防止処理(firefoxのみ)
//				changetxt = changetxt.replace('\n\n',"\n");
				// 2008/04/26 改行変換処理追加
				changetxt = changetxt.replace(/\n\n/g,"\n");
				// LF→'<br>' 変換
				changetxt = changetxt.replace(REbr,"<br>");
				str += changetxt;

				if(item.url!=null && item.url!='') str += "</a>";
				str += "</span>";
				str += "</li>";
				
			}
		} else {
			str += "<li>";
			str += "<span class=\"thum\">";
			str += "<img src=\"images/no_present_banner.jpg\" alt=\"\" width=\"180\" heifht=\"60\" />";
			str += "</span>";
			str += "</li>";
		}
		str += "</ul>";
		$(id).innerHTML = str;
    },

    // 画面の描画を行う (id="news" 用)
    dispNews: function(id, arrayData) {
		var str = "";
		str += "<h2><span class=\"alt\">長崎県内ニュース</span>";
		str += "</h2>";
		str += "<ul>";
		if (arrayData != null 
			&& arrayData.itemList[0] != null 
			& arrayData.itemList[0].item != null) 
		{
			var itemList = arrayData.itemList[0];
			for (var i=0;i<itemList.item.size();i++) {
				var item = itemList.item[i];
				str += "<li>";
				if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"_self\">";

				// 2008/04/14 LF→'<br>' 変換処理追加
				var changetxt = item.title[0];
				var REbr = new RegExp(String.fromCharCode(10),"g");
				// 改行の2重出力の防止処理(firefoxのみ)
				changetxt = changetxt.replace('\n\n',"\n");
				// LF→'<br>' 変換
				changetxt = changetxt.replace(REbr,"<br>");
				str += changetxt;

				str += "(" + DateFormatter.format(new Date(item.date.toString()), "j") +"日)";
				if(item.url!=null && item.url!='') str += "</a>";
				str += "</span></li>";
		    }
			str += "</ul>";
			str += "<div class=\"news_bottom\">";
			str += "<p class=\"news_link\"><a href=\"./realtime/news/list01.html\"><span class=\"alt\">その他ニュース</span></a></p>";
			str += "<p class=\"news2_link\"><a href=\"./nnn/\"><span class=\"alt\">全国ニュース</span></a></p>";
			str += "</div>";
		}
		$(id).innerHTML = str;
    },

    // 画面の描画を行う (id="nib_banner" 用)
    dispNibBanner: function(id, arrayData) {
		var str = "";
		
		if (arrayData != null 
			&& arrayData.itemList[0] != null 
			& arrayData.itemList[0].item != null) 
		{
			var itemList = arrayData.itemList[0];
			for (var i=0;i<itemList.item.size();i++) {
				var item = itemList.item[i];
				// 2008/04/26 画像なし時の表示不具合対応
				if (item.img != null && item.img != '') {
					str += "<span class=\"banner\">";
					if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"" + item.target + "\">";
					str += "<img src=\""+ item.img + "\" alt=\"\" width=\"180\" heifht=\"140\" />";
					if(item.url!=null && item.url!='') str += "</a>";
					str += "</span>";
				}
			}
		}
		$(id).innerHTML = str;
    },
    
    // 画面の描画を行う (id="ichioshi" 用)
    dispIchioshi: function(id, arrayData) {
		var str = "";
		
		if (arrayData != null 
			&& arrayData.itemList[0] != null 
			& arrayData.itemList[0].item != null) 
		{
			var itemList = arrayData.itemList[0];
			str += "<h2><span class=\"alt\">NIBイチオシ</span></h2>";
			str += "<div class=\"ichioshi_contents\">";
			str += "<ul>";
			for (var i=0;i<itemList.item.size();i++) {
				var item = itemList.item[i];
				str += "<li>";
//				str += "<br />";
				if(item.url!=null && item.url!='') str += "<a href=\"" + item.url + "\" target=\"" + item.target + "\">";
//				str += "<img src=\""+ item.img + "\" alt=\"\" width=\"230\" heifht=\"60\" />";
//				if(item.img!=null && item.img!='') str += "<img src=\""+ item.img + "\" alt=\"\" width=\"230\" heifht=\"60\" />";
				if(item.img!=null && item.img!='') str += "<img src=\""+ item.img + "\" alt=\"\" width=\"230\" heifht=\"\" />";
				if(item.url!=null && item.url!='') str += "</a>";
				str += "</li>";
			}
		}
		
		str += "</ul>";
		str += "</div>";
		$(id).innerHTML = str;
    },

    // 画面の描画を行う (id="sponsor_banner" 用) - !!イレギュラー処理
    dispSponsor: function(id, arrayData) {
        // 最大バナー出力数 (固定？)
        var dispMax = 20;

        // 404 / タイムアウト が発生していない時 || データが 0件ではないとき対応
        if (arrayData != null && arrayData.itemList[0] != null & arrayData.itemList[0].item != null){
            /*
             * arrayData を構築しなおす
             * 最大10件{(fixFlg=1 のものを上から順) + (fixFlg=0 のものをランダムに入れ替えた後上から順)}
             */

            // 固定部分出力 & ランダム部分出力 の構成
            var newArrayData = {itemList: []};
            var fixSubArrayData = {item: [] };
            var randomSubArrayData = {item: [] };
            // 固定用 / ランダム用 に仕分け
            for (var i = 0; i < arrayData.itemList[0].item.size(); i ++) {
                var itemArray = arrayData.itemList[0].item[i];
                if (itemArray.fix[0] > 0 &&  fixSubArrayData.item.size() < dispMax)
                    fixSubArrayData.item.push(itemArray);
                else
                    randomSubArrayData.item.push(itemArray);
            }

            // ランダム出力用の配列を ランダムシャッフルする
            randomSubArrayData.item.sort(function (a,b){ return Math.floor(Math.random() * 100) % 2 > 0 ? 1 : -1; });
            // 固定用 / ランダム用 を結合して、先頭から dispMax分まで抜き出す
            fixSubArrayData.item = fixSubArrayData.item.concat(randomSubArrayData.item);
            newArrayData.itemList.push(fixSubArrayData);
            newArrayData.itemList[0].item = newArrayData.itemList[0].item.slice(0, dispMax);

            // 出力描写依頼
            top.View.dispTemplate(id, "", newArrayData, "");
        }
    },
        // 画面描画処理テンプレート - HTML に記載されたテンプレート(id=#{} が付いているタグ) を読み込み、データをはめ込んで出力する。
    dispTemplate: function(id, objTag, arrayData, dateFormat) {
        // テンプレートを表示状態にする
        $('#{'+id+'}').show();
        //$(idSharp).show();

        // テンプレートを含むターゲットエレメント
        var replaceTargetElement = null;
        if (objTag != "")
            replaceTargetElement = $(id).getElementsByTagName(objTag)[0];
        else
            replaceTargetElement = $(id);

        // テンプレートの保存
        if (top.View.formHTMLStack[id] == null)
            top.View.formHTMLStack[id] = decodeURI(top.View.removeExLayer(replaceTargetElement.innerHTML));

        // 出力HTMLの構成
        var outputHtml = templateHTML = top.View.removeExLayer(top.View.formHTMLStack[id]);

        // 404 / タイムアウト 発生時 || データが 0件のとき対応 (ブラウザによって null になる段階が異なる。 IE || Firefox/Opera/Safari)
        if (arrayData == null || arrayData.itemList[0] == null || arrayData.itemList[0].item == null){
            // 出力HTMLを (JSON 文字列として)取得
            var htmlJSONString = templateHTML.match(/\{\s*NoData2Html:.+?\}/)
            outputHtml += eval('(' + htmlJSONString + ')').NoData2Html;
        }else{
            // 置換文字列の JSON文字列 を構成する。
            var replaceTargetJSONString = "{seekedPosition}";
            // 日付を出力するかチェック
            if (dateFormat != "")
                replaceTargetJSONString = replaceTargetJSONString.replace("seekedPosition", "date: date.toString(), seekedPosition");
            // ターゲットをチェック XMLファイルと連動
            var keywordArray = new Array('url', 'title', 'img', 'target');
            for (var i = 0; i < keywordArray.size(); i++){
                var re = new RegExp("#\\{" + keywordArray[i] + "\\}", "ig");
                if (templateHTML.match(re)){
                    replaceTargetJSONString = replaceTargetJSONString.replace("seekedPosition", keywordArray[i] + ": itemArray." + keywordArray[i] + "[0], seekedPosition");
                }
            }
            // 余分なものを取り除く
            replaceTargetJSONString = replaceTargetJSONString.replace(", seekedPosition", "");
            replaceTargetJSONString = replaceTargetJSONString.replace("seekedPosition", "");  // 何もヒットしなかったとき用

            // データの加工
            for (var i = 0; i < arrayData.itemList[0].item.size(); i ++) {
                var itemArray = arrayData.itemList[0].item[i];
                // 日付の整形 (Day)
                if (dateFormat != "")
                    var date = DateFormatter.format(new Date(itemArray.date[0].toString()), dateFormat);
                // テンプレートHTML を置換して 出力用HTMLを生成
                var obj = eval('(' + replaceTargetJSONString + ')');
                if (obj) outputHtml += templateHTML.interpolate(obj);
            }
        }

        // スポンサーバナー表示件数20対応
        if (id == "sponsor_banner") {outputHtml += '<br clear="all" />\n'}

        // HTML を出力
        replaceTargetElement.innerHTML = outputHtml;

        // テンプレートを非表示状態に戻す
        $('#{'+id+'}').hide();
    },

    // Firefoxのみ:「ブラウザツールバーのハイライト機能によるHTMLデータ書き換え」 の対応
    removeExLayer: function(html) {
        // Google / Yahoo ツールバーハイライト対応
        if (html.match(/[google|ytHiLighted]/i))
            html = html.replace(/#\{<layer.+?>/, '#\{').replace('<\/layer>}', '}');
        return html;
    }

};

