// This file holds the functions that work directly with the data gotten from // the HEK API. // I use some of Yahoo's YUI library // Here is the YUI liscence: /* * * Software License Agreement (BSD License) Copyright (c) 2010, Yahoo! Inc. All * rights reserved. * * Redistribution and use of this software in source and binary forms, with or * without modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. 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. Neither the name of Yahoo! Inc. nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission of Yahoo! Inc. * * THIS 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. */ // Author: Ian Ruotsala, The Evergreen State College // email : ruoian27 at evergreen dot edu var DEBUG = true; // change this value to true for debuging output // this maps the events abbv to an array index var lmsalDiamond_event_type = ["ar", "ce", "cd", "ch", "cw", "fi", "fe", "fa", "fl", "lp", "os", "ss", "ef", "cj", "pg", "ot", "nr", "sg", "sp"]; // this will hold the parsed JSON for all the events var lmsalDiamond_events = new Array(lmsalDiamond_event_type.length); // this holds the first part of the URL, up to event type var lmsalDiamond_url_prefix = "http://www.lmsal.com/hek/her?cosec=2&cmd=search&type=column&event_type="; // this holds the end part of the URL, after time span var lmsalDiamond_url_suffix = "&event_coordsys=helioprojective&x1=-1200&x2=1200&y1=-1200&y2=1200"; //this array holds the time allowed (in millis) for each API query attempt before returning timeout var lmsalDiamond_query_timeout = [200, 500, 1000]; // make variables to hold starttime and endtime of present query // this will be the function called when the program starts var lmsalDiamond_initialize = function() { } var lmsalDiamond_get_events = function(event_index, starttime, endtime, attempt) { // send present url to query, update the stored JSON //can JavaScript send multiple asynchronous queries to the server? //Or, do I have to wait for the function to go all the way through //before the calling function can continue to execute? var returnObj = "timeout"; // it will return this if no responce from // server var httpQuery = new XMLHttpRequest(); var startStr = "&event_starttime=" + starttime.getFullYear() + "-" + padZero(starttime.getMonth() + 1) + "-" + padZero(starttime.getDate()) + "-" + padZero(starttime.getHours()) + "-" padZero(starttime.getMinutes()) + "-" + padZero(starttime.getSeconds()); var endStr = "&event_endtime=" + endtime.getFullYear() + "-" + padZero(endtime.getMonth() + 1) + "-" + padZero(endtime.getDate()) + "-" + padZero(endtime.getHours()) + "-" padZero(endtime.getMinutes()) + "-" + padZero(endtime.getSeconds()); var full_url = lmsalDiamond_url_prefix + lmsalDiamond_event_type[event_index] + startStr + endStr + lmsalDiamond_url_suffix; if (DEBUG){ document.write("full_url set to: " + full_url); //full_url = lmsalDiamond_event_type[event_index]; } httpQuery.onreadystatechange = function(){ if (httpQuery.readyState==4 && xmlhttpQuery.status==200){ //once the server has fully returned data, process and return the data var returnString = httpQuery.responseText; returnObj = YAHOO.lang.JSON.parse(returnString); if (returnObj.result.length >= 200) { returnObj = true; // I want to know if the server's limit of 200 // events/query has been reached } } } httpQuery.open("GET",full_url,true); //this will be asynchronous httpQuery.send(null); return returnObj; } var padZero = function(padNumb) { // local method to pad 1-digit numbers with a leading 0 if (padNumb < 10) { return "0" + padNumb; } return "" + padNumb; }