jQuery(window).load(function() {
	if (location.search.indexOf('?edit=true') > -1) {
		var win = jQuery(window);

		// area
		jQuery('#area-header').prepend('<div class="area-dummy"><div class="bd-area-title">ヘッダー</div></div>');
		jQuery('#globalnavi').prepend('<div class="area-dummy"><div class="bd-area-title">グローバルナビ</div></div>');
		jQuery('#area-billboard').prepend('<div class="area-dummy"><div class="bd-area-title">ビルボード</div></div>');

		bd.areaMain = new bd.AreaCover(
			jQuery('#area-main').prepend('<div class="area-dummy-with-button"><div class="bd-area-title">コンテンツ</div></div>'), 'bd-area-main-cover', true);
		
		if (jQuery('#main-over-css').length==0) {
			bd.areaSide = new bd.AreaCover(
					jQuery('#area-side').prepend('<div class="area-dummy-with-button"><div class="bd-area-title">サイドバー</div></div>'), 'bd-area-side-cover', true);
		}

		jQuery('#area-footer').prepend('<div class="area-dummy"><div class="bd-area-title">フッター</div></div>');


		// block
		bd.covers = [];
		jQuery('.block[id]').each(function() {
			var cover = new bd.Cover(this, {
				onClick: function(el) {
					bd.toolbar.move(el);
				},
				onDblClick: function(el) {
					bd.toolbar.edit();
				}
			});
			bd.covers.push(cover);
		});

		// toolbar
		bd.toolbar = new bd.ToolBar();
		win.scroll(function(){
			bd.toolbar.move();
		});

		// contentsMenu
		bd.contentsMenu = new bd.ContentsMenu();

		// margin-bottom
		jQuery('<div id="bottom-dummy"></div>').appendTo("#container");
		
		// resize
		win.resize(resizeCover);
		
		// hide YouTube
		var ua = navigator.userAgent.toLowerCase();
		if (ua.indexOf('windows')>-1 || ua.indexOf('win32')>-1 || ua.indexOf('chrome')>-1) {
			$("iframe[title='YouTube video player']").each(function(){
				var w = this.width;
				var h = this.height;
				var div = $(this.parentNode);
				div.empty();
				div.append(
					$('<div class="youtube-alt-img"></div>').css({
						'width': w, 'height': h
					}).append('<p>ここにはYouTubeビデオが表示されます。</p><p>動作を確認するにはプレビューをクリックしてください。</p>')
				);
			});
		}
	}
});

function resizeCover() {
	if (bd.covers) {
		for (var i=0; i<bd.covers.length; i++) {
			bd.covers[i].resize();
		}
		bd.toolbar.resize();
		bd.areaMain.resize();
		bd.areaSide.resize();
	}
}

/* ToolBar */
var bd = {};
bd.ToolBar = function() {
	var clazz = this;

	var toolbar =  jQuery('<div id="toolbar"></div>').hide().appendTo(document.body);
	toolbar.append('<div id="toolbar-st"></div>');
	var toolbody = jQuery('<div id="toolbar-body"></div>');
	toolbar.append(toolbody);
	toolbar.append('<div id="toolbar-ed"></div>');

	toolbody.append(jQuery('<a id="btn-edit" />').click(function(){
		window.parent.callEdit(clazz.currentElement);
	}));

	toolbody.append('<div class="toolbar-sep"></div>');

	toolbody.append(jQuery('<a id="btn-up" />').click(function(){
		window.parent.callUp(clazz.currentElement);
	}));
	toolbody.append(jQuery('<a id="btn-down" />').click(function(){
		window.parent.callDown(clazz.currentElement);
	}));

	toolbody.append('<div class="toolbar-sep"></div>');

	toolbody.append(jQuery('<a id="btn-view" />').click(function(){
		window.parent.callView(clazz.currentElement);
	}));

	toolbody.append('<div class="toolbar-sep"></div>');

	toolbody.append(jQuery('<a id="btn-del" />').click(function(){
		window.parent.callDelete(clazz.currentElement);
	}));

	this['css'] = function(obj) {
		toolbar.css(obj);
	};

	this['edit'] = function() {
		window.parent.callEdit(clazz.currentElement);
	}

	function getDest(el) {
		var btop = 0;
		if (jQuery.browser.msie || jQuery.browser.mozilla) {
			btop += document.documentElement.scrollTop;
		} else {
			btop += document.body.scrollTop;
		}
		var pos = el.position();
		var x = pos.left + (el.width() - toolbar.width() - 10);
		var y = (btop + 5 > pos.top + 5) ? btop + 5:pos.top + 5;
		var limit = pos.top + el.height() - toolbar.height();
		if (y > limit) y = limit;
		if (y < pos.top + 5) y = pos.top + 5;
		
		var wh = jQuery(document).height();
		
		if (wh-100 < y) {
			y = wh-100;
			// この判定に入った時は、公開ボタンと重なるケースなので、少しずらす
			x -= 50;
		}
		
		return {
			left: x,
			top: y
		};
	}

	this['move'] = function(element) {
		if (element) clazz.currentElement = jQuery(element);
		if (typeof clazz.currentElement != 'undefined') {
			var info = getBlockInfo(clazz.currentElement);

			if (clazz.currentElement.hasClass('no-disp')) {
				jQuery('#btn-view').addClass('no-disp');
			} else {
				jQuery('#btn-view').removeClass('no-disp');
			}

			jQuery('.toolbar-sep').show();
			jQuery('#btn-edit', toolbar).show();

			if (info.area == 'area-header' || info.area == 'area-billboard'
				|| info.area == 'area-footer' || info.bk == 'globalnavi' || info.bk == 'qrcode') {
				jQuery('#btn-up', toolbar).hide();
				jQuery('#btn-down', toolbar).hide();
			} else {
				jQuery('#btn-up', toolbar).show();
				jQuery('#btn-down', toolbar).show();
			}

			if (info.area == 'area-side') {
				if (info.bk == 'qrcode') {
					jQuery('.toolbar-sep').hide();
					jQuery('#btn-edit', toolbar).hide();
					jQuery('#btn-view', toolbar).show();
					jQuery('#btn-del', toolbar).hide();
				} else {
					jQuery('.toolbar-sep:eq(1)').hide();
					jQuery('#btn-view', toolbar).hide();
					jQuery('#btn-del', toolbar).show();
					toolbar.width(180);
				}
			} else if (info.area == 'area-billboard') {
				jQuery('.toolbar-sep:eq(0)').hide();
				jQuery('.toolbar-sep:eq(2)').hide();
				jQuery('#btn-view', toolbar).show();
				jQuery('#btn-del', toolbar).hide();
				toolbar.width(119);
			} else if (info.area == 'area-header' || info.area == 'area-footer'
				|| info.bk == 'globalnavi') {
				jQuery('#btn-view', toolbar).hide();
				jQuery('#btn-del', toolbar).hide();
				jQuery('.toolbar-sep').hide();
				toolbar.width(87);
			} else {
				jQuery('#btn-view', toolbar).show();
				jQuery('#btn-del', toolbar).show();
				toolbar.width(212);
			}

			toolbar.css({'position': 'absolute', 'z-index': 8000}).show().stop();
			toolbar.animate(getDest(clazz.currentElement), 200);
		}
	};

	function getBlockInfo(elem) {
		var k = elem[0].id.substring(4);
		var pos = k.indexOf('-');
		var bk = k.substring(0, pos);
		var a = k.substring(pos+1);

		var type, tkey;
		pos = bk.lastIndexOf('_');
		if (pos > -1) {
			type = bk.substring(0, pos);
			tkey = bk.substring(pos+1);
		} else {
			type = bk;
		}
		return {
			area: a,
			bk: type,
			bkid: tkey
		};
	}

	this['resize'] = function() {
		if (typeof clazz.currentElement != 'undefined') {
			toolbar.stop();
			toolbar.css(getDest(clazz.currentElement));
		}
	};
};

/* Cover */
bd.Cover = function(element, options) {
	var opts = jQuery.extend({
		onClick: function(){},
		onDblClick: function() {}
	}, options);
	var el = jQuery(element);
	var areaId = el.parent()[0].id;
	var coverId = 'cov-' + element.id + '-' + areaId;
	var addClass = (el.hasClass('no-disp')) ? ' no-disp':'';
	var cover = jQuery('<div class="bd-cover' + addClass + '" id="' + coverId + '"></div>').appendTo(document.body);

	cover.click(function() {
		jQuery('div.bd-cover').removeClass('on');
		jQuery(this).addClass('on');
		opts.onClick(this);
	}).dblclick(function() {
		opts.onDblClick(this);
	});

	this.resize = function() {
		var pos = el.position();
		cover.css({
			top: pos.top,
			left: pos.left,
			width: el.width(),
			height: el.height(),
			opacity: .4
		});
	}

	this.resize();
};

bd.AreaCover = function(element, styleClass, hasButton) {
	var el = jQuery(element);
	var cover = jQuery('<div class="' + styleClass + '"></div>').appendTo(document.body);

	if (hasButton) {
		var btn = jQuery('<a class="bd-button"></a>').appendTo(cover);

		btn.click(function(){
			bd.contentsMenu.show(this);
		});
	}

	this.resize = function() {
		var pos = el.position();
		cover.css({
			top: pos.top,
			left: pos.left,
			width: el.width(),
			height: el.height()
		});
	}

	this.resize();
};

bd.ContentsMenu = function() {

	function hide() {
		allcover.hide();
		menu.slideUp(200);
		menu.isDisp = false;
	}

	var allcover = jQuery('<div class="bd-contents-cover"></div>').appendTo(document.body);
	allcover.click(hide);

	var menu =  jQuery('<div id="contents-menu"></div>').hide().appendTo(document.body);
	menu.append('<p class="lead">追加するコンテンツの種類を選んでください。</p>');

	var close = jQuery('<a href="javascript:;" class="close-btn"></a>').appendTo(menu);
	close.click(hide);

	var cont = jQuery('<div class="menu-container"></div>').appendTo(menu);

	var ul = jQuery('<ul></ul>').appendTo(cont);
	ul.append('<li class="list-header"><span>物件関連</span></li>');
	ul.append(createList('物件表示', 'icon_bukkenDisplay', window.parent.showBukkenDisplay));
	ul.append(createList('物件検索', 'icon_bukkenSearch', window.parent.showBukkenSearch));

	ul = jQuery('<ul></ul>').appendTo(cont);
	ul.append('<li class="list-header"><span>アピールポイント</span></li>');
	ul.append(createList('新着情報', 'icon_prWhatsNew', window.parent.showWhatsNew));
	ul.append(createList('スタッフの魅力', 'icon_prStaff', window.parent.showPrStaff));
	ul.append(createList('店舗情報', 'icon_prShop', window.parent.showShop));
	ul.append(createList('エリアの魅力', 'icon_prArea', window.parent.showPrArea));

	ul = jQuery('<ul></ul>').appendTo(cont);
	ul.append('<li class="list-header"><span>特集</span></li>');
	ul.append(createList('イチから作る', 'icon_special', window.parent.showCreateSpecial, ['0-0']));
	ul.append(createList('ペット可物件', 'icon_special_pet', window.parent.showCreateSpecial, ['0-25']));
	ul.append(createList('新築賃貸', 'icon_special_new', window.parent.showCreateSpecial, ['0-27']));
	ul.append(createList('南向き物件', 'icon_special_minami', window.parent.showCreateSpecial, ['0-2']));
	ul.append(createList('3000万以下物件', 'icon_special_3000', window.parent.showCreateSpecial, ['0-26']));
	ul.append(createList('特集一覧から', 'icon_special', window.parent.showSpecialDisplay));

	ul = jQuery('<ul></ul>').appendTo(cont);
	ul.append('<li class="list-header"><span>フォーム</span></li>');
	ul.append(createList('フォーム', 'icon_form', window.parent.showFormDisplay));

	ul = jQuery('<ul></ul>').appendTo(cont);
	ul.append('<li class="list-header"><span>その他</span></li>');
	ul.append(createList('Twitter', 'icon_twitter', window.parent.showTwitter));
	ul.append(createList('自由に入力', 'icon_free', window.parent.showFree));
	ul.append(createList('ダウンローダー', 'icon_downloader', window.parent.showDownloader));
	ul.append(createList('YouTube', 'icon_youtube', window.parent.showYoutube));
	ul.append(createList('ブログ', 'icon_blog', window.parent.showBlog));
	ul.append(createList('記事入力', 'icon_article', window.parent.showArticle));

	menu.isDisp = false;
	this['show'] = function(element) {
		if (menu.isDisp == false) {
			var pos = getElementPos(element);
			var y = pos.left - 170;
			if (y<5) y = 5;
			menu.css({
				top: pos.top + pos.h,
				left: y
			});

			var win = jQuery(window);
			allcover.css({'top': win.scrollTop(), 'height': win.height()});
			allcover.show();

			menu.slideDown(200);
			menu.isDisp = true;
			
			jQuery.scrollTo(element, 500);
			
		} else {
			hide();
		}
	};

	function createList(text, cid, callback, args) {
		var li = jQuery('<li class="menu-buttons"></li>');
		var a = jQuery('<a href="javascript:;"></a>').append('<span class="menu-icon" id="' + cid + '"></span>').appendTo(li);
		if (args) {
			a.click(function(){
				callback.apply(this, args);
			});
		} else {
			a.click(callback);
		}
		li.append(jQuery('<p></p>').append(text));
		return li;
	}

	function getElementPos(element) {
		var obj = new Object();
		obj.w = element.offsetWidth;
		obj.h = element.offsetHeight;
		obj.left = element.offsetLeft;
		obj.top = element.offsetTop;
		while(element.offsetParent) {
			element = element.offsetParent;
			obj.left += element.offsetLeft;
			obj.top += element.offsetTop;
		}
		return obj;
	}
};

