1223 lines
45 KiB
JavaScript
Executable File
1223 lines
45 KiB
JavaScript
Executable File
|
|
var exampleSocket;
|
|
var firstMsg = true;
|
|
var textBoxArr = [];
|
|
var SelBranchVal = "";
|
|
var connectedToServer = false;
|
|
var date = "";
|
|
var msg = "";
|
|
var data = "";
|
|
var IDFilter = "";
|
|
var currentDate = new Date();
|
|
var day = ("0" + currentDate.getUTCDate()).slice(-2);
|
|
var month = ("0" + (currentDate.getUTCMonth() + 1)).slice(-2);
|
|
var year = currentDate.getFullYear();
|
|
var hours = ("0" + currentDate.getUTCHours()).slice(-2);
|
|
var minutes = ("0" + currentDate.getUTCMinutes()).slice(-2);
|
|
var seconds = ("0" + currentDate.getUTCSeconds()).slice(-2);
|
|
var ele2 = 0;
|
|
var hoehenabstaende = [0,2,5]; //default array for testing in BT56
|
|
var tempOutput = [];
|
|
var connectedOnce = false;
|
|
var entryCount = 0;
|
|
var output = [];
|
|
var myTableDiv = "";
|
|
var temp = [];
|
|
|
|
function WebSocketTest()
|
|
{
|
|
if ("WebSocket" in window)
|
|
{
|
|
if(!connectedToServer)
|
|
{
|
|
var ipadresse=document.getElementById("ipadresse").value;
|
|
console.log("ipadresse="+ipadresse);
|
|
exampleSocket = new WebSocket("ws://"+ipadresse);
|
|
connectedToServer = true;
|
|
}
|
|
exampleSocket.onopen = function()
|
|
{
|
|
console.log("connected");
|
|
document.getElementById("Serverconnect").innerHTML = "Server: connected";
|
|
document.getElementById("Serverconnect").style.color = "green"
|
|
connectedOnce = true;
|
|
};
|
|
|
|
exampleSocket.onmessage = function (event)
|
|
{
|
|
|
|
msg = JSON.parse(event.data);
|
|
console.log("onmessage:"+msg.type);
|
|
|
|
|
|
switch(msg.type) {
|
|
case "WlsParticipantsStateReport":
|
|
console.log("WlsStateReport");
|
|
//document.getElementById("WlsStateReport").innerHTML = JSON.stringify(msg);
|
|
|
|
handleWlsStateReport(msg);
|
|
|
|
break;
|
|
|
|
case "WlsConnectionState":
|
|
console.log("WlsConnectionState");
|
|
if(msg.data["connected"] == "false")
|
|
{
|
|
document.getElementById("Wlsconnect").innerHTML = "Wls: not connected";
|
|
document.getElementById("Wlsconnect").style.color = "red";
|
|
}
|
|
else
|
|
{
|
|
document.getElementById("Wlsconnect").innerHTML = "Wls: connected";
|
|
document.getElementById("Wlsconnect").style.color = "green";
|
|
}
|
|
break;
|
|
|
|
case "PositionReport":
|
|
if (IDFilter != "" && IDFilter == msg.data.header.equipmentNumber){ // check if equipmentNumber is valid; write GPX for each element
|
|
appendtrack();
|
|
}
|
|
|
|
|
|
myTableDiv = document.getElementById("ReportTable");
|
|
|
|
//TABLE HEADER
|
|
if(firstMsg)
|
|
{
|
|
var tHead = document.createElement("tHead");
|
|
var tr = document.createElement("tr");
|
|
var trBox = document.createElement("tr");
|
|
|
|
var hTable = document.getElementById("wlsTable");
|
|
var hTableRow = document.getElementById("HeaderTableRow");
|
|
|
|
for(i = 0; i < Object.keys(msg.data).length; i++)
|
|
{
|
|
textBoxArr.push("");
|
|
|
|
var hTableCol = document.createElement("td");
|
|
|
|
|
|
if (Object.keys(msg.data)[i] == "timestamp")
|
|
{
|
|
hTableCol.innerHTML = "<td><form name='InventoryList' method='post action='InventoryList.asp'><select name='SelBranch' class='bnotes' size='4' multiple='multiple' onchange='Javascript:setDateFilter()'><option value='All'>All</option><option value='Day'>Day</option><option value='Month'>Month</option><option value='Year'>Year</option><option value='Hours'>Hours</option><option value='Minutes'>Minutes</option><option value='Seconds'>Seconds</option><option value='Milliseconds'>Milliseconds</option><option value='Timezone'>Timezone</option> </select></form></td>";
|
|
hTableRow.appendChild(hTableCol);
|
|
}
|
|
else
|
|
{
|
|
if(i>=3)
|
|
{
|
|
hTableCol.appendChild = document.createTextNode("");
|
|
hTableRow.appendChild(hTableCol);
|
|
}
|
|
}
|
|
|
|
var thBox = document.createElement("th");
|
|
thBox.innerHTML = "<input type='text' id='Textbox"+ i +"' onchange='Javascript:testEvent(this)'>";
|
|
trBox.appendChild(thBox);
|
|
|
|
var th = document.createElement("th");
|
|
if( i === 0)
|
|
{
|
|
th.appendChild(document.createTextNode("geoPosition"));
|
|
}
|
|
if( i === 1)
|
|
{
|
|
th.appendChild(document.createTextNode("EquipmentNo"));
|
|
}
|
|
if ( i === 2 )
|
|
{
|
|
th.appendChild(document.createTextNode("Time"));
|
|
}
|
|
if ( i === 3 )
|
|
{
|
|
th.appendChild(document.createTextNode("BuildingId RoomId OpsId"));
|
|
}
|
|
if ( i === 4 )
|
|
{
|
|
th.appendChild(document.createTextNode("relPosition"));
|
|
}
|
|
tr.appendChild(th);
|
|
}
|
|
tHead.appendChild(tr);
|
|
tHead.appendChild(trBox);
|
|
|
|
myTableDiv.appendChild(tHead);
|
|
myTableDiv.appendChild(document.createElement("tBody"));
|
|
|
|
var width = hTableRow.getElementsByTagName("td").length / Object.keys(msg.data).length * 100
|
|
hTable.style = "width:"+width+"%";
|
|
firstMsg = false;
|
|
}
|
|
|
|
//TABLE ROW
|
|
var checkIsValid = true;
|
|
if (date != ""){ //check if date isn't empty, clear date for new table row
|
|
date = "";
|
|
}
|
|
document.getElementById("Textbox0").style.visibility = "hidden";
|
|
document.getElementById("Textbox2").style.visibility = "hidden";
|
|
document.getElementById("Textbox4").style.visibility = "hidden";
|
|
|
|
var tr = document.createElement("tr");
|
|
for (j = 0; j < Object.keys(msg.data).length; j++)
|
|
{
|
|
var td = document.createElement("td")
|
|
if(myTableDiv.tHead.firstChild.childNodes[j].innerHTML == "timestamp")
|
|
{
|
|
if(!date.toString().toLowerCase().includes(textBoxArr[j].toString().toLowerCase()))
|
|
{
|
|
checkIsValid = false;
|
|
break;
|
|
}
|
|
td.appendChild(document.createTextNode(date));
|
|
}
|
|
else
|
|
{
|
|
if (!Object.values(msg.data)[j].toString().toLowerCase().includes(textBoxArr[j].toString().toLowerCase()))
|
|
{
|
|
checkIsValid = false;
|
|
break;
|
|
}
|
|
var keyword = document.getElementById("Textbox1").value.toString();
|
|
if(keyword.length > 0)
|
|
{
|
|
if(!msg.data.header.equipmentNumber.toString().includes(keyword))
|
|
{
|
|
checkIsValid = false;
|
|
break;
|
|
}
|
|
}
|
|
keyword = document.getElementById("Textbox3").value.toString();
|
|
if(keyword.length > 0)
|
|
{
|
|
if(keyword.indexOf(' ') >= 0)
|
|
{
|
|
split = keyword.split(' ');
|
|
if(!msg.data.opsPosition.moutObjectId.toString().includes(split[0]))
|
|
{
|
|
checkIsValid = false;
|
|
break;
|
|
}
|
|
if(split.length > 1 && !msg.data.opsPosition.moutRoomId.toString().includes(split[1]))
|
|
{
|
|
checkIsValid = false;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!msg.data.opsPosition.moutObjectId.toString().includes(keyword))
|
|
{
|
|
checkIsValid = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// td.appendChild(document.createTextNode(Object.values(msg.data.geoPosition.lat)[j]));
|
|
// td.appendChild(document.createTextNode(Object.values(msg.data)[j].geoPosition.lat));
|
|
// td.appendChild(document.createTextNode(Object.values(msg.data)[j]));
|
|
console.log("j="+j);
|
|
console.log (msg.data);
|
|
if ( j === 0){
|
|
td.appendChild(document.createTextNode(msg.data.geoPosition.lat + " " + msg.data.geoPosition.lon + " " + msg.data.geoPosition.z));
|
|
console.log (msg.data.geoPosition);
|
|
}
|
|
if ( j === 1){
|
|
td.appendChild(document.createTextNode(msg.data.header.equipmentNumber));
|
|
console.log (msg.data.equipmentNumber);
|
|
}
|
|
if ( j === 2){
|
|
date = "";
|
|
var separatorDate = "/";
|
|
var separatorTime = ":";
|
|
var d = new Date(parseInt(msg.data.header.timeStamp));
|
|
hours = (parseInt(d.getHours()) < 10) ? "0" + d.getHours() : d.getHours();
|
|
minutes = (parseInt(d.getMinutes()) < 10) ? "0" + d.getMinutes() : d.getMinutes();
|
|
seconds = (parseInt(d.getSeconds()) < 10) ? "0" + d.getSeconds() : d.getSeconds();
|
|
|
|
if(document.getElementById("dateCheck").checked)
|
|
{
|
|
date = d.getDate() + separatorDate + (parseInt(d.getMonth())+1) + separatorDate + d.getFullYear() + " | " +
|
|
hours + separatorTime + minutes + separatorTime + seconds + separatorTime + d.getMilliseconds();
|
|
}
|
|
else
|
|
{
|
|
date = hours + separatorTime + minutes + separatorTime + seconds + separatorTime + d.getMilliseconds();
|
|
}
|
|
td.appendChild(document.createTextNode(date));
|
|
console.log (date);
|
|
}
|
|
if ( j === 3){
|
|
td.appendChild(document.createTextNode(msg.data.opsPosition.moutObjectId + " " + msg.data.opsPosition.moutRoomId + " " + msg.data.opsPosition.opsId));
|
|
console.log (msg.data.opsPosition);
|
|
}
|
|
if ( j === 4){
|
|
td.appendChild(document.createTextNode(msg.data.relPosition.offsetX + " " + msg.data.relPosition.offsetY + " " + msg.data.relPosition.offsetZ));
|
|
console.log (msg.data.relPosition);
|
|
}
|
|
}
|
|
|
|
tr.appendChild(td);
|
|
}
|
|
if(!checkIsValid)
|
|
{
|
|
break;
|
|
}
|
|
var node = myTableDiv.tBodies[0];
|
|
node.insertBefore(tr, node.firstChild);
|
|
|
|
var tableLength = (myTableDiv.getElementsByTagName("tbody")[0].getElementsByTagName("tr").length);
|
|
if(tableLength > 10) // to show 10 messages tableLength must be greater than 10
|
|
// ->10 for the Elements to show, +1 for the Element that gets deleted = 11
|
|
{
|
|
myTableDiv.deleteRow(12); // delete row 12 because 0 also counts as row +2 for header and textboxes
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
};
|
|
|
|
exampleSocket.onclose = function()
|
|
{
|
|
// websocket is closed.
|
|
document.getElementById("Serverconnect").innerHTML = "Server: not connected";
|
|
document.getElementById("Serverconnect").style.color = "red";
|
|
|
|
document.getElementById("Wlsconnect").innerHTML = "Wls: not connected";
|
|
document.getElementById("Wlsconnect").style.color = "red";
|
|
|
|
connectedToServer = false;
|
|
if(connectedOnce)
|
|
{
|
|
alert("Connection to Server closed.");
|
|
}
|
|
else
|
|
{
|
|
alert("Could not connect to server.");
|
|
}
|
|
};
|
|
}
|
|
|
|
else
|
|
{
|
|
// The browser doesn't support WebSocket
|
|
alert("WebSocket is NOT supported by your Browser!");
|
|
}
|
|
}
|
|
|
|
function testEvent(parameter)
|
|
{
|
|
// var id = parameter.id.substr(parameter.id.length - 1);
|
|
// textBoxArr[id] = parameter.value;
|
|
}
|
|
|
|
function sendWlsStateRequest()
|
|
{
|
|
console.log ("WlsParticipantsStateRequest");
|
|
exampleSocket.send(JSON.stringify({
|
|
typeId: 3001
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
function handleWlsStateReport(msg)
|
|
{
|
|
var results = [];
|
|
output = [];
|
|
|
|
for(var i = 0; i < msg.data.participantStates.length; i++)
|
|
{
|
|
results[i] =
|
|
{
|
|
equipNo: msg.data.participantStates[i].equipmentNumber,
|
|
tagId: msg.data.participantStates[i].tagId,
|
|
inBlockedArea: msg.data.participantStates[i].inBlockedArea,
|
|
gpsOn: msg.data.participantStates[i].gpsOn,
|
|
wlsZone: msg.data.participantStates[i].relativePosition.wlsZone,
|
|
tacticalState: msg.data.participantStates[i].tacticalState,
|
|
tacStateStr: ""
|
|
};
|
|
}
|
|
|
|
results = fillTacStateStr(results);
|
|
|
|
switch(document.getElementById("sortBy").value)
|
|
{
|
|
case "equipNo":
|
|
output = sortByEquipNo(results);
|
|
break;
|
|
case "tagID":
|
|
output = sortByTagId(results);
|
|
break;
|
|
case "inBlockedArea":
|
|
output = sortByInBlockedArea(results);
|
|
break;
|
|
case "gpsOn":
|
|
output = sortByGpsOn(results);
|
|
break;
|
|
case "wlsZone":
|
|
output = sortByWlsZone(results);
|
|
break;
|
|
case "tacticalState":
|
|
output = sortByTacticalState(results);
|
|
break;
|
|
case "sortby":
|
|
case "standard":
|
|
default:
|
|
output = results;
|
|
break;
|
|
}
|
|
|
|
if(document.getElementById("hideImpossible").checked)
|
|
{
|
|
output = hideImpossible(output);
|
|
}
|
|
|
|
if(output.length === 1)
|
|
{
|
|
document.getElementById("searchResults").innerHTML = output.length + " result";
|
|
document.getElementById("searchResults").style.color = "green";
|
|
}
|
|
else if(output.length === 0)
|
|
{
|
|
document.getElementById("searchResults").innerHTML = output.length + " results";
|
|
document.getElementById("searchResults").style.color = "red";
|
|
}
|
|
else
|
|
{
|
|
document.getElementById("searchResults").innerHTML = output.length + " results";
|
|
document.getElementById("searchResults").style.color = "green";
|
|
}
|
|
|
|
var table = "";
|
|
table += "<table id=\"resultTable\">";
|
|
table += "<tr><th>equipmentNumber</th>";
|
|
table += "<th>tagId</th>";
|
|
table += "<th>inBlockedArea</th>";
|
|
table += "<th>gpsOn</th>";
|
|
table += "<th>wlsZone</th>";
|
|
table += "<th>tacticalState</th></tr>";
|
|
|
|
for (var row = 0; row < output.length; row++)
|
|
{
|
|
table += "<tr>";
|
|
table += "<td>"+output[row].equipNo+"</td>";
|
|
table += "<td>"+output[row].tagId+"</td>";
|
|
table += "<td>"+output[row].inBlockedArea+"</td>";
|
|
table += "<td>"+output[row].gpsOn+"</td>";
|
|
table += "<td>"+output[row].wlsZone+"</td>";
|
|
table += "<td>"+output[row].tacStateStr+"</td>";
|
|
table +="</tr>";
|
|
}
|
|
table += "</table>";
|
|
document.querySelector('#WlsStateTable').innerHTML =table;
|
|
}
|
|
|
|
function hideImpossible(output)
|
|
{
|
|
var tmp = output;
|
|
var temp = [];
|
|
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(parseInt(tmp[i].wlsZone) != -1 && parseInt(tmp[i].tacticalState) != -1 && parseInt(tmp[i].equipNo) != 0)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function sortByEquipNo(results)
|
|
{
|
|
var temp = [];
|
|
var tmp = sortInts(results);
|
|
var input = document.getElementById("search").value.toString();
|
|
if(input.length > 0)
|
|
{
|
|
if(document.getElementById("showAll").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].equipNo.toString().includes(input))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
else if(document.getElementById("onlyDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].equipNo.toString().includes(input))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
if(temp.length > 1)
|
|
{
|
|
return showDuplicateEquipNos(temp);
|
|
}
|
|
else if (temp.length == 1)
|
|
{
|
|
temp = [];
|
|
}
|
|
return temp;
|
|
}
|
|
else if(document.getElementById("noDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].equipNo.toString().includes(input))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
if(temp.length > 1)
|
|
{
|
|
return hideDuplicateEquipNos(temp);
|
|
}
|
|
else
|
|
{
|
|
return temp;
|
|
}
|
|
}
|
|
}
|
|
else if(input.length == 0)
|
|
{
|
|
if(document.getElementById("showAll").checked)
|
|
{
|
|
return tmp;
|
|
}
|
|
else if(document.getElementById("onlyDuplicates").checked)
|
|
{
|
|
if(tmp.length > 1)
|
|
{
|
|
return showDuplicateEquipNos(tmp);
|
|
}
|
|
else if( tmp.length == 1)
|
|
{
|
|
tmp = [];
|
|
}
|
|
return tmp;
|
|
}
|
|
else if(document.getElementById("noDuplicates").checked)
|
|
{
|
|
return hideDuplicateEquipNos(tmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
function showDuplicateEquipNos(tmp)
|
|
{
|
|
temp = [];
|
|
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
var count = 0;
|
|
for(var j = 0; j < tmp.length; j++)
|
|
{
|
|
if(i != j)
|
|
{
|
|
if(parseInt(tmp[i].equipNo) == parseInt(tmp[j].equipNo))
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
if(count > 0)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function hideDuplicateEquipNos(tmp)
|
|
{
|
|
temp = [];
|
|
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
var count = 0;
|
|
for(var j = 0; j < tmp.length; j++)
|
|
{
|
|
if(i != j)
|
|
{
|
|
if(parseInt(tmp[i].equipNo) == parseInt(tmp[j].equipNo))
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
if(count == 0)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function sortByTagId(results)
|
|
{
|
|
temp = [];
|
|
var tmp = results;
|
|
tmp.sort();
|
|
var input = document.getElementById("search").value.toString();
|
|
if(input.length > 0)
|
|
{
|
|
if(document.getElementById("showAll").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].tagId.toString().includes(input))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
else if(document.getElementById("onlyDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].tagId.toString().includes(input))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
if(temp.length > 1)
|
|
{
|
|
return showDuplicateTagIds(temp);
|
|
}
|
|
else if(temp.length == 1)
|
|
{
|
|
temp = [];
|
|
}
|
|
return temp;
|
|
}
|
|
else if(document.getElementById("noDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].tagId.toString().includes(input))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
if(temp.length > 1)
|
|
{
|
|
return hideDuplicateTagIds(temp);
|
|
}
|
|
else
|
|
{
|
|
return temp;
|
|
}
|
|
}
|
|
}
|
|
else if(input.length == 0)
|
|
{
|
|
if(document.getElementById("showAll").checked)
|
|
{
|
|
return tmp;
|
|
}
|
|
else if(document.getElementById("onlyDuplicates").checked)
|
|
{
|
|
return showDuplicateTagIds(tmp);
|
|
}
|
|
else if(document.getElementById("noDuplicates").checked)
|
|
{
|
|
return hideDuplicateTagIds(tmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
function showDuplicateTagIds(tmp)
|
|
{
|
|
temp = [];
|
|
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
var count = 0;
|
|
for(var j = 0; j < tmp.length; j++)
|
|
{
|
|
if(i != j)
|
|
{
|
|
if(tmp[i].tagId.toString() == tmp[j].tagId.toString())
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
if(count > 0)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function hideDuplicateTagIds(tmp)
|
|
{
|
|
temp = [];
|
|
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
var count = 0;
|
|
for(var j = 0; j < tmp.length; j++)
|
|
{
|
|
if(i != j)
|
|
{
|
|
if(tmp[i].tagId.toString() == tmp[j].tagId.toString())
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
if(count == 0)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function sortByInBlockedArea(results)
|
|
{
|
|
var tmp = results;
|
|
var temp = [];
|
|
if(document.getElementById("showAll").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].inBlockedArea == true)
|
|
{
|
|
temp.unshift(tmp[i]);
|
|
}
|
|
else if(tmp[i].inBlockedArea == false)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
else if(document.getElementById("onlyDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].inBlockedArea == true)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
else if(document.getElementById("noDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].inBlockedArea == false)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function sortByGpsOn(results)
|
|
{
|
|
var tmp = results;
|
|
var temp = [];
|
|
if(document.getElementById("showAll").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].gpsOn == true)
|
|
{
|
|
temp.unshift(tmp[i]);
|
|
}
|
|
else if(tmp[i].gpsOn == false)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
else if(document.getElementById("onlyDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].gpsOn == true)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
else if(document.getElementById("noDuplicates").checked)
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(tmp[i].gpsOn == false)
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function sortByWlsZone(results)
|
|
{
|
|
var temp = [];
|
|
var tmp = results;
|
|
var min;
|
|
|
|
if(document.getElementById("wlsZones").value != "all")
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(parseInt(tmp[i].wlsZone) == parseInt(document.getElementById("wlsZones").value))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
temp = tmp;
|
|
}
|
|
|
|
for(var i = 0; i < temp.length; i++)
|
|
{
|
|
min = i;
|
|
for(var j = i+1; j < temp.length; j++)
|
|
{
|
|
if(temp[j].wlsZone > temp[min].wlsZone)
|
|
{
|
|
min = j;
|
|
}
|
|
}
|
|
tmp = temp[i];
|
|
temp[i] = temp[min];
|
|
temp[min] = tmp;
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function sortInts(temp)
|
|
{
|
|
for(var i = 0; i < temp.length; i++)
|
|
{
|
|
min = i;
|
|
for(var j = i+1; j < temp.length; j++)
|
|
{
|
|
if(temp[j].equipNo < temp[min].equipNo)
|
|
{
|
|
min = j;
|
|
}
|
|
}
|
|
tmp = temp[i];
|
|
temp[i] = temp[min];
|
|
temp[min] = tmp;
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function sortByTacticalState(results)
|
|
{
|
|
var temp = [];
|
|
var tmp = results;
|
|
var min;
|
|
|
|
if(document.getElementById("tacStates").value != "all")
|
|
{
|
|
for(var i = 0; i < tmp.length; i++)
|
|
{
|
|
if(parseInt(tmp[i].tacticalState) == parseInt(document.getElementById("tacStates").value))
|
|
{
|
|
temp.push(tmp[i]);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
temp = tmp;
|
|
}
|
|
|
|
for(var i = 0; i < temp.length; i++)
|
|
{
|
|
min = i;
|
|
for(var j = i+1; j < temp.length; j++)
|
|
{
|
|
if(temp[j].tacticalState < temp[min].tacticalState)
|
|
{
|
|
min = j;
|
|
}
|
|
}
|
|
tmp = temp[i];
|
|
temp[i] = temp[min];
|
|
temp[min] = tmp;
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function fillTacStateStr(results)
|
|
{
|
|
temp = results;
|
|
|
|
for(var i = 0; i < temp.length; i++)
|
|
{
|
|
switch(temp[i].tacticalState)
|
|
{
|
|
case 0:
|
|
temp[i].tacStateStr = "Combat ready";
|
|
break;
|
|
case 1:
|
|
temp[i].tacStateStr = "Light damage";
|
|
break;
|
|
case 2:
|
|
temp[i].tacStateStr = "Medium damage";
|
|
break;
|
|
case 3:
|
|
temp[i].tacStateStr = "Heavy damage";
|
|
break;
|
|
case 4:
|
|
temp[i].tacStateStr = "Mobility kill";
|
|
break;
|
|
case 5:
|
|
temp[i].tacStateStr = "Visible mobility kill";
|
|
break;
|
|
case 6:
|
|
temp[i].tacStateStr = "Weapon system damage";
|
|
break;
|
|
case 7:
|
|
temp[i].tacStateStr = "Visible weapon system damage";
|
|
break;
|
|
case 8:
|
|
temp[i].tacStateStr = "Catastrophic kill";
|
|
break;
|
|
case 9:
|
|
temp[i].tacStateStr = "Temporary severance";
|
|
break;
|
|
case 10:
|
|
temp[i].tacStateStr = "Near miss";
|
|
break;
|
|
case 11:
|
|
temp[i].tacStateStr = "Hit with no effect";
|
|
break;
|
|
case 12:
|
|
temp[i].tacStateStr = "Vulnerability bits changed";
|
|
break;
|
|
case 13:
|
|
temp[i].tacStateStr = "Reserved";
|
|
break;
|
|
case 14:
|
|
temp[i].tacStateStr = "N-Cont";
|
|
break;
|
|
case 15:
|
|
temp[i].tacStateStr = "B-Cont";
|
|
break;
|
|
case 16:
|
|
temp[i].tacStateStr = "C-Cont";
|
|
break;
|
|
case 99:
|
|
temp[i].tacStateStr = "Not ready";
|
|
break;
|
|
default:
|
|
temp[i].tacStateStr = "Errorstate";
|
|
break;
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
function enableDisable()
|
|
{
|
|
document.getElementById("radioOne").innerHTML = "Show all";
|
|
document.getElementById("radioTwo").innerHTML = "Show only duplicates";
|
|
document.getElementById("radioThree").innerHTML = "Hide all duplicates";
|
|
switch(document.getElementById("sortBy").value)
|
|
{
|
|
case "sortby":
|
|
|
|
case "standard":
|
|
document.getElementById("radioOne").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "none";
|
|
document.getElementById("radioTwo").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "none";
|
|
document.getElementById("radioThree").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "none";
|
|
document.getElementById("search").style.display = "none";
|
|
document.getElementById("tacStates").style.display = "none";
|
|
document.getElementById("wlsZones").style.display = "none";
|
|
break;
|
|
case "equipNo":
|
|
document.getElementsByName("search")[0].placeholder="Equipment Number";
|
|
document.getElementsByName("search")[0].style.display = "";
|
|
document.getElementById("radioOne").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "";
|
|
document.getElementById("radioTwo").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "";
|
|
document.getElementById("radioThree").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "";
|
|
document.getElementById("search").style.display = "";
|
|
document.getElementById("tacStates").style.display = "none";
|
|
document.getElementById("wlsZones").style.display = "none";
|
|
break;
|
|
case "tagID":
|
|
document.getElementsByName("search")[0].placeholder="Tag ID";
|
|
document.getElementsByName("search")[0].style.display = "";
|
|
document.getElementById("radioOne").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "";
|
|
document.getElementById("radioTwo").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "";
|
|
document.getElementById("radioThree").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "";
|
|
document.getElementById("search").style.display = "";
|
|
document.getElementById("tacStates").style.display = "none";
|
|
document.getElementById("wlsZones").style.display = "none";
|
|
break;
|
|
case "inBlockedArea":
|
|
document.getElementById("radioOne").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "";
|
|
document.getElementById("radioTwo").innerHTML = "Show in blocked area";
|
|
document.getElementById("radioTwo").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "";
|
|
document.getElementById("radioThree").innerHTML = "Show not in blocked area";
|
|
document.getElementById("radioThree").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "";
|
|
document.getElementById("search").style.display = "none";
|
|
document.getElementById("tacStates").style.display = "none";
|
|
document.getElementById("wlsZones").style.display = "none";
|
|
break;
|
|
case "gpsOn":
|
|
document.getElementById("radioOne").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "";
|
|
document.getElementById("radioTwo").innerHTML = "Show GPS on";
|
|
document.getElementById("radioTwo").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "";
|
|
document.getElementById("radioThree").innerHTML = "Show GPS off";
|
|
document.getElementById("radioThree").style.display = "";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "";
|
|
document.getElementById("search").style.display = "none";
|
|
document.getElementById("tacStates").style.display = "none";
|
|
document.getElementById("wlsZones").style.display = "none";
|
|
break;
|
|
case "wlsZone":
|
|
document.getElementById("radioOne").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "none";
|
|
document.getElementById("radioTwo").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "none";
|
|
document.getElementById("radioThree").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "none";
|
|
document.getElementById("search").style.display = "none";
|
|
document.getElementById("tacStates").style.display = "none";
|
|
document.getElementById("wlsZones").style.display = "";
|
|
break;
|
|
case "tacticalState":
|
|
document.getElementById("radioOne").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "none";
|
|
document.getElementById("radioTwo").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "none";
|
|
document.getElementById("radioThree").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "none";
|
|
document.getElementById("search").style.display = "none";
|
|
document.getElementById("tacStates").style.display = "";
|
|
document.getElementById("wlsZones").style.display = "none";
|
|
break;
|
|
default:
|
|
document.getElementById("radioOne").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[1].style.display = "none";
|
|
document.getElementById("radioTwo").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[2].style.display = "none";
|
|
document.getElementById("radioThree").style.display = "none";
|
|
document.getElementsByName("checkDuplicates")[3].style.display = "none";
|
|
document.getElementById("search").style.display = "none";
|
|
document.getElementById("tacStates").style.display = "none";
|
|
document.getElementById("wlsZones").style.display = "none";
|
|
break;
|
|
}
|
|
}
|
|
|
|
function InputFilterValue()
|
|
{
|
|
IDFilter = document.getElementById('FilterID').value;
|
|
if(IDFilter != "")
|
|
startTrack(IDFilter);
|
|
else
|
|
alert("Please put the equipment number for the GPX-Track in the top row and pay attention to the validity of the number.");
|
|
}
|
|
|
|
function getNewDate(){
|
|
|
|
currentDate = new Date();
|
|
day = ("0" + currentDate.getUTCDate()).slice(-2);
|
|
month = ("0" + (currentDate.getUTCMonth() + 1)).slice(-2);
|
|
year = currentDate.getFullYear();
|
|
hours = ("0" + currentDate.getUTCHours()).slice(-2);
|
|
minutes = ("0" + currentDate.getUTCMinutes()).slice(-2);
|
|
seconds = ("0" + currentDate.getUTCSeconds()).slice(-2);
|
|
}
|
|
|
|
function startTrack(IDFilter) //write header for gpx file
|
|
{
|
|
data = "";
|
|
data += '<?xml version="1.0" encoding="UTF-8"?>\n';
|
|
data += '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="Torben"\n xmlns:xsi="http://w3.org/2001/XMLSchema-instance"\n xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">\n';
|
|
data += '<trk>\n';
|
|
data += ' <extensions>\n';
|
|
data += ' <line xmlns="http://www.topografix.com/GPX/gpx_style/0/2">\n'
|
|
data += ' <color>0000FF</color>\n';
|
|
data += ' </line>\n';
|
|
data += ' </extensions>\n';
|
|
data += ' <name>GPXTrack from EquipID:'+ IDFilter +'</name>\n';
|
|
data += ' <trkseg>\n';
|
|
disableOneAndEnableTwo();
|
|
}
|
|
|
|
|
|
function appendtrack()
|
|
{
|
|
var ele1 = msg.data.z;
|
|
getNewDate();
|
|
//changing colors in gpxtrack in relation to height
|
|
|
|
if ((ele1 >= hoehenabstaende[0] && ele2 < hoehenabstaende[0]) || (ele1 >= hoehenabstaende[1] && ele2 < hoehenabstaende[1]) || (ele1 >= hoehenabstaende[2] && ele2 < hoehenabstaende[2]) || (ele1 >= hoehenabstaende[3] && ele2 < hoehenabstaende[3]) || (ele1 >= hoehenabstaende[4] && ele2 < hoehenabstaende[4]) || (ele1 >= hoehenabstaende[5] && ele2 < hoehenabstaende[5]) || (ele1 >= hoehenabstaende[6] && ele2 < hoehenabstaende[6]) || (ele1 >= hoehenabstaende[7] && ele2 < hoehenabstaende[7]) || (ele1 >= hoehenabstaende[8] && ele2 < hoehenabstaende[8]) || (ele1 >= hoehenabstaende[9] && ele2 < hoehenabstaende[9]) || (ele1 >= hoehenabstaende[10] && ele2 < hoehenabstaende[10]))
|
|
{
|
|
data += ' </trkseg>\n';
|
|
data += '</trk>\n';
|
|
data += '<trk>\n';
|
|
data += ' <extensions>\n';
|
|
data += ' <line xmlns="http://www.topografix.com/GPX/gpx_style/0/2">\n';
|
|
|
|
if (ele1 >= hoehenabstaende[1] && ele2 < hoehenabstaende[1])
|
|
data += ' <color>00FF00</color>\n';
|
|
else if (ele1 >= hoehenabstaende[2] && ele2 < hoehenabstaende[2])
|
|
data += ' <color>FF0000</color>\n';
|
|
else if (ele1 >= hoehenabstaende[3] && ele2 < hoehenabstaende[3])
|
|
data += ' <color>836FFF</color>\n';
|
|
else if (ele1 >= hoehenabstaende[4] && ele2 < hoehenabstaende[4])
|
|
data += ' <color>C1CDCD</color>\n';
|
|
else if (ele1 >= hoehenabstaende[5] && ele2 < hoehenabstaende[5])
|
|
data += ' <color>00008B</color>\n';
|
|
else if (ele1 >= hoehenabstaende[6] && ele2 < hoehenabstaende[6])
|
|
data += ' <color>00EEEE</color>\n';
|
|
else if (ele1 >= hoehenabstaende[7] && ele2 < hoehenabstaende[7])
|
|
data += ' <color>DEB887</color>\n';
|
|
else if (ele1 >= hoehenabstaende[8] && ele2 < hoehenabstaende[8])
|
|
data += ' <color>A52A2A</color>\n';
|
|
else if (ele1 >= hoehenabstaende[9] && ele2 < hoehenabstaende[9])
|
|
data += ' <color>DBDBDB</color>\n';
|
|
else if (ele1 >= hoehenabstaende[10] && ele2 < hoehenabstaende[10])
|
|
data += ' <color>BEBEBE</color>\n';
|
|
data += ' </line>\n';
|
|
data += ' </extensions>\n';
|
|
data += ' <trkseg>\n';
|
|
|
|
}
|
|
else if ((ele1 <= hoehenabstaende[0] && ele2 > hoehenabstaende[0]) || (ele1 <= hoehenabstaende[1] && ele2 > hoehenabstaende[1]) || (ele1 <= hoehenabstaende[2] && ele2 > hoehenabstaende[2]) || (ele1 <= hoehenabstaende[3] && ele2 > hoehenabstaende[3]) || (ele1 <= hoehenabstaende[4] && ele2 > hoehenabstaende[4]) || (ele1 <= hoehenabstaende[5] && ele2 > hoehenabstaende[5]) || (ele1 <= hoehenabstaende[6] && ele2 > hoehenabstaende[6]) || (ele1 <= hoehenabstaende[7] && ele2 > hoehenabstaende[7]) || (ele1 <= hoehenabstaende[8] && ele2 > hoehenabstaende[8]) || (ele1 <= hoehenabstaende[9] && ele2 > hoehenabstaende[9]) || (ele1 <= hoehenabstaende[10] && ele2 > hoehenabstaende[10]))
|
|
{
|
|
data += ' </trkseg>\n';
|
|
data += '</trk>\n';
|
|
data += '<trk>\n';
|
|
data += ' <extensions>\n';
|
|
data += ' <line xmlns="http://www.topografix.com/GPX/gpx_style/0/2">\n';
|
|
if (ele1 <= hoehenabstaende[1] && ele2 > hoehenabstaende[1])
|
|
data += ' <color>0000FF</color>\n';
|
|
else if (ele1 <= hoehenabstaende[2] && ele2 > hoehenabstaende[2])
|
|
data += ' <color>00FF00</color>\n';
|
|
else if (ele1 <= hoehenabstaende[3] && ele2 > hoehenabstaende[3])
|
|
data += ' <color>FF0000</color>\n';
|
|
else if (ele1 <= hoehenabstaende[4] && ele2 > hoehenabstaende[4])
|
|
data += ' <color>836FFF</color>\n';
|
|
else if (ele1 <= hoehenabstaende[5] && ele2 > hoehenabstaende[5])
|
|
data += ' <color>C1CDCD</color>\n';
|
|
else if (ele1 <= hoehenabstaende[6] && ele2 > hoehenabstaende[6])
|
|
data += ' <color>00008B</color>\n';
|
|
else if (ele1 <= hoehenabstaende[7] && ele2 > hoehenabstaende[7])
|
|
data += ' <color>00EEEE</color>\n';
|
|
else if (ele1 <= hoehenabstaende[8] && ele2 > hoehenabstaende[8])
|
|
data += ' <color>DEB887</color>\n';
|
|
else if (ele1 <= hoehenabstaende[9] && ele2 > hoehenabstaende[9])
|
|
data += ' <color>A52A2A</color>\n';
|
|
else if (ele1 <= hoehenabstaende[10] && ele2 > hoehenabstaende[10])
|
|
data += ' <color>DBDBDB</color>\n';
|
|
data += ' </line>\n';
|
|
data += ' </extensions>\n';
|
|
data += ' <trkseg>\n';
|
|
}
|
|
//get lat, lon and height for each PositionReport
|
|
data +=' <trkpt lat="'+ Number( msg.data.geoPosition.lat)*180/3.14159265359 + '" lon="' + Number(msg.data.geoPosition.lon)*180/3.14159265359 + '">\n';
|
|
data +=' <ele>' + Number(msg.data.geoPosition.z) + '</ele>\n';
|
|
data +=' <time>' + year + '-' + month + '-' + day + 'T' + hours + ':' + minutes + ':' + seconds + '.00Z</time>\n';
|
|
data +=' <cmt>Dir=' + msg.data.opsPosition.moutObjectId +'</cmt>\n';
|
|
data +=' <desc>Raum=' + msg.data.opsPosition.moutRoomId +'</desc>\n';
|
|
data +=' </trkpt> \n';
|
|
ele2 = ele1;
|
|
}
|
|
|
|
|
|
function saveFile() //write end of gpx file and saveFile
|
|
{
|
|
IDFilter = document.getElementById('FilterID').value;
|
|
var filename = 'GPXTrack' + IDFilter + '//' + day + '/'+ month + '/' + year + '//' + currentDate.getHours() + '/' + currentDate.getMinutes() + '.gpx';
|
|
var type = 'xml';
|
|
data += ' </trkseg>\n';
|
|
data += '</trk>\n';
|
|
data += '</gpx>\n';
|
|
saveGPXData(data, filename, type);
|
|
}
|
|
|
|
|
|
function saveGPXData(data, filename, type) { // saves data in a blob in the browser
|
|
var a = document.createElement("a"),
|
|
file = new Blob([data], {type: type});
|
|
if (window.navigator.msSaveOrOpenBlob) // IE10+
|
|
window.navigator.msSaveOrOpenBlob(file, filename);
|
|
else { // Others
|
|
var url = URL.createObjectURL(file);
|
|
a.href = url;
|
|
a.download = filename;
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
setTimeout(function() {
|
|
document.body.removeChild(a);
|
|
window.URL.revokeObjectURL(url);
|
|
}, 0);
|
|
|
|
}
|
|
}
|
|
|
|
function resetFile()
|
|
{
|
|
if(confirm("Are you sure you want to reset the GPX Track? All data from the previous Track will be lost!"))
|
|
{
|
|
document.getElementById('FilterEquip').disabled = false;
|
|
document.getElementById('saveGPX').disabled = true;
|
|
}
|
|
else
|
|
{
|
|
resetFile();
|
|
}
|
|
}
|
|
|
|
function disableOneAndEnableTwo(){
|
|
document.getElementById('FilterEquip').disabled = true;
|
|
document.getElementById('saveGPX').disabled = false;
|
|
document.getElementById('resetGPX').disabled = false;
|
|
}
|
|
|
|
|
|
function fillArray(){ //fill the array in relation to options, wchich were set with the dropbox
|
|
hoehenabstaende = [];
|
|
for (i = 0; i < document.listForHeight.Hoehen.selectedIndex; i++)
|
|
{
|
|
hoehenabstaende[i]= i*3;
|
|
}
|
|
}
|