function GetXmlHttpObject()
{
    var xmlHttp=null;
    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

function getSpotXML()
{
    var myDate = new Date();

    if (myDate > reload)
    {
        window.location.reload();
    }
    else
    {
        xmlHttp = GetXmlHttpObject();
        var url="/feeds/spot.xml";

        xmlHttp.onreadystatechange = setSpotDataXML;
        xmlHttp.open("GET",url,true);
        xmlHttp.send(null);
    }

    if (myDate > refresh)
    {
        var nextdate = refresh.getTime();
        nextdate += 3600*1000; // add 1 hour(milliseconds) 
        refresh.setTime(nextdate);
        
        refreshHourlyCharts();
    }
}

function refreshHourlyCharts()
{
    var hc = document.getElementById('hourlycharts');
    
    var charts = hc.getElementsByTagName('img');
    
    for (var i=0;i<charts.length;i++)
    {
        var tmp = new Date();
        charts[i].src = '/images/charts/' + charts[i].getAttribute('name') + '.gif?' + tmp.getTime();
    }
}

function setSpotDataXML()
{
    if (xmlHttp.readyState==4)
    { 
        var upDate = xmlHttp.responseXML.getElementsByTagName('date');
        
        document.getElementById('upDate').innerHTML = upDate[0].firstChild.nodeValue;

        var metals = xmlHttp.responseXML.getElementsByTagName('metal');
        for (var i=0;i<metals.length;i++)
        {
            var tr = document.getElementById(metals[i].getAttribute('symbol'));

            /*************************************************************
                grab the various fields
            *************************************************************/
            var bid     = tr.getElementsByTagName('td')[1];
            var ask     = tr.getElementsByTagName('td')[2];
            var low     = tr.getElementsByTagName('td')[3];
            var high    = tr.getElementsByTagName('td')[4];
            var close   = tr.getElementsByTagName('td')[5];
            var change  = tr.getElementsByTagName('td')[6];

            /*************************************************************
                update the bid prices
            *************************************************************/
            if ((+getNodeValue(metals[i],'bid')) < (+bid.innerHTML.substring(1)))
            {
                bid.className = 'move_dn';
            }

            if ((+getNodeValue(metals[i],'bid')) > (+bid.innerHTML.substring(1)))
            {
                bid.className = 'move_up';
            }

            bid.innerHTML = '$'+getNodeValue(metals[i],'bid');

            /*************************************************************
                update the ask prices
            *************************************************************/
            if ((+getNodeValue(metals[i],'ask')) < (+ask.innerHTML.substring(1)))
            {
                ask.className = 'move_dn';
            }

            if ((+getNodeValue(metals[i],'ask')) > (+ask.innerHTML.substring(1)))
            {
                ask.className = 'move_up';
            }

            ask.innerHTML = '$'+getNodeValue(metals[i],'ask');

            /*************************************************************
                update the price change
            *************************************************************/
            if (getNodeValue(metals[i],'bid') != close.innerHTML.substring(1))
            {
                var changeValue = (getNodeValue(metals[i],'bid') - close.innerHTML.substring(1)).toFixed(2)
                
                change.innerHTML = '$'+changeValue;
                
                if (changeValue == 0)
                {
                    change.className = '';
                }
                else if (changeValue > 0)
                {
                    change.className = 'move_up';
                }
                else
                {
                    change.className = 'move_dn';
                }
            }

            /*************************************************************
                update high/low prices
            *************************************************************/
            high.className  = '';
            low.className   = '';
            
            if ((+getNodeValue(metals[i],'ask')) > (+high.innerHTML.substring(1)))
            {
                high.className = 'bold';
                high.innerHTML = '$'+getNodeValue(metals[i],'ask');
            }

            if ((+getNodeValue(metals[i],'bid')) < (+low.innerHTML.substring(1)))
            {
                low.className = 'bold';
                low.innerHTML = '$'+getNodeValue(metals[i],'bid');
            }
        }
    }
}

function getNodeValue(obj,tag)
{
    return obj.getElementsByTagName(tag)[0].firstChild.nodeValue;
}

