// ***************** 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 = "
"; //| START | "
while ( this.div1.clientWidth < this.divTicker.clientWidth ){
for (var i=0;i" + this.tickerItems[i].innerHTML + "";
}
this.div1.innerHTML = innerHTML + "
"
}
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;
}