/**
 * version:2011-05-17
 */
jQuery.fnbind = function(t, fn){ return function() { return fn.apply(t, arguments);}};
var SYNC3_SERVER = 'sync3-cnsl.digitalstage.jp/';
var feedManager = null;

// 初期ロード
$(function(){

	// サブメニュー
	var h = $('#globalnavi div.gmenu > ul').height();
	$('#globalnavi li.li1').each(function(){
		$('ul', this).each(function(){
			var ulw = $('li', this).width();
			$(this).css({width:ulw});
			var li = $('li', this).css({
				display: 'block',
				/*height: h,*/
				overflow: 'hidden'
			});
			$('a', li).css({
				/*width: 200,*/
				fontSize: '80%'
			});
			$(this).css({
				display: 'none',
				/*width: 120,*/
				position: 'absolute',
				zIndex: 9999/*,
				height: h * li.size()*/
			});
		});
	}).hover(
		function(){
			if($('ul', this).css("display") == "none") $('ul', this).height(0);
			$('ul', this).show();
		},//stop().slideDown(100);},
		function(){
			$('ul', this).hide();
		}//stop().slideUp(100);}
	);

	$('.pick_bukken').each(function() {
		var area = $(this);

		var ids = area.attr('ids');
		var memberid = area.attr('memberid');
		var groupid = area.attr('groupid');
		var fields = area.attr('dispFields').split(',');

		var columnNum = area.attr('columnNum');
		var dispSize = area.attr('dispSize');
		var position = area.attr('position');

		// 表示場所と段組と表示サイズによって取得する物件件数を変える
		var hits = (position) ? 1 : columnNum;
		switch (dispSize) {
		case 'L': hits = hits * 3;
			break;
		case 'M': hits = hits * 2;
			break;
		default:
			break;
		}

		if(ids != "") {
			// 指定された物件件数で絞る
			var idsArray = ids.split(',');
			var pids = '';
			for(var i = 0;i < hits && i < idsArray.length;i++) {
				if(i != 0) pids += ',';
				pids += idsArray[i];
			}

			$.ajax({
				type: "POST",
				url: "/b4h_customer/api/pick",
				dataType: "json",
				data: {
					ids: pids,
					memberid: memberid,
					groupid: groupid,
					otherCompanyFlag: area.attr('otherCompanyFlag'),
					payFlag: area.attr('payFlag'),
					hits: hits
				},
				success: function(data, dataType) {
					var idlist = ids.split(',');
					var forNum = 0;
					if (idlist.length > hits) {
						forNum = hits;
					} else {
						forNum = idlist.length;
					}
					var rowset = new Array();
					var k = 0;
					for (var j = 0; j < forNum; j++) {
						for(var i = 0;i < data.ROWSET.length;i++) {
							if (idlist[j] == data.ROWSET[i].ID) {
								rowset.push(data.ROWSET[i]);
								k++;
								break;
							}
						}
						if( k % columnNum == 0) {
							viewBukken(area, fields, rowset);
							rowset = new Array();
							k = 0;
						}
					}
					if(rowset.length > 0) {
						viewBukken(area, fields, rowset);
					}

					resizeCover();
				}
			});
		}
	});

	$('.search_bukken').each(function() {
		var area = $(this);

		var columnNum = area.attr('columnNum');
		var dispSize = area.attr('dispSize');
		var position = area.attr('position');

		// 表示場所と段組と表示サイズによって取得する物件件数を変える
		var hits = (position) ? 1 : columnNum;
		switch (dispSize) {
		case 'L': hits = hits * 3;
			break;
		case 'M': hits = hits * 2;
			break;
		default:
			break;
		}

		var params = {
				hits: hits,
				memberid: area.attr('memberid'),
				groupid: area.attr('groupid'),
				otherCompanyFlag: area.attr('otherCompanyFlag'),
				payFlag: area.attr('payFlag'),
				addr1: area.attr('addr1'),
				//eki: area.attr('eki'),
				ccf: area.attr('ccf'),
				btsg: area.attr('btsg'),
				moneyroom: area.attr('moneyroom'),
				moneyroomh: area.attr('moneyroomh'),
				moneycombo: area.attr('moneycombo'),
				housearea: area.attr('housearea'),
				houseareah: area.attr('houseareah'),
				madori: area.attr('madori'),
				houseage: area.attr('houseage'),
				walkminutesh: area.attr('walkminutesh'),
				pictmadori: area.attr('pictmadori'),
				pictmisc: area.attr('pictmisc'),
				panorama: area.attr('panorama'),
				newdate: area.attr('newdate'),
				balconyarea: area.attr('balconyarea'),
				flgused: area.attr('flgused'),
				landarea: area.attr('landarea'),
				landareah: area.attr('landareah'),
				buscombo: area.attr('buscombo'),
				tbg: area.attr('tbg'),
				housekouzou: area.attr('housekouzou'),
				rimawari: area.attr('rimawari'),
				genkyo: area.attr('genkyo')
		};

		// 駅条件がある場合はそれを優先する
		var rosen = area.attr('rosen');
		var eki = area.attr('eki');
		if(eki == '') {
			params.rosen = rosen;
		} else {
			params.eki = eki;
		}

		var fields = area.attr('dispFields').split(',');
		$.ajax({
			type: "POST",
			url: "/b4h_customer/api/search",
			dataType: "json",
			data: params,
			success: function(data, dataType) {

				var rowset = new Array();
				for(var i = 0;i < data.ROWSET.length;i++) {
					rowset.push(data.ROWSET[i]);

					if( (i + 1) % columnNum == 0) {
						viewBukken(area, fields, rowset);
						rowset = new Array();
					}
				}
				if(rowset.length > 0) {
					viewBukken(area, fields, rowset);
				}

				resizeCover();
			}
		});
	});

	$('#slider').nivoSlider({
		slices: 10,
		animSpeed: 1000,
		pauseTime:6000,
		startSlide: 0,
		puaseOnHover: false,
		controlNav: false,
		manualAdvance: location.search.indexOf('?edit=true') > -1
	});

	$('.disp_googleMaps').each(function() {
		var mapInfo = $(this);

		var lat = mapInfo.attr('lat');
		var lng = mapInfo.attr('lng');
		var zoom = Number(mapInfo.attr('zoom'));
		var type = mapInfo.attr('type');
		var markerLat = mapInfo.attr('markerLat');
		var markerLng = mapInfo.attr('markerLng');
		var title = mapInfo.attr('title');
		var main = mapInfo.attr('main');

		// googlemapの表示
		var point = new google.maps.LatLng(lat, lng);

	    var gmap = new google.maps.Map(document.getElementById("map_canvas"), {
	        zoom : zoom, // ズームレベルは17（詳細地図）
	        center : point,   // 地図の中央座標
	   	mapTypeId : type, // 地図の種類（通常の地図）
	        mapTypeControl : false   // コントローラーは表示しない
	    });
	    var markerPoint = new google.maps.LatLng(markerLat, markerLng);
		var marker = new google.maps.Marker({
			position:markerPoint,
			map:gmap,
			draggable:false
		});
		var infoWindow = new google.maps.InfoWindow({
		    position:point,
		    content: '<div style="width:150px;height:75px;"><p>' + title + '</p><p>' + main + '</p></div>'
		});
		if (title != "" && main != ""){

			infoWindow.open(gmap,marker);

			// 吹き出しが閉じられたら、マーカークリックで再び開くようにしておく
			google.maps.event.addListener(infoWindow, "closeclick", function() {
			  google.maps.event.addListenerOnce(marker, "click", function(event) {
			    infoWindow.open(gmap, marker);
			  });
			});
		}

	});

	$('.sync.blog').each(function(){
		var c = this;
		var ary = c.className.split(' ');
		var type = ary[1];
		var did = ary[2];

		var buf = jQuery(c).text();
		ary = buf.split(',');
		var gid = ary[0];
		var sid = ary[1];
		var did = ary[2];
		var option = null;

		if (buf.indexOf('{') > -1 && buf.indexOf('}') > -1) {
			var startidx = buf.indexOf('{');
			var endidx = buf.lastIndexOf('}');
			var json = buf.substring(startidx,endidx+1);
			option = jQuery.parseJSON(json);
		}

		if (feedManager == null) feedManager = new FeedManager();
		feedManager.addFeed(option.site, option.blogid, did, option, c, sid);

	});

	$('.disp_title').each(function(){
		var titleInfo = $(this);

		var bukkenSearchType = location.hash.replace('#', '');
		var title = titleInfo.attr('title');
		var titleSecond = titleInfo.attr('titleSecond');

		if (bukkenSearchType == 0) {
			$('#title').html(title + ' | ' + titleSecond);
		} else if (bukkenSearchType == 1) {
			$('#title').html(title);
		} else {
			$('#title').html(titleSecond);
		}
	});

	if (feedManager!=null) feedManager.load();
});




/**
 * 表示文字列取得
 * @param value
 * @param pre
 * @param post
 * @returns
 */
var dispValue = function(value, pre, post) {
	var rtn = '';
	if(typeof(value) == 'undefined' || value == null || value == '') {
		return "";
	} else {
		if(pre) rtn += pre;
		rtn += value;
		if(post) rtn += post;
	}
	return rtn;
};

/**
 * nvl関数
 * @param value
 * @param noValue 未入力だった場合出力する文字列
 * @returns
 */
var nvl = function(value, noValue) {
	if(typeof(value) == 'undefined' || value == null || value == '') {
		return noValue;
	}
	return value;
}

/**
 * 文字列を指定文字数で区切って表示
 */
var limitWords = function(value, max) {
	if(value.length > max) {
		return value.substr(0, max) + '…';
	}

	return value;
}

if(! Array.indexOf) {
	Array.prototype.indexOf = function(o)
	{
		for(var i in this) {
			if(this[i] == o) {
		 		return i;
	    	}
		}
		return -1;
	}
}

var bukkenTypeMap ={
	"1101":"土地",
	"1102":"借地権譲渡",
	"1103":"底地権譲渡",
	"1201":"一戸建て",
	"1202":"一戸建て",
	"1203":"テラスハウス",
	"1204":"テラスハウス",
	"1301":"マンション",
	"1302":"マンション",
	"1303":"公団",
	"1304":"公団",
	"1305":"公社",
	"1306":"公社",
	"1307":"タウンハウス",
	"1308":"タウンハウス",
	"1309":"リゾートマンション",
	"1401":"店舗(建物全部)",
	"1403":"店舗付住宅(建物全部)",
	"1404":"住宅付店舗(建物全部)",
	"1405":"事務所(建物全部)",
	"1406":"店舗事務所(建物全部)",
	"1407":"ビル(建物全部)",
	"1408":"工場",
	"1409":"マンション(建物全部)",
	"1410":"倉庫",
	"1411":"アパート",
	"1412":"寮",
	"1413":"旅館",
	"1414":"ホテル",
	"1415":"別荘",
	"1416":"リゾートマンション",
	"1420":"社宅",
	"1499":"建物全部その他",
	"1502":"店舗(建物一部)",
	"1505":"事務所(建物一部)",
	"1506":"店舗事務所(建物一部)",
	"1507":"ビル(建物一部)",
	"1509":"マンション(建物一部)",
	"1599":"建物一部その他",
	"1631":"店舗",
	"1632":"事務所",
	"1633":"店舗・事務所",
	"1699":"収益物件",
	"3101":"マンション",
	"3102":"アパート",
	"3103":"一戸建て",
	"3104":"テラスハウス",
	"3105":"タウンハウス",
	"3106":"間借り",
	"3110":"寮・下宿",
	"3201":"店舗(建物全部)",
	"3202":"店舗(建物一部)",
	"3203":"事務所",
	"3204":"店舗事務所",
	"3205":"工場",
	"3206":"倉庫",
	"3207":"一戸建て",
	"3208":"マンション",
	"3209":"旅館",
	"3210":"寮",
	"3211":"別荘",
	"3212":"土地",
	"3213":"ビル",
	"3214":"住宅付店舗(建物全部)",
	"3215":"住宅付店舗(建物一部)",
	"3231":"店舗",
	"3282":"駐車場",
	"3299":"事業用その他"
};


/**
 * 物件表示
 * @param area
 * @param fields
 * @param data
 * @returns
 */
var viewBukken = function(area, fields, rowset) {

	// テンプレートキーなしは要素自由選択とする
	var bukkenDisplayTmplKey = area.attr('bukkenDisplayTmplKey');
	if(!bukkenDisplayTmplKey) bukkenDisplayTmplKey = 'OWN';

	var position = dispValue(area.attr('position'));
	var columnNum = area.attr('columnNum');
	var dispSize = area.attr('dispSize');
	var baseUrl = area.attr('baseUrl');

	// テンプレートキー、段組テンプレートファイルを指定する
	var tplName = '_modules/bs/tpl/template';

	if(position != '') tplName += '_' + position;
	if(bukkenDisplayTmplKey != '') tplName += '_' + bukkenDisplayTmplKey;
	if(columnNum != '') tplName += '_' + columnNum;

	tplName += '.html';

	var DISP_FIELDS = {'01':false,'02':false,'03':false,'04':false,'05':false,'06':false,'07':false,'08':false,'09':false};
	for(var i = 0; i < fields.length; i++) {
		DISP_FIELDS[fields[i]] = true;
	}

	// 表示用のデータを作り替える
	for(var idx = 0;idx < rowset.length;idx++) {
		rowset[idx].ROSEN1NAME = dispValue(rowset[idx].ROSEN1NAME);
		rowset[idx].EKI1NAME = dispValue(rowset[idx].EKI1NAME);
		rowset[idx].BUKKENTYPE = bukkenTypeMap[rowset[idx].BUKKENTYPE];
		rowset[idx].BUKKENNAME = dispValue(rowset[idx].BUKKENNAME);
		rowset[idx].BUKKENNAMERUBY = dispValue(rowset[idx].BUKKENNAMERUBY, '（', '）');
		rowset[idx].ETC = dispValue(rowset[idx].ETC);
		rowset[idx].HOUSEAREATEXT = dispValue(rowset[idx].HOUSEAREATEXT);

		var photoaspect = '';
		var gaikan = '';
		var madori = '';
		var sonota = '';

		for (var i = 0; i < rowset[idx].PHOTOS.length; i++) {
			if (rowset[idx].PHOTOS[i].TYPENAME == '外観') {
				if (gaikan == '') {
					gaikan = rowset[idx].PHOTOS[i].URL;
				}
			} else if (rowset[idx].PHOTOS[i].TYPENAME == '間取り') {
				if (madori == '') {
					madori = rowset[idx].PHOTOS[i].URL;
				}
			} else {
				if (sonota == '') {
					sonota = rowset[idx].PHOTOS[i].URL;
				}
			}
		}
		if (gaikan != '') {
			photoaspect = gaikan;
		} else if (madori != '') {
			photoaspect = madori;
		} else {
			photoaspect = sonota;
		}

		if (photoaspect == '') {
			photoaspect = '_modules/bs/no-image.png';
		}

		rowset[idx].PHOTOASPECT = photoaspect;

		rowset[idx].HOUSEKOUZOULONGNAME = dispValue(rowset[idx].HOUSEKOUZOULONGNAME);

		if(rowset[idx].ROOMKAISUU == '0' || rowset[idx].ROOMKAISUU == null || rowset[idx].ROOMKAISUU == '') {
			rowset[idx].ROOMKAISUU = ' - ';
		} else {
			rowset[idx].ROOMKAISUU = dispValue(rowset[idx].ROOMKAISUU, '', '階');
		}

		if(rowset[idx].HOUSEKAISUU == '0') {
			rowset[idx].HOUSEKAISUU = ' - ';
		} else {
			rowset[idx].HOUSEKAISUU = dispValue(rowset[idx].HOUSEKAISUU, '', '階建');
		}

		if (rowset[idx].ROOMKAISUU == ' - ' && rowset[idx].HOUSEKAISUU == ' - ' ) {
			rowset[idx].ROOMKAISUU = '';
		} else {
			rowset[idx].ROOMKAISUU = rowset[idx].ROOMKAISUU + ' / ' + rowset[idx].HOUSEKAISUU;
		}

		// 地下階数
		if(rowset[idx].HOUSEKAISUUCHIKA == '0' || rowset[idx].HOUSEKAISUUCHIKA == null || rowset[idx].HOUSEKAISUUCHIKA == '') {
			rowset[idx].HOUSEKAISUUCHIKA = '';
		} else {
			rowset[idx].HOUSEKAISUUCHIKA = dispValue(rowset[idx].HOUSEKAISUUCHIKA, '', '階');
		}

		rowset[idx].MONEYSHIKIKINTEXT = dispValue(rowset[idx].MONEYSHIKIKINTEXT, '敷金');
		rowset[idx].MONEYREIKINTEXT = dispValue(rowset[idx].MONEYREIKINTEXT, '礼金');

		rowset[idx].NEWDATE = dispValue(rowset[idx].NEWDATE).replace('00:00:00', '');

		// 段組、表示場所によって「特徴」に文字数制限をかける
		var TOKUCHOU = dispValue(rowset[idx].TOKUCHOU);
		if(columnNum == '3') TOKUCHOU = limitWords(TOKUCHOU, 30);
		if(columnNum == '4') TOKUCHOU = limitWords(TOKUCHOU, 20);
		if(position == 'side') TOKUCHOU = limitWords(TOKUCHOU, 20);

		rowset[idx].TOKUCHOU = TOKUCHOU;

		// 0の場合は新築と表示
		var HOUSEAGE = dispValue(rowset[idx].HOUSEAGE);
		if(HOUSEAGE != '') {
			rowset[idx].HOUSEAGE = (HOUSEAGE == '0') ? '新築' : '築' + HOUSEAGE + '年';
		} else {
			rowset[idx].HOUSEAGE = '';
		}

		// 対象テンプレートによってい表示文字列を変える
//		if(bukkenDisplayTmplKey == 1) {
//			rowset[idx].WALKMINUTESTEXT1 = dispValue(rowset[idx].WALKMINUTESTEXT1, '徒歩', '');
//			rowset[idx].BUSTIME1 = dispValue(rowset[idx].BUSTIME1, ' バス', '分');
//			rowset[idx].MADORITEXT = dispValue(rowset[idx].MADORITEXT, (rowset[idx].WALKMINUTESTEXT1!='') ? '・':'');
//		} else if(bukkenDisplayTmplKey == 3) {
//			rowset[idx].WALKMINUTESTEXT1 = dispValue(rowset[idx].WALKMINUTESTEXT1, '徒歩', '');
//			rowset[idx].BUSTIME1 = dispValue(rowset[idx].BUSTIME1, ' バス', '分');
//
//			// 2つをまとめて括弧で囲む
//			rowset[idx].WALKMINUTESTEXT1 += rowset[idx].BUSTIME1;
//			rowset[idx].WALKMINUTESTEXT1 = dispValue(rowset[idx].WALKMINUTESTEXT1, '（', '）');
//
//
//			rowset[idx].MADORITEXT = dispValue(rowset[idx].MADORITEXT);
//		} else {
//			rowset[idx].WALKMINUTESTEXT1 = dispValue(rowset[idx].WALKMINUTESTEXT1, '徒歩', '');
//			rowset[idx].BUSTIME1 = dispValue(rowset[idx].BUSTIME1, ' バス', '分');
//			rowset[idx].MADORITEXT = dispValue(rowset[idx].MADORITEXT);
//		}
		rowset[idx].WALKMINUTESTEXT1 = dispValue(rowset[idx].WALKMINUTESTEXT1, '徒歩', '');
		rowset[idx].BUSTIME1 = dispValue(rowset[idx].BUSTIME1, ' バス', '分');
		rowset[idx].MADORITEXT = dispValue(rowset[idx].MADORITEXT);

		// 設備表示の取捨選択]
		rowset[idx].CCF = pickCCF(rowset[idx].CCF, 4);

		rowset[idx].DISP_FIELDS = DISP_FIELDS;

		// BASE URL
		rowset[idx].baseUrl = baseUrl;
	}

	var block = $('<div class="block"></div>');

	block.setTemplateURL(tplName);
	if(columnNum > 1) {
		block.processTemplate(rowset);
	} else {
		block.processTemplate(rowset[0]);
	}
	area.append(block);

	resizeCover();
};

// 優先的に表示する設備の配列
var priorityItems = new Array('310101', '340501', '340102', '320801');
/**
 * 設備表示の取捨選択
 *
 * @param ccf
 * @param maxcount
 * @returns
 */
var pickCCF = function(ccf, maxcount) {

	var rtnCCF = new Array();
	if (ccf != null) {
		// priorityItems宣言された設備を優先的に設定
		for(var i = 0;i < priorityItems.length;i++) {
			if(ccf[priorityItems[i]]) {
				rtnCCF.push(ccf[priorityItems[i]]);
				delete ccf[priorityItems[i]];
			}
		}
		// 規定数に足りない分を追加
		for(var ccfKey in ccf) {
			if(rtnCCF.length < maxcount) {
				rtnCCF.push(ccf[ccfKey]);
			} else {
				break;
			}
		}
	}
	return rtnCCF;
}

/*
 * ブログのパーツレンダラー
 */
function BlogHandler() {
	this.initialize.apply(this, arguments);
}
BlogHandler.prototype = {
	initialize: function(service, blogId, designId, option, c, sid) {
		this.service = service;
		this.blogId = blogId;
		this.designId = designId;
		this.option = option;
		this.oldId = sid;

		this.container = jQuery(c).empty();
		this.container.append('<span class="loading"></span>').show();

		this.rendered1st = false;
		// sideは最初のみ読み込み
		this.loadOnly1st = (this.designId.indexOf('side') > -1) ? true : false;
	},
	attachFeedLoader: function(loader) {
		this.feedLoader = loader;
	},
	loadStart: function() {
		if (this.rendered1st && this.designId.indexOf('side') == -1) {
			var wrap = this.container.children('#blogWrapper');
			wrap.empty();
			wrap.attr('className', 'loading');
		}
	},
	render: function(json) {
		this.json = json;

		switch (this.designId) {
		case 'title':
			this.renderTitle(json);
			break;
		case 'table':
			this.renderTable(json);
			break;
		case 'standard':
			this.renderStandard(json);
			break;
		case 'paging':
			this.renderPaging(json);
			break;
		case 'accordion':
			this.renderAccordion(json);
			break;
		case 'tab':
			this.renderTab(json);
			break;
		}

		if (typeof(this.labelArea) != 'undefined') {
			this.labelArea.html(json.headerGuide);
			this.labelArea.show();
		}

		this.rendered1st = true;

		resizeCover();
	},
	getHtmlLink: function(links) {
		var url = '';
		for (var i=0,l=links.length; i<l; i++) {
			var ln = links[i];
			if (ln.rel == 'alternate') {
				url = ln.href;
				break;
			}
		}
		return url;
	},
	renderHeaderV2: function(json) {
		var url = this.getHtmlLink(json.feed.link);

		// タイトル
		var h3div = null;
		/*
		if (skin.indexOf('standard') > -1) {
			h3div = nineSlice('slice h3', this.container);
		} else {*/
			h3div = jQuery('<div class="h3"/>').appendTo(this.container);
		//}

		var h3 = jQuery('<h3/>').appendTo(h3div);
		jQuery('<a href="' + url + '"></a>').append(json.feed.title.$t).appendTo(h3);

		// サブタイトル
		var subt = json.feed.subtitle;
		if (subt && subt.$t.length > 0)
			jQuery('<p class="lead"></p>').text(subt.$t).appendTo(this.container);
	},
	renderDetailV2: function(e, wrapper) {
		var url = this.getHtmlLink(e.link);

		var h2 = null;
		/*if (skin.indexOf('standard') > -1) {
			h2 = jQuery('<span class="mc"></span>');
			var h2core = jQuery('<span class="mm"></span>').append(h2);
			var h2div = jQuery('<h2></h2>').append(h2core)
			jQuery('<div class="h2"></div>').append(h2div).appendTo(wrapper);
		} else {*/
			h2 = jQuery('<h2></h2>');
			jQuery('<div class="h2"></div>').append(h2).appendTo(wrapper);
		//}
		var a = jQuery('<a href="' + url + '"></a>').append(e.title.$t).appendTo(h2);

		var bodyWrapper = jQuery('<div></div>').appendTo(wrapper);

		jQuery('<address class="ar"></address>').append(this.formatBlogDate(e.published.$t)).appendTo(bodyWrapper);

		if (e.content)
			bodyWrapper.append(e.content.$t).append('<br class="clear" />');
		else if (e.summary)
			bodyWrapper.append(e.summary.$t).append('<br class="clear" />');

		// for IE
		this.normalizeObj(bodyWrapper);

		if (this.option.link_words != '') {
			var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
			var p = jQuery('<p class="kakomi ar"></p>').append(anc);
			jQuery('<div class="kakomi" style="clear:both;"></div>').append(p).appendTo(bodyWrapper);
			jQuery('<div class="hr"></div>').appendTo(bodyWrapper);
		} else {
			jQuery('<div class="hr" style="clear:both;"></div>').appendTo(bodyWrapper);
		}


	},
	cutBody: function(str) {
		var pos = str.indexOf('<br');
		var cutPt = 0;
		if (pos==-1) {
			pos = str.indexOf('</p>');
			cutPt = 4;
		}
		if (pos==-1) {
			pos = str.indexOf('</div>');
			cutPt = 6;
		}
		if (pos > -1) return str.substring(0, pos + cutPt);
		return str;
	},
	renderStandard: function(json) {
		var clazz = this;

		jQuery.each(json.feed.entry, function(i, e) {
			clazz.renderDetailV2(e, clazz.container);
		});
	},
	renderTitle: function(json) {
		// タイトル、サブタイトル表示
		this.renderHeaderV2(json);

		var dl = jQuery('<dl></dl>');
		jQuery('<div class="indent lined"></div>').append(dl).appendTo(this.container);

		// 記事一覧
		var ents = json.feed.entry;
		for (var i=0, l=ents.length; i<l; i++) {
			var e = ents[i];
			jQuery('<dt></dt>').append(this.formatBlogDate(e.published.$t)).appendTo(dl);
			var url = this.getHtmlLink(e.link);
			var a = jQuery('<a href="' + url + '"></a>').append(e.title.$t);
			jQuery('<dd></dd>').append(a).appendTo(dl);
		}

		// more
		if (this.option.link_words != '') {
			var url = this.getHtmlLink(json.feed.link);
			var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
			var p = jQuery('<p class="kakomi"></p>').append(anc);
			jQuery('<div class="kakomi"></div>').append(p).appendTo(this.container);
		}
	},
	renderTable: function(json) {
		// タイトル、サブタイトル表示
		this.renderHeaderV2(json);

		var div = jQuery('<div class="indent tabular"></div>');
		var table = jQuery('<table class="table"></table>').appendTo(div);

		// 記事一覧
		var ents = json.feed.entry;
		for (var i=0, l=ents.length; i<l; i++) {
			var e = ents[i];
			var tr = jQuery('<tr></tr>');
			var th = jQuery('<th><div class="th">' + this.formatBlogDate(e.published.$t) + '</div></th>').appendTo(tr);
			var td = jQuery('<td></td>').appendTo(tr);
			var url = this.getHtmlLink(e.link);
			var a = jQuery('<a href="' + url + '">' + e.title.$t + '</a>');
			//var balloon = (skin.indexOf('standard') > -1) ? nineSlice('balloon', td) : jQuery('<div class="balloon"></div>').appendTo(td);
			var balloon = jQuery('<div class="balloon"></div>').appendTo(td);
			balloon.append(a);

			var affix = jQuery('<p class="affix"></p>').append(e.content.$t).appendTo(td);
			// forIE
			this.normalizeObj(affix);

			// more
			if (this.option.link_words != '') {
				var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
				jQuery('<p class="affix"></p>').append(anc).appendTo(td);
			}

			table.append(tr);
		}

		div.appendTo(this.container);

	},
	renderPaging: function(json) {
		var prev = jQuery('<a href="#" class="prev"></a>').append('前のエントリーへ').click(jQuery.fnbind(this, this.pagePrev));
		var next = jQuery('<a href="#" class="next"></a>').append('次のエントリーへ').click(jQuery.fnbind(this, this.pageNext));
		jQuery('<p class="ac"></p>').append(prev).append('|').append(next).appendTo(this.container);
		jQuery('<div class="hr"></div>').appendTo(this.container);

		blogWrapper = jQuery('<div id="blogWrapper"></div>').appendTo(this.container);

		// more
		if (this.option.link_words != '') {
			var url = this.getHtmlLink(json.feed.link);
			var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
			var p = jQuery('<p class="kakomi ar"></p>').append(anc);
			jQuery('<div class="kakomi" style="clear:both;"></div>').append(p).appendTo(this.container);
			jQuery('<div class="hr"></div>').appendTo(this.container);
		} else {
			jQuery('<div class="hr" style="clear:both;"></div>').appendTo(this.container);
		}

		var prevB = jQuery('<a href="#" class="prev"></a>').append('前のエントリーへ').click(jQuery.fnbind(this, this.pagePrev));
		var nextB = jQuery('<a href="#" class="next"></a>').append('次のエントリーへ').click(jQuery.fnbind(this, this.pageNext));
		jQuery('<p class="ac"></p>').append(prevB).append('|').append(nextB).appendTo(this.container);

		this.pageDisp(0);
	},
	pageNext: function() {
		if (this.pageIndex < this.json.feed.entry.length) this.pageDisp(this.pageIndex + 1);
	},
	pagePrev: function() {
		if (this.pageIndex > 0) this.pageDisp(this.pageIndex - 1);
	},
	pageDisp: function(idx) {
		var ents = this.json.feed.entry;
		if (ents.length > idx) {
			var e = ents[idx];
			blogWrapper = jQuery(this.container).children('#blogWrapper');
			blogWrapper.html('');

			var h2 = null;
			/*
			if (this.skin.indexOf('standard') > -1) {
				h2 = jQuery('<span class="mc"></span>');
				var h2core = jQuery('<span class="mm"></span>').append(h2);
				var h2div = jQuery('<h2></h2>').append(h2core)
				jQuery('<div class="h2"></div>').append(h2div).appendTo(blogWrapper);
			} else {*/
				h2 = jQuery('<h2></h2>');
				jQuery('<div class="h2"></div>').append(h2).appendTo(blogWrapper);
			//}
			var ary = e.id.$t.split('-');
			var eid = ary[ary.length-1];
			var url = this.getHtmlLink(e.link);
			var a = jQuery('<a href="' + url + '"></a>').append(e.title.$t).appendTo(h2);

			jQuery('<address class="ar"></address>').append(this.formatBlogDate(e.published.$t)).appendTo(blogWrapper);
			blogWrapper.append(e.content.$t + '<br /><br class="clear" />');

			// for IE
			this.normalizeObj(blogWrapper);

			if (idx == 0) {
				jQuery('a.prev').css('visibility', 'hidden');
			} else {
				jQuery('a.prev').css('visibility', 'visible');
			}

			if (idx == ents.length-1) {
				jQuery('a.next').css('visibility', 'hidden');
			} else {
				jQuery('a.next').css('visibility', 'visible');
			}

			this.pageIndex = idx;
		}
	},
	normalizeObj: function(dest) {
		if ( !jQuery.support.opacity ) {
			jQuery('object', dest).each(function(i, obj) {
				var jqObj = jQuery(obj);
				var ah = jqObj.attr('altHtml');
				if (ah.length > 0) jqObj.replaceWith(ah);
			});
		}
	},
	renderDetail: function(e, blogWrapper) {
		var wrapper = jQuery('<div class="entryWrapper"></div>').appendTo(blogWrapper);

		var h2 = null;
		//if (skin.indexOf('standard') > -1) {
		//	h2 = jQuery('<span class="mc"></span>');
		//	var h2core = jQuery('<span class="mm"></span>').append(h2);
		//	var h2div = jQuery('<h2></h2>').append(h2core)
		//	jQuery('<div class="h2"></div>').append(h2div).appendTo(wrapper);
		//} else {
			h2 = jQuery('<h2></h2>');
			jQuery('<div class="h2"></div>').append(h2).appendTo(wrapper);
		//}
		var ary = e.id.$t.split('-');
		var eid = ary[ary.length-1];
		var a = jQuery('<a href="javascript:;"></a>').append(e.title.$t).bind('click', {blogId: this.blogId, entryId: eid}, function(e) {
			SWFAddress.setValue('detail/' + e.data.entryId);
		}).appendTo(h2);

		jQuery('<address class="ar"></address>').append(this.formatBlogDate(e.published.$t)).appendTo(wrapper);
		wrapper.append(e.content.$t).append('<br class="clear" />');

		// for IE
		this.normalizeObj(wrapper);

		// 投稿者が取得できるのはBloggerのみ
		if (this.service == 'google') {
			var link = this.findCommentLink(e.link);
			var footer = jQuery('<p class="kakomi ar"></p>').append('投稿者：');
			/*if (skin.indexOf('standard') > -1) {
				var mm = nineSlice('slice kakomi', wrapper);
				mm.append(footer);
			} else {*/
				jQuery('<div class="kakomi"></div>').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('&nbsp;&nbsp;&nbsp;');

			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);

	},

	formatBlogDate: function(srcString) {
		var d = parseFeedDate(srcString);
		return d.year + '年' + d.month + '月' + d.day + '日&nbsp;&nbsp;' + d.tm;
	},

	findCommentLink: function(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;
	},

	findEntry: function(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;
	}
};

/*
 * ブログのFeed管理クラス
 */
function FeedManager() {
	this.initialize.apply(this, arguments);
}
FeedManager.prototype = {
	initialize: function() {
		this.db = {};
		this.gfeeds = [];
	},
	addFeed: function(service, blogId, designId, option, container, sid) {
		var handler = new BlogHandler(service, blogId, designId, option, container, sid);
		if (service=='google') {
			this.gfeeds.push(new FeedLoader(service, blogId, option, handler, sid));
		} else {
			var key = service + ':' + blogId;
			if (!(key in this.db)) {
				this.db[key] = new FeedLoader(service, blogId, option, handler, sid);
			} else {
				var ldr = this.db[key];
				ldr.addFeed(handler);
			}
		}
	},
	load: function(evt) {
		var path = '/';
		if (typeof(evt) != 'undefined') {
			path = evt.path;
		}

		if (path == 'page') return;

		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] : '';

		for (var i=0,l=this.gfeeds.length; i<l; i++) {
			var ldr = this.gfeeds[i];
			ldr.load(type, param1, param2);
		}

		for (var key in this.db) {
			var ldr = this.db[key];
			ldr.load(type, param1, param2);
		}
	}
};

/*
 * ブログのFeed読み込みクラス
 */
function FeedLoader() {
	this.initialize.apply(this, arguments);
}
FeedLoader.prototype = {
	initialize: function(service, blogId, option, handler, sid) {
		this.service = service;
		this.blogId = blogId;
		this.option = option;
		this.oldId = sid;
		this.loaded1st = false;
		this.detailTopMode = false;
		this.addFeed(handler);
	},
	addFeed: function(handler) {
		handler.attachFeedLoader(this);
		if (!this.handlers) this.handlers = [];
		this.handlers.push(handler);
	},
	load: function(type, param1, param2) {
		// ローディング表示
		this.doLoading();

		// ブックマークなどで、詳細ページが最初から読まれた場合の対処
		if (this.loaded1st == false && type == 'detail') {
			this.detailTopMode = true;
			this.getDetailTopFeed(type, param1, param2);
			return;
		}

		// 通常の読み込み
		var url = '';
		var loadOpt = {};
		var guide = '';
		var published_min = '';
		var published_max = '';

		if (type == 'label') {
			guide = ' − ラベル：「' + decodeURI(param1) + '」のリスト';

		} else 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);
			published_min = formatFeedDate(st);
			published_max = formatFeedDate(ed);

			guide = ' − ' + y + '年' + m + '月' + d + '日のリスト';
		}

		if (this.service == 'google') {
			var dt_condition = '';
			if (this.oldId != '') {
				url = getProtocol() + 'www.blogger.com/feeds/' + this.oldId + '/posts/default';
			} else if (this.blogId.length > 0) {
				url = 'http://' + this.blogId + '.blogspot.com/feeds/posts/default';
			}

			if (type == 'detail') {
				url += '/' + param1;

			} else if (type == 'label') {
				url += '/-/' + param1;

			} else if (type == 'list') {
				dt_condition = '&published-min=' + published_min +
							'&published-max=' + published_max;

			}

			url += '?redirect=false';
			url += dt_condition;
			if (type != 'label' && type != 'detail') url += '&max-results=' + this.option.max_results;
			url += '&alt=json-in-script&callback=?';

		} else {
			url = getSync3BaseUrl() + "blog/rss/json?callback=?";
			loadOpt = objClone(this.option);
			if (type == 'detail') loadOpt.entryid = param1;
			else if (type == 'label') loadOpt.category = param1;
			else if (type == 'list') {
				loadOpt.published_min = published_min;
				loadOpt.published_max = published_max;
			}
		}

		var clazz = this;

		jQuery.getJSON(url, loadOpt, function(json) {
			json.headerGuide = guide;

			if (clazz.detailTopMode && clazz.detailTopFeed != null) {
				clazz.detailTopFeed.feed.entry = [];
				clazz.detailTopFeed.feed.entry[0] = json.entry;
				json = clazz.detailTopFeed;
				clazz.detailTopMode = false;
			}

			clazz.feed = json;
			clazz.doCallback(json);
			clazz.loaded1st = true;
		});
	},
	getDetailTopFeed: function(type, param1, param2) {
		var url = '';
		var loadOpt = {};
		if (this.service == 'google') {
			if (this.oldId != '') {
				url = getProtocol() + 'www.blogger.com/feeds/' + this.oldId + '/posts/default';
			} else {
				url = 'http://' + this.blogId + '.blogspot.com/feeds/posts/default';
			}
			url += '?redirect=false&max-results=1&alt=json-in-script&callback=?';

		} else {
			url = getSync3BaseUrl() + "blog/rss/json?callback=?";
			loadOpt = objClone(this.option);
		}

		jQuery.getJSON(url, loadOpt, jQuery.fnbind(this, function(json) {
			this.detailTopFeed = json;
			this.loaded1st = true;
			this.load(type, param1, param2);
		}));

	},
	doLoading: function() {
		for (var i=0,l=this.handlers.length; i<l; i++) this.handlers[i].loadStart();
	},
	doCallback: function(json) {
		for (var i=0,l=this.handlers.length; i<l; i++) this.handlers[i].render(json);
	}
};

//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 objClone(obj) {
	var func = function(){};
	func.prototype = obj;
	return new func;
}

/*
BiNDZoom
*/
var myBindZoom = null;
function BiNDZoom() {
	this.initialize.apply(this, arguments);
}
BiNDZoom.prototype = {
	groupCount: 0,
	options: {
		resizeDuration: 160,
		showCounter: true
	},
	initialize: function(ancs, caps, options){
		jQuery.extend(this.options, options, {});

		this.imageWidth = 0;
		this.imageHeight = 0;
		this.firstClick = true;

		this.addSet(ancs, caps);

		var clazz = this;

		this.overlay = jQuery('<div id="bindboxslim-overlay"></div>').css('display', 'none').appendTo(document.body);
		this.overlay.click(function() {
			clazz.close();
		}).bind('touchend', function() {
			clazz.close();
		});

		this.bindbox = jQuery('<div id="bindboxslim"></div>').css({
			display: 'none'
		}).appendTo(document.body);
		if (!jQuery.browser.msie) this.bindbox.css('opacity', 0);

		this.image = jQuery('<div class="bindboxslim-image"></div>').appendTo(this.bindbox);

		this.closeBox = jQuery('<a id="bindboxslim-close"><span>close</span></a>');
		this.closeBox.click(function() {
			clazz.close();
		}).bind('touchend', function() {
			clazz.close();
		});
		jQuery('<div class="tl"></div>').append(this.closeBox).appendTo(this.image);
		this.image.append('<div class="tr"></div>').append('<div class="tc"></div>');

		var mm = jQuery('<div class="mm"></div>').append('<div class="ml"></div>').append('<div class="mr"></div>').appendTo(this.image);
		this.mc = jQuery('<div class="mc"></div>').appendTo(mm);

		// prev, next
		this.controlDiv = jQuery('<div id="bindboxslim-nav"></div>').appendTo(this.mc);
		this.prevLink = jQuery('<a id="bindboxslim-back"></a>').appendTo(this.controlDiv);
		this.nextLink = jQuery('<a id="bindboxslim-next"></a>').appendTo(this.controlDiv);
		this.prevLink.click(function() {
			clazz.previous();
		});
		this.nextLink.click(function() {
			clazz.next();
		});
		this.controlDiv.hide();

		// comment
		this.comment = jQuery('<div id="bindboxslim-text"></div>').appendTo(this.mc);

		// loading
		this.loading = jQuery('<div id="bindboxslim-loading"></div>').appendTo(this.mc);

		this.image.append('<div class="bl"></div>').append('<div class="br"></div>').append('<div class="bc"></div>');

		this.preloadPrev = new Image();
		this.preloadNext = new Image();
	},

	addSet: function(ancs, caps) {
		ancs = jQuery.extend([], ancs);
		caps = jQuery.extend([], caps);

		this.groupCount++;
		var groupName = "bindzoom-" + this.groupCount;

		var clazz = this;

		jQuery.each(ancs, function(i, el) {
			if (el.hasClass('bindzoom')) {
				el.attr('rel', groupName).click(function() {
					clazz.click(el)
					return false;
				}).bind('touchend', function() {
					clazz.click(el)
					return false;
				});

				if (!clazz.anchors) clazz.anchors = [];
				clazz.anchors.push(el);

				if (!clazz.captions) clazz.captions = [];
				clazz.captions.push(caps[i]);

			} else if (el.hasClass('bindpopup')) {
				el.click(function() {
					clazz.openURL(el);
					return false;
				});

				if (!clazz.pAnchors) clazz.pAnchors = [];
				clazz.pAnchors.push(el);

			}
		});

	},

	click: function(link){
		var j, imageNum, images = [];
		var cnt = 0;
		var clazz = this;
		jQuery.each(clazz.anchors, function(i, el) {
			if (el.rel == link.rel){
				images.push([el, clazz.captions[i], el.rel]);
				if (el == link) imageNum = cnt;
				cnt++;
			}
		});

		groupName = link.rel;

		if (typeof(this.currentGroup) != 'undefined'
			&& this.currentGroup == groupName
			&& typeof(this.activeImage) != 'undefined'
			&& this.activeImage == imageNum) {
			return false;
		}

		if (this.currentGroup != groupName) {
			this.images = images;
		}

		this.currentGroup = groupName;

		if (this.firstClick)
			return this.open(images, imageNum);
		else
			return this.changeImage(imageNum);
	},

	show: function(url, title){
		return this.open([[url, title]], 0);
	},

	open: function(images, imageNum){
		this.images = images;
		this.setup(true);

		//var img = jQuery(this.images[imageNum][0]);
		var img = this.images[imageNum][0];

		var pos = getPosition(img[0]);
		this.top = pos.top - 34;
		this.left = pos.left - 34;

		this.anchorHeight = img.height() + 64;
		this.anchorWidth = img.width() + 64;
		this.anchorTop = pos.top - 34;
		this.anchorLeft = pos.left - 34;

		this.bindbox.css({
			top: this.top,
			marginLeft: this.left,
			height: this.anchorHeight,
			width: this.anchorWidth,
			display: ''
		});

		this.overlay.css({
			height: jQuery(document).height(),
			opacity: 0,
			display: ''
		});
		this.overlay.fadeTo(this.options.resizeDuration, 0.7);

		return this.changeImage(imageNum);
	},

	openURL: function(link){
		this.toggleObjectVisible(true);

		var pos = getPosition(link);
		this.top = pos.top - 34;
		this.left = pos.left - 34;

		this.anchorHeight = jQuery(link).height() + 64;
		this.anchorWidth = jQuery(link).width() + 64;
		this.anchorTop = pos.top - 34;
		this.anchorLeft = pos.left - 34;

		this.bindbox.css({
			top: this.top,
			marginLeft: this.left,
			height: this.anchorHeight,
			width: this.anchorWidth,
			display: ''
		});

		this.overlay.css({
			height: jQuery(document).height(),
			opacity: 0,
			display: ''
		});
		this.overlay.fadeTo(this.options.resizeDuration, 0.7);

		this.step = 1;
		return this.nextEffectURL(link);
	},

	toggleObjectVisible: function(open){
		var tags = 'object' + (jQuery.browser.msie ? ',select' : ',embed');
		jQuery(tags).css('visibility', open ? 'hidden' : '');
	},

	setup: function(open){
		this.toggleObjectVisible(open);

		var clazz = this;
		if (open) {
			jQuery(document).bind('keydown', function(event) {
				switch (event.keyCode){
					case 27: case 88: case 67: clazz.close(); break;
					case 37: case 80: clazz.previous(); break;
					case 39: case 78: clazz.next();
				}
			});
		} else {
			jQuery(document).unbind('keydown');
		}
		this.step = 0;
	},

	previous: function(){
		return this.changeImage(this.activeImage-1);
	},

	next: function(){
		return this.changeImage(this.activeImage+1);
	},

	changeImage: function(imageNum){
		if (this.step || (imageNum < 0) || (imageNum >= this.images.length)) return false;
		this.step = 1;
		this.activeImage = imageNum;

		this.prevLink.css({visibility:'hidden'});
		this.nextLink.css({visibility:'hidden'});

		this.loading.show();

		var clazz = this;
		this.preload = new Image();
		this.preload.onload = function() {
			clazz.nextEffect();
		};
		this.preload.src = (this.images[imageNum][0]).attr('href');

		return false;
	},

	nextEffect: function(){
		switch (this.step++){
		case 1:
			this.image.className = '';

			var preWidth = this.imageWidth || 0;
			var preHeight = this.imageHeight || 0;
			this.imageWidth = this.preload.width;
			this.imageHeight = this.preload.height;
			if (this.imageWidth > document.body.offsetWidth - 50) {
				var rate = (document.body.offsetWidth - 50) / this.imageWidth;
				this.imageWidth = Math.round(this.imageWidth * rate);
				this.imageHeight = Math.round(this.imageHeight * rate);
			}

			this.loading.hide();

			this.img = document.getElementById('imgContents');
			if (this.img) this.mc[0].removeChild(this.img);
			this.img = jQuery('<img id="imgContents" src="' + (this.images[this.activeImage][0]).attr('href') + '">').css({
				maxWidth: this.imageWidth,
				maxHeight: this.imageHeight
			}).prependTo(this.mc);
			if (!jQuery.browser.msie) this.img.css('opacity', 0);

			if (this.firstClick) {
				this.img.css({
					width: this.anchorWidth - 64,
					height: this.anchorHeight - 64
				});
			}

			this.comment.html('');
			this.comment.append(jQuery('<div id="bindboxslim-comment"></div>').append('<p>' + this.images[this.activeImage][1] + '</p>'));
			this.comment.append(jQuery('<div id="bindboxslim-num"></div>').append(
				'<p>' + this.formatZero(this.activeImage+1) + '/' + this.formatZero(this.images.length) + '</p>'));

			if (this.activeImage) this.preloadPrev.src = (this.images[this.activeImage-1][0]).href;
			if (this.activeImage != (this.images.length - 1)) this.preloadNext.src = (this.images[this.activeImage+1][0]).href;

			if (preWidth != this.imageWidth || preHeight != this.imageHeight) {
				var clazz = this;
				var win = jQuery(window);
				var obj = {
					height: this.imageHeight + 120,
					width: this.imageWidth + 80,
					marginLeft: (win.width() - (this.imageWidth + 80)) / 2,
					top: win.scrollTop() + (win.height() / 15)
				};
				if (!jQuery.browser.msie) obj['opacity'] = 1;
				this.bindbox.animate(obj, this.options.resizeDuration);

				if (this.firstClick) {
					var iobj = {
						height: this.imageHeight,
						width: this.imageWidth
					};
					if (!jQuery.browser.msie) iobj['opacity'] = 1;
					this.img.animate(iobj, this.options.resizeDuration);
				} else {
					this.img.animate({
						height: this.imageHeight,
						width: this.imageWidth
					}, this.options.resizeDuration);
				}

				this.mc.animate({
					height: this.imageHeight + 40,
					width: this.imageWidth
				}, this.options.resizeDuration,
				function() {
					clazz.nextEffect();
				});
				break;
			}

			this.img.css({
				width: this.imageWidth,
				height: this.imageHeight
			});
			if (!jQuery.browser.msie) this.img.css('opacity', 1);

			this.step++;

		case 2:
			if (!jQuery.browser.msie) {
				var clazz = this;
				this.img.animate({opacity: 1}, this.options.resizeDuration,
				function() {
					clazz.nextEffect();
				});
			} else {
				this.nextEffect();
			}
			break;

		case 3:
			this.firstClick = false;

			this.comment.show();
			this.controlDiv.show();
			this.prevLink.show();
			this.nextLink.show();
			if (this.activeImage) this.prevLink.css({visibility: 'visible'});
			if (this.activeImage != (this.images.length - 1)) this.nextLink.css({visibility: 'visible'});
			this.step = 0;
		}
	},

	formatZero: function(src) {
		var s = new String(src);
		if (s.length < 3) {
			var buf = '';
			for (var i=0; i< 3-s.length; i++) buf += '0';
			return buf + s;
		}
		return s;
	},

	nextEffectURL: function(link){
		switch (this.step++){
		case 1:
			var ancH = 0, ancW = 0, scroll = false, autoFit = false;
			var ary = link.className.split(' ');
			for (var i=0; i < ary.length; i++) {
				var wk = ary[ i ];
				if (wk == 'bdscroll') scroll = true;
				else if (wk == 'bdautofit') autoFit = true;
				else if (wk.substring(0, 1) == 'h') ancH = new Number(wk.substring(1));
				else if (wk.substring(0, 1) == 'w') ancW = new Number(wk.substring(1));
			}

			if (autoFit) {
				var win = jQuery(window);
				ancW = win.width() - 80;
				ancH = win.height() - 80;
			}

			this.img = document.getElementById('imgContents');
			if (this.img) this.mc[0].removeChild(this.img);
			this.img = jQuery('<iframe id="imgContents" src="' + link.href + '" frameborder="0"></iframe>').prependTo(this.mc);
			this.img.hide();

			this.img.attr('width', ancW - 80);
			this.img.attr('height', '100%');

			if (scroll) {
				this.img.attr('scrolling', 'auto');
			} else {
				this.img.attr('scrolling', 'no');
				this.img.css({
					overflow: 'hidden',
					overflowX: 'hidden',
					overflowY: 'hidden'
				});
			}

			var clazz = this;
			var win = jQuery(window);
			var obj = {
				height: ancH + 80,
				width: ancW,
				marginLeft: (win.width() - ancW) / 2,
				top: win.scrollTop()
			};
			if (!jQuery.browser.msie) obj['opacity'] = 1;
			this.bindbox.animate(obj, this.options.resizeDuration);

			this.mc.animate({
				height: ancH,
				width: ancW - 80
			}, this.options.resizeDuration,
			function() {
				clazz.nextEffectURL();
			});
			break;

		case 2:
			this.firstClick = false;
			this.img.show();
			this.prevLink.hide();
			this.nextLink.hide();
			this.step = 0;
		}
	},

	closeEffect: function(){
		this.comment.hide();
		this.controlDiv.hide();

		this.overlay.fadeTo(this.options.resizeDuration, 0, function() {
			jQuery(this).hide();
		});

		var clazz = this;
		var obj = {
			height: this.anchorHeight,
			width: this.anchorWidth
		};
		if (!jQuery.browser.msie) obj['opacity'] = 0;
		this.img.animate(obj, this.options.resizeDuration,
		function() {
			clazz.closeEnd();
			var wk = clazz.img[0];
			if (wk.parentNode) wk.parentNode.removeChild(wk);
		});

		var bobj = {
			height: this.anchorHeight,
			width: this.anchorWidth,
			marginLeft: this.anchorLeft,
			top: this.anchorTop
		};
		if (!jQuery.browser.msie) bobj['opacity'] = 0;
		this.bindbox.animate(bobj, this.options.resizeDuration,
		function() {
			clazz.closeEnd();
		});

	},

	closeEnd: function() {
		this.bindbox.css({
			width: this.options.initialWidth,
			height: this.options.initialHeight
		});
		this.bindbox.hide();
	},

	close: function(){
		if (this.step < 0) return;
		this.step = -1;
		if (this.preload){
			this.preload.onload = function(){};
			this.preload = null;
		}
		// TODO: Effect STOP
		//for (var f in this.fx) this.fx[f].stop();
		this.firstClick = true;
		this.imageWidth = 0;
		this.imageHeight = 0;
		this.activeImage = -1;
		this.currentGroup = '';

		this.setup(false);

		this.closeEffect();

		return false;
	}
};

function getSync3BaseUrl() {
	return getProtocol() + SYNC3_SERVER;
}

function getProtocol() {
	return ('https:' == document.location.protocol ? 'https://':'http://');
}

function getPosition(el, overflown){
	overflown = overflown || [];
	//var el = this, left = 0, top = 0;
	var left = 0, top = 0;
	do {
		left += el.offsetLeft || 0;
		top += el.offsetTop || 0;
		el = el.offsetParent;
	} while (el);
	for (var i=0, l=overflown.length; i<l; i++) {
		var element = overflown[ i ];
		left -= element.scrollLeft || 0;
		top -= element.scrollTop || 0;
	}
	return {'left': left, 'top': top};
}

