﻿var streamer = new vwdStreamer();
var streamerSubscription;
var counter = 0

$(document).ready(function() {
	setTimeout(streamerInitialize, 2000);
});


function streamerInitialize() {
    time = new Date();
    streamer.initialize("www.iex.nl", "streaming.www.iex.nl");
    streamerSubscription = streamer.getSubscription(fieldUpdate);
    
    streamer.connect();
    fieldsToSubscribe = new Array();
    for (i=0;i<issues.length;i++) {
        for (f=0;f<fields.length;f++) { fieldsToSubscribe[fieldsToSubscribe.length] = issues[i] + "." + fields[f]; }
    }
    streamerSubscription.subscribe(fieldsToSubscribe);
}

fieldUpdate = function(updatePacket) {

    var issueid = updatePacket.dataName.substring(0,updatePacket.dataName.indexOf("."));
    var datafield = updatePacket.dataName.substring(updatePacket.dataName.indexOf(".") + 1).toLowerCase();
    var value = updatePacket.value;
    var oldvalue = updatePacket.oldValue;
    var datatype = updatePacket.type;

    counter = counter + 1;
    
    if (counter == 1) {
        $('.RealtimeLabel').setHTML("Realtime");
    }
    
    switch(datafield)
    {
        case "lastprice":
            updateValue("LastPrice", issueid, oldvalue, value, 3);
            updateRange("DayRange", issueid, oldvalue, value);
            break;
        case "highprice":
            updateValue("HighPrice", issueid, oldvalue, value, 3);
            break;
        case "lowprice":
            updateValue("LowPrice", issueid, oldvalue, value, 3);
            break;
        case "cumulativevolume":
            updateVolume("CumulativeVolume", issueid, oldvalue, value);
            updateValue("Volume", issueid, oldvalue, value, 0);
            break;
        case "lasttime":
            updateDateTime("LastTime", issueid, oldvalue, value, 3);
            break;
        case "absolutedifference":
            updateDifference("AbsoluteDifference", issueid, oldvalue, value);
            break;
        case "relativedifference":
            updateDifference("RelativeDifference", issueid, oldvalue * 100, value * 100);
            updateDifference("DifferenceBlock", issueid, oldvalue, value);
        default:
            break;
    }
}

function updateValue(Element, IssueID, OldValue, NewValue, Decimals)
{
    var BaseElement = IssueID + '' + Element;
    var withBackgroundHighlight
    if (OldValue == null) {
        OldValue = basevalues[BaseElement]; 
        withBackgroundHighlight = false
    }
    else {
        withBackgroundHighlight = true
    }
    basevalues[BaseElement] = NewValue;
    var fieldToUpdate = $("#" + BaseElement + " span");
    if (OldValue - NewValue != 0) {
        if (fieldToUpdate.length) {
            var TextColor = ((OldValue - NewValue) > 0) ? '#e42424' : '#31da24';  
            var BackgroundColor = ((OldValue - NewValue) > 0) ? 'green' : 'red'; 
            $(fieldToUpdate).setHTML( $().FormatNumber(NewValue, Decimals));
            $(fieldToUpdate).highLightText(TextColor);
            
            if (BaseElement.indexOf("LastPrice") > 0) {
                var TableCell = $("#" + IssueID + "CurrentPriceCell");
                if (TableCell.length > 0) {
                    if (withBackgroundHighlight) {
                        TableCell.highLightBackground(BackgroundColor);
                    }
                }
            }
        }
    }
}

function updateRange(Element, IssueID, OldValue, NewValue)
{
    var newWidth = Math.round(70.0 * (basevalues[IssueID + 'LastPrice'] - basevalues[IssueID + 'LowPrice'])) / (basevalues[IssueID + 'HighPrice'] - basevalues[IssueID + 'LowPrice'])
    if (newWidth - 1 <= 1) 
        $("#" + IssueID + Element + ' .RangeBar:first').width(0);
    else
        $("#" + IssueID + Element + ' .RangeBar:first').width(newWidth - 1);
   
    $("#" + IssueID + Element + ' .RangeStart:first').css("background-position", newWidth - 4+ "px 0px")
}

function updateVolume(Element, IssueID, OldValue, NewValue)
{
    var BaseElement = IssueID + '' + Element;
    if (NewValue != null)
    {
        var VolumeDifference = (NewValue * 100.0 / basevalues[IssueID + 'AverageVolume']) - 100
        $("#" + BaseElement + " div.Value:first").setHTML($().FormatNumber(NewValue, 0));
        $("#" + BaseElement + " span.Difference:first").setHTML($().FormatNumber(VolumeDifference, 0) + "%");
        $("#" + BaseElement + " .VolumeBar").highLightBackground("blue")
    }
}

function updateDateTime(Element, IssueID, OldValue, NewValue)
{
    var fieldToUpdate = $("#" + IssueID + Element + " span:first")
    if (NewValue != null)
        $(fieldToUpdate).html(formatTime(NewValue));
}

function updateDifference(Element, IssueID, OldValue, NewValue)
{
    var BaseElement = IssueID + '' + Element;
    basevalues[BaseElement] = NewValue;
    
    try
    {
        if (BaseElement.indexOf("RelativeDifference") > 0) {
            if (NewValue > 0) {
                if (basevalues[BaseElement] > GreatestRelativeDifference) {
                    GreatestRelativeDifference = basevalues[BaseElement]; }
            }
            else if (NewValue < 0) {
                if (basevalues[BaseElement] * -1 > GreatestRelativeDifference) {
                    GreatestRelativeDifference = basevalues[BaseElement] * -1; }
            }
        }
    }catch (e) {}
    
    if (BaseElement.indexOf("DifferenceBlock") > 0) {
        if ($("#" + BaseElement).length) {
        
            if (NewValue >= 0)
            {
                $("#" + BaseElement + " .DifferenceBarContainerDown").hide();
                $("#" + BaseElement + " .DifferenceBarContainerUp").show();
                $("#" + BaseElement + " .ValueUp").eq(0).setHTML("+" + $().FormatNumber(basevalues[IssueID + 'AbsoluteDifference'], 2));
                $("#" + BaseElement + " .ValueUp").eq(1).setHTML("+" + $().FormatNumber(basevalues[IssueID + 'RelativeDifference'], 2) + "%");
                
                var barUpWidth;
                if ((basevalues[IssueID + 'RelativeDifference']) <= GreatestRelativeDifference) {
                    barUpWidth = Math.round(basevalues[IssueID + 'RelativeDifference'] * 100.0 / GreatestRelativeDifference * 0.4,0);
                } else { barUpWidth = 100 * 0.4; }
                if (NewValue == 0)
                    barUpWidth = 0;
                    
                $("#" + BaseElement + " .DifferenceBarUp").width(barUpWidth)
            }
            else
            {
                $("#" + BaseElement + " .DifferenceBarContainerDown").show();
                $("#" + BaseElement + " .DifferenceBarContainerUp").hide();
                $("#" + BaseElement + " .ValueDown").eq(0).setHTML($().FormatNumber(basevalues[IssueID + 'AbsoluteDifference'], 2));
                $("#" + BaseElement + " .ValueDown").eq(1).setHTML($().FormatNumber(basevalues[IssueID + 'RelativeDifference'], 2) + "%");
                
                if ((basevalues[IssueID + 'RelativeDifference'] * -1.0) <= GreatestRelativeDifference) {
                    var barDownWidth = Math.round(basevalues[IssueID + 'RelativeDifference'] * -100.0 / GreatestRelativeDifference * 0.4,0);
                } else { var barDownWidth = 100 * 0.4; }
                $("#" + BaseElement + " .DifferenceBarDown").width(barDownWidth)
            }
        }
    }
    else
    {
        var fieldToUpdate = $("#" + BaseElement + " span:first")
        if (NewValue == 0) { 
            $(fieldToUpdate).removeClass('ValueUp ValueDown ValueNeutral').addClass('ValueNeutral'); }
        else if (NewValue > 0) {
            $(fieldToUpdate).removeClass('ValueUp ValueDown ValueNeutral').addClass('ValueUp'); }
        else {
            $(fieldToUpdate).removeClass('ValueUp ValueDown ValueNeutral').addClass('ValueDown'); }
       
        if (BaseElement.indexOf("RelativeDifference") > 0) {
        }
       
        if (NewValue != null)
            $(fieldToUpdate).setHTML((NewValue > 0 ? "+" : "") + $().FormatNumber(NewValue, 2) + (BaseElement.indexOf("RelativeDifference") > 0 ? "%" : ""));
    }
}

function formatTime(value)
{
    var Hours = value.getHours()
    Hours = (Hours < 10)? "0" + Hours : Hours;
    var Minutes = value.getMinutes()
    Minutes = (Minutes < 10)? "0" + Minutes : Minutes;
    var Seconds = value.getSeconds()
    Seconds = (Seconds < 10)? "0" + Seconds : Seconds;
    return Hours + ":" + Minutes + ":" + Seconds;
}

jQuery.fn.extend({ setHTML: function(value) { if(this.length) {this[0].innerHTML = value;} }});

jQuery.fn.extend({ highLightText: function(color) { if(this.length) {
    $(this).clearQueue();
    $(this).stop();
    $(this).css('color', color);
    $(this).animate({ color: "black" }, 2000);
} }});

jQuery.fn.extend({ highLightBackground: function(color) { if(this.length) {

    switch(color)
    {
        case "green":
            this.effect("highlight", {color:"#E30000"}, 850);
            break;
        case "red":
            this.effect("highlight", {color:"#05A051"}, 850);
            break;
        case "blue":
            this.effect("highlight", {color:"#0c78b9"}, 850);
            break;
    }
}}});
