/* sync.js
(C) 2009 digitalstage inc.
v 20090414
--------------------------------------------------------- */
//var SYNC_SERVER = 'http://localhost:8000/';
var SYNC_SERVER = 'https://sync-console.digitalstage.jp/';

jQuery.noConflict();
jQuery.ajaxSetup({scriptCharset:'utf-8'});

var currentBlogId;
var currentYm = null;
var currentPage = 1;
var mainJson = null;
var catList = [];

window.addEvent('domready', function() {
	syncDig(document);
});

function syncDig(p) {
    //■DOMを読み込み、pタグの子ノードを取得
	var cl = p.childNodes;
	for (var i=0; i<cl.length; i++) {
		var c = cl[i];
		
		var nm = c.nodeName;
		var cls = c.className;
		
		if (nm == '#text') continue;
		else if (nm == 'DIV') {
		    if (cls.indexOf('sync') > -1) {
		        //■<p><div class="sync">の場合のみ処理
				loadService(cls, c);
			}
		}		
		if (c.hasChildNodes()) {
			syncDig(c);
		}
	}
}

//■ここが読み込まれるのは最初だけ。
function loadService(cls, c) {
    var ary = cls.split(' ');       //■■htmlからclassの価を抜き出し、配列に変換
	var type = ary[1];
	var did = ary[2];

	ary = c.innerHTML.split(',');   //■■htmlタグの内容を取得して、配列に変換
	var gid = ary[0];
	var sid = ary[1];
	
	if (type == 'blog') {
	    //●ブログの表示タイプがメインの場合
		if (did.indexOf('main') > -1) {
		    currentBlogId = sid;
			//100218 max-results変更10→100
			var url = 'http://www.blogger.com/feeds/' + currentBlogId + '/posts/default?redirect=false&max-results=100&alt=json-in-script&callback=?';
			jQuery.getJSON(url, function(json, textStatus) {
			    // TODO: status動かないっぽい。代替見つける

			    //100122　追記　初期読みこみフラグ
			    var first_flag = true;
			    mainJson = json;
			    //100218
			    //var_dump(json);
			    dispBlogMain(c, currentBlogId, json, first_flag);
			    loadCategory();
			});
		//●ブログの表示タイプがサイドの場合
		} else if (did.indexOf('side') > -1) {
			currentBlogId = sid;
			
			// 先にDIV構造を作ってしまう
			dispBlogSide(c);
			
			// カレンダーの月間のクエリ
			loadCalendar();
			
			// カテゴリーのクエリ
			loadCategory();
		}
		
	} else if (type == 'video') {
		dispVideo(c, sid);
		
	} else if (type == 'form') {
		jQuery.ajax({
			url: SYNC_SERVER + 'sync/form.action',
			type: 'GET',
			dataType: 'jsonp',
			data: {
				's': sid
			},
			success: function(json) {
				dispForm(c, sid, json);
			},
			error: function() {
				alert('JSON取得失敗！');
			}
		});
		
	} else if (type == 'docs') {
		var tv = sid.split(':');
		var type = tv[0];
		var docid = tv[1];
		if (type.indexOf('document') == 0) {
			var url = SYNC_SERVER + 'sync/docs.action?callback=?';
			jQuery.getJSON(url, {'g': gid, 's': sid}, function(json) {
				if (json.csspart && json.csspart.length > 0)
					jQuery('<style type="text/css">' + json.csspart + '</style>').appendTo('head');
				c.innerHTML = json.content;
				jQuery('#report-abuse-button').hide();
				jQuery('a.google-small-link').attr('href', 'http://docs.google.com/');
				jQuery(c).fadeIn(500);
				bdRefresh();
				Bindfooter.set();
			});
			
		} else if (type.indexOf('spreadsheet') == 0) {
			c.innerHTML = '<iframe id="sheet_frame" src="http://spreadsheets.google.com/pub?key=' + docid + '" frameborder="0" width="620" height="560"></iframe>';
			jQuery(c).fadeIn(500);
			bdRefresh();
			Bindfooter.set();
			
		} else if (type.indexOf('presentation') == 0) {
			c.innerHTML = '<iframe src="http://docs.google.com/EmbedSlideshow?docid=' + docid + '&amp;size=m" frameborder="0" width="555" height="451"></iframe>';
			jQuery(c).fadeIn(500);
			bdRefresh();
			Bindfooter.set();
		}
	}
}

// cにアペンドして、mcを返す
function nineSlice(cls, c) {
	var mc = jQuery('<div class="mc"></div>');
	var mm = jQuery('<div class="mm"></div>').append('<div class="ml"></div>').append('<div class="mr"></div>').append(mc);
	var h3 = jQuery('<div class="' + cls + '"></div>')
		.append('<div class="tl"></div>').append('<div class="tr"></div>').append('<div class="tc"></div>').append(mm);
	h3.append('<div class="bl"></div>').append('<div class="br"></div>').append('<div class="bc"></div>').appendTo(c);
	return mc;
}

function getSkinClass(c) {
	return c.parentNode.parentNode.parentNode.parentNode.parentNode.className;
}

/**********
F O R M
********/
var forms = null;
function dispForm(c, formId, json) {
	c.innerHTML = '';
	
	// for error check
	var sync_form_id = 'sync_form_' + formId;
	if (forms == null) forms = {};
	var fields = {
		'form_id' : formId,
		'last_msg' : breakToTag(json.last_msg)
	};
	
	forms[sync_form_id] = fields;
	
	var required = jQuery('<span class="required">＊</span>');
	
	var skin = getSkinClass(c);
	if (skin.indexOf('standard') > -1) {
		var mc = nineSlice('slice h3', c);
		mc.append('<h3>' + json.title + '</h3>');
	} else {
		var h3div = jQuery('<div class="h3"/>').appendTo(c);
		jQuery('<h3></h3>').appendTo(h3div).append(json.title);
	}
	
	var subt = json.subtitle;
	if (subt.length > 0)
		jQuery('<p class="lead"></p>').append(breakToTag(subt)).appendTo(c);
	
	jQuery('<p class="note">').append(required.clone()).append('は必須入力です。').appendTo(c);
	
	var frm = jQuery('<form id="' + sync_form_id + '"></form>');
	var tbl = jQuery('<table class="table sync_form">');
	// comps
	jQuery.each(json.comps, function(i, c) {
		var tr = jQuery('<tr>');
		var th = jQuery('<th>').appendTo(tr).append(c.label);
		
		var td = jQuery('<td>');
		var sep = (c.id=='name' || c.id=='name_kana') ? '　':'<br>';
		var fcnt = c.fields.length;
		
		var err_area = 'err_' + sync_form_id + c.id;
		
		// fields
		var has_required = false;
		jQuery.each(c.fields, function(j, f) {
			var id = f.id;
			fields[id] = f;
			f['err_area'] = err_area;
			
			if (f.req) has_required = true;
			
			var sep = (id=='postal2') ? '':(c.id=='name' || c.id=='name_kana') ? '　':'<br>';
			if (j > 0) td.append(sep);
			if (fcnt > 1) jQuery('<label for="' + id + '">' + f.label + '</label>').appendTo(td);
			
			if (f.type == 'テキスト') {
				var txt = jQuery('<input type="text">').attr('id', id).attr('name', id);
				if (f.size > 0) txt.attr('size', f.size);
				txt.appendTo(td);
				txt.focus(chkInput).keyup(chkInput);
				
			} else if (f.type == '複数行テキスト') {
				var txt = jQuery('<textarea cols="40" rows="7"></textarea>').attr('id', id).attr('name', id).appendTo(td);
				txt.focus(chkInput).keyup(chkInput);
				
			} else if (f.type == '選択リスト') {
				var sel = jQuery('<select></select>').attr('id', id).attr('name', id).appendTo(td);
				jQuery.each(f.choices, function(i, cho) {
					sel.append(jQuery('<option></option>').append(cho).attr('value', cho));
				});
				
			} else if (f.type == 'チェックボックス') {
				jQuery.each(f.choices, function(i, cho) {
					sel.append(jQuery('<input type="checkbox">').append(cho).attr('value', cho));
				});
				
			}
		});
		
		if (has_required) {
			th.append(required.clone());
		}
		
		td.append('<div id="' + err_area + '"></div>');
		tr.append(td);
		tr.appendTo(tbl);
	});
	
	var footer = jQuery('<p class="ac">');
	jQuery('<button class="sync_form_button">').append('送信').click(function() {
		var flds = forms[this.form.id]
		var hasError = false;
		jQuery.each(flds, function(i, f) {
			if (!chkOne(f, flds)) hasError = true;
		});
		
		// 更新
		if (hasError == false) {
			if (confirm('以下の内容で送信します。\nよろしいですか？')) {
				tbl.hide();
				footer.hide();
				var sending = jQuery('<div class="loading">').height(tbl.height()).width(tbl.width()).appendTo(c);
				
				fdata = {};
				jQuery.each(flds, function(key, f) {
					if (key == 'form_id')
						fdata['form_id'] = f;
					else if (key == 'last_msg' && key == 'email_check') {
					}
					else
						fdata[f.id] = jQuery('#' + f.id).val();
				});
				
				var form_tm = setTimeout(function() {
					sending.removeClass('loading');
					sending.height(0);
					tbl.show();
					footer.show();
					alert('フォームの送信に失敗した可能性があります。\n再送信してください。');
				}, 15000);
				
				jQuery.ajax({
					url: SYNC_SERVER + 'sync/form_save.action',
					type: 'GET',
					dataType: 'jsonp',
					data: fdata,
					async: false,
					success: function(json) {
						clearTimeout(form_tm);
						
						// 終了メッセージの表示
						sending.removeClass('loading');
						jQuery('<h3 class="ac"></h3>').append('<span class="sent_msg"></span>').append('送信を完了しました。').appendTo(sending);
						sending.append('<br>');
						var endmsg = jQuery('<p class="lead ac">').hide().append(flds.last_msg).appendTo(sending);
						endmsg.fadeIn(500);
					},
					error: function(xhr, status) {
						alert('送信に失敗しました。');
					}
				});
			}
		}
		
		return false;
	}).appendTo(footer);
	
	tbl.appendTo(frm);
	footer.appendTo(frm);
	var div = jQuery('<div class="indent tabular">').append(frm);
	div.appendTo(c);
	
	jQuery(c).fadeIn(500);
	
	bdRefresh();
}

function chkInput(e) {
	var flds = forms[this.form.id]
	var f = flds[this.id];
	chkOne(f, flds);
}

function chkOne(f, flds) {
	if (typeof(f) == 'string') return true;
	if (f.req || f.re.length > 0) {
		var msg = '';
		var val = jQuery('#' + f.id).val();
		if (f.req && val.length == 0) {
			msg = '入力してください。';
		}
		if (f.re.length > 0 && !val.match(eval(f.re))) {
			if (msg.length > 0) msg += '<br>';
			msg += (f.err.length > 0) ? f.err:'正しい書式で入れてください。';
		}
		
		if (f.type == 'テキスト' || f.type == '複数行テキスト') {
			if (val.length > 500) {
				if (msg.length > 0) msg += '<br>';
				msg += '送信できるテキストは５００文字以内です。';
			}
		}
		
		// 確認用項目
		var pos = f.id.indexOf('_check');
		if (pos > -1) {
			var o = flds[f.id.substring(0, pos)];
			if (o) {
				if (jQuery('#' + o.id).val() != val) {
					if (msg.length > 0) msg += '<br>';
					msg += o.label + 'と一致しません。';
				}
			}
		}
		
		// エラー表示
		var msgArea = jQuery('#' + f.err_area);
		if (msg.length == 0) {
			msgArea.removeClass('err_msg');
			//msgArea.addClass('success_msg');
			msgArea.empty();
			return true;
		} else {
			msgArea.removeClass('success_msg');
			msgArea.addClass('err_msg');
			msgArea.html(msg);
			return false;
		}
	}
	return true;
}


/**********
B L O G
********/
//===========================================================================================================
//■ページ表示関数
//===========================================================================================================
function dispBlogMain(c, blogId, json, first_flag) {
    	
    //■test
	//alert("a");
	
	c.innerHTML = '';
	
	if (typeof(BlockEdit) == 'undefined')
		SWFAddress.addEventListener(SWFAddressEvent.CHANGE, loadHandler);
	var skin = getSkinClass(c);

	// タイトル
	//■090914
	
	/*
	var h3div = null;
		h3div = jQuery('<div class="h3"/>').appendTo(c);
	
	var h3 = jQuery('<h3/>').appendTo(h3div);
	jQuery('<a href="javascript:;"></a>').append(json.feed.title.$t).bind('click', function(e) {
		SWFAddress.setValue('');
	}).appendTo(h3);
	jQuery('<span id="blog-pwd"></span>').appendTo(h3);
	*/
	
	
	// サブタイトル
	var subt = json.feed.subtitle;
	if (subt && subt.$t.length > 0)
		jQuery('<p class="lead"></p>').text(subt.$t).appendTo(c);
	
	var blogWrapper = jQuery('<div id="blogWrapper"/>').appendTo(c);
	
	// TODO: SWFAddressに統合。BlockEdit時は↓は必要
	if (typeof(BlockEdit) == 'undefined') {
	    var o = { 'path': SWFAddress.getPath(), 'skin': skin };
	    loadHandler(o, first_flag);
	} else
		json.feed.entry.each(function(e) {
			dispDetail(blogId, e, blogWrapper, skin);
		});
	
	jQuery(c).fadeIn(500);
	
	bdRefresh();
}


//===========================================================================================================
//■ロード
//===========================================================================================================
function loadHandler(evt, first_flag) {
    //alert("test");
    //alert(max_results);
	//■test
    //alert(first_flag);
    //■090908追記
    var i = 0;

    var path = evt.path;
    
	if (path == 'page') return;

	//■URLからパラメータを取得
	var args = path.split('/');
	var type = (args.length > 1) ? args[1] : '';
	var param1 = (args.length > 2) ? args[2] : '';
	var param2 = (args.length > 3) ? args[3] : '';

	//■先頭に戻るときのエラー回避
	var pageURI = document.URL;
	var pageURIarr = pageURI.split("#");
	if (pageURIarr.length > 1) {
	    if (pageURIarr[1] == "top") {
	        location.href = pageURIarr[0];
	    }
	}
	
	//■パラメータをページ番号とする
	//ラベルの指定が無いとき
	var connect = "";
	if (type != "label" && type != "detail" && type != "list" && type != "top" && type) {
	    param2 = type;
	} else if (!type) {
	    connect = "#/";
	}
	var blogWrapper = jQuery('#blogWrapper').empty();
	blogWrapper.attr('className', 'loading');
	
	var skin = blogWrapper[0].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.className;

	// 詳細ページ
	//■詳細ページ出力のときは、こちらをつかう？
	if (type == 'detail') {
		//■ブロッガーからJSON形式でデータを取得
	    var url = 'http://www.blogger.com/feeds/' + currentBlogId + '/posts/default/' + param1 + '?redirect=false&alt=json-in-script&callback=?';
	    // TODO: status動かないっぽい。代替見つける
		jQuery.getJSON(url, function(json, textStatus) {
			blogWrapper.removeAttr('className');
			blogWrapper.css('display', 'none');
			dispDetail(currentBlogId, json.entry, blogWrapper, skin);
			jQuery('#blog-pwd').text('');
			blogWrapper.fadeIn(500);	
		});
		pageTop(0);

	// トップページ、日別、ラベル
    } else {

        if (param2.length == 0) currentPage = 1;
		else currentPage = new Number(param2);

		var guide = '全てのお料理一覧';
		
		var label = '';
		if (type == 'label') {
			label = '/-/' + param1;
			guide = '「' + decodeURI(param1) + '」に合うお料理一覧';
		}
		
		var dt_condition = '';
		if (type == 'list') {
			var y = param1.substring(0, 4);
			var m = new Number(omitZero(param1.substring(4, 6)));
			var d = omitZero(param1.substring(6));
			var st = new Date(y, m - 1, d);
			var ed = new Date(y, m - 1, d, 23, 59, 59);
			dt_condition = '&published-min=' + formatFeedDate(st) +
						'&published-max=' + formatFeedDate(ed);

			guide = y + '年' + m + '月' + d + '日のお料理一覧';
		}

		//■JSONフィード取得設定100119=======================================
        
        //ページの表示数
		max_results = 13;
    
		
		//ページ目
		//ページ指定がある場合と、ラベルがない場合
		if (param2) {
		    var start_index = param2 * max_results - max_results + 1;
		} else {
	    	var start_index = 1;
	 }
		
		//■日付別リストが表示されないエラーを回避
		/*
		if (type == 'list') {
		    var start_index = 1;
		}
		*/
        //フィードURLの生成
		var url = 'http://www.blogger.com/feeds/' + currentBlogId + '/posts/default' +
			label +
			'?redirect=false&max-results=' + max_results +
		    '&start-index=' + start_index +
			dt_condition +
			'&alt=json-in-script&callback=?';
		
		// TODO: status動かないっぽい。代替見つける
		jQuery.getJSON(url, function(json, textStatus) {
		    blogWrapper.removeAttr('className');
		    blogWrapper.css('display', 'none');
            
		    if (json.feed.entry) {
		        json.feed.entry.each(function(e) {
		            //■■パラメータなしのリストHTML表示関数はここで実行している■■
		            //dispDetail(currentBlogId, e, blogWrapper, skin);
		            preLoad(currentBlogId, e, blogWrapper, skin);
		            dispList(currentBlogId, e, blogWrapper, skin, i);
		            i++;
		        });
		    }

		    //カテゴリリストと、戻るリンク
		    /*
		    var preURL = document.URL.split("#");
		    var topURL = preURL[0];
		    var topLink = '<a href="' + topURL + '">全ての記事一覧へ戻る</a>';
		    alert(topLink);
		    */

		    var labelTitle = jQuery('<h3/>').prependTo(blogWrapper).text(guide);
		    //jQuery('<span class="top_navi" />').appendTo(labelTitle).html(topLink);


		    //■URLからパラメータを取得
		    var args = SWFAddress.getPath().split('/');
		    var type = (args.length > 1) ? args[1] : '';
		    var param1 = (args.length > 2) ? args[2] : '';
		    var param2 = (args.length > 3) ? args[3] : '';

		    //■先頭に戻るときのエラー回避
		    var pageURI = document.URL;
		    var pageURIarr = pageURI.split("#");
		    if (pageURIarr.length > 1) {
		        if (pageURIarr[1] == "top") {
		            location.href = pageURIarr[0];
		        }
		    }

		    //■パラメータをページ番号とする
		    //ラベルの指定が無いとき
		    var connect = "";
		    if (type != "label" && type != "detail" && type != "top" && type) {
		        param2 = type;
		    } else if (!type) {
		        connect = "#/";
		    }


		    //■■ 100122 二重エラー回避=====================

		    //ie6以下の場合
		    var flg_ie6 = navigator.userAgent.indexOf("IE 6");

		    var label_add = true;
		    if (first_flag && flg_ie6 <= 0) {
		        var redirectURL = document.URL;

		        //「戻る」を押した場合のエラー処理=================
		        var flg_param = document.URL.indexOf("#");
		        var flg_label = document.URL.indexOf("label");
		        var urlArr = document.URL.split("#");

		        //ラベルが無くて、＃がある場合元のURLにリダイレクト
		        if (flg_param >= 0 && flg_label < 0) {
		            redirectURL = urlArr[0];

		            //ラベルがあって、パラメータ２が無い場合ラベルつきのURLにリダイレクト
		        } else if (flg_label >= 0 && !param2) {
		            redirectURL = document.URL + "/1";

		            //ラベルがあって、パラメータ２がある場合ラベルつき、ページ番号なしのURLにリダイレクト
		        } else if (flg_label >= 0 && param2) {
		            redirectURL = urlArr[0] + encodeURI("#/") + type + "/" + param1;

		        } else {
		            redirectURL = document.URL + encodeURI("#/1");
		        }
		        //リダイレクト
		        location.href = redirectURL;
		        var label_add = false;
		    }
		    var total_results = json.feed.openSearch$totalResults.$t;
		    blogWrapper.fadeIn(500);
		    pageNation(blogWrapper, path, total_results, max_results, label_add);
		    pageTop(0);
		});		
	}
}
//===========================================================================================================
//■■100219作成　ページの先頭へ移動
//===========================================================================================================
function pageTop(speed) {
    obj = document.getElementById('L03');
    y = obj.offsetTop;
    scrollTo(speed, y);
}
//===========================================================================================================
//■■100119作成　ページ送り
//===========================================================================================================
function pageNation(blogWrapper, path, total_results, max_results, label_add) {
    var pageURI = document.URL;
    
    if (path == 'page') return;

    //■URLからパラメータを取得
    var args = path.split('/');
    var type = (args.length > 1) ? args[1] : '';
    var param1 = (args.length > 2) ? args[2] : '';
    var param2 = (args.length > 3) ? args[3] : '';
    
    //■パラメータをページ番号とする
    //ラベルの指定が無いとき
    var connect = "";
    if (type != "label" && type != "detail" && type != "list" && type) {
        var pageURIarr = pageURI.split('#');
        param2 = type;        
    } else if (!type) {
        connect = "#/";
    }

    if (param2) {
        var next_page = parseInt(param2) + 1;
        var pre_page = parseInt(param2) - 1;
    } else if (!param2 || param2 == 1) {
        var next_page = 2;
        var pre_page = false;
    }

    //var pageURIarr = pageURI.split("#");
    //alert(pageURIarr.length);
    if (pageURI.indexOf("#", 0) < 1) {  
        connect = "#/";
    }
    
    //元のURLから次のページ番号を作る
    var pageURI_last = pageURI.length - pageURI.lastIndexOf('/');
    var nopageURI = pageURI;
    if (pageURI_last == 1) {
        nopageURI = pageURI;
    } else if (pageURI_last == 2) {
        nopageURI = pageURI.slice(0, pageURI.length - 1);
    } else if (pageURI_last == 3) {
        nopageURI = pageURI.slice(0, pageURI.length - 2);
    } else if (!connect) {
        nopageURI = pageURI + "/";
    }

    //一覧ページでリロードしたときのバグ回避
    if (type == "label") {
        var pageURIarr = pageURI.split('#');
        nopageURI = pageURIarr[0] + "#";
        connect = '/label/' + param1 + '/';
    }
    
    //日付ページでリロードしたときのバグ回避
    if (type == "list") {
        var pageURIarr = pageURI.split('#');
        nopageURI = pageURIarr[0] + "#";
        connect = '/list/' + param1 + '/';
    }
     
    //詳細ページから来たときにバグ回避
    if (pageURI.indexOf('detail') > 0) {
        var pageURIarr = pageURI.split('#');
        nopageURI = pageURIarr[0] + "#";
    }
    
    /*
    //100219 上のページ送り
    var page_nate = jQuery('<div class="pagenate"/>').prependTo(blogWrapper);
    //var page_list = jQuery('<li/>').appendTo(page_nate);
    if (pre_page) {
        page_nate.append('<span class="navi_left"><a href="' + nopageURI + connect + pre_page + '">前のページへ</a></span>');
    }
    if (next_page - 1 < total_results / max_results) {
        page_nate.append('<span class="navi_right"><a href="' + nopageURI + connect + next_page + '">次のページへ</a></span>');
    }
    */
    
    //100219 下のページ送り
    var page_nate_bottom = jQuery('<div class="pagenate"/>').appendTo(blogWrapper);
    //var page_list = jQuery('<li/>').appendTo(page_nate_bottom);
    if (pre_page) {
        page_nate_bottom.append('<span class="navi_left"><a href="' + nopageURI + connect + pre_page + '">前のページへ</a></span>');
    }
    if (next_page - 1 < total_results / max_results) {
        page_nate_bottom.append('<span class="navi_right"><a href="' + nopageURI + connect + next_page + '">次のページへ</a></span>');
    }
    page_nate_bottom.append('<br class="clear">');
}

//===========================================================================================================
//■■0909作成
//===========================================================================================================
function preLoad(blogId, e, blogWrapper, skin) {
    var content = e.content.$t;  
    var content = content.replace(/s400/g, "s128");
    var content = content.replace(/s200/g, "s128");
    var tag = content.charAt(content.length - 156);
    var slice_point = null;
    
    var wrapper = jQuery('<div class="entryWrapperHidden"/>').appendTo(blogWrapper);
    wrapper.append(content);

    //■091013 画像が無いとき
    jQuery("img[src*='https://blogger.googleusercontent.com/tracker/']").attr("src", "_userdata/blog_module/sync/images/no_image.gif");  
}

//===========================================================================================================
//■0909作成　ブログのリスト表示
//===========================================================================================================
function dispList(blogId, e, blogWrapper, skin, i) {

    //価の生成================================================================
    //テキストの抽出
    var text = jQuery(".entryWrapperHidden:eq(" + i + ")").text();
    text = text.substr(0, 120);
    //最初の画像の抽出
    var img_path = jQuery(".entryWrapperHidden:eq(" + i + ") img:first").attr("src");
    //alert(img_path);
    
    //投稿日時をパース　d.year d.month d.day
    //var d = parseFeedDate(e.published.$t);
    //var date = d.year + '年' + d.month + '月' + d.day + '日  ' + d.tm
    //投稿日時のタグを出力
    //jQuery('<dt></dt>').append(d.year + '年' + d.month + '月' + d.day + '日  ' + d.tm).appendTo(wrapper);

    //タグの作成==============================================================
    var ary = e.id.$t.split('-');
    //alert(e.id.$t);   tag:blogger.com,1999:blog-4015323456945510852.post-8906535198852163956
    var eid = ary[ary.length - 1];
    //alert(eid);   8906535198852163956

    var wrapper = jQuery('<div class="entryWrapperList"/>').appendTo(blogWrapper);
    var img_box = jQuery('<div class="imgBox"/>').appendTo(wrapper);
    var img = jQuery('<img/>');
    var img = img.attr({ "src": img_path });

    var a_img = jQuery('<a href="#/' + 'detail/' + eid + '"></a>').append(img).appendTo(img_box);
    /*090914コメントアウト
    var a_img = jQuery('<a href="javascript:;"></a>').append(img).bind('click', { blogId: blogId, entryId: eid }, function(e) {
    //■詳細ページへのURLをIDを使って作成
    SWFAddress.setValue('detail/' + e.data.entryId);
    }).appendTo(img_box);
    */
    
    var dl = jQuery('<dl/>').appendTo(wrapper);
    var dt = jQuery('<dt/>').appendTo(dl);
   // var dd = jQuery('<dd/>').appendTo(dl);
   // var p = jQuery('<p/>').append(text + "…").append("<br>" + date).appendTo(wrapper);   日付を出力するばあいはこちらを使う
    var p = jQuery('<p/>').append(text + "…").appendTo(wrapper);
    jQuery('<p/>').appendTo(p);
    //var span = jQuery('<span/>').appendTo(p);
    jQuery('<br clear="all">').appendTo(wrapper);

    //■090914追記
    //list.htmlの詳細ページへリンク
    var a_title = jQuery('<a href="#/' + 'detail/' + eid + '"></a>').append(e.title.$t).appendTo(dt);
      
    /*090914コメントアウト
    var a_title = jQuery('<a href="javascript:;"></a>').append(e.title.$t).bind('click', { blogId: blogId, entryId: eid }, function(e) {
    //■詳細ページへのURLをIDを使って作成
    SWFAddress.setValue('detail/' + e.data.entryId);
    }).appendTo(dt);
    */
    
    /*
    var a_span = jQuery('<a href="javascript:;"></a>').append('→詳細はこちら').bind('click', { blogId: blogId, entryId: eid }, function(e) {
        //■詳細ページへのURLをIDを使って作成
        SWFAddress.setValue('detail/' + e.data.entryId);
    }).appendTo(span);
    */
}

//===========================================================================================================
//■HTMLタグを生成する関数
//===========================================================================================================
//■eはjsonデータの"feed":
function dispDetail(blogId, e, blogWrapper, skin) {
	//■test
	//alert("c");
	
	var wrapper = jQuery('<div class="entryWrapper"/>').appendTo(blogWrapper);
	var h2 = null;
	
	//■記事のタイトルタグの出力
	h2 = jQuery('<h2/>');
	//■上で書いたh2タグを<div class="h2">で囲む
	jQuery('<div class="h2"></div>').append(h2).appendTo(wrapper);

	var ary = e.id.$t.split('-');
	//var test = e.id.$t;
	//alert(test);	
	
	var eid = ary[ary.length-1];
	//■タイトルと詳細ページへのリンク
	//===============================================================================
	var a = jQuery('<a href="javascript:;"></a>').append(e.title.$t).bind('click', {blogId: blogId, entryId: eid}, function(e) {
		//■詳細ページへのURLをIDを使って作成
		SWFAddress.setValue('detail/' + e.data.entryId);
	}).appendTo(h2);
	
	//■投稿日時をパース　d.year d.month d.day
	//var d = parseFeedDate(e.published.$t);
	//■投稿日時のタグを出力
	//jQuery('<address class="ar"></address>').append(d.year + '年' + d.month + '月' + d.day + '日  ' + d.tm).appendTo(wrapper);
	
	//■記事の内容を出力
	wrapper.append(e.content.$t + '<div class="pagenate"><span class="navi_right"><a href="#" onClick="history.back(); return false;">一覧に戻る</a></span></div><br class="clear">');
	//■090907追記（テスト）
	//jQuery("img").css("border","solid 3px #ffffff");
	var contents = e.content.$t;



	//■以下は詳細ページ限定===============================================================================
	//■投稿者、コメントリンクの表示
	/*
	var link = findCommentLink(e.link);
	var footer = jQuery('<p class="kakomi ar"/>').append('投稿者：');
	jQuery('<div class="kakomi"/>').append(footer).appendTo(wrapper);
		
	for (var i=0; i<e.author.length; i++) {
	if (i > 0) footer.append(', ');
	var auth = e.author[i];
	if (auth.uri)
	jQuery('<a target="_blank"></a>').text(auth.name.$t).attr('href', auth.uri.$t).appendTo(footer);
	else
	footer.append(auth.name.$t);
	}
	
	footer.append('   ');
	
	a = jQuery('<a></a>').attr({href: link.href, title: link.title});
	a.text(link.text);
	a.appendTo(footer);
	
	jQuery('<div class="hr"></div>').appendTo(wrapper);	
	*/
}

//===========================================================================================================
//■コメントリンク表示
//===========================================================================================================
function findCommentLink(links) {
	var o = {};
	for (var i=0; i<links.length; i++) {
		var link = links[i];
		if (link.rel == 'replies') {
			if (link.type == 'text/html') {
				o.href = link.href;
				o.text = link.title;
			} else {
				o.title = link.title;
			}
		}
	}
	return o;
}


//===========================================================================================================
//■カレンダー表示
//===========================================================================================================
function dispBlogSide(c) {
	c.innerHTML = '';

	// カレンダー
	/*
	var calWrap = jQuery('<div class="calWrapper"></div>').appendTo(c);
	jQuery('<h3 class="ac" id="blog-calendar-ym"></h3>').appendTo(calWrap);
	var calHdr = jQuery('<div class="calHdr"></div>').appendTo(calWrap);
	jQuery('<a href="javascript:;" class="prevM"><<</a>').appendTo(calHdr).click(function(e) {
		moveMonth(-1);
	});
	jQuery('<a href="javascript:;" class="nextM">>></a>').appendTo(calHdr).click(function(e) {
		moveMonth(1);
	});
	jQuery('<div class="hr clear"></div>').appendTo(calWrap);
	var calArea = jQuery('<div id="blog-calendar-area"></div>').appendTo(calWrap);
	
	jQuery('<div class="hr"></div>').appendTo(c);
	
	*/
	
	// カテゴリー
	jQuery('<h4>カテゴリー</h4>').appendTo(c);
	jQuery('<p>商品名を選択していただきますと、<br />商品別に過去のレシピが表示されます。</p>').appendTo(c);
	var ul = jQuery('<ul id="category-list" class="disc"></ul>').appendTo(c);
	
	jQuery('<div class="hr"></div>').appendTo(c);
	
	jQuery(c).fadeIn(500);
	
	bdRefresh();
}

//======================================================================================
//■ラベル表示
//======================================================================================
function loadCategory() {
	if (mainJson!=null && mainJson.feed.entry) {
		var ul = jQuery('#category-list');
		if (ul.length == 0) return;
		mainJson.feed.entry.each(function(e) {
		    if (e.category) {
		        for (var i = 0; i < e.category.length; i++) {
		            var nm = e.category[i].term;
		            //■■■091013　ラベルが動作しないバグ修正
		            var pageURI = document.URL;
		            //alert(pageURI.indexOf("#"));
		            if (pageURI.indexOf("#") >= 1) {
		                var matches = pageURI.split("#");
		                var baseURI = matches[0];
		                var baseNumber = matches[1];
		            } else {
		                var baseURI = pageURI;
		            }

		            if (jQuery.inArray(nm, catList) == -1) {
		                /*
		                var a = jQuery('<a href="javascript:;"></a>').text(nm).click(function() {
		                SWFAddress.setValue('label/' + nm);
		                });
		                */

		                var a = jQuery('<a href="' + baseURI + '#/label/' + nm + '"></a>').text(nm);

		                jQuery('<li></li>').append(a).appendTo(ul);
		                catList.push(nm);
		            }
		        }
		    }
		});
	}
}

//======================================================================================
function moveMonth(amont) {
	if (currentYm == null) currentYm = getYm();
	currentYm.setMonth(currentYm.getMonth() + amont);
	var ym = String(currentYm.getFullYear()) + zeroPad(String(currentYm.getMonth() + 1));
	loadCalendar(ym);
}

function loadCalendar(ym) {
	var wrap = jQuery('#blog-calendar-area');
	wrap.empty();
	wrap.attr('className', 'loading');
	
	var y, m;
	if (typeof(ym) == 'undefined') {
		var d = new Date();
		y = d.getFullYear();
		m = d.getMonth() + 1;
	} else {
		y = new Number(ym.substring(0, 4));
		sm = ym.substring(4);
		if (sm.substring(0, 1) == '0') sm = sm.substring(1);
		m = new Number(sm);
	}
	
	jQuery('#blog-calendar-ym').text(y + '年 ' + m + '月');
	
	var st = new Date(y, m - 1, 1);
	var ed = new Date(y, m, 0, 23, 59, 59);	//月末
	
	var url = 'http://www.blogger.com/feeds/' + currentBlogId + '/posts/default?redirect=false' +
		'&published-min=' + formatFeedDate(st) +
		'&published-max=' + formatFeedDate(ed) +
		'&alt=json-in-script&callback=?';
	jQuery.getJSON(url, function(json, textStatus) {
		wrap.removeAttr('className');
		
		var list = [];
		if (json.feed.entry) {
			json.feed.entry.each(function(e) {
				var o = {
					title: e.title.$t,
					pubdate: parseFeedDate(e.published.$t)
				};
				list.push(o);
			});
		}
		
		var calTbl = jQuery('<table id="blog-calendar"></table>').appendTo(wrap);
		
		var tr  = jQuery('<tr></tr>').appendTo(calTbl);
		for (var i=0; i<7; i++) {
			var d = '';
			switch (i) {
				case 0: d = '日'; break;
				case 1: d = '月'; break;
				case 2: d = '火'; break;
				case 3: d = '水'; break;
				case 4: d = '木'; break;
				case 5: d = '金'; break;
				case 6: d = '土'; break;
			}
			jQuery('<th>' + d + '</th>').appendTo(tr);
		}
		
		var day = 1;
		var dt = st;
		var stw = dt.getDay();
		var iniMon = dt.getMonth();
		var inCal = false;
		for (var i=0; i<6; i++) {
			tr = jQuery('<tr></tr>').appendTo(calTbl);
			for (var j=0; j<7; j++) {
				if (i==0 && !inCal && j==stw) inCal = true;
				
				if (inCal) {
					//■ポイント
					var e = findEntry(dt, list);
					
					if (e != null) {
						var td = jQuery('<td></td>').appendTo(tr);
						var a = jQuery('<a href="javascript:;"></a>').attr('title', e.title).text(dt.getDate()).appendTo(td).click(function(evt) {
							SWFAddress.setValue('list/' + this.rel);
						});
						a.attr('rel', e.pubdate.ymd);
					} else {
						jQuery('<td></td>').appendTo(tr).text(dt.getDate());
					}
					day++;
					dt.setDate(day);
					if (dt.getMonth() != iniMon) inCal = false;
				} else {
					jQuery('<td></td>').appendTo(tr).html(' ');
				}
			}
			if (i > 1 && inCal == false) break;
		}
		
	});
}

//======================================================================================
function findEntry(dt, list) {
	for (var i=0; i<list.length; i++) {
		var o = list[i];
		var pub = o.pubdate;
		if (dt.getFullYear() == pub.year
			&& dt.getMonth() + 1 == pub.month
			&& dt.getDate() == pub.day) {
			return o;
		}
	}
	return null;
}

//======================================================================================
/**********
V I D E O
********/
function dispVideo(c, sid) {
	var swf = 'http://sync-res.digitalstage.jp/_modules/swf/ytplayer.swf';
	buf = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'
		+ ' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"';
	
	buf += ' width="746" height="430" ';
	buf += '>';
	
	buf += '<param name="movie" value="' + swf + '">';
	buf += '<param name="allowFullScreen" value="true">';
	buf += '<param name="allowScriptAccess" value="always">';
	//buf += '<param name="allowScriptAccess" value="sameDomain">';
	buf += '<param name="align" value="middle">';
	buf += '<param name="scale" value="showall">';
	buf += '<param name="quality" value="high">';
	buf += '<param name="wmode" value="transparent">';
	buf += '<param name="flashVars" value="feedURL=' + sid + '">';
	
	if (!bindobj.ie) {
		buf += '<embed src="' + swf + '" type="application/x-shockwave-flash"'
		buf += ' width="746" height="430" ';
		
		buf += ' allowFullScreen="true"';
		buf += ' allowScriptAccess="always"';
		//buf += ' allowScriptAccess="sameDomain"';
		buf += ' align="middle"';
		buf += ' scale="showall"';
		buf += ' quality="high" wmode="transparent"';
		buf += ' flashVars="feedURL=' + sid + '"';
		buf += ' pluginspage="http://www.adobe.com/go/getflashplayer_jp"></embed>';
	}
	
	buf += '</object>';
	buf += '<br><br>';
	
	c.innerHTML = buf;
	c.style.display = '';
	c.style.textAlign = 'center';
	
	bdRefresh();
	
}


/*******
 * Utils
 ********/
function getYm() {
	var d = new Date();
	d.setDate(1);
	d.setHours(0);
	d.setMinutes(0);
	d.setSeconds(0);
	d.setMilliseconds(0);
	return d;
}

// feed 日付変換
function formatFeedDate(dt) {
	var y = String(dt.getFullYear());
	var m = zeroPad(String(dt.getMonth() + 1));
	var d = zeroPad(String(dt.getDate()));
	var h = zeroPad(String(dt.getHours()));
	var mi = zeroPad(String(dt.getMinutes()));
	var s = zeroPad(String(dt.getSeconds()));
	return y + '-' + m + '-' + d + 'T' + h + ':' + mi + ':' + s + '%2b09:00';
}

// feed 日付解析
function parseFeedDate(s) {
	var local = s.substring(0, s.length - 6);
	var ary = local.split('T');
	var dary = ary[0].split('-');
	var wk = ary[1].split('.');
	var tary = wk[0].split(':');
	var ms = wk[1];
	var o = {
		year: dary[0],
		month: omitZero(dary[1]),
		day: omitZero(dary[2]),
		hour: omitZero(tary[0]),
		min: omitZero(tary[1]),
		sec: omitZero(tary[2]),
		tm: omitZero(tary[0]) + ':' + tary[1]
	};
	o['ymd'] = o.year + zeroPad(o.month) + zeroPad(o.day);
	return o;
}

function zeroPad(s) {
	if (s.length==1) return '0' + s;
	return s;
}

// ゼロ除去。先頭のみ
function omitZero(s) {
	if (s.substring(0, 1) == '0') return s.substring(1);
	return s;
}

function breakToTag(str) {
	rtn = str.replace(/\r\n/ig, '<br>');
	rtn = rtn.replace(/\n/ig, '<br>');
	rtn = rtn.replace(/\r/ig, '<br>');
	return rtn;
}

function bdRefresh() {
	if (typeof(BlockEdit) != 'undefined') {
		BlockEdit.resize();
	}
}

