Portlet = function(portletParams) {
	var self = this;
	this.params = portletParams;
	this.defaultParams = null;
	this.refreshRate = 0;
	this.confirmOnClose = false;
	var obj;
	var showHideDiv;
	var closeDiv;
	var editDiv;
	var iconDiv;
	this.isBuilt = false;
	this.build = function() {
		this.isBuilt = true;
		this.defaultModuleObj = Framework.Modules[ this.params[ "moduleName" ] + "Widget" ];
		if( !this.defaultModuleObj )return;
		this.defaultParams = this.defaultModuleObj.defaultObj;

		this.id = this.params["id"];
		this.moduleName = this.params[ "moduleName" ]
		this.colNumber  = this.params["colNumber"];
		this.tabNumber  = this.params["tabNumber"];
		this.dataId     = this.params["dataId"];
		this.view       = this.params["view"];

		if(  this.params["height"] == null )
			this.params["height"] = GENERAL_SETTINGS.DEFAULT_MODULE_HEIGHT;

		this.height	    = parseInt( this.params["height"] );
		this.collapsed = parseBool(this.params["collapsed"] );
		if( this.collapsed == null  ) this.collapsed = false;
		this.title = (this.defaultModuleObj )? this.defaultModuleObj.title:"";
		this.icon  = this.params[ "ico" ];


		var portlet        = createElementVsClassName("DIV", "portlet", this.id);
		portlet.setAttribute( "tabNumber", this.tabNumber );
		var portletFrame   = createElementVsClassName("DIV", "portletFrame",   this.id + "_frame");
		portletFrame.setAttribute( "tabNumber", this.tabNumber );
		var portletHeader  = createElementVsClassName("DIV", "portletHeader",  this.id + "_header");
		var portletEdit    = createElementVsClassName("DIV", "portletEdit",    this.id + "_edit");
		var portletContent = createElementVsClassName("DIV", "portletContent", this.id + "_container");

		if(this.collapsed)
			portletContent.style.display = "none";

		var currentShowHideImgURL = ( !this.collapsed )?PortletLoader.SHOW_IMG_URL:PortletLoader.HIDE_IMG_URL;
		portletHeader.ondblclick = maximizeRestoreFromOutside; 
		

		showHideDiv =  createElementVsClassName("DIV", "showHide");
		showHideDiv.innerHTML = "<img src=\""+ currentShowHideImgURL +"\" />";

		iconDiv =  createElementVsClassName("DIV", "icon");
		iconDiv.innerHTML = "<div class=\""+ Framework.Modules[ self.params["moduleName"] +"Widget"].className +"\" ></div>";
		iconDiv.style.display="none";

		var moduleactionsDiv 		=  createElementVsClassName("DIV", "moduleactions");
		var closeDiv, maximizeDiv, editDiv;

		var moduleactionsDivWidth = 0;
		if( !parseBool( this.defaultParams["isntClosable"] )  )
		{
			closeDiv 		=  createElementVsClassName("DIV", "close");
			closeDiv.innerHTML 	= "<img src=\""+ PortletLoader.CLOSE_IMG_URL +"\" title='Close'/>";
			moduleactionsDiv.appendChild( closeDiv );
			moduleactionsDivWidth += 16;
		}

		if( !parseBool( this.defaultParams["isntMaximizable"] )  )
		{
			maximizeDiv 		=  createElementVsClassName("DIV", "maximize");
			maximizeDiv.id = "maximize_" + this.id;
			maximizeDiv.innerHTML 	= "<img src=\""+ PortletLoader.MAXIMIZE_IMG_URL +"\" title='Maximize'/>";
			moduleactionsDiv.appendChild( maximizeDiv );
			moduleactionsDivWidth += 16;
		}

		if( !parseBool( this.defaultParams["isntEditable"] )  )
		{
			editDiv 		=  createElementVsClassName("DIV", "edit");
			editDiv.innerHTML 	= "<img src=\""+ PortletLoader.EDIT_IMG_URL +"\" title='Edit'/>";
			moduleactionsDiv.appendChild( editDiv );
			moduleactionsDivWidth += 16;
		}

		moduleactionsDiv.style.width = moduleactionsDivWidth + "px";

		portlet.draggable=true;

		var portletAdditionalActions 		=  createElementVsClassName("DIV", "additionalActions");
		portletAdditionalActions.setAttribute( "title", this.title );
		portletAdditionalActions.id = this.id + "_additionalActions";

		var portletAdditionalActionsWidth = 0;
		views=this.defaultParams["views"];
		var viewElement;
		this.viewElements={};
		for(var view in views ){
			viewElement=createElementVsClassName("DIV", "additionalaction");
			viewElement.mode=this.defaultParams["views"][view];
			viewElement.innerHTML = "<img src=\""+ eval('PortletLoader.'+view+'_IMG_URL') +"\" title='"+eval('Framework.Lang.views_'+view)+"'/>";
			portletAdditionalActions.appendChild( viewElement );
			portletAdditionalActionsWidth += 22;
			if (view == "more") portletAdditionalActionsWidth += 12;
			YAHOO.util.Event.addListener( viewElement, "mousedown", additionalView, this.defaultParams["views"][view]);
			this.viewElements[view]=viewElement;
		}


		portletAdditionalActions.style.width = portletAdditionalActionsWidth + "px";

		var portletTitle 		=  createElementVsClassName("DIV", "title");
		portletTitle.setAttribute( "title", this.title );
		portletTitle.id = this.id + "_title";
		portletTitle.appendChild( document.createTextNode(this.title) );


		portletHeader.appendChild( showHideDiv );
		portletHeader.appendChild( iconDiv );
		portletHeader.appendChild( portletTitle );
		portletHeader.appendChild( moduleactionsDiv );
		portletHeader.appendChild( portletAdditionalActions );

		var innerHTML = "";
		innerHTML += "<table class='portletTable' id='"+ this.id +"_table'>";
		innerHTML += "	<tr><td id=\""+ this.id+"_content\"  valign='top'>";
		innerHTML += "		<div style='text-align:center'><img src=\"images/loader.gif\" /></div>";
		innerHTML += "	</td></tr>";
		innerHTML += "</table>";
		portletContent.innerHTML = innerHTML;

		portletFrame.appendChild( portletHeader  );
		portletFrame.appendChild( portletEdit  	 );
		portletFrame.appendChild( portletContent );

		portlet.appendChild( portletFrame );

		var columnId = this.tabNumber + "_" + PortletLoader.FASSET_COL_PREFIX + "" + this.colNumber;

		var column = $(columnId);
		if( column == null ) return;
		if(this.params["before"]) {
			column.insertBefore(portlet,column.firstChild);
		}
		else{
		column.appendChild(portlet);

		}

		this.isLoaded = false;

		portletHeader.onmouseover = function(){
			try{
			if( !OPTIONS.showHeaderIcons){
				self.showHeaderIcons();
			}
			}catch(ex){}
		}

		portletHeader.onmouseout = function()
		{
			try{
			if(!OPTIONS.showHeaderIcons && Layouter.getActiveTab().mode != "max")
			{
				self.hideHeaderIcons();
			}
			}catch(ex){}
		}

		this.hideHeaderIcons = function(){
			if(portletAdditionalActionsWidth > 0)
			try{this.resizeTitle(false);}catch(e){};
			showHideDiv.style.display = "none";
			iconDiv.style.display = "block";
			//moduleactionsDiv.style.display = "none";
			portletAdditionalActions.style.display = "none";
		}
		this.showHeaderIcons = function(){
			if(portletAdditionalActionsWidth > 0)
			try{this.resizeTitle();}catch(e){};
			if(Layouter.getActiveTab().mode == "max"){
				showHideDiv.style.display = "none";
				iconDiv.style.display = "block";
			}
			else
			{
				iconDiv.style.display = "none";
				showHideDiv.style.display = "block";
			}
			portletAdditionalActions.style.display = "block";
			moduleactionsDiv.style.display = "block";
			
		}
		this.resizeTitle = function(bool){
		if(self.obj && self.object){
				self.obj.elm_title.innerHTML = "";
				self.obj.elm_title.style.width = "";
			var w = getObjectWidth(self.obj.elm_title.parentNode)-60-16;
				if(bool == undefined || bool == true){
					w -= portletAdditionalActionsWidth;
				}
				if(w<= 15)
				w=15;
			var a = document.createElement("div");
			a.className = "floatleft";
			a.style.overflow = "hidden";
			self.obj.elm_title.appendChild(a);

			var spm = document.createElement("div");
			spm.className = "floatleft";
			self.obj.elm_title.appendChild(spm);

			try{

			a.innerHTML = self.object.getTitle();
			}catch(e){
				a.innerHTML = self.defaultModuleObj.title;
			}

			var e = getObjectWidth(a);
			if(e > w){
			self.obj.elm_title.style.width = w+"px";
			a.style.width = (w-15)+"px";
			spm.innerHTML = "...";
			}
			}
	 	}

		this.setShowHideImg = function(path){
			var img = showHideDiv.firstChild;
			img.src = path + img.src.substring(img.src.indexOf("images"), img.src.length);
		}

		var portletResizeHandler = function(event, width, height){
			var h = event.el.dom.offsetHeight;
			var frm = event.el.dom;

			var id = frm.parentNode.id;
			if(frm.childNodes[1].offsetHeight)
				h = h - frm.childNodes[1].offsetHeight;
				h-=25;
				if(typeof h!='undefined' && h!=null && h>0)
					frm.childNodes[2].style.height=parseInt(h)+ 'px';
				portletFrame.style.height = "auto";
				portletFrame.style.left = "0px";
				portletFrame.style.top  = "0px";

			if(Browser.isIE) 
				Layouter.tuneModulesIssueForIE(portletFrame.getAttribute("tabNumber"));
			try{
					if( self.params[ "height" ] == height ) return;

				PortletLoader.saveUserData( "moduleResize", null, null, { "id": id, "height": height} );
				self.params[ "height" ] = height;
				self.object.resizeHandler(event, "100%", height,false,true);
				self.portlet_FRAME.style.width = "100%";
			}catch(ex){}

		}


		var resizer = new Ext.Resizable(this.id+'_frame',
			{
				pinned:true,
				handles: 's',
				minHeight: 90
			});
		resizer.on('resize', portletResizeHandler);


		var height = (TABS_CONFIG[this.tabNumber].moduleHeight)?TABS_CONFIG[this.tabNumber].moduleHeight:this.height;


		self.resizer = resizer;
		self.obj_ = column;

		self.portlet_DOMOBJ 	   = portlet;
		self.portlet_FRAME 		   = portletFrame;
		self.portlet_HEADER		   = portletFrame.firstChild;
		self.portlet_SH_DOMOBJ	   = portletFrame.firstChild.childNodes[0];
		self.portlet_C_DOMOBJ	   = portletFrame.lastChild.previousSibling;
		self.portlet_E_DOMOBJ	   = portletFrame.childNodes[1];
		self.portlet_INNER_DOMOBJ  = portletFrame.lastChild.firstChild;

		resizer.resizeTo(portletFrame.style.width, height );
		YAHOO.util.Event.addListener( showHideDiv, "mousedown", collapseExpand);
		YAHOO.util.Event.addListener( editDiv    , "mousedown", editCollapseExpand);
		YAHOO.util.Event.addListener( maximizeDiv, "mousedown", maximizeRestoreFromOutside);
		//maximizeDiv.mousedown = maximizeRestoreFromOutside;
		mode="min";
		YAHOO.util.Event.addListener( closeDiv   , "mousedown", closePortlet);




		Drag.init(portletHeader, portlet);


		portlet.onDragStart = function(x,y,mousex, mousey)
		{
		   var place = findPosXY( this );
	       var ua = navigator.userAgent.toLowerCase();
		   if(this.tabNumber === undefined)
		   this.tabNumber = PortletLoader.getPortlet(this.id+"").tabNumber;

			YAHOO.util.Event.addListener( document.body, "selectstart", disableSelecting);

			PortletLoader.GHOST.style.height = (this.offsetHeight -2)+"px";
			PortletLoader.GHOST.style.width  = "auto";


			var left = 0,
			    top  = 0;
			if (isIE) {
			 top  = place.top - 62;
			 left = place.left - 5;
			} else {
			 top  = place.top - 60;
			 left = place.left - 5;
			}
			if ($("hideTabsImg").checked){
				top+=29;
				left+=5;
			}

			var width = this.offsetWidth ;


			this.style.width = (width -2 )+"px";
			this.style.left  = (left) +"px";
			this.style.top   = (top)  +"px";
			this.style.position = "absolute";



			var container = $(this.id + "_container");
			var frame = $(this.id + "_frame");
			frame.style.height = (frame.offsetHeight -2 ) + "px";
			container.style.display = "none";



			this.parentNode.insertBefore(PortletLoader.GHOST, this);
			this.isDragging = true;
			PortletLoader.GHOST.columnOBJ = this.parentNode;



			var config = Controller.getTabConfig();
			var colCount = config.colCount;

			for( var i=0; i<colCount; i++ )
				this[ "col"+(i+1)+"X" ] = findPosX( $(this.tabNumber + "_" + PortletLoader.FASSET_COL_PREFIX+""+(i+1)) ) + 10;

			var place = findPosXY( this );
			Layouter.activateTabs();
		}
		portlet.onDrag = function(x,y, mousex, mousey) {

			var newtabNumber = Layouter.getActiveTabId();
			if(this.tabNumber != newtabNumber)
			{
				this.tabNumber = newtabNumber;
				var columnId = newtabNumber + "_" + PortletLoader.FASSET_COL_PREFIX + "1";
				var column = $(columnId);
				if( column == null )return;
				column.appendChild(portlet);
				PortletLoader.GHOST.style.width = "100%";
				column.appendChild(PortletLoader.GHOST);
				PortletLoader.GHOST.columnOBJ = column;
				var config = Controller.getTabConfig();
				var colCount = config.colCount;
				for( var i=0; i<colCount; i++ )
					this[ "col"+(i+1)+"X" ] = findPosX( $(this.tabNumber + "_" + PortletLoader.FASSET_COL_PREFIX+""+(i+1)) ) + 10;


			}
			var col;


	try
	{
			col=$(this.tabNumber + "_" + PortletLoader.FASSET_COL_PREFIX+"1");

			var config = Controller.getTabConfig();
			var colCount = config.colCount;

			for( var i=0; i<colCount; i++ )
				if ((x+this.offsetWidth/2)>=this[ "col"+(i+1)+"X"])
					col=$(this.tabNumber + "_" + PortletLoader.FASSET_COL_PREFIX+""+(i+1));



			if (PortletLoader.GHOST.columnOBJ!=col)
			{
				var par = PortletLoader.GHOST.parentNode;
				par.removeChild(PortletLoader.GHOST);
				PortletLoader.GHOST.columnOBJ = col;
				col.appendChild(PortletLoader.GHOST);
						try{
							PortletLoader.GHOST.style.width = (col.offsetWidth - 15)+"px";
						}catch(ex){
				PortletLoader.GHOST.style.width = "98%";
						}
			}
			var elems = [];

			var ln = col.childNodes.length;
			for (var z=0; z<ln; z++) {
				if (!col.childNodes[z].isDragging)  {
					elems.push(col.childNodes[z]);
				}
			}

			var myPos;
			for (var z=0; z<elems.length; z++) {
				if (elems[z]==PortletLoader.GHOST) myPos = z;
			}

			if (myPos!=0 && y<=findPosY(elems[myPos-1]))
			{
				var par = PortletLoader.GHOST.parentNode;
				par.removeChild(PortletLoader.GHOST);
				col.insertBefore(PortletLoader.GHOST, elems[myPos-1]);
			}
			if (myPos!=(elems.length-1) && y>=findPosY(elems[myPos+1]))
			{
				if (elems[myPos+2])
				{
					col.insertBefore(PortletLoader.GHOST, elems[myPos+2]);
				}
				else
				{
					col.appendChild(PortletLoader.GHOST);
				}
			}




			}catch(ex){ }

			portlet.style.width = PortletLoader.GHOST.offsetWidth + "px";
			$(portlet.id + "_frame" ).style.width = "100%";
		}
		portlet.onDragEnd = function(x,y,el) {
			try
			{
				var portlet = PortletLoader.getPortlet( this.id );

				Layouter.disactivateTabs();
				portlet.obj_.container = PortletLoader.GHOST.columnOBJ.getAttribute("colNum");
				var col = PortletLoader.GHOST.columnOBJ;
				this.isDragging = false;
				var c = PortletLoader.GHOST.nextSibling;
				col.removeChild(PortletLoader.GHOST);

				if (col.lastChild != PortletLoader.GHOST)
				{
					col.insertBefore(this, c);
				}
				else
				{
					col.appendChild(this);
				}

				portlet.portlet_DOMOBJ.style.position = "static";
				portlet.portlet_DOMOBJ.style.left = "";
				portlet.portlet_DOMOBJ.style.top = "";
				portlet.portlet_DOMOBJ.style.width    = "auto";
				if(Browser.isIE) 
					Layouter.tuneModulesIssueForIE(portletFrame.getAttribute("tabNumber"));
				if(Browser.isIE){
					var timer = new Timer( self );
					timer.setTimeout( 'completeDragEnd', 30, portlet );
				}else self.completeDragEnd(portlet);

			}catch(ex){}
	
		}
	}
	this.completeDragEnd = function(portlet){
			 try{
				if(portlet.isMinimized != true){
					portlet.portlet_C_DOMOBJ.style.display = "block";
					var frame = $(portlet.id + "_frame");
					frame.style.height = "auto";
				}
				try{
					portlet.object.onDragEnd();
				}catch(ex){
					portlet.object.onPageResize();
				}
			}catch(ex){}
			var newtabNumber = Layouter.getActiveTabId();
			this.params["tabNumber"] = parseInt(newtabNumber);
			this.tabNumber = parseInt(newtabNumber);	
			YAHOO.util.Event.removeListener( document.body, "selectstart", disableSelecting);
			PortletLoader.saveUserData('order', self);
			if (!OPTIONS.showHeaderIcons) self.hideHeaderIcons();
	}

	this.disableView=function(view){
		try{
			self.viewElements[view].style.display="none";
		}
		catch(ex){
			;
		}
	}
	this.enableView=function(view){
		try{
			self.viewElements[view].style.display="block";
		}
		catch(ex){
			;
		}
	}
	this.close = function()
	{

		PortletLoader.saveUserData("close", this, this.completeClose, null);
	}
	this.completeClose = function(args, respArgs){
		if(respArgs.result == true){
		self.portlet_DOMOBJ.parentNode.removeChild( self.portlet_DOMOBJ );
		try{
			var portlet = PortletLoader.getPortlet(self.params["id"]);
			portlet.object.destroy();
		}
		catch(ex){
			;
		}
		self = null;
		delete self;
		}
	}


	this.checkConfig = function(){

		if( this.obj["elm_moduleContent"] == null ||
			this.obj["elm_title"] == null ||
			this.obj["elm_editContent"] == null
		  )
		 {
		 }
	}
	this.load = function( reload )
	{
		var portlet = $(self.id+"");
		if( portlet == null  )return;

		var edit    = $( self.params["id"]+"_edit" );
		var content = $( self.params["id"]+"_content" );

		var portlet = PortletLoader.getPortlet(self.params["id"]);
		if( portlet == null )return;
		if( Framework.Modules[ portlet.params["moduleName"] ] == null  )return;

		if( portlet.isLoaded && !reload )return;
		else	portlet.isLoaded = true;

		var config = new Array();

		config["dataObj"] = clone(this.defaultModuleObj["defaultObj"],true);
		config["elm_moduleContent"] = $(this.id + "_container");
		config["elm_title"] = $(this.id + "_title");
		config["elm_editContent"] = $(this.id + "_edit");

		config["dataObj"]["data"]["id"]= this.dataId;
		config["onLoadModule"] = PortletLoader.onLoadModule;
		config["currentView"] =  this.view;
		config["resizeTitle"] = this.resizeTitle;
		config["params"]=this.params;
		config["enableView"]=this.enableView;
		config["disableView"]=this.disableView;
		config["editCollapseExpand"] = editCollapseExpand;
		config["editCollapse"] = editCollapse;
		config["editExpand"] = editExpand;
		this.obj = config;

		this.checkConfig();

		portlet.object = new Framework.Modules[ portlet.params["moduleName"] ]( self.obj );

		portlet.portlet_DOMOBJ.style.width    = "auto";
		portlet.portlet_DOMOBJ.style.height = "auto";


		if(self.collapsed)
			self.hide();

		var id = self.params["id"] + "";

		if( PortletLoader.NORMALIZE_HEIGHTS )
		{
			setIsMax( id, $(id).offsetHeight);
			setXSizes();
		}
		if( parseBool(self.params["evalScripts"])  )
		{
			evalScripts( req.responseText );
		}
	}

	this.show = function() {

		if(self == null || !self.isMinimized)return;
		self.portlet_C_DOMOBJ.style.display = 'block';
		self.portlet_DOMOBJ.height = $(self.params["id"]+"_header").offsetHeight + $(self.params["id"]+"_container").offsetHeight + 7*2+ "px";
		self.portlet_FRAME.style.height = "auto";
		self.portlet_C_DOMOBJ.nextSibling.style.display = 'block';
		self.portlet_SH_DOMOBJ.firstChild.setAttribute("src", PortletLoader.SHOW_IMG_URL);
		self.isMinimized = false;

		var portlet = PortletLoader.getPortlet( self.params["id"] );

		try{
			self.object.onPageResize();
		}catch(ex){}
		if( PortletLoader.NORMALIZE_HEIGHTS )
		{
			setXSizes();
			downsize();
		}
		
		PortletLoader.saveUserData( "collapsed", null, null, { "id": self.params["id"], "collapsed": false} );
	}
	this.hide = function(obj) {
		if( self == null || self.isMinimized || self.portlet_DOMOBJ == null )return;
		self.portlet_DOMOBJ.height = $(self.params["id"]+"_header").offsetHeight + "px";
		self.portlet_C_DOMOBJ.style.display = 'none';
		self.portlet_FRAME.style.height = $(self.params["id"]+"_header").offsetHeight + "px";
		self.portlet_C_DOMOBJ.nextSibling.style.display = 'none';
		self.portlet_DOMOBJ.setAttribute( "height__", self.portlet_C_DOMOBJ.offsetHeight );
		self.portlet_SH_DOMOBJ.firstChild.setAttribute("src", PortletLoader.HIDE_IMG_URL);
		self.isMinimized = true;

		PortletLoader.saveUserData( "collapsed", null, null, { "id": self.params["id"], "collapsed": true} );
	}

	this.showEdit = function() {
		self.portlet_E_DOMOBJ.style.display = 'block';
		self.portlet_DOMOBJ.height = $(self.params["id"]+"_header").offsetHeight + $(self.params["id"]+"_container").offsetHeight + 7*2+ "px";

		if( PortletLoader.NORMALIZE_HEIGHTS )
		{
			setXSizes();
			downsize();
		}
		try
		{
			PortletLoader.getPortlet(self.id).object.edit();
		}catch(ex){}
	}
	this.hideEdit = function(obj) {
		self.portlet_DOMOBJ.height = $(self.params["id"]+"_header").offsetHeight + "px";
		self.portlet_E_DOMOBJ.style.display = 'none';
		self.portlet_DOMOBJ.setAttribute( "height__", self.portlet_E_DOMOBJ.offsetHeight );
		try
		{
			PortletLoader.getPortlet(self.id).object.closeEdit();
		}catch(ex){}
	}



	this.attachContent = function()
	{
		if( self == null ||  self.params["moduleName"] == null )return;

	  	if ( Framework.Modules[ self.params["moduleName"] ] )
		{
		   this.load();
  		}
		else
		{
		    var oHead = document.getElementsByTagName("head")[0];
	    	var oScript = null;
	    	var paths = Framework.Modules[ self.params["moduleName"] +"Widget"].path;
	    	for (var i=0; i<paths.length; i++){
	   			oScript = document.createElement('script');
	   			oScript.setAttribute('src', paths[i] );
	  			oScript.setAttribute('type', 'text/javascript');
				if(i==0)
		        if (Browser.isFirefox)
				{
		    		oScript.onload = function()
					{
						self.load();
		    		}
		   		}
				else
				{
		    		waitForExistence();
		   		}
		   		oHead.appendChild(oScript);
	   		}
	    }

 	}

	function additionalView( event )
	{
		event.cancelBubble = true;
		var obj = event.target || event.srcElement;

		var viewType = obj.mode;
		if( viewType  == undefined ){
			viewType = obj.parentNode.mode;
			obj = obj.parentNode;
		}

		try
		{
			PortletLoader.getPortlet(self.id).object[viewType](obj);
			PortletLoader.getPortlet(self.id).object["saveView"](obj);
		}catch(ex){
		}
	}

	function maximizeRestoreFromOutside (_event){
		var event = _event || window.event;		
		var activeTab=Layouter.getActiveTab();
		event.cancelBubble = true;
		var module = PortletLoader.getPortlet(self.params["id"]).object;
		var continueMaximize;
		if(typeof activeTab.mode=='undefined' || activeTab.mode == "min" ){
			try{
				continueMaximize=module.beforeMaximize();
				if(!continueMaximize);
					return;
			}
			catch(ex){
				;
			}
			var obj = $("maximize_" + self.id);
			if(Utils.exist(obj)){
				var imgArray = obj.getElementsByTagName("img");
				for(var i=0; i<imgArray.length; i++){
					imgArray[i].src = PortletLoader.RESTORE_IMG_URL;
					imgArray[i].title = "Restore"; 
				}
			}			

			activeTab.prev={};
			activeTab.prev.width=self.portlet_DOMOBJ.style.width;
			activeTab.prev.height=self.portlet_C_DOMOBJ.style.height;
			activeTab.prev.left=self.portlet_C_DOMOBJ.style.left;
			activeTab.prev.top=self.portlet_C_DOMOBJ.style.top;
			activeTab.prev.frameWidth=self.portlet_FRAME.style.width;
			if(Browser.isIE6){
			var parentTD = self.portlet_DOMOBJ.parentNode;
			activeTab.prev.parentTDWidth = parentTD.style.width;


			parentTD.parentNode.parentNode.parentNode.style.height = "93%";
			var el = parentTD.previousSibling;
			while(el != null){
				if(el.tagName != "TD") {
				el = el.previousSibling;
				continue;
				}
				el.style.width="0%";
				el = el.previousSibling;
			}
			parentTD.style.width = "100%";
			parentTD.style.height = "100%";
			}
			self.portlet_DOMOBJ.style.position="absolute";
			self.portlet_DOMOBJ.style.width="98.3%";
   			self.portlet_DOMOBJ.style.height="98%";
			self.portlet_DOMOBJ.style.left="0px";
			self.portlet_DOMOBJ.style.top="0px";
			self.portlet_FRAME.style.height="100%";
			self.portlet_FRAME.style.width="100%";
			self.portlet_C_DOMOBJ.style.height=self.portlet_FRAME.offsetHeight - 20 + "px";
			self.portlet_DOMOBJ.draggable=false;
			self.resizer.enabled=false;

			activeTab.el.dom.scrollTop = 0;

			try{
			module.maximize();



			}
			catch(ex){
				;
			}
			activeTab.mode="max";
			self.mode = "max";
			self.showHeaderIcons();
		}
		else{
			var obj = $("maximize_" + self.id);
			if(Utils.exist(obj)){
				var imgArray = obj.getElementsByTagName("img");
				for(var i=0; i<imgArray.length; i++){
					imgArray[i].src = PortletLoader.MAXIMIZE_IMG_URL;
					imgArray[i].title = "Maximize";
				}
			}			
			if(Browser.isIE6){
			var parentTD = self.portlet_DOMOBJ.parentNode;
			parentTD.parentNode.parentNode.parentNode.style.height = "auto";
			parentTD.style.width = activeTab.prev.parentTDWidth;
			parentTD.style.height = "auto";
			var el = parentTD.previousSibling;
			while(el != null){
				if(el.tagName != "TD") {
				el = el.previousSibling;
				continue;
				}
				el.style.width=activeTab.prev.parentTDWidth;
				el = el.previousSibling;
			}
			}
			self.portlet_DOMOBJ.style.position="static";
			self.portlet_DOMOBJ.style.height="auto";
			self.portlet_DOMOBJ.style.width=activeTab.prev.width;
			self.portlet_FRAME.style.width=activeTab.prev.frameWidth;
			self.portlet_C_DOMOBJ.style.height=activeTab.prev.height;
			self.portlet_DOMOBJ.style.top=activeTab.prev.top;
			self.portlet_DOMOBJ.style.left=activeTab.prev.left;
			self.portlet_DOMOBJ.draggable=true;
			self.resizer.enabled=true;
			activeTab.mode = "min";
			self.mode = "min";

			try{
				module.minimize();
			}catch(ex){}
//			var timer = new Timer( self );
//			timer.setTimeout( 'minimizeModule', 0, module );

			if(!OPTIONS.showHeaderIcons){
				self.hideHeaderIcons();
			}

		}
		
	}
	function maximizeRestore( event) {
		var activeTab=Layouter.getActiveTab();
		event.cancelBubble = true;
		var module = PortletLoader.getPortlet(self.params["id"]).object;
		var continueMaximize;
		if(typeof activeTab.mode=='undefined' || activeTab.mode == "min" ){
			try{
				continueMaximize=module.beforeMaximize();
				if(!continueMaximize);
					return;
			}
			catch(ex){
				;
			}

			var obj = event.target || event.srcElement;
			obj.src=PortletLoader.RESTORE_IMG_URL;
			obj.title = "Restore";
			activeTab.prev={};
			activeTab.prev.width=self.portlet_DOMOBJ.style.width;
			activeTab.prev.height=self.portlet_C_DOMOBJ.style.height;
			activeTab.prev.left=self.portlet_C_DOMOBJ.style.left;
			activeTab.prev.top=self.portlet_C_DOMOBJ.style.top;
			activeTab.prev.frameWidth=self.portlet_FRAME.style.width;
			if(Browser.isIE6){
			var parentTD = self.portlet_DOMOBJ.parentNode;
			activeTab.prev.parentTDWidth = parentTD.style.width;


			parentTD.parentNode.parentNode.parentNode.style.height = "93%";
			var el = parentTD.previousSibling;
			while(el != null){
				if(el.tagName != "TD") {
				el = el.previousSibling;
				continue;
				}
				el.style.width="0%";
				el = el.previousSibling;
			}
			parentTD.style.width = "100%";
			parentTD.style.height = "100%";
			}
			self.portlet_DOMOBJ.style.position="absolute";
			self.portlet_DOMOBJ.style.width="100%";
			self.portlet_DOMOBJ.style.height="100%";
			self.portlet_DOMOBJ.style.left="0px";
			self.portlet_DOMOBJ.style.top="0px";
			self.portlet_FRAME.style.height="100%";
			self.portlet_FRAME.style.width="100%";
			self.portlet_C_DOMOBJ.style.height=self.portlet_FRAME.offsetHeight - 20 + "px";
			self.portlet_DOMOBJ.draggable=false;
			self.resizer.enabled=false;

			activeTab.el.dom.scrollTop = 0;

			try{
			module.maximize();



			}
			catch(ex){
				;
			}
			activeTab.mode="max";
			self.mode = "max";
			self.showHeaderIcons();
		}
		else{
			var obj = event.target || event.srcElement;
			obj.src=PortletLoader.MAXIMIZE_IMG_URL;
			obj.title = "Maximize";
			if(Browser.isIE6){
			var parentTD = self.portlet_DOMOBJ.parentNode;
			parentTD.parentNode.parentNode.parentNode.style.height = "auto";
			parentTD.style.width = activeTab.prev.parentTDWidth;
			parentTD.style.height = "auto";
			var el = parentTD.previousSibling;
			while(el != null){
				if(el.tagName != "TD") {
				el = el.previousSibling;
				continue;
				}
				el.style.width=activeTab.prev.parentTDWidth;
				el = el.previousSibling;
			}
			}
			self.portlet_DOMOBJ.style.position="static";
			self.portlet_DOMOBJ.style.height="auto";
			self.portlet_DOMOBJ.style.width=activeTab.prev.width;
			self.portlet_FRAME.style.width=activeTab.prev.frameWidth;
			self.portlet_C_DOMOBJ.style.height=activeTab.prev.height;
			self.portlet_DOMOBJ.style.top=activeTab.prev.top;
			self.portlet_DOMOBJ.style.left=activeTab.prev.left;
			self.portlet_DOMOBJ.draggable=true;
			self.resizer.enabled=true;
			activeTab.mode = "min";
			self.mode = "min";

			try{
				module.minimize();
			}catch(ex){}
//			var timer = new Timer( self );
//			timer.setTimeout( 'minimizeModule', 0, module );

			if(!OPTIONS.showHeaderIcons){
				self.hideHeaderIcons();
			}

		}
	}


	this.minimizeModule = function(module)
	{
		try{
			module.minimize();
		}
		catch(ex){}
	};

 	function waitForExistence()
	{
			if( self.params == null )return;

   			if( Framework.Modules[ self.params["moduleName"] ])
			{
			   self.load();
   			}
			else
			{
    		   setTimeout(waitForExistence,0.5);
   			}
  	}
	function collapseExpand( event )
	{
		if(Layouter.getActiveTab().mode != "max")
		showHide( event );

	}
	function editCollapseExpand( event )
	{
		showHide( event, "edit" );
		if(Browser.isIE)
			self.resizer.resizeTo(self.portlet_FRAME.style.width,self.portlet_FRAME.offsetHeight);
		var editHeight = self.portlet_E_DOMOBJ.offsetHeight;
		self.resizer.minHeight = 90+editHeight;
	}
	
	function editCollapse( event )
	{
		self.showEdit();
		if(Browser.isIE)
			self.resizer.resizeTo(self.portlet_FRAME.style.width,self.portlet_FRAME.offsetHeight);
		var editHeight = self.portlet_E_DOMOBJ.offsetHeight;
		self.resizer.minHeight = 90+editHeight;
	}
	function editExpand( event )
	{
		self.hideEdit();
		if(Browser.isIE)
			self.resizer.resizeTo(self.portlet_FRAME.style.width,self.portlet_FRAME.offsetHeight);
		var editHeight = self.portlet_E_DOMOBJ.offsetHeight;
		self.resizer.minHeight = 90+editHeight;
	}

	function showHide( event, mode )
	{
		if (event) event.cancelBubble = true;
		var obj = ( mode == "edit")? self.portlet_E_DOMOBJ : self.portlet_C_DOMOBJ;
		if( mode == "edit" )
		{
			if(  obj.style.display == "" || obj.style.display == "none" )
				self.showEdit();
			else
				self.hideEdit();
		}
		else
		{
			if( obj.style.display == "" || obj.style.display == "block" )
				self.hide();
			else
				self.show();
		}

	}

	function closePortlet( event )
	{
		try
		{
			PortletLoader.getPortlet(self.id).object.close();
		}catch(ex){}

		event.cancelBubble = true;
		if( self.confirmOnClose )
			 if(confirm("Close this portlet ?"))
			 	self.close()
			 else
			 	return;
		else
			self.close();
	}
}
