// E2cs alpha  0.0.11
// Extjs-Event-Calendar Solution 
// weekview.js
// Author: Carlos Mendez
// Contact: cmendez21@gmail.com   (gmail and gtalk) 

// week view LOG-------------------------------------------------------
// 11-dic-208
//	Changed some issues on Menus for BODY element, added ShowMenuItems:[1,1,1,1,1,1,1,1] so you can allow which menu item appear 
//  Changed some issues on Menus for Each task/Event element, added task_ShowMenuItems:[1,1,1,1,1] so you can allow which menu item appear 
//	BUG - Fixed for Check if other views are still present or not=null and adjust the menu Items for changing view
//	BUG - Fixed when displaying allday task (google style) 
//	Dynamic field modification on Code  very nice this one :) 
//  Added integration to Scheduler view  :)

//	27-Sep-2008
//		Plain style for week view is fully functional now 
// 		fixed some issue with event render on plain style 
//  	Changed style on Week (main) Header 
//		Changed Style on Hour / minute display 
// 		Added headerDayClick property to handle click for change to day view 
//		Added dom trags to more week elements so it can be no cross  handling with other calendar instances 
//		Changed hourFormat default value changed G for H
//		Property alldayTaskTPL previosly was taken the tpl property from the calendar and was not used
//  
// 	Note : the changes on styles were made in the calendar.css file 
//  ------------------------------------------------------------------
//	08-sep-2008 
//  ------------------------------------------------------------------
//	repaired some display and render issues 
//  fix some ID conflicts when two or more calendars are  on the same page  (see //0.0.6 comment on sources) 
//  ------------------------------------------------------------------
// 	01-august-2008 
//	fix for opera event(tasks) display 
//  17-june-2008 
//	1.- first release of week view
//	------------------------------------------------------------------
//	to do 
//	handlers  for context menu on task for days and allday tasks

Ext.ECalendar.weekview = function(config){
	Ext.apply(this,config);
	this.addEvents(
		'dblClickTaskAllDay',
	    'beforeWeekChange',  // 0.0.4
		'afterWeekChange',	 // 0.0.4
		'launchEventList'    //0.0.4 
	);	
	Ext.ECalendar.weekview.superclass.constructor.call(this);
};
Ext.extend(Ext.ECalendar.weekview, Ext.util.Observable, {
	referid:'weekview', //0.0.9
	header:true, 
	headerButtons: true,
	headerFormat: 'W',
	headerShowDates: true, 
	dayformatLabel:  'D j', 
	moreMenuItems:[],
	hourFormat: 'H', 				// according to Ext.Date object    //0.0.7 - beta 0.0.2  changed G for H 
	startTime:  '7:00:00 am',		// format has to be 'H:s:i a'
	endTime:    '10:00:00 pm',		// format has to be 'H:s:i a'	
	style: 'plain',  				//style:   'plain or 'google'
	// alldatTaksMore:   
	//	'event'  will raise an event with the all data available for this 
	//	'window' will create an internal window with the list of the tasks 
	//			 when click an element on the task list will raise an event and close the window
	alldayTaksMore:'window',
	alldayTaskTPL: new Ext.XTemplate(
		'<tpl for="."><div class="ecal-show-basetasktpl-div">Event:{subject}<br>',
		'Starts:{startdate}<br>Ends:{enddate}<br>Description:<br>{description}<div><hr></tpl>'
	),
	alldayTasksMaxView:3,
	alldayTasks:[],
	weekTasks:[],
	store: null, 
	headerDayClick:'none', //'viewday' changes to day view, 'none' do nothing  // 0.0.7  beta 0.0.2 
	currentweek:1,  	   // dynamic change for rendering sets the actual value  
	//tasks settings for render 
	task_format:'n/j/y g:i a',
	task_bgcolor_base:'#E0FFA2',		
	task_showqtip: true, 
	task_width:50, 
	tasksOffset:20,  // for overlapping tasks
	taskelements:0,  // private use for gen a unique id on day tasks  // added on 0.0.4 
	ShowMenuItems:[1,1,1,1,1,1],		//0.0.11  add, go next w , go prev w , chg month , chg day, chg sched 
	task_ShowMenuItems:[1,1,1,1,1],		//0.0.11  add, delete, edit, go next w, go prev w
	task_eventLaunch:'click',			//0.0.11
	task_clsOver:'',					//0.0.11  on day view was setted up long ago but not implemented, now its implement here also 
	init: function(calendar,dateval){
		this.calx = calendar; 
		this.datetohandle = dateval; 
	},
	refreshView: function(){
		this.render(); 
	},
	render: function(){
		this.datetohandle = (this.calx.viewmonth.selectedDate != 'undefined')?new Date(this.calx.viewmonth.selectedDate):this.calx.currentdate; 
		var daterange = this.getDatesforWeek(this.datetohandle);
		var updateview = Ext.get(this.calx.body); 
		updateview.update('');	
		var updateview =  Ext.get(this.calx.body);
		var daycntbase =  '<div id="' + this.calx.id + '-main-calendar-header"></div>'; 
		    daycntbase+=  '<div id="' + this.calx.id + '-main-calendar-week-body"></div>';	
		updateview.update(daycntbase ); 
		if (this.header){ // header section starts 
			var dt = this.datetohandle; 
			var tmpheader = Ext.get(this.calx.id + '-main-calendar-header');
			var prueba2   = tmpheader; 
			var myheaderwrap  = prueba2.wrap ({ tag: 'div',	 cls: 'x-calendar-weekv-header' ,html:''}); 
			if (this.headerButtons){
				//var prevdclick = myheaderwrap.createChild({ tag: 'div',	 cls: 'x-calendar-week-previous',html:''}); 	
				//var nextdclick = myheaderwrap.createChild({	tag: 'div',	 cls: 'x-calendar-week-next'    ,html:''});
				// 0.0.10 bug fix thanks to PTG
				var prevdclick = myheaderwrap.createChild({id:this.calx.id + '-btn-pw', tag: 'div', cls: 'x-calendar-week-previous',html:''});     
				var nextdclick = myheaderwrap.createChild({id:this.calx.id + '-btn-nw', tag: 'div', cls: 'x-calendar-week-next'    ,html:''});

				prevdclick.dom['qtip']=  e2cs.cal_locale.headerTooltipsWeek.prev; //'prev week';
				prevdclick.addListener('click', function(){ this.onclickprev_week(); }  , this);
				prevdclick.addClassOnOver('x-calendar-week-previous-over');// 0.0.10 bug fix thanks to PTG

				nextdclick.dom['qtip']= e2cs.cal_locale.headerTooltipsWeek.next; //'next week'; 
				nextdclick.addListener('click', function(){ this.onclicknext_week(); }, this);
				nextdclick.addClassOnOver('x-calendar-week-next-over');// 0.0.10 bug fix thanks to PTG	
			} 
			complementtext =''; 
			if (this.headerShowDates){ 
				complementtext = ' <span class="x-calendar-weekv-header-small">' + e2cs.cal_locale.weekheaderlabel_from +' '+ daterange[0].format('m/d/Y') +' '+ e2cs.cal_locale.weekheaderlabel_to +' '+ daterange[1].format('m/d/Y') + '</span>'; 
			} 
			//var headerdx = myheaderwrap.createChild({ tag: 'div', id:'header',  html:'' +  e2cs.cal_locale.weekheaderlabel + dt.format(this.headerFormat) + complementtext  +''});
			var headerdx = myheaderwrap.createChild({ tag: 'div', id: this.calx.id + '-sub-' + 'header',  html:'' +  e2cs.cal_locale.weekheaderlabel + dt.format(this.headerFormat) + complementtext  +''});
		} 
		// check style to create the container or not 'plain or google
		var tmpdays = Ext.get(this.calx.id + '-main-calendar-week-body');
		var weeklayoutskel = tmpdays.createChild({ tag: 'div',	 id: this.calx.id + '-weekvbody', cls:'x-calendar-weekv-body',html:'' }); //0.0.6
		var daterange = this.getDatesforWeek(this.datetohandle); 		
		if (this.style=='plain'){ 
			// plain style  goes on 
			daysintro = this.genDaysHeader(daterange[0]); 
			weeklayoutskel.insertHtml('beforeEnd', daysintro,false);
		} else {  
			// google style starts 
			daysintro = this.genAlldayContainer(daterange[0]);
			weeklayoutskel.insertHtml('beforeEnd', daysintro,false); 
			// sets the container 	
			var mydaybodytmp   = Ext.get(this.calx.id + '-allday1'); 
			var myallcontainer = Ext.get(this.calx.id + '-alldaycontainer'); //0.0.6
			var myallreferh    = Ext.get('alldayrefer'); 
			myallcontainer.setXY(mydaybodytmp.getXY()); 
			myallcontainer.setHeight( mydaybodytmp.getHeight(true)  );   
			ancho = 0 ;
			for (var i=1;i<8;i++){ 
				ancho+= Ext.get(this.calx.id + '-allday' + i ).getWidth(false); 
			}
			ancho+=7; 
			myallcontainer.setWidth(ancho,false);	
			// more tasks div creation if it applies to be on the view 
			var moretaskbuttonallday = Ext.get('alldaylistbutton'); 
			var taskstmp = this.getWeekTasks(this.datetohandle,0); 
			if ( myallcontainer.dom.childNodes.length==1 && myallcontainer.dom.childNodes[0].childNodes.length==0){
				moretaskbuttonallday.setDisplayed('none'); 
			} else { 
				if (taskstmp.length>this.alldayTasksMaxView){ 
					moretaskbuttonallday.setDisplayed('block'); 
				} else { 
					moretaskbuttonallday.setDisplayed('none'); 														
				} 
			} 
			moretaskbuttonallday.addClassOnOver('alldaylistover'); 
			moretaskbuttonallday.addListener('click', function(){ this.showMoreTasksList(); } ,this); 
		} 
		// creates the week body 
		var bodyweekhtml = this.genBody(daterange[0]); 
		weeklayoutskel.insertHtml('beforeEnd', bodyweekhtml ,false); 
		// fix the grids for each day 
		for (var i=1;i<8;i++){ 
			var tmpeachdaybodygrid = Ext.get( this.calx.id +'-day' + i ); 
			tmpeachdaybodygrid.setHeight( Ext.get(this.calx.id +'-wd'+i).getHeight(true) ); //0.0.6
			var containerdaytmp = Ext.get(tmpeachdaybodygrid.dom.childNodes[0]); // 0.0.4 fix 
			containerdaytmp.setHeight(Ext.get(this.calx.id +'-wd'+i).getHeight(false) ); //0.0.6
			if (Ext.isOpera){ 
				containerdaytmp.addListener('mousedown', this.operabuttons_body,this); 
			} else { 
				containerdaytmp.addListener('contextmenu', this.oncontextmenu_bodyday, this, {
					  	stopPropagation:false,
					  	normalized :true,
					  	preventDefault:true	
				});
			}
		}	
		var bodydisp = Ext.get(this.calx.id + '-weekbodydisplay');//0.0.6		
		if (this.calx.ownerCt!=undefined){ //0.0.6 fix for ext.component containers such as tab and others and properly draw correctly
			if (this.calx.ownerCt.ctype && this.calx.ownerCt.ctype=="Ext.Component"){ 
				//this.calx.height =  this.calx.ownerCt.height;  
				this.calx.height =  this.calx.ownerCt.getInnerHeight(); //0.0.7  - beta 0.0.2  
			} 
		} 
		if (!this.calx.height || this.calx.height=='undefined'){ 
			var tmpheight = this.calx.getEl().dom.offsetParent.clientHeight; //+ this.calx.getFrameHeight() ; 
		} else{ 
			var tmpheight = this.calx.height; 
		} 		
		
		styleheaderheight =0; 
		if (this.style=='plain'){ 
			styleheaderheight = Ext.get( this.calx.id + '-allday_w_task').getHeight(true)+8; 
		} else { 
			styleheaderheight = Ext.get( this.calx.id + '-allday_w_task').getHeight(true)+8; 
			styleheaderheight+= Ext.get('alldaylistbutton').getHeight(true) ; 
		}
		if (this.header){tmpheight+=-24;}
		if (this.calx.showCal_tbar){ tmpheight+=-26;} 	
		if (this.calx.header){tmpheight+=-26;} 
		var morehoffst=0; 
		//if (this.calx.showCal_tbar){ var morehoffst=76;  } else { var morehoffst=32; }
		bodydisp.setStyle({height:'' +  (tmpheight - styleheaderheight)-morehoffst + 'px' } );
		bodydisp.setStyle({overflow:'auto'});
		if ( Ext.isIE || Ext.isIE6){ 
			Ext.get(this.calx.id + '-tableweek-layout').setWidth (Ext.get(this.calx.id + '-tableweek-layout').getWidth()-16,false);	//0.0.6
		} 
		var test = Ext.get(this.calx.id + '-weekbodydisplay').getHeight(true); //0.0.6
		var tableskel = Ext.get(this.calx.id + '-week-skeleton').getHeight(true); //0.0.6 
		
		if (tableskel>test){ // scroll is on 	
			if (this.style=='plain'){  // 0.0.7  plain style fixed  for header display and pos 
				var tmpgridlayout = Ext.get(this.calx.id + '-alldaygridbodylayout'); 
				var tmptable = Ext.get(this.calx.id + '-tableallcontainer');
				for (var i=1;i<8;i++){ 
					Ext.get(this.calx.id + '-weekhdrday-' + i).setWidth(Ext.get(this.calx.id + '-wd' + i ).getWidth(false),false); 
				}
				ancho=tmpgridlayout.getWidth(false); 
				if ( Ext.isIE || Ext.isIE6){ 
					tmpgridlayout.setWidth( (tmpgridlayout.getWidth()-17) , false); 			
				} else {
					tmpgridlayout.setWidth( (ancho-17) , false); 	
				} 				
			} else { //google style 
				var tmpgridlayout = Ext.get(this.calx.id + '-alldaygridbodylayout'); 
				var tmptable = Ext.get(this.calx.id + '-tableallcontainer'); 
				ancho=0;
				for (var i=1;i<8;i++){ 
					ancho+= Ext.get(this.calx.id + '-allday' + i ).getWidth(false); 
				}
				ancho+=7; 
				myallcontainer.setWidth(ancho,false);			
				ancho=tmpgridlayout.getWidth(false); 
				if ( Ext.isIE || Ext.isIE6){ 
					tmpgridlayout.setWidth( (tmpgridlayout.getWidth()-17) , false); 
					myallcontainer.setWidth (myallcontainer.getWidth()-17,false);				
				} else {
					tmpgridlayout.setWidth( (ancho-17) , false); 
					myallcontainer.setWidth (myallcontainer.getWidth()-17,false);	
				} 
			}
		}	
		
		if (this.style=='plain'){ 
		} else {
			//fix position of allday tasks
			var moretaskbuttonallday = Ext.get('alldaylistbutton'); 
			if (myallcontainer.dom.childNodes[0].childNodes.length==0 && myallcontainer.dom.childNodes[0].childNodes.length==0){
			} else { 
				if (myallcontainer.dom.childNodes.length<this.alldayTasksMaxView){ 
					allcounterproc = myallcontainer.dom.childNodes.length; 
				} else { 
					allcounterproc = this.alldayTasksMaxView; 
				} 
				for(var i=0; i<allcounterproc; i++){ 					
					//alldaytasktmp = Ext.get(myallcontainer.dom.childNodes[0].childNodes[i]); 
					alldaytasktmp = Ext.get(myallcontainer.dom.childNodes[i]); 
					this.formatallDayTask(alldaytasktmp); // Adjust positions of each task 
					//add listeners		
					if (this.task_eventLaunch!=''){  //0.0.11 change 
						alldaytasktmp.addListener(this.task_eventLaunch, this.onDblclick, this );
					} 
					if (Ext.isOpera){ 
						alldaytasktmp.addListener('mousedown',this.operadaybuttons,this); 
					} else { 
						  alldaytasktmp.addListener('contextmenu', this.oncontextmenu, this, {
							stopPropagation:false,
							normalized :true,
							preventDefault:true	
						});
					} 
				} 
			}
		}
		// updates all the elements (tasks on each day) of weekbody 
		this.snapweek=[]; 
		for (var i=1;i<8;i++){ 
			var toprocess = new Date( daterange[0].add(Date.DAY,( i-1)) ); 
			var tmpdayweek =Ext.get( Ext.get(this.calx.id + '-day' + i ).dom.childNodes[0] ); //0.0.6
			var tmpdayweek_childs = tmpdayweek.dom.childNodes; 
		 	tmpcalc = (this.task_width * tmpdayweek_childs); 
			if (tmpcalc>tmpdayweek.getWidth(false)){ 
				//tmpdayweek.setWidth(tmpcalc);			
			} 
			if 	(tmpdayweek_childs.length==1 && tmpdayweek_childs[0].childNodes.length==0){ 
			} else {			
				var childcount = tmpdayweek_childs.length; 
				for (var j=0;j<childcount;j++){
					var tmpel = Ext.get(tmpdayweek_childs[j]); 
					if (Ext.isOpera){ tmpel.addClass('taskondayopera'); } else {tmpel.addClass('taskonday'); } 
					checkel = tmpel.id.indexOf(this.calx.id + '-ecal-daytask',0); //0.0.6
					if (checkel<0){ 
					} else { 
						if (this.task_eventLaunch!=''){  //0.0.11 change 
							tmpel.addListener(this.task_eventLaunch, this.onDblclickSingleday, this );	
						} 
						if (this.task_clsOver!='') { 
							tmpel.addClassOnOver(this.task_clsOver);						
						} 
						if (Ext.isOpera){
							tmpel.addListener('mousedown',this.operadaybuttons,this); 
						} else { 
							tmpel.addListener('contextmenu', this.oncontextmenu, this, {
								  stopPropagation:false,
								  normalized :true,
								  preventDefault:true
							});
						} 
						this.formatdayTask(toprocess,i,tmpel,j); 
					} 
				}			
			}
		} 
		//0.0.7  Sets a handler on each day's header for change view if set
		if (this.headerDayClick=='viewday'){ 
			var myhdrweekdaysref = Ext.select('td.x-calendar-weekv-header-days',true); 
			myhdrweekdaysref.each(function(el, thisobj, index){
						if (el.id.indexOf(this.calx.id + '-weekhdrday-')>=0){ 				 
								el.addClassOnOver('overwday');						
								el.addListener('click', this.onWeekHeaderdayClick, this);
							} 
					 },
				 this
			);
		} 
		//if (this.calx.showCal_tbar){ var morehoffst=76;  } else { var morehoffst=32; }
		bodydisp.setStyle({height:'' +  (tmpheight - styleheaderheight)-morehoffst + 'px' } );
		// bodydisp.setStyle({overflow:'auto'});
		// check height and if has scrolbar to fix the container width 
	},
	onWeekHeaderdayClick: function (evx,elx,obx){ //0.0.7 
		if  (elx.className.indexOf('x-calendar-weekv-header-days')<0) { return false; } 
		var tmpobj = Ext.get(elx); 
		var fechatoset = tmpobj.getAttributeNS('tag','dayval');
		var tmpnewdate = new Date(fechatoset); 
		if (this.headerDayClick=="viewday"){
			if ( this.calx.fireEvent("beforeChangeView", 'day' , 'week', this.calx)==false ) { 
				return false; 
			} else { 
				this.calx.currentdate= tmpnewdate; 
				this.calx.selector_dateMenu.picker.setValue(this.calx.currentdate);
				this.calx.currentView='day'; 	 
				this.calx.viewday.render();
				this.calx.fireEvent("onChangeView", 'day', 'week', this);	
			} 
		} else { 
			return false; 
		} 
	}, 
	onDblclickSingleday:function(evx,elx,objx){
		var tmpdata= Ext.get(elx.id);	
		var datatask = this.getTaskarray(elx); 
		this.calx.fireEvent("taskDblClick",datatask,this,this.calx,'week');	
	},
	onDblclick:function(evx,elx,obx){
		var tmpdata= Ext.get(elx.id);
		var datatask = this.getTaskarray(elx); 
		this.fireEvent("dblClickTaskAllDay",datatask,this,this.calx);	
	},
	operabuttons_body: function (evx,elx,obx){//alert ("boton:" + evx.button); 
		if (Ext.isOpera){ 
			if (evx.button==2){ this.oncontextmenu_bodyday(evx,elx,obx); }
		}
	}, 
	operabuttons: function (evx,elx,obx){//alert ("boton:" + evx.button); 
		if (Ext.isOpera){ 
			if (evx.button==2){ this.oncontextmenu(evx,elx,obx); }
		}
	}, 
	oncontextmenu_bodyday: function(evx,elx,obx){ 
		if (Ext.isOpera){ if (evx.button!=2){ return false; }  }
		if  (elx.id.indexOf("containeronday")<0) { return false; } 
		if (this.ShowMenuItems[0]!=true && this.ShowMenuItems[1]!=true && this.ShowMenuItems[2]!=true && this.ShowMenuItems[3]!=true && this.ShowMenuItems[4]!=true && this.ShowMenuItems[5]!=true){return false;}
		if (Ext.isIE){ 
			//alert ("objeto==" + elx.parentNode.id );
			testxxx=  Ext.get(elx.parentNode); 	//testxxx=  Ext.get( Ext.get(document.all.item("containeronday",1)).dom.parentNode );
			var datetohandle  = testxxx.getAttributeNS('tag','iddate') ;
			//alert ("prueba "  + testxxx.getAttributeNS('tag','iddate') );
			//alert ("fecha a manejar ==" + datetohandle  ); 
		} else {
			var testxxx = elx.parentNode; 
			var datetohandle = elx.parentNode.attributes[1].nodeValue; 
		} 
		evx.stopEvent();
		var tmpdata= Ext.get(elx.id);
		if (this.menu){ this.menu.removeAll();	}
		this.menu = new Ext.menu.Menu({
			shadow: true, 
			items:[{id:'week_ctxbtn_task-add',		iconCls:'x-calendar-day-btnmv_add',			 text: e2cs.cal_locale.contextMenuLabelsDay.taskAdd, 	scope:this},
				   '-',
				   {id:'week_ctxbtn_task-go-nd', 	iconCls: 'x-calendar-week-btnmv_nextweek',   text: e2cs.cal_locale.contextMenuLabelsWeek.next,	 scope:this},
				   {id:'week_ctxbtn_task-go-pd', 	iconCls: 'x-calendar-week-btnmv_prevweek',   text: e2cs.cal_locale.contextMenuLabelsWeek.prev, 	 scope:this},
				   '-',
				   {id:'week_ctxbtn_viewmonth', 	iconCls: 'x-calendar-month-btnmv_viewmonth', text: e2cs.cal_locale.contextMenuLabelsWeek.chgmview, scope:this},
				   {id:'week_ctxbtn_viewday', 	 	iconCls: 'x-calendar-month-btnmv_viewday',	 text: e2cs.cal_locale.contextMenuLabelsWeek.chgdview, scope:this},
				   {id:'week_ctxbtn_viewsched', 	iconCls: 'x-calendar-month-btnmv_viewsched', text: e2cs.cal_locale.contextMenuLabelsWeek.chgsview, scope:this}
			]
		});
		this.menu.items.items[0].addListener('click', function(){ this.calx.fireEvent("taskAdd", datetohandle); }, this); 
		this.menu.items.items[2].addListener('click', function(){ this.onclicknext_week(); }, this);  //next week 		
		this.menu.items.items[3].addListener('click', function(){ this.onclickprev_week(); }, this);  //prev week	
		this.menu.items.items[5].addListener('click', function(){ this.changeCalview( testxxx,this,1); 	}, this); 
		this.menu.items.items[6].addListener('click', function(){ this.changeCalview( testxxx,this,2); 	}, this);
		this.menu.items.items[7].addListener('click', function(){ this.changeCalview( testxxx,this,3); 	}, this);
		//0.0.11 - check visibility on the menu-items according to the new property this.ShowMenuItems
		//ShowMenuItems:[1,1,1,1,1,1],	//0.0.11  add, go next w , go prev w , chg month , chg day, chg sched 
		if (this.ShowMenuItems[0]!=true){	
						this.menu.items.items[0].hidden=true; 
						this.menu.items.items[1].hidden=true; 	
		} 						
		if (this.ShowMenuItems[1]!=true){	this.menu.items.items[2].hidden=true;		} 
		if (this.ShowMenuItems[2]!=true){	this.menu.items.items[3].hidden=true;		} 	
		if (this.ShowMenuItems[1]!=true && this.ShowMenuItems[2]!=true){
			this.menu.items.items[4].hidden=true;	
		}
		if (this.ShowMenuItems[3]!=true){	this.menu.items.items[5].hidden=true;		} 
		if (this.ShowMenuItems[4]!=true){	this.menu.items.items[6].hidden=true;		} 
		if (this.ShowMenuItems[5]!=true){	this.menu.items.items[7].hidden=true;		}
		
		if (!this.calx.mview){ this.menu.items.items[6].hidden=true; }
		if (!this.calx.dview){ this.menu.items.items[5].hidden=true; }
		if (!this.calx.sview){ this.menu.items.items[7].hidden=true; }
		//this.menu.showAt(evx.xy);		
		this.menu.showAt( [ evx.getPageX(), evx.getPageY() ] ); //0.0.11 
	},
	changeCalview: function(objx, mviewx, typeview){
		if (Ext.isIE){ 
			var refdate= objx.getAttributeNS('tag','iddate') ;
		} else { 
			var refdate= objx.attributes[1].nodeValue;
		} 
		this.calx.currentdate = new Date(refdate); 	
		this.calx.selector_dateMenu.picker.setValue(this.calx.currentdate);
		if (typeview==1){
			varview='month'; 
		} else if (typeview==2){
			varview='day'; 
		} else {
			varview='schedule';
		}
		this.calx.changeView(varview);
	},	
	oncontextmenu: function(evx,elx,obx){ // this one is for tasks 
		if (Ext.isOpera){ if (evx.button!=2){ return false; } }
		if (this.task_ShowMenuItems[0]!=true && this.task_ShowMenuItems[1]!=true && this.task_ShowMenuItems[2]!=true && this.task_ShowMenuItems[3]!=true  && this.task_ShowMenuItems[4]!=true && this.moreMenuItems.length<=0){ return false; }
		evx.stopEvent();		
		var tmpdata= Ext.get(elx.id);
		if (this.menu){ this.menu.removeAll(); }
		this.menu = new Ext.menu.Menu({
			shadow: true, 
			items:[{id:'week_ctxbtn_task-add',		iconCls:'x-calendar-day-btnmv_add',		text: e2cs.cal_locale.contextMenuLabelsDay.taskAdd,    scope:this},
				   {id:'week_ctxbtn_task-delete', 	iconCls: 'x-calendar-day-btnmv_delete',	text: e2cs.cal_locale.contextMenuLabelsDay.taskDelete, scope:this},
				   '-',
				   {id:'week_ctxbtn_task-edit',	iconCls: 'x-calendar-day-btnmv_task',	
				   text: e2cs.cal_locale.contextMenuLabelsDay.taskEdit + tmpdata.getAttributeNS('tag','ec_subject'),  scope:this },
				   '-',
				   {id:'week_ctxbtn_task-go-nw', 	iconCls: 'x-calendar-week-btnmv_nextweek',text: e2cs.cal_locale.contextMenuLabelsWeek.next,	 scope:this},
				   {id:'week_ctxbtn_task-go-pw', 	iconCls: 'x-calendar-week-btnmv_prevweek',text: e2cs.cal_locale.contextMenuLabelsWeek.prev,  scope:this}
			]
		});
		if (this.moreMenuItems.length>0) { 
			this.menu.add('-'); 
			for (var i=0; i<this.moreMenuItems.length; i++){
				// var idmenuitem = this.moreMenuItems[i].id;  0.0.4 bug in custom action sending the id the problem was the last id was returned always
				this.moreMenuItems[i].rendered =false; 
				this.moreMenuItems[i].addListener('click', 
							function(parx , parz){ 
									this.onCustomMenuAction( parx.id, Ext.get(elx),this ); 
									//this.onCustomMenuAction( idmenuitem , Ext.get(elx), this ); 0.0.4 bug 
							}, this); 
				this.menu.add( this.moreMenuItems[i]);
			}
		} 
		this.menu.items.items[0].addListener('click', function(){ this.onActionTask( 1, Ext.get(elx), this );   }, this); 
		this.menu.items.items[1].addListener('click', function(){ this.onActionTask( 2, Ext.get(elx), this ); 	}, this); 
		this.menu.items.items[3].addListener('click', function(){ this.onActionTask( 3, Ext.get(elx), this ); 	}, this); 		
		this.menu.items.items[5].addListener('click', function(){ this.onclicknext_week(); }, this);  //next day		
		this.menu.items.items[6].addListener('click', function(){ this.onclickprev_week(); }, this);  //prev day
		//0.0.11 - check visibility on the menu-items according to the new property this.task_ShowMenuItems
		//task_ShowMenuItems:[1,1,1,1,1],		//0.0.11  add, delete, edit, go next w , go prev w
		if (this.task_ShowMenuItems[0]!=true){this.menu.items.items[0].hidden=true; } 
		if (this.task_ShowMenuItems[1]!=true){this.menu.items.items[1].hidden=true; } 
		if (this.task_ShowMenuItems[0]!=true && this.task_ShowMenuItems[1]!=true){this.menu.items.items[2].hidden=true; } //sep
		if (this.task_ShowMenuItems[2]!=true){ this.menu.items.items[3].hidden=true; this.menu.items.items[4].hidden=true;} 
		if (this.task_ShowMenuItems[3]!=true){this.menu.items.items[5].hidden=true; } 
		if (this.task_ShowMenuItems[4]!=true){this.menu.items.items[6].hidden=true; } 
		if (this.moreMenuItems.length>0) { 
			if (this.task_ShowMenuItems[3]!=true && this.task_ShowMenuItems[4]!=true){
				this.menu.items.items[7].hidden=true; 
			}
		} 
		//--------------------------------------------------------------------------
		this.menu.on('hide', this.onContextTaskMenu_Hide, this);
		this.menu.showAt(evx.xy);
	},
	onContextTaskMenu_Hide: function (){
		//nothing happens :(
	},
	onCustomMenuAction: function(MenuId,taskEl,TaskObj){
		var datatask = this.getTaskarray(taskEl); 
		this.calx.fireEvent("customMenuAction", MenuId,'week',datatask,taskEl,this); //0.0.9 fix 
	},	
	onActionTask: function (action, taskEl, TaskObj ){
		var datatask = this.getTaskarray(taskEl); 
		switch(action){
			case 1:  //add	
				if (taskEl.id.indexOf(this.calx.id + "-ecal-alldaytask")>=0){ //0.0.6
					this.calx.fireEvent("taskAdd",this.calx.currentdate);	
				} else { 
					if (Ext.isIE){ 
						testxxx = Ext.get( taskEl.dom.parentNode.parentNode );
						// IE debugging lines  for tests 
						//alert ( "prueba 1 " + testxxx.id );
						//alert ( "prueba 2 " + testxxx.getAttributeNS('tag','iddate') );
						var datewday = new Date(testxxx.getAttributeNS('tag','iddate')); 
					} else { 
						var datewday = new Date(taskEl.dom.parentNode.parentNode.attributes[1].nodeValue); 
					} 
					this.calx.fireEvent("taskAdd",datewday);	
				} 
				break; 
			case 2: // delete
				var check = this.calx.fireEvent("beforeTaskDelete",datatask,this);  
				if (check!=true){ 
					if (this.calx.fireEvent("onTaskDelete",datatask)==true){ 
						this.calx.fireEvent("afterTaskDelete",datatask,true);
					} else { 
						this.calx.fireEvent("afterTaskDelete",null,false);
					} 
				} 
				break; 
			case 3: //edit
				var check = this.calx.fireEvent("beforeTaskEdit", datatask, this );  
				if (check!=true){ 
					if (this.calx.fireEvent("onTaskEdit",datatask)==true){ 
						this.calx.fireEvent("afterTaskEdit",datatask, true);
					} else { 
						this.calx.fireEvent("afterTaskEdit", null , false);
					}	
				}
				break; 			
			default: 
				break; 
		} 
	},	
	getTaskarray: function(TaskElx){ 
		var tmpdata= Ext.get(TaskElx);
		var datatask =[]; 
		datatask[0]=tmpdata.getAttributeNS('tag','id') ; 
		datatask[1]=tmpdata.getAttributeNS('tag','ec_id') ; 		
		datatask[2]=tmpdata.getAttributeNS('tag','ec_subject') ; 
		datatask[3]=tmpdata.getAttributeNS('tag','ec_starts') ; 
		datatask[4]=tmpdata.getAttributeNS('tag','ec_ends') ; 		
		datatask[5]=tmpdata.getAttributeNS('tag','ec_cnt') ; 
		datatask[6]=tmpdata.getAttributeNS('tag','ec_storeindex') ; 
		return 	datatask; 	
	},	
	getDatesforWeek:function(Dateval){ 
		// 0.0.10 code correction by PTG
		var dw = new Date(Dateval).getDay();
		dw = ((dw==0)?6:dw-1); // day of week, monday first
		var initdate = new Date(Dateval.add(Date.DAY, -dw).format('m/d/Y') + ' ' + this.startTime); // monday always
		var enddate  = new Date(Dateval.add(Date.DAY, -dw+6).format('m/d/Y') + ' ' + this.endTime);
		return [initdate,enddate];		
	}, 	
	getWeekTasks:function(Dateval,Type){  // get the task for the day return array with tasks.data
		//type==0 all day task for container 
		//type==1 tasks for day especific if the task has more days and its included and does not appear
		//type==2 tasks for day especific if the task has more days and its included and does appear
		var daterange = this.getDatesforWeek(this.datetohandle); 		
		var tmpdaytasks=[];  
		switch(Type) {
		  case 0:   // all day tasks                     
		  	var numrecs = this.calx.store.getCount(); 
			var countdone=0; 
			for (var i=0; i<numrecs; i++){ 
				var testrec = this.calx.store.getAt(i).data; 
				tstdateini =new Date(testrec[this.calx.fieldsRefer.startdate]); //0.0.11
				tstdateend =new Date(testrec[this.calx.fieldsRefer.enddate]);   //0.0.11
				var check = this.calx.dateDiff(tstdateini,tstdateend,e2cs.dateParts.DAY); 
				if (check>=1){ 
					if (tstdateini<daterange[0]  && tstdateend>daterange[1]){ 
							tmpdaytasks[countdone] = testrec; 
							countdone+=1;
					} else { 
						// check if falls in dates 
						if ( tstdateini.between( daterange[0], daterange[1]) || tstdateend .between( daterange[0], daterange[1]) ){ 
							tmpdaytasks[countdone] = testrec; 
							countdone+=1;
						} 
					} 
				} 
			} 
			break; 			
		  case 1:  // for google style for an especific day 
		  	var dateinionthisday = new Date( Dateval.format('m/d/Y') + ' ' + this.startTime);
		  	var dateendonthisday = new Date( Dateval.format('m/d/Y') + ' ' + this.endTime  );
		  	var numrecs = this.calx.store.getCount(); 
			var countdone=0; 
			for (var i=0; i<numrecs; i++){ 
		  		var testrec = this.calx.store.getAt(i).data; 
		 		tstdateini =new Date(testrec[this.calx.fieldsRefer.startdate]);  	//0.0.11
				tstdateend =new Date(testrec[this.calx.fieldsRefer.enddate]); 	  	//0.0.11
				var check = this.calx.dateDiff(tstdateini,tstdateend,e2cs.dateParts.DAY); 
				if (check<1){ 
					if ( tstdateini.between( dateinionthisday, dateendonthisday) && tstdateend .between( dateinionthisday, dateendonthisday) ){ 
						tmpdaytasks[countdone] = testrec; 
						countdone+=1;
					} 
				} 
		  	}
			break;                     
		  case 2: 
		  	var dateinionthisday = new Date( Dateval.format('m/d/Y') + ' ' + this.startTime);
		  	var dateendonthisday = new Date( Dateval.format('m/d/Y') + ' ' + this.endTime  );
			var numrecs = this.calx.store.getCount(); 
			var countdone=0; 
			for (var i=0; i<numrecs; i++){ 
		  		var testrec = this.calx.store.getAt(i).data; 
		 		tstdateini =new Date(testrec[this.calx.fieldsRefer.startdate]); //0.0.11
				tstdateend =new Date(testrec[this.calx.fieldsRefer.enddate]); 	//0.0.11
				checkdates 	= this.datetohandle.between( new Date(tstdateini), new Date(tstdateend) ); 
				chkformat 	= this.datetohandle.format('m/d/Y'); 
				test 		= new Date(dateinit); 	
				if (test.format('m/d/Y')==chkformat){  checkdates =true; } 
				test 		= new Date(dateend); 	
				if (test.format('m/d/Y')==chkformat){  checkdates =true; } 
				var check = this.calx.dateDiff(tstdateini,tstdateend,e2cs.dateParts.DAY); 
				if (check<1){ 
					if ( tstdateini.between( dateinionthisday, dateendonthisday) && tstdateend .between( dateinionthisday, dateendonthisday) ){ 
						tmpdaytasks[countdone] = testrec; 
						countdone+=1;
					} 
				} else { 
					if (check>=1){ 
						if (tstdateini<dateinionthisday  && tstdateend>dateendonthisday){ 
								tmpdaytasks[countdone] = testrec; 
								countdone+=1;
						} else { 
							// check if falls in dates 
							if ( tstdateini.between( dateinionthisday, dateendonthisday) || tstdateend .between( dateinionthisday, dateendonthisday) ){ 
								tmpdaytasks[countdone] = testrec; 
								countdone+=1;
							} 
						} 
					} 
				} 
		  	}
			break;                     
		  default:                     
			tmpdaytasks=[]; 
			break;                    
		}
		return tmpdaytasks; 
		
	}, 
	showMoreTasksList:function(){
		taskstmp = this.getWeekTasks(this.datetohandle,0); 
		showdata =[]; 
		for (var i=0;i<taskstmp.length;i++){ 
			showdata[i]= [ 
						  taskstmp[i][this.calx.fieldsRefer.id],
						  taskstmp[i][this.calx.fieldsRefer.subject],
						  taskstmp[i][this.calx.fieldsRefer.description],
						  taskstmp[i][this.calx.fieldsRefer.startdate],
						  taskstmp[i][this.calx.fieldsRefer.enddate],
						  taskstmp[i][this.calx.fieldsRefer.color]  
			]; 
		} 
		if (this.alldayTaksMore=="event"){ 
			this.fireEvent("launchEventList", showdata[i] );
			return false; 
		} else if (this.alldayTaksMore=="window"){ 
				var reader = new Ext.data.ArrayReader({}, [
				   {name: this.calx.fieldsRefer.id 			, type: 'int'},     
				   {name: this.calx.fieldsRefer.subject 	, type: 'string'},  
				   {name: this.calx.fieldsRefer.description	, type: 'string'},
				   {name: this.calx.fieldsRefer.startdate	, type: 'string'},  
				   {name: this.calx.fieldsRefer.enddate		, type: 'string'},  
				   {name: this.calx.fieldsRefer.color		, type: 'string'}
				]);
				tmpstore= new Ext.data.Store({reader:reader, data:showdata});
				tmppanel = new Ext.Panel({
					id:'ecal-more-task-panel',	header:false,	autoDestroy:true,	autoScroll:true,
					monitorResize:true, 		border:false,	autoWidth:false,	autoHeight:false,
					items: new Ext.DataView({
						loadingText:e2cs.cal_locale.win_tasks_loading,
						store:tmpstore,
						tpl: this.alldayTaskTPL,  //0.0.7 
						autoWidth :true, 
						autoHeight:true,
						overClass:'',
						itemSelector:'',
						emptyText: e2cs.cal_locale.win_tasks_empty
					})
				});
				var ecalwinshowmore = new Ext.Window({
					id: 'ecal-win-moretasks', 	name: 'ecal-win-moretasks',	title: e2cs.cal_locale.win_week_zoomlabel,
					width:450, 		height:300, 	closeAction:'close', 	resizable:true,		resizeHandles:'all', 
					hideBorders:true, 		maximizable:true,		plain:true,		modal:true, layout:'fit',
					iconCls:'x-calendar-more-tasks-win',
					items:[tmppanel] 											 
				});
				ecalwinshowmore.show(); 
		} 
	}, 
	//private -----------------------------------------------------------------------
	formatdayTask: function(dateval,numday,ExtEl,indexElperDay){ 
		var container   =  Ext.get(this.calx.id + '-day' + numday); 
		var m_starttime =  dateval.format('m/d/Y ') + this.startTime ; 
		var m_endtime   =  dateval.format('m/d/Y ') + this.endTime   ; 
		this.totalhours =  this.calx.dateDiff(new Date(m_starttime),new Date(m_endtime),e2cs.dateParts.HOUR); 
		// check if the task hour is Ok 
		var inittimetask = this.checkTasktime( ExtEl.getAttributeNS('tag','ec_starts') ); 
		var endtimetask  = this.checkTasktime( ExtEl.getAttributeNS('tag','ec_ends') ); 
		var diffstartinipos = this.calx.dateDiff( new Date(m_starttime), new Date(inittimetask),e2cs.dateParts.MINUTE); 
		if (diffstartinipos<0 ){
			initpos = 0; 
			flagstarttasttext = e2cs.cal_locale.task_LessDaysFromTask; // sample'(-)<br>'; 
		} else {
			initpos = diffstartinipos; 
			flagstarttasttext = ''; 
		}
		var diffendpos = this.calx.dateDiff(new Date(m_endtime), new Date(endtimetask),e2cs.dateParts.MINUTE); 
		if (diffendpos>0){
			endpos = (this.totalhours + 1) * 60; 
			endpos = Math.abs(initpos - endpos); 
			flagendtasttext = e2cs.cal_locale.task_MoreDaysFromTask; // sample '<br>(+)'; 
	    } else { 
			var tmpdate = new Date(inittimetask); 
			var dtstartday =  new Date(  dateval.format('m/d/Y') + ' ' + this.startTime ); 
			if  (tmpdate<dtstartday) { 
				endpos = this.calx.dateDiff( new Date(m_starttime), new Date(endtimetask) ,e2cs.dateParts.MINUTE); 
			}  else { 
				endpos = this.calx.dateDiff( new Date(inittimetask), new Date(endtimetask) ,e2cs.dateParts.MINUTE); 
			} 
			if (endpos==(this.totalhours * 60) ) { 
				endpos = endpos; //  -76; 
			} else if (endpos>(this.totalhours * 60) ) { 
				endpos =(this.totalhours * 60); 
			} 
			flagendtasttext = ''; 
		} 		
		//ExtEl.setTop('' + initpos + 'px');  // css
		if (Ext.isOpera) {
			var testwxopera = (indexElperDay +1) * this.task_width;
			if  (( (indexElperDay + 1) * this.task_width)>container.getWidth(false)){ 
				ExtEl.setStyle('display','none'); 
			}
			if (  (indexElperDay + 1)>1 ){ 
				ExtEl.setLeft('0px'); // css	
			} 
		} else { 
			ExtEl.setLeft('' + (indexElperDay * this.task_width)  + 'px'); // css
		} 
		ExtEl.setWidth( this.task_width,false); 
		ExtEl.setHeight( endpos,false); 
		if (Ext.isOpera){
			ExtEl.setY(container.getY() + initpos); // fix for moredays task and normal tasks		
			ExtEl.setStyle({top:''+ initpos + 'px' } );
			ExtEl.setStyle("float", 'left');
		} else { 
			ExtEl.setY(container.getY() + initpos); // fix for moredays task and normal tasks		
		}
		if(Ext.isIE){
			ExtEl.setStyle('z-index' ,'2000'); 
		} else { 
			ExtEl.setStyle('z-index' ,'auto'); 		
		} 
		//add listeners 	//dragdrop not implemented on this view 
	},
	checkTasktime: function(taskvalue) { 
		var test = taskvalue.indexOf(":", 0); 
		if (test<=0){
			taskvaluefix = taskvalue + ' ' + this.startTime; 
		} else { 
			taskvaluefix = taskvalue ; 
		}
		return taskvaluefix ; 
	},	
	formatallDayTask:function(ExtEl){ 
		var daterange  = this.getDatesforWeek(this.datetohandle); 				
		var initdateEl = new Date( ExtEl.getAttributeNS('tag','ec_starts') ); 
		var enddateEl  = new Date( ExtEl.getAttributeNS('tag','ec_ends') ); 		
		var diffElDays = this.calx.dateDiff(initdateEl,enddateEl,e2cs.dateParts.DAY); 
		if (diffElDays >7){ diffElDays =7; 	}
		initdaystart = this.calx.dateDiff(daterange[0],initdateEl,e2cs.dateParts.DAY);  
		if (initdaystart<0){ 
			diffElDays = this.calx.dateDiff(daterange[0],enddateEl,e2cs.dateParts.DAY); 
			if (diffElDays >7){ diffElDays = 7; } 
			initdaystart=0; 
		} 
		var myallcontainer = Ext.get(this.calx.id + '-alldaycontainer');  //container of tasks //0.0.6
		newposx = 0 ;
		for (var i=0;i<initdaystart;i++){ 
			newposx+= Ext.get(this.calx.id + '-allday' + (i+1)).getWidth(false); 
		}
		newposx+=i;
		ExtEl.setX( myallcontainer.getX() + newposx );
		ancho=0; 
		if (enddateEl>daterange[1]){ 
			ExtEl.setWidth( Ext.get(this.calx.id + '-alldaycontainer').getWidth(false) - newposx,false); //0.0.6
		} else { 
			if (diffElDays<1){
				ancho+= Ext.get(this.calx.id + '-allday1').getWidth(false); 
			} else {
				for (var i=0;i<diffElDays;i++){
//					if (initdaystart + i >=6){ //0.0.11 FIX 
//					} else { 
//						if (i<7){
							ancho+= Ext.get(this.calx.id + '-allday' + (i+1) ).getWidth(false); 
//						} 
//					} 
				}
			} 
			ancho+=i; 	
			ExtEl.setWidth(ancho,false);
		}
	}, 
	onclickprev_week: function(){ 
		var newdate = this.datetohandle.add(Date.DAY,+ (-7)); 
		var check = this.fireEvent("beforeWeekChange", this.datetohandle, newdate); 
		if (!check){ 
			this.datetohandle = newdate; 
			this.calx.currentdate = newdate; 
			this.render();
			this.fireEvent("afterWeekChange", newdate); 	
		} 	
	}, 
	onclicknext_week: function(){ 
		var newdate = this.datetohandle.add(Date.DAY,+ (+7));
		var check = this.fireEvent("beforeWeekChange", this.datetohandle, newdate); 
		if (!check){ 
			this.datetohandle = newdate; 
			this.calx.currentdate = newdate; 		
			this.render();
			this.fireEvent("afterWeekChange", newdate);
		}
	}, 
	genHeader:function(dateval){
		var daterange = this.getDatesforWeek(this.datetohandle); 
		var dt = new Date(dateval);
		Date.monthNames = e2cs.cal_locale.monthtitles; 
		Date.dayNames   = e2cs.cal_locale.daytitles; 
		var myheader    =  '<div class="x-calendar-weekv-header" style="width:' + (this.calx.width - 10) + 'px;">';
		if (this.headerButtons){
		    myheader += '<div class="x-calendar-week-previous"></div>';
		    myheader += '<div class="x-calendar-week-next"></div>'; 
		} 
		complementtext =''; 
		if (this.headerShowDates){ 
			complementtext = ' ' + e2cs.cal_locale.weekheaderlabel_from +' '+ daterange[0].format('m/d/Y') +' '+ e2cs.cal_locale.weekheaderlabel_to +' '+ daterange[1].format('m/d/Y'); 
		} 
	    myheader += '<div id="calendarheader">' + e2cs.cal_locale.weekheaderlabel + dt.format(this.headerFormat) + complementtext  + '</div>';		
		//myheader += '<div id="calendarheader">' + e2cs.cal_locale.weekheaderlabel + dt.format(this.headerFormat) + complementtext  + '</div>';
		myheader += '<div id="' + this.calx.id + '-week-sub-' + 'header">' + e2cs.cal_locale.weekheaderlabel + dt.format(this.headerFormat) + complementtext  + '</div>';
		myheader += '</div>';
		return myheader; 		
	},
	genDaysHeader:function(datestart){ 
		// just in case user dont want the all day container and only plain view of days 
		var htmlheader='';
		htmlheader='<div id="' + this.calx.id + '-allday_w_task" class="allday_w_task">'; //0.0.6 
	    htmlheader+='<div id="' + this.calx.id +  '-alldaygridbodylayout" class="alldaygridbody">'; 
	 	htmlheader+='<table width="100%" border="0" cellpadding="0" cellspacing="1" bordercolor="#004E9B" bgcolor="#004E9B"><tr>';
		htmlheader+='<td width="50"><table width="50" border="0" align="center" cellpadding="0" cellspacing="0">'; 
        htmlheader+='<tr><td width="50" class="allday-marker" id="alldayrefer" ><div class="taskallday-layoutbase">&nbsp;</div>'; 
        htmlheader+='</td></tr></table></td>'; 
		for (var i=0; i<7;i++){ 
			var daylabel = datestart.add(Date.DAY,i).format(this.dayformatLabel); 
			var validtd = datestart.add(Date.DAY,i).format('m/d/Y');
			htmlheader+='<td valign="top"  class="x-calendar-weekv-header-days" dayval="' + validtd + '" id="' + this.calx.id + '-weekhdrday-' + (i + 1) + '">' + daylabel + '</td>'; 
		} 
        htmlheader+='</tr></table></div></div>';
		return htmlheader; 
	},
	genAlldayContainer:function(datestart){  // for google calendar style (container with task with +1 day long) 
		var htmlcontainer='';
		htmlcontainer+='<div id="' + this.calx.id + '-alldaycontainer" class="allday-container">'; //to handle //0.0.6
		var taskstmp = this.getWeekTasks(this.datetohandle,0); 
		if (taskstmp.length==0){ 
			htmlcontainer+='&nbsp;'; 
		}else { 
			if (taskstmp.length<=this.alldayTasksMaxView){ 
				tasktoshow=taskstmp.length;  
			}  else { 
				tasktoshow=this.alldayTasksMaxView; 
			} 
			for (var j=0; j<tasktoshow; j++){ 
				//sample 
				var fch_starts = new Date(taskstmp[j][this.calx.fieldsRefer.startdate]); //0.0.11
				var fch_ends   = new Date(taskstmp[j][this.calx.fieldsRefer.enddate]);   //0.0.11
				var datatip = {starxl:   e2cs.cal_locale.task_qtip_starts,
						   	   startval: fch_starts.format(this.task_format),
						       endxl:    e2cs.cal_locale.task_qtip_ends, 
						       endval:   fch_ends.format(this.task_format),
						       details:  taskstmp[j][this.calx.fieldsRefer.description]}; //0.0.11	   
				var newqtip = this.calx.tplTaskTip.apply(datatip);				
				//0.0.6 id on div 
				htmlcontainer+= '<div id="' + this.calx.id + '-ecal-alldaytask-' + j + '" class="taskallday-taskbase"  style="background-color:' + taskstmp[j][this.calx.fieldsRefer.color] +  '"'; //0.0.11
				htmlcontainer+= 'ext:qtitle="' + taskstmp[j][this.calx.fieldsRefer.subject] + '" ext:qtip="' + newqtip + '"'; 	//0.0.11
				//changed on 0.0.4
				//changed on 0.0.11
				htmlcontainer+= 'ec_id="' + taskstmp[j][this.calx.fieldsRefer.id]   + '" ec_starts="' + taskstmp[j][this.calx.fieldsRefer.startdate] + '"'; //0.0.11
				htmlcontainer+= 'ec_ends="' + taskstmp[j][this.calx.fieldsRefer.enddate] + '" ec_subject="' + taskstmp[j][this.calx.fieldsRefer.subject] + '"';//0.0.11
				htmlcontainer+= 'ec_cnt="' + taskstmp[j][this.calx.fieldsRefer.description] + '" ec_storeindex="' + j + '">' + taskstmp[j][this.calx.fieldsRefer.subject] + '</div>';//0.0.11
				//to be processed in render function 
			}
		} 
		htmlcontainer+='</div>'; 
		htmlcontainer+='<div id="' + this.calx.id + '-allday_w_task" class="allday_w_task">'; //0.0.6
		htmlcontainer+='<div id="' + this.calx.id + '-alldaygridbodylayout" class="alldaygridbody">';
		//htmlcontainer+='<table width="100%" border="0" cellpadding="0" cellspacing="1" bordercolor="#004E9B" bgcolor="#004E9B"><tr>';		
		htmlcontainer+='<table id="' + this.calx.id + '-tableallcontainer" width="100%" border="0" cellpadding="0" cellspacing="1" bordercolor="#004E9B" bgcolor="#004E9B"><tr>';
		htmlcontainer+='<td class="">&nbsp;</td>';
		for (var i=0; i<7;i++){ 
			var daylabel = datestart.add(Date.DAY,i).format(this.dayformatLabel);
			var validtd = datestart.add(Date.DAY,i).format('m/d/Y');
			htmlcontainer+='<td valign="top"  class="x-calendar-weekv-header-days" dayval="' + validtd + '" id="' + this.calx.id + '-weekhdrday-' + (i + 1) + '">' + daylabel + '</td>'; 
			//htmlcontainer+='<td valign="top"  class="x-calendar-weekv-header-days" id="' + this.calx.id + '-weekhdrday-' + (i + 1) + '">' + daylabel + '</td>'; 
		} 
		htmlcontainer+='</tr><tr><td width="50">'; 
		htmlcontainer+='<table width="50" border="0" align="center" cellpadding="0" cellspacing="0">';
        htmlcontainer+='<tr><td width="50" class="allday-marker" id="alldayrefer" >';  //to handle
		if (taskstmp.length){ // just to set the height for the tasks
			if (taskstmp.length<=this.alldayTasksMaxView){ 
				tasktoshow=taskstmp.length;  
			}  else { 
				tasktoshow=this.alldayTasksMaxView; 
			} 
			for (var i=0; i<tasktoshow;i++){ 
				htmlcontainer+='<div class="taskallday-layoutbase">&nbsp;</div>'; 			
			} 			
		} else {  // minimum if empty 
			htmlcontainer+='<div class="taskallday-layoutbase">&nbsp;</div>'; 
			htmlcontainer+='<div class="taskallday-layoutbase">&nbsp;</div>'; 
		} 
		htmlcontainer+='</td></tr></table></td>';
		for (var i=0; i<7;i++){
			todaytmp = new Date(); 
			gendatetd = datestart.add(Date.DAY,i); 
			var daylabel = gendatetd.format(this.dayformatLabel); 
			if (i==0){ 
				htmlcontainer+='<td width="14%" bgcolor="#FFFFFF" valign="top" class="weekstartday" id="' + this.calx.id + '-allday' + (i + 1) + '"><div>&nbsp;</div></td>'; 
			} else if (i==6){
				htmlcontainer+='<td width="14%" bgcolor="#FFFFFF" valign="top" class="weekendday"   id="' + this.calx.id + '-allday' + (i + 1) + '"><div>&nbsp;</div></td>'; 
			} else { 
			 	htmlcontainer+=' <td width="14%" bgcolor="#FFFFFF" valign="top" class="weekmidday"  id="' + this.calx.id + '-allday' + (i + 1) + '"><div>&nbsp;</div></td>'; 
			} 
		} 
		htmlcontainer+='</tr></table></div></div>'; 
		htmlcontainer+='<div id="alldaylistbutton" class="x-calendar-weekv-header-alldaylist">'; //to handle
   		htmlcontainer+= e2cs.cal_locale.alldayTasksMaxLabel + ' </div>'; 
		return htmlcontainer; 
	},
	genBody: function(datestart){
		var dt = new Date(datestart);
		var inittime  = new Date(dt.format('m/d/Y') + ' ' + this.startTime); 
		var endtime   = new Date(dt.format('m/d/Y') + ' ' + this.endTime); 		
		this.diffhrs  = this.calx.dateDiff(inittime,endtime,e2cs.dateParts.HOUR);
		var dviewbody ='<div id="' + this.calx.id + '-weekbodydisplay" class="weekbodydisplay">'; //0.0.6
		//fix for IE6 and IE7
		var wtdisp=''; 
		if ( Ext.isIE || Ext.isIE6){  wtdisp = '97';  } else { 	wtdisp = '100'; }
		wtdisp = '100'; 
		//---------------------------------
		dviewbody+='<div id="' + this.calx.id + '-tableweek-layout">'; //0.0.6
	    dviewbody+='<table id="' + this.calx.id + '-week-skeleton" width="' + wtdisp + '%" border="0" cellspacing="1" cellpadding="0">'; //0.0.6
		dviewbody+='<tr><td width="50"><table width="50" border="0" align="center" cellpadding="0" cellspacing="0">';
		for (var  i=0; i<this.diffhrs; i++){ 
			//dviewbody +='<tr><td class="hour-marker">'+  inittime.add(Date.HOUR, (i) ).format( this.hourFormat + ':i a') + '</td></tr>'; 
			dviewbody +='<tr><td class="hour-marker"><span>'+ inittime.add(Date.HOUR, (i) ).format( this.hourFormat) + '</span>'; //0.0.7 
			dviewbody +='<span class="minute">' + inittime.add(Date.HOUR, (i) ).format('i a') + '</span></td></tr>'; 				
		} 
        dviewbody+='</table></td>'; 
		for (var i=0; i<7;i++){
			gendatetddiv = datestart.add(Date.DAY,i); 
			if (i==0){ 
				dviewbody+='<td width="14%" valign="top" class="weekstartday" id="' + this.calx.id + '-wd' + (i+1)+'">';  //0.0.6
			} else if (i==6){
				dviewbody+='<td width="14%" valign="top" class="weekendday" id="' + this.calx.id + '-wd' + (i+1)+'">'; //0.0.6
			} else { 
				dviewbody+='<td width="14%" valign="top" class="weekmidday" id="' + this.calx.id + '-wd' + (i + 1) + '">'; //0.0.6
			} 
			var tdydate = new Date();
			if (gendatetddiv.format('m/d/Y')==tdydate.format('m/d/Y')){ 
				dviewbody+='<div id="' + this.calx.id + '-day' + (i+1)+ '" iddate="' +  gendatetddiv.format('m/d/Y')+ '" class="currentday">';//0.0.6 
			} else { 
				dviewbody+='<div id="' + this.calx.id + '-day' + (i+1)+ '" iddate="' +  gendatetddiv.format('m/d/Y')+ '" class="basegridweek">';//0.0.6
			} 
			if (this.style=='plain'){ 
				var tasksinday = this.getWeekTasks(gendatetddiv,2); 
			} else { 
				var tasksinday = this.getWeekTasks(gendatetddiv,1); 
			}
			if (tasksinday.length==0){ 
				dviewbody+='<div id="containeronday" class="containeronday">'; 
				dviewbody+='&nbsp;'; 
				dviewbody+='</div>'; 
			} else { 
				dviewbody+='<div id="containeronday" class="containeronday">'; 
				for (var j=0; j<tasksinday.length;j++){
					var fch_starts = new Date(tasksinday[j][this.calx.fieldsRefer.startdate]); //0.0.11
					var fch_ends   = new Date(tasksinday[j][this.calx.fieldsRefer.enddate]); //0.0.11
					// creates the task html with properties on render function will be processed for drag drop and resizable 
					var qtiptext =''; 
					if (this.task_showqtip){ 
						// added on 0.0.4 
						var datatip = {starxl:   e2cs.cal_locale.task_qtip_starts,
						   	   startval: fch_starts.format(this.task_format),
						       endxl:    e2cs.cal_locale.task_qtip_ends, 
						       endval:   fch_ends.format(this.task_format),
						       details:  tasksinday[j][this.calx.fieldsRefer.description]};		//0.0.11	   
						var newqtip = this.calx.tplTaskTip.apply(datatip);
						qtiptext= 'ext:qtitle="' + tasksinday[j][this.calx.fieldsRefer.subject] + '" ext:qtip="' +  newqtip + '"';  //0.0.11	
					} 
					var colorbackgr =''; 
					if (tasksinday[j][this.calx.fieldsRefer.color]){ 				//0.0.11
						colorbackgr=tasksinday[j][this.calx.fieldsRefer.color];   	//0.0.11
					} else {
						colorbackgr	= this.task_bgcolor_base; 
					} 
//					if (Ext.isOpera){
//						dviewbody+='<div id="eventowner">'; 	
//					} 
					// class="taskonday"
					dviewbody+= '<div id="' + this.calx.id + '-ecal-daytask-' + this.taskelements + '" style="background-color:' + colorbackgr +  '" '; //0.0.6
					//dviewbody+= '<div id="ecal-daytask-' + this.taskelements + '" style="background-color:' + colorbackgr +  '" ';  bug 0.0.4  					
					dviewbody+= qtiptext; 
					dviewbody+= 'ec_id="' + tasksinday[j][this.calx.fieldsRefer.id]   + '" ec_starts="' + tasksinday[j][this.calx.fieldsRefer.startdate] + '"';  //0.0.11
					dviewbody+= 'ec_ends="' + tasksinday[j][this.calx.fieldsRefer.enddate] + '" ec_subject="' + tasksinday[j][this.calx.fieldsRefer.subject] + '"';//0.0.11
					dviewbody+= 'ec_cnt="' + tasksinday[j][this.calx.fieldsRefer.description] + '" ec_storeindex="' + j + '">' + tasksinday[j][this.calx.fieldsRefer.subject] + '</div>';//0.0.11
					//sample : <div class="xxtarea" id="xxtarea2" style="background-color:#FF9999">Prueba de Tarea 2 chihuahuarifachido</div>
//					if (Ext.isOpera){
//						dviewbody+='</div>'; 
//					} 
					this.taskelements+=1; 
				} 
				dviewbody+='</div>'; 
			}
			dviewbody+='</div></td>'; 
		} 
		dviewbody+='</tr></table></div></div>'; 
		return dviewbody; 
	}
	

});
