dojo.provide("epages.widget.Timeselector");
dojo.require("epages.localize");
dojo.require("epages.widget");
dojo.require("dojo.date");
dojo.declare(
"epages.widget.Timeselector",
[dijit._Widget, dijit._Templated],
{
/**
* public properties
*/
templatePath : dojo.moduleUrl("epages.widget", "templates/Timeselector.html"),
delta: '5', // String - increment is 5 minutes by default
value: '',
_selected: undefined,
valuePattern: epages.vars.Locale.datetimeFormat || "%d.%m.%y %H:%M", // String - epages datetime pattern
displayPattern: epages.vars.Locale.timeFormat || "%H:%M", // String - epages time pattern
postMixInProperties: function() {
// create dojo datetime pattern
if (typeof this.value == 'string'){
this.value = epages.localize.parseDateTime(this.value, this.valuePattern);
}
if (typeof this.delta == 'string'){
this.delta = new Number(this.delta);
}
if (this.delta<=0){
this.delta=30;
}
},
postCreate: function() {
this.inherited('postCreate', arguments);
var date = this.value;
this.value = null;
this.setValue('value',date);
},
getValue: function() {
// summary:
// returns the value as a date object, day is 1970-01-01
return this.value;
},
setValue: function(/*Date*/date) {
if (date === undefined){
date = new Date();
}else if (typeof date == "string"){
date = epages.localize.parseDateTime(date, this.valuePattern);
}
if(!this.value || dojo.date.compare(date, this.value)){
this.value = new Date(date);
this.fillTimes(date);
this.domNode.value = date == null ? undefined : date.valueOf();
}
if(this.value){
this.dateNode.innerHTML = epages.localize.formatDateTime(this.value);
}
},
fillTimes: function (date) {
// summary: fill new options
var date = new Date(this.value);
date.setHours(0,0,0,0);
this.dateNode.innerHTML = epages.localize.formatDateTime(date);
var end = dojo.date.add(date, 'day', 1);
var dates = [];
while (date<end) {
dates.push(date);
date = dojo.date.add(date,'minute',this.delta);
}
this.setTimes(dates);
},
setTimes: function (opts) {
this.dateNode.innerHTML = epages.localize.formatDateTime(this.value);
var node = this.timesNode;
// remove children
while(node.firstChild){ node.removeChild(node.firstChild); }
// add new options
var lastCompare = undefined;
var selected = false;
var alternate = 0;
dojo.forEach(opts, function (date) {
o=document.createElement("div");
o.innerHTML = epages.localize.formatDateTime(date, this.displayPattern);
o.setAttribute('value',date.valueOf());
if (!dojo.date.compare(this.value, date)){
dojo.addClass(o,'Selected');
this._selected = o;
selected = true;
}
if(lastCompare == 1 && dojo.date.compare(this.value, date) == -1){
dojo.addClass(o,'Selected');
this._selected = o;
this.value = date;
selected = true;
}
lastCompare = dojo.date.compare(this.value, date);
if(alternate){
dojo.addClass(o,'Alternate');
}
node.appendChild(o);
this.connect(o,'onclick', 'onChange');
alternate=1-alternate;
}, this);
if(selected == false && lastCompare){
if(lastCompare == 1){
node.lastChild.selected = true;
dojo.addClass(node.lastChild,'Selected');
this._selected = node.lastChild;
this.value = opts[opts.length-1];
}
else{
dojo.addClass(node.firstChild,'Selected');
this._selected = node.firstChild;
node.firstChild.selected = true;
this.value = opts[0];
}
}
},
onChange: function (evt) {
var target = evt.currentTarget;
dojo.removeClass(this._selected,'Selected');
dojo.addClass(target,'Selected');
this._selected = target;
this.value = new Date(Number(target.getAttribute('value')));
dojo.publish(this.id + '/onChange', [this.value]);
}
}
);