js_calendar_pi.php File Reference

Go to the source code of this file.


Functions

 js_calendar_script ($form_name= 'entryform')
 js_calendar_write ($field_id, $time= '', $highlight=TRUE)

Function Documentation

js_calendar_script ( form_name = 'entryform'  ) 

Definition at line 127 of file js_calendar_pi.php.

References $CI, and get_instance().

00128 {               
00129 $CI =& get_instance();
00130 $CI->load->language('calendar');
00131 ob_start();
00132 ?>
00133 <script type="text/javascript">
00134 <!--
00135 var form_name   = "<?php echo $form_name; ?>";
00136 var format              = 'us'; // eu or us
00137 var days                = new Array(
00138                                         '<?php echo $CI->lang->line('cal_su');?>', // Sunday, short name
00139                                         '<?php echo $CI->lang->line('cal_mo');?>', // Monday, short name
00140                                         '<?php echo $CI->lang->line('cal_tu');?>', // Tuesday, short name
00141                                         '<?php echo $CI->lang->line('cal_wed');?>', // Wednesday, short name
00142                                         '<?php echo $CI->lang->line('cal_thu');?>', // Thursday, short name
00143                                         '<?php echo $CI->lang->line('cal_fri');?>', // Friday, short name
00144                                         '<?php echo $CI->lang->line('cal_sat');?>' // Saturday, short name
00145                                 );
00146 var months              = new Array(
00147                                         '<?php echo $CI->lang->line('cal_january');?>',
00148                                         '<?php echo $CI->lang->line('cal_february');?>',
00149                                         '<?php echo $CI->lang->line('cal_march');?>',
00150                                         '<?php echo $CI->lang->line('cal_april');?>',
00151                                         '<?php echo $CI->lang->line('cal_mayl');?>',
00152                                         '<?php echo $CI->lang->line('cal_june');?>',
00153                                         '<?php echo $CI->lang->line('cal_july');?>',
00154                                         '<?php echo $CI->lang->line('cal_august');?>',
00155                                         '<?php echo $CI->lang->line('cal_september');?>',
00156                                         '<?php echo $CI->lang->line('cal_october');?>',
00157                                         '<?php echo $CI->lang->line('cal_november');?>',
00158                                         '<?php echo $CI->lang->line('cal_december');?>'
00159                                 );
00160 var last_click  = new Array();
00161 var current_month  = '';
00162 var current_year   = '';
00163 var last_date  = '';
00164         
00165 function calendar(id, d, highlight, adjusted)
00166 {               
00167         if (adjusted == undefined)
00168         {       
00169                 var d = new Date(d * 1000);
00170         }
00171 
00172         this.id                 = id;
00173         this.highlight  = highlight;
00174         this.date_obj   = d;
00175         this.write              = build_calendar;
00176         this.total_days = total_days;
00177         this.month              = d.getMonth();
00178         this.date               = d.getDate();
00179         this.day                = d.getDay();
00180         this.year               = d.getFullYear();
00181         this.hours              = d.getHours();
00182         this.minutes    = d.getMinutes();
00183         this.seconds    = d.getSeconds();
00184         this.date_str   = date_str;
00185                                 
00186         if (highlight == false)
00187         {
00188                 this.selected_date = '';
00189         }
00190         else
00191         {
00192                 this.selected_date = this.year + '' + this.month + '' + this.date;
00193         }
00194                         
00195         //      Set the "selected date"
00196         d.setDate(1);
00197         this.firstDay = d.getDay();
00198         
00199         //then reset the date object to the correct date
00200         d.setDate(this.date);
00201 }
00202                 
00203 //      Build the body of the calendar
00204 function build_calendar()
00205 {
00206         var str = '';
00207         
00208         //      Calendar Heading
00209         
00210         str += '<div id="cal' + this.id + '">';
00211         str += '<table class="calendar" cellspacing="0" cellpadding="0" border="0" >';
00212         str += '<tr>';
00213         str += '<td class="calnavleft" onClick="change_month(-1, \'' + this.id + '\')">&lt;&lt;<\/td>';
00214         str += '<td colspan="5" class="calheading">' + months[this.month] + ' ' + this.year + '<\/td>';
00215         str += '<td class="calnavright" onClick="change_month(1, \'' + this.id + '\')">&gt;&gt;<\/td>';
00216         str += '<\/tr>';
00217         
00218         //      Day Names
00219         
00220         str += '<tr>';
00221         
00222         for (i = 0; i < 7; i++)
00223         {
00224                 str += '<td class="caldayheading">' + days[i] + '<\/td>';
00225         }
00226         
00227         str += '<\/tr>';
00228         
00229         //      Day Cells
00230                 
00231         str += '<tr>';
00232         
00233         selDate = (last_date != '') ? last_date : this.date;
00234         
00235         for (j = 0; j < 42; j++)
00236         {
00237                 var displayNum = (j - this.firstDay + 1);
00238                 
00239                 if (j < this.firstDay) // leading empty cells
00240                 {
00241                         str += '<td class="calblanktop">&nbsp;<\/td>';
00242                 }
00243                 else if (displayNum == selDate && this.highlight == true) // Selected date
00244                 {
00245                         str += '<td id="' + this.id +'selected" class="caldayselected" onClick="set_date(this,\'' + this.id + '\')">' + displayNum + '<\/td>';
00246                 }
00247                 else if (displayNum > this.total_days())
00248                 {
00249                         str += '<td class="calblankbot">&nbsp;<\/td>'; // trailing empty cells
00250                 }
00251                 else  // Unselected days
00252                 {
00253                         str += '<td id="" class="caldaycells" onClick="set_date(this,\'' + this.id + '\'); return false;"  onMouseOver="javascript:cell_highlight(this,\'' + displayNum + '\',\'' + this.id + '\');" onMouseOut="javascript:cell_reset(this,\'' + displayNum + '\',\'' + this.id + '\');" >' + displayNum + '<\/td>';
00254                 }
00255                 
00256                 if (j % 7 == 6)
00257                 {
00258                         str += '<\/tr><tr>';
00259                 }
00260         }
00261 
00262         str += '<\/tr>';        
00263         str += '<\/table>';
00264         str += '<\/div>';
00265         
00266         return str;
00267 }
00268 
00269 //      Total number of days in a month
00270 function total_days()
00271 {       
00272         switch(this.month)
00273         {
00274                 case 1: // Check for leap year
00275                         if ((  this.date_obj.getFullYear() % 4 == 0
00276                                 && this.date_obj.getFullYear() % 100 != 0)
00277                                 || this.date_obj.getFullYear() % 400 == 0)
00278                                 return 29;
00279                         else
00280                                 return 28;
00281                 case 3:
00282                         return 30;
00283                 case 5:
00284                         return 30;
00285                 case 8:
00286                         return 30;
00287                 case 10:
00288                         return 30
00289                 default:
00290                         return 31;
00291         }
00292 }
00293 
00294 //      Highlight Cell on Mouseover
00295 function cell_highlight(td, num, cal)
00296 {
00297         cal = eval(cal);
00298 
00299         if (last_click[cal.id]  != num)
00300         {
00301                 td.className = "caldaycellhover";
00302         }
00303 }               
00304 
00305 //      Reset Cell on MouseOut
00306 function cell_reset(td, num, cal)
00307 {       
00308         cal = eval(cal);
00309 
00310         if (last_click[cal.id] == num)
00311         {
00312                 td.className = "caldayselected";
00313         }
00314         else
00315         {
00316                 td.className = "caldaycells";
00317         }
00318 }               
00319 
00320 //      Clear Field
00321 function clear_field(id)
00322 {                               
00323         eval("document." + form_name + "." + id + ".value = ''");
00324         
00325         document.getElementById(id + "selected").className = "caldaycells";
00326         document.getElementById(id + "selected").id = "";       
00327         
00328         cal = eval(id);
00329         cal.selected_date = '';         
00330 }               
00331 
00332 
00333 //      Set date to specified time
00334 function set_to_time(id, raw)
00335 {                       
00336         if (document.getElementById(id + "selected"))
00337         {                       
00338                 document.getElementById(id + "selected").className = "caldaycells";
00339                 document.getElementById(id + "selected").id = "";       
00340         }
00341         
00342         document.getElementById('cal' + id).innerHTML = '<div id="tempcal'+id+'">&nbsp;<'+'/div>';                              
00343                 
00344         var nowDate = new Date();
00345         nowDate.setTime = raw * 1000;
00346         
00347         current_month   = nowDate.getMonth();
00348         current_year    = nowDate.getFullYear();
00349         current_date    = nowDate.getDate();
00350         
00351         oldcal = eval(id);
00352         oldcal.selected_date = current_year + '' + current_month + '' + current_date;                           
00353 
00354         cal = new calendar(id, nowDate, true, true);            
00355         cal.selected_date = current_year + '' + current_month + '' + current_date;      
00356         
00357         last_date = cal.date;
00358         
00359         document.getElementById('tempcal'+id).innerHTML = cal.write();  
00360         
00361         insert_date(cal);
00362 }
00363 
00364 //      Set date to what is in the field
00365 var lastDates = new Array();
00366 
00367 function update_calendar(id, dateValue)
00368 {
00369         if (lastDates[id] == dateValue) return;
00370         
00371         lastDates[id] = dateValue;
00372         
00373         var fieldString = dateValue.replace(/\s+/g, ' ');
00374         
00375         while (fieldString.substring(0,1) == ' ')
00376         {
00377                 fieldString = fieldString.substring(1, fieldString.length);
00378         }
00379         
00380         var dateString = fieldString.split(' ');
00381         var dateParts = dateString[0].split('-')
00382 
00383         if (dateParts.length < 3) return;
00384         var newYear  = dateParts[0];
00385         var newMonth = dateParts[1];
00386         var newDay   = dateParts[2];
00387         
00388         if (isNaN(newDay)  || newDay < 1 || (newDay.length != 1 && newDay.length != 2)) return;
00389         if (isNaN(newYear) || newYear < 1 || newYear.length != 4) return;
00390         if (isNaN(newMonth) || newMonth < 1 || (newMonth.length != 1 && newMonth.length != 2)) return;
00391         
00392         if (newMonth > 12) newMonth = 12;
00393         
00394         if (newDay > 28)
00395         {
00396                 switch(newMonth - 1)
00397                 {
00398                         case 1: // Check for leap year
00399                                 if ((newYear % 4 == 0 && newYear % 100 != 0) || newYear % 400 == 0)
00400                                 {
00401                                         if (newDay > 29) newDay = 29;
00402                                 }
00403                                 else
00404                                 {
00405                                         if (newDay > 28) newDay = 28;
00406                                 }
00407                         case 3:
00408                                 if (newDay > 30) newDay = 30;
00409                         case 5:
00410                                 if (newDay > 30) newDay = 30;
00411                         case 8:
00412                                 if (newDay > 30) newDay = 30;
00413                         case 10:
00414                                 if (newDay > 30) newDay = 30;
00415                         default:
00416                                 if (newDay > 31) newDay = 31;
00417                 }
00418         }
00419         
00420         if (document.getElementById(id + "selected"))
00421         {                       
00422                 document.getElementById(id + "selected").className = "caldaycells";
00423                 document.getElementById(id + "selected").id = "";       
00424         }
00425         
00426         document.getElementById('cal' + id).innerHTML = '<div id="tempcal'+id+'">&nbsp;<'+'/div>';                              
00427                 
00428         var nowDate = new Date();
00429         nowDate.setDate(newDay);
00430         nowDate.setMonth(newMonth - 1);
00431         nowDate.setYear(newYear);
00432         nowDate.setHours(12);
00433         
00434         current_month   = nowDate.getMonth();
00435         current_year    = nowDate.getFullYear();
00436 
00437         cal = new calendar(id, nowDate, true, true);                                            
00438         document.getElementById('tempcal'+id).innerHTML = cal.write();  
00439 }
00440 
00441 //      Set the date
00442 function set_date(td, cal)
00443 {                                       
00444 
00445         cal = eval(cal);
00446         
00447         // If the user is clicking a cell that is already
00448         // selected we'll de-select it and clear the form field
00449         
00450         if (last_click[cal.id] == td.firstChild.nodeValue)
00451         {
00452                 td.className = "caldaycells";
00453                 last_click[cal.id] = '';
00454                 remove_date(cal);
00455                 cal.selected_date =  '';
00456                 return;
00457         }
00458                                 
00459         // Onward!
00460         if (document.getElementById(cal.id + "selected"))
00461         {
00462                 document.getElementById(cal.id + "selected").className = "caldaycells";
00463                 document.getElementById(cal.id + "selected").id = "";
00464         }
00465                                                                         
00466         td.className = "caldayselected";
00467         td.id = cal.id + "selected";
00468 
00469         cal.selected_date = cal.date_obj.getFullYear() + '' + cal.date_obj.getMonth() + '' + cal.date;                  
00470         cal.date_obj.setDate(td.firstChild.nodeValue);
00471         cal = new calendar(cal.id, cal.date_obj, true, true);
00472         cal.selected_date = cal.date_obj.getFullYear() + '' + cal.date_obj.getMonth() + '' + cal.date;                  
00473         
00474         last_date = cal.date;
00475 
00476         //cal.date
00477         last_click[cal.id] = cal.date;
00478                                 
00479         // Insert the date into the form
00480         insert_date(cal);
00481 }
00482 /*
00483 //      Insert the date into the form field
00484 function insert_date(cal)
00485 {
00486         cal = eval(cal);
00487         fval = eval("document." + form_name + "." + cal.id);    
00488         
00489         if (fval.value == '')
00490         {
00491                 fval.value = cal.date_str('y');
00492         }
00493         else
00494         {
00495                 time = fval.value.substring(10);
00496                 new_date = cal.date_str('n') + time;
00497                 fval.value = new_date;
00498         }       
00499 }
00500 */              
00501 //      Remove the date from the form field
00502 function remove_date(cal)
00503 {
00504         cal = eval(cal);
00505         fval = eval("document." + form_name + "." + cal.id);    
00506         fval.value = '';
00507 }
00508 
00509 //      Change to a new month
00510 function change_month(mo, cal)
00511 {               
00512         cal = eval(cal);
00513 
00514         if (current_month != '')
00515         {
00516                 cal.date_obj.setMonth(current_month);
00517                 cal.date_obj.setYear(current_year);
00518         
00519                 current_month   = '';
00520                 current_year    = '';
00521         }
00522                                 
00523         var newMonth = cal.date_obj.getMonth() + mo;
00524         var newDate  = cal.date_obj.getDate();
00525         
00526         if (newMonth == 12)
00527         {
00528                 cal.date_obj.setYear(cal.date_obj.getFullYear() + 1)
00529                 newMonth = 0;
00530         }
00531         else if (newMonth == -1)
00532         {
00533                 cal.date_obj.setYear(cal.date_obj.getFullYear() - 1)
00534                 newMonth = 11;
00535         }
00536         
00537         if (newDate > 28)
00538         {
00539                 var newYear = cal.date_obj.getFullYear();
00540                 
00541                 switch(newMonth)
00542                 {
00543                         case 1: // Check for leap year
00544                                 if ((newYear % 4 == 0 && newYear % 100 != 0) || newYear % 400 == 0)
00545                                 {
00546                                         if (newDate > 29) newDate = 29;
00547                                 }
00548                                 else
00549                                 {
00550                                         if (newDate > 28) newDate = 28;
00551                                 }
00552                         case 3:
00553                                 if (newDate > 30) newDate = 30;
00554                         case 5:
00555                                 if (newDate > 30) newDate = 30;
00556                         case 8:
00557                                 if (newDate > 30) newDate = 30;
00558                         case 10:
00559                                 if (newDate > 30) newDate = 30;
00560                         default:
00561                                 if (newDate > 31) newDate = 31;
00562                 }
00563         }
00564         
00565         cal.date_obj.setDate(newDate);
00566         cal.date_obj.setMonth(newMonth);
00567         new_mdy = cal.date_obj.getFullYear() + '' + cal.date_obj.getMonth() + '' + cal.date;
00568         
00569         highlight = (cal.selected_date == new_mdy) ? true : false;                      
00570         cal = new calendar(cal.id, cal.date_obj, highlight, true);                      
00571         document.getElementById('cal' + cal.id).innerHTML = cal.write();        
00572 }
00573 
00574 //      Finalize the date string
00575 function date_str(time)
00576 {
00577         var month = this.month + 1;
00578         if (month < 10)
00579                 month = '0' + month;
00580                 
00581         var day         = (this.date  < 10)     ?  '0' + this.date              : this.date;
00582         var minutes     = (this.minutes  < 10)  ?  '0' + this.minutes   : this.minutes;
00583                 
00584         if (format == 'us')
00585         {
00586                 var hours       = (this.hours > 12) ? this.hours - 12 : this.hours;
00587                 var ampm        = (this.hours > 11) ? 'PM' : 'AM'
00588         }
00589         else
00590         {
00591                 var hours       = this.hours;
00592                 var ampm        = '';
00593         }
00594         
00595         if (time == 'y')
00596         {
00597                 return this.year + '-' + month + '-' + day + '  ' + hours + ':' + minutes + ' ' + ampm;         
00598         }
00599         else
00600         {
00601                 return this.year + '-' + month + '-' + day;
00602         }
00603 }
00604 
00605 //-->
00606 </script>
00607 <?php
00608 
00609 $r = ob_get_contents();
00610 ob_end_clean();
00611 return $r;
00612 }

Here is the call graph for this function:

js_calendar_write ( field_id,
time = '',
highlight = TRUE 
)

Definition at line 615 of file js_calendar_pi.php.

00616 {
00617         if ($time == '')
00618                 $time = time();
00619 
00620         return
00621         '<script type="text/javascript">
00622                 var '.$field_id.' = new calendar("'.$field_id.'", '.$time.', '.(($highlight == TRUE) ? 'true' : 'false').');
00623                 document.write('.$field_id.'.write());
00624         </script>';     
00625 }