function calPortlet(){
	
	var myRecord = Ext.data.Record.create([
									{name:"rid", type:'int'},
									{name:"start", type:'date'},
									{name:"end", type:'string'},
									{name:"title", type:'string'},
									{name:"desc", type:'string'},
									{name:"sdate", type:'string'},
									{name:"days", type:'string'},
									]); 
									
	var myReader = new Ext.data.JsonReader({
	 root:'events',
	 totalProperty:'total'
	},myRecord);
	
	var myDataStore = new Ext.data.GroupingStore({
	 proxy:new Ext.data.HttpProxy({url:'inc/functions/factory.php'}),
	 baseParams:{action:"calevents"},
	 reader:myReader,
	 sortInfo:{field:'start',direction:'DESC'},
	 remoteGroup: true,
	 remoteSort:true,
	 groupField:'sdate' 

	});
	myDataStore.load();
 

	var egrid = new Ext.grid.GridPanel({
		height: 230,
		 hideHeaders: true,
		columnWidth: 0.55,
        store : myDataStore,
		autoExpandColumn: 'title',
        cm: new Ext.grid.ColumnModel([
            {id:'startdate',header: "Date", width: 50, sortable: false, dataIndex: 'days'},
      		{id:'title',header: "Title", width: 150, sortable: false, dataIndex: 'title'},
			{id:'sdate',header: "SD", width: 20, hidden:true, dataIndex: 'sdate'}
        ]),
		sm: new Ext.grid.RowSelectionModel({ singleSelect: true }),

        view: new Ext.grid.GroupingView({
			startCollapsed: true,
            forceFit:true,
			scrollOffset : 2,
			showGroupName: false,
            groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'
        }),

        frame:true,
        collapsible: true,
        animCollapse: false,

		listeners: 	{'rowclick' : function(grid, rowIndex, eventObj) {
				var rec = myDataStore.getAt(rowIndex);
			 	 Ext.getCmp('caldesc').body.update(rec.data.desc);
			
				calItemStore.load({params:{action:'caldocs',p:rec.data.rid }});
		    }
		}
		 
		
		
	});
	
	var edocgrid ='';
	
	
	var calItemStore = new Ext.data.JsonStore({
	    url: 'inc/functions/factory.php',
	    root: 'items',
		totalProperty: 'totalCount',
	    fields: [ 'rid', 'hash', 'title', 'desc', 'doctype', 'url']
	});
	
	function rowIcon(val, metaDat, record){

		if (val =='link') {
			ic = 'page_go.png';
		}else{
			ic = val + ".gif";
		};
		return "<img ext:qtitle='Description' ext:qtip='"+ record.data.desc+"' src='img/icons/" + ic +"' width='16' height='16'>";
	}
	
	var calItemGrid = new Ext.grid.GridPanel({
		height: 135,
		enableHdMenu : false,
        store : calItemStore,
		autoExpandColumn: 'title',
        columns:[
				{id:'dicn',  width: 20, sortable: false, dataIndex: 'doctype', renderer: rowIcon },
             	{id:'title',  width: 200, sortable: false, dataIndex: 'title' } 
        ],
		sm: new Ext.grid.RowSelectionModel({ singleSelect: true }),
  
        frame:true,
 		viewConfig: {forceFit:true, scrollOffset : 2},

		listeners: 	{'rowclick' : function(grid, rowIndex, eventObj) {
		 
				var rec = calItemStore.getAt(rowIndex);
			 	if (rec.data.hash) {
					window.location = "http://motorola.mychannelportal.com/downlink.php?id="+ rec.data.hash;
				}else if(rec.data.url ){
					window.open (rec.data.url );
				}else{
					
				};
			 
		    }
		}
		 
		
		
	});
	
 	 
 
 

	var pConfig = {
		id: 'calportlet',
		tools: [{id:'left',handler:hidePortlet}],
		title: 'Upcoming Events',
		height:260,
		stateful : false,
		isOpen: false,
		layout: 'column',
	 	items: [
				egrid  
				,{
					xtype: 'panel',
					columnWidth: 0.45,
					frame:true,
				 
					items:[
						{
							xtype: 'panel',
							id :'caldesc',
							bodyStyle : "padding:4px;background-color:#ffffee",
						 	height:90,
							html : 'Click an event date to see more information',
							frame:true
						}, 
						calItemGrid
					
					
					]
					
				}
 			] 
}; // end pconfig
	
	var sconfig = {
		id: 'calportletrep',
		title: 'Upcoming Events',
		collapsed:true,
		repID : 'calportlet',
		tools: [{id:'right',handler:showPortlet}],
		hidden:true
	};
	var stb = Ext.getCmp('stable');
	spanel = Ext.ComponentMgr.create(sconfig, 'panel');
	stb.add(spanel);
	stb.doLayout();


	var tp = Ext.ComponentMgr.create(pConfig, 'portlet');

	return tp;
 }