var xmlDoc; function loadJSON(inFile, callback) { var xobj = new XMLHttpRequest(); // Assume XML unless filename ends with .json if (inFile.endsWith(".json")) { xobj.overrideMimeType("application/json"); } xobj.open('GET', inFile, true); xobj.onreadystatechange = function() { if (xobj.readyState == 4 && xobj.status == "200") { callback(xobj.responseText); } }; // We want ajax to ignore any cached responses xobj.setRequestHeader('If-Modified-Since', 'Sat, 01 Jan 2000 01:01:01 GMT') xobj.send(null); } function parseXml(response) { var parser = new DOMParser(); xmlDoc = parser.parseFromString(response,"text/xml"); var eventTags = xmlDoc.getElementsByTagName("SCRIPT_EVENT"); // Process each event tag for (var i = 0; i < eventTags.length; i++) { var currEvt = eventTags[i]; // Process all the children of one event var timeFields; var evtTime; var incidentNum; var cadProp; var telProp; var proparray = new Array(); var evalarray = new Array(); for (var child = 1; child < currEvt.childNodes.length; child++) { if (currEvt.childNodes[child].localName != undefined) { switch(currEvt.childNodes[child].localName) { case "TIME_INDEX": timeFields = currEvt.childNodes[child].textContent.split(":"); evtTime = new Time(Number(timeFields[0]), Number(timeFields[1]), Number(timeFields[2])); break; case "INCIDENT": incidentNum = Number(currEvt.childNodes[child].attributes["LogNum"].value); break; case "CAD_DATA": var caddata = parseCAD(currEvt.childNodes[child]); if (caddata.length > 0) { cadProp = new Property("CHP CAD", caddata ); proparray.push(cadProp); } break; case "TELEPHONE": telProp = new Evaluation("Telephone Conversation", parseTelephone(currEvt.childNodes[child]) ); evalarray.push(telProp); break; } } } //console.log(evtTime.format(), incidentNum, proparray.length, evalarray.length); if (incidentNum != undefined) { events.add(new Event(evtTime, incidents.get(incidentNum), new Properties(proparray), new Evaluations(evalarray)) ); } } } function parseCAD(element) { var result = new Array(); var details = element.getElementsByTagName("DETAIL"); if (details.length > 0) { for (detail in details) { if (details[detail].textContent != undefined) { result.push("Detail:"); result.push(details[detail].textContent); } } } return result; } function parseTelephone(element) { var result = new Array(); for (var child = 1; child < element.childNodes.length; child++) { if (element.childNodes[child].localName != undefined) { if (element.childNodes[child].localName == "INSTRUCTOR") { result.push(element.childNodes[child].attributes["Role"].value); } else { result.push(element.childNodes[child].localName); } result.push(element.childNodes[child].textContent); } } return result; } // MAIN loadJSON("full_script.xml", parseXml)