Divo.app.PortalState = function() {
	// -------------------- private properties ------------------
	var sm = Ext.state.Manager;
	var stateId = "app-portal-demo-v-p";
	var portal;

	// -------------------- private method  ------------------
	function saveState() {
		var portletInfos = [];
		var portlets = [];
		var colsposs = [];
		var colNum = portal.items.length;
		var rowIndex = 0;
		while (true) {
			var bFound = false;
			for (var i = 0;i < colNum; i++) {
				var p = portal.items.itemAt(i).items.itemAt(rowIndex);
				if (p && p.pInfo && p.pInfo.id) {
					portletInfos.push(p.pInfo);
					portlets.push(p);
					colsposs.push(i);
					bFound = true;
				}
			}
			if (!bFound) {
				break;
			}
			rowIndex++;
		}

		if (portletInfos.length > 0)
		    sm.set(stateId, portletInfos);
		
		// save height of portlet
		for (var i = 0;i < portlets.length; i++) {
			if (portlets[i].lastSize) {
				var h = portlets[i].lastSize.height;
				var sid = stateId + '-h-' + portletInfos[i].id;
				if (h)
				   sm.set(sid, h);
			}
			var colaps = portlets[i].collapsed ;
			var colpossvar = colsposs[i];
			var colapsid = stateId + '-colapse-' + portletInfos[i].id;
			var colpossid = stateId + '-colsposs-' + portletInfos[i].id;
			sm.set(colapsid, colaps);
			sm.set(colpossid, colpossvar);



		}
	}

	// -------------------- public method ------------------
	return {
		init : function(portalId) {
			portal = Ext.ComponentMgr.get(portalId)
		},
		save : function() {
			saveState();
		},
		getVisiblePortlets : function() {
			return sm.get(stateId);
		},
		getHeight : function(portletId) {
			return sm.get(stateId + '-h-' + portletId);
		},
		getColapse : function(portletId) {
			return sm.get(stateId + '-colapse-' + portletId);
		},
		getColposs : function(portletId) {
			return sm.get(stateId + '-colsposs-' + portletId);
		}

	};
}
// EOP

