// utility.js 07Aug2012 JPN Initial version // 25Aug2012 JPN Added function showTooltip // 24Sep2012 JPN Now require debug = 2 before any debugging information gets printed // 25Sep2012 JPN Commented-out debug printing -- should not be needed // 16Jan2013 JPN Added BrowserDetect.js (from http://www.quirksmode.org/js/detect.html) // // This file contains Javascript utility functions and 1 JS object: // // 1.) is_leap.js (function) // 2.) get_month_day.js (function) // 3.) get_julian.js (function) // 4.) showTooltip.js (function) // 5.) BrowserDetect (object) // function is_leap(ccyy) { // Determine whether the input 4-digit year (e.q., 1998, 2010, etc.) is a leap year (return 1) or not (return 0). // // INPUT: ccyy = 4-digit year (e.g., 1999, 2012) // OUTPUT: 1 -- means ccyy is a leap year // 0 -- means ccyy is NOT a leap year var pn=" (is_leap.js (see utility.js)) "; var leap; if(ccyy%4 != 0) { leap=0; // This is not a leap year. } else { // This might be a leap year. if(ccyy%100 == 0) { // This is a centurial year (e.g., 1900, 2000, etc.). See if the year is evenly divisible by 400. // If the year is NOT evenly divisible by 400, it is NOT a leap year. if(ccyy%400 != 0) { leap=0; // This is not a leap year. } else { leap=1; // This IS a leap year. } } else { // This is NOT a centurial year (e.g., 1900, 2000, etc.) and is therefore a leap year. leap=1; // This IS a leap year. } } return leap; } function get_month_day(ccyyddd) { // Get the month (0->11) and day (1->31) corresponding to the input ccyyddd Julian date. Return ((month*100)+day). // For example, January 1 would be returned as 1, and December 31 would be returned as 1131. // // INPUT: ccyyddd = [4-digit year (e.g., 1999, 2012) * 1000] + Julian date (1-366) // OUTPUT: (mm*100)+day // //*NOTE: The output month is in Javascript date object form; i.e., 0=Jan., ..., 11=Dec. var pn=" (get_month_day.js (see utility.js)) "; var ccyy; var ddd; var month; var day; ccyy=Math.floor(ccyyddd / 1000); // Get the year. ddd=ccyyddd % 1000; // Get the Julian day. // Determine if the year is a leap year. var leap=is_leap(ccyy); //if(debug == 2) { // alert(pn+":\nleap="+leap+"\nccyy="+ccyy+"\nddd="+ddd); //} if(leap == 0) { // This is not a leap year. if(ddd <= 31) { month=0; // January day=ddd; } else if(ddd <= 59) { month=1; // February day=ddd-31; } else if(ddd <= 90) { month=2; // March day=ddd-59; } else if(ddd <= 120) { month=3; // April day=ddd-90; } else if(ddd <= 151) { month=4; // May day=ddd-120; } else if(ddd <= 181) { month=5; // June day=ddd-151; } else if(ddd <= 212) { month=6; // July day=ddd-181; } else if(ddd <= 243) { month=7; // August day=ddd-212; } else if(ddd <= 273) { month=8; // September day=ddd-243; } else if(ddd <= 304) { month=9; // October day=ddd-273; } else if(ddd <= 334) { month=10; // November day=ddd-304; } else if(ddd <= 365) { month=11; // December day=ddd-334; } else { return -1; } } else { // This is a leap year. if(ddd <= 31) { month=0; // January day=ddd; } else if(ddd <= 60) { month=1; // February day=ddd-31; } else if(ddd <= 91) { month=2; // March day=ddd-60; } else if(ddd <= 121) { month=3; // April day=ddd-91; } else if(ddd <= 152) { month=4; // May day=ddd-121; } else if(ddd <= 182) { month=5; // June day=ddd-152; } else if(ddd <= 213) { month=6; // July day=ddd-182; } else if(ddd <= 244) { month=7; // August day=ddd-213; } else if(ddd <= 274) { month=8; // September day=ddd-244; } else if(ddd <= 305) { month=9; // October day=ddd-274; } else if(ddd <= 335) { month=10; // November day=ddd-305; } else if(ddd <= 366) { month=11; // December day=ddd-335; } else { return -1; } } //if(debug == 2) { // alert(pn+":\nmonth="+month+"\nday="+day); //} return ((month*100) + day); } function get_julian(ccyy,mm,dd) { // Given an input year (ccyy), month (0->11) and day (1->31), compute and return the corresponding Julian date (1-366). // // INPUT: ccyy = year // mm = month of year(0-11) // dd = day of month (1-31) // OUTPUT: Julian day // //*NOTE: The input month (mm) is in Javascript date object form; i.e., 0=Jan., ..., 11=Dec. var pn=" (get_julian.js (see utility.js)) "; var julian=-1; // Determine if the input year is a leap year. var leap=is_leap(ccyy); //if(debug == 2) { // alert(pn+":\nleap="+leap+", \nccyy="+ccyy+", \nmm="+mm+", \ndd="+dd); //} if(leap == 0) { // This is not a leap year. if(mm ==0) { julian=dd; // January 31 } else if(mm==1) { julian=dd+31; // February 28 } else if(mm==2) { julian=dd+59; // March 31 } else if(mm==3) { julian=dd+90; // April 30 } else if(mm==4) { julian=dd+120; // May 31 } else if(mm==5) { julian=dd+151; // June 30 } else if(mm==6) { julian=dd+181; // July 31 } else if(mm==7) { julian=dd+212; // August 31 } else if(mm==8) { julian=dd+243; // September 30 } else if(mm==9) { julian=dd+273; // October 31 } else if(mm==10) { julian=dd+304; // November 30 } else if(mm==11) { julian=dd+334; // December 31 } else { return -1; } } else { // This is a leap year. if(mm==0) { julian=dd; // January 31 } else if(mm==1) { julian=dd+31; // February 29 } else if(mm==2) { julian=dd+60; // March 31 } else if(mm==3) { julian=dd+91; // April 30 } else if(mm==4) { julian=dd+121; // May 31 } else if(mm==5) { julian=dd+152; // June 30 } else if(mm==6) { julian=dd+182; // July 31 } else if(mm==7) { julian=dd+213; // August 31 } else if(mm==8) { julian=dd+244; // September 30 } else if(mm==9) { julian=dd+274; // October 31 } else if(mm==10) { julian=dd+305; // November 30 } else if(mm==11) { julian=dd+335; // December 31 } else { return -1; } } return julian; } function showTooltip(x, y, contents) { $('