You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
5.3 KiB

if(typeof(bobj) == "undefined") bobj = {};
if(typeof(bobj.prompt) == "undefined") bobj.prompt = {};
bobj.prompt.Calendar = function(formName,dateFormat,locale,promptJsFilePrefix) {
this.locale = locale;
this.crystalreportviewerPath = promptJsFilePrefix + '/../';
this.loadFiles();
this.formName = formName;
this.dateFormat = dateFormat;
this.dateTimeFormat = dateFormat + " " + "H:mm:ss";
this.isDateTime = false;
}
bobj.prompt.Calendar.prototype = {
/*
* shows calendar for the specified input
* @param e [event]
* @param inputName [DOM element] The node that will receive the calendar value
*/
show : function(e,inputName) {
this.calendar = bobj.crv.Calendar.getInstance();
this.input = document.getElementById (inputName);
var srcElem = e.target ? e.target : e.srcElement;
var pos = this._getPosition(srcElem);
this._setValue(this.input.value);
this._setSignals(true); // sets OK, and cancel event handlers
this.calendar.setShowTime(this.isDateTime);
this.calendar.show(true,pos.x,pos.y);
},
setIsDateTime : function(isDateTime) {
this.isDateTime = isDateTime;
},
_getPosition : function(element) {
var scrolled = {x : 0, y : 0};
var offset = {x : 0, y : 0};
var e = element;
while(e != null) {
offset.x += e.offsetLeft;
offset.y += e.offsetTop;
e = e.offsetParent;
}
var e = element;
while(e != null && e.tagName.toLowerCase() != "body") {
/* Removes scrolling offset inside the dialog as calendar's position is with respect to top/left corner of window.
Excludes scroll position of body as calendar is rendered relative to window
*/
scrolled.x += e.scrollLeft;
scrolled.y += e.scrollTop;
e = e.parentNode;
}
return { x: offset.x - scrolled.x, y : offset.y - scrolled.y};
},
_setValue : function(value) {
var date = this._getDateValue(value);
if(!date) {
date = new Date();
}
this.calendar.setDate(date);
},
_onOkayClick : function(dateValue) {
this._setFieldValue(dateValue);
},
_setFieldValue : function(dateValue) {
if(this.input) {
this.input.value = this._getStringValue(dateValue);
}
},
_onHide : function() {
this._removeSignals();
},
_getStringValue : function(dateValue) {
var format = this.isDateTime ? this.dateTimeFormat : this.dateFormat;
return bobj.external.date.formatDate(dateValue, format);
},
_getDateValue : function(stringValue) {
var format = this.isDateTime ? this.dateTimeFormat : this.dateFormat;
return bobj.external.date.getDateFromFormat(stringValue, format);
},
_setSignals: function(isConnected) {
var op = isConnected ? MochiKit.Signal.connect : MochiKit.Signal.disconnect;
op(this.calendar, this.calendar.Signals.OK_CLICK, this, '_onOkayClick');
op(this.calendar, this.calendar.Signals.ON_HIDE, this, '_onHide');
},
_removeSignals: function() {
this._setSignals(false);
},
loadJsResources : function() {
var resources = [
'js/external/date.js',
'js/MochiKit/Base.js',
'js/MochiKit/DOM.js',
'js/MochiKit/Style.js',
'js/MochiKit/Signal.js',
'js/dhtmllib/dom.js',
'prompting/js/initDhtmlLib.js',
'js/dhtmllib/palette.js',
'js/dhtmllib/menu.js',
'js/crviewer/html.js',
'js/crviewer/common.js',
'js/crviewer/Calendar.js'
]
for(var i = 0 ; i < resources.length; i++) {
this.loadJsFile(resources[i]);
}
},
loadJsFile : function(uri) {
document.write("<script src=\"" + this.crystalreportviewerPath + uri + "\" language=\"javascript\"></script>");
},
loadLocaleStrings: function() {
var localeFiles = [
'js/dhtmllib/language/en/labels.js',
'js/crviewer/strings_en.js'
]
var splitChar = '_'; // default to java's locale split character
if (this.locale.indexOf ('-') > 0)
splitChar = '-'; // must be .Net's locale split
var lang = this.locale.split(splitChar);
if(lang.length >= 1) {
localeFiles.push('js/dhtmllib/language/' + lang[0] + '/labels.js');
localeFiles.push('js/crviewer/strings_' + lang[0] + '.js');
}
if(lang.length >= 2) {
localeFiles.push('js/dhtmllib/language/' + lang[0] + '_' + lang[1] + '/labels.js');
localeFiles.push('js/crviewer/strings_' + lang[0] + '_' + lang[1] + '.js');
}
for (var i = 0; i < localeFiles.length; i++) {
this.loadJsFile(localeFiles[i]);
}
},
loadFiles : function() {
if(typeof(bobj.crv) == "undefined" || typeof(bobj.crv.Calendar) == "undefined") {
window["promptengine_skin"] = this.crystalreportviewerPath + "js/dhtmllib/images/skin_standard/";
window["promptengine_style"] = this.crystalreportviewerPath + "js/crviewer/images/";
window["promptengine_lang"] = this.locale;
this.loadLocaleStrings();
this.loadJsResources();
}
}
};