1//Javascript name: My Date Time Picker 2//Date created: 16-Nov-2003 23:19 3//Scripter: TengYong Ng 4//Website: http://www.rainforestnet.com 5//Copyright (c) 2003 TengYong Ng 6//FileName: DateTimePicker.js 7//Version: 0.8 8//Contact: [email protected] 9// Note: Permission given to use this script in ANY kind of applications if 10// header lines are left unchanged. 11 12//Global variables 13var winCal; 14var dtToday=new Date(); 15var Cal; 16var docCal; 17var MonthName=["January", "February", "March", "April", "May", "June","July", 18 "August", "September", "October", "November", "December"]; 19var WeekDayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; 20var exDateTime;//Existing Date and Time 21 22//Configurable parameters 23var cnTop="200";//top coordinate of calendar window. 24var cnLeft="500";//left coordinate of calendar window 25var WindowTitle ="DateTime Picker";//Date Time Picker title. 26var WeekChar=2;//number of character for week day. if 2 then Mo,Tu,We. if 3 then Mon,Tue,Wed. 27var CellWidth=20;//Width of day cell. 28var DateSeparator="/";//Date Separator, you can change it to "/" if you want. 29 30var TimeMode=24;//default TimeMode value. 12 or 24 31 32var ShowLongMonth=true;//Show long month name in Calendar header. example: "January". 33var ShowMonthYear=true;//Show Month and Year in Calendar header. 34var MonthYearColor="#cc0033";//Font Color of Month and Year in Calendar header. 35var WeekHeadColor="#D5DEF8";//Background Color in Week header. 36var SundayColor="#ccc";//Background color of Sunday. 37var SaturdayColor="#ccc";//Background color of Saturday. 38var WeekDayColor="#f5f5f5";//Background color of weekdays. 39var FontColor="#000";//color of font in Calendar day cell. 40var TodayColor="#FFFF33";//Background color of today. 41var SelDateColor="#FFFF99";//Backgrond color of selected date in textbox. 42var YrSelColor="#cc0033";//color of font of Year selector. 43var ThemeBg="";//Background image of Calendar window. 44//end Configurable parameters 45//end Global variable 46 47function NewCal(pCtrl,pFormat,pShowTime,pTimeMode) 48{ 49 Cal=new Calendar(dtToday); 50 if ((pShowTime!=null) && (pShowTime)) 51 { 52 Cal.ShowTime=true; 53 if ((pTimeMode!=null) &&((pTimeMode=='12')||(pTimeMode=='24'))) 54 { 55 TimeMode=pTimeMode; 56 } 57 } 58 if (pCtrl!=null) 59 Cal.Ctrl=pCtrl; 60 if (pFormat!=null) 61 Cal.Format=pFormat.toUpperCase(); 62 63 exDateTime=document.getElementById(pCtrl).value; 64 if (exDateTime!="")//Parse Date String 65 { 66 var Sp1;//Index of Date Separator 1 67 var Sp2;//Index of Date Separator 2 68 var tSp1;//Index of Time Separator 1 69 var tSp1;//Index of Time Separator 2 70 var strMonth; 71 var strDate; 72 var strYear; 73 var intMonth; 74 var YearPattern; 75 var strHour; 76 var strMinute; 77 var strSecond; 78 //parse month 79 Sp1=exDateTime.indexOf(DateSeparator,0) 80 Sp2=exDateTime.indexOf(DateSeparator,(parseInt(Sp1)+1)); 81 82 if ((Cal.Format.toUpperCase()=="DDMMYYYY") || (Cal.Format.toUpperCase()=="DDMMMYYYY")) 83 { 84 strMonth=exDateTime.substring(Sp1+1,Sp2); 85 strDate=exDateTime.substring(0,Sp1); 86 } 87 else if ((Cal.Format.toUpperCase()=="MMDDYYYY") || (Cal.Format.toUpperCase()=="MMMDDYYYY")) 88 { 89 strMonth=exDateTime.substring(0,Sp1); 90 strDate=exDateTime.substring(Sp1+1,Sp2); 91 } 92 if (isNaN(strMonth)) 93 intMonth=Cal.GetMonthIndex(strMonth); 94 else 95 intMonth=parseInt(strMonth,10)-1; 96 if ((parseInt(intMonth,10)>=0) && (parseInt(intMonth,10)<12)) 97 Cal.Month=intMonth; 98 //end parse month 99 //parse Date 100 if ((parseInt(strDate,10)<=Cal.GetMonDays()) && (parseInt(strDate,10)>=1)) 101 Cal.Date=strDate; 102 //end parse Date 103 //parse year 104 strYear=exDateTime.substring(Sp2+1,Sp2+5); 105 YearPattern=/^\d{4}$/; 106 if (YearPattern.test(strYear)) 107 Cal.Year=parseInt(strYear,10); 108 //end parse year 109 //parse time 110 if (Cal.ShowTime==true) 111 { 112 tSp1=exDateTime.indexOf(":",0) 113 tSp2=exDateTime.indexOf(":",(parseInt(tSp1)+1)); 114 strHour=exDateTime.substring(tSp1,(tSp1)-2); 115 Cal.SetHour(strHour); 116 strMinute=exDateTime.substring(tSp1+1,tSp2); 117 Cal.SetMinute(strMinute); 118 strSecond=exDateTime.substring(tSp2+1,tSp2+3); 119 Cal.SetSecond(strSecond); 120 } 121 } 122 winCal=window.open("","DateTimePicker","toolbar=0,status=0,menubar=0,fullscreen=no,width=195,height=245,resizable=0,top="+cnTop+",left="+cnLeft); 123 docCal=winCal.document; 124 RenderCal(); 125} 126
127function RenderCal() 128{ 129 var vCalHeader; 130 var vCalData; 131 var vCalTime; 132 var i; 133 var j; 134 var SelectStr; 135 var vDayCount=0; 136 var vFirstDay; 137 138 docCal.open(); 139 docCal.writeln("<html><head><title>"+WindowTitle+"</title>"); 140 docCal.writeln("<script>var winMain=window.opener;</script>"); 141 docCal.writeln("</head><body background='"+ThemeBg+"' link="+FontColor+" vlink="+FontColor+"><form name='Calendar'>"); 142 143 vCalHeader="<table border=0 cellpadding=3 cellspacing=1 width='100%' align=\"center\" valign=\"top\">\n"; 144 //Month Selector 145 vCalHeader+="<tr>\n<td colspan='7'><table border=0 width='100%' cellpadding=0 cellspacing=0><tr><td align='left'>\n"; 146 vCalHeader+="<select name=\"MonthSelector\" onChange=\"javascript:winMain.Cal.SwitchMth(this.selectedIndex);winMain.RenderCal();\">\n"; 147 for (i=0;i<12;i++) 148 { 149 if (i==Cal.Month) 150 SelectStr="Selected"; 151 else 152 SelectStr=""; 153 vCalHeader+="<option "+SelectStr+" value >"+MonthName[i]+"\n"; 154 } 155 vCalHeader+="</select></td>"; 156 //Year selector 157 vCalHeader+="\n<td align='right'><a href=\"javascript:winMain.Cal.DecYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\"><</font></b></a><font face=\"Verdana\" color=\""+YrSelColor+"\" size=2><b> "+Cal.Year+" </b></font><a href=\"javascript:winMain.Cal.IncYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\">></font></b></a></td></tr></table></td>\n"; 158 vCalHeader+="</tr>"; 159 //Calendar header shows Month and Year 160 if (ShowMonthYear) 161 vCalHeader+="<tr><td colspan='7'><font face='Verdana' size='2' align='center' color='"+MonthYearColor+"'><b>"+Cal.GetMonthName(ShowLongMonth)+" "+Cal.Year+"</b></font></td></tr>\n"; 162 //Week day header 163 vCalHeader+="<tr bgcolor="+WeekHeadColor+">"; 164 for (i=0;i<7;i++) 165 { 166 vCalHeader+="<td align='center'><font face='Verdana' size='2'>"+WeekDayName[i].substr(0,WeekChar)+"</font></td>"; 167 } 168 vCalHeader+="</tr>"; 169 docCal.write(vCalHeader); 170 171 //Calendar detail 172 CalDate=new Date(Cal.Year,Cal.Month); 173 CalDate.setDate(1); 174 vFirstDay=CalDate.getDay(); 175 vCalData="<tr>"; 176 for (i=0;i<vFirstDay;i++) 177 { 178 vCalData=vCalData+GenCell(); 179 vDayCount=vDayCount+1; 180 } 181 for (j=1;j<=Cal.GetMonDays();j++) 182 { 183 var strCell; 184 vDayCount=vDayCount+1;
185 if ((j==dtToday.getDate())&&(Cal.Month==dtToday.getMonth())&&(Cal.Year==dtToday.getFullYear())) 186 strCell=GenCell(j,true,TodayColor);//Highlight today's date 187 else 188 { 189 if (j==Cal.Date) 190 { 191 strCell=GenCell(j,true,SelDateColor); 192 } 193 else 194 { 195 if (vDayCount%7==0) 196 strCell=GenCell(j,false,SaturdayColor); 197 else if ((vDayCount+6)%7==0) 198 strCell=GenCell(j,false,SundayColor); 199 else 200 strCell=GenCell(j,null,WeekDayColor); 201 } 202 } 203 vCalData=vCalData+strCell; 204 205 if((vDayCount%7==0)&&(j<Cal.GetMonDays())) 206 { 207 vCalData=vCalData+"</tr>\n<tr>"; 208 } 209 } 210 docCal.writeln(vCalData); 211 //Time picker 212 if (Cal.ShowTime) 213 { 214 var showHour; 215 showHour=Cal.getShowHour(); 216 vCalTime="<tr>\n<td colspan='7' align='center'>"; 217 vCalTime+="<input type='text' name='hour' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+showHour+" onchange=\"javascript:winMain.Cal.SetHour(this.value)\">"; 218 vCalTime+=" : "; 219 vCalTime+="<input type='text' name='minute' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Minutes+" onchange=\"javascript:winMain.Cal.SetMinute(this.value)\">"; 220 vCalTime+=" : "; 221 vCalTime+="<input type='text' name='second' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Seconds+" onchange=\"javascript:winMain.Cal.SetSecond(this.value)\">"; 222 if (TimeMode==12) 223 { 224 var SelectAm =(parseInt(Cal.Hours,10)<12)? "Selected":""; 225 var SelectPm =(parseInt(Cal.Hours,10)>=12)? "Selected":""; 226 227 vCalTime+="<select name=\"ampm\" onchange=\"javascript:winMain.Cal.SetAmPm(this.options[this.selectedIndex].value);\">"; 228 vCalTime+="<option "+SelectAm+" value=\"AM\">AM</option>"; 229 vCalTime+="<option "+SelectPm+" value=\"PM\">PM<option>"; 230 vCalTime+="</select>"; 231 } 232 vCalTime+="\n</td>\n</tr>"; 233 docCal.write(vCalTime); 234 } 235 //end time picker 236 docCal.writeln("\n</table>"); 237 docCal.writeln("</form></body></html>"); 238 docCal.close(); 239} 240 241function GenCell(pValue,pHighLight,pColor)//Generate table cell with value 242{ 243 var PValue; 244 var PCellStr; 245 var vColor; 246 var vHLstr1;//HighLight string 247 var vHlstr2; 248 var vTimeStr; 249 250 if (pValue==null) 251 PValue=""; 252 else 253 PValue=pValue; 254 255 if (pColor!=null) 256 vColor="bgcolor=\""+pColor+"\""; 257 else 258 vColor=""; 259 if ((pHighLight!=null)&&(pHighLight)) 260 {vHLstr1="color='red'><b>";vHLstr2="</b>";} 261 else 262 {vHLstr1=">";vHLstr2="";} 263 264 if (Cal.ShowTime) 265 { 266 vTimeStr="winMain.document.getElementById('"+Cal.Ctrl+"').value+=' '+"+"winMain.Cal.getShowHour()"+"+':'+"+"winMain.Cal.Minutes"+"+':'+"+"winMain.Cal.Seconds"; 267 if (TimeMode==12) 268 vTimeStr+="+' '+winMain.Cal.AMorPM"; 269 } 270 else 271 vTimeStr=""; 272 PCellStr="<td "+vColor+" width="+CellWidth+" align='center'><font face='verdana' size='2'"+vHLstr1+"<a href=\"javascript:winMain.document.getElementById('"+Cal.Ctrl+"').value='"+Cal.FormatDate(PValue)+"';"+vTimeStr+";window.close();\">"+PValue+"</a>"+vHLstr2+"</font></td>"; 273 return PCellStr; 274} 275 276function Calendar(pDate,pCtrl) 277{ 278 //Properties 279 this.Date=pDate.getDate();//selected date 280 this.Month=pDate.getMonth();//selected month number 281 this.Year=pDate.getFullYear();//selected year in 4 digits 282 this.Hours=pDate.getHours(); 283 284 if (pDate.getMinutes()<10) 285 this.Minutes="0"+pDate.getMinutes(); 286 else 287 this.Minutes=pDate.getMinutes(); 288 289 if (pDate.getSeconds()<10) 290 this.Seconds="0"+pDate.getSeconds(); 291 else 292 this.Seconds=pDate.getSeconds(); 293 294 this.MyWindow=winCal; 295 this.Ctrl=pCtrl; 296 this.Format="ddMMyyyy"; 297 this.Separator=DateSeparator; 298 this.ShowTime=false; 299 if (pDate.getHours()<12) 300 this.AMorPM="AM"; 301 else 302 this.AMorPM="PM"; 303} 304 305function GetMonthIndex(shortMonthName) 306{ 307 for (i=0;i<12;i++) 308 { 309 if (MonthName[i].substring(0,3).toUpperCase()==shortMonthName.toUpperCase()) 310 { return i;} 311 } 312} 313Calendar.prototype.GetMonthIndex=GetMonthIndex; 314 315function IncYear() 316{ Cal.Year++;} 317Calendar.prototype.IncYear=IncYear; 318 319function DecYear() 320{ Cal.Year--;} 321Calendar.prototype.DecYear=DecYear; 322 323function SwitchMth(intMth) 324{ Cal.Month=intMth;} 325Calendar.prototype.SwitchMth=SwitchMth; 326 327function SetHour(intHour) 328{ 329 var MaxHour; 330 var MinHour; 331 if (TimeMode==24) 332 { MaxHour=23;MinHour=0} 333 else if (TimeMode==12) 334 { MaxHour=12;MinHour=1} 335 else 336 alert("TimeMode can only be 12 or 24"); 337 var HourExp=new RegExp("^\\d\\d$"); 338 if (HourExp.test(intHour) && (parseInt(intHour,10)<=MaxHour) && (parseInt(intHour,10)>=MinHour)) 339 { 340 if ((TimeMode==12) && (Cal.AMorPM=="PM")) 341 { 342 if (parseInt(intHour,10)==12) 343 Cal.Hours=12; 344 else 345 Cal.Hours=parseInt(intHour,10)+12; 346 } 347 else if ((TimeMode==12) && (Cal.AMorPM=="AM")) 348 { 349 if (intHour==12) 350 intHour-=12; 351 Cal.Hours=parseInt(intHour,10); 352 } 353 else if (TimeMode==24) 354 Cal.Hours=parseInt(intHour,10); 355 } 356} 357Calendar.prototype.SetHour=SetHour; 358 359function SetMinute(intMin) 360{ 361 var MinExp=new RegExp("^\\d\\d$"); 362 if (MinExp.test(intMin) && (intMin<60)) 363 Cal.Minutes=intMin; 364} 365Calendar.prototype.SetMinute=SetMinute; 366 367function SetSecond(intSec) 368{ 369 var SecExp=new RegExp("^\\d\\d$"); 370 if (SecExp.test(intSec) && (intSec<60)) 371 Cal.Seconds=intSec; 372} 373Calendar.prototype.SetSecond=SetSecond; 374 375function SetAmPm(pvalue) 376{ 377 this.AMorPM=pvalue; 378 if (pvalue=="PM") 379 { 380 this.Hours=(parseInt(this.Hours,10))+12; 381 if (this.Hours==24) 382 this.Hours=12; 383 } 384 else if (pvalue=="AM") 385 this.Hours-=12; 386} 387Calendar.prototype.SetAmPm=SetAmPm; 388
389function getShowHour() 390{ 391 var finalHour; 392 if (TimeMode==12) 393 { 394 if (parseInt(this.Hours,10)==0) 395 { 396 this.AMorPM="AM"; 397 finalHour=parseInt(this.Hours,10)+12; 398 } 399 else if (parseInt(this.Hours,10)==12) 400 { 401 this.AMorPM="PM"; 402 finalHour=12; 403 } 404 else if (this.Hours>12) 405 { 406 this.AMorPM="PM"; 407 if ((this.Hours-12)<10) 408 finalHour="0"+((parseInt(this.Hours,10))-12); 409 else 410 finalHour=parseInt(this.Hours,10)-12; 411 } 412 else 413 { 414 this.AMorPM="AM"; 415 if (this.Hours<10) 416 finalHour="0"+parseInt(this.Hours,10); 417 else 418 finalHour=this.Hours; 419 } 420 } 421 else if (TimeMode==24) 422 { 423 if (this.Hours<10) 424 finalHour="0"+parseInt(this.Hours,10); 425 else 426 finalHour=this.Hours; 427 } 428 return finalHour; 429} 430Calendar.prototype.getShowHour=getShowHour; 431 432function GetMonthName(IsLong) 433{ 434 var Month=MonthName[this.Month]; 435 if (IsLong) 436 return Month; 437 else 438 return Month.substr(0,3); 439} 440Calendar.prototype.GetMonthName=GetMonthName; 441 442function GetMonDays()//Get number of days in a month 443{ 444 var DaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 445 if (this.IsLeapYear()) 446 { 447 DaysInMonth[1]=29; 448 } 449 return DaysInMonth[this.Month]; 450} 451Calendar.prototype.GetMonDays=GetMonDays; 452 453function IsLeapYear() 454{ 455 if ((this.Year%4)==0) 456 { 457 if ((this.Year%100==0) && (this.Year%400)!=0) 458 { 459 return false; 460 } 461 else 462 { 463 return true; 464 } 465 } 466 else 467 { 468 return false; 469 } 470} 471Calendar.prototype.IsLeapYear=IsLeapYear; 472 473function FormatDate(pDate) 474{ 475 if (this.Format.toUpperCase()=="DDMMYYYY") 476 return (pDate+DateSeparator+(this.Month+1)+DateSeparator+this.Year); 477 else if (this.Format.toUpperCase()=="DDMMMYYYY") 478 return (pDate+DateSeparator+this.GetMonthName(false)+DateSeparator+this.Year); 479 else if (this.Format.toUpperCase()=="MMDDYYYY") 480 return ((this.Month+1)+DateSeparator+pDate+DateSeparator+this.Year); 481 else if (this.Format.toUpperCase()=="MMMDDYYYY") 482 return (this.GetMonthName(false)+DateSeparator+pDate+DateSeparator+this.Year); 483} 484Calendar.prototype.FormatDate=FormatDate;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.