<html>
<head>
<title>Script & Test Device</title>
<style type='text/css'>
<!--
body
{
margin:0px;
font-family:Arial;
font-size:9pt;
}
td
{
font-family:Arial;
font-size:9pt;
}
//-->
</style>
<script type='text/jscript'>
// We still need some global objects in order to emulate some
// kind of "session". First, our currency formatter (used with
// all the numbers)
var CurFormatter;
// Then, the Post Object. Needed in order to communicate with our
// webserver
var PostObj = new Object();
// The User Object holds all user-relevant information
var UserObj = new Object();
// And the number of open posts started by the "OnSiteCashDebit"
// -function
var openposts = 0;
// Here all our posts will land
var ServerPage = "http://vision.sitekiosk.net/nocoinsys/"
+ "userpost.php";
// ---- Function ----
// InitDialog
// ---- Parameters --
// none
// ------------------
// this function is called while initializing the page
function InitDialog()
{
// we need to set up our SiteKiosk-interface
window.external.InitScriptInterface();
// Init the ScriptDevice
// The account needs to be enabled in order to debit/credit it
ScriptDevice.AccountEnabled = true;
// Volatile means the accountmoney can change spontaneously
ScriptDevice.Volatile = true;
// Retransfer enables the Device to handle the money itself,
// when user wants to log out
ScriptDevice.RetransferEnabled = true;
// Eventhandler for the log out
ScriptDevice.OnCheckRetransfer = OnCheckRetransfer;
// Eventhandler for the log out
ScriptDevice.OnRetransfer = OnRetransfer;
// Eventhandler for "Volatile" mode
ScriptDevice.OnSiteCashDebit = OnSiteCashDebit;
// Create our currency formatter
var SCash = SiteKiosk.Plugins("SiteCash");
CurFormatter = SCash.CreateCurrencyFormatter();
// Create the post object
PostObj = SiteKiosk.Network.CreateHTTPPost();
// bind the eventhandler used when the post returns
PostObj.OnPostComplete = OnPostComplete;
// Debug-notifications
SiteKiosk.Logfile.Notification("ScriptDevice Initialized!");
SiteKiosk.Logfile.Notification("ScriptDevice's remaining "
+ "money (last session): " + ScriptDevice.Balance);
}
// ---- Function ----
// FormSubmit
// ---- Parameters --
// none
// ------------------
// User gave her login-infos and clicked on "OK" - create
// HTTP-Post Object and send to the server
function FormSubmit()
{
// Debug notification
SiteKiosk.Logfile.Notification("ScriptDevice Logging in!");
// Prearrange the Post Object parameters
PostObj.OnPostComplete = OnPostComplete;
PostObj.AddParameter("login", "SiteKiosk");
PostObj.AddParameter("action", "login");
PostObj.AddParameter("login_name", edtLoginName.value);
PostObj.AddParameter("login_password", edtLoginPassword.value);
UserObj.name = edtLoginName.value;
UserObj.password = edtLoginPassword.value;
// And posting...
PostObj.Submit(ServerPage);
}
// ---- Event --------
// OnPostComplete
// ---- Parameters --
// success - >= 0 means "OK", post was successful
// returnvalue - the page that was actually thrown by the server
// ------------------
// User wanted to log in, server sent an answer where extended
// info to the user is given
function OnPostComplete(success, returnvalue)
{
// Debug notification
SiteKiosk.Logfile.Notification("Got answer from Server: "
+ returnvalue);
// Parse our return value and put it into local variables
ParseReturnValue(returnvalue, false);
// To be sure, create a new post object
PostObj = SiteKiosk.Network.CreateHTTPPost();
PostObj.OnPostComplete = OnPostComplete;
}
// ---- Event -------
// OnCheckRetransfer
// ---- Parameters --
// amount - the amount that's retransferred (after logout)
// ------------------
// SiteKiosk calls this function before it really retransfers the
// money returnvalue "true" means that everything can be
// transferred, "false" means "stop event chain here"
function OnCheckRetransfer(amount)
{
return true;
}
// ---- Event -------
// OnRetransfer
// ---- Parameters --
// amount - the amount that's retransferred (after logout)
// ------------------
// SiteKiosk got the OK to transfer the money back to the user
// (or, in this case - the Database)
function OnRetransfer(amount)
{
// We want a new event handler for our post object (can't be
// handled the same way as the other ones)
PostObj.OnPostComplete = OnREPostComplete;
// Debug notification
SiteKiosk.Logfile.Notification("ScriptDevice Logout Amount: "
+ amount);
// Parameters for the server
// for details, have a look at the other part of the tutorial
// (Server-part)
PostObj.AddParameter("login", "SiteKiosk");
PostObj.AddParameter("action", "setmoney");
PostObj.AddParameter("MoneyBack", ScriptDevice.Balance
+ amount);
PostObj.AddParameter("login_name", UserObj.name);
PostObj.AddParameter("login_password", UserObj.password);
// Now, send the request to the server!
PostObj.Submit(ServerPage);
// We need to debit the account manually in order to reset our
// SiteCash account
ScriptDevice.Debit(ScriptDevice.Balance, false);
return true;
}
// ---- Event -------
// OnREPostComplete
// ---- Parameters --
// success - >= 0 means "OK", post was successful
// returnvalue - the page that was actually thrown by the server
// ------------------
// User logged out, server needed to be notified and the result of
//this post lands here
function OnREPostComplete(success, returnvalue)
{
// Debug notification
SiteKiosk.Logfile.Notification("Got answer from Server (RE): "
+ returnvalue);
// Parse our returned value and don't put it into local
// variables
ParseReturnValue(returnvalue, true);
// To be sure that there are no corpses, create a new post
// object
PostObj = SiteKiosk.Network.CreateHTTPPost();
PostObj.OnPostComplete = OnPostComplete;
// User logged out, so destroy the old user infos
edtLoginName.value = "";
edtLoginPassword.value = "";
LogInfo.innerHTML = "";
UserObj = new Object();
// Display the login box again
trName.style.display = "block";
trPW.style.display = "block";
trOK.style.display = "block";
}
// ---- Function ----
// ParseReturnValue
// ---- Parameters --
// value - the actual return value from the server
// is_retransfer - when this is true, the user already logged out,
// so don't do anything
// ------------------
// Here the extended info, given by the server, is parsed and put
// into local (JS-Global) variables
function ParseReturnValue(value, is_retransfer)
{
// The delimiter for each value is "|" (for details, look at
// part 2 of the tutorial (Server part))
var RetArr = value.split("|");
// Is this a retransfer (log out)?
if (is_retransfer == false)
{
// No, so just put everything into local variables
// Error prophylaxis (answer could be some kind of screwed)
if (RetArr[2] != null)
{
UserObj.RetVal = RetArr[2];
UserObj.RetName = RetArr[3];
UserObj.RetLastName = RetArr[4];
UserObj.RetStartPage = RetArr[5];
} else UserObj.RetVal = 0;
} else UserObj.RetVal = 0;
// Put some atributes to our user object
UserObj.ReturnValue = value;
UserObj.RetCode = parseInt(RetArr[0]);
UserObj.RetMsg = RetArr[1];
// Debug notification
SiteKiosk.Logfile.Notification("ScriptDevice's UserName "
+ "(ParseReturnValue): " + UserObj.name);
// RetCode < 0 means we got an error (for details have a look
// at the Server part of the tutorial)
if (UserObj.RetCode < 0)
alert(UserObj.RetMsg);
else if (UserObj.RetVal > 0 && is_retransfer == false)
{
// Everything went fine, so we're logged in and ready to go
LogInfo.innerHTML = "Successfully logged in as:<br><b>"
+ UserObj.RetName + " " + UserObj.RetLastName + "</b>";
// Hide the input boxes
trName.style.display = "none";
trPW.style.display = "none";
trOK.style.display = "none";
// and Credit our account with the money stored on the server
CreditDebit(UserObj.RetVal, true);
// User got a start page? So why don't navigate there...
if (UserObj.RetStartPage != "")
var SW = SiteKiosk.WindowList.MainWindow.SiteKioskWindow;
SW.SiteKioskWebBrowser.Navigate(UserObj.RetStartPage, true);
}
}
// ---- Function ----
// CreditDebit
// ---- Parameters --
// fValue - the string that holds the money to credit/debit
// bCredit - Credit account?
// ------------------
// Just credit is used...
function CreditDebit(fValue, bCredit)
{
fValue = parseFloat(fValue);
if (bCredit) ScriptDevice.Credit(fValue, false);
else ScriptDevice.Debit(fValue, false);
}
// ---- Function ----
// OnSCDPostComplete (On SiteCashDebit PostComplete)
// ---- Parameters --
// success - >= 0 means "OK", post was successful
// returnvalue - the page that was actually thrown by the server
// ------------------
// One of our minutely posted queries got back, decrement counter
function OnSCDPostComplete(success, returnvalue)
{
// Debug notification
SiteKiosk.Logfile.Notification("Got answer from Server (SCD): "
+ returnvalue);
// Decrement openposts, since this is the PostComplete Event
openposts--;
}
// ---- Function ----
// OnSiteCashDebit
// ---- Parameters --
// payedamount - the amount the user payed for this span of time
// newbalance - the new balance of the account
// ------------------
// When the "Volatile"-Flag is used with the Script Device,
// SiteCash wants to debit every minute (so the server needs
// to be updated)
function OnSiteCashDebit(payedamount, newbalance)
{
// Debug notification
SiteKiosk.Logfile.Notification("ScriptDevice Debiting ("
+ payedamount + ", " + newbalance + ")!");
// Three retries (about three minutes)
if (openposts < 3)
{
// ok...
// Do we have a user?
if (UserObj.name != null)
{
// ok...
// Prepare post object to receive the updates from
// the server
PostObj.OnPostComplete = OnSCDPostComplete;
PostObj.AddParameter("login", "SiteKiosk");
PostObj.AddParameter("action", "setmoney");
PostObj.AddParameter("MoneyBack", newbalance);
PostObj.AddParameter("login_name", UserObj.name);
PostObj.AddParameter("login_password", UserObj.password);
// Debug notification
SiteKiosk.Logfile.Notification("ScriptDevice Debiting "
+ "for User: " + UserObj.name);
// And away...
PostObj.Submit(ServerPage);
// increment openposts - we just posted a new one
++openposts;
}
else
{
// no, we don't have a user, don't do anything
return false;
}
}
else
{
// openposts >= 3
// Three retries, log out - maybe server dead?
OnREPostComplete(true, "");
ScriptDevice.Debit(ScriptDevice.Balance, false);
// Notify the user and the logfiles
SiteKiosk.Logfile.Notification("ScriptDevice got a"
+ " server timeout! User was logged out!");
alert("Server timed out, please call support personell");
openposts = 0;
}
}
</script>
</head>
<body onload="InitDialog()"
style='background:url(../Images/hintergrund.jpg);'>
<table style='width:100%;'>
<tr>
<td align=''>
<table>
<tr id='trName'>
<td style='color:white;'>Name:
<td><input type='text' name='edtLoginName'>
<tr id='trPW'>
<td style='color:white;'>Passwort:
<td><input type='password' name='edtLoginPassword'>
<tr id='trOK'>
<td colspan='2'>
<input type='button' value='OK' onClick='FormSubmit();'>
<tr>
<td style='color:white;' id='LogInfo' colspan='2'>
</table>
</td>
</tr>
</table>
</body>
</html>
|