/*
	画面上書き表示管理クラス
*/
var Overly = Class.create( {
	//----------------------------------------------------------------------------
	/*
		コンストラクタ
	*/
	initialize: function(id){
		var objBody = document.body;
		
		this.id  = id;
		this.obj = $(id);
		if(!this.obj){
			this.obj = document.createElement('div');
			this.obj.setAttribute('id', id);
			objBody.insertBefore(this.obj, objBody.firstChild);
		}
		
		this.iframe_url = "";
		this.iframe_w   = 0;
		this.iframe_h   = 0;
	},
	//------------------------------------------------------------------------------
	/*
		上書きする画面を表示
	*/
	dispOn: function(){
		this.obj.innerHTML = "";
		this.obj.style.display         = 'block';
		this.obj.style.position        = 'absolute';
		this.obj.style.backgroundColor = '#000000';
		this.obj.style.filter          = 'Alpha(opacity=30)';
		this.obj.style.opacity         = 0.3;
		this.obj.style.top             = document.viewport.getScrollOffsets().top;
		this.obj.style.left            = 0;//document.viewport.getScrollOffsets().left;
		this.obj.style.zIndex          = '300';
	 	this.obj.style.width           = '100%';
		this.obj.style.height          = document.viewport.getHeight() + 'px';
		
		Event.observe(window, 'scroll', this.scrollSync, true);
	},
	//------------------------------------------------------------------------------
	/*
		上書きする画面を表示
	*/
	dispOff: function(){
		document.body.removeChild($(this.id));
		document.body.removeChild($(this.id + '_frame'));
	},
	//------------------------------------------------------------------------------
	/*
		スクロール追尾
	*/
	scrollSync: function(){
		var ovl = $('overly');
		ovl.style.left = document.viewport.getScrollOffsets().left;
		ovl.style.top = document.viewport.getScrollOffsets().top;
	},
	//------------------------------------------------------------------------------
	/*
		インラインフレームを追加
	*/
	addFrame: function(url, w, h, form, top){
		var objBody = document.body;
		var frame;
		var id;
		var post;
		
		//フレーム表示用Element作成
		id = this.id;
		this.frame = document.createElement('div');
		this.frame.setAttribute('id', id + '_frame');
		this.frame.innerHTML = "";
		this.frame.style.display = 'block';
		this.frame.style.display         = 'block';
		//this.frame.style.backgroundColor = '#ffffff';
		this.frame.style.position        = 'absolute';
		this.frame.style.filter          = 'Alpha(opacity=100)';
		this.frame.style.opacity         = 1.0;
		if(top !== null) this.frame.style.top = top + 'px';
		else             this.frame.style.top = 64 + 'px';
		this.frame.style.left            = ( (document.viewport.getWidth() - w )/ 2)+ 'px';
		this.frame.style.zIndex          = '400';
		this.frame.style.width           = w + 'px';
		this.frame.style.height          = h + 'px';
		objBody.insertBefore(this.frame, objBody.firstChild);
		
		//送信パラメータ作成
		post = "";
		fobj = document.forms[form];
		if(fobj){
			for(i=0; i<fobj.length; i++){
				elm = fobj.elements[i];
				if( (elm.type == "checkbox" || elm.type == "radio") ){
					if(elm.checked) post += elm.name + "=" + elm.value + "&";
				}else{
					post += elm.name + "=" + elm.value + "&";
				}
			}
		}
		
		//HTTPアクセス
		new Ajax.Request(url, {
			method:   "post",
			postBody: post,
			onSuccess: function(httpObj){
				$(id + '_frame').innerHTML = httpObj.responseText;
			},
			onFailure: function(httpObj){
				frame = $(id + '_frame');
				frame.innerHTML  = "<br><br>通信エラーが発生しました。<br>";
				frame.innerHTML += "お手数ですが閉じるボタンを押してからもう一度やり直してください。<br>";
				frame.innerHTML += "<br><input type=\"button\" value=\"閉じる\" onClick=\"overlyDispOff('" + id + "')\">";
				frame.style.backgroundColor = '#ffffff';
				frame.style.backgroundColor = '#ffffff';
				frame.style.left            = ( (document.viewport.getWidth() - 480 )/ 2)+ 'px';
				frame.style.width           = '480px';
				frame.style.height          = '240px';
			}
		});
	}
});


//------------------------------------------------------------------------------
/*
	上書きする画面を表示
*/
function overlyDispOn(id, url, w, h, form){
	ovl = new Overly(id);
	ovl.dispOn();
	ovl.addFrame(url, w, h, form, 64);
	
	/*
		FLashがどうしても最前面に表示されるので一度非表示
	*/
	var id = "overlyNoDisp";
	if (document.all.item(id).length) {
		for (i = 0; i < document.all.item(id).length; i++) {
			document.all.item(id, i).style.display = "none";
		}
	} else {
		document.all.item(id).style.display = "none";
	}
}
function overlyDispOn2(id, url, w, h, form, top){
	ovl = new Overly(id);
	ovl.dispOn();
	ovl.addFrame(url, w, h, form, top);
	
	/*
		FLashがどうしても最前面に表示されるので一度非表示
	*/
	var id = "overlyNoDisp";
	if (document.all.item(id).length) {
		for (i = 0; i < document.all.item(id).length; i++) {
			document.all.item(id, i).style.display = "none";
		}
	} else {
		document.all.item(id).style.display = "none";
	}
}
//------------------------------------------------------------------------------
/*
	上書きする画面を削除
*/
function overlyDispOff(id){
	ovl = new Overly(id);
	ovl.dispOff();
	
	/*
		非表示にしたものを表示
	*/
	var id = "overlyNoDisp";
	if (document.all.item(id).length) {
		for (i = 0; i < document.all.item(id).length; i++) {
			document.all.item(id, i).style.display = "block";
		}
	} else {
		document.all.item(id).style.display = "block";
	}
}
//------------------------------------------------------------------------------
/*
	上書き画面の内容を指定ＵＲＬの内容に書き換える
	同時に親画面を更新
*/
function overlyReload(id, url, form, url2){
	var frame;
	var post;
	
	//投稿画面更新
	frame = $(id + '_frame');
	
	//送信パラメータ作成
	post = "";
	fobj = document.forms[form];
	if(fobj){
		for(i=0; i<fobj.length; i++){
			elm = fobj.elements[i];
			post += elm.name + "=" + elm.value + "&";
		}
	}
		
	//HTTPアクセス
	new Ajax.Request(url, {
		method:   "post",
		postBody: post,
		onSuccess: function(httpObj){
			frame.innerHTML = httpObj.responseText;
			
			if(url2){
				frame = $('comment_body');
				
				new Ajax.Request(url2, {
					method:   "post",
					postBody: post,
					onSuccess: function(httpObj){
						frame.innerHTML = httpObj.responseText;
					},
					onFailure: function(httpObj){
						frame.innerHTML  = "<br><br>通信エラーが発生しました。<br>";
						frame.innerHTML += "お手数ですが閉じるボタンを押してからもう一度やり直してください。<br>";
						frame.innerHTML += "<br><input type=\"button\" value=\"閉じる\" onClick=\"overlyDispOff('" + id + "')\">";
						frame.style.backgroundColor = '#ffffff';
						frame.style.backgroundColor = '#ffffff';
						frame.style.left            = ( (document.viewport.getWidth() - 480 )/ 2)+ 'px';
						frame.style.width           = '480px';
						frame.style.height          = '240px';
					}
				});
			}
		},
		onFailure: function(httpObj){
			frame.innerHTML  = "<br><br>通信エラーが発生しました。<br>";
			frame.innerHTML += "お手数ですが閉じるボタンを押してからもう一度やり直してください。<br>";
			frame.innerHTML += "<br><input type=\"button\" value=\"閉じる\" onClick=\"overlyDispOff('" + id + "')\">";
			frame.style.backgroundColor = '#ffffff';
			frame.style.backgroundColor = '#ffffff';
			frame.style.left            = ( (document.viewport.getWidth() - 480 )/ 2)+ 'px';
			frame.style.width           = '480px';
			frame.style.height          = '240px';
		}
	});
}
