/*
 *+------------------------------------------------------------------------+
 *| Licensed Materials - Property of IBM
 *| BI and PM: prmt
 *| (C) Copyright IBM Corp. 2002, 2020
 *|
 *| US Government Users Restricted Rights - Use, duplication or
 *| disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 *|
 *+------------------------------------------------------------------------+
*/


/**
	@class
	@private
*/
cognos.Prompt.Control.Date = cognos.Prompt.Control.f_extend({

	f_initialize: function( v_oProps ) {
		this[K_PRMT_LABEL_RANGE_LOWEST] = PMT_RNG_EARLIEST_DATE;
		this[K_PRMT_LABEL_RANGE_HIGHEST] = PMT_RNG_LATEST_DATE;

		this._type_ = "cognos.Prompt.Control.Date";
		this.f_parent( v_oProps ); // call parent's initialize()

		if ( this["@selectDateUI"] )
		{
			this["@selectUI"] = this["@selectDateUI"];
		}

		if ( !this["@startOfWeek"] )
		{
			this["@startOfWeek"] = "1";
		}
		this["@startOfWeek"] = parseInt(this["@startOfWeek"], 10);

		this.m_bDisabled = false;

		this.f_initCompleted();
	},

	checkData: function()
	{
		// We keep a reference to the parent function
		// Calling this.m_oFrom functions seems to have a side effect on this.f_parent().
		var v_fnParent = this.f_parent;
		this.m_bValid = this.m_oControl.m_bValid;

		this.f_parent = v_fnParent; // call parent's checkData using saved reference.
		this.f_parent(); // call parent's checkData using saved reference.
		return this.m_bValid;
	},

	clearValues: function() {
		this.f_parent();
		this.f_setDate( (""+new Date()) );
	},

	f_drawCompleted: function()
	{
		// We keep a reference to the parent function
		// Calling this.m_oFrom.f_drawCompleted seems to have a side effect on this.f_parent().
		var v_fnParent = this.f_parent;

		var v_chk = $(this.f_getId( "chkAnyValue" ));
		if ( v_chk )
		{
			PRMTUtils.f_addEvent( v_chk, "click", this.f_toggleDisable.bind(this) );
		}

		var v_iStartOfWeek = 0;
		switch( this["@startOfWeek"] )
		{
			case "Monday": iStartDay = 1; break;
			case "Tuesday": iStartDay = 2; break;
			case "Wednesday": iStartDay = 3; break;
			case "Thursday": iStartDay = 4; break;
			case "Friday": iStartDay = 5; break;
			case "Saturday": iStartDay = 6; break;
		}

		var v_oControl = new CDatePicker(
			null, //oSubmit,
			$( this.f_getId( "_Date" ) ), //oForm,
			$( this.f_getId( this["@selectUI"] == "editBox" ? "txtDate" : "_Date" ) ), //oEditBox,
			$( this.f_getId("dialogDatePicker") ), //oDialog,
			this.f_getId(), //sRef,
			this["@defaultDate"], //sDefaultDate,
			(this["@selectUI"] == "editBox" ? 0 : 1), //iInline,
			(this["@calendar"] == "Imperial" ? 1 : 0), //iType,
			this["@inputOrder"], //sInputOrder,
			v_iStartOfWeek,
			(this["@DateTime"] ? 0 : 1), //iDateTimeType,
			this["@firstDate"], //sFirstDate,
			this["@lastDate"], //sLastDate,
			this.isRequired(), //bRequired,
			null, //sSubmitType,
			null, //oImgCheck,
			this["CVId"]
		);

		var v_aDO = this.f_getCV().datePickerObserverArray;
		if (v_aDO) {
			v_aDO.push( v_oControl );
		}

		var v_oDatePicker = v_oControl.m_oDatePickerDialog;

		var v_el = $( this.f_getId("txtDate") );
		if ( v_el )
		{
			PRMTUtils.f_addEvent( v_el, "keyup", v_oControl.checkDate.bind(v_oControl, v_el) );
			PRMTUtils.f_addEvent( v_el, "keypress", v_oControl.keyPress.bind(v_oControl, v_el) );
			PRMTUtils.f_addEvent( v_el, "focus", v_oControl.gotFocus.bind(v_oControl) );
			PRMTUtils.f_addEvent( v_el, "blur", v_oControl.lostFocus.bind(v_oControl) );
			
			// link a11y label if it exists using FOR
			var v_a11yLabel = $( this.f_getId("PRMT_LBL_") );
			if ( v_a11yLabel && !v_a11yLabel.getAttribute("for")) {
				v_a11yLabel.setAttribute("for", v_el.id);
			}
		}

		v_el = $( this.f_getId("myYear") );
		if ( v_el )
		{
			PRMTUtils.f_addEvent( v_el, "keyup", v_oDatePicker.checkYear.bind(v_oDatePicker, v_el) );
			PRMTUtils.f_addEvent( v_el, "keypress", this.f_setDateFromEditBox.bind(v_oDatePicker) );
			PRMTUtils.f_addEvent( v_el, "blur", v_oDatePicker.lostFocus.bind(v_oDatePicker) );
		}

		PRMTUtils.f_addEvent( $( this.f_getId("btnYearDown") ), "click", v_oDatePicker.yearDown.bind(v_oDatePicker) );
		PRMTUtils.f_addEvent( $( this.f_getId("btnYearUp") ), "click", v_oDatePicker.yearUp.bind(v_oDatePicker) );
		PRMTUtils.f_addEvent( $( this.f_getId("btnYearDown") ), "keypress", v_oDatePicker.yearDown.bind(v_oDatePicker) );
		PRMTUtils.f_addEvent( $( this.f_getId("btnYearUp") ), "keypress", v_oDatePicker.yearUp.bind(v_oDatePicker) );
		if (window.ie)
		{
			PRMTUtils.f_addEvent( $( this.f_getId("btnYearDown") ), "dblclick", v_oDatePicker.yearDown.bind(v_oDatePicker) );
			PRMTUtils.f_addEvent( $( this.f_getId("btnYearUp") ), "dblclick", v_oDatePicker.yearUp.bind(v_oDatePicker) );
		}

		for ( var v_idxMonth = 0; v_idxMonth < 12; v_idxMonth++ )
		{
			PRMTUtils.f_addEvent( $( this.f_getId() + "m" + v_idxMonth ), "mousedown", v_oDatePicker.newMonth.bind(v_oDatePicker, v_idxMonth) );
			PRMTUtils.f_addEvent( $( this.f_getId() + "m" + v_idxMonth ), "keypress", v_oDatePicker.newMonth.bind(v_oDatePicker, v_idxMonth) );
		}

		for ( var v_idxRow = 0; v_idxRow < 6; v_idxRow++ )
		{
			for (v_idxCol = 0; v_idxCol < 7; v_idxCol++)
			{
				v_el = $( this.f_getId() + "r" + v_idxRow + "c" + v_idxCol );
				if ( v_el ) {
					PRMTUtils.f_addEvent( v_el, "mousedown", v_oDatePicker.newDay.bind(v_oDatePicker, v_el) );
				}
			}
		}

		v_el = $( this.f_getId("imgPicker") );
		if ( v_el )
		{
			PRMTUtils.f_addEvent( v_el, "click", v_oControl.toggleDialogDatePicker.bind(v_oControl, v_el) );
			PRMTUtils.f_addEvent( v_el, "keypress", v_oControl.toggleDialogDatePicker.bind(v_oControl, v_el) );
		}

		v_oControl.m_oParent = this;
		this.m_oControl = v_oControl;

		this.f_parent = v_fnParent; // call parent's f_drawCompleted using saved reference.
		this.f_parent(); // call parent's f_drawCompleted using saved reference.

		this.checkData();

		if ( this[K_PRMT_sATTR_DISABLED] )
		{
			this.f_setEnabled( false );
		}
	}
});

/**
 * Getter for range inputId
 * rangeInputId used by range label to associate the label (From/To) to the input when there are not radio buttons
 * 
 */
cognos.Prompt.Control.Date.prototype.f_getRangeInputId = function() { 
	return (this["@selectUI"] == "editBox" ? this.f_getId("txtDate") : null); //this.f_getId("dialogDatePickerTable"));
}

/**
	Compare values. See {@link cognos.Prompt.Control#f_compare} for details.
	@see cognos.Prompt.Control#f_compare
	@private
	@return {Integer}
*/
cognos.Prompt.Control.Date.prototype.f_compare = function( v_oValue )
{
	var v_iRetval = 1;
	if ( v_oValue )
	{
		// Strips out time part.
		var v_dThis = this.m_oControl.m_oForm.value.split("T");
		v_dThis = dParseDate( v_dThis[0], "YMD" );

		var v_dCompareTo = v_oValue.m_oControl.m_oForm.value.split("T");
		v_dCompareTo = dParseDate( v_dCompareTo[0], "YMD" );

		var v_iThis = v_dThis.getTime();
		var v_iCompareTo = v_dCompareTo.getTime();

		if ( v_iCompareTo > v_iThis )
		{
			v_iRetval = -1;
		}
		else if ( v_iCompareTo == v_iThis )
		{
			v_iRetval = 0;
		}
	}
	return v_iRetval;
};

/**
	Sets the JavaScript references used by custom scripts based on generated code from Blaring and before.
	(Custom Scripts Workaround)
	@private
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_CSW_init = function()
{
	this.f_CSW_createJSObject( "pickerControl", this.m_oControl );
	this.f_CSW_SetFormElement("txtDate", $(this.f_getId("txtDate")));
};

/**
	Renders the TD cell for days in the calendar.
	@private
	@param {C_PromptElement} v_el Container (TR element).
	@param {Integer} v_idxRow Row index.
	@param {Integer} v_idxCol Column index.
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_drawDay = function( v_el, v_idxRow, v_idxCol )
{
	// TODO: selectDateDaysStyle
	var v_td = $CE( "td", {
		"id": this.f_getId() + "r" + v_idxRow + "c" + v_idxCol,
		"nowrap": "nowrap",
		"class": "clsSelectDateDays pd"
		}, v_el );
	v_td.f_appendText(K_PRMT_sEMPTY);
};

/**
	Render the UI for days in the calendar.
	@private
	@param {C_PromptElement} v_el Container.
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_drawDays = function( v_el )
{
	var v_tbl = $CE( "table", {
		"border": K_PRMT_DEBUG_TABLEBORDER,
		"cellSpacing": 0,
		"width": "100%",
		"align": "center",
		"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el );
	var v_tbd = $CE( "tbody", {}, v_tbl );

	var v_idxCol = 0;
	var v_tr = $CE( "tr", {}, v_tbd );
	for (v_idxCol = 0; v_idxCol < 7; v_idxCol++)
	{
		this.f_drawWeekDay( v_tr, v_idxCol );
	}
	for ( var v_idxRow = 0; v_idxRow < 6; v_idxRow++ )
	{
		var v_tr = $CE( "tr", {}, v_tbd );
		for (v_idxCol = 0; v_idxCol < 7; v_idxCol++)
		{
			this.f_drawDay( v_tr, v_idxRow, v_idxCol );
		}
	}
};

/**
	Render the edit box when calendar is set as an EditBox.
	@private
	@param {C_PromptElement} v_el Container.
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_drawEditBox = function( v_el )
{
	var v_tbl = $CE( "table", { "border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0, "role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el );
	var v_tbd = $CE( "tbody", {}, v_tbl );
	var v_tr = $CE( "tr", {}, v_tbd );
	var v_td = $CE( "td", {}, v_tr );

	// TODO: selectDateEditBoxStyle
	var v_ipt = $CE( "input", {
		"type": "text",
		"class": "clsSelectDateEditBox pt",
		"aria-required": (this.isRequired() ? "true" : "false"),
		"id": this.f_getId("txtDate"),
		"value": K_PRMT_sEMPTY }, v_td );

	v_td = $CE( "td", {}, v_tr );

	var v_img = $CE( "img", {
		"id": this.f_getId("imgPicker"),
		"src": this.m_sSkin + "/prompting/images/icon_datepicker.gif",
		"height": 20,
		"width": 25,
		"class": "clsToolbarButton",
		"onmouseover": "buttonOver(this)",
		"onmouseout": "buttonOut(this)",
		"onmousedown": "buttonOver(this)",
		"vAlign": "top",
		"style": "padding:0px;height:20px;",
		"alt":"",
		"title":"",
		"tabindex": "0",
		"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_td );
};

/**
	Render the Date control.
	@private
	@param {C_PromptElement} v_el Container.
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_drawInput = function( v_el )
{
	$CE("input", {"type": "hidden", "id": this.f_getId("_Date"), "value": this["@defaultDate"]}, v_el );

	var v_tbl = null;
	var v_tbd = null;
	var v_tr = null;
	var v_td = null;
	if ( this["@selectDateUI"] != "editBox" && !this.isRequired() && !this["@suppressDisabled"] && !(this.m_bIsAComponent || this["@multiSelect"]) )
	{
		v_tbl = $CE( "table", {"border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0,"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el );
		v_tbd = $CE( "tbody", {}, v_tbl );
		v_tr = $CE( "tr", {}, v_tbd );
		v_td = $CE( "td", {"vAlign": "top"}, v_tr );

		var v_bDisabled = (this.isEmptyReprompt() || (this[K_PRMT_sATTR_DISABLED] === true));
		var v_oChbox_attr = {
			"type": "checkbox",
			"value": "anyValue",
			"id": this.f_getId( "chkAnyValue" ),
			"name": this.f_getId( "chkAnyValue" )};
		if (!v_bDisabled) {
			v_oChbox_attr.checked = true;
		}
		$CE( "input", v_oChbox_attr, v_td );

		this.m_bDisabled = v_bDisabled;

		v_el = $CE( "td", {"vAlign": "top"}, v_tr );
	}

	var v_sCalendarClass = "clsSelectDateCalendar";
	if( this["@selectUI"] == "editBox" )
	{
		v_sCalendarClass = "clsSelectDateCalendarDialog";
		this.f_drawEditBox( v_el );
	}

	var v_oDivPickerInitData = {
		"id": this.f_getId( "dialogDatePicker" ),
		"style": ( this["@selectUI"] == "editBox" ? "display:none" : K_PRMT_sEMPTY )
		};
	var v_oCV = this.f_getCV();
	if (v_oCV && v_oCV.getId) {
		v_oDivPickerInitData["namespaceId"] = v_oCV.getId();
	}
	var v_divPicker = $CE( "div", v_oDivPickerInitData, v_el );

	v_tbl = $CE( "table", { "id": this.f_getId( "dialogDatePickerTable" ), "border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0, "class": v_sCalendarClass }, v_divPicker );
	v_tbd = $CE( "tbody", {}, v_tbl );
	v_tr = $CE( "tr", {}, v_tbd );
	v_td = $CE( "td", {"vAlign": "top"}, v_tr );

	this.f_drawYear( v_td );
	this.f_drawMonths( v_td );
	this.f_drawDays( v_td );

	// ensure that calendar appears on top of select controls
	var v_ifrmInitData = {
		"id": this.f_getId( "pickerControl" ) + "iframe",
		"style": "position:absolute;display:none;height:0px;width:0px;",
		"src": this.m_sSkin + "/prompting/images/spacer.gif",
		"title":"blank"
	};
	if (v_oCV && v_oCV.getId) {
		v_ifrmInitData["namespaceId"] = v_oCV.getId();
	}
	var v_ifrm = $CE( "iframe", v_ifrmInitData, v_el);
	v_ifrm.f_appendText(K_PRMT_sEMPTY);
};

/**
	Check if is a reprompt(this.c exists) and in case of a reprompt if the reprompt has data(a date)
	When a date control is optional, has a Calendar UI the user can decide not to submit the date, in
	that case the reprompt won't contain data.
	@private
	@return {boolean}
*/
cognos.Prompt.Control.Date.prototype.isEmptyReprompt = function()
{
	var result =  false;
	if ((typeof this.c) != K_PRMT_sUNDEFINED) {
		// it's a reprompt
		var v_c = this.c;
		// [{n:'selectChoices',c:[{n:'selectOption',"@useValue":"2010-01-14","@displayValue":"Jan 14, 2010"}]}]  => not empty(value.n =='selectOption' || [{n:'selectChoices'}] => empty(value.n == 'selectChoices')
		if ( v_c.length && v_c[0].n && v_c[0].n == "selectChoices") {
			var v_c_value = cognos.Value.getValue( this.c );
			if (v_c_value.n && v_c_value.n == "selectChoices") result = true;
		}
	}
	return result;
};

/**
	Render a Month cell.
	@private
	@param {C_PromptElement} v_el Container (an TR cell).
	@param {Integer} v_idx Index for the current month cell.
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_drawMonth = function( v_el, v_idx )
{
	// TODO: selectDateMonthsStyle
	var v_td = $CE( "td", {
		"id": this.f_getId() + "m" + v_idx,
		"nowrap": "nowrap",
		"class": "clsSelectDateMonths pm"
		}, v_el );
	v_td.f_appendText( sGetMonth(v_idx) );
};

/**
	Render Months cells.
	@private
	@param {C_PromptElement} v_el Container.
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_drawMonths = function( v_el )
{
	var v_tbl = $CE( "table", {
		"border": K_PRMT_DEBUG_TABLEBORDER,
		"cellPadding": 2,
		"cellSpacing": 0,
		"width": "100%",
		"align": "center",
		"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el );
	var v_tbd = $CE( "tbody", {}, v_tbl );
	var v_idx;
	for ( var v_iRows = 0; v_iRows < 2; v_iRows++ )
	{
		var v_tr = $CE( "tr", {}, v_tbd );
		for (v_idx = 0; v_idx < 6; v_idx++)
		{
			this.f_drawMonth( v_tr, (v_iRows*6)+v_idx );
		}
	}
};

/**
	@private
*/
cognos.Prompt.Control.Date.prototype.f_drawWeekDay = function( v_el, v_idx )
{
	// TODO: selectDateDaysOfWeekStyle
	var v_td = $CE( "td", {
		"id": this.f_getId() + "d" + v_idx,
		"nowrap": "nowrap",
		"class": "clsSelectDateDaysOfWeek pw"
		}, v_el );
	v_td.f_appendText( sGetDay( (v_idx + this["@startOfWeek"] - 1) % 7 ) );
};

/**
	@private
*/
cognos.Prompt.Control.Date.prototype.f_drawYear = function ( v_el )
{
	// Top
	var v_tbl = $CE( "table", {
		"border": K_PRMT_DEBUG_TABLEBORDER, "cellPadding": 0, "cellSpacing": 0,
		"class": "clsSelectDateDialogTopTable",
		"align": "center",
		"width": "100%",
		"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_el );
	var v_tbd = $CE( "tbody", {}, v_tbl );
	// TODO: selectDateYearsStyle
	var v_tr = $CE( "tr", {"class": "clsSelectDateYears"}, v_tbd );
	var v_td = $CE( "td", {}, v_tr );

	var v_sCustomDir = cssParser( this["@style"], "direction", true );
	var v_FinalDir = ((v_sCustomDir == "ltr" || v_sCustomDir == "rtl") ? v_sCustomDir : PRMT_BidiUtils.lookupDirection($( this.f_getId(this.m_sDivPrefix) )));
	if (!v_FinalDir) {
		v_FinalDir = "ltr";
	}
	var v_img = $CE( "img", {
		"id": this.f_getId( "btnYearDown" ),
		"class" : (v_FinalDir == "ltr" ? "clsBtnYearDown" : "clsBtnYearUp"),
		"src": this.m_sSkin + "/prompting/images/icon_year_down.gif",
		"vAlign": "top",
		"tabindex": "0",
		"width": "15",
		"class": "clsToolbarButton",
		"onmouseover": "buttonOver(this)",
		"onmouseout": "buttonOut(this)",
		"onmousedown": "buttonOver(this)",
		"title":"",
		"alt":"",
		"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_td );

	v_td = $CE( "td", {
		"width": "100%",
		"align": "center" }, v_tr );

	var v_ipt = $CE( "input", {
		"id": this.f_getId( "myYear" ),
		"class": "clsSelectDateYearEditBox pcl",
        "aria-label" : PMT_DTP_DATE_YEAR_ENTRY_FIELD,
		"aria-required": (this.isRequired() ? "true" : "false"),
		"size": "8",
		"onkeydown": "return (event.keyCode!=13);",
		"type": "text" }, v_td );

	v_td = $CE( "td", {}, v_tr );

	v_img = $CE( "img", {
		"id": this.f_getId( "btnYearUp" ),
		"class" : (v_FinalDir == "ltr" ? "clsBtnYearUp" : "clsBtnYearDown"),
		"src": this.m_sSkin + "/prompting/images/icon_year_up.gif",
		"vAlign": "top",
		"tabindex": "0",
		"width": "15",
		"align": "right",
		"class": "clsToolbarButton",
		"onmouseover": "buttonOver(this)",
		"onmouseout": "buttonOut(this)",
		"onmousedown": "buttonOver(this)",
		"title":"",
		"alt":"",
		"role":K_PRMT_ARIA_ROLE_PRESENTATION}, v_td );
};

/**
	@private
	@return {cognos.Value}
*/
cognos.Prompt.Control.Date.prototype.f_getPV = function()
{
	var v_oControl = this.m_oControl;
	var v_sUse = v_oControl.sGetValue();

	if ( this.m_bIsRangeEndControl && this["@DateTime"])
	{
		v_sUse = v_sUse.replace( K_PRMT_reTIMEPART, K_PRMT_sTIME_MAX );
	}
	// skip handle notify if getPV got triggered by getValues 
	if (v_oControl.handleNotify && (!this.m_bisGetValuesCall) )
	{
		v_oControl.handleNotify();
	}

	return (
		this.m_bDisabled || !v_sUse ?
			null :
			{ "use": v_sUse, "display": v_oControl.sGetFormatValue() }
	);
};

/**
	@private
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_setDate = function( v_sDate )
{
	this.m_oControl.setValue( v_sDate );
};

/**
	@private
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_setDateFromEditBox = function(e)
{
	// 'this' is a CDatePickerDialog object
	this.keyPress( e.keyCode );
	var v_oParent = this.m_oParentControl;
	v_oParent.checkDate( v_oParent.m_oEditBox );
};

/**
	@private
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_setEnabled = function( v_bState )
{
	var v_oControl = this.m_oControl;
	if ( v_bState ) {
		v_oControl.enable();
		PRMTUtils.f_removeClass( $( this.f_getId( "dialogDatePickerTable" ) ), K_PRMT_sCLS_DISABLED );
	}
	else {
		v_oControl.disable();
		PRMTUtils.f_addClass( $( this.f_getId( "dialogDatePickerTable" ) ), K_PRMT_sCLS_DISABLED );
	}
};

/**
	@private
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_setPV = function( v_oPV )
{
	var v_sValue = v_oPV["use"];
	if ( v_sValue )
	{
		var v_aValues = v_sValue.split(new RegExp("[T\\s]"));

		if ( v_aValues.length > 2 )
		{
			for ( var v_idx = 1; v_idx < v_aValues.length - 1; v_idx++ )
			{
				// add all Date parts to the first element.
				v_aValues[0] += K_PRMT_sSP + (v_aValues[v_idx]).f_trim();
			}
			v_aValues[0] = v_aValues[0].f_trim();

			// move Time part (last value) in slot 1
			v_aValues[1] = v_aValues[ v_aValues.length - 1];
		}
		if ( v_aValues.length >= 1 )
		{
			this.f_setDate( v_aValues[0] );
		}
	}
};

/**
	@private
	@return {void}
*/
cognos.Prompt.Control.Date.prototype.f_toggleDisable = function()
{
	var v_bState = this.m_bDisabled;
	this.f_setEnabled( v_bState );
	this.m_bDisabled = !v_bState;
};

/**
	@private
	@return {boolean}
*/
cognos.Prompt.Control.Date.prototype.hasValue = function()
{
	return (this.m_bValid);
};

var C_Date = cognos.Prompt.Control.Date; // Keep old reference for backward compatibility with custom scripts.