if ( ! window.enview )
    window.enview = new Object();
	
if ( ! window.enview.portal )
    window.enview.portal = new Object();

enview.portal.PAGE_ID_NAME = "Enview.Page";
enview.portal.LAYOUT_ID_NAME = "Enview.Layout";
enview.portal.COLUMN_ID_NAME = "Enview.Column";
enview.portal.FRAGMENT_ID_NAME = "Enview.Fragment";
enview.portal.PORTLET_ID_NAME = "Enview.Portlet";
enview.portal.FRAGMENT_ID = "fid";
enview.portal.FRAGMENT_TYPE = "ftid";
enview.portal.LAYOUT = "layout";
enview.portal.PORTLET = "portlet";
enview.portal.FRAGMENT_AREA_STYLE = "1px solid green";
enview.portal.DROP_AREA_STYLE = "1px solid red";
enview.portal.DRAG_AREA_STYLE = "1px solid blue";
enview.portal.FRAGMENT_AREA_STYLE = "1px dotted green";
enview.portal.DROP_AREA_STYLE = "1px dotted red";
enview.portal.DRAG_AREA_STYLE = "1px solid blue";
enview.portal.LAYOUT_UNIT = "px";
enview.portal.LAYOUT_MAX_SIZE = 1024;


enview.portal.Page = function()
{
	this.m_ajax = new enview.util.Ajax();
	this.m_enviewUtility = new enview.util.Utility();
	//this.m_portletSelector = new enview.portal.PortletSelector();
	//this.m_portletEditor = new enview.portal.PortletEditor();
	//this.m_myPageEditor = new enview.portal.MyPageEditor();
	//this.m_aboutDlg = new enview.portal.About();
	
	this.m_emptyHandler = function()
	{
	  this.populate = function(data) 
	  { 
	  }
	  this.failure = function(msg)
	  {
		alert(msg);
	  }
	};  
	
	this.m_checkNoticeHandler = function()
	{
	  this.populate = function(data) 
	  { 
		var result = portalPage.m_ajax.retrieveElementValue("message", data);
		alert( result );
	  }
	  this.failure = function(msg)
	  {
		alert(msg);
	  }
	};  
}
enview.portal.Page.prototype =
{
	m_version : null,
	m_id : null,
	m_path : null,
	m_theme : null,
	m_themePath : null,
	m_rootLayout : null,
	m_userId : null,
	m_contextPath : null,
	m_servletPath : null,
	m_formAction : null,
	m_title : null,
	m_messageResource : null,
	m_decoration : null,
	m_domElement : null,
	m_dragDropMgr : null,
	m_ajax : null,
	m_isDragMode : false,
	m_portletSelector : null,
	m_portletEditor : null,
	m_myPageEditor : null,
	m_aboutDlg : null,
	m_tabPane : null,
	m_isPortletSelectorOn : false,
	m_isPortletEditorOn : false,
	m_enviewUtility : null,
	m_fragmentMap : null,
	m_emptyHandler : null,
	m_checkNoticeHandler : null,
	m_currentZoomFactor : 100, // 현재비율
	m_maxZoomFactor : 200, // 최대비율(500으로하면 5배 커진다)
	m_minZoomFactor : 80, // 최소비율

	init : function( version, isEditing, userId, formAction, fragment, decoration, node )
	{
		this.m_version = version;
		this.m_userId = userId;
		this.m_formAction = formAction;
		this.m_id = fragment.pageAttribute.id;
		this.m_theme = fragment.pageAttribute.theme;
		this.m_contextPath = fragment.pageAttribute.contextPath;
		this.m_ajax.setContextPath( this.m_contextPath );
		this.m_servletPath = fragment.pageAttribute.servletPath;
		this.m_themePath = fragment.pageAttribute.themePath;
		this.m_path = fragment.pageAttribute.path;
		this.m_title = fragment.pageAttribute.title;
		this.m_decoration = decoration;
		this.m_messageResource = new enview.portal.MessageResource();
		this.m_fragmentMap = new Map();
		this.m_fragmentMap.put(fragment.attribute.id, fragment.attribute);
		if( fragment.fragments != null ) {
			this.setFragmentMap( fragment.fragments );
		}
		
		//alert("attribute=" + fragment.pageAttribute.path);
		//node = document.getElementById("Enview.Portal.ContentArea");
		
		if( isEditing == "true" ) {
			var layoutNode = this.findChildren(node);
			this.m_domElement = node;
			
			this.m_dragDropMgr = new enview.util.DragDropMgr(node, "Enview.Fragment:*,PortletSelector[*");
			this.m_dragDropMgr.attach();

			//this.m_rootLayout = new enview.portal.Layout( this, fragment );
			this.m_rootLayout = new enview.portal.Layout( this, layoutNode );
			this.m_rootLayout.setIsRoot( true );
		}

		//this.m_portletEditor.init();
		//this.m_myPageEditor.init();
		//this.m_aboutDlg.init();
		
/*		
 if (window.screenLeft === undefined) { // IE
     Geometry.getWindowX = function() { return window.screenLeft; };
     Geometry.getWindowY = function() { return window.screenTop; };
 }
 else if (window.screenX) { // 파이어폭스
     Geometry.getWindowX = function() { return window.screenX; };
     Geometry.getWindowY = function() { return window.screenY; };
 }
 if (window.innterWidth) { // IE를 제외한 모든 브라우저
     Geometry.getViewportWidth = function() { return window.innerWidth; };
     Geometry.getViewportHeight = function() { return window.innerHeight; };
     Geometry.getHorizontalScroll = fucntion() { return window.pageXOffset; };
     Geometry.getVerticalScroll = function() { return window.pageYOffset; };
 }
 else if (document.documentElement && document.documentElement.clientWidth) {
     // 이들 함수는 DOCTYPE이 존재할 때의 IE 6을 위한 것.
     Geometry.getViewportWidth = 
            fucntion() { return document.documentElement.clientWidth; };
     Geometry.getViewportHeight = 
            function() { return document.documentElement.clientHeight; };
     Geometry.getHorizontalScroll = 
            function() { return document.documentElement.scrollLeft; };
     Geometry.getVerticalScroll =
            function() { return document.documentElemnet.scrollTop; };
 }
 else if (document.body.clientWidth) {
      // 이들은 IE4, IE5 그리고 DOCTYPE이 없을때의 IE6을 위한 것.
      Geometry.getViewportWidth =
            function() { return document.body.clientWidth; };
      Geometry.getViewportHeight =
            function() { return document.body.clientHeight; };
      Geometry.getHorizontalScroll = 
            function() { return document.body.scrollLeft; };
      Geometry.getVerticalScroll = 
            function() { return document.body.scrollTop; };
 }
 // 이들 함수는 문서의 크기를 반환한다. 브라우저 창과 직접적으로
 // 관련은 없지만, 이곳에 함께 정의하여 두는 것이 유용하다.
 if (document.documentElement && document.documentElement.scrollWidth) {
      Geometry.getDocumentWidth = 
            function() { return document.documentElement.scrollWidth; };
      Geometry.getDocumentHeight = 
            function() { return document.documentElement.scrollHeight; };
 }
 else if (document.body.scrollWidth) {
      Geometry.getDocumentWidth = 
            function() { return document.body.scrollWidth; };
      Geometry.getDocumentHeight = 
            function() { return document.body.scrollHeight; };
 }
*/

	},
	getVersion : function()
	{
		return this.m_version;
	},
	setFragmentMap : function( fragments )
	{
		for(var i=0; i<fragments.length; i++) {
			this.m_fragmentMap.put(fragments[i].attribute.id, fragments[i].attribute);
			if( fragments[i].fragments != null ) {
				this.setFragmentMap( fragments[i].fragments );
			}
		}
	},
	getFragmentAttributes : function( fragmentId )
	{
		return this.m_fragmentMap.get( fragmentId );
	},
	getFragmentAttribute : function( fragmentId, attName )
	{
		var attributes = this.m_fragmentMap.get( fragmentId );
		if( attributes != null ) {
			return attributes[ attName ];
		}
		
		return null;
	},
	
	/*
	init : function( isEditing, userId, contextPath, servletPath, formAction, path, title, decoration, node )
	{
		this.m_userId = userId;
		this.m_contextPath = contextPath;
		this.m_servletPath = servletPath;
		this.m_formAction = formAction;
		this.m_path = path;
		this.m_title = title;
		this.m_decoration = decoration;
		this.m_messageResource = new enview.portal.MessageResource();
		
		if( isEditing == "true" ) {
			var layoutNode = this.findChildren(node);
			//alert("layoutNode.fid=" + layoutNode.getAttribute("fid"));
			this.m_domElement = node;
			
			this.m_dragDropMgr = new enview.util.DragDropMgr(node, "Enview.Fragment:*,PortletSelector[*");
			this.m_dragDropMgr.attach();

			this.m_rootLayout = new enview.portal.Layout( this, layoutNode );
			this.m_rootLayout.setIsRoot( true );
			this.m_id = this.m_rootLayout.getDomElement().getAttribute("pid");
			//this.m_path = this.m_rootLayout.getDomElement().getAttribute("ppath");
			this.m_theme = this.m_rootLayout.getDomElement().getAttribute("ptheme");
		}

		//this.m_portletSelector.init();
		this.m_portletEditor.init();
		this.m_myPageEditor.init();
	},
	*/
	
	getUserId : function()
	{
		return this.m_userId;
	},
	getContextPath : function()
	{
		return this.m_contextPath;
	},
	getServletPath : function()
	{
		return this.m_servletPath;
	},
	getFormAction : function()
	{
		return this.m_formAction;
	},
	getTitle : function()
	{
		return this.m_title;
	},
	setTitle : function(title)
	{
		this.m_title = title;
	},
	getMessageResource : function( key )
	{
		return this.m_messageResource.getMessage(key);
	},
	getMessageResourceByParam : function()
	{
		var retMsg = null;
		var arr = arguments;
		//var regexp = /문자열/g;
		if( arr != null && arr.length>0 ) {
			retMsg = this.m_messageResource.getMessage( arr[0] );
			for(var i=0; i<arr.length; i++) {
				var pattern = "{" + i + "}";
				retMsg = retMsg.replace(pattern, arr[i+1]);
			}
		}
		
		return retMsg;
	},
	getDecoration : function()
	{
		return this.m_decoration;
	},
	
	findObject : function (id)
	{
		//alert("id=" + id);
		return this.m_rootLayout.findObject( id );
	},
	
	findChildren : function (node)
	{
		if(node.id!=null && node.id.indexOf(enview.portal.LAYOUT_ID_NAME) > -1) {
			//alert(" check id=" + node.id + ", fid=" + node.getAttribute("fid"));
			return node;
		}
		else {
			//alert("nodeName=" + node.nodeName + ", id=" + node.id);
			if( node.hasChildNodes() == true ) {
				var child = null;
				var childrenCollection = node.childNodes;
				//alert(" length=" + childrenCollection.length);
				for(var idx=0; idx< childrenCollection.length; idx++){
					child = childrenCollection[idx];
					var retValue = this.findChildren( child );
					
					if( retValue != null ) {
						//alert(" retValue id=" + retValue.id + ", fid=" + retValue.getAttribute("fid") + ", nodeName=" + retValue.nodeName + ", idx=" + idx);
						return retValue;
					}
				}
			}
		}
		
		return null;
	},
	getId : function()
	{
		return this.m_id;
	},
	getPath : function()
	{
		return this.m_path;
	},
	getTheme : function()
	{
		return this.m_theme;
	},
	getThemePath : function()
	{
		return this.m_themePath;
	},
	getType : function()
	{
		return enview.portal.PAGE_ID_NAME;
	},
	getDragDropMgr : function() 
	{ 
		return this.m_dragDropMgr; 
	},
	getPortletSelector : function() 
	{ 
		return this.m_portletSelector; 
	},
	getPortletEditor : function() 
	{ 
		return this.m_portletEditor; 
	},
	getMyPageEditor : function() 
	{ 
		return this.m_myPageEditor; 
	},
	getUtility : function() 
	{ 
		return this.m_enviewUtility; 
	},
	invokeAjax : function(action, names, values, handler, mimeType)
	{
		this.m_ajax.invoke(action, names, values, handler, mimeType);
	},
	toggleDragMode : function()
	{
		this.m_isDragMode = (this.m_isDragMode == false) ? true : false;
		if( this.m_rootLayout != null ) {
			this.m_rootLayout.toggleDragMode( this.m_isDragMode );
		}
	},
	isDragMode : function()
	{
		return this.m_isDragMode;
	},
	getPopupElement : function()
	{
		if( this.m_isPortletSelectorOn == false ) return null;
		
		return this.m_portletSelector.getDomElement();
	},
	showPortletSelector : function()
	{
		if( this.m_portletSelector == null ) {
			this.m_portletSelector = new enview.portal.PortletSelector();
			this.m_portletSelector.init();
		}
		this.m_portletSelector.doShow();
		this.m_isPortletSelectorOn = true;
		this.m_dragDropMgr.setExceptDropArea( this.m_portletSelector );
		
		this.hidePortletEditor();
		this.hideMyPageEditor();
		this.hideTabContextMenu();
	},
	hidePortletSelector : function()
	{
		if( this.m_portletSelector ) {
			this.m_portletSelector.doHide();
			this.m_isPortletSelectorOn = false;
			this.m_dragDropMgr.setExceptDropArea( null );
		}
	},
	showPortletEditor : function(id)
	//showPortletEditor : function(elm)
	{
		if( this.m_portletEditor == null ) {
			this.m_portletEditor = new enview.portal.PortletEditor();
			this.m_portletEditor.init();
		}
		//alert("a_event=" + a_event + ",id=" + id + ",elm=" + elm);
		//var evt = a_event==null ? event : a_event;
		//if( evt.button != 2) return;	// left mouse button click
		
		//alert("this.portletEditor=" + this.portletEditor);
		//var id = eml.id;
		//alert("id=" + id);
		var elm = document.getElementById( id );
		
		if( this.m_isPortletEditorOn == false ) {
			var obj = this.findObject( id );
			if( obj != null ) {
				obj.showPortletEditor(this.m_portletEditor, elm);
				this.m_isPortletEditorOn = true;
			}
		}
		else {
			this.m_portletEditor.hide();
			this.m_isPortletEditorOn = false;
		}
		
		this.hidePortletSelector();
		this.hideMyPageEditor();
		this.hideTabContextMenu();
	},
	hidePortletEditor : function()
	{
		if( this.m_portletEditor ) {
			this.m_portletEditor.hide();
			this.m_isPortletEditorOn = false;
		}
	},
	removePortlet : function(id)
	{
		if( confirm(this.m_messageResource.getMessage("messageRemove")) ) {
			var obj = this.findObject( id );
			if( obj != null ) {
				obj.removePortlet();
			}
		}
	},
	showMyPageEditor : function(id, isCreate)
	{
		if( this.m_myPageEditor == null ) {
			this.m_myPageEditor = new enview.portal.MyPageEditor();
			this.m_myPageEditor.init();
		}
		
		var elm = document.getElementById( "Enview.MyPage.TabHeader:" + id );
		if( isCreate ) {
			this.m_myPageEditor.doCreate(id, elm);
		}
		else {
			this.m_myPageEditor.doSelect(id, elm);
		}
		
		this.m_myPageEditor.show(elm);
		document.getElementById("MyPageEditorDialog.SELECT_THEME").value = this.getTheme();
		//alert("mypage theme=" + this.getTheme());
				
		this.hidePortletEditor();
		this.hidePortletSelector();
		this.hideTabContextMenu();
	},
	hideMyPageEditor : function()
	{
		if( this.m_myPageEditor ) {
			this.m_myPageEditor.hide();
			this.m_isPortletSelectorOn = false;
		}
	},
	removeMyPage : function()
	{
		if( confirm(this.m_messageResource.getMessage("messageRemove")) ) {
			if( this.m_myPageEditor == null ) {
				this.m_myPageEditor = new enview.portal.MyPageEditor();
				this.m_myPageEditor.init();
			}
			this.m_myPageEditor.doRemove(this.m_userId);
		}
	},
	setDefaultMyPage : function()
	{
		if( this.m_myPageEditor == null ) {
			this.m_myPageEditor = new enview.portal.MyPageEditor();
			this.m_myPageEditor.init();
		}
		this.m_myPageEditor.setDefaultMyPage(this.m_userId, this.m_path);
	},
	setDefaultGroupPage : function()
	{
		if( this.m_myPageEditor == null ) {
			this.m_myPageEditor = new enview.portal.MyPageEditor();
			this.m_myPageEditor.init();
		}
		this.m_myPageEditor.setDefaultGroupPage(this.m_userId);
	},
	hideTabContextMenu : function()
	{
		if( myPageTabPane != null ) {
			myPageTabPane.m_contextMenu.hide();
		}
	},
	hidePortalPageDialog : function()
	{
		this.hideMyPageEditor();
		this.hidePortletEditor();
		this.hidePortletSelector();
	},
	checkNotice : function(id)
	{
		var names = new Array();
		var values = new Array();
		var id = 0;
		names[id] = "method";
		values[id++] = "checknotice";
		names[id] = "noticeId";
		values[id++] = id;
		portalPage.invokeAjax("notice", names, values, new this.m_checkNoticeHandler(), "text/json"); 
	},
	closeNotice : function(id)
	{
		var names = new Array();
		var values = new Array();
		var id = 0;
		names[id] = "method";
		values[id++] = "closenotice";
		names[id] = "noticeId";
		values[id++] = id;
		portalPage.invokeAjax("notice", names, values, new this.m_emptyHandler(), "text/json"); 
	},
 	zoomIn : function() {
		if (this.m_currentZoomFactor < this.m_maxZoomFactor) {
			this.m_currentZoomFactor += 10; //25%씩 커진다.
		} else {
			return;
		}
		document.body.style.zoom = this.m_currentZoomFactor + "%";
	},
	zoomOut : function() {
		if (this.m_currentZoomFactor > this.m_minZoomFactor) {
			this.m_currentZoomFactor -= 10; //25%씩 작아진다.
		} else {
			return;
		}
		document.body.style.zoom = this.m_currentZoomFactor + "%";
	},
	showAbout : function()
	{
		if( this.m_aboutDlg == null ) {
			this.m_aboutDlg = new enview.portal.About();
			this.m_aboutDlg.init();
		}
		this.m_aboutDlg.doShow();
	},
	hideAbout : function()
	{
		this.m_aboutDlg.doHide();
	}
}

/*
enview.portal.Layout = function(parent, fragment)
{
	this.m_parent = parent;
	this.m_id = fragment.attribute.id;
	this.m_type = enview.portal.LAYOUT_ID_NAME;
	this.m_domElement = document.getElementById("Enview.Layout:" + this.m_id);
	this.m_name = fragment.attribute.name;
	this.m_decorator = fragment.attribute.decorator;
	//this.m_formAction = node.getAttribute("formaction");
	this.m_align = fragment.attribute.align;
	this.m_children = this.findChildren( node );
}
*/
enview.portal.Layout = function(parent, node)
{
	this.m_id = node.id;
	this.m_parent = parent;
	this.m_type = enview.portal.LAYOUT_ID_NAME;
	this.m_domElement = node;
	this.m_name = node.getAttribute("fname");
	this.m_decorator = node.getAttribute("fdecorator");
	this.m_layoutType = node.getAttribute("flayouttype");
	this.m_formAction = node.getAttribute("formaction");
	this.m_align = node.getAttribute("falign");
	this.m_fragmentId = node.getAttribute(enview.portal.FRAGMENT_ID);
	this.m_children = this.findChildren( node );
}

enview.portal.Layout.prototype =
{
	m_id : null,
	m_parent : null,
	m_children : null,	// columns
	m_domElement : null,
	m_fragmentId : null,
	m_name : null,
	m_type : null,
	m_align : null,
	m_decorator : null,
	m_formAction : null,
	m_isRoot : false,
	m_columnUnit : "px",
	
	findObject : function (id)
	{
		if( this.m_id == id ) {
			return this;
		}
		
		var searchObject = null;
		if( this.m_children != null ) {
			for(var idx=0; idx<this.m_children.length; idx++) {
				searchObject = this.m_children[idx].findObject( id );
				if( searchObject != null )
					return searchObject;
			}
		}
	},
	findChildren : function (node)
	{
		this.m_fragmentId = node.getAttribute(enview.portal.FRAGMENT_ID);
		var columns = new Array();
		
		var columnId = node.getAttribute("columnIds");
		if( columnId ) {
			var columnIds = columnId.split(",");
			//alert("columnIds=" + columnId);
			for(var idx=0, idy=0; idx<columnIds.length; idx++) {
				var columnElem = document.getElementById("Enview.Column:" + columnIds[idx]);
				//alert("Enview.Column:" + columnIds[idx] + ", columnElem=" + columnElem);
				if( columnElem != null ) {
					columns[ idy++ ] = new enview.portal.Column(this, columnElem)
				}
			}
			
			/*
			var columns = new Array();
			if( node.hasChildNodes() == true ) {
				var childrenCollection = node.childNodes;
				for(var idx=0, idy=0; idx< childrenCollection.length; idx++){
					var child = childrenCollection[idx];
					if(child.id!=null && child.id.indexOf(enview.portal.COLUMN_ID_NAME) > -1) {
						columns[ idy++ ] = new enview.portal.Column(this, child)
					}
				}
			}
			*/
		}
		
		return columns;
	},
	
	getId : function()
	{
		return this.m_id;
	},
	getName : function()
	{
		return this.m_name;
	},
	getParent : function()
	{
		return this.m_parent;
	},
	getType : function()
	{
		return this.m_type;
	},
	getDomElement : function()
	{
		return this.m_domElement;
	},
	getFragmentId : function()
	{
		return this.m_fragmentId;
	},
	getDecorator : function()
	{
		return this.m_decorator;
	},
	getFormAction : function()
	{
		return this.m_formAction;
	},
	setIsRoot : function( isRoot )
	{
		this.m_isRoot = isRoot;
	},
	isRoot : function()
	{
		return this.m_isRoot;
	},
	getColumnUnit : function()
	{
		return this.m_columnUnit;
	},
	getColumns : function()
	{
		var sizeValues = new Array();
		if( this.m_children != null ) {
			for(var idx=0; idx<this.m_children.length; idx++) {
				var size = this.m_children[idx].getColumnSize();
				//alert("size=" +size);
				if( size.indexOf( "%" ) > -1 ) {
					this.m_columnUnit = "%";
					sizeValues[idx] = Math.round( size.substring(0, size.indexOf( "%" )) );
				}
				else if( size.indexOf( "px" ) > -1 ) {
					this.m_columnUnit = "px";
					sizeValues[idx] = Math.round( size.substring(0, size.indexOf( "px" )) );
				}
				else {
					sizeValues[idx] = Math.round( size );
				}
			}
		}
		
		return sizeValues;
	},
	setColumns : function(sizes)
	{
		var sizeValues = sizes.split(",");
		if(sizeValues.length != this.m_children.length) {
			alert("It must be same column number !!!");
			return;
		}
		
		if( this.m_children != null ) {
			for(var idx=0; idx<this.m_children.length; idx++) {
				this.m_children[idx].setColumnSize( sizeValues[idx] + enview.portal.LAYOUT_UNIT );
			}
		}
	},
	getIndex : function(childObject)
	{
		if( this.m_children != null ) {
			for(var idx=0; idx<this.m_children.length; idx++) {
				if( this.m_children[idx] == childObject )
					return idx;
			}
		}
		
		return 0;
	},
	addColumn : function(columnObject)
	{
		if( this.m_children ) {
			this.m_children.push( columnObject );
		}
		else {
			this.m_children = new Array();
			this.m_children.push( columnObject );
		}
	},
	cleanEmptyFragment : function()
	{
		for(var i=0; i<this.m_children.length; i++) {
			this.m_children[i].cleanEmptyFragment();
		}
	},
	toggleDragMode : function(isDragMode)
	{
		if( this.m_children != null ) {
			for(var idx=0; idx< this.m_children.length; idx++){
				this.m_children[idx].toggleDragMode( isDragMode );
			}
		}
	},
	showPortletEditor : function(portletEditor, elm)
	{
		portletEditor.show( this, elm );
		//alert("this.m_layoutType=" + this.m_layoutType);
		if( this.m_parent.getType() == enview.portal.PAGE_ID_NAME ) {
			//document.getElementById("LayoutPortletEditor.SELECT_THEME").value = this.m_parent.getTheme();
		}
		document.getElementById("LayoutPortletEditor.SELECT_LAYOUT").value = this.m_layoutType;
		document.getElementById("LayoutPortletEditor.SELECT_ALIGN").value = this.m_align;
		//document.getElementById("LayoutPortletEditor.SELECT_DECORATOR").value = this.m_decorator;
	},
	insertLayout : function( data )
	{
		location.reload(false);
		/*
		var id = portalPage.m_ajax.retrieveElementValue("id", data);
		var pageId = portalPage.m_ajax.retrieveElementValue("pageId", data);
		var path = portalPage.m_ajax.retrieveElementValue("path", data);
		var columns = portalPage.m_ajax.retrieveElementValue("columns", data);
		var sizes = portalPage.m_ajax.retrieveElementValue("sizes", data);
		var title = portalPage.m_ajax.retrieveElementValue("title", data);
		var name = portalPage.m_ajax.retrieveElementValue("name", data);
		var row = portalPage.m_ajax.retrieveElementValue("row", data);
		var col = portalPage.m_ajax.retrieveElementValue("col", data);
		
		var htmlStr = "";
		htmlStr += "<div class='portlet-edit-bar' oncontextmenu='return false;' >";
		htmlStr += "	<table width='100%' height='100%'>";
		htmlStr += "		<tr>";
		htmlStr += "			<td align='left'>" + title + "</td>";
		htmlStr += "			<td align='right'>";
		htmlStr += "				<a href=\"javascript:portalPage.showPortletEditor('Enview.Fragment:" + id + "')\">";
		htmlStr += "					<img src='" + portalPage.getContextPath() + "/decorations/images/customize.gif' border='0' align='absmiddle' title='레이아웃 편집'/>";
		htmlStr += "				</a>";
		htmlStr += "				<a href=\"javascript:portalPage.removePortlet('Enview.Fragment:" + id + "')\">";
		htmlStr += "					<img src='" + portalPage.getContextPath() + "/decorations/images/icon_del.gif' border='0' align='absmiddle' title='레이아웃 제거'/>";
		htmlStr += "				</a>";
		htmlStr += "			</td>";
		htmlStr += "		</tr>";
		htmlStr += "	</table>";
		htmlStr += "</div>";
	  
		htmlStr += "<div id='Enview.Layout:js_" + id + "_' fid='" + id + "' fname='" + name + "' pid='" + pageId + "' ppath='" + path + "' ";
		htmlStr += "	ptheme='' flayouttype='" + name + "' fdecorator='' ";
		htmlStr += "	formaction='' falign='' ";
		var columnIds = "";
		for(var i=0; i<columns; i++) {
			columnIds += id + "." + i + ",";
		}
		htmlStr += "	columnIds='" + columnIds + "' >";
		
		htmlStr += "	<div class='layout-edit-bar'>";
		htmlStr += "	</div>";

		htmlStr += "	<table id='Enview.Layout.Table:" + id + "' width='100%' border='0' cellpadding='0' cellspacing='4' class='layout-column'>";
		htmlStr += "	<tr>";
		
		var sizeArray = sizes.split(",");
		for(var i=0; i<columns; i++) {
			htmlStr += "		<td id='Enview.Layout.Td:" + id + "." + i + "' width='" + sizeArray[i] + "' valign='top'>";
			htmlStr += "			<div id='Enview.Column:" + id + "." + i + "' style='width:100%' fragmentIds='' columnSize='" + sizeArray[i] + "'>";
			htmlStr += "			</div>";
			htmlStr += "		</td>";
		}

		htmlStr += "	</tr>";
		htmlStr += "	</table>";
		htmlStr += "</div>  ";
		htmlStr += "<div style='clear:both;'></div>";
		
		
		var fragment = document.createElement('div');
		fragment.id = "Enview.Fragment:" + id;
		fragment.setAttribute("ftid", "layout");
		fragment.setAttribute("dragCopy", "false");
		fragment.innerHTML = htmlStr;
		
		var columnObj = this.m_children[ col ];
		var rowObj = columnObj.m_children[ row ];
		
		columnObj.m_domElement.insertBefore( fragment, rowObj.m_domElement );
		var fragmentObject = new enview.portal.Fragment(this, fragment);
		columnObj.m_children.push(fragmentObject);
		fragmentObject.setParent( columnObj );
		*/
	},
	changeLayout : function( data )
	{
		var id = portalPage.m_ajax.retrieveElementValue("id", data);
		var path = portalPage.m_ajax.retrieveElementValue("path", data);
		var title = portalPage.m_ajax.retrieveElementValue("title", data);
		var columns = portalPage.m_ajax.retrieveElementValue("columns", data);
		var sizes = portalPage.m_ajax.retrieveElementValue("sizes", data);
		var name = portalPage.m_ajax.retrieveElementValue("name", data);
		var layoutChange = portalPage.m_ajax.retrieveElementValue("layoutChange", data);
		
		var tableElem = document.getElementById("Enview.Layout.Table:" + id);

		if( layoutChange == "true" ) {
			location.reload(false);
			
			/*
			var fragmentTitleElem = document.getElementById("Enview.Fragment.Td:" + id);
			fragmentTitleElem.innerHTML = "<span>" + title + "</span>";
			this.setLayoutType( name );
			
			this.cleanEmptyFragment(); // 비어있는 Fragment를 제거한다.
			
			if( columns > this.m_children.length ) { // 컬럼수를 늘린 경우
				var sizeArray = sizes.split(",");
				var i=0;
				var columnHtmlArray = new Array();
				for(; i<this.m_children.length; i++) {
					var tdElem = document.getElementById("Enview.Layout.Td:" + id + "." + i);
					columnHtmlArray.push( tdElem.innerHTML );
					//alert("id=" + "Enview.Layout.Td:" + id + "." + i + ", html=" + columnHtmlArray[i]);
				}
				
				for(; tableElem.hasChildNodes(); ) {
					tableElem.removeChild( tableElem.childNodes[0] );
				}
				
				
				var body_tag = document.createElement('tbody');
				var tr_tag = document.createElement('tr');
				
				for(i=0; i<this.m_children.length; i++) {
					var td_tag = document.createElement('td');
					td_tag.id = "Enview.Layout.Td:" + id + "." + i;
					td_tag.width = sizeArray[i];
					td_tag.vAlign = "top";
					td_tag.innerHTML = columnHtmlArray[i]
					tr_tag.appendChild( td_tag );
				}
				for(i=this.m_children.length; i<columns; i++) {
					var htmlStr = "";
					htmlStr += "		<div id='Enview.Column:" + id + "." + i + "' style='width:100%' fragmentIds='' columnSize='" + sizeArray[i] + "'>";
					htmlStr += "		</div>";
					
					var td_tag = document.createElement('td');
					td_tag.id = "Enview.Layout.Td:" + id + "." + i;
					td_tag.width = sizeArray[i];
					td_tag.vAlign = "top";
					td_tag.innerHTML = htmlStr;
					tr_tag.appendChild( td_tag );
				}
				
				body_tag.appendChild( tr_tag );
				tableElem.appendChild( body_tag );
				
				document.getElementById("DebuggerDisplay").value = document.body.innerHTML; //tableElem.innerHTML;
				
				var childLength = this.m_children.length;
				this.m_children = new Array();
				for(i=0; i<childLength; i++) {
					var columnElem = document.getElementById("Enview.Column:" + id + "." + i);
					columnElem.width = sizeArray[i];
					columnElem.setAttribute("columnSize", sizeArray[i]);
					var columnObject = new enview.portal.Column(this, columnElem);
					this.addColumn( columnObject );
				}
				
				for(i=this.m_children.length; i<columns; i++) {
					var columnElem = document.getElementById("Enview.Column:" + id + "." + i);
					var columnObject = new enview.portal.Column(this, columnElem);
					this.addColumn( columnObject );
				}
				
			}
			else { // 컬럼 수를 줄인 경우
				var sizeArray = sizes.split(",");
				var i=0;
				var columnHtmlArray = new Array();

				var lastColumnElem = document.getElementById("Enview.Column:" + id + "." + (columns-1));
				for(i=columns; i<this.m_children.length; i++) {
					var columnElem = document.getElementById("Enview.Column:" + id + "." + i);
					lastColumnElem.innerHTML += columnElem.innerHTML;
				}
				
				for(i=0; i<columns; i++) {
					var tdElem = document.getElementById("Enview.Layout.Td:" + id + "." + i);
					columnHtmlArray.push( tdElem.innerHTML );
				}
				
				for(; tableElem.hasChildNodes(); ) {
					tableElem.removeChild( tableElem.childNodes[0] );
				}
				
				
				var body_tag = document.createElement('tbody');
				var tr_tag = document.createElement('tr');
				
				for(i=0; i<columns; i++) {
					var td_tag = document.createElement('td');
					td_tag.id = "Enview.Layout.Td:" + id + "." + i;
					td_tag.width = sizeArray[i];
					td_tag.vAlign = "top";
					//alert("buffer=" + columnHtmlArray[i]);
					td_tag.innerHTML = columnHtmlArray[i]
					tr_tag.appendChild( td_tag );
				}
				
				body_tag.appendChild( tr_tag );
				tableElem.appendChild( body_tag );
				
				document.getElementById("DebuggerDisplay").value = tableElem.innerHTML; 
				
				this.m_children = new Array();
				for(i=0; i<columns; i++) {
					//alert("columnElem=" + "Enview.Column:" + id + "." + i);
					var columnElem = document.getElementById("Enview.Column:" + id + "." + i);
					columnElem.width = sizeArray[i];
					columnElem.setAttribute("columnSize", sizeArray[i]);
					var columnObject = new enview.portal.Column(this, columnElem);
					this.addColumn( columnObject );
				}
				
			}
			*/
		}
		else { // 컬럼 크기가 변한 경우
			var sizeArray = sizes.split(",");
			for(var i=0; i<this.m_children.length; i++) {
				this.m_children[i].setColumnSize( sizeArray[i] );
				var tdElem = document.getElementById("Enview.Layout.Td:" + id + "." + i);
				if( tdElem ) tdElem.width = sizeArray[i];
			}
		}
	}
}


enview.portal.Column = function(parent, node)
{
	this.m_id = node.id;
	this.m_parent = parent;
	this.m_type = enview.portal.COLUMN_ID_NAME;
	this.m_domElement = node;
	this.m_columnSize = node.getAttribute("columnSize");
	this.m_children = this.findChildren( node );
	
	//this.m_domElement.style.border = "thin dotted blue";
	//this.m_domElement.style.padding = "3px";
	
	
	
	this.m_createPortletHandler = function(parentObject, childObject, idx, id, title, app_name, portlet_name)
	{
	  this.parentObject = parentObject;
	  this.childObject = childObject;
	  this.idx = idx;
	  this.id = id;
	  this.title = title;
	  this.app_name = app_name;
	  this.portlet_name = portlet_name;
	  this.populate = function(data) 
	  { 
		//location.reload(false);
		
		var name = portalPage.m_ajax.retrieveElementValue("name", data);
		var decorator = portalPage.m_ajax.retrieveElementValue("decorator", data);
		var contenttype = portalPage.m_ajax.retrieveElementValue("contenttype", data);
		var src = portalPage.m_ajax.retrieveElementValue("src", data);
		var resize = portalPage.m_ajax.retrieveElementValue("resize", data);
		var fclass = portalPage.m_ajax.retrieveElementValue("fclass", data);
		var maxheight = portalPage.m_ajax.retrieveElementValue("maxheight", data);
		var style = portalPage.m_ajax.retrieveElementValue("style", data);
		var width = portalPage.m_ajax.retrieveElementValue("width", data);
		var height = portalPage.m_ajax.retrieveElementValue("height", data);
		var scrolling = portalPage.m_ajax.retrieveElementValue("scrolling", data);
		var moresrc = portalPage.m_ajax.retrieveElementValue("moresrc", data);
		var moretarget = portalPage.m_ajax.retrieveElementValue("moretarget", data);
		var title = portalPage.m_ajax.retrieveElementValue("title", data);
		var content = portalPage.m_ajax.retrieveElementValue("content", data);
		//alert("idx=" + idx + ", id=" + id + ", title=" + title + ", child=" + childObject.getDomElement() + ", content=" + content);
		
		var htmlStr = "";
		htmlStr += "	<div class='portlet-edit-bar' oncontextmenu='return false;' >";
		htmlStr += "		<table width='100%' height='100%'>";
		htmlStr += "		<tr>";
		htmlStr += "			<td align='left'>" + title + "(Portlet)</td>";
		htmlStr += "			<td align='right'>";
		htmlStr += "				<a href=\"javascript:portalPage.showPortletEditor('Enview.Fragment:" + id + "')\">";
		htmlStr += "					<img src='" + portalPage.getContextPath() + "/decorations/images/customize.gif ' border='0' align='absmiddle' title='Edit Portlet'/>";
		htmlStr += "				</a>";
		htmlStr += "				<a href=\"javascript:portalPage.removePortlet('Enview.Fragment:" + id + "')\">";
		htmlStr += "					<img src='" + portalPage.getContextPath() + "/decorations/images/icon_del.gif ' border='0' align='absmiddle' title='Remove Portlet'/>";
		htmlStr += "				</a>";
		htmlStr += "			</td>";
		htmlStr += "		</tr>";
		htmlStr += "		</table>";
		htmlStr += "	</div>";
		htmlStr += "	<div id='Enview.Portlet:" + id + "' class='portlet clear' fid='" + id + "' fdecorator='clear' formaction='' fname='" + name + "' fdecorator='" + decorator + 
						"' fcontenttype='" + contenttype + "' fsrc='"+src+"' fresize='"+resize+"' fclass='"+fclass+"' fmaxheight='"+maxheight+"' fstyle='"+style+"' ftitle='"+ title +
						"' fwidth='" + width + "' fheight='" + height + "' fscrolling='" + scrolling + "' fmoresrc='" + moresrc + "' fmoretarget='" + moretarget + "'>";
		htmlStr += content;
		htmlStr += "	</div>";

		var fragment = document.createElement('div');
		fragment.id = "Enview.Fragment:" + id;
		fragment.setAttribute("ftid", "portlet");
		fragment.setAttribute("dragCopy", "false");
		fragment.innerHTML = htmlStr;
		
		this.parentObject.m_domElement.insertBefore( fragment, childObject.getDomElement() );
		
		var fragmentObject = new enview.portal.Fragment(this, fragment);
		this.parentObject.m_children.splice(idx, 0, fragmentObject);
		fragmentObject.setParent( this.parentObject );
		
	  }
	  this.failure = function(data)
	  {
		alert( data );
	  }
	};
	
	this.m_getPortletContentHandler = function(parentObject, childObject, idx, uniqueId)
	{
	  this.parentObject = parentObject;
	  this.childObject = childObject;
	  this.idx = idx;
	  this.populate = function(data) 
	  { 
		if( uniqueId !=null && (uniqueId=="dit-homepagebbs" || uniqueId=="dit-enviewbbs") ) {
			location.reload(false);
		}
		else {
			this.parentObject.getPortletContent( data, childObject, idx );
		}
	  }
	  this.failure = function(data)
	  {
		alert( data );
	  }
	}
	
	this.m_refreshHandler = function()
	{
	  this.populate = function(data) 
	  { 
		location.reload(false);
	  }
	  this.failure = function(data)
	  {
	  }
	}
	
	this.m_updateHandler = function()
	{
	  this.populate = function(data) 
	  { 
	  }
	  this.failure = function(data)
	  {
	  }
	};
}
enview.portal.Column.prototype =
{
	m_id : null,
	m_parent : null,	// layout
	m_children : null,	// rows (layout or portlet)
	m_domElement : null,
	m_columnSize : null,
	m_type : null,
	m_droppableArea : null,
	m_createPortletHandler : null,
	m_getPortletContentHandler : null,
	m_refreshHandler : null,
	m_updateHandler : null,
	
	findObject : function (id)
	{
		if( this.m_id == id ) {
			return this;
		}
		
		var searchObject = null;
		if( this.m_children != null ) {
			for(var idx=0; idx<this.m_children.length; idx++) {
				searchObject = this.m_children[idx].findObject( id );
				if( searchObject != null )
					return searchObject;
			}
		}
	},
	findChildren : function (node)
	{
		var fragments = new Array();
		
		var fragId = node.getAttribute("fragmentIds");
		//alert("fragmentIds=" + fragId);
		var fragIds = fragId.split(",");
		
		for(var idx=0, idy=0; idx<fragIds.length; idx++) {
			var fragmentElem = document.getElementById("Enview.Fragment:" + fragIds[idx]);
			//alert("Enview.Fragment:" + fragIds[idx] + ", elem=" + fragmentElem);
			if( fragmentElem != null ) {
				fragments[ idy++ ] = new enview.portal.Fragment(this, fragmentElem)
			}
		}
		
		/*
		if( node.hasChildNodes() == true ) {
			var childrenCollection = node.childNodes;
			for(var idx=0, idy=0; idx< childrenCollection.length; idx++){
				var child = childrenCollection[idx];
				if(child.id!=null && child.id.indexOf(enview.portal.FRAGMENT_ID_NAME) > -1) {
					fragments[ idy++ ] = new enview.portal.Fragment(this, child)
				}
			}
		}
		*/
		
		//if(fragments.length == 0) {
			var fragElement = document.createElement('div');
			fragElement.setAttribute("class", "portal-layout-cell");
			fragElement.setAttribute("className", "portal-layout-cell");
			this.m_domElement.appendChild( fragElement );
			fragments[ fragments.length ] = new enview.portal.Fragment(this, fragElement);
		//}
		
		return fragments;
	},
	getId : function()
	{
		return this.m_id;
	},
	getParent : function()
	{
		return this.m_parent;
	},
	getChildren : function()
	{
		return this.m_children;
	},
	getType : function()
	{
		return this.m_type;
	},
	getDomElement : function()
	{
		return this.m_domElement;
	},
	getColumnSize : function()
	{
		//return this.m_domElement.style.width;
		return this.m_columnSize;
	},
	setColumnSize : function(size)
	{
		this.m_columnSize = size;
		//this.m_domElement.style.width = size;
	},
	insert : function( childObject, componentId, componentAppName, componentName, componentTitle, uniqueId, addValue1, addValue2, addValue3 )
	{
		for(var idx=0; idx<this.m_children.length; idx++) {
			if(this.m_children[idx] == childObject) {
				break;
			}
		}
		
		var fragElement = document.createElement('div');
		this.m_children.splice(idx, 0, new enview.portal.Fragment(this, fragElement));
		
		var i = 0;
		var names = new Array();
		var values = new Array();
		
		if( componentAppName == "enview-layouts" ) {
			names[i] = "method";
			values[i++] = "insertlayout";
			names[i] = "path";
			values[i++] = portalPage.getPath();
			names[i] = "page_id";
			values[i++] =portalPage.getId();
			names[i] = "layout";
			values[i++] = componentAppName + "::" + componentName;
			names[i] = "fragment";
			values[i++] = this.m_parent.getFragmentId();
			names[i] = "row";
			values[i++] = idx;
			names[i] = "col";
			values[i++] = this.m_parent.getIndex( this );
			names[i] = "portlet_id";
			values[i++] = componentId;
			names[i] = "page_id";
			values[i++] =portalPage.getId();
			names[i] = "newchangerows";
			values[i++] = this.getChildrenIds();
			
			//alert("insert layout");
			portalPage.invokeAjax("editpage", names, values, new this.m_refreshHandler(), "text/xml"); 
		}
		else {
			names[i] = "method";
			values[i++] = "insertportlet";
			names[i] = "path";
			values[i++] = portalPage.getPath();
			names[i] = "parent_id";
			values[i++] = this.m_parent.getFragmentId();
			names[i] = "sibling_id";
			values[i++] = (childObject.getFragmentId() != null ) ? childObject.getFragmentId() : "";
			names[i] = "row";
			values[i++] = idx;
			names[i] = "col";
			values[i++] = this.m_parent.getIndex( this );
			names[i] = "portlet_id";
			values[i++] = componentId;
			names[i] = "page_id";
			values[i++] =portalPage.getId();
			names[i] = "newchangerows";
			values[i++] = this.getChildrenIds();
			names[i] = "app_name";
			values[i++] =componentAppName;
			names[i] = "portlet_name";
			values[i++] =componentName;
			names[i] = "portlet_title";
			values[i++] = encodeURIComponent( componentTitle );
			names[i] = "uniqueId";
			values[i++] =uniqueId;
			names[i] = "add_value1";
			values[i++] = encodeURIComponent( addValue1 );
			names[i] = "add_value2";
			values[i++] = encodeURIComponent( addValue2 );
			names[i] = "add_value3";
			values[i++] = encodeURIComponent( addValue3 );
		
			//alert("insert portlet 2");
			//portalPage.invokeAjax("editpage", names, values, new this.m_getPortletContentHandler(this, childObject, idx, uniqueId), "text/xml"); 			portalPage.m_ajax.invoke2("editpage", names, values, new this.m_getPortletContentHandler(this, childObject, idx, uniqueId), "text/xml"); 
		}
			
		/*
		var fragment = document.createElement('div');
		fragment.id = "Enview.Fragment:" + fragmentId;
		fragment.setAttribute("class", "portal-layout-cell portal-layout-cell");
		fragment.setAttribute("className", "portal-layout-cell portal-layout-cell");
		fragment.setAttribute("dragCopy", "false");
		this.m_domElement.insertBefore( fragment, childObject.getDomElement() );
		
		var fragmentObject = new enview.portal.Fragment(this, fragment);
		this.m_children.splice(idx, 0, fragmentObject);
		
		fragmentObject.replace( fragmentId );
		*/
	},
	
	getPortletContent : function(data, childObject, idx)
	{
		var id = portalPage.m_ajax.retrieveElementValue("id", data);
		var app_name = portalPage.m_ajax.retrieveElementValue("app_name", data);
		var portlet_name = portalPage.m_ajax.retrieveElementValue("portlet_name", data);
		var title = portalPage.m_ajax.retrieveElementValue("title", data);
		
		var i = 0;
		var names = new Array();
		var values = new Array();
		names[i] = "method";
		values[i++] = "getportletcontent";
		names[i] = "fragment_id";
		values[i++] = id;
		names[i] = "app_name";
		values[i++] = app_name;
		names[i] = "portlet_name";
		values[i++] = portlet_name;
		
		portalPage.invokeAjax("editpage", names, values, new this.m_createPortletHandler(this, childObject, idx, id, title, app_name, portlet_name), "text/xml"); 
	},
	
	change : function( childObject, dragObject )
	{
		if( this.m_children != null ) {
			for(var idx=0; idx<this.m_children.length; idx++) {
				if(this.m_children[idx] == childObject) {
					break;
				}
			}
			
			this.m_children.splice(idx, 0, dragObject);
			//alert("dragObject.getDomElement()=" + dragObject.getDomElement() + ", childObject.getDomElement()=" + childObject.getDomElement());
			try {
				this.m_domElement.insertBefore( dragObject.getDomElement(), childObject.getDomElement() );
			}
			catch(e) {
				alert(e);
			}
			
			dragObject.hideDrag(); 
			
			var names = new Array();
		    var values = new Array();
		    names[0] = "method";
		    values[0] = "changeparent";
		    names[1] = "path";
		    values[1] = portalPage.getPath();
		    names[2] = "new_parent_id";
		    values[2] = this.m_parent.getFragmentId();
			names[3] = "old_parent_id";
		    values[3] = dragObject.getParent().getParent().getFragmentId();
		    names[4] = "id";
			values[4] = dragObject.getFragmentId();
			names[5] = "sibling_id";
			values[5] = childObject.getFragmentId();
			names[6] = "row";
			values[6] = idx;
			names[7] = "col";
			values[7] = this.m_parent.getIndex( this );
			names[8] = "page_id";
			values[8] =portalPage.getId();
			names[9] = "newchangerows";
			values[9] = this.getChildrenIds();
			names[10] = "oldchangerows";
			values[10] = dragObject.getParent().getChildrenIds();
			
			portalPage.invokeAjax("editpage", names, values, new this.m_updateHandler(), "text/xml"); 
		}
	},
	remove : function( childObject )
	{
		this.removeElement( childObject );
		this.m_domElement.removeChild( childObject.getDomElement() );
		
		var names = new Array();
		var values = new Array();
		names[0] = "method";
		values[0] = "remove";
		names[1] = "path";
		values[1] = portalPage.getPath();
		names[2] = "page_id";
		values[2] = portalPage.getId();
		names[3] = "fragment";
		values[3] = childObject.getFragmentId();
		names[4] = "newchangerows";
		values[4] = this.getChildrenIds();
		
		portalPage.invokeAjax("editpage", names, values, new this.m_updateHandler(), "text/xml"); 
	},
	removeElement : function( childObject )
	{
		if( this.m_children != null ) {
			//alert("this.m_children.length=" + this.m_children.length);
			//alert("child=" + this.m_domElement.innerHTML);
			for(var idx=0; idx<this.m_children.length; idx++) {
				//alert("nodeName=" + this.m_children[idx].nodeType);
				if(this.m_children[idx] == childObject) {
					break;
				}
			}
			this.m_children.splice( idx, 1 );
			//alert("idx=" + idx + ", this.m_children.length=" + this.m_children.length);
			if(this.m_children.length == 0) {
				var fragElement = document.createElement('div');
				fragElement.setAttribute("class", "portal-layout-cell");
				fragElement.setAttribute("className", "portal-layout-cell");
				this.m_domElement.appendChild( fragElement );
				//var fragment = "<div class='portal-layout-cell' >";
				//this.m_domElement.innerHTML = fragment;
				this.m_children[0] = new enview.portal.Fragment(this, fragElement);
			}
			//alert("child=" + this.m_domElement.innerHTML);
		}
	},
	getChildrenIds : function()
	{
		var ids = "";
		for(var idx=0; idx<this.m_children.length; idx++) {
			if( this.m_children[idx].getFragmentId() != null ) {
				ids += this.m_children[idx].getFragmentId() + ",";
			}
			else {
				ids += ",";
			}
		}
		
		return ids;
	},
	cleanEmptyFragment : function()
	{
		var lastObject = this.m_children[ this.m_children.length - 1 ];
		var lastElem = lastObject.getDomElement();
		//lastElem.removeNode(true);
		this.getDomElement().removeChild( lastElem );
	},
	removeDroppableArea : function()
	{
		portalPage.getDragDropMgr().removeDropArea( this.m_droppableArea );
	},
	onMouseOver : function(a_event)
	{
		var evt = a_event==null ? event : a_event;
		var targetElt = evt.srcElement ? evt.srcElement : evt.target;
		targetElt.style.border = "2px dotted red";
	},
	onMouseOut : function(a_event)
	{
		var evt = a_event==null ? event : a_event;
		var targetElt = evt.srcElement ? evt.srcElement : evt.target;
		targetElt.style.border = "";
	},
	toggleDragMode : function(isDragMode)
	{
		if( this.m_children != null ) {
			for(var idx=0; idx< this.m_children.length; idx++){
				this.m_children[idx].toggleDragMode( isDragMode );
			}
		}
	}
}

enview.portal.Fragment = function(parent, node)
{
	this.m_id = node.id;
	this.m_parent = parent;
	this.m_type = enview.portal.FRAGMENT_ID_NAME;
	this.m_domElement = node;
	this.m_child = this.findChildren( node );
	
	this.m_domElement.style.border = enview.portal.FRAGMENT_AREA_STYLE;
	//this.m_domElement.style.padding = "2px";
}
enview.portal.Fragment.prototype =
{
	m_id : null,
	m_parent : null,	// layout
	m_child : null,	// rows (layout or portlet)
	m_domElement : null,
	m_type : null,
	
	findObject : function (id)
	{
		if( this.m_id == id ) {
			return this;
		}
		
		var searchObject = null;
		if( this.m_child != null ) {
			searchObject = this.m_child.findObject( id );
			if( searchObject != null )
				return searchObject;
		}
	},
	findChildren : function (node)
	{		
		var childElem = null;
		if( node.hasChildNodes() == true ) {
			var childrenCollection = node.childNodes;
			for(var idx=0, idy=0; idx< childrenCollection.length; idx++){
				var child = childrenCollection[idx];
				if(child.id!=null && child.id.indexOf(enview.portal.LAYOUT_ID_NAME) > -1) {
					childElem = new enview.portal.Layout(this, child);
					break;
				}
				else if(child.id!=null && child.id.indexOf(enview.portal.PORTLET_ID_NAME) > -1) {
					childElem = new enview.portal.Portlet(this, child);
					break;
				}
			}
		}
		
		if(childElem == null) {
			var portletElement = document.createElement('div');
			portletElement.setAttribute("class", "portlet");
			portletElement.setAttribute("className", "portlet");
			portletElement.style.height = "30px";
			this.m_domElement.appendChild( portletElement );
			childElem = new enview.portal.Portlet(this, portletElement);
		}

		return childElem;
	},
	getId : function()
	{
		return this.m_id;
	},
	getParent : function()
	{
		return this.m_parent;
	},
	getType : function()
	{
		return this.m_type;
	},
	getDomElement : function()
	{
		return this.m_domElement;
	},
	getFragmentId : function()
	{
		if( this.m_child != null ) {
			return this.m_child.getFragmentId();
		}
	},
	setParent : function(newParent)
	{
		this.m_parent = newParent;
	},
	replace : function( fragmentId )
	{
		this.m_domElement.removeChild( this.m_domElement.childNodes[0] );
		
		var portletElement = document.createElement('div');
		portletElement.id = "Enview.Portlet:" + fragmentId;
		portletElement.setAttribute("class", "portlet");
		portletElement.setAttribute("className", "portlet");
		portletElement.style.height = "60px";
		portletElement.style.border = "1px dotted blue";
		this.m_domElement.appendChild( portletElement );
		this.m_child = new enview.portal.Portlet(this, portletElement);
		
	},
	getPosition : function()
	{
		return portalPage.getUtility().getAbsolutePosition ( this.m_domElement );
	},
	isInclude : function (a_x, a_y)
	{
		var pos = portalPage.getUtility().getAbsolutePosition(this.m_domElement);
		return (pos.m_x<a_x && a_x<(pos.m_x+this.m_domElement.offsetWidth) && pos.m_y<a_y && a_y<(pos.m_y+this.m_domElement.offsetHeight))
	},
	showArea : function()
	{
		this.m_domElement.style.border = enview.portal.DROP_AREA_STYLE;
	},
	hideArea : function()
	{
		this.m_domElement.style.border = enview.portal.FRAGMENT_AREA_STYLE;
	},
	showDrag : function()
	{
		//this.m_domElement.style.zIndex = "999";
		this.m_domElement.style.width = "100%";
		this.m_domElement.style.position = "relative";
		//this.m_domElement.style.position = "absolute";
		this.m_domElement.style.background = "#EEEEEE";
		this.m_domElement.style.border = enview.portal.DRAG_AREA_STYLE;

		//alert("before this.m_domElement.style.filter=" + this.m_domElement.style.filter);
		
		if (document.all) this.m_domElement.style.filter = "alpha(opacity=70)";
		else this.m_domElement.style.opacity = "0.7";
		
		//alert("after this.m_domElement.style.filter=" + this.m_domElement.style.filter);
		/*
		if (portalPage.getUtility().getIEVersionNumber()>5)
		{
			//filter:alpha(opacity=40)
			//this.m_domElement.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
			this.m_domElement.style.filter = "alpha(opacity=70)";
			//this.m_domElement.setAttribute("style", "filter:alpha(opacity=40)");
		}
		else
		{
			this.m_domElement.style.opacity = "0.7";
			this.m_domElement.className = "header-drag";
		}
		*/
	},
	hideDrag : function()
	{
		this.m_domElement.style.zIndex = "1";
		this.m_domElement.style.background = "";
		this.m_domElement.style.border = enview.portal.FRAGMENT_AREA_STYLE;
		this.m_domElement.style.left = "0px";
		this.m_domElement.style.top = "0px";
		this.m_domElement.style.position = "";
		
		if (portalPage.getUtility().getIEVersionNumber()>5)
		{
			this.m_domElement.style.filter = "";
		}
		else
		{
			this.m_domElement.style.opacity = "";
			this.m_domElement.className = "";
		}
	},
	toggleDragMode : function(isDragMode)
	{
		if( this.m_child != null ) {
			if( isDragMode == true ) {
				this.m_domElement.style.padding = "5px";
			}
			else {
				this.m_domElement.style.padding = "";
			}
			this.m_child.toggleDragMode( isDragMode );
		}
	},
	showPortletEditor : function(portletEditor, elm)
	{
		if( this.m_child != null ) {
			this.m_child.showPortletEditor(portletEditor, elm);
		}
	},
	hidePortletEditor : function()
	{
		portalPage.hidePortletEditor();
	},
	removePortlet : function()
	{
		this.m_parent.remove( this );
	}
}

enview.portal.Portlet = function(parent, node)
{
	this.m_id = node.id;
	this.m_parent = parent;
	this.m_type = enview.portal.PORTLET_ID_NAME;
	this.m_domElement = node;
	this.m_fragmentId = node.getAttribute(enview.portal.FRAGMENT_ID);
	
	if( node.getAttribute("fname") ) {
		this.m_name = node.getAttribute("fname");
		this.m_decorator = node.getAttribute("fdecorator");
		this.m_formAction = node.getAttribute("formaction");
		this.m_fcontenttype = node.getAttribute("fcontenttype");
		this.m_fsource = node.getAttribute("fsrc");
		this.m_fresize = node.getAttribute("fresize");
		this.m_fscrolling = node.getAttribute("fscrolling");
		this.m_fclass = node.getAttribute("fclass");
		this.m_fmaxheight = node.getAttribute("fmaxheight");
		this.m_fstyle = node.getAttribute("fstyle");
		this.m_ftitle = node.getAttribute("ftitle");
		this.m_fwidth = node.getAttribute("fwidth");
		this.m_fheight = node.getAttribute("fheight");
		this.m_fmoresrc = node.getAttribute("fmoresrc");
		this.m_fmoretarget = node.getAttribute("fmoretarget");
	}
	else {
		var attributes = portalPage.getFragmentAttributes( this.m_fragmentId );
		if( attributes ) {
			//alert( "m_fsource=" + attributes["SRC"] + ", m_fresize=" + attributes["AUTO-RESIZE"]);
			this.m_name = attributes["name"];
			this.m_decorator = attributes["decorator"];
			this.m_formAction = (attributes["formAction"]) ? attributes["formAction"] : "";
			this.m_fcontenttype = (attributes["contentType"]) ? attributes["contentType"] : "";
			this.m_fsource = (attributes["SRC"]) ? attributes["SRC"] : "";
			this.m_fresize = (attributes["AUTO-RESIZE"]) ? attributes["AUTO-RESIZE"] : "";
			this.m_fscrolling = (attributes["SCROLLING"]) ? attributes["SCROLLING"] : "";
			this.m_fclass = (attributes["CLASS"]) ? attributes["CLASS"] : "";
			this.m_fmaxheight = (attributes["MAX-HEIGHT"]) ? attributes["MAX-HEIGHT"] : "";
			this.m_fstyle = (attributes["STYLE"]) ? attributes["STYLE"] : "";
			this.m_ftitle = (attributes["TITLE"]) ? attributes["TITLE"] : "";
			this.m_fwidth = (attributes["WIDTH"]) ? attributes["WIDTH"] : "";
			this.m_fheight = (attributes["HEIGHT"]) ? attributes["HEIGHT"] : "";
			this.m_fmoresrc = (attributes["MORE_SRC"]) ? attributes["MORE_SRC"] : "";
			this.m_fmoretarget = (attributes["MORE_TARGET"]) ? attributes["MORE_TARGET"] : "";
		}
	}
	
	//alert("m_fresize=" +this.m_fresize +",m_fscrolling=" + this.m_fscrolling +",m_fclass=" + this.m_fclass +",m_fmaxheight=" + this.m_fmaxheight +",m_fstyle=" + this.m_fstyle +",m_ftitle=" + this.m_ftitle +",m_fwidth=" + this.m_fwidth +",m_fheight=" + this.m_fheight);

	this.m_droppableArea = portalPage.getDragDropMgr().addDropArea( this );
	//this.m_domElement.onmouseover = this.onMouseOver;
	//this.m_domElement.onmouseout = this.onMouseOut;
}
enview.portal.Portlet.prototype =
{
	m_id : null,
	m_parent : null,
	m_domElement : null,
	m_fragmentId : null,
	m_name : null,
	m_type : null,
	m_decorator : null,
	m_formAction : null,
	m_fcontenttype : null,
	m_droppableArea : null,
	
	findObject : function (id)
	{
		//alert("m_id=" + this.m_id + ", id=" + id);
		if( this.m_id == id ) {
			return this;
		}
		return null;
	},
	getId : function()
	{
		return this.m_id;
	},
	getName : function()
	{
		return this.m_name;
	},
	getParent : function()
	{
		return this.m_parent;
	},
	getType : function()
	{
		return this.m_type;
	},
	getDomElement : function()
	{
		return this.m_domElement;
	},
	getFragmentId : function()
	{
		//alert("this.m_fragmentId=" + this.m_fragmentId);
		return this.m_fragmentId;
	},
	getDecorator : function()
	{
		return this.m_decorator;
	},
	getFormAction : function()
	{
		return this.m_formAction;
	},
	getContentType : function()
	{
		return this.m_fcontenttype;
	},
	onMouseOver : function(a_event)
	{
		var evt = a_event==null ? event : a_event;
		var targetElt = evt.srcElement ? evt.srcElement : evt.target;
		targetElt.style.border = "1px dotted red";
	},
	onMouseOut : function(a_event)
	{
		var evt = a_event==null ? event : a_event;
		var targetElt = evt.srcElement ? evt.srcElement : evt.target;
		targetElt.style.border = "";
	},
	isInclude : function (a_x, a_y)
	{
		if( portalPage.isDragMode() == true ) {
			return this.m_parent.isInclude(a_x, a_y);
		}
		else {
			var pos = portalPage.getUtility().getAbsolutePosition(this.m_domElement);
			return (pos.m_x<a_x && a_x<(pos.m_x+this.m_domElement.offsetWidth) && pos.m_y<a_y && a_y<(pos.m_y+this.m_domElement.offsetHeight))
		}
	},
	showArea : function()
	{
		if( portalPage.isDragMode() == true ) {
			this.m_parent.showArea();
		}
		else {
			this.m_domElement.style.border = enview.portal.DROP_AREA_STYLE;
		}
	},
	hideArea : function()
	{
		if( portalPage.isDragMode() == true ) {
			this.m_parent.hideArea();
		}
		else {
			this.m_domElement.style.border = "";
		}
	},
	toggleDragMode : function(isDragMode)
	{
		if( isDragMode == true ) {
			this.m_domElement.style.display = "none";
			//this.m_domElement.style.height = "20px";
		}
		else {
			this.m_domElement.style.display = "";
			//this.m_domElement.style.height = "";
		}
	},
	showPortletEditor : function(portletEditor, elm)
	{
		portletEditor.show( this, elm );
		document.getElementById("PortletEditor.SELECT_DECORATOR").value = this.m_decorator;
		document.getElementById("PortletEditor.SELECT_CONTENT_TYPE").value = this.m_fcontenttype;
		//alert("this.m_fsource=" + this.m_fsource);
		document.getElementById("PortletEditor.AUTO_RESIZE").checked = (this.m_fresize == "true") ? true : false;
		document.getElementById("PortletEditor.SCROLLING").checked = (this.m_fscrolling == "yes") ? true : false;
		document.getElementById("PortletEditor.CONTENT_TITLE").value = this.m_ftitle;
		document.getElementById("PortletEditor.CONTENT_CLASS").value = this.m_fclass;
		document.getElementById("PortletEditor.WIDTH").value = this.m_fwidth;
		document.getElementById("PortletEditor.HEIGHT").value = this.m_fheight;
		document.getElementById("PortletEditor.MAX_HEIGHT").value = this.m_fmaxheight;
		document.getElementById("PortletEditor.CONTENT_STYLE").value = this.m_fstyle;
		document.getElementById("PortletEditor.CONTENT_SOURCE").value = this.m_fsource;
		document.getElementById("PortletEditor.MORE_SOURCE").value = this.m_fmoresrc;
		document.getElementById("PortletEditor.MORE_TARGET").value = this.m_fmoretarget;
		
		if( (this.m_fcontenttype == "iframe" || this.m_fcontenttype == "normal") && portalPage.getServletPath() == "/contentonly" ) {
			document.getElementById("PortletEditor.SELECT_CONTENT_TYPE_PANE").style.display = "none";
			document.getElementById("PortletEditor.CONTENT_TITLE_PANE").style.display = "";
			document.getElementById("PortletEditor.CONTENT_SOURCE_PANE").style.display = "";
			document.getElementById("PortletEditor.OPTION_PANE").style.display = "";
			document.getElementById("PortletEditor.CONTENT_EXTRA_PANE").style.display = "";
			document.getElementById("PortletEditor.SIZE_PANE").style.display = "";
			document.getElementById("PortletEditor.CONTENT_STYLE_PANE").style.display = "";
			document.getElementById("PortletEditor.MORE_SOURCE_PANE").style.display = "";
		}
		else if( this.m_fcontenttype == "static" && portalPage.getServletPath() == "/contentonly" ) {
			document.getElementById("PortletEditor.SELECT_CONTENT_TYPE_PANE").style.display = "none";
			document.getElementById("PortletEditor.CONTENT_TITLE_PANE").style.display = "";
			document.getElementById("PortletEditor.CONTENT_SOURCE_PANE").style.display = "";
			document.getElementById("PortletEditor.OPTION_PANE").style.display = "none";
			document.getElementById("PortletEditor.CONTENT_EXTRA_PANE").style.display = "none";
			document.getElementById("PortletEditor.SIZE_PANE").style.display = "none";
			document.getElementById("PortletEditor.CONTENT_STYLE_PANE").style.display = "none";
			document.getElementById("PortletEditor.MORE_SOURCE_PANE").style.display = "none";
		}
		else {
			document.getElementById("PortletEditor.SELECT_CONTENT_TYPE_PANE").style.display = "none";
			//document.getElementById("PortletEditor.CONTENT_TITLE_PANE").style.display = "none";
			document.getElementById("PortletEditor.CONTENT_SOURCE_PANE").style.display = "none";
			document.getElementById("PortletEditor.OPTION_PANE").style.display = "none";
			document.getElementById("PortletEditor.CONTENT_EXTRA_PANE").style.display = "none";
			document.getElementById("PortletEditor.SIZE_PANE").style.display = "none";
			document.getElementById("PortletEditor.CONTENT_STYLE_PANE").style.display = "none";
			document.getElementById("PortletEditor.MORE_SOURCE_PANE").style.display = "none";
		}
	}
}

enview.portal.PortletSelector = function()
{
	this.m_checkBoxUtil = new enview.util.CheckBoxUtil();
	this.m_ajax = new enview.util.Ajax();
	this.m_ajax.setContextPath( portalPage.getContextPath() );
	
	this.m_allCategoryListHandler = function()
	{
	  this.populate = function(resultObject) 
	  {
		//alert("resultObject=" + resultObject.Data.length);
		var options = "<SELECT id='Enview.Portal.PortletSelector.categoryId' name='categoryId' class='portlet-form-input-field' >";
		options += "<OPTION value=''>" + portalPage.getMessageResource("portletSelectbox") + "</OPTION>";
		for(i=0; i<resultObject.Data.length; i++) {
			options += "<OPTION value='" + resultObject.Data[i].value + "'>" + resultObject.Data[i].key + "</OPTION>";
		}
		options += "</SELECT>";
		//alert("options=" + options);
	    document.getElementById("PortletSelectorCategory").innerHTML = options;
		
		portalPage.getPortletSelector().doPortletRetrieve();
	  }     
	  this.failure = function(resultObject)
	  {
	  }
	}

	this.m_portletInsertHandler = function()
	{
	  this.populate = function(data) 
	  {
		alert("PortletInsertHandler");
	  }     
	  this.failure = function(resultObject)
	  {
	  }
	};
	
	this.m_portletListHandler = function()
	{
	  this.populate = function(data) 
	  {
		portalPage.getPortletSelector().doPortletRetrieveHandler(data);
	  }     
	  this.failure = function(resultObject)
	  {
	  }
	};
}
enview.portal.PortletSelector.prototype =
{
	m_checkBoxUtil: null,
	m_allCategoryListHandler: null,
	m_portletInsertHandler: null,
	m_portletListHandler: null,
	m_domElement: null,
	m_ajax: null,
	m_tree: null,
	m_stmnTimer : null,
	m_quickMenuLeft : 930, // 스크롤메뉴의 좌측 위치
	m_quickMenuTopMargin1 : 0, // 페이지 헤더부분의 여백
	m_quickMenuTopMargin2 : 100, // 스크롤시 브라우저 상단과 약간 띄움. 필요없으면 0으로 세팅
	m_quickMenuTopBase : 10, // 스크롤메뉴 초기 시작위치 (아무렇게나 해도 상관은 없지만 m_quickMenuTopMargin1과 약간 차이를 주는게 보기 좋음)
	m_quickMenuActivateSpeed : 400, // 움직임을 감지하는 속도 (숫자가 클수록 늦게 알아차림)
	m_quickMenuScrollSpeed : 1, // 스크롤되는 속도 (클수록 늦게 움직임)
	
	init: function ()
	{
		var dialogTag = document.createElement("div");
		dialogTag.ch = true;
		dialogTag.id = "PortletSelectorDialog";
		dialogTag.setAttribute("class", "portlet-selector");
		dialogTag.setAttribute("className", "portlet-selector");
		
		var x = 0;
		var y = 0;
		var width = 500;
		var height = 450;
		if (document.layers) { 
			x = screen.width / 2 - width / 2; 
			y = screen.height / 2 - height / 2; 
			//alert("document.layers screen.width=" + screen.width + ", screen.height=" + screen.height + ", x=" + x + ",y=" + y);
		}  
		else { 
			x = document.body.offsetWidth / 2 - width / 2; 
			y = document.body.offsetHeight / 2 - height / 2; 
			//x = screen.width / 2 - document.body.offsetWidth / 2; 
			//y = -75 + screen.height / 2 - document.body.offsetHeight / 2; 
			//alert("screen.width=" + screen.width + ", document.body.offsetWidth=" + document.body.offsetWidth + ", screen.height=" + screen.height + ", document.body.offsetHeight=" + document.body.offsetHeight + ", x=" + x + ",y=" + y);
		}  
 
		//var x = (window.width)/2 - 250;
		//var y = (window.height)/2 - 175;
		dialogTag.style.left = x + "px";
		dialogTag.style.top = y + "px";
		var portletTitle = portalPage.getMessageResource("portletSelectorPortletName");
		
		var dlgHtml = "";
		dlgHtml += "<table width='100%' height='100%' >";
		dlgHtml += "<tr>";
		dlgHtml += "	<td class='outline' valign='top'>";
		dlgHtml += "	<table width='100%' border='0' cellspacing='0' cellpadding='0'>";
		dlgHtml += "	<tr>";
		dlgHtml += "		<td class='titleleft'></td>";
		dlgHtml += "		<td id='PortletSelectorDragArea' class='title'>" + portalPage.getMessageResource("portletSelectorName") + "</td>";
		dlgHtml += "		<td class='titleright'></td>";
		dlgHtml += "	</tr>";
		dlgHtml += "	</table>";
		dlgHtml += "	<table width='100%' border='0' cellspacing='0' cellpadding='0'>";
		dlgHtml += "	<tr><td colspan='2'>";
		dlgHtml += "	<br style='line-height:5px;'/>";

		dlgHtml += "	</td></tr>";
		dlgHtml += "	<tr>";
		dlgHtml += "	<td width='150px' valign='top'>";
		dlgHtml += " <span>";
		dlgHtml += "	<select id='PortletSelectorCategoryTypeSelect' name='type' style='width:100%' class='webdropdownlist' onchange='javascript:portalPage.getPortletSelector().changeCategory(this)'>";
		dlgHtml += "	<option value='portlet'>" + portalPage.getMessageResource("portletSelectorPortletCategory") + "</option>";
		dlgHtml += "	<option value='enview-bbs'>" + portalPage.getMessageResource("portletSelectorBBSCategory") + "</option>";
		dlgHtml += "	<option value='enview-cms'>" + portalPage.getMessageResource("portletSelectorCMSCategory") + "</option>";
		dlgHtml += "	</select>";
		dlgHtml += " </span>";
		dlgHtml += "	<div class='webpanel'>";
		dlgHtml += "	<div id='PortletSelectorTreeTabPage' style='background:#FFFFFF; width:100%; height:300px; overflow:auto; cursor : default;'></div>";
		dlgHtml += "	</div>";
		dlgHtml += "	</td>";
		dlgHtml += "	<td valign='top'>";
		dlgHtml += "	<form id='PortletSelectorSearchForm' name='PortletSelectorSearchForm' style='display:inline' action=\"javascript:portalPage.getPortletSelector().doPortletSearch('PortletSelectorSearchForm')\" method='post'>";
		dlgHtml += "		<input type='hidden' name='sortMethod' value='ASC'/>";
		dlgHtml += "		<input type='hidden' name='sortColumn' value=''/>";
		dlgHtml += "		<input type='hidden' name='pageNo' value='1'/>";
		dlgHtml += "		<input type='hidden' name='pageSize' value='7'/>"; 
		dlgHtml += "		<input type='hidden' name='pageFunction' value='portalPage.getPortletSelector().doPortletPage'/>";
		dlgHtml += "		<input type='hidden' name='formName' value='PortletSelectorSearchForm'/>";
		dlgHtml += "		<input type='hidden' id='Enview.Portal.PortletSelector.categoryId' name='categoryId' >";
		dlgHtml += "		<input type='hidden' id='Enview.Portal.PortletSelector.categoryType' name='categoryType'  value='portlet'>";
		dlgHtml += "		<table width='100%' border='0' cellspacing='0' cellpadding='0'>";
		dlgHtml += "		<tr>";
		dlgHtml += "			<td align='right'>";
		
		dlgHtml += "			<span align='right'>";
		dlgHtml += "				<input type='text' name='searchString' size='20' class='portlet-form-field-label' value='*" + portletTitle + "*' onfocus=\"portalPage.getUtility().setFieldFocus(this,'*" + portletTitle + "*');\" onblur=\"portalPage.getUtility().setFieldBlur(this,'*" + portletTitle + "*');\">";
		dlgHtml += "			</span>";
		dlgHtml += "			<span align='right'>";
		dlgHtml += "				<input type='image' src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_search.gif' hspace='2' align='absmiddle' style='cursor:hand'>";
		dlgHtml += "			</span>";
		dlgHtml += "			</td>";
		dlgHtml += "		</tr>";
		dlgHtml += "		</table>";
		dlgHtml += "	</form>";
		dlgHtml += "	<form id='PortletSelectorListForm' style='display:inline' name='PortletSelectorListForm' action='' method='post'>";
		dlgHtml += "		<table class='webgridpanel' style='width:100%;' cellpadding='0' cellspacing='0' id='grid-table'>";
		dlgHtml += "			<thead>";
		dlgHtml += "				<tr> <td colspan='3' class='webgridheaderline'></td></tr>";
		dlgHtml += "				<tr style='cursor: pointer;'>";
		dlgHtml += "				<th ch='0' class='webgridheader' width='30px'>&nbsp;</th>";
		//dlgHtml += "				<th ch='0' class='webgridheader' width='150px'  >";
		//dlgHtml += "				<span>" + portalPage.getMessageResource("portletSelectorPortletApplication") + "</span>";
		//dlgHtml += "				</th>";
		dlgHtml += "				<th ch='0' class='webgridheaderlast' width='250px' onclick=\"portalPage.getPortletSelector().doPortletSort(this, 'DISPLAY_NAME');\" >";
		dlgHtml += "				<span>" + portalPage.getMessageResource("portletSelectorPortletName") + "</span>";
		dlgHtml += "				</th>";
		dlgHtml += "				</tr>";
		dlgHtml += "			</thead>";
		dlgHtml += "			<tbody id='PortletSelectorListBody' class='webgridbody'></tbody>";
		dlgHtml += "			<table style='width:100%;' class='webbuttonpanel'>";
		dlgHtml += "			<tr>";
		dlgHtml += "				<td align='center'>";
		dlgHtml += "					<div id='PORTLETSELECTOR_PAGE_ITERATOR'></div>";
		dlgHtml += "				</td>";
		dlgHtml += "			</tr>";
		dlgHtml += "			<tr>";
		dlgHtml += "				<td align='right'><p>";
		dlgHtml += "					<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_close.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='portalPage.hidePortletSelector();'>";
		dlgHtml += "				</td>";
		dlgHtml += "			</tr>";
		dlgHtml += "			</table>";
		dlgHtml += "		</table>";
		dlgHtml += "	</form>";
		dlgHtml += "	</td></tr>";
		dlgHtml += "	<tr> <td align='center'><font color='#0000ff'>" + portalPage.getMessageResource("pageEditingDragMessage") + "</font>";
		dlgHtml += "	</td></tr>";
		dlgHtml += "	</td>";
		dlgHtml += "</tr>";
		dlgHtml += "</table>"; 
		
		dialogTag.innerHTML = dlgHtml;
		document.body.appendChild( dialogTag );
		
		this.m_domElement = dialogTag; //document.getElementById( 'PortletSelectorDialog' );
		this.m_domElement.style.display = 'none';
		
		//var e = new enview.util.DragMgr(document.getElementById("PortletSelectorDragArea"), "PortletSelectorDialog");
		var e = new enview.util.DragMgr(this, dialogTag, "PortletSelectorDialog");
		e.attach();
		
		this.m_quickMenuTopMargin2 = this.m_quickMenuTopMargin2 + 25;
		//this.refreshPortletSelector();
		
		this.m_tree = new dhtmlXTreeObject(document.getElementById('PortletSelectorTreeTabPage'),"100%","100%",0);
		this.m_tree.setImagePath("/enview-admin/images/tree/");
		this.m_tree.setOnClickHandler( this.onNodeSelect );
		this.m_tree.enableAutoTooltips(true);
		this.m_tree.setXMLAutoLoading("" + portalPage.getContextPath() + "/ajaxapi?action=getcompcategorylist&method=getcompcategorylist"); 
		this.m_tree.loadXML("" + portalPage.getContextPath() + "/ajaxapi?action=getcompcategorylist&method=getcompcategorylist&id=1")
		
		//this.retrieveAllCategory();
	},
	clearTimer : function() {
		clearTimeout( this.m_stmnTimer );
	},
	refreshPortletSelector : function() {
		/*
		var stmnStartPoint, stmnEndPoint, stmnRefreshTimer;
		stmnStartPoint = parseInt(this.m_domElement.style.top, 10);
		stmnEndPoint = document.body.scrollTop + this.m_quickMenuTopMargin2;
		if (stmnEndPoint < this.m_quickMenuTopMargin1) { 
			stmnEndPoint = this.m_quickMenuTopMargin1; 
		}

		// 무한 스크롤 다운 방지
		if(document.body.scrollTop > 50) { 
			stmnEndPoint = stmnEndPoint - 59; 
		}

		stmnRefreshTimer = this.m_quickMenuActivateSpeed;
		if ( stmnStartPoint != stmnEndPoint ) {
			stmnScrollAmount = Math.ceil( Math.abs( stmnEndPoint - stmnStartPoint ) / 15 );
			this.m_domElement.style.top = parseInt(this.m_domElement.style.top, 10) + ( ( stmnEndPoint<stmnStartPoint ) ? -stmnScrollAmount : stmnScrollAmount );
			stmnRefreshTimer = this.m_quickMenuScrollSpeed;
		}
		this.m_stmnTimer = setTimeout ("portalPage.getPortletSelector().refreshPortletSelector();", stmnRefreshTimer);
		*/
	},
	
	doShow: function ()
	{
		
		this.m_domElement.style.display='';
		//document.getElementById( 'PortletSelectorDialog' ).style.display='inline-block';
		//document.getElementById( 'PortletSelectorDialog' ).style.visibility = 'visible';
		
		this.m_domElement.selectControl = new Array ();
		(new enview.util.Utility()).findDomElements( this.m_domElement.selectControl, "SELECT", this.m_domElement );
		//alert("parent_id=" + document.getElementById("parent_id"));
		//alert("this.m_domElement.selectControl.length=" + this.m_domElement.selectControl.length);

		if (document.all)	// it is IE
		{
			if (!this.m_domElement.overlap) {
				this.m_domElement.overlap = new Array ();
			}
		
			//alert("hideControl");
			var utility = new enview.util.Utility();
			//utility.hideControl ("IFRAME", dialogElem);
			utility.hideControl ("SELECT", this.m_domElement, this);
			
			var s = document.getElementById("PortletSelectorCategoryTypeSelect");
			//alert("Enview.Portal.PortletSelector.parent_id=" + s);
			if( s ) {
				s.style.visibility = "visible";
			}
		}
	},
	
	doHide: function ()
	{
		var dialogElem = document.getElementById( 'PortletSelectorDialog' );
		if (document.all)	// it is IE
		{
			var utility = new enview.util.Utility();
			utility.showControl ( dialogElem );
		}
		dialogElem.style.display = "none";
	},
	
	getDomElement: function ()
	{
		return this.m_domElement;
	},
	
	changeParentId: function (obj)
	{
		var el = document.getElementById("PortletSelectorParentId");
		el.value = obj.options[obj.selectedIndex].value;
	},
	
	onNodeSelect : function (id) {
		//alert("id=" + id);
		var formElem = document.getElementById("PortletSelectorSearchForm");
	    formElem.elements[ "pageNo" ].value = 1;
		
		document.getElementById("Enview.Portal.PortletSelector.categoryId").value = id;
		
		portalPage.getPortletSelector().doPortletRetrieve();
	},
	changeCategory : function( obj ) {
		var sel = obj.options[obj.selectedIndex].value;
		document.getElementById("Enview.Portal.PortletSelector.categoryType").value = sel;
		//alert("val=" + sel);
		
		//refreshItem
		//getAllSubItems
		
		
		if( sel == "portlet") {
			portalPage.getPortletSelector().m_tree.deleteChildItems(0);
			portalPage.getPortletSelector().m_tree.setXMLAutoLoading("" + portalPage.getContextPath() + "/ajaxapi?action=getcompcategorylist&method=getcompcategorylist"); 
			portalPage.getPortletSelector().m_tree.loadXML("" + portalPage.getContextPath() + "/ajaxapi?action=getcompcategorylist&method=getcompcategorylist&id=1")
		}
		else if( sel == "enview-bbs") {
			portalPage.getPortletSelector().m_tree.deleteChildItems(0);
			portalPage.getPortletSelector().m_tree.setXMLAutoLoading("" + portalPage.getContextPath() + "/ajaxapi?action=getcompcategorylist&method=getbbscategorylist"); 
			portalPage.getPortletSelector().m_tree.loadXML("" + portalPage.getContextPath() + "/ajaxapi?action=getcompcategorylist&method=getbbscategorylist&id=0")
		}
		else {
			portalPage.getPortletSelector().m_tree.deleteChildItems(0);
			portalPage.getPortletSelector().m_tree.setXMLAutoLoading("" + portalPage.getContextPath() + "/ajaxapi?action=files&method=getchildfilelist"); 
			portalPage.getPortletSelector().m_tree.loadXML("" + portalPage.getContextPath() + "/ajaxapi?action=files&method=getchildfilelist&id=/statics")
		}
	},
	retrieveAllCategory: function ()
	{
		var names = new Array();
		var values = new Array();
		names[0] = "method";
		values[0] = "accessonly";
		this.m_ajax.invoke("getallcompcategorylist", names, values, new this.m_allCategoryListHandler(), "text/json"); 
	},

	insertPortletToPage: function ()
	{
		//alert("createComponentFormPortlet");
		var formData = "";
	        
		var rowCnts = this.m_checkBoxUtil.getCheckedElements( document.getElementById("PortletSelectorListForm") );
		var rowCntArray = rowCnts.split(",");
		
		var names = new Array();
		var values = new Array();
		names[0] = "method";
		values[0] = "addportlet";
		
		for(i=0, j=1; i<rowCntArray.length-1; i++) {
			names[j] = "PortletSelector[" + i + "].portlet_id";
			values[j++] = document.getElementById('PortletSelector[' + rowCntArray[i] + '].portlet_id').value;
		}
		
		names[j] = "arraySize";
		values[j] = rowCntArray.length;
		
		//alert("formData=" + formData);
		
		this.m_ajax.invoke("updatepage", names, values, new this.m_portletInsertHandler(), "text/json"); 
	},
	doPortletRetrieve: function ()
	{
		var names = new Array();
		var values = new Array();
		
		var formElem = document.forms[ "PortletSelectorSearchForm" ];
	    var formData = "";
	    for (var i=0; i < formElem.elements.length; i++) {
			names[i] = formElem.elements[ i ].name;
			var tmp = formElem.elements[ i ].value;
			if( tmp.lastIndexOf("*") > 0 ) {
				values[i] = "";
			}
			else {
				values[i] = encodeURIComponent( tmp );
			}
	    }
		
		names[i] = "includeSystemCategory";
		values[i] = "false";
		
		this.m_ajax.invoke("getportletlist", names, values, new this.m_portletListHandler(), "text/json"); 
		//this.m_ajax.invoke("getcomponentlist", names, values, new this.m_portletListHandler(), "text/json"); 
	},
	doPortletRetrieveHandler: function (data)
	{
		var bodyElem = document.getElementById('PortletSelectorListBody');
		//alert("bodyElem=" + bodyElem);
	    var tr_tag = null;
		var div_tag = null;
	    var td_tag = null;
		var chkUtil = new enview.util.CheckBoxUtil();
		var listForm = document.getElementById("PortletSelectorListForm");
		if( listForm != null ) {
			chkUtil.unChkAll( listForm );
		}
		//this.m_checkBoxUtil.unChkAll( document.getElementById("PortletSelectorListForm") );
		for(; bodyElem.hasChildNodes(); )
			bodyElem.removeChild( bodyElem.childNodes[0] );

		var formElem = document.getElementById("PortletSelectorSearchForm");
		//var formElem = document.forms[ "PortletSelectorSearchForm" ];
	    //var page_no = document.getElementById("pageNo").value;
		//var page_size = document.getElementById("pageSize").value;
		/*
		var uniqueId = "";
		var categoryId = document.getElementById("Enview.Portal.PortletSelector.categoryId").value;
		var pos = categoryId.indexOf(".");
		if( pos > -1 ) {
			uniqueId = categoryId.substring( pos+1, categoryId.length );
		}
		*/
		
		var uniqueId = document.getElementById("Enview.Portal.PortletSelector.categoryType").value;

		for(i=0; i<data.Data.length; i++) {
			tr_tag = document.createElement('tr');
			tr_tag.id = "PortletSelectorListForm:Portlet[" + i + "]";
			//tr_tag.onmouseover = new Function( "portletSelector.m_checkBoxUtil.rowOver(this)" );
			//tr_tag.onmouseout = new Function( "portletSelector.m_checkBoxUtil.rowOut(this)" );
			tr_tag.setAttribute("ch", i);
			if( i % 2 == 0 ) {
				tr_tag.setAttribute("class", "even");
				tr_tag.setAttribute("className", "even");
			}
			else {
				tr_tag.setAttribute("class", "odd");
				tr_tag.setAttribute("className", "odd");
			}
			
			td_tag = document.createElement('td');
			td_tag.setAttribute("class", "webgridbody");
			td_tag.setAttribute("className", "webgridbody");
			td_tag.align = "center";
			td_tag.innerHTML = "<img src='" + portalPage.getContextPath() + "/images/portlets/" + data.Data[ i ].icon + "'>";
			td_tag.innerHTML += "<input type=\"hidden\" id=\"PortletSelector[" + i + "].portlet_id\" value=\"" + data.Data[ i ].portlet_id + "\"/>";
			td_tag.innerHTML += "<input type=\"hidden\" id=\"PortletSelector[" + i + "].portlet_name\" value=\"" + data.Data[ i ].name + "\"/>";
			td_tag.innerHTML += "<input type=\"hidden\" id=\"PortletSelector[" + i + "].app_name\" value=\"" + data.Data[ i ].app_name + "\"/>";
			tr_tag.appendChild( td_tag );
			
			/*
			td_tag = document.createElement('td');
			td_tag.setAttribute("class", "webgridbody");
			td_tag.setAttribute("className", "webgridbody");
			td_tag.align = "left";
			if( data.Data[ i ].addValue1 ) {
				td_tag.innerHTML = "<span class=\"webgridrowlabel\" id=\"PortletSelector[" + i + "].app_name.label\">" + data.Data[ i ].addValue1 + "</span>";
			}
			else {
				td_tag.innerHTML = "<span class=\"webgridrowlabel\" id=\"PortletSelector[" + i + "].app_name.label\">" + data.Data[ i ].app_name + "</span>";
			}
			tr_tag.appendChild( td_tag );
			*/

			td_tag = document.createElement('td');
			td_tag.setAttribute("class", "webgridbodylast");
			td_tag.setAttribute("className", "webgridbodylast");
			td_tag.align = "left";
			td_tag.innerHTML = "<span style=\"width:100%;\" class=\"webgridrowlabel\" id=\"PortletSelector[" + i + "].name.label\" dragCopy='true' " + 
								" portletId='" + data.Data[ i ].portlet_id + "'" +
								" portletAppName='" + data.Data[ i ].app_name + "'" +  
								" portletName='" + data.Data[ i ].name + "'" +
								" portletTitle='" + data.Data[ i ].display_name + "'" + 
								" uniqueId='" + uniqueId + "'" +
								" addValue1='" + data.Data[ i ].addValue1 + "'" + 
								" addValue2='" + data.Data[ i ].addValue2 + "'" + 
								" addValue3='" + data.Data[ i ].addValue3 + "'" + 
								" title='" + data.Data[ i ].desc + "'>" + 
								data.Data[ i ].display_name + 
								"</span>";

			/*
			div_tag = document.createElement('div');
			div_tag.id = "PortletSelector[" + i + "].name.label";
			div_tag.setAttribute("componentId", data.Data[ i ].portlet_id);
			div_tag.setAttribute("dragCopy", "true");
			div_tag.align = "left";
			div_tag.innerHTML = "<span class=\"webgridrowlabel\" id=\"PortletSelector[" + i + "].name.label\">" + data.Data[ i ].display_name + "</span>";
			*/

			td_tag.setAttribute("style", "cursor: pointer;");
			td_tag.style.cursor = "pointer";
			//td_tag.appendChild( div_tag );
			tr_tag.appendChild( td_tag );

			bodyElem.appendChild( tr_tag );
		}

		if(data.Data.length == 0) {
			//alert("not found");
			tr_tag = document.createElement('tr');
			tr_tag.setAttribute("class", "row-empty");
			tr_tag.setAttribute("className", "row-empty");
			td_tag = document.createElement('td');
			td_tag.colSpan = "100";
			td_tag.innerHTML = "<span>" + portalPage.getMessageResource("messageNotFoundData") + "</span>";
			tr_tag.appendChild( td_tag );
			bodyElem.appendChild( tr_tag );
		}
		else {
			tr_tag = document.createElement('tr');
			tr_tag.setAttribute("class", "row-empty");
			tr_tag.setAttribute("className", "row-empty");
			td_tag = document.createElement('td');
			td_tag.colSpan = "100";
			td_tag.innerHTML = "<span>" + data.ResultSize + "<br></span>";
			tr_tag.appendChild( td_tag );
			bodyElem.appendChild( tr_tag );
		}
		
		//if(data.Data.length != 0 && data.Data[0].external == "false") {
			var formElem = document.forms[ "PortletSelectorSearchForm" ];
			var pageNo = formElem.elements[ "pageNo" ].value;
			var pageSize = formElem.elements[ "pageSize" ].value;
			var pageFunction = formElem.elements[ "pageFunction" ].value;
			var formName = formElem.elements[ "formName" ].value;
			document.getElementById("PORTLETSELECTOR_PAGE_ITERATOR").innerHTML = 
					(new enview.util.PageNavigationUtil()).getPageIteratorHtmlString(pageNo, pageSize, data.TotalSize, formName, pageFunction);
					
			//document.getElementById("PORTLETSELECTOR_PAGE_ITERATOR").innerHTML = data.PageIterator;	
		//}
	},
	doPortletPage: function (formName, pageNo)
	{
		var formElem = document.forms[ formName ];
	    formElem.elements[ "pageNo" ].value = pageNo;
		
		this.doPortletRetrieve();
	},

	doPortletSearch: function (formName)
	{
		var formElem = document.forms[ formName ];
	    formElem.elements[ "pageNo" ].value = 1;
		
		this.doPortletRetrieve();
	},

	doPortletSort: function (obj, sortColumn)
	{
		var formElem = document.forms[ "PortletSelectorSearchForm" ];
	    formElem.elements[ "sortColumn" ].value = sortColumn;
	    if( obj.ch % 2 == 0 ) {
			formElem.elements[ "sortMethod" ].value = "ASC";
	        obj.ch = 1;
	    }
	    else {
	        formElem.elements[ "sortMethod" ].value = "DESC";
	        obj.ch = 0;
	    }
		
		this.doPortletRetrieve();
	},

	doPortletSelect: function (obj)
	{
		var rowSeq = 0;
	    if(obj.nodeName=="SPAN") {
	        rowSeq = obj.parentNode.parentNode.getAttribute("ch");
	    }
	    else if(obj.nodeName=="TD") {
	        rowSeq = obj.parentNode.getAttribute("ch");
	    }
	    else if(obj.nodeName=="TR") {
	        rowSeq = obj.getAttribute("ch");
	    }
		
	    this.m_checkBoxUtil.unChkAll( document.getElementById("PortletSelectorListForm") );
	    document.getElementById('PortletSelector[' + rowSeq + '].checkRow').checked = true;
	},
	isInclude : function (a_x, a_y)
	{
		var pos = portalPage.getUtility().getAbsolutePosition(this.m_domElement);
		return (pos.m_x<a_x && a_x<(pos.m_x+this.m_domElement.offsetWidth) && pos.m_y<a_y && a_y<(pos.m_y+this.m_domElement.offsetHeight))
	},
	
	errorHandler: function(msg)
	{
		alert("Portal Communication Error: " + msg);
	}
};

enview.portal.PortletEditor = function()
{
	this.m_removeHandler = function()
	{
	  this.populate = function(data) 
	  {
		//alert("PortletRemoveHandler");
		location.reload(false);
	  }     
	  this.failure = function(resultObject)
	  {
	  }
	};
	
	this.m_changeLayoutHandler = function(obj)
	{
	  this.layoutObject = obj;
	  this.populate = function(data) 
	  {
		//alert("PortletChangeLayoutHandler");
		//location.reload(false);
		this.layoutObject.changeLayout( data );
		
	  }     
	  this.failure = function(resultObject)
	  {
	  }
	};
	
	this.m_insertLayoutHandler = function(obj)
	{
	  this.layoutObject = obj;
	  this.populate = function(data) 
	  {
		//alert("PortletInsertLayoutHandler");
		//location.reload(false);
		this.layoutObject.insertLayout( data );
		
	  }     
	  this.failure = function(resultObject)
	  {
	  }
	};
	
	this.m_changeDecoratorHandler = function()
	{
	  this.populate = function(data) 
	  {
		//alert("PortletChangeDecoratorHandler");
		location.reload(false);
	  }     
	  this.failure = function(resultObject)
	  {
	  }
	};
}
enview.portal.PortletEditor.prototype =
{
	m_object : null,
	m_fragmentPropDialog : null,
	m_removeHandler : null,
	m_changeLayoutHandler : null,
	m_addLayoutHandler : null,
	m_changeDecoratorHandler : null,
	m_isChangeLayout : false,
	m_isSizeFieldSelect : false,
	
	init : function()
	{
		this.m_fragmentPropDialog = document.createElement("div");
		this.m_fragmentPropDialog.setAttribute("class", "portlet-editor");
		this.m_fragmentPropDialog.setAttribute("className", "portlet-editor");
		this.m_fragmentPropDialog.style.display = "none";
		this.m_isSizeFieldSelect = false;

		document.body.appendChild( this.m_fragmentPropDialog );
	},
	
	show : function(obj, elm)
	{
		//alert("formAction=" + obj.getFormAction());
		this.m_object = obj;
		var pos = portalPage.getUtility().getAbsolutePosition ( elm );
		var decoration = portalPage.getDecoration();
		if( obj.getType() == enview.portal.LAYOUT_ID_NAME ) {
			var dlgHtml = "";
			//dlgHtml += "<form id='LayoutPortletEditorDialog.PortalFragmentEditForm' name='PortalLayoutFragmentEditForm' action='" + obj.getFormAction() + "' method='post'>";
			dlgHtml += "<form id='LayoutPortletEditorDialog.PortalFragmentEditForm' name='PortalLayoutFragmentEditForm' action='' method='post'>";
			dlgHtml += "<input type='hidden' id='LayoutPortletEditorDialog.Fragment' name='fragment' value='" + obj.getFragmentId() + "'>";
			dlgHtml += "<input type='hidden' name='remove' value=''>";
			dlgHtml += "<input type='hidden' id='LayoutPortletEditorDialog.LayoutSize' name='layoutsize' value=''>";
			dlgHtml += "<input type='hidden' name='actiontype' value=''>";
			if( portalPage.getUserId() == "snjack" ) {
				dlgHtml += "<table width='400px' height='200px' border='0' cellpadding='1' cellspacing='0'  class='webformpanel'>";
			}
			else {
				dlgHtml += "<table width='400px' height='120px' border='0' cellpadding='1' cellspacing='0'  class='webformpanel'>"; 
			}
			dlgHtml += "	<tr><td colspan='5' class='webformheaderline'></td></tr>";
			dlgHtml += "	<tr>";
			dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingName") + "</td>";
			dlgHtml += "		<td class='webformfield' id='LayoutPortletEditorDialog.Name'>" + obj.getName() + "</td>";
			dlgHtml += "	</tr>";
			/*
			if( obj.isRoot() == true ) {
				dlgHtml += "	<tr id='LayoutPortletEditorDialog.PageTheme'>";
				dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingPageTheme") + "</td>";
				dlgHtml += "		<td class='webformfield'>";
				dlgHtml += "			<select id='LayoutPortletEditor.SELECT_THEME' name='theme'>";
				dlgHtml += "				<option value=''>";
				for(var ix=0; ix<decoration.mypages.length; ix++) {
					dlgHtml += "			<option value='" + decoration.mypages[ix].value + "'>" + decoration.mypages[ix].name + "";
				}
				dlgHtml += "			</select>";
				dlgHtml += "		</td>";
				dlgHtml += "	</tr>";
			}
			*/
			dlgHtml += "	<tr>";
			dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingLayout") + "</td>";
			dlgHtml += "		<td class='webformfield'>";
			dlgHtml += "			<select id='LayoutPortletEditor.SELECT_LAYOUT' name='layout' onchange='javascript:portalPage.getPortletEditor().selectLayoutChanage();'>";
			for(var ix=0; ix<decoration.layouts.length; ix++) {
				dlgHtml += "			<option value='" + decoration.layouts[ix].value + "'>" + decoration.layouts[ix].name + "";
			}
			dlgHtml += "			</select>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr>";
			dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingColumnSize") + " (px)</td>";
			dlgHtml += "		<td class='webformfield' id='LayoutPortletEditorDialog.ColumnSize'>"
			if(obj.getColumns() != null) {
				var htmlString = "";
				var columns = obj.getColumns();
				if( columns.length == 1 ) {
					dlgHtml += "<input type='text' maxlength='3' size='3' name='column0' used='false' value='100' onselect='javascript:return portalPage.getPortletEditor().onselect(0)' onkeypress='javascript:return portalPage.getPortletEditor().onkeypress(event, this, " + columns.length + ");'>"; 
				}
				else {
					for(var idx=0; idx<columns.length; idx++) {
						dlgHtml += "<input type='text' maxlength='4' size='3' name='column" + idx + "' used='false' value='" + columns[idx] + "' onselect='javascript:return portalPage.getPortletEditor().onselect(" + idx + ")' onkeypress='javascript:return portalPage.getPortletEditor().onkeypress(event, this, " + columns.length + ");'>"; 
					}
				}
				dlgHtml += "	<select id='LayoutPortletEditor.ColumnSizeUnit' name='unit'>";
				dlgHtml += "		<option value='px'>px";
				dlgHtml += "		<option value='%'>%";
				dlgHtml += "	</select>";
			}
			dlgHtml += "		<td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr>";
			dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingAlign") + "</td>";
			dlgHtml += "		<td class='webformfield'>";
			dlgHtml += "			<select id='LayoutPortletEditor.SELECT_ALIGN' name='align'>";
			dlgHtml += "				<option value='default'>Default";
			dlgHtml += "				<option value='tab'>Tab";
			dlgHtml += "			</select>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			if( portalPage.getUserId() == "snjack" ) {
				dlgHtml += "	<tr>";
				dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingPortletTheme") + "</td>";
				dlgHtml += "		<td class='webformfield'>";
				dlgHtml += "			<select id='LayoutPortletEditor.SELECT_DECORATOR' name='decorators'>";
				dlgHtml += "				<option value=''>";
				for(var ix=0; ix<decoration.portlets.length; ix++) {
					dlgHtml += "			<option value='" + decoration.portlets[ix].value + "'>" + decoration.portlets[ix].name + "";
				}
				dlgHtml += "			</select>";
				dlgHtml += "		</td>";
				dlgHtml += "	</tr>";
			}
			dlgHtml += "	<tr><td colspan='5' class='webformfooterline'></td></tr>";
			dlgHtml += "	<tr>";
			dlgHtml += "		<td align='right' colspan='2'>";
			//dlgHtml += "			<input type='image' name='jsChangeLayout' value='Change' src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_apply.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='javascript:portalPage.hidePortletEditor(); portalPage.getPortletEditor().changeLayout();'>";
			//dlgHtml += "			<input type='image' name='jsAddLayout' value='Add' src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_add.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='javascript:portalPage.hidePortletEditor(); portalPage.getPortletEditor().insertLayout();'>";
			dlgHtml += "			<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_apply.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='javascript:portalPage.hidePortletEditor(); portalPage.getPortletEditor().changeLayout();'>";
			//dlgHtml += "			<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_add.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='javascript:portalPage.hidePortletEditor(); portalPage.getPortletEditor().insertLayout();'>";
			dlgHtml += "			<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_close.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='portalPage.hidePortletEditor();'>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "</table>";
			dlgHtml += "</form>";
		
		}
		else {
			var dlgHtml = "";
			dlgHtml += "<form id='PortletEditorDialog.PortalFragmentEditForm' name='PortalFragmentEditForm' action='" + obj.getFormAction() + "' method='post'>";
			dlgHtml += "<input type='hidden' id='PortletEditorDialog.Fragment' name='fragment' value='" + obj.getFragmentId() + "'>";
			dlgHtml += "<input type='hidden' name='remove' value=''>";
			dlgHtml += "<table width='400px' height='80px' border='0' cellpading='1' cellspacing='0'  class='webformpanel'>";
			dlgHtml += "	<tr><td colspan='4' class='webformheaderline'></td></tr>";
			dlgHtml += "	<tr>";
			dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingName") + "</td>";
			dlgHtml += "		<td colspan='3' class='webformfield' id='PortletEditorDialog.Name'>" + obj.getName() + "</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr>";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingPortletTheme") + "</td>";
			dlgHtml += "		<td width='30%' colspan='3' class='webformfield'>";
			dlgHtml += "			<select id='PortletEditor.SELECT_DECORATOR' name='decorators'>";
			//dlgHtml += "				<option value=''>";
			for(var ix=0; ix<decoration.portlets.length; ix++) {
				dlgHtml += "			<option value='" + decoration.portlets[ix].value + "'>" + decoration.portlets[ix].name + "";
			}
			dlgHtml += "			</select>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.SELECT_CONTENT_TYPE_PANE' >";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingPortletContentType") + "</td>";
			dlgHtml += "		<td colspan='3' class='webformfield'>";
			dlgHtml += "			<select id='PortletEditor.SELECT_CONTENT_TYPE' name='content_type' disabled='true'>";
			dlgHtml += "				<option value='normal'>JSR168 Content";
			dlgHtml += "				<option value='static'>Static Content";
			//dlgHtml += "				<option value='dynamic'>Dynamic Content";
			dlgHtml += "				<option value='iframe'>IFrame Content";
			dlgHtml += "			</select>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.OPTION_PANE'>";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingOption") + "</td>";
			dlgHtml += "		<td colspan='3' class='webformfield'>";
			dlgHtml += "			<input type='checkbox' id='PortletEditor.AUTO_RESIZE' name='auto_resize' value=''>" + portalPage.getMessageResource("pageEditingAutoResize") + "&nbsp;&nbsp;";
			dlgHtml += "			<input type='checkbox' id='PortletEditor.SCROLLING' name='scrolling' value=''>" + portalPage.getMessageResource("pageEditingScrolling") + "&nbsp;&nbsp;";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.CONTENT_TITLE_PANE'>";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingContentTitle") + "</td>";
			dlgHtml += "		<td colspan='3' class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.CONTENT_TITLE' style='width:100%;' name='content_title' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.CONTENT_STYLE_PANE'>";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingContentStyle") + "</td>";
			dlgHtml += "		<td class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.CONTENT_STYLE' style='width:100%;' name='content_style' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "		<td width='20%' class='webformlabelmiddle'>" + portalPage.getMessageResource("pageEditingContentClass") + "</td>";
			dlgHtml += "		<td class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.CONTENT_CLASS' style='width:100%;' name='content_class' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.SIZE_PANE'>"; 
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingWidth") + "</td>";
			dlgHtml += "		<td width='30%' class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.WIDTH' style='width:100%;' name='width' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "		<td width='20%' class='webformlabelmiddle'>" + portalPage.getMessageResource("pageEditingHeight") + "</td>";
			dlgHtml += "		<td class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.HEIGHT' style='width:100%;' name='height' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.CONTENT_EXTRA_PANE'>";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingMoreTarget") + "</td>";
			dlgHtml += "		<td class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.MORE_TARGET' style='width:100%;' name='more_target' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "		<td width='20%' class='webformlabelmiddle'>" + portalPage.getMessageResource("pageEditingMaxHeight") + "</td>";
			dlgHtml += "		<td class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.MAX_HEIGHT' style='width:100%;' name='max_height' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.MORE_SOURCE_PANE'>";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingMoreSource") + "</td>";
			dlgHtml += "		<td colspan='3' class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.MORE_SOURCE' style='width:100%;' name='more_source' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "	<tr id='PortletEditor.CONTENT_SOURCE_PANE'>";
			dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingContentSource") + "</td>";
			dlgHtml += "		<td colspan='3' class='webformfield'>";
			dlgHtml += "			<input type='text' id='PortletEditor.CONTENT_SOURCE' style='width:100%;' name='content_source' value=''>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			//dlgHtml += "	<tr>";
			//dlgHtml += "		<td width='20%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingBBSPortletType") + "</td>";
			//dlgHtml += "		<td class='webformfield'>";
			//dlgHtml += "			<input type='checkbox' id='PortletEditor.BBS_TYPE' name='bbs_type' value=''>";
			//dlgHtml += "		</td>";
			//dlgHtml += "	</tr>";
			dlgHtml += "	<tr><td colspan='4' class='webformfooterline'></td></tr>";
			dlgHtml += "	<tr>";
			dlgHtml += "		<td align='right' colspan='4'>";
			//dlgHtml += "			<input type='image' name='jsChangeDecorator' value='Change' src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_apply.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='javascript:portalPage.hidePortletEditor(); portalPage.getPortletEditor().changeDecorator();'>";
			dlgHtml += "			<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_apply.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='javascript:portalPage.hidePortletEditor(); portalPage.getPortletEditor().changeDecorator();'>";
			dlgHtml += "			<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_close.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='portalPage.hidePortletEditor();'>";
			dlgHtml += "		</td>";
			dlgHtml += "	</tr>";
			dlgHtml += "</table>";
			dlgHtml += "</form>";
		}
		
		if (document.all)	// it is IE
		{
			if (!this.m_fragmentPropDialog.overlap) {
				this.m_fragmentPropDialog.overlap = new Array ();
			}
		
			portalPage.getUtility().hideControl ("SELECT", this.m_fragmentPropDialog, null);
			
			var selectElem = document.getElementById("LayoutPortletEditor.SELECT_THEME");
			if( selectElem ) {
				selectElem.style.visibility = "visible";
			}
			selectElem = document.getElementById("LayoutPortletEditor.SELECT_LAYOUT");
			if( selectElem ) {
				selectElem.style.visibility = "visible";
			}
			selectElem = document.getElementById("LayoutPortletEditor.SELECT_ALIGN");
			if( selectElem ) {
				selectElem.style.visibility = "visible";
			}
			selectElem = document.getElementById("LayoutPortletEditor.SELECT_DECORATOR");
			if( selectElem ) {
				selectElem.style.visibility = "visible";
			}
			selectElem = document.getElementById("PortletEditor.SELECT_DECORATOR");
			if( selectElem ) {
				selectElem.style.visibility = "visible";
			}
		}
		
		this.m_fragmentPropDialog.innerHTML = dlgHtml;
		this.m_fragmentPropDialog.style.left = (pos.m_x+5) + "px";
		this.m_fragmentPropDialog.style.top = (pos.m_y+24) + "px";
		this.m_fragmentPropDialog.style.display = "";
		
		var unitElem = document.getElementById("LayoutPortletEditor.ColumnSizeUnit");
		if( unitElem != null ) {
			unitElem.value = obj.getColumnUnit();
		}

		if( this.m_fragmentPropDialog ) {
			//this.m_fragmentPropDialog.onClick = this.m_fragmentPropDialog.hide;
		}
	},
	keepShow : function(a_event)
	{
		if( this.m_fragmentPropDialog != null) {
			this.m_fragmentPropDialog.style.display = "";
			
			if (document.all)	// it is IE
			{
				if (!this.m_fragmentPropDialog.overlap) {
					this.m_fragmentPropDialog.overlap = new Array ();
				}
			
				portalPage.getUtility().hideControl ("SELECT", this.m_fragmentPropDialog, null);
				
				var selectElem = document.getElementById("LayoutPortletEditor.SELECT_THEME");
				if( selectElem ) {
					selectElem.style.visibility = "visible";
				}
				selectElem = document.getElementById("LayoutPortletEditor.SELECT_LAYOUT");
				if( selectElem ) {
					selectElem.style.visibility = "visible";
				}
				selectElem = document.getElementById("LayoutPortletEditor.SELECT_ALIGN");
				if( selectElem ) {
					selectElem.style.visibility = "visible";
				}
				selectElem = document.getElementById("LayoutPortletEditor.SELECT_DECORATOR");
				if( selectElem ) {
					selectElem.style.visibility = "visible";
				}
				selectElem = document.getElementById("PortletEditor.SELECT_DECORATOR");
				if( selectElem ) {
					selectElem.style.visibility = "visible";
				}
			}
		}
	},
	hide : function()
	{
		if( this.m_fragmentPropDialog != null ) {
			this.m_fragmentPropDialog.style.display = "none";
			this.m_isChangeLayout = false;
			
			if (document.all)	// it is IE
			{
				portalPage.getUtility().showControl( this.m_fragmentPropDialog );
			}
		}
	},
	selectLayoutChanage : function()
	{
		this.m_isChangeLayout = true;
		if(this.m_object.getColumns() != null) {
			var formElem = document.forms[ "PortalLayoutFragmentEditForm" ];
			var columns = this.m_object.getColumns();
			for(var idx=0; idx<columns.length; idx++) {
			
				//alert("element=" + formElem.elements);    
				formElem.elements["column" + idx].disabled = "true";
			}
		}
	},
	/*
	remove : function()
	{
		if( confirm("Are you sure ?") ) {
			this.m_object.getParent().getParent().remove( this.m_object.getParent() );
		}
	},
	*/
	
	onselect : function(id)
	{
		//alert(id);
		this.m_isSizeFieldSelect = true;
	},
	onkeypress : function(a_event, elm, columnLength)
	{
		//alert("columnLength=" + columnLength + ", value=" + elm.value);
		var keyCode = 0;
		if (document.all)	// it is IE
		{
			keyCode = event.keyCode;
		}
		else {
			keyCode = a_event.which;
		}
		
		//alert("keyCode=" + keyCode);
		if(keyCode==8 || (48<=keyCode && keyCode<=57) ) {
			elm.setAttribute("used", true);
			
			var value = keyCode-48;
			if( this.m_isSizeFieldSelect == true ) {
				this.m_isSizeFieldSelect = false;
				elm.value = "";
			}
			else {
				value = elm.value + (keyCode-48);
				if( columnLength > 1 && value > enview.portal.LAYOUT_MAX_SIZE ) {
					return false;
				}
			}
			
			//alert("value=" + value);
			var changeElemArray = new Array();
			var i = 0;
			var j = 0;
			var usedValue = 0;
			for( i=0; i<columnLength; i++) {
				var columnElm = document.getElementById( "column" + i );
				//alert("usedValue=" + usedValue + ", value=" + value + ", columnElm.value=" + columnElm.value);
				var used = columnElm.getAttribute("used");
				if( used == "false" ) {
					changeElemArray[j++] = columnElm;
				}
				else if( columnElm == elm ) {
					usedValue += Number( value );
				}
				else {
					usedValue += Number( columnElm.value );
				}
				//alert("usedValue=" + usedValue);
			}
			//alert("usedValue=" + usedValue);
			 
			var asignVal = 0;
			if( changeElemArray.length > 0 ) {
				asignVal = Math.floor( (enview.portal.LAYOUT_MAX_SIZE - usedValue) / changeElemArray.length );
			}
			else {
				asignVal = enview.portal.LAYOUT_MAX_SIZE - usedValue;
			}
			
			//alert("changeElemArray=" + changeElemArray.length + ", usedValue=" + usedValue + ", asignValue=" + asignVal);
			
			if( asignVal < 0 ) {
				alert( portalPage.getMessageResource("messageColumnSizeOver") );
				return false;
			}
			
			for(i=0; i<changeElemArray.length; i++) {
				changeElemArray[i].value = asignVal;
			}
			
			return true;
		}
		else {
			return false;
		}
	},
	/*
	changeLayout : function()
	{
		var formElem = document.forms[ "PortalLayoutFragmentEditForm" ];
		if(this.m_isChangeLayout==false && this.m_object.getColumns()!=null) {
			var layoutSize = "";
			var columns = this.m_object.getColumns();
			for(var idx=0; idx<columns.length; idx++) {
				layoutSize += formElem.elements["column" + idx].value + "%";
				if( (idx+1)<columns.length ) {
					layoutSize += ",";
				}
			}
			formElem.elements["layoutsize"].value = layoutSize;
		}
		
		formElem.elements["actiontype"].value = "Change";
	},
	*/
	changeLayout : function()
	{
		var names = new Array();
		var values = new Array();
		
		var layoutSize = "";
		var unit = document.getElementById("LayoutPortletEditor.ColumnSizeUnit").value;
		var formElem = document.forms[ "PortalLayoutFragmentEditForm" ];
		if(this.m_isChangeLayout==false && this.m_object.getColumns()!=null) {
			var columns = this.m_object.getColumns();
			for(var idx=0; idx<columns.length; idx++) {
				//layoutSize += formElem.elements["column" + idx].value + enview.portal.LAYOUT_UNIT;
				layoutSize += formElem.elements["column" + idx].value + unit;
				if( (idx+1)<columns.length ) {
					layoutSize += ",";
				}
			}
			
			formElem.elements["layoutsize"].value = layoutSize;
		}
		
		//alert("layoutSize=" + layoutSize);
		var i = 0;
		names[i] = "method";
		values[i++] = "changelayout";
		names[i] = "path";
		values[i++] = portalPage.getPath();
		names[i] = "page_id";
		values[i++] =portalPage.getId();
		names[i] = "align";
		values[i++] = document.getElementById("LayoutPortletEditor.SELECT_ALIGN").value;
		names[i] = "layout";
		values[i++] = document.getElementById("LayoutPortletEditor.SELECT_LAYOUT").value;
		names[i] = "fragment";
		values[i++] = document.getElementById("LayoutPortletEditorDialog.Fragment").value;
		names[i] = "layoutsize";
		values[i++] = encodeURIComponent(layoutSize); //document.getElementById("LayoutPortletEditorDialog.LayoutSize").value;
		
		//alert("layoutSize=" + layoutSize);
		//lert("changeLayout ...");
		
		portalPage.invokeAjax("editpage", names, values, new this.m_changeLayoutHandler(this.m_object), "text/xml"); 
	},
	
	
	/*
	insertLayout : function()
	{
		var formElem = document.forms[ "PortalLayoutFragmentEditForm" ];
		
		formElem.elements["actiontype"].value = "Add";
	},
	*/
	insertLayout : function()
	{
		var names = new Array();
		var values = new Array();
		var i = 0;
		names[i] = "method";
		values[i++] = "insertlayout";
		names[i] = "path";
		values[i++] = portalPage.getPath();
		names[i] = "page_id";
		values[i++] =portalPage.getId();
		names[i] = "layout";
		values[i++] = document.getElementById("LayoutPortletEditor.SELECT_LAYOUT").value;
		names[i] = "fragment";
		values[i++] = document.getElementById("LayoutPortletEditorDialog.Fragment").value;
		
		//alert("insertLayout ...");
		portalPage.invokeAjax("editpage", names, values, new this.m_insertLayoutHandler(this.m_object), "text/xml"); 
	},
	
	changeDecorator : function()
	{
		var names = new Array();
		var values = new Array();
		
		/*
		var formElem = document.forms[ "PortalFragmentEditForm" ];
	    var formData = "";
	    for (var i=0; i < formElem.elements.length; i++) {
			names[i] = formElem.elements[ i ].name;
			values[i] = formElem.elements[ i ].value;
	    }
		*/
		
		var i = 0;
		names[i] = "method";
		values[i++] = "changedecorator";
		names[i] = "path";
		values[i++] = portalPage.getPath();
		names[i] = "page_id";
		values[i++] =portalPage.getId();
		names[i] = "fragment";
		values[i++] = document.getElementById("PortletEditorDialog.Fragment").value;
		names[i] = "decorators";
		values[i++] = document.getElementById("PortletEditor.SELECT_DECORATOR").value;
		names[i] = "content_type";
		values[i++] = document.getElementById("PortletEditor.SELECT_CONTENT_TYPE").value;
		names[i] = "content_title";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.CONTENT_TITLE").value );
		names[i] = "content_source";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.CONTENT_SOURCE").value );
		names[i] = "auto_resize";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.AUTO_RESIZE").checked );
		names[i] = "content_scrolling";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.SCROLLING").checked );
		names[i] = "content_class";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.CONTENT_CLASS").value );
		names[i] = "content_width";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.WIDTH").value );
		names[i] = "content_height";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.HEIGHT").value );
		names[i] = "max_height";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.MAX_HEIGHT").value );
		names[i] = "content_style";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.CONTENT_STYLE").value );
		names[i] = "more_src";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.MORE_SOURCE").value );
		names[i] = "more_target";
		values[i++] = encodeURIComponent( document.getElementById("PortletEditor.MORE_TARGET").value );
		//names[i] = "bbs_type";
		//values[i++] = document.getElementById("PortletEditor.BBS_TYPE").checked;
		
		//alert("zzz");
		
		portalPage.invokeAjax("editpage", names, values, new this.m_changeDecoratorHandler(), "text/xml"); 
	}
}


enview.portal.MyPageEditor = function()
{
	this.m_ajax = new enview.util.Ajax();
	this.m_ajax.setContextPath( portalPage.getContextPath() );
	
	this.m_addHandler = function()
	{
	  this.populate = function(data) 
	  {
		//alert("PortletChangeLayoutHandler");
		var msg = portalPage.m_ajax.retrieveElementValue("message", data);
		var path = portalPage.m_ajax.retrieveElementValue("id", data);
		//window.status =  msg;
		var serverpath = "";
		if(portalPage.getContextPath().lastIndexOf("/") > -1 ) {
			serverpath = portalPage.getContextPath() + portalPage.getServletPath();
		}
		else {
			serverpath = portalPage.getContextPath() + "/" + portalPage.getServletPath();
		}
		location.href = serverpath + path;
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};
	
	this.m_updateHandler = function()
	{
	  this.populate = function(data) 
	  {
		//alert("PortletRemoveHandler");
		//location.reload(true);
		var id = portalPage.m_ajax.retrieveElementValue("id", data);
		var msg = portalPage.m_ajax.retrieveElementValue("message", data);
		
		portalPage.setTitle( document.getElementById("MyPageEditorDialog.name").value );
		document.getElementById("Enview.MyPage.TabHeaderTitle:" + id).innerHTML = "<span>" + portalPage.getTitle() + "</span>";
		//window.status =  msg;
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};

	this.m_removeHandler = function()
	{
	  this.populate = function(data) 
	  {
		var msg = portalPage.m_ajax.retrieveElementValue("message", data);
		//window.status =  msg;
		var path = portalPage.m_ajax.retrieveElementValue("id", data);
		var serverpath = "";
		if(portalPage.getContextPath().lastIndexOf("/") > -1 ) {
			serverpath = portalPage.getContextPath() + portalPage.getServletPath();
		}
		else {
			serverpath = portalPage.getContextPath() + "/" + portalPage.getServletPath();
		}
		location.href = serverpath + path;
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};
	
	this.m_invokeHandler = function()
	{
	  this.populate = function(data) 
	  {
		var msg = portalPage.m_ajax.retrieveElementValue("message", data);
		//alert(msg);
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};
}
enview.portal.MyPageEditor.prototype =
{
	m_myPageEditDialog : null,
	m_removeHandler : null,
	m_updateHandler : null,
	m_addHandler : null,
	m_invokeHandler : null,
	m_pageId : null,
	
	init : function()
	{
		var decoration = portalPage.getDecoration();
		var dlgHtml = "";
		//var tmp = portalPage.getPath();
		//var path = tmp.substring( tmp.indexOf("/~" + portalPage.getUserId()) );
		
		//dlgHtml += "<form id='MyPageEditorDialog.EditForm' name='MyPageEditorDialogEditForm' action='" + portalPage.getFormAction() + "' method='post'>";
		dlgHtml += "<form id='MyPageEditorDialog.EditForm' name='MyPageEditorDialogEditForm' action='javascript:portalPage.getMyPageEditor().doUpdate()' method='post'>";
		dlgHtml += "	<input type='hidden' id='MyPageEditorDialog.isCreate'>";
		dlgHtml += "	<input type='hidden' id='MyPageEditorDialog.path' name='path' value='" + portalPage.getPath() + "'>";
		dlgHtml += "	<table width='350px' height='100px' border='0' cellpadding='1' cellspacing='0'  class='webformpanel'>";
		dlgHtml += "		<tr><td colspan='5' class='webformheaderline'></td></tr>";
		dlgHtml += "		<tr>";
		dlgHtml += "			<td width='30%' class='webformlabel'>" + portalPage.getMessageResource("pageEditingName") + "</td>";
		dlgHtml += "			<td class='webformfield'>";
		dlgHtml += "				<input type='text' id='MyPageEditorDialog.name' name='name' value='' maxLength='10' class='full_webtextfield'>";
		dlgHtml += "			</td>";
		dlgHtml += "		</tr>";
		
		dlgHtml += "	<tr id='MyPageEditorDialog.PageTheme'>";
		dlgHtml += "		<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingPageTheme") + "</td>";
		dlgHtml += "		<td class='webformfield'>";
		dlgHtml += "			<select id='MyPageEditorDialog.SELECT_THEME' name='theme'>";
		for(var ix=0; ix<decoration.mypages.length; ix++) {
			dlgHtml += "			<option value='" + decoration.mypages[ix].value + "'>" + decoration.mypages[ix].name + "";
		}
		dlgHtml += "			</select>";
		dlgHtml += "		</td>";
		dlgHtml += "	</tr>";

		dlgHtml += "		<tr>";
		dlgHtml += "			<td class='webformlabel'>" + portalPage.getMessageResource("pageEditingLayout") + "</td>";
		dlgHtml += "			<td class='webformfield'>";
		dlgHtml += "				<select id='MyPageEditorDialog.SELECT_LAYOUT' name='layout' onchange=''>";
		for(var ix=0; ix<decoration.layouts.length; ix++) {
			dlgHtml += "			<option value='" + decoration.layouts[ix].value + "'>" + decoration.layouts[ix].name + "";
		}
		dlgHtml += "				</select>";
		dlgHtml += "			</td>";
		dlgHtml += "		</tr>";
		dlgHtml += "		<tr><td colspan='5' class='webformfooterline'></td></tr>";
		dlgHtml += "		<tr>";
		dlgHtml += "			<td align='right' colspan='2'>";
		dlgHtml += "				<input type='image' src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_apply.gif' hspace='2' align='absmiddle' style='cursor:hand' >";
		//dlgHtml += "				<input type='image' src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_apply.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='javascript:portalPage.hideMyPageEditor(); portalPage.getMyPageEditor().doUpdate()'>";
		dlgHtml += "				<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_close.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='portalPage.hideMyPageEditor();'>";
		dlgHtml += "			</td>";
		dlgHtml += "		</tr>";
		dlgHtml += "	</table>";
		dlgHtml += "</form>";
		
		this.m_myPageEditDialog = document.createElement("div");
		this.m_myPageEditDialog.id = "MyPageEditorDialog";
		this.m_myPageEditDialog.setAttribute("class", "mypage-editor");
		this.m_myPageEditDialog.setAttribute("className", "mypage-editor");
	
		this.m_myPageEditDialog.innerHTML = dlgHtml;
		this.m_myPageEditDialog.style.display = "none";
		
		document.body.appendChild( this.m_myPageEditDialog );
		
	},
	
	show : function(elm)
	{
		var pos = portalPage.getUtility().getAbsolutePosition ( elm );
		//document.getElementById("MyPageEditorDialog.EditForm").action = obj.getFormAction();
		
		if (document.all)	// it is IE
		{
			if (!this.m_myPageEditDialog.overlap) {
				this.m_myPageEditDialog.overlap = new Array ();
			}
		
			portalPage.getUtility().hideControl ("SELECT", this.m_myPageEditDialog, null);
			
			selectElem = document.getElementById("MyPageEditorDialog.SELECT_THEME");
			if( selectElem ) {
				selectElem.style.visibility = "visible";
			}
			selectElem = document.getElementById("MyPageEditorDialog.SELECT_LAYOUT");
			if( selectElem ) {
				selectElem.style.visibility = "visible";
			}
		}
		
		//this.m_fragmentPropDialog.innerHTML = htmlString;
		this.m_myPageEditDialog.style.left = (pos.m_x-12) + "px";
		this.m_myPageEditDialog.style.top = (pos.m_y+35) + "px";
		this.m_myPageEditDialog.style.display = "";
		document.getElementById("MyPageEditorDialog.name").focus();
	},
	keepShow : function(a_event)
	{
		if( this.m_myPageEditDialog != null) {
			this.m_myPageEditDialog.style.display = "";
			
			if (document.all)	// it is IE
			{
				if (!this.m_myPageEditDialog.overlap) {
					this.m_myPageEditDialog.overlap = new Array ();
				}
			
				portalPage.getUtility().hideControl ("SELECT", this.m_myPageEditDialog, null);
				
				selectElem = document.getElementById("MyPageEditorDialog.SELECT_LAYOUT");
				if( selectElem ) {
					selectElem.style.visibility = "visible";
				}
			}
		}
	},
	hide : function()
	{
		if( this.m_myPageEditDialog != null) {
			this.m_myPageEditDialog.style.display = "none";
			
			if (document.all)	// it is IE
			{
				portalPage.getUtility().showControl( this.m_myPageEditDialog );
			}
		}
	},
	doSelect : function(id, elm)
	{
		this.m_pageId = id;
		document.getElementById("MyPageEditorDialog.name").value = portalPage.getTitle();
		document.getElementById("MyPageEditorDialog.SELECT_LAYOUT").style.display = "none";
		document.getElementById("MyPageEditorDialog.isCreate").value = "false";
	},
	doCreate : function(id, elm)
	{
		this.m_pageId = id;
		document.getElementById("MyPageEditorDialog.name").value = "";
		document.getElementById("MyPageEditorDialog.SELECT_LAYOUT").style.display = "";
		document.getElementById("MyPageEditorDialog.isCreate").value = "true";
	},
	doUpdate : function()
	{
		var names = new Array();
	    var values = new Array();
		
		var i = 0;
		var isCreate = document.getElementById("MyPageEditorDialog.isCreate").value; 
	    names[i] = "method";
		if( isCreate == "true" ) {
			values[i++] = "addmypage";
		}
		else {
			values[i++] = "updatemypage";
		}
		
		names[i] = "page_id";
		values[i++] = this.m_pageId;
		names[i] = "path";
		values[i++] = encodeURIComponent( document.getElementById("MyPageEditorDialog.path").value );
		names[i] = "name";

		var pageNameElem = document.getElementById("MyPageEditorDialog.name");
		if( pageNameElem.value==null || pageNameElem.value.trim().length==0 ) {
			pageNameElem.value = "";
			pageNameElem.focus();
			return;
		}
		values[i++] = encodeURIComponent( pageNameElem.value );
		names[i] = "theme";
		values[i++] = document.getElementById("MyPageEditorDialog.SELECT_THEME").value;
		names[i] = "layout";
		values[i++] = encodeURIComponent( document.getElementById("MyPageEditorDialog.SELECT_LAYOUT").value );
		
		this.hide(); 
				
		if( isCreate == "true" ) {
			this.m_ajax.invoke("editpage", names, values, new this.m_addHandler(), "text/xml" );
		}
		else {
			this.m_ajax.invoke("editpage", names, values, new this.m_updateHandler(), "text/xml" );
		}
	},
	doRemove : function(user_id)
	{
		var names = new Array();
	    var values = new Array();
		var ix = 0;
		
	    names[ix] = "method";
		values[ix++] = "removemypage";
		names[ix] = "user_id";
		values[ix++] = user_id;
		names[ix] = "path";
		values[ix++] = document.getElementById("MyPageEditorDialog.path").value;
		
		this.m_ajax.invoke("editpage", names, values, new this.m_removeHandler(), "text/xml" );
	},
	setDefaultMyPage : function(user_id, path) 
	{
		var names = new Array();
		var values = new Array();
		var ix = 0;
		
		names[ix] = "method";
		values[ix++] = "defaultmypage";
		names[ix] = "user_id";
		values[ix++] = user_id;
		names[ix] = "default_page";
		values[ix++] = path;
		
		//alert("userId=" + userId + ", page=" + page);
		this.m_ajax.invoke("editpage", names, values, new this.m_invokeHandler(), "text/xml" );
	},
	setDefaultGroupPage : function(user_id) 
	{
		var names = new Array();
		var values = new Array();
		var ix = 0;
		
		names[ix] = "method";
		values[ix++] = "defaulthomepage";
		names[ix] = "user_id";
		values[ix++] = user_id;
		
		//alert("userId=" + userId + ", page=" + page);
		this.m_ajax.invoke("editpage", names, values, new this.m_invokeHandler(), "text/xml" );
	}
}

enview.portal.QuickMenu = function()
{
	this.m_retrieveHandler = function()
	{
	  this.populate = function(data) 
	  {
		quickMenu.doRetrieveHandler( data );
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};
	
	this.m_createHandler = function()
	{
	  this.populate = function(data) 
	  {
		quickMenu.doCreateHandler( data );
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};
	
	this.m_removeHandler = function()
	{
	  this.populate = function(data) 
	  {
		quickMenu.doRemoveHandler( data );
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};
}

enview.portal.QuickMenu.prototype =
{
	m_domElement : null,
	m_stmnTimer : null,
	m_quickMenuLeft : 0, // 스크롤메뉴의 좌측 위치
	m_quickMenuTopMargin1 : 0, // 페이지 헤더부분의 여백
	m_quickMenuTopMargin2 : 0, // 스크롤시 브라우저 상단과 약간 띄움. 필요없으면 0으로 세팅
	m_quickMenuTopBase : 10, // 스크롤메뉴 초기 시작위치 (아무렇게나 해도 상관은 없지만 m_quickMenuTopMargin1과 약간 차이를 주는게 보기 좋음)
	m_quickMenuActivateSpeed : 500, // 움직임을 감지하는 속도 (숫자가 클수록 늦게 알아차림)
	m_quickMenuScrollSpeed : 10, // 스크롤되는 속도 (클수록 늦게 움직임)
	m_createHandler : null,
	m_removeHandler : null,
	m_retrieveHandler : null,
	
	init : function(quickElement, left, top)
	{
		if( quickElement ) {
			this.m_domElement = quickElement;
		}
		else {
			this.m_domElement = document.getElementById("Enview.Portal.Quickmenu");
		}
		
		if( left && top ) {
			this.m_quickMenuTopMargin2 = top + 25;
			this.m_domElement.style.left = left;
			this.m_domElement.style.top = this.m_quickMenuTopMargin2;
		}
		else {
			//this.m_domElement.style.left = 0;
			this.m_domElement.style.top = "10px";
			this.m_quickMenuTopMargin2 = 125;
		}
		
		this.m_domElement.style.position = "absolute";
		this.m_domElement.style.visibility = "visible";
		//this.m_domElement.style.z-index = "10";

		this.refreshQuickMenu();
		
		//this.doRetrieve();
	},
	
	refreshQuickMenu : function() {
	
		var top = 0;
		if( document.documentElement ) {
			
			top = document.documentElement.scrollTop;
		}
		else if( document.all ) { // IE
			top = document.body.scrollTop; 
		}
		else {
			top = window.pageYOffset;
		}
		//alert("scrollTop=" + top);
		
		var stmnStartPoint, stmnEndPoint, stmnRefreshTimer;
		stmnStartPoint = parseInt(this.m_domElement.style.top, 10);
		stmnEndPoint = parseInt(top + this.m_quickMenuTopMargin2, 10);  //document.body.scrollTop + this.m_quickMenuTopMargin2;
		//alert("scrollTop=" + document.body.scrollTop + ", stmnEndPoint=" + stmnEndPoint);
		if (stmnEndPoint < this.m_quickMenuTopMargin1) { 
			stmnEndPoint = this.m_quickMenuTopMargin1; 
		}

		// 무한 스크롤 다운 방지
		if(top > 50) { 
			stmnEndPoint = stmnEndPoint - 59; 
		}
		
		//alert("stmnStartPoint=" + stmnStartPoint + ", stmnEndPoint=" + stmnEndPoint);
		
		//alert("y=" + this.m_domElement.offsetTop);
		//this.m_domElement.style.top = "100px";
		//alert("y=" + this.m_domElement.offsetTop);

		stmnRefreshTimer = this.m_quickMenuActivateSpeed;
		if ( stmnStartPoint != stmnEndPoint ) {
			stmnScrollAmount = Math.ceil( Math.abs( stmnEndPoint - stmnStartPoint ) / 15 );
			//alert(this.m_domElement.style.top);
			var diff = ( stmnEndPoint < stmnStartPoint ) ? -stmnScrollAmount : stmnScrollAmount;
			//this.m_domElement.style.top = "100px";
			//alert(this.m_domElement.style.top);
			//this.m_domElement.style.top = parseInt(this.m_domElement.style.top, 10) + diff + "px";
			
			//this.m_domElement.style.top = parseInt(this.m_domElement.style.top, 10) + diff;
			this.m_domElement.style.top = new Number(this.m_domElement.offsetTop + diff) + "px";
			
			//alert("diff=" + this.m_domElement.offsetTop + diff + ", this.m_domElement.style.top=" + this.m_domElement.style.top);
			//alert("stmnScrollAmount=" + stmnScrollAmount + ", parseInt(this.m_domElement.style.top, 10)=" + parseInt(this.m_domElement.style.top, 10) + ", this.m_domElement.style.top=" + this.m_domElement.style.top);
			//alert("diff=" + diff + ", this.m_domElement.style.top=" + parseInt(this.m_domElement.style.top, 10)+diff);
			//alert(", stmnScrollAmount=" + ( stmnEndPoint<stmnStartPoint ) ? -stmnScrollAmount : stmnScrollAmount);
			stmnRefreshTimer = this.m_quickMenuScrollSpeed;
		}
		this.m_stmnTimer = setTimeout ("quickMenu.refreshQuickMenu();", stmnRefreshTimer);
	},

	doRetrieve : function()
	{
		var names = new Array();
		var values = new Array();
		names[0] = "method";
		values[0] = "getquickmenulist";
		portalPage.invokeAjax("enviewmenu", names, values, new this.m_retrieveHandler(), "text/json"); 
	},
	doRetrieveHandler : function(resultObject)
	{
		var bodyElem = document.getElementById('Enview.Portal.UserQuickmenu');
	    var tr_tag = null;
	    var td_tag = null;

		//for(; bodyElem.hasChildNodes(); )
		//	bodyElem.removeChild( bodyElem.childNodes[0] );
		
		var tmp = "";
		for(i=0; i<resultObject.Data.length; i++) {
			tmp += "<div><a href='" + portalPage.getContextPath() + "/portal" + resultObject.Data[ i ].url + "'><img src='" + portalPage.getContextPath() + portalPage.getThemePath() + "images/menu/" + resultObject.Data[ i ].icon + "' title='" + resultObject.Data[ i ].title + "'></a> <img src='" + portalPage.getContextPath() + portalPage.getThemePath() + "images/btn_quick_remove.gif' align='absmiddle' title='" + portalPage.getMessageResource("portal.quick.remove") + "' onclick='javascript:quickMenu.doRemove(" + resultObject.Data[ i ].externId + ")'></div>";
		}
		//alert( tmp );
		document.getElementById("Enview.Portal.UserQuickmenu").innerHTML = tmp;
	},
	doCreate : function()
	{
		//alert( portalPage.getPath() );
		//alert( portalPage.getTitle() );
		var names = new Array();
		var values = new Array();
		var id = 0;
		names[id] = "method";
		values[id++] = "addquickmenu";
		names[id] = "page_id";
		values[id++] = portalPage.getId();
		portalPage.invokeAjax("enviewmenu", names, values, new this.m_createHandler(), "text/json"); 
	},
	doCreateHandler : function(resultObject)
	{
		this.doRetrieve();
	},
	
	doRemove : function(id)
	{
		var names = new Array();
		var values = new Array();
		var idx = 0;
		names[idx] = "method";
		values[idx++] = "removequickmenu";
		names[idx] = "id";
		values[idx++] = id;
		portalPage.invokeAjax("enviewmenu", names, values, new this.m_removeHandler(), "text/json"); 
	},
	doRemoveHandler : function(resultObject)
	{
		this.doRetrieve();
	}
}

enview.portal.Notice = function()
{
	this.m_retrieveHandler = function()
	{
	  this.populate = function(data) 
	  {
		noticeManager.doRetrieveHandler( data );
	  }     
	  this.failure = function(msg)
	  {
		alert( msg );
	  }
	};
}

enview.portal.Notice.prototype =
{
	m_domElement : null,
	m_createHandler : null,
	m_removeHandler : null,
	m_retrieveHandler : null,
	
	init : function()
	{
		this.doRetrieve();
	},
	doRetrieve : function()
	{
		var names = new Array();
		var values = new Array();
		names[0] = "method";
		values[0] = "getpopupnoticelist";
		portalPage.invokeAjax("notice", names, values, new this.m_retrieveHandler(), "text/xml"); 
	},
	doRetrieveHandler : function(resultObject)
	{
		var notices = resultObject.getElementsByTagName("notice");
		if (notices != null && notices.length > 0)
		{
			for (ix=0; ix < notices.length; ix++)
			{
				var noticeId = portalPage.m_ajax.retrieveElementValue("noticeId", notices[ix]);
				var title = portalPage.m_ajax.retrieveElementValue("title", notices[ix]);
				var content = portalPage.m_ajax.retrieveElementValue("content", notices[ix]);
				var layoutX = portalPage.m_ajax.retrieveElementValue("layoutX", notices[ix]);
				var layoutY = portalPage.m_ajax.retrieveElementValue("layoutY", notices[ix]);
				var layoutWidth = portalPage.m_ajax.retrieveElementValue("layoutWidth", notices[ix]);
				var layoutHeight = portalPage.m_ajax.retrieveElementValue("layoutHeight", notices[ix]);
				
				var enviewNotice = GetCookie( "ENVIEW_NOTICE_" + noticeId );
				if( enviewNotice == "no" ) continue;
				
				var dialogTag = document.createElement("div");
				dialogTag.id = "Enview.Portal.Notice" + noticeId;
				dialogTag.setAttribute("class", "notice-infomation");
				dialogTag.setAttribute("className", "notice-infomation");
				dialogTag.style.zIndex = "10";
				dialogTag.style.left = layoutX + "px";
				dialogTag.style.top = layoutY + "px";
				dialogTag.style.width = layoutWidth + "px";
				dialogTag.style.height = layoutHeight + "px";
				
				var dialogHtml = "";
				dialogHtml  ="<table width='100%' border='0' cellpadding='0' cellspacing='0' style='padding:1px; cursor: hand;'><tr><td colspan='2'>";
				dialogHtml += content;
				dialogHtml +="</td></tr><tr bgcolor='#8e8e8e' ><td align='left'><label>";
				dialogHtml +="<input type='checkbox' id='Enview.Portal.Notice.Checkbox" + noticeId + "'/></label>";
				dialogHtml +="<img src='" + portalPage.getContextPath() + "/statics/templates/notice/images/label01.gif' align='absmiddle'/></td>";
				dialogHtml +="<td align='right'>";
				dialogHtml +="<a href='javascript:noticeManager.close(" + noticeId + ")' onFocus='this.blur()'>";
				dialogHtml +="<img src='" + portalPage.getContextPath() + "/statics/templates/notice/images/btn_close.gif' border='0' align='absmiddle'/>";
				dialogHtml +="</a></td></tr></table>";

				dialogTag.innerHTML = dialogHtml;
				
				document.body.appendChild( dialogTag );
				
				var e = new enview.util.DragMgr(this, dialogTag, "Enview.Portal.Notice" + noticeId);
				e.attach();
				
				//this.m_domElement.style.left = layoutX;
				//this.m_domElement.style.top = layoutY;
				//this.m_domElement.style.width = layoutWidth;
				//this.m_domElement.style.height = layoutHeight;
				//this.m_domElement.style.display = "";
				//document.getElementById("Enview.Portal.Notice.Content").innerHTML = content;
			}
		}
	},
	clearTimer : function() {
		
	},
	close : function(noticeId)
	{
		var isCloseToday = document.getElementById("Enview.Portal.Notice.Checkbox" + noticeId).checked;
		if( isCloseToday == true ) {
			var todayDate = new Date(); 
			todayDate.setDate( todayDate.getDate() + 1 ); 
			document.cookie = "ENVIEW_NOTICE_" + noticeId + "=" + escape( "no" ) + "; path=/; expires=" + todayDate.toGMTString() + ";" 
		}
		
		var dom = document.getElementById("Enview.Portal.Notice" + noticeId);
		if( dom ) {
			dom.style.display = "none";
		}
	}
}

enview.portal.About = function()
{
	
}
enview.portal.About.prototype =
{
	m_domElement: null,
	
	init: function ()
	{
		var x = 0;
		var y = 0;
		var width = 330;
		var height = 260;

		this.m_domElement = document.createElement("div");
		this.m_domElement.ch = true;
		this.m_domElement.id = "AboutDialog";
		this.m_domElement.setAttribute("class", "webpanel");
		this.m_domElement.setAttribute("className", "webpanel");
		this.m_domElement.style.width = width + "px"; 
		this.m_domElement.style.height = height + "px";
		this.m_domElement.style.position = "absolute";
		this.m_domElement.style.zIndex = "998";
		this.m_domElement.style.display = 'none';
		
		if (document.layers) { 
			x = screen.width / 2 - width / 2; 
			y = screen.height / 2 - height / 2; 
			//alert("document.layers screen.width=" + screen.width + ", screen.height=" + screen.height + ", x=" + x + ",y=" + y);
		}  
		else { 
			x = document.body.offsetWidth / 2 - width / 2; 
			y = document.body.offsetHeight / 2 - height / 2; 
			//x = screen.width / 2 - document.body.offsetWidth / 2; 
			//y = -75 + screen.height / 2 - document.body.offsetHeight / 2; 
			//alert("screen.width=" + screen.width + ", document.body.offsetWidth=" + document.body.offsetWidth + ", screen.height=" + screen.height + ", document.body.offsetHeight=" + document.body.offsetHeight + ", x=" + x + ",y=" + y);
		}  
 
		//var x = (window.width)/2 - 250;
		//var y = (window.height)/2 - 175;
		this.m_domElement.style.left = x + "px";
		this.m_domElement.style.top = y + "px";
		var version = portalPage.getMessageResource("portalAboutVersion");
		var aboutContent = portalPage.getMessageResource("portalAboutMessage");
		
		var dlgHtml = "";
		dlgHtml += "<table width='100%' height='100%' ><tr><td>";
		dlgHtml += "<table width='100%' border='0' cellspacing='0' cellpadding='0' background='" + portalPage.getContextPath() + "/decorations/layout/images/topimg_bg.jpg'>";
		dlgHtml += "<tr> ";
		dlgHtml += "<td width='180'><img src='" + portalPage.getContextPath() + "/decorations/layout/images/logo.gif' width='180' height='70'></td>";
		dlgHtml += "<td>&nbsp;</td>";
		dlgHtml += "</tr>";
		dlgHtml += "</table></td></tr>";
		dlgHtml += "<tr><td><table class='webpanel' width='100%' border='0' cellspacing='0' cellpadding='0' style='padding: 10px 15px 10px 15px;'>";
		dlgHtml += "<tr><td>&nbsp;</td> </tr>";
		dlgHtml += "<tr> ";
		dlgHtml += "<td style='FONT-FAMILY: dotum; FONT-SIZE: 8pt; FONT-COLOR: #999999' align='left'>";
		dlgHtml += "<b>" + version + "</b>: " + portalPage.getVersion();
		dlgHtml += "</td>";
		dlgHtml += "</tr>";
		dlgHtml += "<tr> ";
		dlgHtml += "<td style='FONT-FAMILY: dotum; FONT-SIZE: 8pt; FONT-COLOR: #999999' align='left'>";
		dlgHtml += "</td>";
		dlgHtml += "</tr>";
		dlgHtml += "<tr> ";
		dlgHtml += "<td style='FONT-FAMILY: dotum; FONT-SIZE: 8pt; FONT-COLOR: #999999' align='left'>";
		dlgHtml += "<textarea id='Portal.Enview.About' cols='47' rows='6' style='overflow:hidden; FONT-FAMILY: dotum; FONT-SIZE: 8pt; FONT-COLOR: #999999' readonly='true'></textarea>";
		dlgHtml += "</td>";
		dlgHtml += "</tr>";
		dlgHtml += "</table></td></tr>";
		dlgHtml += "<tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0' style='padding: 10px 15px 10px 15px;'>";
		dlgHtml += "<tr> ";
		dlgHtml += "<td align='right'>";
		dlgHtml += "<img src='" + portalPage.getContextPath() + "/decorations/layout/images/button/btn_close.gif' hspace='2' align='absmiddle' style='cursor:hand' onclick='portalPage.hideAbout();'>";
		dlgHtml += "</td>";
		dlgHtml += "</tr>";
		dlgHtml += "</table></td></tr>";
		dlgHtml += "</table>";
		
		this.m_domElement.innerHTML = dlgHtml;
		document.body.appendChild( this.m_domElement );
		
		document.getElementById("Portal.Enview.About").value = aboutContent;
	},
	
	doShow: function ()
	{
		if( !this.m_hiddenDIV ) {
			//this.m_hiddenDIV = document.createElement("div");
			this.m_hiddenDIV = document.getElementById("Enview.Portal.DialogBasePane");
			this.m_hiddenDIV.setAttribute("class", "veilDiv");
			this.m_hiddenDIV.setAttribute("className", "veilDiv");
			this.m_hiddenDIV.style.background = "#EEEEEE";
			this.m_hiddenDIV.style.border = "0";
			this.m_hiddenDIV.style.position = "absolute";
			this.m_hiddenDIV.style.top = "0px";
			this.m_hiddenDIV.style.left = "0px";
			this.m_hiddenDIV.style.zIndex = "990";
			if (document.all) this.m_hiddenDIV.style.filter = "alpha(opacity=30)";
			else this.m_hiddenDIV.style.opacity = "0.3";
			//document.body.appendChild( this.m_hiddenDIV );
		}
		this.m_hiddenDIV.style.display = "";
		if (document.all) this.m_hiddenDIV.style.width = document.body.scrollWidth;
		else this.m_hiddenDIV.style.width = document.width;
		if (document.all) this.m_hiddenDIV.style.height = document.body.scrollHeight;
		else this.m_hiddenDIV.style.height = document.height;
		
		if (document.all)	// it is IE
		{
			if (!this.m_domElement.overlap) {
				this.m_domElement.overlap = new Array ();
			}
		
			portalPage.getUtility().hideControl ("SELECT", this.m_domElement, null);
		}
		
		this.m_domElement.style.display='';
	},
	doHide : function()
	{
		if( this.m_domElement != null) {
			this.m_domElement.style.display = "none";
			
			if (document.all)	// it is IE
			{
				portalPage.getUtility().showControl ( this.m_domElement );
			}
			
			if( this.m_hiddenDIV ) {
				this.m_hiddenDIV.style.display = "none";
			}
		}
	}
}
