function getTickerFrm()
{
    var frm = eval("document.tickerfrm");
    if(frm == null)
    {
        frm = window.frames["tickerfrm"];
    }

    return frm;
}

function getCmdFrm()
{
    var frm = eval("document.cmd");
    if(frm == null)
    {
        frm = window.frames["cmd"];
    }

    return frm;
}

//
// Replaces the ticker command iframe with new URL
//
function doTickerCommand(cmd, p1)
{
    var url = "http://finserv.bnn.ca/fcbnclient7/docmd.htm?cmd=" + cmd + "&p1=" + p1;
    getCmdFrm().location.replace(url);
}


var slider;
var pos;
var token;
function sliderInit() 
{
    pos = 25;
    slider = YAHOO.widget.Slider.getHorizSlider("slider", "sliderthumb", 35, 35);
    slider.animate = false; 
    slider.subscribe("change", changeSpeed); 
}

function changeSpeed(offsetFromStart)
{
    var frm = getTickerFrm();
    if(frm == null)
    {
        return;
    }

    // scale it
    speed = 50 - (offsetFromStart + 35) / 1.4;
    if(speed < 1)
    {
        speed = 1;
    }
    else if(speed > 50)
    {
        speed = 50;
    }
    
    if(g_ie)
    {
        try
        {
            frm.setRawTickerSpeed(speed);
        }
        catch(err)
        {
        }
    }
    else
    {
        doTickerCommand("setRawTickerSpeed", speed);
    }
}


//
// Returns the value of a parameter embedded in a cookie
//
function getCookieValue(cookie, paramname)
{
    var fields = cookie.split(";");
    if (fields.length > 0)
    {
        for (var i = 0; i < fields.length; i++)
        {
            var pair = fields[i].split("=");
            if (pair.length == 2)
            {
                if (pair[0].indexOf(paramname) >= 0)
                {
                    return pair[1];
                }
            }
        }
    }

    return "";
}

function getTickerSymbolsCallback(syms)
{
    document.F1.custlist.value = syms;
}


//
// Returns symbols used by the floating ticker
//
function getTickerSymbols()
{
    if(g_ie)
    {
        document.F1.custlist.value = getTickerFrm().getTickerSymbols();
    }
    else
    {
        doTickerCommand("getTickerSymbols", "getTickerSymbolsCallback");
    }
}


//
// Sets the symbols used by the floating ticker
//
function setTickerSymbols(syms)
{
    if(g_ie)
    {
        getTickerFrm().setTickerSymbols(syms, true);
    }
    else
    {
        doTickerCommand("setTickerSymbols", escape(syms));
    }
}


function setDomain()
{
    var dmn = window.document.domain;    
    var newdmn = "";
    var dmnarray;
    
    dmnarray = dmn.split(".");
    if (dmnarray.length > 1)
    {
        newdmn += dmnarray[dmnarray.length - 2];
        newdmn += "."
    }
    newdmn += dmnarray[dmnarray.length -1];
    window.document.domain = newdmn;            
}

function initConfig()
{
    toggleTicker("ticker");
}

function saveConfig()
{
    setTickerSymbols(document.F1.custlist.value.toUpperCase().replace(/,/g, " "));
    toggleTicker();
    return false;
}

function toggleTicker(toggle)
{
    if(typeof(token) == "undefined")
    {
        setDomain();
        token = getToken('http:\/\/db.bnn.ca\/invest\/investSQL\/investor.gx_pkg_privileges.get_token?pi_identification=ROBTV');
        setCookie('robtv_uid', token, getRootDomain());
        getTickerFrm().location.replace("http://finserv.bnn.ca/fcbnclient7/ticker32.htm");
    }

    var ticker = document.getElementById("affTicker");
    var customise = document.getElementById("customise");
    if(toggle != "ticker" && (customise.style.display == "" || customise.style.display == "none"))
    {
        getTickerSymbols();
        ticker.style.position = "absolute";
        ticker.style.top = "-1000px";
        customise.style.display = "inline";
    }
    else
    {
        customise.style.display = "none";
        ticker.style.position = "relative";
        ticker.style.top = "0px";

        // Init slider if not already started.
        if(!slider)
        {
            sliderInit();
        }

        // Ticker forgets speed on symbol change.
        changeSpeed(slider.getValue());
    }
}

//
// Token stuff
//

function getToken(url) 
{
    var req = false;
    // For Safari, Firefox, and other non-MS browsers
    if(window.XMLHttpRequest) 
    {
        try 
        {
            req = new XMLHttpRequest();
        } 
        catch(e) 
        {
            req = false;
        }
    } 
    else if(window.ActiveXObject) 
    {
        // For Internet Explorer on Windows
        try 
        {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch(e) 
        {
            try 
            {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch(e) 
            {
                req = false;
            }
        }
    }

    if(req)
    {
        // Synchronous request, wait till we have it all
        req.open('GET', url, false);
        req.send(null);
        return req.responseText.replace(/\s/, "");
    } 
    else 
    {
        alert("Sorry, your browser does not support " +
            "XMLHTTPRequest objects. This page requires " + 
            "Internet Explorer 5 or better for Windows, " +
            "or Firefox for any system, or Safari. Other " +
            "compatible browsers may also exist.");
    }
}

function setCookie(name, value, domain, days) 
{
	var expires = "";

	if(days)
	{
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		expires = "; expires=" + date.toGMTString();
	}

	document.cookie = name + "=" + value + expires + ";path=/; domain=." + domain; 
}

function getRootDomain()
{
	var dmn = window.document.domain;	
	var newdmn = "";
	var dmnarray;
	
	dmnarray = dmn.split(".");
	if(dmnarray.length > 1)
	{
		newdmn += dmnarray[dmnarray.length - 2];
		newdmn += "."
	}
	newdmn += dmnarray[dmnarray.length -1];
	return newdmn;			
}

