
/* -----------------------------------------------------------------------------------------------*/
/* -----------------------------------------------------------------------------------------------*/
/* ------------------------------- Global variables ----------------------------------------------*/
/* -----------------------------------------------------------------------------------------------*/
var companyName = "";
var currentPrice = "";
var previousClose = "";
var pChange = "";
var change = ""; 

var stock_lastPrice = "-1";
var stock_lastTradeTime = "-1";
var stock_lastTradeDate = "-1";
var stock_change = "-1";
var stock_changePercentage = "-1";

var arrOfAllMonths = new Array("Jan", "Feb", "Mar", 
"Apr", "May", "Jun", "Jul", "Aug", "Sep", 
"Oct", "Nov", "Dec");

var serverNameOfstockquata = "";
var portNumOfstockquata = ""; 
var contextOfstockquata = "";
var jspFileOfstockquata = "";

/* -----------------------------------------------------------------------------------------------*/
/* -----------------------------------------------------------------------------------------------*/
/* --------------------------------- Stoke Quote functions ---------------------------------------*/
/* -----------------------------------------------------------------------------------------------*/

function loadProperties(xmlName,xslName)
{

  if (window.ActiveXObject)
  {
     
	 var xmlDoc = new ActiveXObject( "MSXML2.DOMDocument.3.0" );
     var xslDoc = new ActiveXObject( "MSXML2.FreeThreadedDOMDocument.3.0" );
     
     var xslTemplate = new ActiveXObject( "MSXML2.XSLTemplate.3.0" );

    
     xmlDoc.async = "false";    
     xmlDoc.load(xmlName);  	
    
	
     xslDoc.async = "false";    
     xslDoc.load(xslName);	

     xslTemplate.stylesheet = xslDoc;
    
     xslProcessor = xslTemplate.createProcessor( );
    
     xslProcessor.input = xmlDoc;

     xslProcessor.transform();
    
     var st = xslProcessor.output;    
    
	 st = st.replace("<script>","");
	 st = st.replace("</script>","");
	 
	 storeLoadedProperties(st);
   
  }

else if (document.implementation && document.implementation.createDocument)
{  

	xmlhttpXML = new XMLHttpRequest();
	
	// load xml file
	xmlhttpXML.open("GET", xmlName, false);
	xmlhttpXML.setRequestHeader("Content-Type", "text/xml")
	xmlhttpXML.send(null);
	var xml = xmlhttpXML.responseXML; 
	
	// load xsl file
	xmlhttpXML.open("GET", xslName, false);
	xmlhttpXML.setRequestHeader("Content-Type", "text/xml")
	xmlhttpXML.send(null);
	var xsl = xmlhttpXML.responseXML; 


	xsltProcessor=new XSLTProcessor();
	xsltProcessor.importStylesheet(xsl);
	var st = xsltProcessor.transformToDocument(xml);   
	storeLoadedProperties(st.documentElement.textContent);
 }
  
}

function storeLoadedProperties(st)
{    	
											
    eval("var arrOfProperties ="+st);
	
	serverNameOfstockquata = arrOfProperties.serverName;
	portNumOfstockquata = arrOfProperties.portNumber;
	contextOfstockquata = arrOfProperties.context;
	jspFileOfstockquata = arrOfProperties.jspFileName;
	 
}

function writeValue(val)
{
	document.write(val);
}
function writeChange(chg,pChg)
{
	var changeVal = "";
	if(chg > 0)
	{
		changeVal+="+";
	}
	changeVal+=chg;
	changeVal+="("+pChg+"%)";
	
	writeValue(changeVal);
}

/* -----------------------------------------------------------------------------------------------*/


function getHttpObject()
{

    httpObj = false ;    	
	
	if(navigator.appName == "Microsoft Internet Explorer")
	{
	  httpObj = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
	  httpObj = new XMLHttpRequest();	  
	}
	return httpObj;
}




/* -----------------------------------------------------------------------------------------------*/
/* -----------------------------------------------------------------------------------------------*/
/* --------------------------------- RealTime Data From Google And Edgar -------------------------*/
/* -----------------------------------------------------------------------------------------------*/

function getRealTimeDataFromEdgar()
{
   document.getElementById("realTimeDataDIVID").innerHTML = "<img src='images/Loading.gif'/> ";       										    	    
   if(typeof irxmlstockquote != 'undefined' && irxmlstockquote.length > 0 )
	{	  
		
	      var statusCode = IRXMLSTATUSCODE; 
		  var ticker = irxmlstockquote[0];		  		   
		   
		  stock_lastPrice = ticker.lastprice ;
          stock_lastTradeTime = ticker.lastdatetime ; //"4:02PM EDT";//Sep 12, 4:02PM EDT
		 
		  stock_lastTradeDate = ticker.lastdatetime   //new Date(2008, 9-1, 12, 16, 11, 3),
          stock_change = ticker.change ;
          stock_changePercentage  = ticker.pchange ;

		  drawRealTimeData(false) ;
		  
	} 
	
} 

function getRealTimeDataFromGoogle()
{
   document.getElementById("realTimeDataDIVID").innerHTML = "<img src='images/Loading.gif'/> ";            
   
   var httpObj = getHttpObject(); 

	   if(httpObj!=null)
	   {				   		
	            
				loadProperties('/utc/xml/configuration.xml','/utc/xml/configuration.xsl');				
	
	            var url ="";
	                
				url+="http://" + serverNameOfstockquata ;
	            url+="/" + contextOfstockquata + "/" + jspFileOfstockquata ;

			   //httpObj.open("GET", "http://www.google.com/finance/info?client=ig&q=UTX", true);		
			   //httpObj.open("GET","http://localhost/utc/utilites/proxy.php", true);
			   //httpObj.open("GET","http://localhost/StockQuote/RealTimeStockQuote.jsp", true);

               url = "/StockQuote/RealTimeStockQuote.jsp";
               
			   httpObj.open("GET",url, true); 
			   
			   httpObj.onreadystatechange = function loadMarketData()
											{
													if (httpObj.readyState == 4) 
													{
														
													  if (httpObj.status == 200) 
													  {
														
														  var st = httpObj.responseText;										
														
														  var indexOfOpen = st.indexOf('{');
														  var indexOfClose = st.indexOf('}');
												
														  var s = st.substring(indexOfOpen,indexOfClose+1);
												
														  eval("arrObj ="+s);														  														  
														  stock_lastPrice = arrObj.l_cur;
														  stock_lastTradeTime = arrObj.ltt;
														  stock_lastTradeDate = arrObj.lt;												  
														  stock_change = arrObj.c;
												
														  stock_changePercentage = arrObj.cp;
														  
														  drawRealTimeData(true);														  														 												
													  } 
													  else  //get data from edgar
													  {
														  //alert('There was a problem with the request.\n Get data from edgar');
														  getRealTimeDataFromEdgar();
													  }
													}
											}
		   
					httpObj.send(null);
	   }
	  else
	  {
		  getRealTimeDataFromEdgar();
	  }

}


function drawRealTimeData(googleFlag)
{
	try
	{
      var dateTime = "";
      var lastPrice = "";
      var change = "";
      var percentage = "";            
      
      if(googleFlag)
      {
        dateTime = getRealTimeDateFromGoogle() ;
        lastPrice = stock_lastPrice ;
        change = stock_change;
        percentage = stock_changePercentage;
      }
      else
      {
        //get from edgar        		
		dateTime = getRealTimeDateFromEdgar();
        lastPrice = stock_lastPrice ;
        change = stock_change;
        percentage = stock_changePercentage;		
      }      
      
      var st = "";
  
      st+='<span id="symbol">UTX</span>';
  
      st+='<span id="date">';
      st+= dateTime;      
      st+='</span>';

      st+='<span id="marketvalue">';
      st+= lastPrice;
      st+='</span>';

      st+='<span id="indicator">';
      st+= getIndicatorImage(change);
      st+='</span>';

      st+='<span id="percentage">';
      st+= getChangeAndPercentageStr(change,percentage);
      st+='</span>';
 
      document.getElementById('realTimeDataDIVID').innerHTML = st ;
    
      return st;
	}
	catch(e)
	{ 
	  return "<img src='images/Loading.gif'/>" ;
	}
}

//Sep 16, 4:02PM EDT

function getRealTimeDateFromGoogle()
{	
      var now = new Date();
	  var year = now.getFullYear();
	 
	  var stockDate = stock_lastTradeDate.substr(0,stock_lastTradeDate.indexOf(',')+1)+" "+year;	  

	  var st = getDateStr(new Date(Date.parse(stockDate)));
	  
	  var indexOfHour = stock_lastTradeDate.indexOf(',')+2;  
      var indexOfColon = stock_lastTradeDate.indexOf(":")+1;
	  
	  var h = stock_lastTradeDate.substr(indexOfHour,indexOfColon-indexOfHour-1) ;
	  var m = stock_lastTradeDate.substr(indexOfColon,4) ;

	  var indexOfLastSpace = stock_lastTradeDate.lastIndexOf(" ") ;
	  var timing = stock_lastTradeDate.substr(indexOfLastSpace+1,stock_lastTradeDate.length-indexOfLastSpace);
      
      st+="<br/>" + h +":"+ m + " " ;    //+ timing ;
	 
	  // ---------------
     
	 return st;
	
}

function getRealTimeDateFromEdgar()
{  

	if( typeof irxmlstockquote != 'undefined' && irxmlstockquote.length > 0 )
	{	  
		
	      var statusCode = IRXMLSTATUSCODE; 
		  var ticker = irxmlstockquote[0];		  		   
		   
		  
          var date = new Date(ticker.lastdatetime);		  		  
		  
		  var st = getDateStr(date);
		  
		  var hour = date.getHours();
		  
		  var timeScale = "AM";
		  
		  if(date.getHours() > 12)
		  {
			  timeScale = "PM" ;
			  hour = date.getHours()-12 ;
		  }
		  
		  st+="<br/>" + hour +":"+ date.getMinutes() + " " + timeScale;
		 
		  return st;
	}
	
	return "";
}

function getDateStr(date)
{	
	var d  = date.getDate();
	var day = (d < 10) ? '0' + d : d;
	var m = date.getMonth() + 1;
	var month = (m < 10) ? '0' + m : m;
	var yy = date.getYear();
	var year = (yy < 1000) ? yy + 1900 : yy;  			
	
	return month + "/" + day + "/" + year ;
}

function getChangeAndPercentageStr(chg,pChg)
{	
	var changeVal = "";
	
	changeVal+=chg;
	
	changeVal+="(" + pChg + "%)";
	
	if(chg < 0)
	{
		changeVal ="<font color='red'>"+changeVal+"</font>";
	}
	
	return changeVal ;
} 

function getIndicatorImage(change)
{
	 var indicatorImage = "<img src='/utc/images/";
	 
	 if(change >=0)
	 {
		 indicatorImage+="indicator_up.gif";
	 }
	 else
	 {
		 indicatorImage+="indicator_dn.gif";
	 }
	 
	 indicatorImage+="'>";
	
	 return indicatorImage;
}

/* -----------------------------------------------------------------------------------------------*/
/* -----------------------------------------------------------------------------------------------*/
/* --------------------------------- Stoke Quote functions ---------------------------------------*/
/* -----------------------------------------------------------------------------------------------*/

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function getFormattedDatefromEdgar(dateStr)
{	
    var d = "";
	
	var hour = dateStr.getHours();
	
	if(hour > 12)
	{
		hour = hour - 12 ; 	
	}
	
	d+= hour + " : " + dateStr.getMinutes() + " ET on " ;
	
	d+= arrOfAllMonths[dateStr.getMonth()] + " " + dateStr.getDate();		
	
	return d;
	
	
}

function getStockQuoteFromEdgar()
{
	
	var last = "";
	var previousClose = "";
	var dayRange = "";
	var asOfStr = "";
	var exchange = "";
	
	var intraDayChange = "";
	var weekRange = "";
	var volume = "";
	var pe = "";
	
	
	if( typeof irxmlstockquote != 'undefined' && irxmlstockquote.length > 0 )
	{	  
		 
		
		 var statusCode = IRXMLSTATUSCODE; 
		 var ticker = irxmlstockquote[0];		  		   
		
		 last = ticker.lastprice;
		 previousClose = ticker.previousclose;
		 dayRange = ticker.low + " - " + ticker.high;  


         asOfStr = getFormattedDatefromEdgar(ticker.lastdatetime);
		 
		 exchange = ticker.exchange;		 
		 
		 intraDayChange = ticker.change + "&nbsp;" + getIndicatorImage(ticker.change) + "&nbsp;" + ticker.pchange + "%";
		 
		 weekRange = ticker.yearlow + " - " + ticker.yearhigh;
		 volume = ticker.volume;
		 pe = ticker.pe;		  		 		 
		 
		 document.getElementById('lastLabelID').innerHTML = last ;
		 document.getElementById('prevCloseLabelID').innerHTML = previousClose ;
		 document.getElementById('dayRangeLabelID').innerHTML = dayRange ;
		 document.getElementById('asOfLabelID').innerHTML = asOfStr ;
		 document.getElementById('exchangeLabelID').innerHTML = exchange ;
		 
		 document.getElementById('intraDayChangeLabelID').innerHTML = intraDayChange ;
		 document.getElementById('WeekRangeLabelID').innerHTML = weekRange ;
		 document.getElementById('volumeLabelID').innerHTML = volume ;
		 document.getElementById('peLabelID').innerHTML = pe ;		 
		  
		  
		  

	}	
	
	//document.getElementById('stockQuotaDivID').innerHTML = "";
	
	
}

/*

function loadPropertiesOfRealTimeDataFromGoogle()
{
	
   var props = propertiesXMLDoc.selectNodes('/properties/property');
 
   for (var j=0;j<props.length;j++)
   {	    			  
	  var key = props[j].childNodes[0].text;
	  
	  if(key=="serverName")
	  {
		  var value = props[j].childNodes[1].text;
		  
		  serverNameOfstockquata = value ;		  		  
	  }
	  else if(key=="portNumber")
	  {
		  var value = props[j].childNodes[1].text;
		  
		  portNumOfstockquata = value ;		  
	  }
  	  else if(key=="context")
	  {
		  var value = props[j].childNodes[1].text;		  
		 
	      contextOfstockquata = value;

	  }
  	  else if(key=="jspFileName")
	  {
		  var value = props[j].childNodes[1].text;		  		  
		  
		  jspFileOfstockquata = value ;
	  }
   }
   
}

function loadXMLDoc(fname)
{

var xmlDOC = "";

 if (window.ActiveXObject)
  {	  
	 	xmlDOC = new ActiveXObject("Microsoft.XMLDOM");				
  }

 else if (document.implementation && document.implementation.createDocument)
  {     
 	 xmlDOC = document.implementation.createDocument("", "", null);		
	 //xmlDOC.onload = loadPropertiesOfRealTimeDataFromGoogle;
  }
 else
  {
     alert('Your browser cannot handle this script');
  }
  
     xmlDOC.async=false;
     xmlDOC.load(fname);
     
	 return xmlDOC;
     
}

*/
