document.domain="ariva.de"; var currDate = '20260609'; currDate = today(); function ArivaPush(change_rel_max) { this.optBlinkTime = 1000; this.optMinBlinkTime = 500; this.optTimeout = 5000; this.optStatusTextActive = 'aktiv'; this.optStatusTextInactive = 'nicht aktiv'; this.optStatusTextConnect = 'verbinde...'; this.optStatusTextUnknown = 'unbekannt'; this.optServerLogin = 'arivaami'; if (document.domain == 'ariva.de') { this.optServerPort = 80; this.optServerPrefix = 'push'; this.altServerPort = 8081; this.altServerPrefix = ''; this.okPort = 0; } else { this.optServerPort = 8081; this.optServerPrefix = 'streaming'; this.altServerPort = 8081; this.altServerPrefix = 'streaming'; this.okPort = 1; } this.optColorActive = ""; this.optColorPlus = '#b0ffb0'; this.optColorMinus = '#ffaf9f'; this.optColorNeutral = '#eaeaea'; this.blinkNeutral = 1; this.arhpush_targets = []; this.subs = []; this.arhpush_blink = []; this.arhpush_last = 0; this.arhpush_status = 0; this.arhpush_stopclick = 0; this.mexx = 23; this.allfields = []; this.restartPushConnection = restartPushConnection; this.arhpush_init = arhpush_init; this.arhpush_update = arhpush_update; this.getObject = getObject; this.arhpush_unblink = arhpush_unblink; this.time = time; this.checkConnection = checkConnection; this.arhpush_draw = arhpush_draw; this.arhpush_update_status = arhpush_update_status; this.subscribe = subscribe; this.setURL = setURL; this.change_rel_max = change_rel_max; this.lastQuoteTime = 0; this.params = ""; this.changeTitle = 1; this.haupthandelsplatz = ''; this.wertpapierName = ''; this.wertpapierName = document.title; this.hhpCurrency = ''; this.simplePush = 0; // Beim Android Default-Browser kommt den normalen Push nicht hin: (pb 2012-04-25) if (navigator.userAgent.match(/Android.*?Mobile Safari (1|2)/)) { this.simplePush = 1; } var g = getObject('arpush_status'); if ( g ) { g.firstChild.nodeValue = this.optStatusTextInactive; g.style.color = "red"; } var g = getObject('pushbutton'); if ( g && g.tagName !== 'DIV' ) { g.style.display = "inline"; } /* inner function */ function subscribe(symbol,cb) { this.subs[symbol] = cb; } /* inner function */ function arhpush_init(el) { var id2node = []; var l = new Array; var r = ''; var t = []; var allf = []; var bgcol = this.optColorActive; var regu = new RegExp('^\\d+@\\d+(\\.\\d+)?$'); var already_id = new Array(); /* inner function level 2 */ var rec = function (mel) { if (mel) { for (var i = mel.firstChild; i != null; i = i.nextSibling) { if (i.nodeType == 1 && i.id != "PushMeClient" && i.nodeName != "svg" ) { /* -Tag kennt die Funktion className nicht, wird daher ausgenommen */ var id = 0; var field = 0; var opt = { 't' : i}; var classParts = i.className.split(" "); for ( var pidx in classParts ) { if ( pidx >= 0 ) { var p = classParts[pidx]; if ( p == "arp_hide" ) { i.firstChild.nodeValue = ' '; } else if ( p.substring(0,4) == 'arp_' ) { var cmdParts = p.split("_"); id = cmdParts[1]; field = cmdParts[2]; for ( pidx=3; pidx= 0) { opt['format'] = opt['format'] + num_nk; } } l[l.length]=id; if ( !already_id[id] ) { r = r+id+','; } if ( !t[id+"_"+field] ) { t[id+"_"+field] = new Array(); } t[id+"_"+field].push(opt) ; allf.push(opt); already_id[id] = 1; } rec(i); } } } } rec(el); for ( id in this.subs ) { if ( !already_id[id] ) { r = r+id+','; } } this.arhpush_status = 1; this.arhpush_targets= t ; this.allfields = allf; this.arhpush_stopclick= 0 ; this.params = r.substring(0,r.length-1); this.setURL(); var tempIFrame=document.createElement('iframe'); tempIFrame.setAttribute('id','ArivaPushIFrame'); tempIFrame.style.border='0px'; tempIFrame.style.height='0px'; // Die Weite nicht auf 0px setzen, sonst erscheint im Google Chrome ein helles Rechteck; getestet in allen Browsern if (el) { this.iframe = el.appendChild(tempIFrame); } var me = this; this.checkConnection(); this.restartPushConnection(); window.setInterval(function(){ me.arhpush_unblink() },50); window.setInterval(function(){ me.checkConnection() },me.optTimeout); window.arhpush_update = function(a,b,c) { me.arhpush_update(a,b,c); }; }; /* inner function */ function restartPushConnection() { if (this.arhpush_stopclick == 0) { if (this.iframe) { this.iframe.src=this.url; } this.arhpush_status = 1; } } /* inner function */ function arhpush_update(resp) { var x = resp.split(':'); if (x.length < 2) { // Falls Zeile='done' oder Heartbeat oder irgendwie sonst keine gueltige Antwort return; } // console.log(x); // Zeile vom Quoteserver var id = x[0]; var id1= id.split('@'); var id2= id1[1].split('.'); var ag= id1[0]; var boerse_id= id2[0]; var qs= id2[1]; var data_arr = x[1].split(' '); var data = []; for ( var d in data_arr ) { if ( d >= 0 ) { var second = data_arr[d].charAt(1); var third = data_arr[d].charAt(2); var splitAt = 3; if ( (third > -1 && third < 10 ) || third =="-" ) { splitAt = 2; } if ( (second > -1 && second < 10) || second =="-" ) { splitAt = 1; } var key = data_arr[d].substring(0,splitAt); var value = data_arr[d].substring(splitAt); if ( key.length > 0 && value>-1) { data[key] = value; } } } if (data["p"] > 0 || data["a"] > 0 || data["b"] > 0) { if ( this.subs[id] || this.subs[""+ag+"@"+boerse_id] ) { var s = this.subs[id] || this.subs[""+ag+"@"+boerse_id]; s(data,id,ag,boerse_id); } this.arhpush_draw(ag,boerse_id,qs,data); } // getObject("response").innerHTML = resp; }; /* inner function */ function arhpush_unblink() { var t = this.time(); while ( this.arhpush_blink.length && t-this.arhpush_blink[0] > this.optBlinkTime ) { var told = this.arhpush_blink.shift(); var target = this.arhpush_blink.shift(); var blinked = this.arhpush_blink.shift(); if ( target['blinked'] == blinked ) { var f = target['t']; f.style.backgroundColor = target.bg; } } }; /* inner function */ function time() { return new Date().getTime(); }; /* inner function */ function setURL() { this.url = "http://" + (this.optServerPrefix ? this.optServerPrefix + "." : "") + document.domain + (this.optServerPort > 80 ? ":" + this.optServerPort : "") + "/push?secu=" + this.params + "&login=" + this.optServerLogin + "&domain=" + document.domain; if (this.simplePush) { this.url = "http://www.ariva.de/quote/pushsim?secus="+this.params+"&domain=ariva.de"; } }; /* inner function */ function checkConnection() { var g = this.getObject('arpush_status'); if ( g ) { var d = time()-this.arhpush_last; if ( d > this.optTimeout ) { if (this.arhpush_last > 0 && this.okPort == 0) { if (this.optServerPort != this.altServerPort) { this.optServerPort = this.altServerPort; this.optServerPrefix = this.altServerPrefix; } else { this.okPort = 1; this.optServerPort = 1; this.simplePush = 1; } this.setURL(); } this.arhpush_last = time(); this.arhpush_status = 0; this.restartPushConnection(); } if (this.arhpush_status == 2) { this.okPort = 1; if (this.simplePush == 0) { this.optTimeout = 3 * this.optTimeout; } } g.firstChild.nodeValue = ""+ (this.arhpush_status == 0 ? this.optStatusTextInactive : this.arhpush_status == 2 ? this.optStatusTextActive+(this.simplePush == 1 ? " (3)" : this.optServerPort==this.altServerPort ? " (2)" : "") : this.arhpush_status == 1 ? this.optStatusTextConnect : this.optStatusTextUnknown); g.style.color = ""+ (this.arhpush_status == 2 ? 'green' : 'red'); set_sliders(this.arhpush_status); // Wegen PDA if (this.arhpush_status == 2) { setTimeout('hidestatus()',3000); } } }; /* inner function */ function arhpush_update_status(v) { this.arhpush_status = 2; }; /* inner function */ function arhpush_draw(ag,bid,qid,data) { if (this.arhpush_stopclick == 0) { this.arhpush_last = time(); if ( this.arhpush_status != 2 ) { this.arhpush_status = 2; this.checkConnection(); } set_sliders(this.arhpush_status); var pushtimers = document.getElementsByClassName('push_time'); var timer = new Date; if ( pushtimers.length ) { var time_string = ('0' + timer.getHours()).slice(-2) + ':' + ('0' + timer.getMinutes()).slice(-2) + ':' + ('0' + timer.getSeconds()).slice(-2); for (var i = 0;i 120000) f.src = imgSourceString[0] + '&rt=' + timestamp_new; } else { var formattedValue = value; /* Uhrzeit mit ohne bzw. mit Sekunden*/ if ( target.format == 'time' || target.format == 'timesec' || target.format == 'smartdatexs') { var tdate = value.substr(0,8); if (tdate == currDate) { formattedValue = value.substr(8,2)+":"+value.substr(10,2); if (target.format == 'timesec') { formattedValue = formattedValue+":"+value.substr(12,2); } } else { //Datum if (target.format == 'smartdatexs') { formattedValue = value.substr(6,2)+"."+value.substr(4,2)+"."; //Datum ohne Jahr } else { //window.alert(tdate+" und curr: "+currDate); formattedValue = value.substr(6,2)+"."+value.substr(4,2)+"."+value.substr(2,2); } } this.lastQuoteTime = value; } else if ( target.format == 'timelong' ) { /* (deutsches ?) datetime mit 2 Jahresziffern */ formattedValue = value.substr(6,2)+"."+value.substr(4,2)+"."+value.substr(2,2)+" "+value.substr(8,2)+":"+value.substr(10,2); this.lastQuoteTime = value; } else if ( target.format == 'int' ) { var zahl = Math.round(value); zahl = zahl.toString(); if (zahl.length > 3) { zahl = zahl.substr(0,zahl.length-3) + "." + zahl.substr(zahl.length-3); } if (zahl.length > 7) { zahl = zahl.substr(0,zahl.length-7) + "." + zahl.substr(zahl.length-7); } formattedValue = zahl; } else if ( target.format == 'bignum' ) { if (value=='') { formattedValue = '-'; } else if (value=='sold'){ formattedValue = 'sold'; } else if (value>= 10*1000*1000*1000*1000){ formattedValue = formatNum(Math.round(value/100000000000.0)/10.0, 1) + ' Bil'; } else if (value>= 1000*1000*1000*1000){ formattedValue = formatNum(Math.round(value/10000000000.0)/100.0, 2) + ' Bil'; } else if (value>= 100*1000*1000*1000){ formattedValue = formatNum(Math.round(value/1000000000.0), 0) + ' Mrd'; } else if (value>= 10*1000*1000*1000){ formattedValue = formatNum(Math.round(value/100000000.0)/10.0, 1) + ' Mrd'; } else if (value>= 1000*1000*1000){ formattedValue = formatNum(Math.round(value/10000000.0)/100.0, 2) + ' Mrd'; } else if (value>= 100*1000*1000){ formattedValue = formatNum(Math.round(value/1000000.0), 0) + ' M'; } else if (value>= 10*1000*1000){ formattedValue = formatNum(Math.round(value/100000.0)/10.0, 1) + ' M'; } else if (value>= 500*1000){ formattedValue = formatNum(Math.round(value/10000.0)/100.0, 2) + ' M'; } else if (value>= 50*1000){ formattedValue = formatNum(Math.round(value/1000.0), 0) + ' T'; } else { formattedValue = formatNum(value, 0); } } else if ( target.format == 'price' ) { /* HashValue->price */ if (value < 0.01) { formattedValue = this.formatNum(value,4); } else if (value < 0.1) { formattedValue = this.formatNum(value,3); } else if (value > 999) { formattedValue = this.formatNum(value,0); } else if (value < 6 && value.length>5) { formattedValue = this.formatNum(value,4); } else if (value < 6 && value.length>4) { formattedValue = this.formatNum(value,3); } else { formattedValue = this.formatNum(value,2); } } else if ( target.format.substr(0,4) == 'auto' ) { if ( document.getElementById("pushHighchart") ) { // Alle Nachkommastellen zurueckgeben, ggf. die letzten Nullen und das Komma entfernen formattedValue = this.formatNum(value,5); formattedValue = formattedValue.replace(/(0+)$/g, ''); formattedValue = formattedValue.replace(/,$/g, ''); } else { /* Feld hat das Format, das bei Initialisierung im Feld stand */ formattedValue = this.formatNum(value,target.format.substr(4)); } } else if ( target.format == 'price2' ) { /* HashValue->price2 */ formattedValue = this.formatNum(value,2); } else if ( target.format == 'priceh' ) { /* HashValue->priceh */ formattedValue = this.formatNum(value,4); } else if ( target.format == 'multipleprice' ) { var fvalue = value*target.factor; formattedValue = this.formatNum(fvalue,2) } else if ( target.format == 'multiplechangeabs' ) { var fvalue = value*target.factor-target.base; formattedValue = (fvalue<0?"":"+")+this.formatNum(fvalue,2) } else if ( target.format == 'multiplechangerel' ) { var fvalue = (value*target.factor)/target.base*100-100; formattedValue = (fvalue<0?"":"+")+this.formatNum(fvalue,2)+"%"; } else if ( target.format == 'changeabs' ) { var fvalue = value-target.base; formattedValue = target.base > 0 ? ((fvalue<0?"":"+")+this.formatNum(fvalue,2)) : "-"; } else if ( target.format == 'changerel' ) { var fvalue = value/target.base*100-100; formattedValue = target.base > 0 ? ((fvalue<0?"":"+")+this.formatNum(fvalue,2)+"%") : "-"; } if ( nozero && value == 0 ) { formattedValue = '-'; } //Spread berechnen und einsetzen if (field == 'a' && data['b'] != null) { var spreadElement = document.getElementById("arp_"+id+"_spread"); if (spreadElement) { var spread = ( data['b'] > 0 && value > 0 ? 100 * (value / data['b'] - 1) : '-' ); spread = formatNum(spread,2)+'%'; spreadElement.firstChild.nodeValue = spread; } } var change_rel_ref = ''; /* von last-Wert-Aenderung abhaengige Werte aktualisieren */ if (field == 'p' && target.lastValue && value != target.lastValue) { change_rel_ref = 'c'; } if (field == 'a' && target.lastValue && value != target.lastValue && document.getElementById("arp_"+id+"_ca") != null) { change_rel_ref = 'ca'; } if (field == 'b' && target.lastValue && value != target.lastValue && document.getElementById("arp_"+id+"_cb") != null) { change_rel_ref = 'cb'; } var g_pformattedValue = ''; if (change_rel_ref) { /* Aenderung zum Vortag aktualisieren */ if (document.getElementById("arp_"+id+"_"+change_rel_ref) != null && document.getElementById("arp_"+id+"_percent") != null) { var close_val = document.getElementById("arp_"+id+"_"+change_rel_ref).firstChild.nodeValue; close_val = close_val.replace(".", ""); close_val = parseFloat(close_val.replace(",", ".")); if ( close_val > 0 ) { var pvalue = (value - close_val) / close_val * 100; if (pvalue > -1000 && pvalue < 1000) { var pformattedValue = this.formatNum(Math.abs(pvalue),2)+"%"; pformattedValue = (pvalue >= 0 ? "+" : "-")+pformattedValue; var percentElement = document.getElementById("arp_"+id+"_percent"); percentElement.firstChild.nodeValue = pformattedValue; if (document.getElementById("arp_"+id+"_absolute") != null) { var avalue = value - close_val; var aFormattedValue = this.formatNum(Math.abs(avalue), 2); aFormattedValue = (avalue >= 0 ? "+" : "-") + aFormattedValue; var absoluteElement = document.getElementById("arp_"+id+"_absolute"); absoluteElement.firstChild.nodeValue = aFormattedValue; } /* Farbgebung durch Klassennamen*/ if (percentElement.className == 'colwin' || percentElement.className == 'colloss') { percentElement.className = (pvalue < 0 ? 'colloss' : 'colwin'); } /* Balken aktualisieren */ var balken = document.getElementById("arp_"+id+"_balken"); if (this.change_rel_max > 0 && balken != null) { var width_percent = Math.abs(pvalue) / this.change_rel_max * 100; if (width_percent < 0) { width_percent = 0; } if (width_percent > 100) { width_percent = 100; } if ( balken.nodeName == 'PROGRESS' ) { balken.setAttribute('value', width_percent); balken.className = (pvalue < 0 ? 'progressLoss' : 'progressWin'); if ( balken.firstChild.nodeName == 'DIV' ) { balken.firstChild.style.width = width_percent+"%"; balken.firstChild.className = (pvalue < 0 ? 'colbckloss' : 'colbckwin'); } } else { balken.style.width = width_percent+"%"; balken.className = (pvalue < 0 ? 'colbckloss' : 'colbckwin'); } } g_pformattedValue = pformattedValue; } } } } f.firstChild.nodeValue = formattedValue; // Fuer z.B. chart/push.m die dortige Funktion aufrufen, damit der Chart aktualisiert werden kann if ( document.getElementById("pushHighchart") ) { // console.log('arhpush_draw: ' + 'field = ' + field + ' , time = ' + data["t"] + ', TIME = ' + data["T"]); var qTime, unixTime; if ( field == 'a' || field == 'b') { qTime = data['T']; } else { qTime = data['t']; } if ( qTime ) { qTime = qTime.substr(4,2) + '/' + qTime.substr(6,2) + '/' + qTime.substr(0,4) + ' ' + qTime.substr(8,2) + ':' + qTime.substr(10,2) + ':' + qTime.substr(12,2); unixTime = Date.parse(qTime); } else { // keine Zeitangabe, da sich die Zeit seit dem letzten Tick nicht geaendert hat, d.h. innerhalb derselben Sekunde liegt unixTime = 0; } pushHighchart(field, value, unixTime); } if ( blink && target.lastValue != null && target.lastFormattedValue != null) { var bgColor = ""; if (formattedValue != target.lastFormattedValue && value > target.lastValue) { bgColor = this.optColorPlus; } else if (formattedValue != target.lastFormattedValue && value < target.lastValue) { bgColor = this.optColorMinus; } else if (this.blinkNeutral && target.lastBlinkTime < this.time() - this.optMinBlinkTime) { bgColor = this.optColorNeutral; } if (bgColor) { f.style.backgroundColor = bgColor; target.blinked++; this.arhpush_blink.push(this.time()); this.arhpush_blink.push(target); this.arhpush_blink.push(target.blinked); target.lastBlinkTime = this.time(); if(this.changeTitle == 1 && this.haupthandelsplatz == bid && field == 'p') { if(!g_pformattedValue === '') { document.getElementsByTagName('title')[0].innerHTML = formattedValue + this.hhpCurrency + ' (' + pformattedValue + ') - ' + this.wertpapierName; } else { document.getElementsByTagName('title')[0].innerHTML = formattedValue + this.hhpCurrency + ' - ' + this.wertpapierName; } } } } }//endif ( f!=null ) }//endif ( targets ) target.lastValue = value; target.lastFormattedValue = formattedValue; }//endfor ( fidx in targets ) }//endfor ( field in data ) }//endif } // arhpush_draw this.formatNum = formatNum; /* inner function */ function formatNum(value, stellen) { stellen = stellen >= 0 ? stellen : 2; if (stellen == 0) { var zahl = Math.round(value); if (isNaN(zahl)) return "-"; zahl = zahl.toString(); if (zahl.length > 3) { zahl = zahl.substr(0,zahl.length-3) + "." + zahl.substr(zahl.length-3); } if (zahl.length > 7) { zahl = zahl.substr(0,zahl.length-7) + "." + zahl.substr(zahl.length-7); } return zahl; } else { value = Math.abs(value); var i = Math.floor(value); if (isNaN(value) || isNaN(i)) return "-"; var gz = i; gz = gz.toString(); if (gz.length > 3) { gz = gz.substr(0,gz.length-3) + "." + gz.substr(gz.length-3); } if (gz.length > 7) { gz = gz.substr(0,gz.length-7) + "." + gz.substr(gz.length-7); } var fr = ""+(value-i+0.000002); fr = fr.substr(2,stellen); return "" + gz + (stellen ? ","+fr : ""); } } };//endof function ArivaPush(change_rel_max) function push_button(timeout, show_status) { if (ap.arhpush_status == 0) { push_start(timeout); if (show_status) { showstatus(); } }else{ push_stop(); } } function set_sliders(pushStatus) { var pushSlider = document.getElementsByClassName("pushSlider"); if ( pushSlider ) { for (var i = 0; i < pushSlider.length; i++ ) { var slider = pushSlider[i].firstElementChild; slider.className = slider.className.replace(/ disconnected/, ''); slider.className = slider.className.replace(/ connected/, ''); if ( pushStatus == 0 ) { slider.checked = false; } else if ( pushStatus == 1 ) { slider.checked = true; slider.className += " disconnected"; } else if ( pushStatus == 2 ) { slider.checked = true; slider.className += " connected"; } } } } function push_start(timeout) { if (ap.arhpush_status == 0) { ap.arhpush_init(document.body); var pushButton = document.getElementById("pushbutton"); var pushLink = document.getElementById("pushlink"); if (pushButton) { pushButton.value = "Push stoppen"; } else if (pushLink) { pushLink.firstChild.nodeValue = "Push stoppen"; } set_sliders(1); timeout = timeout ? timeout : 12*3600; setTimeout ('push_stop()', timeout*1000); } } function push_stop() { if (ap.arhpush_status != 0) { ap.iframe.parentNode.removeChild(ap.iframe); ap.arhpush_status = 0; ap.arhpush_stopclick = 1; var pushButton = document.getElementById("pushbutton"); var pushLink = document.getElementById("pushlink"); if (pushButton) { pushButton.value = "Push starten"; } else if (pushLink) { pushLink.firstChild.nodeValue = "Push starten"; } set_sliders(0); var g = ap.getObject('arpush_status'); if ( g ) { g.firstChild.nodeValue = ap.optStatusTextInactive; g.style.color = 'red'; } } } function today() { var date=new Date(); var yyyy=date.getYear(); if (yyyy<200) {yyyy=yyyy+1900}; var yyyy=new String(yyyy); var dd = new String(date.getDate()); if (dd.length<2) {dd = "0"+dd+""}; var mm = new String(date.getMonth() + 1); if (mm.length<2) {mm = "0"+mm+""}; var HH = new String(date.getHours()); if (HH.length<2) {HH = "0"+HH+""}; var MM = new String(date.getMinutes()); if (MM.length<2) {MM = "0"+MM+""}; var SS = new String(date.getSeconds()); if (SS.length<2) {SS = "0"+SS+""}; return yyyy+mm+dd; } function getObject(name) { if( document.getElementById) return document.getElementById(name); else if(document.all) return document.all[name]; else if(document.layers) return document.layers[name]; } function showstatus () { var res = document.getElementById("pushi"); if (res) { res.style.display = "block"; res.style.left = (document.getElementById("pushbutton").offsetLeft)+"px"; res.style.top = (document.getElementById("pushbutton").offsetTop+31)+"px"; } window.status = "Fertig"; }; function hidestatus () { var res = document.getElementById("pushi"); if (res) { res.style.display = "none"; } window.status = "Fertig"; }; function parse_field (value) { // suche komma value = value.toString(); var regzahl = new RegExp('^\\-?[\\d\\.]+(\\,\\d+)?$'); if (value.match(regzahl)) { var pos = value.lastIndexOf(","); var anz_nk = (pos > 0 ? (value.length - pos - 1) : 0); return anz_nk; } else { return -1; } };