var SWODE = {};
SWODE.showPopWindow = function(options) {
	var container = document.getElementsByTagName('body').item(0);
	var m_this = this;
	var instance_id = (new Date()).getTime() +'_'+ (Math.floor((Math.random()*10)+1));
	var m_options = Object.extend({
		'top': 0,
		'width': 300,
		'height': 100,
		'overlap': false,
		'onClose': function() {}
	}, options || {});
	var m_deltaPos = [];
	var isIE = (navigator.appVersion.indexOf('MSIE') > 0) ? true : false;
	// =========================================
	this.init = function() {
		Position.prepare();
		m_deltaPos = [Position.deltaX, Position.deltaY];
		m_this.main   = Builder.node('div', {className:'popwindow', style:'display:none', id:'window'+instance_id});
		m_this.header = Builder.node('div', {className:'header'});
		m_this.body   = Builder.node('div', {className:'body',style:'background-image:none;background-color:#ffffff;'});
		m_this.main.style.width    = m_options.width +'px';
		m_this.header.style.height = '18px';
		m_this.body.style.height   = m_options.height +'px';
		container.appendChild(m_this.main);
		m_this.main.appendChild(Builder.node('div', {className:'popwindow_frame'}));
		m_this.main.firstChild.appendChild(m_this.header);
		m_this.main.firstChild.appendChild(m_this.body);		
		m_this.txtTitle = Builder.node('b', {style:'cursor:default'});		
		m_this.btnClose = Builder.node('img', {src:'images/common/closeMod.gif', align:'absmiddle', className:'fr pointer', title:'关闭窗口'});
		m_this.btnClose.onclick = function() {
			$(m_this.main).remove();
			if (m_options.overlap) SWODE.enableScreen();
			if (isIE) SWODE.showElements('select');
			m_options.onClose();			
		}
		m_this.header.appendChild(m_this.btnClose);
		m_this.header.appendChild(m_this.txtTitle);
		m_this.header.onmousedown = this.startDrag.bindAsEventListener(this);
		m_this.header.onmouseover = function() {
			this.style.cursor = 'move';
		}
		m_this.header.onmouseout = function() {
			this.style.cursor = 'default';
		}
		m_this.showWindow();
		$(m_this.main).show();
		if (isIE) SWODE.hideElements('select', m_this.main);
		if (m_options.overlap) SWODE.disableScreen(m_options.opacity);
	};
	this.initTitle = function(title) {
		m_this.txtTitle.innerHTML = title;
	};
	this.initContent = function(content) {
		m_this.body.innerHTML = '';
		m_this.body.appendChild(content);
	};
	this.showWindow = function() {
		var innerWidth  = document.documentElement.clientWidth || document.body.clientWidth;
		var innerHeight = document.documentElement.clientHeight || document.body.clientHeight;
		if (!isIE) {
			innerWidth  = window.innerWidth;
			innerHeight = window.innerHeight;
		}
		var m_left = (innerWidth - m_options.width - 20) / 2;
		var m_top  = m_options.top || (innerHeight - m_options.height - 80) / 2;
		m_top = (m_top > 10) ? m_top : 10;
		m_top += m_deltaPos[1];
		m_this.moveTo(m_left, m_top);
	};
	this.resizeTo = function(w, h) {
		m_options.width = w;
		m_options.height = h;
		m_this.main.style.width  = m_options.width +'px';
		m_this.body.style.height = m_options.height +'px';
		m_this.body.firstChild.style.height = m_options.height +'px';
		m_this.showWindow();
	};
	this.moveTo = function(x, y) {
		m_this.main.style.left = x +'px';
		m_this.main.style.top  = y +'px';
	};
	this.startDrag = function(e) {
		var evt = e ? e : (window.event ? window.event : null);
		
		var src = evt.srcElement || evt.target;
		if (src != $(m_this.header) && src.className!='header') return;
		
		m_this.startX = evt.clientX - parseInt(m_this.main.style.left);
		m_this.startY = evt.clientY - parseInt(m_this.main.style.top);
		
		this.dragMode = true;
		document.onmousemove = this.moveDrag.bindAsEventListener(this);
		document.onmouseup = this.endDrag.bindAsEventListener(this);
		document.body.onselectstart = function() {
			return false;
		}
	};
	this.moveDrag = function(e) {
		if (this.dragMode) {
			var evt = e ? e : (window.event ? window.event : null);
			m_this.main.style.left = (evt.clientX - m_this.startX) + "px";
			m_this.main.style.top  = (evt.clientY - m_this.startY) + "px";
		}
	};
	this.endDrag = function(e) {
		if(!this.dragMode) return;
		this.dragMode = false;
		
		document.body.onselectstart = function() {
			return true;
		}
		if (isIE) {
			SWODE.showElements('select');
			SWODE.hideElements('select', m_this.main);
		}
	};
	this.init();
}
SWODE.popEditBox = function(title, apiurl, options) {
	if (SWODE.popEditBoxWin && SWODE.popEditBoxWin.btnClose) {
		SWODE.popEditBoxWin.btnClose.onclick();
	}
	var boxOptions = Object.extend({
		top: 0,
		width: 600,
		height: 400, 
		overlap: true,
		callback: function() {}
	}, options || {});
	var contentNode = Builder.node('div',{style:'height:'+ boxOptions.height +'px'});
	var frameNode = Builder.node('iframe', {'src':apiurl, width:'100%', height:'100%', frameborder:'0', border:'0'});
	contentNode.appendChild(frameNode);
	SWODE.popEditBoxWin = new SWODE.showPopWindow({
		top: boxOptions.top,
		width: boxOptions.width,
		height: boxOptions.height,
		overlap: boxOptions.overlap,
		onClose: function(){
			SWODE.popEditBoxWin = null;
			setTimeout(function() {
				boxOptions.callback();
			}, 100);
		}
	});
	SWODE.popEditBoxWin.initTitle(title);
	SWODE.popEditBoxWin.initContent(contentNode);
};
SWODE.resizeEditBox = function(w, h) {
	if (SWODE.popEditBoxWin) {
		SWODE.popEditBoxWin.resizeTo(w, h);
	}
}
SWODE.showElements = function(tag) {
	var elms = $$(tag);
	elms.each(function(elm) {
		if (elm._hide) {
			$(elm).style.visibility = 'visible';
			elm._hide = false;
		}
	});
}
SWODE.hideElements = function(tag, overElement) {
	var elms = $$(tag);
	var ox = parseInt(overElement.style.left);
	var oy = parseInt(overElement.style.top);
	var ow = parseInt(overElement.offsetWidth);
	var oh = parseInt(overElement.offsetHeight);
	elms.each(function(elm) {
		var pos = Position.cumulativeOffset(elm);
        if (!(ox>(pos[0]+elm.offsetWidth) || pos[0]>(ox+ow) || pos[1]>(oy+oh) || oy>(pos[1]+elm.offsetHeight))) {
			$(elm).style.visibility = 'hidden';
			elm._hide = true;
		}
	});
}
SWODE.disableScreen = function(opacity) {
	if (SWODE.screenDisabled) return;
	var overlayElement = $('nv-overlay');
	if (!overlayElement) {
		var bodyElement=document.getElementsByTagName('body').item(0);
		overlayElement = document.createElement('div');
		overlayElement.setAttribute('id','nv-overlay');
		overlayElement.style.position = 'absolute';
		overlayElement.style.top = '0px';
		overlayElement.style.left = '0px';
		overlayElement.style.width = '100%';
		bodyElement.appendChild(overlayElement);
	}
	overlayElement.className = 'op'+ (opacity || '3');
	overlayElement.style.height = document.body.scrollHeight +'px';
	var fun = function() {};
	Event.observe(overlayElement, 'click', fun, true);
	$(overlayElement).show();
	SWODE.screenDisabled = true;
	Event.observe(window, 'resize', SWODE.resizeScreen.bindAsEventListener());
}
SWODE.enableScreen = function() {
	var overlayElement = $('nv-overlay');
	if (overlayElement) {
		$(overlayElement).hide();
		Event.stopObserving(overlayElement,'click',document.enableScreen);
		$(overlayElement).remove();
	}
	SWODE.screenDisabled = false;
	Event.stopObserving(window, 'resize', SWODE.resizeScreen.bindAsEventListener());
}
SWODE.resizeScreen = function() {
	if (SWODE.screenDisabled && $('nv-overlay')) {
		$('nv-overlay').style.height = document.body.scrollHeight +'px';
	}	
}