// wiiwin class for yolax.com ver 2.0

var WiiWin = Class.create({
	objects: null,
	sets: {
		caption:true, menu:true, content:true, minSize:['100px','40px'], defaultSize:['300px','180px'],
		className: '', moveCapture:'self',
		style: {'position':'absolute', 'zIndex':'999', 'border':'#CCC solid 2px', 'background':"#FFF", 'paddingBottom':"40px"}
	},
	binder: null,

	initialize: function(sets) {
		if (!Object.isUndefined(sets)) this.sets = Object.extend(this.sets, sets);
		this.objects = {};
		this.create();
		this.binder = {
			scroll: this.scroll.bind(this)
		}
	},

	create: function() {
		if (this.check('self')) return;
		var pnl = $(document.createElement("div")).
			setStyle(this.sets.className.blank() ? Object.extend(this.sets.style, {width:this.sets.defaultSize[0], height:this.sets.defaultSize[1]}): this.sets.style).
			addClassName(this.sets.className);
		new Insertion.Bottom(pnl, "<div style=\"width:100%;height:100%;\"></div><div class=\"clear\"></div><a class=\"closer\" href=\"javascript:void(0)\" style=\"display:block;position:absolute;z-index:1;right:10px;top:5px;\">关闭</a>");
		document.body.appendChild(pnl);
		this.objects = Object.extend(this.objects, {'self': pnl, 'content': $(pnl.down('div')), 'closer': pnl.down('a.closer')});
		pnl.down('a').observe('click', this.close.bind(this));
		//pnl.onclick = this.close.bind(this);
	},

	open: function(bToggle) {
		if (!this.check('self')) return;
		if (bToggle||Object.isUndefined(bToggle)) {
			this.scroll();
			this.toggle();
		}
		this.objects.self.show();

	},

	close: function() {
		this.toggle(false);
		this.objects.self.hide();
	},

	check: function(seed) {
		return Object.isUndefined(this.objects[seed]) ? false : true;
	},

	parseValue: function(v) {
		var i;
		return Object.isString(v) ? (v.toArray().last()=='%' ? v : (v.slice(v.length-2).toLowerCase()=='px' ? v : v.concat('px'))) : parseInt(v).concat('px');
	},

	wh: function(sets) {
		var style = {}, dft = this.sets.defaultSize.map((function(node){
			return this.parseValue(node);
		}).bind(this));
		if (Object.isUndefined(sets)) {
			style = {width: dft[0], height:'auto'};
		} else {
			style = {
				width: Object.isUndefined(sets.width) ? dft[0] : sets.width,
				height: Object.isUndefined(sets.width) ? 'auto' : sets.height
			};
		}
		this.objects.self.setStyle(style);
		this.scroll();
	},

	xy: function() {
		var style = {}, args = $A(arguments);
		if (args.length==0) {
			return;
		} else {
			var codi, ele;
			if ((Object.isString(args[0])&&!$(args[0]))||Object.isElement(args[0])) {
				ele = $(args[0]);
				codi = ele.cumulativeOffset();
				if (args[1]) codi[0]+=ele.offsetWidth;
				if (args[2]) codi[0]+=ele.offsetHeight;
				codi = codi.invoke('toString').invoke('concat', 'px');
			} else {
				codi = args.slice(0,2).invoke('parseInt').invoke('toString').invoke('concat', 'px');
			}
			style = {
				left: codi[0],
				top: codi[1]
			};
		}
		this.objects.self.setStyle(style);
	},

	scroll: function() {
		var fix = [document.documentElement.scrollLeft, document.documentElement.scrollTop],
				wh = [document.documentElement.offsetWidth, document.documentElement.offsetHeight],
				self = this.objects.self.getDimensions();
		this.objects.self.setStyle({left:(wh[0]-self.width)/2+fix[0]+'px', top:(wh[1]-self.height)/3+fix[1]+'px'});
	},

	toggle: function(b) {
		var ctrl = b||Object.isUndefined(b)?'observe':'stopObserving';
		Event[ctrl](window, "scroll", this.binder.scroll);
		Event[ctrl](window, "resize", this.binder.scroll);
	}
})