// 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;
	}
});

