	var popup		= new popup();
	
	if (window.opener!=null && window.opener._browser!=null)
	{
		_browser.popupHelper = window.opener._browser.popupHelper;
		
		_browser.popupHelper.parentBrowser = window.opener._browser;
		_browser.popupHelper.popupBrowser = _browser;
	}
	else
	{
		_browser.popupHelper = popup;
		_browser.popupHelper.popupBrowser = _browser;
		_browser.popupHelper.parentBrowser = _browser;
	}
	
	
	function handleUnload()
	{
		if (window.opener==null)
		{
			if (_browser.popupHelper.window!=null)
			{
				closePopup(false, null);
			}
		}
		/*
		else 
		{
			if (window.opener._browser!=null && window.opener._browser.popupHelper!=null)
			{
				//window.opener._browser.popupHelper.window = null;
			}
		}
		*/
		
	}

	window.onunload=handleUnload;

	function popup()
	{
		this.closePopup 		= closePopup;
		this.closePopupAuto		= closePopupAuto;
		this.mayClosePopup		= null;
		this.widget 			= null;
		this.source 			= null;
		this.output 			= null;
		this.sourceName 		= null;
		this.outputName 		= null;
		this.mode				= null;
		this.window				= null;
		this.displayObject		= null;
		this.displayObjectF		= null;
		this.result				= null;
	}

	function openWindow(url, name)
	{
		openSub(url, 			// url
				name, 			// name
				600, 			// width
				400, 			// height
				false, 			// isResizable
				false, 			// isFullScreen
				false, 			// hasScrollBars
				false, 			// hasStatus
				false, 			// hasMenuBar
				false,			// hasToolBar
				false,			// hasDirectories
				true);			
	}
	
	function openWindow(url, 
						name, 
						width, 
						height, 
						isResizable, 
						isFullScreen, 
						hasScrollBars, 
						hasStatus, 
						hasMenuBar, 
						hasToolBar, 
						hasDirectories,
						isPopupContext)
	{
		openSub(url, 
				name, 
				width, 
				height, 
				isResizable, 
				isFullScreen, 
				hasScrollBars, 
				hasStatus, 
				hasMenuBar, 
				hasToolBar, 
				hasDirectories, 
				null, 					// sourceName
				null, 					// outputName
				null, 					// controlName
				null, 					// formName
				null, 					// closeUrl
				null, 					// displayScript
				false, 					// isDivMode
				true, 					// isAutoPos
				isPopupContext			// isPopupContext
				);
	}
	

	function openSub(url, 
						name, 
						width, 
						height, 
						isResizable, 
						isFullScreen, 
						hasScrollBars, 
						hasStatus, 
						hasMenuBar, 
						hasToolBar, 
						hasDirectories,
						sourceName,
						outputName,
						controlName,
						formName,
						closeUrl,
						displayScript,
						isDivMode,
						isAutoPos,
						isPopupContext)
	{
		if (isPopupContext)
		{
			if (_browser.popupHelper.window!=null && (_browser.popupHelper.window.closed || _browser.popupHelper.window.name==undefined))
			{
				_browser.popupHelper.window = null;
				_browser.popupHelper.displayObject = null;
			}
			
			if (_browser.popupHelper.window!=null) 
			{
				closePopup(false, null);
			}
			
			if (_browser.popupHelper.displayObject!=null) return;
		}
		

		
		
		if (isDivMode)
			_browser.hideCombo();

		var posObj = null;
		
		if (isPopupContext)
		{
			_browser.popupHelper.sourceName = sourceName;
			_browser.popupHelper.outputName = outputName;
			_browser.popupHelper.controlName = controlName;
			_browser.popupHelper.formName = formName;
			_browser.popupHelper.closeUrl = closeUrl;
			
			_browser.popupHelper.mode='window';
		
		
			if (isDivMode)
			{
				_browser.popupHelper.mode='div';
			}

			_browser.popupHelper.source = _browser.getElement(sourceName);
			_browser.popupHelper.output = _browser.getElement(outputName);
			
			if (_browser.popupHelper.output!=null && _browser.popupHelper.output!=undefined)
			{
				posObj = _browser.popupHelper.output;
			}
			else if (_browser.popupHelper.source!=null && _browser.popupHelper.source!=undefined)
			{
				posObj = _browser.popupHelper.source;
			}
			
		}
		
		

		if (isDivMode)
		{
			var displayObject = null;
			var displayMode = null;
			
			
			if (displayScript!=null)
			{
				displayObject = _browser.getElement('div_'+name);	
				displayObject.innerHTML=eval(displayScript+"()");
				displayMode = 'div';
			}
			else
			{
				displayObject = _browser.getElement('iframe_'+name);	
				displayObject.location.replace(url);
				displayMode = 'iframe';
			}	

			if (isPopupContext)
			{
				_browser.popupHelper.displayObject = displayObject;
				_browser.popupHelper.mode = displayMode;
			}
			
			if (displayScript!=null)
			{
				setWidth(displayObject, 10);
				setHeight(displayObject, 10);
			}
			else
			{
				setWidth(displayObject, 500);
				setHeight(displayObject, 500);
			}			
			
			
			// ============ @todo : need review : may use Dom.js:dom_showInlineObjectByPos(...)
			container = DHTML.get_ParentContainer(posObj);
			
			x=0;
			y=0;
			if (posObj!=null)
			{
				x = getX(posObj);
				y = getY(posObj);
				x = x + getWidth(posObj);
			}

			if (container!=null)
			{
				scy = container.scrollTop;
				scx = container.scrollLeft;

				width = container.clientWidth;
				height = container.clientHeight;
			}
			else
			{			
				scy = 0;
				scx = 0;
				
				width = document.body.clientWidth;
				height = document.body.clientHeight;
			}
			
			if (x-scx>width-250) x=width-250+scx;
			if (y-scy>height-200) y=height-200+scy;
			
			setX(displayObject, x);
			setY(displayObject, y);
			
			
			showObj(displayObject);
			DHTML.setFocus(displayObject);
		}
		else
		{		
			if (width==null) width = 600;
			if (height==null) height = 400;
		
			var option = "";
			option = option + "width=" + width;
			option = option + ", height=" + height;
		
			if (isResizable)
				option = option + ", resizable";

			if (isFullScreen)
				option = option + ", fullscreen";

			if (hasScrollBars)
				option = option + ", scrollbars";

			if (hasMenuBar)
				option = option + ", menubar";

			if (hasStatus)
				option = option + ", status";

			if (hasToolBar)
				option = option + ", toolbar";

			if (hasDirectories)
				option = option + ", directories";


			var left = 0;
			var top	 = 0;
			
			
			if (posObj!=null && isAutoPos)
			{
				left = getX(posObj) + getWidth(posObj);
				top = getY(posObj) + getHeight(posObj);
			
			

				top += window.screenTop - document.body.scrollTop;
	
				if (left>window.width-200)
					left = left - 200;
			}
			else
			{
			//	left=0;
			//	top=0;
				left = window.screen.width/2-width/2;
				top = window.screen.height/2-height/2;
			}
			
		
			option = option + ", left=" + left;
			option = option + ", top=" + top;

			var displayObject = null;
			var win = window.open(url, name, option);
			
			
			if (isPopupContext)
			{
				_browser.popupHelper.window = win;
				
			}
		
			if (url==null || url=='') 
			{
				st='';
				st=st+'<body><html>\n';
				st=st+'<title>Calendar</title>\n';
				st=st+'<script>\n';
				st=st+'var _browser = new browser();\n';
				st=st+'function browser()\n';
				st=st+'{\n';
				st=st+'}\n';
				st=st+'_browser.popupHelper = window.opener._browser.popupHelper;\n';
				st=st+'<\/script>\n';
				st=st+'<body scroll=\"no\"><form  id=\"formCalendar\" name=\"formCalendar\">\n';
				st=st+'<table width=\"100%\"><tr><td width=\"100%\">\n';
				st=st+'<div width=\"100%\" align=\"center\" id=\"div_'+name+'\" style=\"position:absolute;top:0;left:0;\"></div>\n';
				st=st+'</td></tr></table>\n';
				st=st+'<\/body></html>\n';
			
				win.document.write(st);
				win.document.close();
			}
	
			if (displayScript!=null)
			{
				displayObject = popup.window.document.all['div_'+name];	
				displayObject.innerHTML=eval(displayScript+"()");
				displayObject.focus();
			}
			
			if (isPopupContext)
			{
				_browser.popupHelper.displayObject = displayObject;
			}
			
			return win;
	}
}

function closePopupAuto(doAction, result)
{
	if (_browser.mayClosePopup!=null)
	{
		mayClose = _browser.mayClosePopup();
		if (!mayClose) return;
	}
	
	
	if (_browser.popupHelper==null) return;
	if (_browser.popupHelper.mode==null) return;
	
	
	if (_browser.popupHelper.mode=='div')
	{
		_browser.showCombo();
		if (_browser.popupHelper.displayObject==null) return;
	}
	else if (_browser.popupHelper.mode=='window')
	{
		return;
	}
	
	closePopup(doAction, result);
	
}

function setMayClosePopup(mayClosePopup)
{
	_browser.mayClosePopup = mayClosePopup;
}

function closePopup(doAction, result)
{
	if (_browser.popupHelper==null) return;
	if (_browser.popupHelper.mode==null) return;
	
	if (_browser.popupHelper.mode=='div')
	{
		_browser.showCombo();
		if (_browser.popupHelper.displayObject==null) return;
	}

	if (_browser.popupHelper.window!=null && _browser.popupHelper.window.closed)
	{
		_browser.popupHelper.window = null;
		_browser.popupHelper.displayObject = null;
		_browser.popupHelper = null;
		return;
	}

	if (result==null && 
		_browser.popupHelper.outputName!=null && 
		_browser.popupHelper.controlName!=null && 
		_browser.popupHelper.controlName!=undefined)
	{
		
		
		evalfunc = "_browser.popupHelper.popupBrowser.get_FieldValue(";
		evalfunc = evalfunc + "'" + "" + "', "
		evalfunc = evalfunc + "'" + _browser.popupHelper.controlName + "'"
		evalfunc = evalfunc + ");"
		
		result = eval(evalfunc);
	}

	if (result!=null && _browser.popupHelper.closeUrl==null && _browser.popupHelper.outputName!=null)
	{
		evalfunc = "_browser.popupHelper.parentBrowser.set_FieldValue('" + _browser.popupHelper.formName + "', '" + _browser.popupHelper.outputName + "', result)";
		eval(evalfunc);
		
	}

	if (_browser.popupHelper.mode=='window')
	{
		_browser.popupHelper.displayObject = null;
		_browser.popupHelper.window.close();
		_browser.popupHelper.window = null;
	}
	else
	{
		_browser.popupHelper.displayObject.style.visibility="hidden";
		_browser.popupHelper.displayObject=null;
	}

	
		
	if (doAction && _browser.popupHelper.closeUrl!=null)
	{
		
		if (_browser.popupHelper.formName!=null)
		{
			var dest = _browser.getFormElement("__sgx_popup_result",_browser.popupHelper.formName);
			dest.value = result;
			eval(_browser.popupHelper.closeUrl);
		}
		else
		{
			url = _browser.popupHelper.closeUrl + "&popupResult=" + result;
			window.opener.location.replace(url);
		}
		
	}
}

function myclose()
{
}

 function createBookmarkLink(title, URLToAdd) 
 {
	if (window.sidebar) { // Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, URLToAdd,"");
	} else if( window.external ) { // IE Favorite
		window.external.AddFavorite( URLToAdd, title); }
	else if(window.opera && window.print) { // Opera Hotlist
		return true; }
 }



