Loading <%= Prefs.SiteName %>...
<%= Prefs.SiteName %> - Welcome <%= User.Name %>
<<RemoteContent "/ac/asGenProjList.asp" "" "" "raw">>
<html>\n<body>\n<form>\n <table class="noBorder" style="border:0;margin-left:0">\n <tr>\n <td>Variable Name:</td>\n <td colspan="2"><input type="text" name="Namen" id="aav_nam" size="12" value=""></td>\n <td>Chart Title:</td>\n <td colspan="2"><input type="text" name="Title" id="aav_title" size="12" value=""></td>\n <td>FOV (arcmin):</td>\n <td colspan="2"><input type="text" name="Field" id="aav_fov" size="12" value=""></td>\n <td>Mag limit:</td>\n <td colspan="2"><input type="text" name="Maglim" id="aav_limit" size="12" value=""></td>\n </tr>\n </table>\n</form>\n</body>\n</html><<slider "" "AAVSOHelpSlider" Info>>\n\n<<PersistentForm>><<PostForm "" "/ac/aaavso.asp" "Create Chart" "Fill in the blanks above and push the button to generate the chart.">><<RefreshTiddler "Erase Chart" "Do this before generating another chart">>
\nFill in the four blank fields above. For the name field, only the conventional variable star designations are accepted. Examples are "ZZ Cam" or "V0435 Cyg". "V435 Cyg" is equivalent to "V0435 Cyg". Other designations for names, like "lambda Orionis" or "Algol", will generate an error. Do not use quotation marks. Push the button below to generate the chart. The chart can be copied to paper using a screen grab. \n\nIf you change any input and push the {{{Create Chart}}} button again, the next chart will appear below the first. Or you can push the {{{Erase Chart}}} button first before generating another chart in a clean window.\n\nThe executable .asp file included here builds a specifically formatted URL that is sent to the AAVSO Variable Star Plotter website. It may take 5-10 seconds or so to generate and return the chart image.\n\nThanks to [[ACP wizard Dick Berg|http://www.brightskies.us/]] who developed and provided this tool.\nReference: http://www.aavso.org/accessing-variable-star-plotter-get-method ~~^^(Opens in a new tab.)^^~~
<<slider "" "Single Object Help" Help "Helpful information">>\n<html>\n<form>\n <table class="noBorder" style="border:0;margin-left:0">\n <tr>\n <td>Target Name:</td>\n <td colspan="2"><input type="text" name="Target" id="simg_tgt" size="14" value="" validate="required">\n <input type="hidden" name="visOnly" id="simg_visOnly" value="true">\n <input type="text" name="isOrb" id="simg_isOrb"></td>\n <td>\n <a id="simg_getCoords" href="javascript:;" \n onClick="DC3.CatSearch.lookup(DC3.Lib.getPlace(this),\n // Trigger event from a change in the isOrb field which DC3.CatSearch fills in\n (function(msg) { $('#simg_isOrb').trigger(jQuery.Event('change')) }));"\n title="Look up coordinates or calculate planetary ephemeris">&nbsp;Get Coordinates or Ephemeris</a>\n <a id="simg_getTheSky" style="display:none;" href="javascript:;" onClick="DC3.TheSky.fillFormInfo(DC3.Lib.getPlace(this));" \n title="Fill in the coordinates from the current target in TheSky">&nbsp;Get Coordinates From TheSky</a>\n </td>\n </tr>\n <tr>\n <td>Right Asc. (hrs):</td>\n <td colspan="2"><input type="text" name="RA" id="simg_ra" size="12" value="" validate="sexanum[0:24],required"></td>\n <td><a id="simg_catSearch" href="javascript:;" onClick="story.displayTiddler(this,'Deep Sky Catalog Search',null,config.options.chkAnimate,false)" title="Open the Deep Sky Catalog Search Item">&nbsp;Deep Sky Catalog Search</a></td>\n </tr>\n <tr>\n <td>Declination (deg):</td>\n <td colspan="2"><input type="text" name="Dec" id="simg_dec" size="12" value="" validate="sexanum[-90:90],required"></td>\n <td>&nbsp;<i>(coordinates in J2000)</i></td>\n </tr>\n <!--<% if(rotAvail) { %>-->\n <tr>\n <td>Pos. Angle (deg):</td>\n <td colspan="2"><input type="text" name="PA" id="simg_pa" size="5" value="" validate="number,between[0:360],required"></td>\n <td>&nbsp;<i>(true/sky PA, required)</i></td>\n </tr>\n <!--<% } %>-->\n <tr id="simg_orbTrackRow">\n <td>Orbital Tracking:</td>\n <td colspan="2"><input type="checkbox" name="orbTrack" id="simg_orbTrack" value="yes"></td>\n <td>&nbsp;<i>(follow body, if mount supports it)</i></td>\n </tr>\n <!-- Mimics one row of the Color Series' expando form -->\n <tr>\n <td>Duration (sec):</td>\n <td><input type="text" name="ColorExposure1" id="ColorExposure1" size="5" value="" validate="number, required"></td>\n <!--<% if(filtNames) { %>-->\n <td>&nbsp;Filter:&nbsp;\n <select name="ColorFilter1" id="ColorFilter1">\n <%= filterNameOptions() %>\n </select></td>\n <!--<% } %>-->\n <td>&nbsp;Binning:&nbsp;\n <select name="ColorBinning1" id="ColorBinning1">\n <%= binningOptions() %>\n </select></td>\n </tr>\n <input type="hidden" name="ColorCount1" id="ColorCount1" value="1">\n <input type="hidden" name="ColorUse1" id="ColorUse1" value="yes">\n <input type="hidden" name="Dither" id="Dither" value="0.0">\n </table>\n <div style="margin-top:0px;margin-bottom:8px"> \n <!--<% if(Prefs.Autofocus.Enabled) { %>-->\n <input type="checkbox" name="AF" value="yes" title="Focus the system before acquiring the image">\n Auto focus before imaging\n </input>\n <!--<% } %>-->\n \n <!--<% if(Prefs.CameraPrefs.AutoCalibrate) { %>-->\n <input type="checkbox" checked disabled name="Cal" value="yes" title="Observatory calibrates all images">Auto calibrate</input>\n <!--<% } else { %>-->\n <input type="checkbox" name="Cal" value="yes" title="Apply calibration frames after imaging">Auto calibrate</input>\n <!--<% } %>-->\n </div>\n</form>\n</html><<PersistentForm>><<PostForm "" "/ac/aacqform.asp" "Acquire Image" "Starts the image acquisition process">><<ValidateForm "" "postit">><script>\n// DC3.TheSky.setTargetInfo() and DC3.TheSky.switchLink() depend on the link IDs!\nif(DC3.TheSky.theSkyInfoAvailable()) DC3.TheSky.switchLink("simg");\n\n$('#simg_isOrb').change(function() {\n if($('#simg_isOrb').val() == 'orb') {\n $('#simg_ra').fadeTo('slow', 0.2);\n $('#simg_ra').prop('disabled', true);\n $('#simg_dec').fadeTo('slow', 0.2);\n $('#simg_dec').prop('disabled', true);\n $('#simg_orbTrackRow').fadeIn('slow');\n } else {\n $('#simg_ra').fadeTo('slow', 1.0);\n $('#simg_ra').prop('disabled', false);\n $('#simg_dec').fadeTo('slow', 1.0);\n $('#simg_dec').prop('disabled', false);\n $('#simg_orbTrack').prop('checked', false); // Force tracking checkbox off, and for persisted forms\n var e = { target: null };\n e.target = $('#simg_orbTrack')[0];\n config.macros.PersistentForm.onChange(e);\n $('#simg_orbTrackRow').fadeOut('slow');\n }\n });\n$('#simg_orbTrackRow').fadeOut(0);\n$('#simg_isOrb').hide(); // Can't be input type="hidden", must persist\n$('#simg_isOrb').trigger(jQuery.Event('change')); // We don't have the catSearch result yet, so...\n\n</script>\n
If you have lots of images this could take a long time to appear.\n\n<<RemoteContent '/images/<%= User.Username %>/aindex.asp' Refresh 'Refresh the file list'>>
<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkToggleLinks>> Clicking on links to items that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\n^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> ConfirmBeforeDeleting\nMaximum number of lines in an item edit box: <<option txtMaxEditRows>>\n<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field\n<<option chkSinglePageMode>> Display one item at a time\n<<option chkTopOfPageMode>> Always open items at the top of the page
/***\n|''Name:''|allTagsExPlugin|\n|''Description:''|Post from form, wikify response|\n|''Date:''|Sept 20, 2006|\n|''Source:''|[[allTagsExPlugin]]|\n|''Author:''|Bob Denny ~DC-3 Dreams, SP|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''Version:''|1.0.1|\n|''~CoreVersion:''|2.0.11|\n|''Browser:''|Firefox 1.5; Internet Explorer 6.0; Safari|\n|''Require:''|//none//|\nThis macro replaces the 'allTags' macro used in the tags tab of the sidebar, etc. \n!!Revision History\n<<<\n''2006.09.23 [1.0.1]'' Initial creation\n<<<\n!!Code\n***/\n//{{{\nversion.extensions.allTagsEx = {\n major: 1, minor: 0, revision: 1,\n date: new Date(2006, 9, 23), \n type: 'macro',\n source: "#allTagsExPlugin"\n};\n\nconfig.macros.allTagsEx = \n{\n handler: function(place, macroName, params, wikifier, paramString, tiddler) \n {\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul", null, null, null);\n if(tags.length === 0)\n createTiddlyElement(theDateList,"li", null, "listTitle", config.macros.allTags.noTags);\n for(var t = 0; t < tags.length; t++)\n {\n var tagTiddler = store.fetchTiddler(tags[t][0]);\n if(!tagTiddler || !tagTiddler.isTagged("excludeLists"))\n {\n var theListItem = createTiddlyElement(theDateList, "li", null, null, null);\n var theTag = createTiddlyButton(theListItem,tags[t][0] + " (" + tags[t][1] + ")", \n config.macros.allTags.tooltip.format([tags[t][0]]), onClickTag);\n theTag.setAttribute("tag", tags[t][0]);\n }\n }\n }\n};\n//}}}\n
Your "real" name for signing edits, for example Joe Author. The observatory users won't see the edit names and dates. They are for your reference.
''Tag'': Items which belong solely to the authoring environment. These items always have the [[deleteUser]] tag as well, causing them to be removed when building the final content.
We're going to assume that you've figured out the general layout of this web interface and how to navigate the items. See [[Using This Web Site]].\n\nThis web interface uses TiddlyWiki as a framework. As you author, you'll see micro-content items referred to as //tiddlers//, but don't be confused. A tiddler is just an item. You are reading a tiddler right now.\n!!Authoring Process\nWe'll soon see how to make changes and additions to the web interface, but first it's important to know how the process works! All server web content is kept in the ACP ''~WebDocs'' folder and subfolders below it. There are two files on the server, ''author.html'' (the authoring document you see now) and ''index.asp'' (the file that generates the interface that your observers see).\n\nAll authoring is done using this (author.html) document. Once you have made your changes, just click the ''save to web'' link in the right sidebar. This will upload the changed author.html to the server and save the previous version to the ACP ''~WebDocs\sauthor-backup'' backup subfolder. \n\nBut there's more. After the interface is uploaded, the server creates a new end-user document ''index.asp''. A lot goes on during this process, most of which you needn't be concerned about. There are a few things, though, that you'll need to know and we'll cover them later. Anyway, all you have to do is ''save to web'' and your changes are ready for your observers.\n!!Editing an Existing Item\nThis is really easy. Click the ''edit'' link in the toolbar or just double-click anywhere in the item. Make your changes, then click the ''done'' link in the toolbar. Of course ''cancel'' will discard any changes you made. @@Don't click ''delete'' on any existing tiddler@@, you will probably break something. Now its time to play in the [[Sandbox]]. This is never saved to the observers' interface, so feel free to do anything you want. The [[Authoring System]] item has links to formatting reference information.\n\nDouble-click this item and see how I formatted it!\n!!Real Work: [[Contact Info]]\nIf you haven't yet made any changes, the [[Contact Info]] item will contain some boilerplate info. If you click [[Contact Info]] in the Observatory Info menu on the left (or one of the links right here), you'll see it. Time to put something useful into it so your observers will have something to see. Click its ''edit'' link in the toolbar. Delete everything that is there, leaving it completely empty. Now use your newly learned wikitext skills to put whatever information you wish into it. Include your name, email address, phone number, or whatever you want your observers to know. Now click ''done''.\n\n@@IMPORTANT!@@ We'll explain tags later, but this is important. Using the ''tags'' link in the [[Contact Info]] item, position the mouse over the [] for UserContent. Then repeat this for the [] for [[Help]], and again for Custom. @@It's VITAL that you tag all items you change as Custom@@. That's how we'll preserve your changes through updates to the web content. Now click the ''tags'' link one more time and verify that [[UserContent]], [[Help]], and [[Custom]] are set as tags.\n\nNow click ''save to web''. The new content is now available to your observers. You can quickly test the observers' interface by clicking ''Test Live''. Do it now. It will open a new browser tab or window with the interface that your observers see. Open the Observatory Info menu on the left and click [[Contact Info]]. You should see the info you entered.\n!!Creating New Items\nThis is easy. Click ''new tiddler'' in the right sidebar. A new item will open for editing. Once you're finished, again use the ''tags'' link in the toolbar to set (at least) [[UserContent]], [[Custom]](!), and maybe [[Help]].\n\nIf you create a brand new item, how will your observers find it? It will appear in the Items tab of the right sidebar, but the sidebar is initially hidden! Changing the menus in the left sidebar is only for the advanced user (hint: they're in the MainMenu item, but be careful!). Of course you can link to your new item(s) from other items that //are// accessible.\n\nThe [[Welcome]] item normally appears just below the [[System Status]] item whenever observers first log in. That's a __perfect place__ for you to put site-specific news, links to items you have created, etc. Feel free to put anything you want there. You can also change the items that appear at login and have your new content appear at that time. See the next section.\n!!Changing Items That Show at Login\nYou can change the items that appear when a user first logs in. Edit the [[StartupItems]] item. It is a list of item links, one per line, that tell the system which items to display on user login. \n!!Next Steps\nOnce you "get it", you'll see the possibilities... well, at least //some// of them! You should now think about customizing the [[Welcome]], [[Location]] and [[Common Questions]] items. You'll see things enclosed in {{{<% ... %>}}}. These are Active Server Page blocks, their contents will be replaced with some dynamic/generated content by the server. That's how the title and subtitle of browser display end up containing the site name and the login user's name!\n\nFinally, if there's something you want to do and can't figure out how, post a note to the [[DC-3 Dreams Communication Center|http://forums.dc3.com/]] and I'll try to help.
Before you can make changes and successfully save them, you need to set a few things up. Make sure you can see the right sidebar. If not, click the ''side-barยป'' link on the toolbar to show the sidebar. Now click the ''optionsยป'' link on the sidebar to expose the options area.\n\nThere are three things you need to set up:\n# Your real name (only authors can see this)\n# Your server username (must have Administrator privileges on the server!)\n# Your server password\nThe last two are needed (again) because the authoring system itself needs to authenticate itself in order to upload changes.\n\n@@We highly recommend the [[Google Chrome browser|https://www.google.com/intl/en/chrome/browser/]] for authoring and debugging ACP web content.@@ The integrated client-side debugging and inspection tools are extremely powerful.[[Mozilla FireFox|https://www.mozilla.org/en-US/firefox/new/]] is OK as well as long as you have a reasonably current version. It's debugging and inspection tools are also very good. ''NOTE:'' If you are using a very old ~FireFox note that there is a bug in the HTTP engine that forms the core of ACP's web server which prevents ~FireFox from working for ACP authoring. Please update your ~FireFox to the current version 48.0.1 (as of August 2016). Internet Explorer is not recommended because editing items causes all of the line endings and indentation to be removed, making subsequent edits very difficult.\n\nNow click the ''save to web'' link on the sidebar. If all is well, you'll see a popup box in the upper right corner of the browser and it should indicate that the content was successfully saved. If not, re-check the username and password.\n\nOk, you're ready to start. See [[Authoring Roadmap]].
Welcome to the Share Your Sky! authoring environment. Yes, the title is supposed to look like that!\n\nReference information is available on:\n* [[Authoring Setup]] (read this first!)\n* [[Authoring Roadmap]]\n* [[Basic Formatting]]\n* [[Item Level Structure]]\n* [[Formatting Tables]]\n* [[Periodic Refresh Image in Item]]\n* [[Tag Usage]]\n* [[Macros]]\n* [[Using jQuery]]\n* [[Importing and Exporting Items]]\nThere is also a [[Sandbox]] in which you can practice editing and formatting text.\n<script>DC3.LightBox.showAlert('warning', 'Refresh your browser before authoring!');</script>
Asks for a filter name then focuses the optical system for the selected filter. You need to supply the filter name. If you don't know the names of the filters, see [[Instruments & Equipment]].
\nCopyright (c) 2005-2006, ~DC-3 Dreams, SP, Mesa, AZ\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n*Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. \n*Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. \n*Neither the name of ~DC-3 Dreams nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. \nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n
Here are the markups that you can use in item text. \n|!Format|!Markup|!Example|\n|Bold|{{{''Bold''}}} (2 single quotes)|''Bold''|\n|Highlight|{{{@@Highlight@@}}}|@@Highlight@@|\n|CSS Extended Highlights|{{{@@some css;Text@@}}}|@@background-color:#ff0000;color:#ffffff;red coloured@@<<br>>{{{@@background-color:#ff0000;color:#ffffff;red coloured@@}}}|\n|Custom CSS Class|<html><code>{{wrappingClass{Text that is now accentuated}}}</code></html><<br>>By default, the text is placed in a <span>. To use a <div> instead, insert a line break before the text (after the single {)<<br>>In the CSS: {{{.wrappingClass {color: red;} }}}|Add .wrappingClass to StyleSheet|\n|Italic|{{{//Italic//}}}|//Italic//|\n|Monospaced text|<html><code>{{{ ... }}}</code></html>|{{{Monospaced text}}}|\n|Monospaced block multiline|Put <html><code>{{{</code></html> and <html><code>}}}</code></html> on their own lines|<html><pre>{{{<br/>Monospaced<br/>Multi-line<br/>Block<br/>}}}</pre></html>|\n|Strikethough|{{{--Strikethrough--}}}|--Strikethrough--|\n|Subscript|{{{~~Subscript~~}}}|Text~~Subscript~~|\n|Superscript|{{{^^Superscript^^}}}|Text^^Superscript^^|\n|Underlined|{{{__Underline__}}}(2 underscores)|__Underscored__|\n|Any HTML|{{{<html><span>any</span><br /><b>valid</b> <em>xhtml</em></html>}}}|<html><span>any</span><br /><b>valid</b> <em>xhtml</em></html>|\n|Comment|{{{/% This will not appear in the tiddler %/}}}||\n|Supress Wikifying|For example, WikiWord {{{~WikiWord}}} (prefix with tilde)|~WikiWord|
<div class='header' macro='gradient vert #18f #04b'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
/***\nStyles used in Share Your Sky! adaptation of ~TiddlyWiki. These must be completely overridden in other themes, as this style sheet is used only with the Default TW styles (StyleSheetLayout and StyleSheetColors).\n!!Revision History\n<<<\n''2006.10.08 [rbd]'' Begin version control\n''2006.10.23 [rbd]'' Remove height from <input> and <select>, was scrunching buttons.\n''2006.10.24 [rbd]'' Complete telemetry colors\n''2006.11.07 [rbd]'' Faint border for sysmon thumbnail, add light tiddler borders (with Checketts fix), use new TW 2.1.x ColorPalette color specs.\n''2006.11.21 [rbd]'' Add .collapsedTitle for folded tiddlers\n''2009 01 09 [rbd]'' Firefox 3 compatibility. ~HeaderForeground needed width 100%\n''2010.11.17 [rbd]'' ~ACP-490 Add border style for #sm_guideBox\n<<<\n!Overrides for Standard TW styles\n***/\n/*{{{*/\nbody {\n position: static; /*Clint's IE fix part 1 (part 2 in TW now) */\n}\n/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/\n.tiddler {\n border: 1px solid [[ColorPalette::TertiaryLight]];\n padding-bottom: 8px;\n margin-left: 8px; /* Vastly different on IE vs FireFox! */\n margin-bottom: 12px;\n}\n.headerForeground {\n width: 100%; /* Firefox 3 suddenly needed this but not on HeaderShadow */\n padding: 2.5em 0em 1em 1em;\n}\n.headerShadow {\n padding: 2.5em 0em 1em 1em;\n}\n.viewer input {\n font-family: "Lucida Console", "Courier New", Courier, monospace;\n font-size: 1.0em;\n}\n.viewer select {\n font-family: "Lucida Console", "Courier New", Courier, monospace;\n font-size: 1.0em;\n}\n.viewer .sortheader {\n font-weight: normal;\n}\n.viewer .filelist table {\n margin_bottom: 0px;\n}\n.viewer .fileList tr {\n border: none;\n}\n.viewer .fileList td, .viewer .fileList th {\n border: 0;\n padding: 2px 8px 2px 8px;\n}\n.viewer .noBorder table, .viewer .noBorder th, .viewer .noBorder tr, .viewer .noBorder td {\n border: 0;\n}\n.viewer .noBorder #sm_thumb { /* For sysmon thumbnail */\n border: 1px solid #eee;\n padding: 0px;\n}\n.viewer .noBorder #sm_guideBox { /* For sysmon guider trackbox image */\n border: 1px solid #eee;\n padding: 0px;\n}\n.viewer iframe {\n border: 1px dashed blue;\n}\ntextarea {\n font-family:courier !important;\n}\n/*}}}*/\n/***\n!Special style for folded tiddlers\n***/\n/*{{{*/\n.collapsedTitle {\n color: #888;\n font-size: 1.3em;\n font-weight: bold;\n}\n/*}}}*/\n/***\n!System Status Display Styles\n***/\n/*{{{*/\ndiv.progBarBg {\n position:relative;\n height:0.75em;\n background-color: [[ColorPalette::SecondaryPale]];\n}\ndiv.progBarFg {\n position:absolute;\n overflow: hidden;\n height: 0.75em;\n width:0px;\n background-color: [[ColorPalette::SecondaryDark]];\n}\ntd.telemetry {\n font-family: "Lucida Console", "Courier New", Courier, monospace;\n font-size: 1em;\n background-color: [[ColorPalette::SecondaryPale]];\n white-space: pre;\n color: [[ColorPalette::TertiaryLight]]; /* "off" state overridden by inner <span> tags */\n}\nspan.telemActive {\ncolor: [[ColorPalette::Foreground]];\n}\nspan.telemWarn {\n color: red;\n}\nspan.telemOff {\ncolor: [[ColorPalette::TertiaryLight]];\n} /* Match color in td.telemetry */\ntd.telemlabel {\n white-space: nowrap;\n}\ntextarea.scriptlog {\n border: 1px solid #18f;\n margin: 0;\n padding: 0.5em;\n background: [[ColorPalette::SecondaryPale]];\n color: black;\n font-family: "Lucida Console", "Courier New", Courier, monospace !important;\n font-size: 8pt !important;\n white-space: pre;\n line-height: 110%;\n}\n\n/*}}}*/\n
The web content is optimized for [[W3C|http://www.w3.org/]] standards compatibility. As of 2011, the situation with [[browser quirks|http://www.quirksmode.org/]] has improved considerably. As far as we know, this web site is compatible with recent versions of Google Chrome, Firefox, Safari, Internet Explorer, and Opera. @@If you have display problems with this web site, update your browser!@@\n!!!Touch Browsers\nThe last few years has also seen the advent of //touch// browsers in the iPhone, Android, and iPad. The early bugs in these ~WebKit based browsers have been overcome, allowing them to be used for Share Your Sky! Older Android phones will likely have problems, but any Android 2.2 (2010) or later phone will work fine.\n!!!Authoring with ~FireFox\nThe embedded server engine that powers ACP's web services has a bug that prevents FireFox from saving authored web content (authoring mode). We recommend you use [[Google Chrome|http://www.google.com/chrome]] for authoring. [[Switch to Authoring Mode|author.html]] to learn more.\n
\nIf you want cal frames at a specific temperature, enable Require cooler temp and fill in the required temperature. Look at the [[System Status]] display to see the current cooler temperature. If you do this, the cal run will start with a {{{#chill}}} command, which will turn on the cooler if needed, then set the temperature and wait for up to 15 minutes. To succeed, the temperature must stay within plus/minus 2 degrees of the setpoint continuously for 60 seconds.
Calibrates the auto-guider. You should //not// have to do this unless you change your optical train. If you are not the observatory operator, you probably don't have to do this either!
<<slider "" "Cal Frame Help" Help "Helpful information">>\n\nUse this to acquire dark and bias calibration frames. To request a __bias frame__, simply set the exposure duration to zero. The system will automatically recognize that as a request for a bias frame. \n<html><form>\n <table class="noBorder" style="border:0;margin-left:0">\n <tr>\n <th>Use</th>\n <th>Count</th>\n <th>Duration</th>\n <th>Binning</th>\n </tr>\n <tr id="CalRow1">\n <td><input type="checkbox" name="CalUse1" id="CalUse1" value="yes"></td>\n <td><input type="text" name="CalCount1" id="CalCount1" size="4" value=""></td>\n <td><input type="text" name="CalExposure1" id="CalExposure1" size="5" value=""></td>\n <td><select name="CalBinning1" id="CalBinning1"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow2" style="display:none;">\n <td><input type="checkbox" name="CalUse2" id="CalUse2" value="yes"></td>\n <td><input type="text" name="CalCount2" id="CalCount2" size="4" value=""></td>\n <td><input type="text" name="CalExposure2" id="CalExposure2" size="5" value=""></td>\n <td><select name="CalBinning2" id="CalBinning2"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow3" style="display:none;">\n <td><input type="checkbox" name="CalUse3" id="CalUse3" value="yes"></td>\n <td><input type="text" name="CalCount3" id="CalCount3" size="4" value=""></td>\n <td><input type="text" name="CalExposure3" id="CalExposure3" size="5" value=""></td>\n <td><select name="CalBinning3" id="CalBinning3"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow4" style="display:none;">\n <td><input type="checkbox" name="CalUse4" id="CalUse4" value="yes"></td>\n <td><input type="text" name="CalCount4" id="CalCount4" size="4" value=""></td>\n <td><input type="text" name="CalExposure4" id="CalExposure4" size="5" value=""></td>\n <td><select name="CalBinning4" id="CalBinning4"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow5" style="display:none;">\n <td><input type="checkbox" name="CalUse5" id="CalUse5" value="yes"></td>\n <td><input type="text" name="CalCount5" id="CalCount5" size="4" value=""></td>\n <td><input type="text" name="CalExposure5" id="CalExposure5" size="5" value=""></td>\n <td><select name="CalBinning5" id="CalBinning5"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow6" style="display:none;">\n <td><input type="checkbox" name="CalUse6" id="CalUse6" value="yes"></td>\n <td><input type="text" name="CalCount6" id="CalCount6" size="4" value=""></td>\n <td><input type="text" name="CalExposure6" id="CalExposure6" size="5" value=""></td>\n <td><select name="CalBinning6" id="CalBinning6"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow7" style="display:none;">\n <td><input type="checkbox" name="CalUse7" id="CalUse7" value="yes"></td>\n <td><input type="text" name="CalCount7" id="CalCount7" size="4" value=""></td>\n <td><input type="text" name="CalExposure7" id="CalExposure7" size="5" value=""></td>\n <td><select name="CalBinning7" id="CalBinning7"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow8" style="display:none;">\n <td><input type="checkbox" name="CalUse8" id="CalUse8" value="yes"></td>\n <td><input type="text" name="CalCount8" id="CalCount8" size="4" value=""></td>\n <td><input type="text" name="CalExposure8" id="CalExposure8" size="5" value=""></td>\n <td><select name="CalBinning8" id="CalBinning8"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow9" style="display:none;">\n <td><input type="checkbox" name="CalUse9" id="CalUse9" value="yes"></td>\n <td><input type="text" name="CalCount9" id="CalCount9" size="4" value=""></td>\n <td><input type="text" name="CalExposure9" id="CalExposure9" size="5" value=""></td>\n <td><select name="CalBinning9" id="CalBinning9"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow10" style="display:none;">\n <td><input type="checkbox" name="CalUse10" id="CalUse10" value="yes"></td>\n <td><input type="text" name="CalCount10" id="CalCount10" size="4" value=""></td>\n <td><input type="text" name="CalExposure10" id="CalExposure10" size="5" value=""></td>\n <td><select name="CalBinning10" id="CalBinning10"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow11" style="display:none;">\n <td><input type="checkbox" name="CalUse11" id="CalUse11" value="yes"></td>\n <td><input type="text" name="CalCount11" id="CalCount11" size="4" value=""></td>\n <td><input type="text" name="CalExposure11" id="CalExposure11" size="5" value=""></td>\n <td><select name="CalBinning11" id="CalBinning11"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow12" style="display:none;">\n <td><input type="checkbox" name="CalUse12" id="CalUse12" value="yes"></td>\n <td><input type="text" name="CalCount12" id="CalCount12" size="4" value=""></td>\n <td><input type="text" name="CalExposure12" id="CalExposure12" size="5" value=""></td>\n <td><select name="CalBinning12" id="CalBinning12"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow13" style="display:none;">\n <td><input type="checkbox" name="CalUse13" id="CalUse13" value="yes"></td>\n <td><input type="text" name="CalCount13" id="CalCount13" size="4" value=""></td>\n <td><input type="text" name="CalExposure13" id="CalExposure13" size="5" value=""></td>\n <td><select name="CalBinning13" id="CalBinning13"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow14" style="display:none;">\n <td><input type="checkbox" name="CalUse14" id="CalUse14" value="yes"></td>\n <td><input type="text" name="CalCount14" id="CalCount14" size="4" value=""></td>\n <td><input type="text" name="CalExposure14" id="CalExposure14" size="5" value=""></td>\n <td><select name="CalBinning14" id="CalBinning14"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow15" style="display:none;">\n <td><input type="checkbox" name="CalUse15" id="CalUse15" value="yes"></td>\n <td><input type="text" name="CalCount15" id="CalCount15" size="4" value=""></td>\n <td><input type="text" name="CalExposure15" id="CalExposure15" size="5" value=""></td>\n <td><select name="CalBinning15" id="CalBinning15"><%= binningOptions() %></select></td>\n </tr>\n <tr id="CalRow16" style="display:none;">\n <td><input type="checkbox" name="CalUse16" id="CalUse16" value="yes"></td>\n <td><input type="text" name="CalCount16" id="CalCount16" size="4" value=""></td>\n <td><input type="text" name="CalExposure16" id="CalExposure16" size="5" value=""></td>\n <td><select name="CalBinning16" id="CalBinning16"><%= binningOptions() %></select></td>\n </tr>\n <tr>\n <td colspan="4"><a href="javascript:;" class="button" title="Click to add another row" onclick="DC3.Lib.expandoAddRow('Cal');">More</a></td>\n </tr>\n </table>\n&nbsp;<input type="checkbox" name="CalReqTemp" value="yes" />Require cooler temp\n<input type="text" name="CalTemp" size="4" value="-20" /> deg C<br><br>\n</form></html><<PersistentForm>><<PostForm "" "/ac/aacqcal.asp" "Acquire Cal Frames" "Starts the cal frame acquisition process">><<ValidateForm "" "postit">>\n<script>DC3.Lib.expandoInitializeForm("Cal");</script>\n
Turn this on to cause searching to be case-sensitive.
Use this to perfect the pointing of your scope. It does a standard ACP pointing update. It takes an image, plate solves, then <% if(Util.PointingCorrectionEnabled) { %>adds a new mapping point to the pointing corrector, improving the accuracy in the area where the scope is currently pointed<% } else { %>syncs or centers the scope with the hyper-accurate coordinates thus obtained<% }%>.<% if(Prefs.EnableAllSkySolving) { %> All-sky plate solving is available on this observatory, so if the basic plate solution fails after being tried at two closely spaced locations, it will try to do an all-sky plate solution using [[Astrometry.net|http://astrometry.net]]. This often succeeds, and if the telescope supports syncing, will result in the telescope being re-synced to recover its pointing.<% } %>
<<slider "" "Check Observing Plan Help" Help "Helpful information">>\n\n<html><table width="96%" style="border:none;margin:1px;background:transparent"><iframe id="acheckplan" src="/ac/acheckplan.asp" width="100%" height="0" frameborder="0" scrolling="no" allowtransparency style="border:none;"></iframe></table></html><script>\n// This is for lost refresh on IE6\nif(document.all) { // IE\nvar iFrame = place.getElementsByTagName("iframe")[0];\niFrame .src = iFrame .src;\n}\n</script>
\nThis item provides you with a way to check an [[Observing Plan|Making Observing Plans]] before uploading it to your [[Plans Area|Observing Plans]] for running. Virtually any plan error will be detected, but there are a few things that can't be checked because it's designed to be used with the imager and telescope offline. The following things are not checked:\n*Filter requested but imager has no filters\n*Filter not specified but imager has filters\n*Filter name matches one of the imager's filters\n*Rotator PA given but imager has no rotator\n*Rotator PA not given, but imager has a rotator\n*#Orbital tracking (#trackon) specified but the mount doesn't support it\n*#Dome control directives (#domeopen/#domeclose) given but there is no dome controller\n*Errors in the syntax of orbital elements for solar system objects or NEOCP ephemerides\n*Explicit flat plan file specifications are not checked for existence.\nAnd of course, target visibility can't be checked because the plan will be run at a different time. All of the above will be checked at the start of an actual run, so be sure to look at the system console after starting a plan to make sure that one of these errors isn't detected. The plan checker is designed to eliminate almost all sources of errors before uploading the plan.
/***\n|''Name:''|CheckboxPlugin|\n|''Source:''|http://www.TiddlyTools.com/#CheckboxPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nAdd checkboxes to your tiddler content. Checkbox states can be preserved in the document by either automatically modifying the tiddler content or setting/removing tags on specified tiddlers, or they may be saved as local cookies by assigning an optional 'chkID' to the checkbox. Add custom javascript for programmatic initialization and onClick handling for any checkbox. Also provides access to checkbox DOM element data and tracks the checkbox state in TiddlyWiki's config.options[] internal data.\n\n!!!!!Usage\n<<<\nThe checkbox syntax, including all optional parameters, is contained inside a matched set of [ and ] brackets.\n{{{ [x=id(title|tag){init_script}{onclick_script}] }}}\n\nAn alternative syntax lets you place the optional parameters ''outside'' the [ and ] brackets, and is provided for backward-compatibility with existing content that may include checkbox definitions based on earlier releases of this plugin:\n{{{ [x]=id(title|tag){init_script}{onclick_script} }}}\n\n//{{{\n[ ]or[_] and [x]or[X]\n//}}}\nSimple checkboxes. The current unchecked/checked state is indicated by the character between the {{{[}}} and {{{]}}} brackets ("_" means unchecked, "X" means checked). When you click on a checkbox, the current state is retained by directly modifying the tiddler content to place the corresponding "_" or "X" character in between the brackets\n//{{{\n[x=id]\n//}}}\nAssign an optional ID to the checkbox so you can use {{{document.getElementByID("id")}}} to manipulate the checkbox DOM element, as well as tracking the current checkbox state in {{{config.options["id"]}}}. If the ID starts with "chk" the checkbox state will also be saved in a cookie, so it can be automatically restored whenever the checkbox is re-rendered (overrides any default {{{[x]}}} or {{{[_]}}} value). If a cookie value is kept, the "_" or "X" character in the tiddler content remains unchanged, and is only applied as the default when a cookie-based value is not currently defined.\n//{{{\n[x(title|tag)] or [x(title:tag)]\n//}}}\nInitializes and tracks the current checkbox state by setting or removing ("TogglyTagging") a particular tag value from a specified tiddler. If you omit the tiddler title (and the | or : separator), the specified tag is assigned to the current tiddler. If you omit the tag value, as in {{{(title|)}}}, the default tag, {{{checked}}}, is assumed. Omitting both the title and tag, {{{()}}}, tracks the checkbox state by setting the "checked" tag on the current tiddler. When tag tracking is used, the "_" or "X" character in the tiddler content remains unchanged, and is not used to set or track the checkbox state. If a tiddler title named in the tag does not exist, the checkbox state defaults to //unselected//. When the checkbox is subsequently changed to //selected//, it will automatically (and silently) create the missing tiddler and then add the tag to it. //''NOTE: beginning with version 2.1.2 of this plugin, the "|" separator is the preferred separator between the title and tag name, as it avoids syntactic ambiguity when ":" is used within tiddler titles or tag names.''//\n//{{{\n[x{javascript}{javascript}]\n//}}}\nYou can define optional javascript code segments to add custom initialization and/or 'onClick' handling to a checkbox. The current checkbox state (and it's other DOM attributes) can be set or read from within these code segments by reference to the default context-object, 'this'.\n\nThe first code segment will be executed when the checkbox is initially displayed, so that you can programmatically determine it's starting checked/unchecked state. The second code segment (if present) is executed whenever the checkbox is clicked, so that you can perform programmed responses or intercept and override the checkbox state based on complex logic using the TW core API or custom functions defined in plugins (e.g. testing a particular tiddler title to see if certain tags are set or setting some tags when the checkbox is clicked).\n\nNote: if you want to use the default checkbox initialization processing with a custom onclick function, use this syntax: {{{ [x=id{}{javascript}] }}} \n<<<\n!!!!!Configuration\n<<<\nNormally, when a checkbox state is changed, the affected tiddlers are automatically re-rendered, so that any checkbox-dependent dynamic content can be updated. There are three possible tiddlers to be re-rendered, depending upon where the checkbox is placed, and what kind of storage method it is using.\n*''container'': the tiddler in which the checkbox is displayed. (e.g., this tiddler)\n*''tagged'': the tiddler that is being tagged (e.g., "~MyTask" when tagging "~MyTask:done")\n*''tagging'': the "tag tiddler" (e.g., "~done" when tagging "~MyTask:done")\nYou can set the default refresh handling for all checkboxes in your document by using the following javascript syntax either in a systemConfig plugin, or as an inline script. (Substitute true/false values as desired):\n{{{config.checkbox.refresh = { tagged:true, tagging:true, container:true };}}}\n\nYou can also override these defaults for any given checkbox by using an initialization function to set one or more of the refresh options. For example:\n{{{[_{this.refresh.container=false}]}}}\n<<<\n!!!!!Examples\n<<<\n//{{{\n[X] label\n[_] label\n//}}}\n>checked and unchecked static default values\n>[X] label\n>[_] label\n//{{{\n[_=demo] label\n//}}}\n>document-based value (id='demo', no cookie)\n>[_=demo] label\n//{{{\n[_=chkDemo] label\n//}}}\n>cookie-based value (id='chkDemo')\n>[_=chkDemo] label\n//{{{\n[_(CheckboxPlugin|demotag)]\n[_(CheckboxPlugin|demotag){this.refresh.tagged=this.refresh.container=false}]\n//}}}\n>tag-based value (TogglyTagging)\n>[_(CheckboxPlugin|demotag)] toggle 'demotag' (and refresh tiddler display)\n>[_(CheckboxPlugin|demotag){this.refresh.tagged=this.refresh.container=false}] toggle 'demotag' (no refresh)\n>current tags: <script>return store.getTiddler(story.findContainingTiddler(place).id.substr(7)).tags.toString();</script>\n><script label="click to view current tags">alert(store.getTiddler(story.findContainingTiddler(place).id.substr(7)).tags.toString());return false</script>\n//{{{\n[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\n//}}}\n>custom init and onClick functions\n>[X{this.checked=true}{alert(this.checked?"on":"off")}] message box with checkbox state\nRetrieving option values:\nconfig.options['demo']=<script>return config.options['demo']?"true":"false";</script>\nconfig.options['chkDemo']=<script>return config.options['chkDemo']?"true":"false";</script>\n\n!!!!!Installation\nimport (or copy/paste) the following tiddlers into your document:\n''CheckboxPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n2006.05.04 - 2.1.3 fix use of findContainingTiddler() to check for a non-null return value, so that checkboxes won't crash when used outside of tiddler display context (such as in header, sidebar or mainmenu)\n2006.03.11 - 2.1.2 added "|" as delimiter to tag-based storage syntax (e.g. "tiddler|tag") to avoid parsing ambiguity when tiddler titles or tag names contain ":". Using ":" as a delimiter is still supported but is deprecated in favor of the new "|" usage. Based on a problem reported by JeffMason.\n2006.02.25 - 2.1.0 added configuration options to enable/disable forced refresh of tiddlers when toggling tags\n2006.02.23 - 2.0.4 when toggling tags, force refresh of the tiddler containing the checkbox.\n2006.02.23 - 2.0.3 when toggling tags, force refresh of the 'tagged tiddler' so that tag-related tiddler content (such as "to-do" lists) can be re-rendered.\n2006.02.23 - 2.0.2 when using tag-based storage, allow use [[ and ]] to quote tiddler or tag names that contain spaces:\n{{{[x([[Tiddler with spaces]]:[[tag with spaces]])]}}}\n2006.01.10 - 2.0.1 when toggling tags, force refresh of the 'tagging tiddler'. For example, if you toggle the "systemConfig" tag on a plugin, the corresponding "systemConfig" TIDDLER will be automatically refreshed (if currently displayed), so that the 'tagged' list in that tiddler will remain up-to-date.\n2006.01.04 - 2.0.0 update for ~TW2.0\n2005.12.27 - 1.1.2 Fix lookAhead regExp handling for {{{[x=id]}}}, which had been including the "]" in the extracted ID. \nAdded check for "chk" prefix on ID before calling saveOptionCookie()\n2005.12.26 - 1.1.2 Corrected use of toUpperCase() in tiddler re-write code when comparing {{{[X]}}} in tiddler content with checkbox state. Fixes a problem where simple checkboxes could be set, but never cleared.\n2005.12.26 - 1.1.0 Revise syntax so all optional parameters are included INSIDE the [ and ] brackets. Backward compatibility with older syntax is supported, so content changes are not required when upgrading to the current version of this plugin. Based on a suggestion by GeoffSlocock\n2005.12.25 - 1.0.0 added support for tracking checkbox state using tags ("TogglyTagging")\nRevised version number for official post-beta release.\n2005.12.08 - 0.9.3 support separate 'init' and 'onclick' function definitions.\n2005.12.08 - 0.9.2 clean up lookahead pattern\n2005.12.07 - 0.9.1 only update tiddler source content if checkbox state is actually different. Eliminates unnecessary tiddler changes (and 'unsaved changes' warnings)\n2005.12.07 - 0.9.0 initial BETA release\n<<<\n!!!!!Credits\n<<<\nThis feature was created by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.CheckboxPlugin = {major: 2, minor: 1, revision:3 , date: new Date(2006,5,4)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n//{{{\nconfig.checkbox = { refresh: { tagged:true, tagging:true, container:true } };\nconfig.formatters.push( {\n name: "checkbox",\n match: "\s\s[[xX_ ][\s\s]\s\s=\s\s(\s\s{]",\n lookahead: "\s\s[([xX_ ])(\s\s])?(=[^\s\ss\s\s(\s\s]{]+)?(\s\s([^\s\s)]*\s\s))?({[^}]*})?({[^}]*})?(\s\s])?",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // get params\n var checked=lookaheadMatch[1];\n var id=lookaheadMatch[3];\n var tag=lookaheadMatch[4];\n var fn_init=lookaheadMatch[5];\n var fn_click=lookaheadMatch[6];\n // create checkbox element\n var c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick=onClickCheckbox;\n c.srcpos=w.matchStart+1; // remember location of "X"\n c.container=story.findContainingTiddler(w.output); if (c.container) c.container=c.container.id.substr(7); // tiddler containing checkbox\n c.refresh = { };\n c.refresh.container=config.checkbox.refresh.container;\n c.refresh.tagged=config.checkbox.refresh.tagged;\n c.refresh.tagging=config.checkbox.refresh.tagging;\n w.output.appendChild(c);\n // set default state\n c.checked=(checked.toUpperCase()=="X");\n // get/set state by ID\n if (id) {\n c.id=id.substr(1); // trim off leading "="\n if (config.options[c.id]!=undefined)\n c.checked=config.options[c.id];\n else\n config.options[c.id]=c.checked;\n }\n // get/set state by tag\n if (tag) {\n c.tiddler=c.container;\n c.tag=tag.substr(1,tag.length-2).trim(); // trim off parentheses\n var pos=c.tag.indexOf("|"); if (pos==-1) var pos=c.tag.indexOf(":");\n if (pos==0) { c.tag=tag.substr(1); }\n if (pos>0) { c.tiddler=c.tag.substr(0,pos).replace(/\s[\s[/g,"").replace(/\s]\s]/g,""); c.tag=c.tag.substr(pos+1); }\n c.tag.replace(/\s[\s[/g,"").replace(/\s]\s]/g,"");\n if (!c.tag.length) c.tag="checked";\n var t=store.getTiddler(c.tiddler);\n c.checked = (t && t.tags)?(t.tags.find(c.tag)!=null):false;\n }\n if (fn_init) c.fn_init=fn_init.trim().substr(1,fn_init.length-2); // trim off surrounding { and } delimiters\n if (fn_click) c.fn_click=fn_click.trim().substr(1,fn_click.length-2);\n c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n }\n)\n//}}}\n\n//{{{\nfunction onClickCheckbox()\n{\n if (this.fn_init)\n // custom function hook to set initial state (run only once)\n { try { eval(this.fn_init); this.fn_init=null; } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }\n else if (this.fn_click)\n // custom function hook to override or react to changes in checkbox state\n { try { eval(this.fn_click) } catch(e) { displayMessage("Checkbox click error: "+e.toString()); } }\n if (this.id)\n // save state in config AND cookie (only when ID starts with 'chk')\n { config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }\n if ((!this.id || this.id.substr(0,3)!="chk") && !this.tag) {\n // save state in tiddler content only if not using cookie or tag tracking\n var t=story.findContainingTiddler(this); if (t) {\n var t=store.getTiddler(t.id.substr(7));\n if (this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed\n t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);\n store.setDirty(true);\n }\n }\n }\n if (this.tag) {\n var t=store.getTiddler(this.tiddler);\n if (!t) { t=(new Tiddler()); t.set(this.tiddler,"",config.options.txtUserName,(new Date()),null); store.addTiddler(t); } \n var tagged=(t.tags && t.tags.find(this.tag)!=null);\n if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }\n if (!this.checked && tagged) { t.tags.splice(t.tags.find(this.tag),1); store.setDirty(true); }\n // if tag state has been changed, force a display update\n if (this.checked!=tagged) {\n if (this.refresh.tagged) story.refreshTiddler(this.tiddler,null,true); // the TAGGED tiddler\n if (this.refresh.tagging) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler\n }\n }\n // refresh containing tiddler (but not during initial rendering, or we get an infinite loop!)\n if (!this.init && this.refresh.container && this.container!=this.tiddler)\n story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox\n return true;\n}\n//}}}
<div class='header'>\n<div class='titleLine'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div macro='gradient vert #ffffff #cc9900'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n</div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
/***\n!TiddlyWiki Classic Color Scheme\nDesigned by Jeremy Ruston\nModified by Bob Denny for Share Your Sky! (add pale b/g to items, added .viewer {...} style def.)\n\n!!Revision History\n<<<\n''2006.09.19 [rbd]'' Initial adaptation, add pale b/g to items, added .viewer {...} style def.\n''2006.10.08 [rbd]'' Much more work over last 21 days, add styles for System Monitor, clean up XP bar styles.\n''2006.10.23 [rbd]'' Remove height from <input> and <select>, was scrunching buttons.\n''2006.10.26 [rbd]'' Reduce height of header, indent title 0.5em more to 1em, complete telemetry colors.\n''2006.11.07 [rbd]'' Faint border for thumbnail, make progbars match rest of display,\n''2006.11.21 [rbd]'' Add .collapsedTitle for folded tiddlers\n''2010.11.17 [rbd]'' ~ACP-490 Add border style for #sm_guideBox\n''2015.05.19 [rbd]'' ~ACP-1303 Text alignment in main menu top bars\n<<<\n!Colors Used\n*@@bgcolor(#630):color(#fff): #630@@\n*@@bgcolor(#930): #930@@\n*@@bgcolor(#996633): #963@@\n*@@bgcolor(#c90): #c90@@\n*@@bgcolor(#cf6): #cf6@@\n*@@bgcolor(#cc9): #cc9@@\n*@@bgcolor(#ba9): #ba9@@\n*@@bgcolor(#996): #996@@\n*@@bgcolor(#300):color(#fff): #300@@\n*@@bgcolor(#000000):color(#fff): #000@@\n*@@bgcolor(#666): #666@@\n*@@bgcolor(#888): #888@@\n*@@bgcolor(#aaa): #aaa@@\n*@@bgcolor(#ddd): #ddd@@\n*@@bgcolor(#eee): #eee@@\n*@@bgcolor(#ffffff): #fff@@\n*@@bgcolor(#f00): #f00@@\n*@@bgcolor(#ff3): #ff3@@\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\nbody {\n background: #fff;\n color: #000;\n position: static; /*Clint's IE fix part 1 (part 2 in TW now) */\n}\ntextarea {\n font-family:courier !important;\n}\na {\n color: #963;\n}\na:hover {\n background: #963;\n color: #fff;\n}\na img {\n border: 0;\n}\n.collapsedTitle {\n color: #888;\n font-size: 1.3em;\n font-weight: bold;\n}\nh1, h2, h3, h4, h5 {\n background: #cc9;\n}\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n.header {\n background: #300;\n}\n.titleLine {\n color: #fff;\n padding: 2.5em 0em 1em 1em;\n}\n.titleLine a {\n color: #cf6;\n}\n.titleLine a:hover {\n background: transparent;\n}\n/*}}}*/\n/***\n!Main Menu /%=================================================%/\n***/\n/*{{{*/\n#mainMenu .button {\n color: #930;\n}\n#mainMenu .button:hover {\n color: #cf6;\n background: #930;\n}\n#mainMenu li {\n list-style: none;\n}\n/*}}}*/\n/***\n!Sidebar options /%=================================================%/\n~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\n***/\n/*{{{*/\n#sidebar {\n background: #c90;\n right: 0;\n}\n#sidebarOptions a {\n color: #930;\n border: 0;\n margin: 0;\n padding: .25em .5em;\n}\n#sidebarOptions a:hover {\n color: #cf6;\n background: #930;\n}\n#sidebarOptions a:active {\n color: #930;\n background: #cf6;\n}\n#sidebarOptions .sliderPanel {\n background: #eea;\n margin: 0;\n}\n#sidebarOptions .sliderPanel a {\n color: #930;\n}\n#sidebarOptions .sliderPanel a:hover {\n color: #cf6;\n background: #930;\n}\n#sidebarOptions .sliderPanel a:active {\n color: #930;\n background: #cf6;\n}\n/*}}}*/\n/***\n!Sidebar tabs /%=================================================%/\n***/\n/*{{{*/\n.tabSelected, .tabContents {\n background: #eea;\n border: 0;\n}\n.tabUnselected {\n background: #c90;\n}\n#sidebarTabs {\n background: #c90;\n}\n#sidebarTabs .tabSelected {\n color: #cf6;\n background: #963;\n}\n#sidebarTabs .tabUnselected {\n color: #cf6;\n background: #930;\n}\n#sidebarTabs .tabContents {\n background: #963;\n}\n#sidebarTabs .txtMoreTab .tabSelected, #sidebarTabs .txtMoreTab .tabSelected:hover {\n background: #930;\n color: #cf6;\n}\n#sidebarTabs .txtMoreTab .tabUnselected, #sidebarTabs .txtMoreTab .tabUnselected:hover {\n background: #300;\n color: #cf6;\n}\n#sidebarTabs .txtMoreTab .tabContents {\n background: #930;\n}\n#sidebarTabs .tabContents a {\n color: #cf6;\n border: 0;\n}\n#sidebarTabs .button.highlight, #sidebarTabs .tabContents a:hover {\n background: #cf6;\n color: #300;\n}\n/*}}}*/\n/***\n!Message Area /%=================================================%/\n***/\n/*{{{*/\n#messageArea {\n background: #930;\n color: #fff;\n}\n#messageArea a:link, #messageArea a:visited {\n color: #c90;\n}\n#messageArea a:hover {\n color: #963;\n background: transparent;\n}\n#messageArea a:active {\n color: #fff;\n}\n/*}}}*/\n/***\n!Popup /%=================================================%/\n***/\n/*{{{*/\n.popup {\n background: #eea;\n border: 1px solid #930;\n}\n.popup hr {\n color: #963;\n background: #963;\n border-bottom: 1px;\n}\n.popup li.disabled {\n color: #ba9;\n}\n.popup li a, .popup li a:visited {\n color: #300;\n}\n.popup li a:hover {\n background: #930;\n color: #eea;\n}\n/*}}}*/\n/***\n!Tiddler Display /%=================================================%/\n***/\n/*{{{*/\n/** LOSER ON IE6 without Clint's IE fix (see body section at top!) **/\n.tiddler {\n border: 1px solid #eee;\n padding-bottom: 8px;\n margin-left: 8px; /* Vastly different on IE vs FireFox! */\n margin-bottom: 12px;\n}\n.tiddler .button {\n color: #930;\n}\n.tiddler .button:hover {\n color: #cf6;\n background: #930;\n}\n.tiddler .button:active {\n color: #fff;\n background: #c90;\n}\n.shadow .title {\n color: #888;\n}\n.title {\n color: #422;\n}\n.subtitle {\n color: #866;\n}\n.toolbar {\n color: #aaa;\n}\n.toolbar a, .toolbar a:hover {\n border: 0;\n}\n.tagging, .tagged {\n border: 1px solid #fff;\n background-color: #ffc;\n}\n.selected .tagging, .selected .tagged {\n border: 1px solid #aa6;\n background-color: #ffc;\n}\n.tagging .listTitle, .tagged .listTitle {\n color: #999999;\n}\n.footer {\n color: #ddd;\n}\n.selected .footer {\n color: #888;\n}\n.sparkline {\n background: #eea;\n border: 0;\n}\n.sparktick {\n background: #930;\n}\n.errorButton {\n color: #ff0;\n background: #f00;\n}\n.zoomer {\n color: #963;\n border: 1px solid #963;\n}\n/*}}}*/\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.viewer .button {\n background: #c90;\n color: #300;\n border-right: 1px solid #300;\n border-bottom: 1px solid #300;\n}\n.viewer .button:hover {\n background: #eea;\n color: #c90;\n}\n.viewer .imageLink {\n background: transparent;\n}\n.viewer blockquote {\n border-left: 3px solid #666;\n}\n.viewer input {\n font-family: "Lucida Console", "Courier New", Courier, monospace;\n font-size: 1.0em;\n}\n.viewer select {\n font-family: "Lucida Console", "Courier New", Courier, monospace;\n font-size: 1.0em;\n}\n.viewer table {\n border: 2px solid #303030;\n}\n.viewer th, thead td {\n background: #996;\n border: 1px solid #606060;\n color: #fff;\n}\n.viewer td, .viewer tr {\n border: 1px solid #606060;\n}\n.viewer .sortheader {\n font-weight: normal;\n}\n.viewer .fileList table {\n border-color: #ff7f00;\n margin-bottom: 0px;\n}\n.viewer .fileList tr {\n border: none;\n}\n.viewer .fileList td, .viewer .fileList th {\n border: 0;\n padding: 2px 8px 2px 8px;\n}\n.viewer .noBorder table, .viewer .noBorder th, .viewer .noBorder tr, .viewer .noBorder td {\n border: 0;\n}\n.viewer .noBorder #sm_thumb { /* For sysmon thumbnail */\n border: 1px solid #eee;\n padding: 0px;\n}\n.viewer .noBorder #sm_guideBox { /* For sysmon guider trackbox image */\n border: 1px solid #eee;\n padding: 0px;\n}\n.viewer pre {\n border: 1px solid #963;\n background: #eea;\n}\n.viewer code {\n color: #630;\n}\n.viewer hr {\n border: 0;\n border-top: dashed 1px #606060;\n color: #666;\n}\n.viewer iframe {\n border: 1px solid #963;\n}\n.highlight, .marked {\n background: #ff3;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor input {\n border: 1px solid #000;\n}\n.editor textarea {\n border: 1px solid #000;\n width: 100%;\n}\n.editorFooter {\n color: #aaa;\n}\n.editorFooter a {\n color: #930;\n}\n.editorFooter a:hover {\n color: #cf6;\n background: #930;\n}\n.editorFooter a:active {\n color: #fff;\n background: #c90;\n}\n/*}}}*/\n/***\n!XP ~NavBar Style Overrides\n***/\n/*{{{*/\n\n.topItem {\n display: table-cell;\n vertical-align: middle;\n background: url("im/bar-classic-up.png") no-repeat 0 0;\n color:#cf6;\n}\n.topItemOver {\n display: table-cell;\n vertical-align: middle;\n background: url("im/bar-classic-up-on.png") no-repeat 0 0;\n color: #fff;\n}\n.topItemClose {\n display: table-cell;\n vertical-align: middle;\n background: url("im/bar-classic-down.png") no-repeat 0 0;\n color:#cf6;\n}\n.topItemCloseOver {\n display: table-cell;\n vertical-align: middle;\n background: url("im/bar-classic-down-on.png") no-repeat 0 0;\n color: #fff;\n}\n.dropMenu {\n background-color: #963;\n color: #fff;\n}\n.subItem, .subSubItem {\n color: #fff;\n}\n.subItemOver, .subSubItemOver {\n color: #fff;\n}\n.subItem a, .subSubItem a {\n color: #cf6;\n}\n.subItemOver a, .subSubItemOver a {\n color: #000;\n background-color: #cf6;\n}\n/*}}}*/\n/***\n!System Status Display Styles\n***/\n/*{{{*/\ndiv.progBarBg {\n position:relative;\n height:0.75em;\n background-color: #cf6;\n}\ndiv.progBarFg {\n position:absolute;\n overflow: hidden;\n height: 0.75em;\n width:0px;\n background-color: #963;\n}\ntd.telemetry {\n font-family: Lucida Console, Courier New, Courier, monospace;\n font-size: 1em;\n background-color: #cf6;\n white-space: pre;\n color: #c0c0c0;\n// "off" state overridden by inner <span> tags\n}\nspan.telemActive {\n color: black;\n}\nspan.telemWarn {\n color: #ff0000;\n}\nspan.telemOff {\n color: #c0c0c0;\n} /* Match color in td.telemetry */\ntd.telemlabel {\n white-space: nowrap;\n}\ntextarea.scriptlog {\n border: 1px solid #963;\n margin: 0;\n padding: 0.5em;\n background: #cf6;\n color: black;\n font-family: Lucida Console, Courier New, Courier, monospace !important;\n font-size: 8pt !important;\n white-space: pre;\n line-height: 110%;\n}\ntd.trackGraph {\n background-color: #cf6;\n}\n\n/*}}}*/\n
<<RemoteContent '/ac/aclarity2.asp' Refresh 'Refresh the Clarity info'>>
/***\n|''Name:''|CollapseTiddlersPlugin|\n|''Description:''|Command to collapse/restore tiddler display like WindowBlinds|\n|''Date:''|November 21, 2006|\n|''Source:''|[[CollapseTiddlerPlugin]]|\n|''Author:''|Bradley Meck, Eric Schulman, Bob Denny|\n|''License:''|unknown|\n|''Version:''|1.0.1|\n|''~CoreVersion:''|2.0.10/2.1.x|\n|''Browser:''|Firefox 1.5; Internet Explorer 6.0; Safari|\n|''Require:''|[[CollapsedTemplate]] and optionally [[WebCollapsedTemplate]]|\nThis contains 3 commands for use in the toolbar. \n!!Revision History\n<<<\n''????.??.?? [?.?.?]'' Initial creation\n''2006.02.06 [?.?.?]'' ELS - Added check for readOnly flag to use alternative WebCollapsedTemplate\n''2006.02.24 [?.?.?]'' ELS - Added fallback to CollapsedTemplate if WebCollapsedTemplate is not found\n''2006.11.21 [1.0.1]'' RBD - Reformat, add complete info, describe, validate on TW 2.1.x, remove 'all' macros, change toooltip 'tiddler' to 'item'\n<<<\n!!Code\n***/\n//{{{\n//{{{\nversion.extensions.collapseTiddler = {\n major: 1, minor: 0, revision: 1,\n date: new Date(2006, 11, 21), \n type: 'commands',\n source: "#CollapseTiddlerPlugin"\n};\n\nconfig.commands.collapseTiddler = {\n \n text: "fold",\n tooltip: "Collapse this tiddler",\n \n //\n // Common function, refactored (rbd)\n //\n findTemplate: function()\n {\n var t = (readOnly && store.tiddlerExists("WebCollapsedTemplate")) ? "WebCollapsedTemplate" : "CollapsedTemplate";\n if (!store.tiddlerExists(t)) { \n alert("Can't find 'CollapsedTemplate'"); \n return null; \n }\n return t;\n },\n \n //\n // Collapse handler\n //\n handler: function(event, src, title)\n {\n var tid = story.findContainingTiddler(src);\n if(tid.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]) {\n var t = this.findTemplate();\n if(t === null) return;\n if(tid.getAttribute("template") != t ) {\n tid.setAttribute("oldTemplate", tid.getAttribute("template"));\n story.displayTiddler(null, title, t);\n }\n }\n }\n};\n\nconfig.commands.expandTiddler = {\n \n text: "unfold",\n tooltip: "Restore this tiddler",\n \n handler: function(event, src, title)\n {\n var tid = story.findContainingTiddler(src);\n story.displayTiddler(null, title, tid.getAttribute("oldTemplate"));\n }\n};\n\nconfig.commands.collapseOthers = {\n \n text: "focus",\n tooltip: "Restore this tiddler and collapse all others",\n \n handler: function(event, src, title)\n {\n var tid = story.findContainingTiddler(src);\n story.forEachTiddler(\n function(title, tiddler) {\n if(tiddler.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]) {\n var t = config.commands.collapseTiddler.findTemplate();\n if(t === null) return;\n if (tid == tiddler) \n t = tid.getAttribute("oldTemplate"); // If this is null, wasn't collapsed anyway\n story.displayTiddler(null, title, t); // null here uses current template!\n }\n }\n );\n }\n};\n//}}}\n
<div class='toolbar'>\n<span macro='toolbar expandTiddler collapseOthers -closeTiddler'></span>\n</div>\n<div class='collapsedTitle' macro='view title'></div>
!File Access and Usage\n#__Where are my Plan, Image and Log Files__? <% if(User.Username == "localweb") { %>You are running the web browser locally in the observatory, via the Use Web Browser button (localhost). Therefore, your documents are where they are usually stored when using the ACP console, in your Windows ''My Documents'' area, under ''ACP Observing''.<% } else { %>Open the My Documents menu bar on the left to see the Acquired Images, Observing Plans, and Run Logs selections. At the observatory, these documents are stored in the web browser's file storage area, set by the system administrator.<% } %>\n#__How do I upload an ACP observing plan__? <% if(User.Username == "localweb") { %>You are running the web browser locally in the observatory, via the Use Web Browser button (localhost). Therefore you just store the plan in your local ''My Documents\sACP Observing\sPlans folder''.<% } else { %>Open the My Documents menu bar on the left to see the Observing Plans selection. In that item is an uploading form.<% } %>\n!Browser Issues\n#__I clicked the back arrow and everything disappeared! What happened__? This site uses advanced web techniques designed to avoid page changes. Things are displayed in bits within one page, and data is updated dynamically behind the scenes. This means you don't change web pages, ever. Leave the back and forward buttons alone. For more info, see [[Using This Web Site]].\n#__The display looks terrible, very old fashioned, and lots of things just don't work. What's going on__? You are using an old browser. This site was developed for the ~W3C standards in effect 10 years ago, and uses extensive Javascript and cookie services. Upgrade your browser to the latest version. Your browsing experience will be improved in all areas.\n#__Why does the display act crazy and look bad on my mobile phone or pad__? Only the most recent (as of 2011) iPhone, iPad, and Android browsers are good enough to handle the ACP web content. If your older phone or pad doesn't work well with our web site, there's not much we can do, sorry.\n
/% INSTRUCTIONS: Using Basic Formatting, Item Level Formatting, or other advanced features, customize this for your users. Once you have this working feel free to erase everything before the "Information about..." below %/<% if(User.IsAdministrator) { %>\n@@''You can customize this in the [[Authoring Environment|/author.html]]''@@<% } %>\nHere you can put the phone numbers, email addresses, etc. for the person responsible for the observatory, or maybe the organization that runs it. Whatever you want.
''Tag'': Items which provide the user with control features. Always considered to be UserContent.
''Tag'': Items which have been created after installation. __It's vital that any new items that you create be tagged Custom__. It allows you to identify any items which you have added or changed. It also allows ACP installers to preserve your custom content on updates that may require replacement of author.html and index.asp. See [[Importing and Exporting Items]] for tools that you can use to manage custom(ized) items.
//{{{\n// Customizations that apply to both normal and ASP mode\n// Bob Denny 07-Oct-2006\n// 27-Oct-2006 Use unicode escapes for drop chars to can edit in (e.g.) PrimalScript.\n//\n// Shorten/clarify command names and add drop-down icons on appropriate commands\nconfig.commands.references.text = "refs" + (document.all?"\su25BC":"\su25BE"); // UTF8 default is "references"\nconfig.commands.permalink.text = "link"; // default is "permalink"\nconfig.commands.closeOthers.text = "close-others"; // default is "close others"\nconfig.commands.jump.text = "jump" + (document.all?" ":" ");\n// Override default options\nconfig.options.chkHttpReadOnly = false\nconfig.options.txtUploadStoreUrl = "twstore.asp"\nconfig.options.txtUploadBackupDir = "author-backup"\n//}}}
/***\n|''Name:''|DC3.Ajax|\n|''Description:''|General purpose Ajax class|\n|''Date:''|April 12, 2015|\n|''Source:''|http://solo.dc3.com/tw/index.html#DC3.Ajax|\n|''Author:''|Bob Denny ~DC-3 Dreams, SP|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''Version:''|1.0.6|\n|''~CoreVersion:''|2.0.11, 2.1.0|\n|''Require:''|//none//|\n!!Description\nAjax library\n!!Usage\nTBD\n!!Revision History\n<<<\n''2006.09.16 [1.0.1]'' Initial creation, loosely patterned after BidiX Ajax\n''2006.09.20 [1.0.2]'' Add POST to core, refactor massively, now object can contain multiple methods. Add postForm() method.\n''2006.09.22 [1.0.3]'' Support posting hidden fields in postForm()\n''2006.09.26 [1.0.4]'' Change error reporting to popups. Include status code, status text and any body text in error popup.\n''2006.10.03 [1.0.5]'' Refactor post code, lowercase element type strings for tests, check out on TW 2.1.0\n''2015.04.12 [1.0.6]'' POST requests now include a header Cache-Control: no-cache to prevent caching of results.\n<<<\n!!Code\n***/\n//{{{\nif (!window.DC3) window.DC3 = {};\nDC3.Ajax = \n{\n sendRequest: function(method, url, postData, onComplete, clientParams)\n {\n var xmlhttp;\n \n try { \n xmlhttp = new XMLHttpRequest(); \n } catch (e) {\n try { \n xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); \n } catch (e) {\n try { \n xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); \n } catch (e) { \n alert(e.description?e.description:e.toString()); \n }\n }\n }\n if (!xmlhttp) {\n alert("Can't support AJAX: Update your browser!");\n return;\n }\n if (window.netscape) {\n try {\n if (document.location.protocol.indexOf("http") == -1) {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n } catch (e) { \n alert(e.description ? e.description : e.toString()); \n }\n }\n \n xmlhttp.onreadystatechange = function () // Completion event\n {\n if (xmlhttp.readyState == 4) {\n if (xmlhttp.status == 200 || xmlhttp.status === 0) {\n onComplete(xmlhttp.responseText, clientParams);\n } else {\n alert(xmlhttp.status + " " + xmlhttp.statusText + ":\sn" + xmlhttp.responseText);\n }\n }\n };\n \n try {\n xmlhttp.open(method, url, true);\n if(method.toLowerCase() == 'post') {\n xmlhttp.setRequestHeader("Content-Type",\n "application/x-www-form-urlencoded");\n xmlhttp.setRequestHeader("Cache-Control", "no-cache");\n xmlhttp.send(postData);\n } else if (config.browser.isIE) { // Pathetic!\n xmlhttp.send(); \n } else { \n xmlhttp.send(null); \n }\n } catch (e) { \n alert(url + "failed: " + e.toString()); \n }\n },\n \n postForm: function(form, url, onComplete, clientParams)\n {\n var encode = function(name, val, last) {\n return encodeURIComponent(name) + "=" + encodeURIComponent(val) + (last ? "" : "&");\n };\n var nElem = form.elements.length;\n var fData = "";\n // Must hand-construct query string according to rules\n for(var i = 0; i < nElem; i++) {\n var elem = form.elements[i];\n var last = (i == nElem - 1);\n switch(elem.type.toLowerCase()) {\n case "text":\n case "password":\n case "textarea":\n case "select-one":\n case "hidden":\n fData += encode(elem.name, elem.value, last); // Encode even if empty\n break;\n case "checkbox":\n case "radio":\n if(elem.checked)\n fData += encode(elem.name, elem.value, last);\n break;\n case "select-multiple":\n for(var j = 0; j < elem.options.length; j++) {\n if(elem.options[j].selected) // Encode only selected (may be none!)\n fData += encode(elem.name, elem.options[j].value);\n }\n break;\n default: // Others unsupported \n displayMessage("Ajax.postForm: " + elem.type + " form elements not supported.");\n return; // BAIL OUT!\n }\n }\n this.sendRequest("POST", url, fData, onComplete, clientParams);\n }\n};\n//}}}\n \n
/***\n|''Name:''|DC3.CatSearch|\n|''Description:''|Special purpose Ajax class for searching catalogs|\n|''Date:''|July 13,2018|\n|''Source:''|private|\n|''Author:''|Bob Denny ~DC-3 Dreams, SP|\n|''License:''|Copyright (C) 2006-2018, Robert B. Denny, Mesa, AZ|\n|''Version:''|1.4.1|\n|''~CoreVersion:''|2.1.3|\n|''Require:''|DC3.Ajax|\n!!Description\nLibrary of Javascript called from an observing form to fill in the "RA" and "Dec" fields of a form via an AJAX call to a remote ASP page. The remote ASP page takes the contents of the "Target" field of the form, tries to find a match in the catalog(s) and if a unique match is found, returns the coordinates. If no match or multiple matches are found, returns advisory message (TBD!).\n!!Usage\nTotally dependent on the HTML form and its fields/names for operation. This takes the form data and does the lookups using MiniSAC, MPCORB, or MPCCOMET depending, then updates the form accordingly. \n\nThe lookup() call writes the body type ({{{dsky}}} or {{{orb}}}) to a form field id=SPhotIsOrb (normally hidden) to be used for UI styling. In addition, if a second parameter is given to lookup(), it is assumed to be a function which is called with one parameter, again either {{{dsky}}} or {{{orb}}}. Use this for UI styling etc.\n\n@@WARNING: KLUDGE ALERT!@@ The response handler looks for onchange() handlers in the RA and Dec form fields, but instead of calling them, it assumes that they are there because of a {{{<<PersistentForm>>}}} macro call, and calls that macro's onChange() method instead. I could not get it to let me call the onkeyup() methods. \n\n@@WARNING:@@ The events passed in the above calls to persistent-form are manufactured, and have only a target property. That's all that onChange() needs. I told you this was special purpose.\n!!Revision History\n<<<\n''2006.10.03 [1.0.1]'' Initial creation, coordinate lookup from MiniSAC only\n''2006.10.04 [1.0.2]'' Add MiniSAC searching (Deep Sky Catalog Search tiddler)\n''2006.10.10 [1.0.3]'' Lookup now contains additional info. Display it.\n''2006.10.26 [1.0.4]'' Lookup now contains target name, display it instead of "J2000". Comment out send/receive displayMessage() calls.\n''2006.11.04 [1.0.5]'' Server now sends error messages, only 'ok' code is tested. Add support for "short form" returns, used for solar system bodies (ephemerides).\n''2011.08.30 [1.1.1]'' ACP:693 Support for ValidateFormPlugin acting on the client form. Remove 'ephemeris' logic, Was never used and can't be validated.\n''2011.09.29 [1.1.2]'' ACP:713 On ephemeris targets, put 0 into RA/Dec so will form-validate\n''2012.08.26 [1.2.1]'' ACP:788 lookup() now also looks for (hidden) visOnly form field (for Scheduler input forms).\n''2014.07.10 [1.3.1]'' ACP:966 Change lookup field delimiters to '|' to avoid tripping on commas in decimal numbers on Euro systems.\n''2018.07.13 [1.4.1]'' ACP:1610 Add support for hidden field 'isOrb' for hiding/showing the Orbital Tracking checkbox, as well as a function parameter onCompl that will be called on completion with the body type as a parameter.\n<<<\n!!Code\n***/\n//{{{\nif (!window.DC3) window.DC3 = {};\nDC3.CatSearch = \n{\n _findForm: function(place)\n {\n var forms = place.getElementsByTagName("form");\n if(forms.length === 0) throw("No form in tiddler");\n return forms[0]; // Return first form\n },\n \n _findFormField: function(place, name) // Private\n {\n var form = this._findForm(place);\n var fields = form.getElementsByTagName("input"); // Search <input> fields first\n for(var i = 0; i < fields.length; i++) {\n if(fields[i].name.toLowerCase() == name.toLowerCase()) {\n switch(fields[i].type) {\n case "text":\n case "checkbox":\n case "hidden":\n return fields[i]; // Return found field\n break; // (for lint)\n case "radio": // Return only checked rb field\n if(fields[i].checked) return fields[i];\n break;\n default: // Silence JSLint\n break;\n }\n }\n }\n fields = form.getElementsByTagName("select"); // Nope, look for <select>\n if(fields.length === 0) throw("No fields in form");\n for(i = 0; i < fields.length; i++) {\n if(fields[i].name.toLowerCase() == name.toLowerCase())\n return fields[i];\n }\n throw("field " + name + " not found");\n },\n \n onLookupComplete: function(text, params) // 'text' is what's sent back by remote\n {\n var res = "";\n var e = { target: null }; // Phoney event for onkeyup calls (specific to us!)\n text = text.replace(/(^\ss*)|(\ss*$)/g, ""); // Trim off l/t junk!\n if(text.substr(0, 2) == "ok") { // Found: "ok,target[,hh:mm:ss.s,dd:mm:ss.ss,info"]\n var bits = text.split("|");\n if(bits.length > 2) { // If have coords (deep sky)\n params.raField.value = bits[2];\n params.decField.value = bits[3];\n params.isOrb.value = "dsky";\n res = "dsky"; // Hidden field for OrbTrack checkbox visibility (typ)\n } else { // Solar system target, ephemeris\n params.raField.value = "0"; // Zeroes, allow passing validation\n params.decField.value = "0";\n params.isOrb.value = "orb";\n res = "orb";\n }\n e.target = params.raField; // Persist only if valid coordinates\n config.macros.PersistentForm.onChange(e);\n e.target = params.decField;\n config.macros.PersistentForm.onChange(e);\n if(params.form.bValidator) { // If there's a validator attached (<<ValidateForm>> plugin)\n params.form.bValidator.validate(false, $(params.raField)); // Revalidate the RA and Dec fields (always validated!)\n params.form.bValidator.validate(false, $(params.decField));\n }\n wikify("\sn----\snOK! ", params.place);\n if(bits.length > 2) {\n wikify(bits[1] + " coordinates set... " + bits[4], params.place);\n } else {\n wikify(bits[1] + " found, ephemeris will be calculated at image time", params.place);\n }\n } else {\n params.raField.value = "?"; // Indicate error - Do not presist!\n params.decField.value = "?";\n params.isOrb.value = "err";\n wikify("\sn----\sn" + text, params.place); // Wikify some error message\n }\n // Always persist the isOrb field, and always call the form's responsive function\n e.target = params.isOrb;\n config.macros.PersistentForm.onChange(e);\n if(params.onCompl) {\n params.onCompl("err");\n }\n //displayMessage("Received response.");\n },\n \n lookup: function(place, onCompl) // Used in Acquire form pages for coordinate lookup\n {\n var form = this._findForm(place);\n var tgtField = this._findFormField(place, "Target");\n var raField = this._findFormField(place, "RA");\n var decField = this._findFormField(place, "Dec");\n var visOnly = this._findFormField(place, "visOnly");\n var isOrb = this._findFormField(place, "isOrb");\n\n raField.value = ""; // Clear the RA/Dec fields\n decField.value = "";\n var e = { target: null };\n if(raField.onkeyup) { // (safety) Clear the persist cookies too\n e.target = raField;\n //??params.raField.onkeyup(e);\n config.macros.PersistentForm.onChange(e); // KLUDGE!\n }\n if(decField.onkeyup) {\n e.target = decField;\n //???params.decField.onkeyup(e);\n config.macros.PersistentForm.onChange(e); // KLUDGE!\n }\n \n var complParams = {\n form: form,\n place: place,\n raField: raField,\n decField: decField,\n visOnly: visOnly,\n isOrb: isOrb,\n onCompl: onCompl\n };\n //displayMessage("Sending request...");\n DC3.Ajax.sendRequest("post", \n "/ac/acatlookup.asp", \n "target=" + escape(tgtField.value) + \n "&visOnly=" + escape(visOnly.value),\n DC3.CatSearch.onLookupComplete,\n complParams);\n },\n \n onSearchComplete: function(text, params)\n {\n text = text.replace(/(^\ss*)|(\ss*$)/g, ""); // Trim off l/t junk!\n if(text == "nm") {\n wikify("\sn----\snNo matches. Click the Help button for hints.", params.place);\n } else if(text.substr(0, 2) == "er") {\n wikify("\sn----\snCatalog error: " + text.substr(3), params.place);\n } else {\n var results = text.split(","); // results[0] is 'mx' or count\n for(var i = 1; i < results.length; i++) // For the rest of the items\n params.resListField.options[i - 1] = new Option(results[i], results[i]);\n if(results[0] == "mx")\n wikify("\sn----\snToo many matches, only the first 100 were returned.", params.place);\n else\n wikify("\sn----\sn" + results[0] + " matches found.", params.place);\n }\n //displayMessage("Received response.");\n },\n \n search: function(place)\n {\n var patField = this._findFormField(place, "pattern");\n var matTypField = this._findFormField(place, "matType");\n var visField = this._findFormField(place, "visOnly");\n var resListField = this._findFormField(place, "resList");\n resListField.options.length = 0; // Clear the list\n var complParams = { \n place: place,\n resListField: resListField\n };\n var postData = "pattern=" + escape(patField.value) + "&" +\n "type=" + matTypField.value + "&" + \n "visible=" + (visField.checked ? "true" : "false");\n //displayMessage("Sending request...");\n DC3.Ajax.sendRequest("post", \n "/ac/adscatsearch.asp", \n postData,\n DC3.CatSearch.onSearchComplete,\n complParams);\n }\n\n};\n//}}}\n \n
/***\n|''Name:''|~DC3.Lib|\n|''Description:''|ACP Browser UI Support Library|\n|''Date:''|May 28, 2016|\n|''Source:''|private|\n|''Author:''|Bob Denny ~DC-3 Dreams, SP|\n|''License:''|Copyright (C) 2006-2016, Robert B. Denny, Mesa, AZ|\n|''Version:''|1.3.0|\n|''~CoreVersion:''|2.1.3|\n|''Require:''|//none//|\n!Description\nLibrary of misc. support code for the ACP Share Your Sky! web UI operating within the ~TiddlyWiki framework.\n!!Revision History\n<<<\n''2006.10.04 [1.0.1]'' Initial creation\n''2006.10.05 [1.0.2]'' Use story.displayTiddler(), displayTiddler() deprecated in 2.1.0.\n''2006.10.07 [1.0.3]'' Add global for managing timer in system monitor tiddler\n''2006.10.10 [1.0.4]'' Add another global for system monitor flasher timer\n''2006.10.24 [1.0.5]'' Add postMkDir() and completion methods\n''2006.10.26 [1.0.6]'' Add postChdir() and completion methods\n''2006.11.17 [1.0.7]'' Add xxxAddRow() and xxxShowUsedRows() for expandable Color Series, Sky Flat, and Cal Frames items.\n''2007.11.18 [1.0.8]'' xxxAddRow() now pre-set and persist the 'use' checkbox on revealing a new row.\n''2006.11.28 [1.0.9]'' Add logOff and event proc for same. Shared by main menu and system status. Also now available anywhere you want a Release the Obs link.\n''2011.08.30 [1.1.1]'' GEM:693 Additional function for validation and behavior of Color Series expando rows.\n''2011.08.31 [1.1.1]'' GEM:693 More work. Reorganize, comment inline with code, divide code blocks for reading in UI, add functionality to support the flat and cal frams expandi forms similar to that for the color series form.\n''2011.08.31 [1.1.1]'' GEM:693 and GEM:695 Refactored expando form support to use one shared function for all forms by using unique prefixes in the name and id attributes.\n''2011.08.31 [1.1.1]'' GEM 693 Changing any expando row input field now auto-checks the Use box and arms validation.\n''2011.09.08 [1.1.1]'' GEM:693 Validation for expando rows >= 10 fixed. \n''2011.09.11 [1.1.1]'' GEM:693 Oops, fix auto-check logic of expando rows that was broken by previous validation fix.\n''2014.01.21 [1.2.1]'' New function fillInnerHTML() and completion function. This was added in GEM:1084. Used in the "Single Series" form of Scheduler.\n''2016.05.28 [1.3.0]'' GEM:1467 Generalize postChdir() to take url like postMkdir().\n<<<\n!!Miscellaneous Functions\n***/\n//{{{\nif (!window.DC3) window.DC3 = {};\nDC3.Lib = \n{\n sysMonRefreshTimerID: null, // Global for system monitor refresh timer\n sysMonFlashTimerID: null, // Same for system monitor flasher timer\n expandoFieldPats: ['Count', 'Exposure', 'Filter', 'Binning', 'PA'],\n \n //\n // getPlace() - Find the enclosing viewer or tiddler div.\n //\n // This finds the enclosing viewer div, and if there is not one, it finds the parent \n // tiddler div. Useful for (e.g.) calling wikify() to add stuff to the bottom of a \n // tiddler. Note the (e.g.) the MainMenu is within a viewer div when it's being shown \n // as a tiddler, but not when it is the 'real' main menu. Thus the 'catch'. This also \n // applies to Javascript running in other than the viewer div of the tiddler (title/subtitle).\n //\n getPlace: function(node) // Different than story.findContainingTiddler()\n {\n if(!node) throw("DC3.Lib.getPlace(): place not found.");\n if((node.attributes["class"] && node.attributes["class"].nodeValue == "viewer") || node.attributes["tiddler"]) {\n return node;\n } else {\n return this.getPlace(node.parentNode);\n }\n },\n //\n // openTiddler() - Open a tiddler, animate from viewer div\n //\n // Normally, calling displayTiddler() from a Javascript onClick() event of a hyperlink \n // would pass "this" as the "place" argument, causing the animation to emanate from \n // the link. But you may want it to emanate from the whole viewer or tiddler. \n // Calling this method uses getPlace() to find the enclosure and use that place. \n // NOTE: Tiddlers will be opened at the bottom!\n //\n openTiddler: function(node, title)\n {\n story.displayTiddler(this.getPlace(node), title, null, config.options.chkAnimate, false);\n },\n \n //\n // logOff()/_logOffOnComplete() - Specialized AJAX call\n //\n // Used by links which want to provide logging off the observatory. At present this \n // is Main Menu and System Status.\n //\n _logOffOnComplete: function(text, params) {\n displayMessage(text);\n },\n \n logOff: function() {\n DC3.Ajax.sendRequest("GET", "/ac/aunlockobs.asp", "", DC3.Lib._logOffOnComplete, null);\n },\n//}}}\n/***\n!!Remote sourcing\n***/\n//{{{\n //\n // Insert remote HTML generated by the remote URL into the \n // DOM node with the given nodeID. This is as low-level as it gets.\n //\n _onFillInnerHTMLComplete: function(text, node) // Private\n {\n node.innerHTML = text;\n },\n \n fillInnerHTML: function(url, nodeID)\n {\n DC3.Ajax.sendRequest('GET', url, "", this._onFillInnerHTMLComplete, document.getElementById(nodeID));\n },\n//}}}\n/***\n!!Remote File Support Functions\n***/\n//{{{\n //\n // postMkdir()/_postMkdirOnComplete() - Specialized AJAX call\n //\n // Used by the My Documents file manager tiddlers to post a create directory call from \n // an a-button onClick() javascript call. See (e.g.) tiddler [[Observing Plans]] for \n // usage of this.\n //\n _postMkdirOnComplete: function(text, params)\n {\n if(text.trim() != "ok")\n alert(text);\n else\n story.refreshTiddler(params.title, null, true); // Always refresh, avoid confusion\n },\n \n postMkdir: function(url, node)\n {\n var ans = prompt("Name the new folder:");\n if(!ans) return;\n var complParams = { \n title: story.findContainingTiddler(node).id.replace(story.idPrefix, "") // KLUDGE?\n };\n DC3.Ajax.sendRequest('POST', url, "dir=" + escape(ans), \n DC3.Lib._postMkdirOnComplete, complParams);\n },\n //\n // postChdir()/_postChdirOnComplete() - Specialized AJAX call\n //\n // Used in the Multiple Objects (plan) tiddler to change (sub) folders from \n // an onChange() event of the folder selector droplist.\n //\n _postChdirOnComplete: function(text, params)\n {\n if(text.trim() != "ok")\n alert(text);\n else\n story.refreshTiddler(params.title, null, true); // Always refresh, avoid confusion\n },\n \n postChdir: function(url, node)\n {\n var complParams = { \n title: story.findContainingTiddler(node).id.replace(story.idPrefix, "") // KLUDGE?\n };\n DC3.Ajax.sendRequest('POST', url, "chdir=" + escape(node.value), \n DC3.Lib._postChdirOnComplete, complParams);\n },\n//}}}\n/***\n!!Validation and Activation of Expando Rows in Forms\n***/\n//{{{\n //\n // expandoAddRow() - Reveal another row of image specs in the expando form\n //\n // Parameter 'pfx' is the prefix of the name/id attributes of the HTML elements\n // that make up the expando part of the form.\n //\n expandoAddRow: function(pfx)\n {\n for(var i = 2; i <= 16; i++)\n {\n var r = document.getElementById(pfx + "Row" + i);\n if(r && r.style.display == "none") {\n var u = document.getElementById(pfx + "Use" + i);\n if(u) u.checked = true;\n var e = { target: u };\n config.macros.PersistentForm.onChange(e);\n r.style.display = "";\n var ev = { target: u };\n this.expandoControlRowValidation(ev); // Initialize validation, see below!\n break;\n }\n }\n },\n \n //\n // This is called from onChange events of the data controls in an expando\n // row. The idea is to check the Use box and arm validation (as though the\n // user checked the box). This helps prevent entering specs and forgetting\n // to check the Use box.\n //\n expandoCheckUse: function(ev)\n {\n var pats = DC3.Lib.expandoFieldPats; // (need fully resolved name here, typ.)\n var n = ev.target.name; // Control name prefix-name-number\n var pfx, row, pat;\n for(var i = 0; i < pats.length; i++)\n {\n pat = pats[i];\n var j = n.search(pat)\n if(pfx = n.substr(0, j))\n {\n row = n.substr(j + pat.length); // This has to namele 1 or 2 digit row numbers\n break;\n }\n }\n if(!pfx) return; // Forget it\n if(ev.target.value !== "") // If data in this field (now)\n {\n var u = document.getElementById(pfx + "Use" + row); // The corresponding Use checkbox \n if(!u.checked)\n {\n u.checked = true; // Check it\n var ev2 = { target: u }; // Fake "click" event\n DC3.Lib.expandoControlRowValidation(ev2);\n }\n }\n //\n // Extreme sleaze! The PersistentFormPlugin uses the onChange event for \n // select type elements. So we'll chain to that. There are several places\n // where this expando code assumes that both validation and persistence is\n // being used for expando row forms.\n //\n if(ev.target.type == "select-one" || ev.target.type == "select-multiple")\n config.macros.PersistentForm.onChange(ev);\n },\n \n //\n // expandoInitializeForm() - Initialize expando rows of a form\n //\n // Initialize the expando rows. Make any of them which have their Use checkboxes set.\n // All active rows must be initialized for validation, and any active rows which\n // are hidden (due to original form construction) are made visible. The inactive rows\n // do not need the services of expandoControlRowValidation() below.\n //\n // Parameter 'pfx' is the prefix of the name/id attributes of the HTML elements\n // that make up the expando part of the form.\n //\n expandoInitializeForm: function(pfx)\n {\n for(var i = 1; i <= 16; i++)\n {\n var u = document.getElementById(pfx + "Use" + i);\n// u.onclick = this.expandoControlRowValidation;\n u.onchange = this.expandoControlRowValidation;\n if(u && u.checked)\n {\n var r = document.getElementById(pfx + "Row" + i);\n if(r && r.style.display == "none") {\n r.style.display = "";\n }\n var ev = { target: u };\n this.expandoControlRowValidation(ev);\n }\n //\n // Arm the "auto-check" events\n //\n var e = document.getElementById(pfx + "Count" + i);\n if(e) e.onchange