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