/*
- * (c) 2005-2009 Richard Cowin (http://openrico.org)
- * (c) 2005-2009 Matt Brown (http://dowdybrown.com)
+ * (c) 2005-2011 Richard Cowin (http://openrico.org)
+ * (c) 2005-2011 Matt Brown (http://dowdybrown.com)
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the License at
initialize: function(id,options) {
this.id=id;
var today=new Date();
+ this.defaultMin = new Date(today.getFullYear()-50,0,1);
+ this.defaultMax = new Date(today.getFullYear()+50,11,31);
Rico.extend(this, new Rico.Popup());
Rico.extend(this.options, {
ignoreClicks:true,
showWeekNumber : 0,
showToday : 1,
dateFmt : 'ISO8601',
- minDate : new Date(today.getFullYear()-50,0,1),
- maxDate : new Date(today.getFullYear()+50,11,31)
+ minDate : this.defaultMin,
+ maxDate : this.defaultMax
});
Rico.extend(this.options, options || {});
- /**
- * alias for closePopup
- * @function
- */
- this.close=this.closePopup;
this.bPageLoaded=false;
- this.img=[];
this.Holidays={};
this.re=/^\s*(\w+)(\W)(\w+)(\W)(\w+)/i;
this.setDateFmt(this.options.dateFmt);
+ var self=this;
+ Rico.onLoad(function() { self.atLoad(); })
},
Rico.addClass(this.content, Rico.theme.calendar || 'ricoCalContainer');
this.direction=Rico.direction(this.container);
- var r,c,i,j,img,dow,a,s,tab;
+ var r,c,i,j,dow,a,s,tab;
this.colStart=this.options.showWeekNumber ? 1 : 0;
var colcnt=7+this.colStart
this.maintab=document.createElement("table");
this.maintab.border=0;
this.maintab.style.borderCollapse='separate';
this.maintab.className=Rico.theme.calendarTable || 'ricoCalTab';
- this.tbody=Rico.getTBody(this.maintab);
- this.tbody.className='ricoCalBody';
+
+ // thead (Navigation controls)
this.thead=this.maintab.createTHead();
r=this.thead.insertRow(-1);
this.heading=r.insertCell(-1);
this.heading.colSpan=colcnt;
+ //this.heading=this.content.appendChild(document.createElement("div"));
+ this.heading.className='RicoCalHeading';
+ if (Rico.theme.calendarHeading) Rico.addClass(this.heading,Rico.theme.calendarHeading)
+
+ // table footer (today)
+ if (this.options.showToday) {
+ this.tfoot=this.maintab.createTFoot();
+ this.tfoot.className='ricoCalFoot';
+ r=this.tfoot.insertRow(-1);
+ this.todayCell=r.insertCell(-1);
+ this.todayCell.colSpan=colcnt;
+ this.todayCell.className=Rico.theme.calendarFooter || 'ricoCalFoot';
+ Rico.eventBind(this.todayCell,"click", Rico.eventHandle(this,'selectNow'), false);
+ }
+
+ this.tbody=Rico.getTBody(this.maintab);
+ this.tbody.className='ricoCalBody';
this.content.style.display='block';
if (this.position == 'absolute') {
this.maintab.style.width='100%';
}
- // Navigation controls
- //this.heading=this.content.appendChild(document.createElement("div"));
- this.heading.className='RicoCalHeading';
- if (Rico.theme.calendarHeading) Rico.addClass(this.heading,Rico.theme.calendarHeading)
- this.navtab=this.heading.appendChild(document.createElement("table"));
- this.navrow=this.navtab.insertRow(-1);
- this._createTitleSection('Month');
- this.navrow.insertCell(-1).innerHTML=" ";
- this._createTitleSection('Year');
- new Rico.HoverSet(this.heading.getElementsByTagName('a'));
- if (this.position == 'absolute') this.heading.appendChild(Rico.closeButton(Rico.eventHandle(this,'close')));
-
this.styles=[];
for (i=0; i<7; i++) {
r=this.tbody.insertRow(-1);
}
}
- // table footer (today)
- if (this.options.showToday) {
- this.tfoot=this.maintab.createTFoot();
- this.tfoot.className='ricoCalFoot';
- r=this.tfoot.insertRow(-1);
- this.todayCell=r.insertCell(-1);
- this.todayCell.colSpan=colcnt;
- this.todayCell.className=Rico.theme.calendarFooter || 'ricoCalFoot';
- Rico.eventBind(this.todayCell,"click", Rico.eventHandle(this,'selectNow'), false);
- }
this.content.appendChild(this.maintab);
new Rico.HoverSet(this.tbody.getElementsByTagName('td'),{ hoverNodes: function(e) { return e.innerHTML.match(/^\d+$/) ? [e] : []; } });
+
+ this.navtab=this.heading.appendChild(document.createElement("table"));
+ this.navrow=this.navtab.insertRow(-1);
+ this._createTitleSection('Month');
+ this.navrow.insertCell(-1).innerHTML=" ";
+ this._createTitleSection('Year');
+ new Rico.HoverSet(this.heading.getElementsByTagName('a'));
+ if (this.position == 'absolute') this.heading.appendChild(Rico.closeButton(Rico.eventHandle(this,'close')));
// month selector
this.monthPopup=new Rico.Popup(document.createElement("div"),{shim:false,zIndex:10});
this.yearPopup=new Rico.Popup(document.createElement("div"),{shim:false,zIndex:10});
this.yearPopup.content.className='ricoCalYearPrompt';
if (Rico.theme.calendarPopdown) Rico.addClass(this.yearPopup.content,Rico.theme.calendarPopdown);
- var p1=document.createElement("p");
- p1.innerHTML=Rico.getPhraseById("calYearRange",this.options.minDate.getFullYear(),this.options.maxDate.getFullYear());
+ this.yearPrompt=document.createElement("p");
+ this.yearPrompt.innerHTML=" ";
var p2=document.createElement("p");
this.yearInput=p2.appendChild(document.createElement("input"));
this.yearInput.maxlength=4;
p2.appendChild(a);
a=Rico.floatButton('Cancel', Rico.eventHandle(this,'popDownYear'));
p2.appendChild(a);
- this.yearPopup.content.appendChild(p1);
+ this.yearPopup.content.appendChild(this.yearPrompt);
this.yearPopup.content.appendChild(p2);
this.container.appendChild(this.yearPopup.container);
this.yearPopup.closePopup();
}
Rico.eventBind(this.tbody,"click", Rico.eventHandle(this,'saveAndClose'));
- this.close();
this.bPageLoaded=true;
},
var c=this.navrow.insertCell(-1);
var a=c.appendChild(document.createElement("a"));
a.className='Rico_'+arrows[0]+'Arrow';
- a.appendChild(this.createNavArrow('dec'+section,arrows[0]));
+ a.appendChild(this._createNavArrow(arrows[0]));
+ Rico.eventBind(a,"click", Rico.eventHandle(this,'dec'+section), false);
c=this.navrow.insertCell(-1);
a=c.appendChild(document.createElement("a"));
c=this.navrow.insertCell(-1);
a=c.appendChild(document.createElement("a"));
a.className='Rico_'+arrows[1]+'Arrow';
- a.appendChild(this.createNavArrow('inc'+section,arrows[1]));
+ a.appendChild(this._createNavArrow(arrows[1]));
+ Rico.eventBind(a,"click", Rico.eventHandle(this,'inc'+section), false);
},
+ _createNavArrow: function(direction) {
+ var span=document.createElement("span");
+ span.className=Rico.theme[direction+'Arrow'] || 'rico-icon Rico_'+direction+'Arrow';
+ span.style.display="inline-block";
+ return span;
+ },
+
selectNow : function() {
var today = new Date();
this.dateNow = today.getDate();
this.constructCalendar();
},
-/** @private */
- createNavArrow: function(funcname,direction) {
- var span=document.createElement("span");
- span.className=Rico.theme[direction+'Arrow'] || 'rico-icon Rico_'+direction+'Arrow';
- span.style.display="inline-block";
- Rico.eventBind(span,"click", Rico.eventHandle(this,funcname), false);
- return span;
- },
-
/**
* @returns true if yr/mo is within minDate/MaxDate
*/
return true;
},
- incMonth : function() {
+ incMonth : function(e) {
+ if (e) Rico.eventStop(e);
var newMonth=this.monthSelected+1;
var newYear=this.yearSelected;
if (newMonth>11) {
this.constructCalendar();
},
- decMonth : function() {
+ decMonth : function(e) {
+ if (e) Rico.eventStop(e);
var newMonth=this.monthSelected-1;
var newYear=this.yearSelected;
if (newMonth<0) {
return false;
}
this.popDownMonth();
+ this.yearPrompt.innerHTML=Rico.getPhraseById("calYearRange",this.options.minDate.getFullYear(),this.options.maxDate.getFullYear());
this.yearInput.disabled=false;
this.yearInput.value=''; // this.yearSelected
this.openYrMo(this.yearPopup,1);
}
},
- incYear : function() {
+ incYear : function(e) {
+ if (e) Rico.eventStop(e);
if (this.yearSelected>=this.options.maxDate.getFullYear()) return;
this.yearSelected++;
this.constructCalendar();
},
- decYear : function() {
+ decYear : function(e) {
+ if (e) Rico.eventStop(e);
if (this.yearSelected<=this.options.minDate.getFullYear()) return;
this.yearSelected--;
this.constructCalendar();
c.style.visibility='hidden';
},
+ close: function(e) {
+ if (e) Rico.eventStop(e);
+ this.closePopup();
+ },
+
/** @private */
saveAndClose : function(e) {
Rico.eventStop(e);
var dateStr=Rico.formatDate(d,this.dateFmt=='ISO8601' ? 'yyyy-mm-dd' : this.dateFmt);
if (this.returnValue) {
this.returnValue(dateStr);
- this.close();
+ this.closePopup();
}
},
- open : function(curval) {
+ open : function(curval,column) {
if (!this.bPageLoaded) return;
+ if (column) {
+ this.setDateFmt(column.format.dateFmt);
+ this.options.minDate=column.format.min || this.defaultMin;
+ this.options.maxDate=column.format.max || this.defaultMax;
+ }
var today = new Date();
this.dateNow = today.getDate();
this.monthNow = today.getMonth();