1 |
/* --- Swazz Javascript Calendar --- |
---|
2 |
/* --- v 1.0 3rd November 2006 |
---|
3 |
By Oliver Bryant |
---|
4 |
http://calendar.swazz.org */ |
---|
5 |
|
---|
6 |
function getObj(objID) |
---|
7 |
{ |
---|
8 |
if (document.getElementById) {return document.getElementById(objID);} |
---|
9 |
else if (document.all) {return document.all[objID];} |
---|
10 |
else if (document.layers) {return document.layers[objID];} |
---|
11 |
} |
---|
12 |
|
---|
13 |
function checkClick(e) { |
---|
14 |
e?evt=e:evt=event; |
---|
15 |
CSE=evt.target?evt.target:evt.srcElement; |
---|
16 |
if (getObj('fc')) |
---|
17 |
if (!isChild(CSE,getObj('fc'))) |
---|
18 |
getObj('fc').style.display='none'; |
---|
19 |
} |
---|
20 |
|
---|
21 |
function isChild(s,d) { |
---|
22 |
while(s) { |
---|
23 |
if (s==d) |
---|
24 |
return true; |
---|
25 |
s=s.parentNode; |
---|
26 |
} |
---|
27 |
return false; |
---|
28 |
} |
---|
29 |
|
---|
30 |
function Left(obj) |
---|
31 |
{ |
---|
32 |
var curleft = 0; |
---|
33 |
if (obj.offsetParent) |
---|
34 |
{ |
---|
35 |
while (obj.offsetParent) |
---|
36 |
{ |
---|
37 |
curleft += obj.offsetLeft |
---|
38 |
obj = obj.offsetParent; |
---|
39 |
} |
---|
40 |
} |
---|
41 |
else if (obj.x) |
---|
42 |
curleft += obj.x; |
---|
43 |
return curleft; |
---|
44 |
} |
---|
45 |
|
---|
46 |
function Top(obj) |
---|
47 |
{ |
---|
48 |
var curtop = 0; |
---|
49 |
if (obj.offsetParent) |
---|
50 |
{ |
---|
51 |
while (obj.offsetParent) |
---|
52 |
{ |
---|
53 |
curtop += obj.offsetTop |
---|
54 |
obj = obj.offsetParent; |
---|
55 |
} |
---|
56 |
} |
---|
57 |
else if (obj.y) |
---|
58 |
curtop += obj.y; |
---|
59 |
return curtop; |
---|
60 |
} |
---|
61 |
|
---|
62 |
document.write('<table id="fc" style="position:absolute;border-collapse:collapse;background:#FFFFFF;border:1px solid #ABABAB;display:none" cellpadding=2>'); |
---|
63 |
document.write('<tr><td style="cursor:pointer" onclick="csubm()"><img src="js/cal/arrowleftmonth.gif"></td><td colspan=5 id="mns" align="center" style="font:bold 13px Arial"></td><td align="right" style="cursor:pointer" onclick="caddm()"><img src="js/cal/arrowrightmonth.gif"></td></tr>'); |
---|
64 |
document.write('<tr><td align=center style="background:#ABABAB;font:12px Arial">S</td><td align=center style="background:#ABABAB;font:12px Arial">M</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">W</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">F</td><td align=center style="background:#ABABAB;font:12px Arial">S</td></tr>'); |
---|
65 |
for(var kk=1;kk<=6;kk++) { |
---|
66 |
document.write('<tr>'); |
---|
67 |
for(var tt=1;tt<=7;tt++) { |
---|
68 |
num=7 * (kk-1) - (-tt); |
---|
69 |
document.write('<td id="v' + num + '" style="width:18px;height:18px"> </td>'); |
---|
70 |
} |
---|
71 |
document.write('</tr>'); |
---|
72 |
} |
---|
73 |
document.write('</table>'); |
---|
74 |
|
---|
75 |
document.all?document.attachEvent('onclick',checkClick):document.addEventListener('click',checkClick,false); |
---|
76 |
|
---|
77 |
|
---|
78 |
// Calendar script |
---|
79 |
var now = new Date; |
---|
80 |
var sccm=now.getMonth(); |
---|
81 |
var sccy=now.getFullYear(); |
---|
82 |
var ccm=now.getMonth(); |
---|
83 |
var ccy=now.getFullYear(); |
---|
84 |
|
---|
85 |
var updobj; |
---|
86 |
function lcs(ielem) { |
---|
87 |
updobj=ielem; |
---|
88 |
getObj('fc').style.left=Left(ielem); |
---|
89 |
getObj('fc').style.top=Top(ielem)+ielem.offsetHeight; |
---|
90 |
getObj('fc').style.display=''; |
---|
91 |
|
---|
92 |
// First check date is valid |
---|
93 |
curdt=ielem.value; |
---|
94 |
curdtarr=curdt.split('/'); |
---|
95 |
isdt=true; |
---|
96 |
for(var k=0;k<curdtarr.length;k++) { |
---|
97 |
if (isNaN(curdtarr[k])) |
---|
98 |
isdt=false; |
---|
99 |
} |
---|
100 |
if (isdt&(curdtarr.length==3)) { |
---|
101 |
ccm=curdtarr[1]-1; |
---|
102 |
ccy=curdtarr[2]; |
---|
103 |
prepcalendar(curdtarr[0],curdtarr[1]-1,curdtarr[2]); |
---|
104 |
} |
---|
105 |
|
---|
106 |
} |
---|
107 |
|
---|
108 |
function evtTgt(e) |
---|
109 |
{ |
---|
110 |
var el; |
---|
111 |
if(e.target)el=e.target; |
---|
112 |
else if(e.srcElement)el=e.srcElement; |
---|
113 |
if(el.nodeType==3)el=el.parentNode; // defeat Safari bug |
---|
114 |
return el; |
---|
115 |
} |
---|
116 |
function EvtObj(e){if(!e)e=window.event;return e;} |
---|
117 |
function cs_over(e) { |
---|
118 |
evtTgt(EvtObj(e)).style.background='#FFCC66'; |
---|
119 |
} |
---|
120 |
function cs_out(e) { |
---|
121 |
evtTgt(EvtObj(e)).style.background='#C4D3EA'; |
---|
122 |
} |
---|
123 |
function cs_click(e) { |
---|
124 |
updobj.value=calvalarr[evtTgt(EvtObj(e)).id.substring(1,evtTgt(EvtObj(e)).id.length)]; |
---|
125 |
getObj('fc').style.display='none'; |
---|
126 |
|
---|
127 |
} |
---|
128 |
|
---|
129 |
var mn=new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'); |
---|
130 |
var mnn=new Array('31','28','31','30','31','30','31','31','30','31','30','31'); |
---|
131 |
var mnl=new Array('31','29','31','30','31','30','31','31','30','31','30','31'); |
---|
132 |
var calvalarr=new Array(42); |
---|
133 |
|
---|
134 |
function f_cps(obj) { |
---|
135 |
obj.style.background='#C4D3EA'; |
---|
136 |
obj.style.font='10px Arial'; |
---|
137 |
obj.style.color='#333333'; |
---|
138 |
obj.style.textAlign='center'; |
---|
139 |
obj.style.textDecoration='none'; |
---|
140 |
obj.style.border='1px solid #6487AE'; |
---|
141 |
obj.style.cursor='pointer'; |
---|
142 |
} |
---|
143 |
|
---|
144 |
function f_cpps(obj) { |
---|
145 |
obj.style.background='#C4D3EA'; |
---|
146 |
obj.style.font='10px Arial'; |
---|
147 |
obj.style.color='#ABABAB'; |
---|
148 |
obj.style.textAlign='center'; |
---|
149 |
obj.style.textDecoration='line-through'; |
---|
150 |
obj.style.border='1px solid #6487AE'; |
---|
151 |
obj.style.cursor='default'; |
---|
152 |
} |
---|
153 |
|
---|
154 |
function f_hds(obj) { |
---|
155 |
obj.style.background='#FFF799'; |
---|
156 |
obj.style.font='bold 10px Arial'; |
---|
157 |
obj.style.color='#333333'; |
---|
158 |
obj.style.textAlign='center'; |
---|
159 |
obj.style.border='1px solid #6487AE'; |
---|
160 |
obj.style.cursor='pointer'; |
---|
161 |
} |
---|
162 |
|
---|
163 |
// day selected |
---|
164 |
function prepcalendar(hd,cm,cy) { |
---|
165 |
now=new Date(); |
---|
166 |
sd=now.getDate(); |
---|
167 |
td=new Date(); |
---|
168 |
td.setDate(1); |
---|
169 |
td.setFullYear(cy); |
---|
170 |
td.setMonth(cm); |
---|
171 |
cd=td.getDay(); |
---|
172 |
getObj('mns').innerHTML=mn[cm]+ ' ' + cy; |
---|
173 |
marr=((cy%4)==0)?mnl:mnn; |
---|
174 |
for(var d=1;d<=42;d++) { |
---|
175 |
f_cps(getObj('v'+parseInt(d))); |
---|
176 |
if ((d >= (cd -(-1))) && (d<=cd-(-marr[cm]))) { |
---|
177 |
dip=((d-cd < sd)&&(cm==sccm)&&(cy==sccy)); |
---|
178 |
htd=((hd!='')&&(d-cd==hd)); |
---|
179 |
if (dip) |
---|
180 |
f_cpps(getObj('v'+parseInt(d))); |
---|
181 |
else if (htd) |
---|
182 |
f_hds(getObj('v'+parseInt(d))); |
---|
183 |
else |
---|
184 |
f_cps(getObj('v'+parseInt(d))); |
---|
185 |
|
---|
186 |
getObj('v'+parseInt(d)).onmouseover=(dip)?null:cs_over; |
---|
187 |
getObj('v'+parseInt(d)).onmouseout=(dip)?null:cs_out; |
---|
188 |
getObj('v'+parseInt(d)).onclick=(dip)?null:cs_click; |
---|
189 |
|
---|
190 |
getObj('v'+parseInt(d)).innerHTML=d-cd; |
---|
191 |
calvalarr[d]=''+(d-cd)+'/'+(cm-(-1))+'/'+cy; |
---|
192 |
} |
---|
193 |
else { |
---|
194 |
getObj('v'+d).innerHTML=' '; |
---|
195 |
getObj('v'+parseInt(d)).onmouseover=null; |
---|
196 |
getObj('v'+parseInt(d)).onmouseout=null; |
---|
197 |
getObj('v'+parseInt(d)).style.cursor='default'; |
---|
198 |
} |
---|
199 |
} |
---|
200 |
} |
---|
201 |
|
---|
202 |
prepcalendar('',ccm,ccy); |
---|
203 |
//getObj('fc'+cc).style.visibility='hidden'; |
---|
204 |
|
---|
205 |
function caddm() { |
---|
206 |
marr=((ccy%4)==0)?mnl:mnn; |
---|
207 |
|
---|
208 |
ccm+=1; |
---|
209 |
if (ccm>=12) { |
---|
210 |
ccm=0; |
---|
211 |
ccy++; |
---|
212 |
} |
---|
213 |
cdayf(); |
---|
214 |
prepcalendar('',ccm,ccy); |
---|
215 |
} |
---|
216 |
|
---|
217 |
function csubm() { |
---|
218 |
marr=((ccy%4)==0)?mnl:mnn; |
---|
219 |
|
---|
220 |
ccm-=1; |
---|
221 |
if (ccm<0) { |
---|
222 |
ccm=11; |
---|
223 |
ccy--; |
---|
224 |
} |
---|
225 |
cdayf(); |
---|
226 |
prepcalendar('',ccm,ccy); |
---|
227 |
} |
---|
228 |
|
---|
229 |
function cdayf() { |
---|
230 |
if ((ccy>sccy)|((ccy==sccy)&&(ccm>=sccm))) |
---|
231 |
return; |
---|
232 |
else { |
---|
233 |
ccy=sccy; |
---|
234 |
ccm=sccm; |
---|
235 |
cfd=scfd; |
---|
236 |
} |
---|
237 |
} |
---|