var Wrap = Class.create({
	/** デフォルト オプション */
	defaultOptions : {
		effect  : true,
		bgcolor : '#fff',
		opacity : 0.8
	},
	/** 初期化 */
	initialize : function(targetElement, options) {
		this.options = Object.extend(this.defaultOptions, options || {});
		this.element = new Element('table');
		this.element.setStyle({
			margin:0,
			padding:0,
			position:'absolute',
			display:'none',
			backgroundColor: this.options.bgcolor//,
//			zIndex : 1000
		});
		this.target = $(targetElement?targetElement:document.body);
		this.positionAbsolute = (this.target === document.body || this.options.positionAbsolute);
		this.element.setOpacity(this.options.opacity);

		var tbody = new Element('tbody');
		var tr    = new Element('tr');
		var td    = new Element('td', {align:'center', valign:'middle'});
		var img   = new Element('img', {style:'display:none;border:0;', border:0});
		var msg   = new Element('div', {style:'display:none;border:0;'});

		td.appendChild(img);
		td.appendChild(msg);
		tr.appendChild(td);
		tbody.appendChild(tr);
		this.element.appendChild(tbody);
		
		if(this.positionAbsolute) {
			this.element.setStyle({zIndex:1000});
			document.body.appendChild(this.element);
		}
		else {
			this.target.appendChild(this.element);
		}
	},
	show : function() {
		var size  = this.target.getDimensions();
		var point = (this.positionAbsolute)?(this.target.cumulativeOffset()):({top:0, left:0});

		if(size.height < 1 || size.width < 1) {
			return;
		}
		this.element.setStyle({
			display:'',
			
			top   :point.top + 'px',
			left  :point.left+ 'px',
			width :size.width  + 'px',
			height:size.height + 'px'
		});
		if(this.target.style.display == 'none') {
			this.element.style.display = 'none';
			return;
		}
		if(this.options.effect) {
			this.element.setOpacity(0.01);
			new Effect.Opacity(this.element, { from: 0.01, to: this.options.opacity, duration: 0.5 })
		}
	},
	hide : function() {
		this.element.setStyle({display:'none'});
	},
	setImage : function(imgsrc) {
		var e = this.element.down('img');
		if(imgsrc) {
			e.src = imgsrc;
			e.setStyle({display:'block'});
		}
		else {
			e.setStyle({display:'none'});
		}
	},
	setMessage : function(message) {
		var e = this.element.down('div');
		if(message) {
			e.update(message);
			e.setStyle({display:'block'});
		}
		else {
			e.setStyle({display:'none'});
		}
	}
});

