var mixObject = {
    createPreview:function(containingDiv, labelText, callback){
		require([ "dojo/dom-construct", "dojo/dom-class", "dojo/dom-style", "dijit/Calendar"], this.lang.hitch(this, function(domConstruct, domClass, domStyle, Calendar){
			this.context.coachViewData.containingDiv = containingDiv;
			domClass.add(this.context.coachViewData.containingDiv, "BPMWYSIWYG");
			
			this.context.coachViewData.onClickDTPNode = this.context.coachViewData.containingDiv.querySelector(".showCalendarNever.showCalendarOnClick");
			this.context.coachViewData.inlineDTPNode = this.context.coachViewData.containingDiv.querySelector(".showCalendarInline");
			this.context.coachViewData.calendarParentNode = this.context.coachViewData.containingDiv.querySelector(".showCalendarInline .inlineCalendarNode");
			this.context.coachViewData.calendarNode = this.context.coachViewData.containingDiv.querySelector(".showCalendarInline .inlineCalendarNode > div");
			this.context.coachViewData.calendarImageNode = this.context.coachViewData.containingDiv.querySelector(".calImage");
			
			var calendarImageURL = require.toUrl("dojo/resources/blank.gif");
			if(!!calendarImageURL){
				this.context.coachViewData.calendarImageNode.src = calendarImageURL;
			}
			domStyle.set(this.context.coachViewData.onClickDTPNode, "display", "");
			domStyle.set(this.context.coachViewData.inlineDTPNode, "display", "none");
			
			this.context.coachViewData.tpNodeA = this.context.coachViewData.containingDiv.querySelector(".showCalendarNever.showCalendarOnClick .dijitTimeTextBox");
			this.context.coachViewData.tpNodeB = this.context.coachViewData.containingDiv.querySelector(".showCalendarInline .timePickerContainer");
			
			domStyle.set(this.context.coachViewData.tpNodeA, "display", "none");
			domStyle.set(this.context.coachViewData.tpNodeB, "display", "none");
			
			domClass.add(this.context.coachViewData.onClickDTPNode, "BPMNoTimePicker");
			domClass.add(this.context.coachViewData.inlineDTPNode, "BPMNoTimePicker");
						
			this.coachViewImpl_rebuildCalendar = lang.hitch(this, function() {
				// first destroy the calendar if it exists
				if(!!this.context.coachViewData.calendar && !!this.context.coachViewData.calendar.domNode){
					this.context.coachViewData.calendar.destroy();
					this.context.coachViewData.calendarNode = document.createElement("div");
					this.context.coachViewData.calendarParentNode.appendChild(this.context.coachViewData.calendarNode);
				}
				
				var datePackage = ""; // default must be blank (dojox.date.gregorian doesn't work)
				if(this.context.coachViewData.calendarType == "islamic")
					datePackage = "dojox.date.islamic";
				else if(this.context.coachViewData.calendarType == "hebrew")
					datePackage = "dojox.date.hebrew";
			
				if(this.context.coachViewData.showCalendar == "inline") {
					domStyle.set(this.context.coachViewData.onClickDTPNode, "display", "none");
					domStyle.set(this.context.coachViewData.calendarParentNode, "display", "inline-block");
					domStyle.set(this.context.coachViewData.inlineDTPNode, "display", "");
					this.context.coachViewData.calendar = new Calendar({datePackage:datePackage}, this.context.coachViewData.calendarNode);
					domClass.add(this.context.coachViewData.calendar.domNode, "dijitInline");
				} else {
					domStyle.set(this.context.coachViewData.onClickDTPNode, "display", "");
					domStyle.set(this.context.coachViewData.inlineDTPNode, "display", "none");
				}
			});

			
			callback();
		}));	
    },
    propertyChanged:function(propertyName, propertyValue){
		var configHelperUri = this.context.getManagedAssetUrl("ConfigHelper.js",this.context.assetType_WEB);
		require([ "dojo/dom-construct", "dojo/dom-class", "dojo/dom-style", configHelperUri], this.lang.hitch(this, function(domConstruct, domClass, domStyle, configHelper){
			if(propertyName == "includeTimePicker" && propertyValue){
				domStyle.set(this.context.coachViewData.tpNodeA, "display", "");
				domStyle.set(this.context.coachViewData.tpNodeB, "display", "inline-block");
			
				domClass.remove(this.context.coachViewData.onClickDTPNode, "BPMNoTimePicker");
				domClass.remove(this.context.coachViewData.inlineDTPNode, "BPMNoTimePicker");
			} else if(propertyName == "includeTimePicker" && !propertyValue){
				domStyle.set(this.context.coachViewData.tpNodeA, "display", "none");
				domStyle.set(this.context.coachViewData.tpNodeB, "display", "none");
			
				domClass.add(this.context.coachViewData.onClickDTPNode, "BPMNoTimePicker");
				domClass.add(this.context.coachViewData.inlineDTPNode, "BPMNoTimePicker");
			} else if(propertyName == "showCalendar"){
				this.context.coachViewData.showCalendar = propertyValue;
				this.coachViewImpl_rebuildCalendar();
			} else if(propertyName == "calendarType") {
				this.context.coachViewData.calendarType = propertyValue;
				this.coachViewImpl_rebuildCalendar();
			} else if(propertyName == "@style"){
				var width = configHelper.getResponsiveConfigOptionValue(this, "@width");
				var minWidth = configHelper.getResponsiveConfigOptionValue(this, "@minWidth");
				if(width != undefined || minWidth != undefined) {
					domClass.add(this.context.coachViewData.onClickDTPNode, "BPMCVHorzStretch");
					domClass.add(this.context.coachViewData.inlineDTPNode, "BPMCVHorzStretch");
				} else {
					domClass.remove(this.context.coachViewData.onClickDTPNode, "BPMCVHorzStretch");
					domClass.remove(this.context.coachViewData.inlineDTPNode, "BPMCVHorzStretch");
				}
			}
			
		}));	
    }
};