\
\
");
gAddEventListener("rwdet_dir", 'change', rwdetail_cb_dirchange);
gAddEventListener("rwdet_type", 'change', rwdetail_cb_typechange);
gAddEventListener("rwdet_altdir", 'change', rwdetail_cb_dirchange);
gAddEventListener("rwdet_typenothing", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typenormal", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typecrossing", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typeturnout", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typesensor", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typeconnector", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typebutton", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typetext", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_typeblock", 'click', rwdetail_cb_typeselector);
gAddEventListener("rwdet_SAVE", 'click', rwdetail_cb_save);
gAddEventListener("rwdet_CLOSE", 'click', rwdetail_cb_close);
}
else {
var x = document.getElementById("rwdet_X");
var y = document.getElementById("rwdet_Y");
x.value = posx;
y.value = posy;
}
rwdetail_setData({type: 0, x: posx, y: posy, dir: 0, altdir: 0, name: ""});
if (track.elements[posx + posy * track.size.x]) {
rwdetail_setData(track.elements[posx + posy * track.size.x]);
}
};
function rwdetail_cb_dirchange () {
rwdetail_DrawSample ();
};
function rwdetail_cb_typechange () {
var type = document.getElementById("rwdet_type");
var typenothing = document.getElementById("rwdet_typenothing");
var typenormal = document.getElementById("rwdet_typenormal");
var typecrossing = document.getElementById("rwdet_typecrossing");
var typeturnout = document.getElementById("rwdet_typeturnout");
var typesensor = document.getElementById("rwdet_typesensor");
var typeconnector = document.getElementById("rwdet_typeconnector");
var typebutton = document.getElementById("rwdet_typebutton");
var typetext = document.getElementById("rwdet_typetext");
var typeblock = document.getElementById("rwdet_typeblock");
switch(Number(type.value)) {
case 0: typenothing.checked = true; break;
case 1: typenormal.checked = true; break;
case 2: typecrossing.checked = true; break;
case 3: typeturnout.checked = true; break;
case 4: typesensor.checked = true; break;
case 5: typeconnector.checked = true; break;
case 6: typebutton.checked = true; break;
case 7: typetext.checked = true; break;
case 8: typeblock.checked = true; break;
default:
type.value = 0;
typenothing.checked = true;
break;
}
rwdetail_DrawSample();
};
function rwdetail_cb_typeselector () {
var type = document.getElementById("rwdet_type");
type.value = this.value;
rwdetail_DrawSample ();
};
function rwdetail_cb_save () {
var name = document.getElementById("rwdet_name");
var type = document.getElementById("rwdet_type");
var dir = document.getElementById("rwdet_dir");
var altdir = document.getElementById("rwdet_altdir");
var x = document.getElementById("rwdet_X");
var y = document.getElementById("rwdet_Y");
var rws = new Array();
rws.length = 0;
rws.push({name: name.value, x: Number(x.value), y: Number(y.value), type: type.value,
dir: dir.value, altdir: altdir.value});
serverinout_addTrack(rws);
trackAddElement(rws[0]);
};
function rwdetail_cb_close () {
var win = document.getElementById("rwdetail");
if (win) document.body.removeChild(win);
};
function rwdetail_DrawSample() {
var type = document.getElementById("rwdet_type");
var dir = document.getElementById("rwdet_dir");
var altdir = document.getElementById("rwdet_altdir");
var c = document.getElementById("rwdet_canvas");
var ctx = c.getContext("2d");
ctx.fillRect(0, 0, track.scale, track.scale);
trackDrawElement(ctx, { type: type.value, x: 0, y: 0,
dir: dir.value, altdir: altdir.value }, 0);
};
function rwdetail_setData(rw) {
var name = document.getElementById("rwdet_name");
var type = document.getElementById("rwdet_type");
var dir = document.getElementById("rwdet_dir");
var altdir = document.getElementById("rwdet_altdir");
if (rw) {
name.value = rw.name;
type.value = rw.type;
dir.value = rw.dir;
altdir.value = rw.altdir;
}
rwdetail_cb_typechange();
rwdetail_DrawSample();
};
function rw_Click(x,y) {
var idx = x + y * track.size.x;
if (track.elements[idx]) {
//
// Button or Turnout?
if (track.elements[idx].type == RAILWAY_TURNOUT || track.elements[idx].type == RAILWAY_BUTTON) {
if (track.elements[idx].name != "") {
if (turnout_IsActive(track.elements[idx].name)) {
turnout_server_Activate(track.elements[idx].name, 0);
}
else {
turnout_server_Activate(track.elements[idx].name, 1);
}
}
}
//
// Sensor
if (track.elements[idx].type == RAILWAY_SENSOR) {
if (track.elements[idx].name != "") {
}
}
}
};
// *******************************************************************************************************
// * *
// * TURNOUTS *
// * *
// *******************************************************************************************************
var turnouts = [];
//
// update or add a new element
//
function turnout_Update(data) {
for (var i = 0; i < turnouts.length; i++) {
if (data.name == turnouts[i].name) {
debug ("Update turnout:" + turnouts[i].name + " with turnout:" + data.name);
turnouts[i].name = data.name;
turnouts[i].ifname = data.ifname;
turnouts[i].addr = data.addr;
turnouts[i].flags = data.flags;
return;
}
}
// not found add element
debug ("Add turnout:" + data.name);
turnouts.push ({
name: data.name,
ifname: data.ifname,
addr: data.addr,
flags: data.flags
});
};
//
// return if the turnout is active or not
//
function turnout_IsActive(name) {
for (var i = 0; i < turnouts.length; i++) {
if (name == turnouts[i].name) {
if (turnouts[i].flags & TURNOUT_F_TURNOUT) return 1
else return 0;
}
}
return 0;
};
//
// delete element from the list
// in arrays we can not delete just an element, so we create a new one
// and replace this one.
//
function turnout_Delete(name) {
var l = new Array();
for (var i = 0; i < turnouts.length; i++) {
if (name != turnouts[i].name) {
l.push (turnouts[i]);
}
}
// clear list and replace list with new data.
turnouts.lenght = 0;
turnouts = l;
};
//
// send new element to server
//
function turnout_server_Add(elm) {
var request = { command: "addturnout", turnout: elm };
serverinout (request, serverinout_defaultCallback);
};
//
// send delete element to server
//
function turnout_server_Del(elm) {
var request = { command: "delturnout", turnout: elm };
serverinout (request, serverinout_defaultCallback);
};
//
// send activate to the server (onoff must be 0 or 1)
//
function turnout_server_Activate(name, onoff) {
var request = { command: "setturnout", name: name, activate: onoff };
serverinout (request, serverinout_defaultCallback);
};
function turndetail_show(turnname) {
var win = document.getElementById("turndetail");
debug ("turndetail_show");
if (!win) {
debug ("turndetail_show create window");
win = gWindowCreate("turndetail", "Turnout", 400, 500, " \
\
Name: \
\
\
\
\
\
Interface:
\
Adress:
\
Flags:
\
\
\
\
\
\
\
\
\
\
\
\
");
gAddEventListener("turndet_inverse", 'click', turndetail_cb_inverse);
gAddEventListener("turndet_active", 'click', turndetail_cb_active);
gAddEventListener("turndet_CLOSE", 'click', turndetail_cb_close);
gAddEventListener("turndet_DELETE", 'click', turndetail_cb_delete);
gAddEventListener("turndet_SAVE", 'click', turndetail_cb_save);
gAddEventListener("turndet_NEXT", 'click', turndetail_cb_next);
gAddEventListener("turndet_PREV", 'click', turndetail_cb_prev);
}
if (turnname) {
for (var i = 0; i < turnouts.length; i++) {
if (turnname == turnouts[i].name) turndetail_setData(turnouts[i]);
}
}
};
//
// inverse selected, setup flags
function turndetail_cb_inverse () {
var cbinverse = document.getElementById("turndet_inverse");
var flags = document.getElementById("turndet_flags");
if (cbinverse.checked) {
flags.value = Number(flags.value) | TURNOUT_F_INVERSE;
}
else {
flags.value = Number(flags.value) & (0xFFFF-TURNOUT_F_INVERSE);
}
};
//
// activate turnout
function turndetail_cb_active () {
var cbact = document.getElementById("turndet_active");
var flags = document.getElementById("turndet_flags");
var name = document.getElementById("turndet_name");
if (cbact.checked) {
flags.value = Number(flags.value) | TURNOUT_F_TURNOUT;
turnout_server_Activate(name.value, 1);
}
else {
flags.value = Number(flags.value) & (0xFFFF-TURNOUT_F_TURNOUT);
turnout_server_Activate(name.value, 0);
}
};
function turndetail_cb_close () {
var win = document.getElementById("turndetail");
if (win) document.body.removeChild(win);
};
//
// Callback: Delete Button
//
function turndetail_cb_delete () {
var elm = {};
elm = turndetail_getData();
turnout_Delete(elm.name);
turnout_server_Del(elm);
};
//
// Callback: Save Button
//
function turndetail_cb_save () {
var elm = {};
elm = turndetail_getData();
turnout_Update(elm);
turnout_server_Add(elm);
};
//
// Callback: Next Button
//
function turndetail_cb_next () {
var cursel = -1;
var turnname = document.getElementById("turndet_name");
for (var i = 0; i < turnouts.length; i++) {
if (turnname.value == turnouts[i].name) cursel = i;
}
cursel = cursel + 1;
if (cursel >= turnouts.length) cursel = 0;
if (cursel < 0) cursel = 0;
for (var i = 0; i < turnouts.length; i++) {
if (i == cursel) turndetail_setData(turnouts[i]);
}
// debug ("Cursel: " + cursel + " turnouts.lenght:" + turnouts.length);
};
//
// Callback: Prev Button
//
function turndetail_cb_prev () {
var cursel = -1;
var turnname = document.getElementById("turndet_name");
for (var i = 0; i < turnouts.length; i++) {
if (turnname.value == turnouts[i].name) cursel = i;
}
cursel = cursel - 1;
if (cursel < 0 || cursel >= turnouts.length) cursel = turnouts.length - 1;
for (var i = 0; i < turnouts.length; i++) {
if (i == cursel) turndetail_setData(turnouts[i]);
}
// debug ("Cursel: " + cursel + " turnouts.lenght:" + turnouts.length);
};
//
// fill out all the elements on the dialogbox
//
function turndetail_setData(elm) {
var turnname = document.getElementById("turndet_name");
var turnifname = document.getElementById("turndet_ifname");
var turnaddr = document.getElementById("turndet_addr");
var turnflags = document.getElementById("turndet_flags");
var cbinverse = document.getElementById("turndet_inverse");
var cbactive = document.getElementById("turndet_active");
if (elm) {
if (turnname) turnname.value = elm.name;
if (turnifname) turnifname.value = elm.ifname;
if (turnaddr) turnaddr.value = elm.addr;
if (turnflags) turnflags.value = elm.flags;
if (cbinverse) {
if (Number(elm.flags) & 1) cbinverse.checked = true;
else cbinverse.checked = false;
}
if (cbactive) {
if (Number(elm.flags) & 2) cbactive.checked = true;
else cbactive.checked = false;
}
}
};
//
// return all elements from the dialogbox
//
function turndetail_getData() {
var res = { name: "", ifname: "", addr: "", flags: 0 };
var turnname = document.getElementById("turndet_name");
var turnifname = document.getElementById("turndet_ifname");
var turnaddr = document.getElementById("turndet_addr");
var turnflags = document.getElementById("turndet_flags");
if (turnname) res.name = turnname.value;
if (turnifname) res.ifname = turnifname.value;
if (turnaddr) res.addr = turnaddr.value;
if (turnflags) res.flags = turnflags.value;
return res;
};