/************************************\
  Requires GSSI framework: Base, Dom
\************************************/

if (!Twist) { var Twist = {} };

Twist.Popup = {
	
	open: function( popup, anchor, options ) {
		var shade = document.createElement("div");
		Twist.Popup.shade = shade;
		shade.id = "TwistPopupShade";
		
		document.body.appendChild( shade );
		
		Twist.Popup.open = Twist.Popup.__open;
		Twist.Popup.__open( popup, anchor, options );
	},
	
	__open: function( popup, anchor, options ) {
		popup = GSSI.$(popup);
		if (!popup) { return; }
		anchor = GSSI.$(anchor);
	
		if (! popup.twistpopup) {
			popup.parentNode.removeChild(popup);
			document.body.appendChild(popup);
			popup.twistpopup = {};
			
			var anchorposition = ("" + popup.className).match(/Twist\.Popup\.Position\[[^\]]+\]/)[0];
			if (anchorposition) {
				popup.twistpopup.anchorposition = anchorposition.match(/\[[^\]]+\]/)[0].replace("]","").replace("[","").toLowerCase().replace(/[^a-z]/, " ").replace(/ +/," ");
			} else {
				popup.twistpopup.anchorposition = "top right";
			}
			
		}
	
		if (anchor) {
			popup.moveTo( anchor, popup.twistpopup.anchorposition, options );
		}

		var ss = Twist.Popup._shadesize();	
		Twist.Popup.shade.style.height = ss.height + "px";
		Twist.Popup.shade.style.width = ss.width + "px";
		Twist.Popup.shade.style.display = "block";

		popup.style.display = "block";
	},
	
	close: function( popup ) {
		popup = GSSI.$(popup);
		if (!popup) { return; }
		popup.style.display = "none";
		Twist.Popup.shade.style.display = "none";
	},
	
	_windowsize: function() {
		return {
			width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0,
			height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
		};
	},
	
	_shadesize: function() {
		var ws = Twist.Popup._windowsize();
		return {
			width: (document.body.offsetWidth > ws.width) ? document.body.offsetWidth : ws.width,
			height: (document.body.offsetHeight > ws.height) ? document.body.offsetHeight : ws.height
		};
	}
	
};