var Quiz = function(){};

Quiz.pause = false;

/**
 * 選択肢を選択
 * Flashから呼ばれることを想定
 */
Quiz.selectAnswer = function(option) {
	
	Modal.set();
	Quiz.pause = true;
	
	$.post('quiz/answer.php', {qid:$(':hidden[name=qid]').val(), answer:option}, function(response){
		var modalwin = Modal.window(response);
		$('#mainvisual').css('visibility', 'hidden');
		$('#quiz_deactive').css('display', 'block');
		
		$('a.close', modalwin).click(function(){
			$(modalwin).remove();
			Quiz.pause = false;
			Modal.clear();
			$('#quiz_deactive').css('display', 'none');
			$('#mainvisual').css('visibility', 'visible');
			
		});
	});
	
};


Quiz.in_pause = function() {
	return Quiz.pause
};


/**
 * モーダル
 */
var Modal = function(){};

Modal.modalwindow = null;

/**
 * 背景を落とす
 * 
 * マットをクリックしたときに閉じるようにするには、次のようにオプションを渡す。
 * Modal.set({clickable:true});
 */
Modal.set = function(options) {

	// 黒背景を作成
	var blackmat = $('<div class="blackmat"></div>');
	$('body').prepend(blackmat);
	blackmat
		.css('width', $('body').width())
		.css('height', $(window.document).height())
		.css('top', 0).css('left', 0);
	
	if (options && options.clickable) {
		blackmat.one('click', function(){
			if (options && options.clicked) {
				options.clicked();
			}
			Modal.clear();
			$(this).remove();
		});
	}
};


/**
 * モーダルでウィンドウで表示する
 *
 * オプションでは、要素を指定することで要素の下にウィンドウを表示できる。
 * Moddal.set(source, {below:'div.selectedelement'});
 */
Modal.window = function(source, option){
	
	// 背景がそのままの場合は背景を落とす
	if (!$('div.blackmat').length) {
		if (options && options.clicked) {
			Modal.set({clickable:true, clicked:options.clicked});
		} else {
			Modal.set();
		}
	}
	
	// すでにある場合には削除
	if ($('div.modalwindow').length) {
		$('div.modalwindow').remove();
	}
	
	// モーダルウィンドウを作成
	Modal.modalwindow = $('<div class="modalwindow"></div>');
	Modal.modalwindow.append(source);
	Modal.modalwindow.css('z-index', 100);
	$('body').append(Modal.modalwindow);
	
	Modal.resetPosition((option && option.below));
	
	return Modal.modalwindow;
};

Modal.clear = function() {
	$('div.modalwindow').remove();
	$('div.blackmat').remove();
};

Modal.resetPosition = function(below){
	var scrolltop = 0;
	if (document.documentElement && document.documentElement.scrollTop) {
		scrolltop = document.documentElement.scrollTop;
	} else {
		scrolltop = $('body').scrollTop();
	}
	
	var windowheight = 0;
	if (document.documentElement && document.documentElement.clientHeight) {
		windowheight = document.documentElement.clientHeight;
	} else if (window.innerHeight) {
		windowheight = window.innerHeight;
	}
	
	// 特定の要素の下に表示するとき
	if (below) {
		if (!option.below.jQuery) {
			option.below = $(option.below);
		}
		var offset = option.below.offset();
		var left = offset.left;
		if (left+Modal.modalwindow.width()+10 > $('body').width()) {
			left = $('body').width() - Modal.modalwindow.width() - 10;
		}
		
		var top = offset.top+option.below.height()+8;
		if (top+Modal.modalwindow.height()+10 > scrolltop+windowheight) {
			top = offset.top - Modal.modalwindow.height()-10;
		}
		
		Modal.modalwindow.css('top', top);
		Modal.modalwindow.css('left', left);
	}
	
	// 中央に表示するとき
	else {
		
		if (windowheight) {
			Modal.modalwindow.css('top', scrolltop+(windowheight-Modal.modalwindow.height())/2);
		} else {
			Modal.modalwindow.css('top', scrolltop+20);
		}
		Modal.modalwindow.css('left', ($('body').width()-Modal.modalwindow.width())/2);
		
	}
};
