this.bPageLoaded=false;
this.img=[];
this.Holidays={};
- this.weekString=Rico.getPhraseById("calWeekHdg");
this.re=/^\s*(\w+)(\W)(\w+)(\W)(\w+)/i;
this.setDateFmt(this.options.dateFmt);
},
this.container.id=this.id;
}
Rico.addClass(this.content, Rico.theme.calendar || 'ricoCalContainer');
- this.content.style.display='block'; // override jquery ui
-
- // 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)
- var monthHdg=this._createTitleSection('Month');
- this.heading.appendChild(monthHdg);
- this.heading.appendChild(this._createTitleSection('Year'));
- new Rico.HoverSet(this.heading.getElementsByTagName('a'));
- if (this.position == 'absolute') this.heading.appendChild(Rico.closeButton(Rico.eventHandle(this,'close')));
+ this.direction=Rico.direction(this.container);
+ var r,c,i,j,img,dow,a,s,tab;
+ this.colStart=this.options.showWeekNumber ? 1 : 0;
+ var colcnt=7+this.colStart
this.maintab=document.createElement("table");
this.maintab.cellSpacing=2;
this.maintab.cellPadding=0;
this.maintab.border=0;
this.maintab.style.borderCollapse='separate';
- this.maintab.className='ricoCalTab';
- if (Rico.theme.calendarTable) Rico.addClass(this.maintab,Rico.theme.calendarTable)
+ this.maintab.className=Rico.theme.calendarTable || 'ricoCalTab';
this.tbody=Rico.getTBody(this.maintab);
+ this.tbody.className='ricoCalBody';
+ this.thead=this.maintab.createTHead();
+ r=this.thead.insertRow(-1);
+ this.heading=r.insertCell(-1);
+ this.heading.colSpan=colcnt;
- var r,c,i,j,img,dow,a,s,tab;
- this.colStart=this.options.showWeekNumber ? 1 : 0;
+ this.content.style.display='block';
+ if (this.position == 'absolute') {
+ this.content.style.width='auto';
+ this.maintab.style.width='auto';
+ } else {
+ this.container.style.position='relative';
+ this.heading.style.position='static'; // fixes issue with ie7
+ this.content.style.padding='0px';
+ this.content.style.width='15em';
+ 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);
- r.className='row'+i;
- for (c=0; c<7+this.colStart; c++) {
- r.insertCell(-1);
+ r.className=i==0 ? 'ricoCalDayNames' : 'row'+i;
+ if (this.options.showWeekNumber) {
+ c=r.insertCell(-1);
+ c.className='ricoCalWeekNum';
+ if (i==0) c.innerHTML=Rico.getPhraseById("calWeekHdg");
}
- }
- r=this.tbody.rows[0];
- r.className='ricoCalDayNames';
- if (this.options.showWeekNumber) {
- r.cells[0].innerHTML=this.weekString;
- for (i=0; i<7; i++) {
- this.tbody.rows[i].cells[0].className='ricoCalWeekNum';
+ for (j=0; j<7; j++) {
+ c=r.insertCell(-1);
+ if (i==0) {
+ dow=(j+this.options.startAt) % 7;
+ c.innerHTML=Rico.dayAbbr(dow);
+ this.styles[j]='ricoCal'+dow;
+ } else {
+ c.className=this.styles[j];
+ if (Rico.theme.calendarDay) Rico.addClass(c,Rico.theme.calendarDay);
+ }
}
}
- this.styles=[];
- for (i=0; i<7; i++) {
- dow=(i+this.options.startAt) % 7;
- r.cells[i+this.colStart].innerHTML=Rico.dayAbbr(dow);
- this.styles[i]='ricoCal'+dow;
- }
// 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=7+this.colStart;
- if (Rico.theme.calendarFooter) Rico.addClass(this.todayCell,Rico.theme.calendarFooter);
+ 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] : []; } });
// month selector
- this.monthPopup=new Rico.Popup(document.createElement("div"));
- this.monthPopup.closePopup();
+ this.monthPopup=new Rico.Popup(document.createElement("div"),{shim:false,zIndex:10});
+ this.monthPopup.content.className='ricoCalMonthPrompt';
tab=document.createElement("table");
tab.className='ricoCalMenu';
if (Rico.theme.calendarPopdown) Rico.addClass(tab,Rico.theme.calendarPopdown);
new Rico.HoverSet(tab.getElementsByTagName('a'));
this.monthPopup.content.appendChild(tab);
this.container.appendChild(this.monthPopup.container);
+ this.monthPopup.closePopup();
// year selector
- this.yearPopup=new Rico.Popup(document.createElement("div"));
- this.yearPopup.closePopup();
+ 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");
this.yearPopup.content.appendChild(p1);
this.yearPopup.content.appendChild(p2);
this.container.appendChild(this.yearPopup.container);
- this.yearPopup.container.style.left='';
- this.yearPopup.container.style.right='5px';
- this.yearPopup.container.style.zIndex=10;
+ this.yearPopup.closePopup();
// fix anchors so they work in IE6
a=this.content.getElementsByTagName('a');
},
_createTitleSection : function(section) {
- var s=document.createElement("span");
- s.className='RicoCal'+section+'Heading';
- if (Rico.theme.calendarSubheading) Rico.addClass(s,Rico.theme.calendarSubheading);
-
- var a=s.appendChild(document.createElement("a"));
- a.className='Rico_leftArrow';
- a.appendChild(this.createNavArrow('dec'+section,'left'));
+ var arrows=['left','right'];
+ if (this.direction=='rtl') arrows.reverse();
+ 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]));
- var a=s.appendChild(document.createElement("a"));
+ c=this.navrow.insertCell(-1);
+ a=c.appendChild(document.createElement("a"));
Rico.eventBind(a,"click", Rico.eventHandle(this,'popUp'+section), false);
this['title'+section]=a;
- a=s.appendChild(document.createElement("a"));
- a.className='Rico_rightArrow';
- a.appendChild(this.createNavArrow('inc'+section,'right'));
- return s
+ 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]));
},
selectNow : function() {
this.constructCalendar();
Rico.eventStop(e);
},
+
+ // position: 0=left, 1=right
+ openYrMo : function(popup,position) {
+ if (this.direction=='rtl') position=1-position;
+ popup.openPopup();
+ var left=position ? this.content.offsetWidth - popup.container.offsetWidth - 5 : 3;
+ popup.move(left, this.heading.offsetHeight+2);
+ },
popUpMonth : function(e) {
Rico.eventStop(e);
if (this.monthPopup.visible()) {
this.popDownMonth();
- return;
+ return false;
}
this.popDownYear();
- if (Rico.isIE && Rico.ieVersion < 7) {
- // fix position absolute inside container without hasLayout
- this.monthPopup.openPopup(null, this.heading.offsetHeight+2);
- this.monthPopup.container.style.left='';
- } else {
- this.monthPopup.openPopup(3, this.heading.offsetHeight+2);
- }
+ this.openYrMo(this.monthPopup,0);
return false;
},
Rico.eventStop(e);
if (this.yearPopup.visible()) {
this.popDownYear();
- return;
+ return false;
}
this.popDownMonth();
this.yearInput.disabled=false;
this.yearInput.value=''; // this.yearSelected
- this.yearPopup.openPopup(null, this.heading.offsetHeight+2);
+ this.openYrMo(this.yearPopup,1);
var self=this;
setTimeout(function() { self.yearInput.focus(); }, 10); // ie8 has issues without this delay
return false;
c.style.color=h ? h.txtColor : '';
c.style.backgroundColor=h ? h.bgColor : '';
c.title=h ? h.desc : '';
+ c.style.visibility='visible';
if (colnum==6) r++;
}
while (dayPointer<42) {
/** @private */
resetCell: function(c) {
c.innerHTML=" ";
- c.className='ricoCalEmpty';
- c.style.color='';
- c.style.backgroundColor='';
c.title='';
+ c.style.visibility='hidden';
},
/** @private */