// 2006 Chris Lee  slee @ neox.net
// 20060820 - adding graphs

var stock_urlprefix=stock_urlpath + "/ajaxstock/stock.php?t=";
var stock_req;
var stock_period=30000;
var stock_timerid = 0;
var stock_tickers="";
var stock_position= new Array();
var stock_graph= new Array();
var stock_refresh_ct=0;
function find_quotes_elements(nodes,count){
	for(var i=0; i< nodes.length;i++){
	   if(nodes[i].nodeType == 1){
	       // alert(nodes[i].nodeName);

		if(nodes[i].hasChildNodes()){
		   count=find_quotes_elements(nodes[i].childNodes,count);
		}else{
	           //getAttribute('class') does not work in IE 6
                   //if(nodes[i].getAttribute('class') != null){
		   //alert(nodes[i].nodeName);
		   if(nodes[i].getAttribute('type') == null && nodes[i].getAttribute('ticker') != null){
			stock_tickers += nodes[i].getAttribute('ticker')+"+";
			stock_position[count++]=nodes[i];
		   }else
		   if(nodes[i].getAttribute('type') == "graph" && nodes[i].getAttribute('ticker') != null){
			var ct=stock_graph.length;
			stock_graph[ct++] = nodes[i];
		  //	alert("working?" + ct); 
		   }
		}	
	   }
	}
        return count;
}

function stock_run(){
 if(stock_timerid) {
      clearTimeout(stock_timerid);
  }
if (stock_tickers== ""){
  var j=0;
  j=find_quotes_elements(document.getElementById("STOCK_QUOTES").childNodes,j);
  //alert(j+":"+stock_tickers);
  if (stock_tickers.length == 0 )
    return;
  stock_tickers=stock_tickers.substring(0,stock_tickers.length-1);
}

if(stock_req == null){
    if (window.XMLHttpRequest) {
        stock_req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        stock_req = new ActiveXObject("Microsoft.XMLHTTP");
    }
}
	stock_req.open("GET", stock_urlprefix+stock_tickers, true);
    stock_req.onreadystatechange = stock_callback;
    stock_req.send(null);


}

function stock_callback() {
    if (stock_req.readyState == 4) {
        if (stock_req.status == 200) {
            // update the HTML DOM based on whether or not message is valid
       		//var message = req.responseXML.getElementsByTagName("message")[0];
		//document.getElementById("overDiv").innerHTML = message.childNodes[0].nodeValue; 
		//alert("reply is back?"+req.responseText);
		stock_update( stock_req.responseXML);
	 }else{
	/*    document.getElementById("overDiv").innerHTML= "There was a problem retrieving the XML data:\n" +
                req.statusText;
        */
	}
    }
}

function stock_update(nodes){
  // alert(nodes.nodeName);
   var list=nodes.getElementsByTagName('list');
   var mclosed=0;
   var temp;
   var time_left;
   if(list.length > 0 ){
	if(list[0].getAttribute('closed')=='true'){
     		 mclosed=1;
	}
	time_left=list[0].getAttribute('left');
   }

   var snodes=nodes.getElementsByTagName('stock');
   for(var i=0; i< snodes.length; i++){
      
       price =snodes[i].getElementsByTagName("price")[0].firstChild.nodeValue;
       last=snodes[i].getElementsByTagName("last")[0].firstChild.nodeValue;
       percent=snodes[i].getElementsByTagName("percent")[0].firstChild.nodeValue;
       if( percent.substring(0,1) == "-")
	  color="ff0000";
       else
          color="0000ff"; 
	stock_position[i].innerHTML="$"+price + " <font color='#"+color+"'>"+percent+"</font> <a href='javascript:activate_graph(\""+stock_position[i].getAttribute("ticker")+"\");'>c</a>";
        temp=stock_position[i].getAttribute("price");
	var prev_price="";
	if (temp){
	     prev_price="$"+temp;
	     if (temp != price){
		//stock_position[i].setAttribute("title","Same price!");
		//stock_position[i].style.background='#ffffff';
		//http://www.comptechdoc.org/independent/web/cgi/javamanual/javastyle.html
		stock_position[i].style.textDecoration="underline";
	     }else{
		stock_position[i].style.textDecoration="none";

	     }

	}
	stock_position[i].setAttribute("title",last+" "+prev_price);	       
        stock_position[i].setAttribute("price",price);
  }

  stock_refresh_ct++;
  
  test=document.getElementById('stock_refresh_count');
  
  if(test){
     //if(mclosed==0){
       test.innerHTML=stock_refresh_ct; 
     //}else{
     //  test.innerHTML="<b>Market closed</b>";
     //}
  }

  test=document.getElementById('stock_marketstatus');
  if(mclosed==0){
    if (test && time_left) { test.innerHTML=time_left; } 
    stock_timerid = setTimeout("stock_run()", stock_period);
  }else{
    if (test) { 
	if(time_left){
	   test.innerHTML=time_left;
	}else{
	   test.innerHTML="Market is closed"; 
	} 
    } 
  }

}
// below link may not always work.
//var yahoo_g_url_start="http://ebetaichart.finance.yahoo.com/instrument/1.0/";
//var yahoo_g_url_end="/chart;range=5d/image;size=160x95";
var yahoo_g_url_start="http://ichart.finance.yahoo.com/t?s=";
var yahoo_g_url_end="";
function activate_graph(ticker) {
    //alert("length:" + stock_graph.length);
    var activated=0;
    for (var i=0; i< stock_graph.length ; i++){
	//alert(stock_graph[i].getAttribute('ticker'));
        if (stock_graph[i].getAttribute('ticker') == ticker){
	   stock_graph[i].innerHTML="<img src='" + yahoo_g_url_start + ticker + yahoo_g_url_end + "' onClick='activate_graph(\"!\");' ><br />" + 
	"<a href='javascript:activate_graph_large(\""+ticker+"\",\"1d\")'>1d</a> " + 
	"<a href='javascript:activate_graph_large(\""+ticker+"\",\"5d\")'>5d</a> " +
	"<a href='javascript:activate_graph_large(\""+ticker+"\",\"3m\")'>3m</a> " +
	"<a href='javascript:activate_graph_large(\""+ticker+"\",\"6m\")'>6m</a> " +
	"<a href='javascript:activate_graph_large(\""+ticker+"\",\"1y\")'>1y</a> ";
	
	   stock_graph[i].style.visibility='visible';	
  	   activated=1;	
	}else {
	   //deactivate rest of the graph
           stock_graph[i].innerHTML="";
	   stock_graph[i].style.visibility='hidden';
      	}	
    }
    // all graphs are closed -> close the large graph too.
    if (activated==0){
	deactivate_graph_large();
    }
}

/*
http://ichart.finance.yahoo.com/z?s=YHOO&t=5d&q=l&l=on&z=s&p=v&a=
http://ichart.finance.yahoo.com/z?s=YHOO&t=5d&q=l&l=on&z=s&p=v&a=r14

t = period 
q = type: bar line cdl
l = on (linear) off (log)
z = size (m, l , s)

p = overlay
a = additional indicator : v(volume) r14(rsi) ...
*/

function activate_graph_large(ticker,period){

    var obj = document.getElementById("STOCK_MORE_GRAPH");
    if (obj == null)
         return;
    var link ;
    link = "http://ichart.finance.yahoo.com/z?s=" + ticker + "&t=" + period  + "&q=l&l=on&z=s&p=v&a=r14"; 
  
    obj.innerHTML = "<img src='"+ link +"' onClick='deactivate_graph_large();'>";
    obj.style.visibility = "visible";
  
}
function deactivate_graph_large(){
    var obj = document.getElementById("STOCK_MORE_GRAPH");
    if (obj == null) return;
    obj.style.visibility = "hidden";
}

