// ***************** Begränsningar ******************* // Hanterar bara en ticker åt gången // Hanterar inte resize av ytan som tickern visas på i runtime. // Buggar när man lägger in texter som skiljer i längd sedan tidigare. TickerItem = Class.create(); TickerItem.prototype = { initialize: function(id, innerHTML) { this.id = id; this.innerHTML = innerHTML; } } var internalTicker_Ticker Ticker_Ticker = Class.create(); Ticker_Ticker.prototype = { initialize: function(dT){ internalTicker_Ticker = this; this.tickerInterval = 25; this.deltaMovement = 1; this.requestDataInterval = 30*1000; this.divTicker = dT; this.intervalHandleRender = -1; this.intervalHandleUpdateData = -1; this.started = false; this.divTicker.onmouseover = onMouseover; this.divTicker.onmouseout = onMouseout; this.div1 = document.createElement("div"); this.div1.id = "w1"; with (this.div1.style){ position = "absolute"; left = "0px"; top = "0px"; visibility = "visible"; } this.divTicker.appendChild(this.div1); this.div2 = document.createElement("div"); this.div2.id = "w2"; with (this.div2.style){ position = "absolute"; left = String(this.divTicker.clientWidth) + "px"; top = "0px"; visibility = "hidden"; } this.divTicker.appendChild(this.div2); }, start: function(){ if ( this.started ) return; this.started = true; this.intervalHandleRender = window.setInterval(renderTicker, this.tickerInterval); this.intervalHandleRequestData = window.setInterval(requestData, this.requestDataInterval); }, stop: function (){ if ( this.started == false ) return; clearInterval(this.intervalHandleRender); this.started = false; }, getContentHTML: function (){ if ( this.tickerItems.length == 0 ) return; this.div1.innerHTML = ""; var innerHTML = ""; //" while ( this.div1.clientWidth < this.divTicker.clientWidth ){ for (var i=0;i"; } this.div1.innerHTML = innerHTML + "
START
" } this.div2.innerHTML = this.div1.innerHTML; }, renderTicker: function (){ if ( (parseInt(this.div1.style.left) + this.div1.clientWidth) <= 0 ){ this.div1.style.left = String(parseInt(this.divTicker.clientWidth)) + "px"; this.div1.style.visibility = 'hidden'; } if ( (parseInt(this.div2.style.left) + this.div2.clientWidth) <= 0 ){ this.div2.style.left = String(parseInt(this.divTicker.clientWidth)) + "px"; this.div2.style.visibility = 'hidden'; } // Move if ( this.div1.style.visibility == 'visible' ){ this.div1.style.left = String(parseInt(this.div1.style.left) - this.deltaMovement) + "px"; } if ( this.div2.style.visibility == 'visible'){ this.div2.style.left = String(parseInt(this.div2.style.left) - this.deltaMovement) + "px"; } if (((parseInt(this.div1.style.left) + this.div1.clientWidth) < this.divTicker.clientWidth ) && (this.div1.style.visibility == 'visible')){ if ( this.div2.style.visibility == 'hidden'){ this.div2.style.left = String((parseInt(this.div1.style.left) + this.div1.clientWidth)) + "px"; this.div2.style.visibility = 'visible'; } } if (((parseInt(this.div2.style.left) + this.div2.clientWidth) < this.divTicker.clientWidth ) && (this.div2.style.visibility == 'visible')){ if ( this.div1.style.visibility == 'hidden'){ this.div1.style.left = String((parseInt(this.div2.style.left) + this.div2.clientWidth)) + "px"; this.div1.style.visibility = 'visible'; } } if ((((parseInt(this.div1.style.left) + this.div1.clientWidth) >= this.divTicker.clientWidth ) && (this.div1.style.visibility == 'visible')) && (((parseInt(this.div2.style.left) + this.div2.clientWidth) >= this.divTicker.clientWidth ) && (this.div2.style.visibility == 'visible'))){ if (parseInt(this.div1.style.left)>parseInt(this.div2.style.left)){ this.div1.style.visibility = 'hidden'; }else{ this.div2.style.visibility = 'hidden'; } } }, updateTickerItems: function (tickerItems){ this.tickerItems = tickerItems; this.getContentHTML(); this.renderTicker(); this.start(); }, requestData: function (){ new Ajax.Request('js/TickerHandler.aspx?language=SE&site=A&tick=' + new Date().getTime(), { method:'get', onSuccess: this.onDataReceived.bind(this), onFailure: this.showError.bind(this) }); }, onDataReceived : function(transport){ try{ var tickerItems = new Array(); this.transport = transport; var xml = transport.responseXML; var nodes = xml.getElementsByTagName('TickerItem'); for (var i = 0; i < nodes.length ; i++ ) { var node = nodes[i]; if (node.getAttribute('Type') == "Text1" ) { var text = node.getAttribute('Text'); tickerItems[tickerItems.length] = new TickerItem("Text1", getHTMLWrapping(text, "MostTraded")); } else if (node.getAttribute('Type') == "MarketStatus" ) { var text = node.getAttribute('Text'); var open = node.getAttribute('Value')!="0"; marketStatusClass = "MarketStatusClosed"; if ( open ) { marketStatusClass = "MarketStatusOpened"; } tickerItems[tickerItems.length] = new TickerItem("MarketStatus", getHTMLWrapping(text, marketStatusClass)); } else if (node.getAttribute('Type') == "Alert") { var innerHTML = "
 " + node.getAttribute('Text') + "  
"; tickerItems[tickerItems.length] = new TickerItem("Alert", getHTMLWrapping(innerHTML, "tickerAlertText")); tickerItems[tickerItems.length] = new TickerItem("Alert", getHTMLWrapping("    ", "tickerAlertText")); } else if (node.getAttribute('Type') == "Index" ) { var text = node.getAttribute('Text'); var value = node.getAttribute('Value'); var diff = node.getAttribute('Diff'); var innerHTML = "" innerHTML = innerHTML + getTDWrapping(text, "IndexText") if (Number(diff) > 0) { innerHTML = innerHTML + getTDWrapping(value, "TickerDiffPos") innerHTML = innerHTML + getTDWrapping(diff + "%", "TickerDiffPos") innerHTML = innerHTML + getTDWrapping("", "TickerDiffPos") } else if (Number(diff) < 0) { innerHTML = innerHTML + getTDWrapping(value, "TickerDiffNeg") innerHTML = innerHTML + getTDWrapping(diff + "%", "TickerDiffNeg") innerHTML = innerHTML + getTDWrapping("", "TickerDiffNeg") } else { innerHTML = innerHTML + getTDWrapping(value, "TickerDiffUnch") innerHTML = innerHTML + getTDWrapping(diff + "%", "TickerDiffUnch") innerHTML = innerHTML + getTDWrapping("", "TickerDiffUnch") } innerHTML = innerHTML + getTDWrapping("", "") + "
" tickerItems[tickerItems.length] = new TickerItem("Index_" + text, innerHTML); } else if (node.getAttribute('Type') == "Stock" ) { var text = "" + node.getAttribute('Text') + ""; var value = node.getAttribute('Value'); var diff = node.getAttribute('Diff'); var innerHTML = "" + getTDWrapping(text, "StockText") if (Number(diff) > 0) { innerHTML = innerHTML + getTDWrapping(value, "TickerDiffPos") innerHTML = innerHTML + getTDWrapping(diff + "%", "TickerDiffPos") innerHTML = innerHTML + getTDWrapping("", "TickerDiffPos") } else if (Number(diff) < 0) { innerHTML = innerHTML + getTDWrapping(value, "TickerDiffNeg") innerHTML = innerHTML + getTDWrapping(diff + "%", "TickerDiffNeg") innerHTML = innerHTML + getTDWrapping("", "TickerDiffNeg") } else { innerHTML = innerHTML + getTDWrapping(value, "TickerDiffUnch") innerHTML = innerHTML + getTDWrapping(diff + "%", "TickerDiffUnch") innerHTML = innerHTML + getTDWrapping("", "TickerDiffUnch") } innerHTML = innerHTML + getTDWrapping("", "") + "
" tickerItems[tickerItems.length] = new TickerItem("Stock_" + text, innerHTML); } } this.updateTickerItems(tickerItems); return null; }catch(e){ var msg = "ErrorT: "+e.description; alert(msg); }; }, showError : function(transport) { var element = Event.element(event); var id = element.id; alert('Error ' + id); } } function renderTicker(){ internalTicker_Ticker.renderTicker(); } function requestData(){ internalTicker_Ticker.requestData(); } function getHTMLWrapping(text, aClass){ return "" + getTDWrapping(text, aClass) + "
" } function getTDWrapping(text, aClass){ return "" + text + "" } function onMouseover(){ internalTicker_Ticker.deltaMovement = 0; } function onMouseout(){ internalTicker_Ticker.deltaMovement = 1; }