var timestamp; function getLocation() { navigator.geolocation.getCurrentPosition(function(position){ setCoords(position); }, function () { setCoords({coords: { latitude: latitude, longitude: longitude }}); }); } function getAirportLocation() { $.getJSON( "https://raw.githubusercontent.com/mwgg/Airports/master/airports.json", function( data ) { $('#iata input').addClass('loading'); var iatacode = $('#iata input').val(); Defiant.getSnapshot(data, function(snapshot) { var found = JSON.search(snapshot, '//*[iata="'+iatacode.toUpperCase()+'"]'); /* var minlat = Math.floor($('#lat').val()) - 2; var maxlat = Math.ceil($('#lat').val()) + 2; var minlon = Math.floor($('#lon').val()) - 2; var maxlon = Math.ceil($('#lon').val()) + 2; var foundlat = JSON.search(snapshot, '//*[lat<'+maxlat+' and lat>'+minlat+']'); var found = JSON.search(foundlat, '//*[lon<'+maxlon+' and lon>'+minlon+']'); var distances = []; for (index = 0; index < found.length; ++index) { distances.push(getDistance($('#lat').val(), $('#lon').val(), found[index].lat, found[index].lon)); } var idx = distances.indexOf(Math.min.apply(Math,distances)); var airport = found[idx]; */ var airport = found[0]; $.getJSON( "https://raw.githubusercontent.com/dmfilipenko/timezones.json/master/timezones.json", function( zones ) { var off = JSON.search( zones, '//*[utc="'+airport.tz+'"]'); $('#lat').val(airport.lat); $('#lon').val(airport.lon); $('#offset').val(off[0].offset); $('#iata-info').text(airport.name+', '+airport.city+', '+airport.country+' (Timezone: '+airport.tz+')'); $('#iata input').removeClass('loading'); }); }); }); } function setCoords(location) { $('#lat').val(location.coords.latitude); $('#lon').val(location.coords.longitude); var now = new Date() var off = now.getTimezoneOffset(); $('#offset').val(off/60*-1); } function generate() { $('#grid').empty(); var data = generateJSON((Math.floor($('#lat').val())+'-'+Math.floor($('#lon').val())), new moment().unix(), $('#offset').val(), ($('#days').val()-1), $('#lat').val(), $('#lon').val()); var j = 0; function makePHour(j) { if ( j == data.planetaryhours.length-1 ) { clearTimeout(everyday); NProgress.done(); var now = moment().subtract($('#offset').val(), 'h').unix(); $('.planetaryhour').each( function( idx, element ) { if ( $(element).attr('ts') < now && now < $(element).next().attr('ts') ) { $(element).addClass('now'); } }); return; } var m = data.planetaryhours[j]; var localTime = new moment.unix(m.ts).add($('#offset').val(), 'h'); var zodiac = getZodiac(m.solar.lng); var moonsign = getZodiac(m.lunar.lng); var mansion = getLunarMansion(m.lunar.lng); var hygromanteia = getActions(matrix.planetary.day[m.planetary.day].hour[m.planetary.hour.number].for, action, 'hygromanteia'); var lunarday = getActions(matrix.lunar.day[m.lunar.day.day], action, 'lunarday'); var lunarsign = getActions(matrix.lunar.sign[zodiac.sign].for, action, 'lunarsign'); var lunarmansion = getActions(matrix.lunar.mansion[mansion], action, 'lunarmansion'); var claviculaday = getActions(matrix.clavicula[m.planetary.day+1], action, 'clavicula'); var claviculahour = getActions(matrix.clavicula[matrix.planetary.day[m.planetary.day].hour[m.planetary.hour.number].planet], action, 'clavicula'); var clavicula = [claviculaday.actions.string, claviculahour.actions.string]; $('
').loadTemplate($("#tpl-planetaryhour"), { ruler : def.planet.symbol[m.planetary.day+1], date : new moment.unix(m.ts).format('D/M'), lunarday : '☾'+m.lunar.day.day+'☽', hourstart : new moment.unix(m.planetary.hour.begin).add($('#offset').val(), 'h').format('HH:mm'), hournumber : (m.planetary.hour.number+1)+'
'+def.planet.symbol[matrix.planetary.day[m.planetary.day].hour[m.planetary.hour.number].planet], hourend : new moment.unix(m.planetary.hour.end).add($('#offset').val(), 'h').format('HH:mm'), moonsign : def.zodiac.symbol[moonsign.sign], moonphase : def.moon.phase.symbol[m.lunar.phase.simple]+' '+m.lunar.phase.illumination+'%', moonmansion : '|'+mansion+'|' }) .addClass(hygromanteia.actions.string) .addClass($.unique(clavicula.join(" ").split(' ')).join(" ")) .addClass(lunarday.actions.string) .addClass(lunarsign.actions.string) .addClass(lunarmansion.actions.string) .addClass(addPlanetClasses(m.solar.lng, 'sun')) .addClass(addPlanetClasses(m.lunar.lng, 'moon')) .addClass(addPlanetClasses(m.planet.mars.lng, 'mars')) .addClass(addPlanetClasses(m.planet.mercury.lng, 'mercury')) .addClass(addPlanetClasses(m.planet.jupiter.lng, 'jupiter')) .addClass(addPlanetClasses(m.planet.venus.lng, 'venus')) .addClass(addPlanetClasses(m.planet.saturn.lng, 'saturn')) .addClass('col-md-2 centered planetaryhour') .attr('id', 'c'+j+'d'+m.planetary .day+'h'+m.planetary.hour.number ) .attr('day', m.planetary.day) .attr('hour', m.planetary.hour.number) .attr('ts', m.ts) .attr('ts-end', new moment.unix(m.planetary.hour.end).add($('#offset').val(), 'h').unix()) .attr('sun-lng', m.solar.lng) .attr('moon-lng', m.lunar.lng) .attr('moon-day', m.lunar.day.day) .attr('moon-phase', m.lunar.phase.simple) .attr('moon-angle', Math.round(m.lunar.phase.angle *100) / 100 ) .attr('moon-illumination', m.lunar.phase.illumination) .attr('mars-lng', m.planet.mars.lng) .attr('mercury-lng', m.planet.mercury.lng) .attr('jupiter-lng', m.planet.jupiter.lng) .attr('venus-lng', m.planet.venus.lng) .attr('saturn-lng', m.planet.saturn.lng) .appendTo('#grid'); if ( $('#c'+j+'d'+m.planetary .day+'h'+m.planetary.hour.number).attr('hour') > 11 ) { $('#c'+j+'d'+m.planetary .day+'h'+m.planetary.hour.number).addClass('night-hour'); } NProgress.set(j/data.planetaryhours.length); } for (var i = 0, len = data.planetaryhours.length; i < len; i++) { var everyday = setTimeout( makePHour, 10, i); } } function generateJSON(iata, timestamp, timeoffset, days, latitude, longitude) { var caldata = []; var queryday = new moment.unix(timestamp).startOf('day'); var j = 0; while ( j <= days ) { var m = planetaryMoment(latitude, longitude, queryday.unix()); var sol = m.solar.day; var h = 0; var interval; var start; var m; while ( h < 24 ) { if ( h < 12 ) { interval = sol.day.hourSecs; start = sol.day.start; m = h; } else { interval = sol.night.hourSecs; start = sol.night.start; m = h - 12; } var hm = start + m * interval; pm = planetaryMoment(latitude, longitude, hm); caldata.push(pm); h++; } queryday.add(1, 'd'); j++; }; console.log(caldata); var data = { iata: iata, time: { starttime: timestamp, days: days, offset: timeoffset }, coords: { lat: latitude, lng: longitude }, planetaryhours: caldata }; return data; } function createFilterModal(id, getFunction) { var items = getFunction(); var title = $('#navigation a[data-target="#'+id+'"]').clone(); var tagfilters = ""; var actions = ""; for (var i = 0, len = items.tags.length; i < len; i++) { tagfilters += '
  •  '+items.tags[i]+'
  • '; } for (var i = 0, len = items.actions.length; i < len; i++) { actions += '
  •  '+items.actions[i].action+'
  • '; } $('
    ').loadTemplate($("#tpl-modal"), { title : 'Filter by'+title[0].innerText, left : '

    Tags

    ', right : '

    Operations

    ' }) .appendTo('#modals').attr('id', id).attr('tabindex', '-1').attr('role', 'dialog').addClass('modal fade') .find('.col-sm-4') .addClass('actionlistfilter') .find('ul') .attr('id', id+'-tags' ) .attr('data-group', id ) .parents('.modal-body') .find('.col-sm-8') .addClass('filteroptions') .find('ul') .attr('id', id+'-actions') .attr('data-group', id+'-actions' ); } function createInfoModal() { $('
    ').loadTemplate($("#tpl-modal"), { title : 'Planetary Hour ', left : '
    ', right : '
    ' }) .appendTo('#modals').attr('id', 'hourinfo').attr('tabindex', '-1').attr('role', 'dialog').addClass('modal fade').modal({ show: false}); } function getHourInfo() { var ts = $(this).attr('ts'); var tsend = $(this).attr('ts-end'); var day = parseFloat($(this).attr('day')); var hour = parseFloat($(this).attr('hour')); var sunlng = parseFloat($(this).attr('sun-lng')); var moonlng = parseFloat($(this).attr('moon-lng')); var marslng = parseFloat($(this).attr('mars-lng')); var mercurylng = parseFloat($(this).attr('mercury-lng')); var jupiterlng = parseFloat($(this).attr('jupiter-lng')); var venuslng = parseFloat($(this).attr('venus-lng')); var saturnlng = parseFloat($(this).attr('saturn-lng')); var zodiac = getZodiac(sunlng); var moonsign = getZodiac(moonlng); var marssign = getZodiac(marslng); var mercurysign = getZodiac(mercurylng); var jupitersign = getZodiac(jupiterlng); var venussign = getZodiac(venuslng); var saturnsign = getZodiac(saturnlng); var mansion = getLunarMansion(moonlng); var moonday = parseFloat($(this).attr('moon-day')); var phase = parseFloat($(this).attr('moon-phase')); var angle = parseFloat($(this).attr('moon-angle')); var illumination = parseFloat($(this).attr('moon-illumination')); var hygromanteia = getActions(matrix.planetary.day[day].hour[hour].for, action); var lunarday = getActions(matrix.lunar.day[lunarday], action); var lunarsign = getActions(matrix.lunar.sign[moonsign.sign].for, action); var lunarmansion = getActions(matrix.lunar.mansion[mansion], action); var claviculaday = getActions(matrix.clavicula[day+1], action); var claviculahour = getActions(matrix.clavicula[matrix.planetary.day[day].hour[hour].planet], action); $('#p-hour').html((hour+1)); $('#p-info').html( $('
      ').append( '
    • Data

    • '+ '
    • Day: '+def.planet.day[day+1]+'
    • '+ '
    • Ruler: '+def.planet.name[day+1]+'
    • '+ '
    •  
    • '+ '
    • Hour: '+(hour+1)+'
    • '+ '
    • Ruler: '+def.planet.name[matrix.planetary.day[day].hour[hour].planet]+'
    • '+ '
    • Angel: '+matrix.planetary.day[day].hour[hour].angel+'
    • '+ '
    • Demon: '+matrix.planetary.day[day].hour[hour].demon+'
    • '+ '
    •  
    • '+ '
    • Zodiac Sign: '+def.zodiac.name[zodiac.sign]+'
    • '+ '
    • Ruler: '+def.planet.name[def.zodiac.ruler[zodiac.sign]]+'
    • '+ '
    • Ecliptic Lng.: '+Math.round(sunlng * 100) / 100+'°
    • '+ '
    •  
    • '+ '
    • Decan: '+zodiac.decan+'
    • '+ '
    • Greek: '+def.decan.greek[zodiac.decan]+'
    • '+ '
    • Latin: '+def.decan.latin[zodiac.decan]+'
    • '+ '
    • Ruler: '+def.planet.name[def.decan.ruler[zodiac.sign]]+'
    • '+ '
    •  
    • '+ '
    • Lunar Day: '+moonday+'
    • '+ '
    •  
    • '+ '
    • '+def.moon.phase.symbol[phase]+' '+def.moon.phase.name[phase]+'
    • '+ '
    • Angle: '+Math.round(angle * 180 / Math.PI * 100) / 100+'°
    • '+ '
    • Illumination: '+illumination+'%
    • '+ '
    •  
    • '+ '
    • Lunar Sign: '+def.zodiac.name[moonsign.sign]+'
    • '+ '
    • Ruler: '+def.planet.name[def.zodiac.ruler[moonsign.sign]]+'
    • '+ '
    • Ecliptic Lng.: '+Math.round(moonlng * 100) / 100+'°
    • '+ '
    •  
    • '+ '
    • Lunar Mansion: '+mansion+'
    • '+ '
    • Arabic: '+def.moon.mansion.arabic[mansion]+'
    • '+ '
    • Latin: '+def.moon.mansion.latin[mansion]+'
    • '+ '
    •  
    • '+ '
    • Lunar Decan: '+moonsign.decan+'
    • '+ '
    • Greek: '+def.decan.greek[moonsign.decan]+'
    • '+ '
    • Latin: '+def.decan.latin[moonsign.decan]+'
    • '+ '
    • Ruler: '+def.planet.name[def.decan.ruler[moonsign.sign]]+'
    • '+ '
    •  
    • '+ '
    • Mars
    • '+ '
    • Ecliptic Lng.: '+Math.round(marslng * 100) / 100+'°
    • '+ '
    • Zodiac: '+def.zodiac.name[marssign.sign]+'
    • '+ '
    • Ruler: '+def.planet.name[def.zodiac.ruler[marssign.sign]]+'
    • '+ '
    • Decan: '+marssign.decan+' ('+def.decan.greek[marssign.decan]+')
    • '+ '
    • Ruler: '+def.planet.name[def.decan.ruler[marssign.sign]]+'
    • '+ '
    •  
    • '+ '
    • Mercury
    • '+ '
    • Ecliptic Lng.: '+Math.round(mercurylng * 100) / 100+'°
    • '+ '
    • Zodiac: '+def.zodiac.name[mercurysign.sign]+'
    • '+ '
    • Ruler: '+def.planet.name[def.zodiac.ruler[mercurysign.sign]]+'
    • '+ '
    • Decan: '+mercurysign.decan+' ('+def.decan.greek[mercurysign.decan]+')
    • '+ '
    • Ruler: '+def.planet.name[def.decan.ruler[mercurysign.sign]]+'
    • '+ '
    •  
    • '+ '
    • Jupiter
    • '+ '
    • Ecliptic Lng.: '+Math.round(jupiterlng * 100) / 100+'°
    • '+ '
    • Zodiac: '+def.zodiac.name[jupitersign.sign]+'
    • '+ '
    • Ruler: '+def.planet.name[def.zodiac.ruler[jupitersign.sign]]+'
    • '+ '
    • Decan: '+jupitersign.decan+' ('+def.decan.greek[jupitersign.decan]+')
    • '+ '
    • Ruler: '+def.planet.name[def.decan.ruler[jupitersign.sign]]+'
    • '+ '
    •  
    • '+ '
    • Venus
    • '+ '
    • Ecliptic Lng.: '+Math.round(venuslng * 100) / 100+'°
    • '+ '
    • Zodiac: '+def.zodiac.name[venussign.sign]+'
    • '+ '
    • Ruler: '+def.planet.name[def.zodiac.ruler[venussign.sign]]+'
    • '+ '
    • Decan: '+venussign.decan+' ('+def.decan.greek[venussign.decan]+')
    • '+ '
    • Ruler: '+def.planet.name[def.decan.ruler[venussign.sign]]+'
    • '+ '
    •  
    • '+ '
    • Saturn
    • '+ '
    • Ecliptic Lng.: '+Math.round(saturnlng * 100) / 100+'°
    • '+ '
    • Zodiac: '+def.zodiac.name[saturnsign.sign]+'
    • '+ '
    • Ruler: '+def.planet.name[def.zodiac.ruler[saturnsign.sign]]+'
    • '+ '
    • Decan: '+saturnsign.decan+' ('+def.decan.greek[saturnsign.decan]+')
    • '+ '
    • Ruler: '+def.planet.name[def.decan.ruler[saturnsign.sign]]+'
    • ' ) ); $('#p-actions').html( $('
        ').append( '
      • Operations

      • '+ '
      • Key of Solomon
      • '+ '
        • '+ '
        • Hygromanteia
        • '+ '
          • '+ '
          • Lunar Day
          • '+ '
            • '+ '
            • Moon Sign
            • '+ '
              • '+ '
              • Lunar Mansion
              • '+ '
                • ' ) ); $('
                • ').text('All Day:').appendTo('ul.kos-actions'); $.each(claviculaday.actions.list.sort(function (a, b) { return a.action.localeCompare( b.action ); }), function(i) { $('
                • ').text(claviculaday.actions.list[i].action).appendTo('ul.kos-actions'); }); $('
                • ').html(' ').appendTo('ul.kos-actions'); $('
                • ').text('This Hour:').appendTo('ul.kos-actions'); $.each(claviculahour.actions.list.sort(function (a, b) { return a.action.localeCompare( b.action ); }), function(i) { $('
                • ').text(claviculahour.actions.list[i].action).appendTo('ul.kos-actions'); }); $('
                • ').html(' ').appendTo('ul.kos-actions'); $.each(hygromanteia.actions.list.sort(function (a, b) { return a.action.localeCompare( b.action ); }), function(i) { $('
                • ').text(hygromanteia.actions.list[i].action).appendTo('ul.hyg-actions'); }); $('
                • ').html(' ').appendTo('ul.hyg-actions'); $.each(lunarday.actions.list.sort(function (a, b) { return a.action.localeCompare( b.action ); }), function(i) { $('
                • ').text(lunarday.actions.list[i].action).appendTo('ul.lud-actions'); }); $('
                • ').html(' ').appendTo('ul.lud-actions'); $.each(lunarsign.actions.list.sort(function (a, b) { return a.action.localeCompare( b.action ); }), function(i) { $('
                • ').text(lunarsign.actions.list[i].action).appendTo('ul.mos-actions'); }); $('
                • ').html(' ').appendTo('ul.mos-actions'); $.each(lunarmansion.actions.list.sort(function (a, b) { return a.action.localeCompare( b.action ); }), function(i) { $('
                • ').text(lunarmansion.actions.list[i].action).appendTo('ul.lum-actions'); }); if ( !$('.addtocalendar').length ) $('