var journalineAppVersion = "2.7";
Config.appIdentifier = 'journaline';
Config.startPanelUrl = 'http://127.0.0.1/journaline/0.xml?0';
Config.geocoderEnabled = false;
var urlPrefix = 'http://127.0.0.1/journaline/';
var objectId = '0';
var refreshTime = "0";
var retryTime = "5000";
var refreshContent = false;
var objectType;
var suffix;
var successCount = 0;
var timer;
var hotButtonMenuActiv = false;
var req = false; // Request helper
var currentResponse;
var variant = "NBT";
var hmiPlugin;
/* use this tooltips if the translation file couldn't be loaded or language is unknown*/
var i18nFallback = {
"locale" : "en_UK",
"pageTitle" : "Journaline",
"scrollUp" : "Scroll up",
"scrollDown" : "Scroll down",
"readOut" : "Read out",
"telCall" : "Phone call"
};
initApp = function() {
hmiPlugin = document.getElementById("HMIPlugin");
if( hmiPlugin != null)
{
hmiPlugin.addNotificationOnDisplaySize(function(res){
resizeScreen(res.xSize);
});
}
else
{
LOG.error( "Journaline: hmiPlugin is null!" );
}
addNBTEventListener();
EFIHelper.init();
PM.init();
LOG.info('UA: ' + PM.getUserAgent() );
variant = PM.getUserAgent().split(';', 1)[0].split('(', 2)[1];
if( variant == 'NBT_RSE')
{
Config.startPanelUrl = 'http://160.48.199.119/journaline/0.xml?0';
urlPrefix = 'http://160.48.199.119/journaline/';
}
I18N.init();
LOG.info( 'Init complete. journalineApp.js ver: ' + journalineAppVersion + '. Variant: ' + variant );
var newCursorPos = new Cursor.cursorPosition( 0, 0, 0); /* root page */
Cursor.cursorStack.push(newCursorPos);
loadContent(Config.startPanelUrl);
}
var generalKeydownHandler = function(evt) {
var k = evt.keyCode;
switch (k) {
case 13: {// enter
if(objectType == "menu"){
if( $('#current').find('.selected').hasClass('inactive') == false ) {
refreshContent = false;
clearTimeout(timer);
if( req ){ // cancel current request
req.abort();
}
Cursor.storePosition();
}
}
else if( (objectType == "message") || (objectType == "list") || (objectType == "titleOnly") ) {
var selected = $('#current').find('.selected');
if( selected.hasClass('scrollUp') == false && selected.hasClass('scrollDown') == false && selected.hasClass('textToSpeech') == false ) {
refreshContent = false;
clearTimeout(timer);
if( req ){ // cancel current request
req.abort();
}
if( selected.hasClass('hotButton') == false )
{
Cursor.storePosition();
}
}
}
}
case 39: // right arrow
if (!PM.blockUI) {
PM.execute();
}
break;
case 38: // up arrow
if (!PM.blockUI) {
PM.scrollUp();
}
break;
case 40: // down arrow
if (!PM.blockUI) {
PM.scrollDown();
}
break;
case 37: // left arrow
if( req ){ // cancel current request
req.abort();
}
PM.back();
break;
}
};
var Cursor = {
selectedId : 0,
scrollHeight : 0,
contentStyle : 0,
cursorStack : new Array(),
cursorPosition : function( selectedId, scrollHeight, contentStyle ) {
this.selectedId = selectedId;
this.scrollHeight = scrollHeight;
this.contentStyle = contentStyle;
},
storePosition : function() {
if( objectType == "menu" )
{
var t_selectedId = $('#current').find('.selected').children().attr('id');
var t_scrollHeight = $('#current ul.content').attr('scrollheight');
var t_contentStyle = $('#current ul.content').attr('style');
}
else
{
var t_selectedId = $('#current').find('.toolbar .selected').index();
var t_scrollHeight = $('#current .content').attr('scrollheight');
var t_contentStyle = $('#current .content').attr('style');
}
var newCursorPos = new Cursor.cursorPosition( t_selectedId, t_scrollHeight, t_contentStyle);
Cursor.cursorStack.push(newCursorPos);
LOG.info('Store cursor id: ' + t_selectedId + ' scrollHeight: ' + t_scrollHeight + ' contentStyle: ' + t_contentStyle + ' StackSize: ' + Cursor.cursorStack.length);
},
restorePosition : function() {
var cursorStack = Cursor.cursorStack;
if(cursorStack.length > 0) {
Cursor.selectedId = cursorStack[ cursorStack.length-1].selectedId;
Cursor.scrollHeight = cursorStack[ cursorStack.length-1].scrollHeight;
Cursor.contentStyle = cursorStack[ cursorStack.length-1].contentStyle;
LOG.info('Restore cursor id: ' + Cursor.selectedId + ' scrollHeight: ' + Cursor.scrollHeight + ' contentStyle: ' + Cursor.contentStyle + ' StackSize: ' + cursorStack.length);
cursorStack.pop();
}
},
checkStack : function() {
var extrakt = suffix.slice(5);
var objectIdArray = extrakt.split(",");
/*
* check if maybe some objects were deleted and reduce the cursor stack appropriate
*/
var cursorStack = Cursor.cursorStack;
if( cursorStack.length > 0)
{
for(var i = cursorStack.length; i >= 0 ; i--)
{
if( cursorStack[i-1].selectedId == objectIdArray[objectIdArray.length-1] )
{
break;
}
else
{
for(var i = 0; i < objectIdArray.length; i++)
{
LOG.info('Suffix id ' + i + ':' + objectIdArray[i] );
}
if( cursorStack.length > 0)
{
for(var i = cursorStack.length - 1; i >= 0 ; i--)
{
LOG.info('Cursor stack ' + i + ':' + cursorStack[i].selectedId );
}
}
cursorStack.pop();
LOG.info( 'Cursor stack: ' + cursorStack.length );
}
}
}
}
};
loadContent = function(loadUrl){
LOG.info('Request Nr. ' + successCount + ': ' + loadUrl );
req = $.ajax({
url : loadUrl,
dataType : 'xml',
data:'_t=' + PM.now(),
timeout : Config.ajaxTimeout,
success : function(xml, textStatus, jqXHR) {
clearTimeout(timer);
req = null;
currentResponse = $(xml).find("journaline");
objectType = currentResponse.children().prop("nodeName");
objectId = currentResponse.children().attr("id");
refreshTime = currentResponse.children().attr("refreshTimeMs");
suffix = currentResponse.children().find('suffix').text();
LOG.info('Response: Nr.:' + successCount + ',objectType: ' + objectType + ',objectId: ' + objectId + ',refreshTime: ' + refreshTime );
successCount++;
Cursor.checkStack();
switch (objectType) {
case "menu":
produceMenu();
break;
case "message":
case "list":
case "titleOnly":
produceText();
break;
default:
break;
}
},
error : function(jqXHR) {
LOG.error('Journaline. Req ret: ' + jqXHR.statusText + " " + jqXHR.status );
if( jqXHR.statusText == "error" )
{
setTimeout("loadContent(Config.startPanelUrl)",retryTime);
}
}
});
}
produceMenu = function(){
if(refreshContent)
{
Cursor.selectedId = $('#current').find('.selected').children().attr('id');
Cursor.scrollHeight = $('#current ul.content').attr('scrollheight');
Cursor.contentStyle = $('#current ul.content').attr('style');
}
if( $('#current').length )
{
$('#current').remove();
}
var panel = ('
');
PM.holder.append(panel);
var linkNr = 0;
currentResponse.find('menuitem').each(function (index)
{
var isActiv = $(this).attr("activ");
if (isActiv=="n")
{
$('.content').append('' + $(this).find('itemlabel').text() +'
');
}
else
{
$('.content').append('' + $(this).find('itemlabel').text() +'
' );
}
if( Cursor.selectedId == $(this).find('targetId').text())
{
linkNr = index;
$('.link').removeClass('selected');
$('.link').eq(index).addClass('selected');
$('#current ul.content').attr('scrollheight', Cursor.scrollHeight);
$('#current ul.content').attr('style', Cursor.contentStyle);
}
} );
PM.show('current');
LOG.info('Selected menu top: ' + $('#current').find('li.selected').position().top + ' scrollheight: ' + Cursor.scrollHeight + ' linkNr: ' + linkNr );
//cursor is not visible
if( $('#current').find('li.selected').position().top < 0 )
{
if( linkNr )
{
LOG.info('Set scrollHeight: ' + (linkNr * Config.scrollHeight - Config.scrollHeight*2));
PM.visiblePanel.setScrollHeight( linkNr * Config.scrollHeight - (Config.scrollHeight*2));
}
else
{
LOG.info('Sel pos < 0. Set scrollHeight: 0');
PM.visiblePanel.setScrollHeight(0);
}
}
else if( $('#current').find('li.selected').position().top > ( (Config.scrollHeight * Config.scrollPageRowsCount) - (Config.scrollHeight*2)) )
{
if( linkNr )
{
LOG.info('Set scrollHeight: ' + (linkNr * Config.scrollHeight - Config.scrollHeight*2));
PM.visiblePanel.setScrollHeight( linkNr * Config.scrollHeight - (Config.scrollHeight*2));
}
else
{
LOG.info('Set scrollHeight: 0' );
PM.visiblePanel.setScrollHeight(0);
}
}
else
{
}
if( $('#current').find('li.selected').length < 1 ) //link not available ( deleted? )
{
if($('.link').length >= 0 )
{
LOG.info('No selected link found. Set scrollHeight: 0' );
$('.link').eq(0).addClass('selected');
PM.visiblePanel.setScrollHeight(0);
}
}
if(objectId == '0')
{
PM.isStartPage = true;
PM.setStartPageDisplayed(true);
}
else
{
PM.isStartPage = false;
}
refresh();
}
produceText = function(){
if(refreshContent )
{
Cursor.selectedId = $('#current').find('.toolbar .selected').index();
Cursor.scrollHeight = $('#current .content').attr('scrollheight');
Cursor.contentStyle = $('#current .content').attr('style');
}
else if(hotButtonMenuActiv)
{
Cursor.restorePosition();
hotButtonMenuActiv = false;
}
else
{
Cursor.selectedId = 0;
Cursor.scrollHeight = 0;
Cursor.contentStyle = 0;
}
if( $('#current').length )
{
$('#current').remove();
}
var panel = ('');
PM.holder.append(panel);
var telAvailable = false;
$('.content').append('