/* jtimes.js - Hallachic Times 1.0 @ Kehillaton.com All Rights Reserved.
 * Credits:  - Kaluach.net. Code adapted with permission.
 * 	     - PHP code that was translated by mattf@mail.com from the original perl module Astro-SunTime-0.01
 *	     - Based on the program SUN.C by Michael Schwartz, which was based on an algorithm contained in: Almanac for Computers, 1990 published by Nautical Almanac Office, United States Naval Observatory, Washington, DC 20392
 * To use this script on your web site, please contact: support@kehillaton.com
 */
JTimes=function(){this.ns='N';this.latd=-1;this.latm=0;this.ew='E';this.lngd=-1;this.lngm=0;var now=new Date();this.month=now.getMonth();this.day=now.getDay();this.year=now.getYear();this.ampm=1;this.tz=0;this.dst=0;this.lat=0;this.lng=0;this.shabbatStartMins=18.0;this.ready=0;this.monCount=new makeArray(1,32,60,91,121,152,182,213,244,274,305,335,366);this.hanetz='';this.shkia='';this.alot='';this.misheyakir='';this.tzeit='';this.shema='';this.tefillah='';this.chatzot='';this.minchag='';this.minchak='';this.plag='';this.motzeiShabbat='';this.knissatShabbat='';};JTimes.prototype={SetLocation:function(ns,latd,latm,ew,lngd,lngm){this.ns=ns?ns:'N';this.latd=latd?latd:-1;this.latm=latm?latm:0;this.ew=ew?ew:'E';this.lngd=lngd?lngd:-1;this.lngm=lngm?lngm:0;},SetDate:function(day,month,year){this.day=day?day:0;this.month=month?month:0;this.year=year?year:0;},SetTZ:function(tz){this.tz=tz?tz:0;},SetDst:function(dst){this.dst=(dst?dst:0);},SetAMPM:function(ampm){this.ampm=ampm?ampm:1;},SetShabbatStartMins:function(ssm){if(!isNaN(ssm)&&ssm>=0){this.shabbatStartMins=ssm;}},Calculate:function(){var d,m,y;var nsi,ewi;var i;i=this.ns.indexOf("N");nsi=(i!=-1)?0:1;i=this.ew.indexOf("W");ewi=(i!=-1)?0:1;d=this.day;m=this.month;y=this.year;var adj=this.tz+this.dst;var time;var sunrise,sunset;var shaa_zmanit;time=this.suntime(d,m,y,90,50,this.lngd,this.lngm,ewi,this.latd,this.latm,nsi,adj);if(time[1]==0){sunrise=time[2];sunset=time[3];this.hanetz=this.AdjustTime(sunrise,this.ampm);this.shkia=this.AdjustTime(sunset,this.ampm);shaa_zmanit=(sunset-sunrise)/12;}else{this.hanetz="";this.shkia="";}time=this.suntime(d,m,y,106,6,this.lngd,this.lngm,ewi,this.latd,this.latm,nsi,adj);if(time[1]==0)this.alot=this.AdjustTime(time[2],this.ampm);else this.alot="";time=this.suntime(d,m,y,101,0,this.lngd,this.lngm,ewi,this.latd,this.latm,nsi,adj);if(time[1]==0)this.misheyakir=this.AdjustTime(time[2],this.ampm);else this.misheyakir="";time=this.suntime(d,m,y,96,0,this.lngd,this.lngm,ewi,this.latd,this.latm,nsi,adj);if(time[1]==0)this.tzeit=this.AdjustTime(time[3],this.ampm);else this.tzeit="";this.shema=this.AdjustTime(sunrise+shaa_zmanit*3,this.ampm);this.tefillah=this.AdjustTime(sunrise+shaa_zmanit*4,this.ampm);this.chatzot=this.AdjustTime(sunrise+shaa_zmanit*6,this.ampm);this.minchag=this.AdjustTime(sunrise+shaa_zmanit*6.5,this.ampm);this.minchak=this.AdjustTime(sunrise+shaa_zmanit*9.5,this.ampm);this.plag=this.AdjustTime(sunrise+shaa_zmanit*10.75,this.ampm);var yom=new Date(y,m-1,d);time=this.suntime(d,m,y,98,30,this.lngd,this.lngm,ewi,this.latd,this.latm,nsi,adj);if(time[1]==0)this.motzeiShabbat=this.AdjustTime(time[3],this.ampm);else this.motzeiShabbat="";var day_before=new Date(yom.getTime()-86400000);db=day_before.getDate();mb=day_before.getMonth()+1;yb=day_before.getYear();if(yb<1900)yb+=1900;time=this.suntime(db,mb,yb,90,50,this.lngd,this.lngm,ewi,this.latd,this.latm,nsi,adj);this.knissatShabbat=this.AdjustTime(time[3]-parseFloat(this.shabbatStartMins)/60.0,this.ampm);this.ready=1;},CalcTimes:function(timesA){if(!timesA)return;var tag,html;for(var i=0;i<timesA.length;i++){html='';tag=this.GetElementById(timesA[i].id);if(!tag)return;if(this.ParseDate(timesA[i].dt)=='')return;this.Calculate();if(timesA[i].sTime!=''){html+="<tr><td class='jtDesc'>"+timesA[i].sTxt+"</td><td class='jtTime'>"+eval('this.'+timesA[i].sTime)+"</td></tr>";}if(timesA[i].eTime!=''){html+="<tr><td class='jtDesc'>"+timesA[i].eTxt+"</td><td class='jtTime'>"+eval('this.'+timesA[i].eTime)+"</td></tr>";}if(html.length>0){html="<table class='jtimes'>"+html+"</table>";}tag.innerHTML=html;}},CalcDailyTimes:function(dt){if(this.ParseDate(dt)=='')return;this.Calculate();var tag;tag=this.GetElementById('alot');if(tag)tag.innerHTML=this.alot;tag=this.GetElementById('hanetz');if(tag)tag.innerHTML=this.hanetz;tag=this.GetElementById('shkia');if(tag)tag.innerHTML=this.shkia;tag=this.GetElementById('misheyakir');if(tag)tag.innerHTML=this.misheyakir;tag=this.GetElementById('tzeit');if(tag)tag.innerHTML=this.tzeit;tag=this.GetElementById('shema');if(tag)tag.innerHTML=this.shema;tag=this.GetElementById('tefillah');if(tag)tag.innerHTML=this.tefillah;tag=this.GetElementById('chatzot');if(tag)tag.innerHTML=this.chatzot;tag=this.GetElementById('minchag');if(tag)tag.innerHTML=this.minchag;tag=this.GetElementById('minchak');if(tag)tag.innerHTML=this.minchak;tag=this.GetElementById('plag');if(tag)tag.innerHTML=this.plag;},ParseDate:function(dt){var dtA=dt.split('/');if(!dtA||dtA.length!=3)return'';var y=parseInt(dtA[0]);var m=parseInt(dtA[1]);var d=parseInt(dtA[2]);this.SetDate(d,m,y);return dt;},GetElementById:function(id){if(document.getElementById)return document.getElementById(id);else return document.all[id];},GetHanetz:function(){return(this.ready=1)?this.hanetz:'';},GetShkia:function(){return(this.ready=1)?this.shkia:'';},GetAlot:function(){return(this.ready=1)?this.alot:'';},GetMisheyakir:function(){return(this.ready=1)?this.misheyakir:'';},GetTzeit:function(){return(this.ready=1)?this.tzeit:'';},GetShema:function(){return(this.ready=1)?this.shema:'';},GetTefillah:function(){return(this.ready=1)?this.tefillah:'';},GetChatzot:function(){return(this.ready=1)?this.chatzot:'';},GetMinchaG:function(){return(this.ready=1)?this.minchag:'';},GetMinchaK:function(){return(this.ready=1)?this.minchak:'';},GetPlag:function(){return(this.ready=1)?this.plag:'';},GetKnissatShabbat:function(){return(this.ready=1)?this.knissatShabbat:'';},GetMotzeiShabbat:function(){return(this.ready=1)?this.motzeiShabbat:'';},DOY:function(d,m,y){return parseInt(this.monCount[m])+parseInt(d)+parseInt((m>2&&this.IsLeapYear(y))?1:0);},AdjustTime:function(t,ampm){var time=t;var hour=Math.floor(time);var min=Math.floor((time-hour)*60.0+0.5);if(min>=60){hour+=1;min-=60;}if(hour<0)hour+=24;if(ampm){ampm_str=(hour>11)?' PM':' AM';hour%=12;hour=(hour<1)?12:hour;}else ampm_str='';var str=hour+':'+((min<10)?'0':'')+min+ampm_str;return str;},suntime:function(dy,mn,yr,sundeg,sunmin,londeg,lonmin,ew,latdeg,latmin,ns,timezone){var invalid=0;longitude=(londeg+lonmin/60.0)*((ew==0)?-1:1);latitude=(latdeg+latmin/60.0)*((ns==0)?1:-1);var yday=this.DOY(dy,mn,yr);var A=1.5708;var B=3.14159;var C=4.71239;var D=6.28319;var E=0.0174533*latitude;var F=0.0174533*longitude;var G=0.261799*timezone;var R=Math.cos(0.01745*(sundeg+sunmin/60.0));var J;for(i=0;i<2;i++){if(!i)J=A;else J=C;var K=yday+((J-F)/D);var L=(K*.017202)-.0574039;var M=L+.0334405*Math.sin(L);M+=4.93289+(3.49066E-04)*Math.sin(2*L);if(D==0){alert("Trying to normalize with zero offset...");exit;}while(M<0)M=(M+D);while(M>=D)M=(M-D);if((M/A)-Math.floor(M/A)==0)M+=4.84814E-06;var P=Math.sin(M)/Math.cos(M);P=Math.atan2(.91746*P,1);if(M>C)P+=D;else{if(M>A)P+=B;}var Q=.39782*Math.sin(M);Q=Q/Math.sqrt(-Q*Q+1);Q=Math.atan2(Q,1);var S=R-(Math.sin(Q)*Math.sin(E));S=S/(Math.cos(Q)*Math.cos(E));if(Math.abs(S)>1)invalid=1;S=S/Math.sqrt(-S*S+1);S=A-Math.atan2(S,1);if(!i)S=D-S;var T=S+P-0.0172028*K-1.73364;var U=T-F;var V=U+G;if(D==0){alert("Trying to normalize with zero offset...");exit;}while(V<0)V=V+D;while(V>=D)V=V-D;V=V*3.81972;if(!i)sr=V;else ss=V;}var ret=new Object();ret[1]=invalid;ret[2]=sr;ret[3]=ss;return ret;},IsLeapYear:function(y){return((y%400==0)||(y%100!=0&&y%4==0));},CivilMonthLength:function(month,year){if(month==2)return 28+this.IsLeapYear(year);else if(month==4||month==6||month==9||month==11)return 30;else return 31;},Debug:function(){alert('month:'+this.month+'\nday:'+this.day+'\nyear:'+this.year+'\nns:'+this.ns+'\nlatd:'+this.latd+'\nlatm:'+this.latm+'\new:'+this.ew+'\nlngd:'+this.lngd+'\nlngm:'+this.lngm+'\nday:'+this.day);}};function makeArray(){this[0]=makeArray.arguments.length;for(i=0;i<makeArray.arguments.length;i=i+1)this[i+1]=makeArray.arguments[i];}

