/* -------------------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------------------- */
/* ------------------------------------- Global variables ------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------------------- */
var selectedYear = "";
var selectedMonth = "";
var selectedDay = "";

var arrOfAllMonthes = new Array("January", "February", "March", 
"April", "May", "June", "July", "August", "September", 
"October", "November", "December");

var arrOfAllMonthsInBrief = new Array("Jan", "Feb", "Mar", 
"Apr", "May", "Jun", "Jul", "Aug", "Sep", 
"Oct", "Nov", "Dec");

var xmlOfPriceLookup = loadXMLDoc('/utc/xml/priceLookups.xml');

/* -------------------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------------------- */

function isIEBrowser()
{

 if (window.ActiveXObject)
  {
     return true;
  }

 else if (document.implementation && document.implementation.createDocument)
  {
     return false ;
  }
     
}

var dividendParsedTabel = "";
function drawDividendTabel()
{
	if (window.ActiveXObject)
	{
	 document.getElementById("tblDividend").innerHTML= dividendParsedTabel;
	}
	else
	{
	  document.getElementById("tblDividend").innerHTML="";  
      document.getElementById("tblDividend").appendChild(dividendParsedTabel);
	}
}

function parseDividend(xmlName,xslName)
{

  if (window.ActiveXObject)
  {
     xmlDoc = new ActiveXObject( "MSXML2.DOMDocument.3.0" );
     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;    
    
    dividendParsedTabel = st ;
    //document.getElementById("tblDividend").innerHTML= st;
  }

else if (document.implementation && document.implementation.createDocument)
{
  
  xml=loadXMLDoc(xmlName);
  xsl=loadXMLDoc(xslName);
 
  xsltProcessor=new XSLTProcessor();
  
  xsltProcessor.importStylesheet(xsl);  
  
  resultDocument = xsltProcessor.transformToFragment(xml,document);
  
  //document.getElementById("tblDividend").innerHTML="";  
  //document.getElementById("tblDividend").appendChild(resultDocument);
  dividendParsedTabel = resultDocument;
  
 }
  
}


function loadXMLDoc(fname)
{

// code for IE
if (window.ActiveXObject)
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.load(fname)
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
  {
  xmlhttpXML = new XMLHttpRequest();
xmlhttpXML.open("GET", fname, false);
xmlhttpXML.setRequestHeader("Content-Type", "text/xml")
xmlhttpXML.send(null);
xmlDoc = xmlhttpXML.responseXML; 
  }
else
  {
  alert('Your browser cannot handle this script');
  }

return(xmlDoc);
}


function searchPrice()
{  
  var yearsValue = selectedYear;
  var monthsValue =selectedMonth;
  var dayValue = selectedDay ;  

  document.getElementById("loadingImgDIV").innerHTML = "<img src='../images/Loading.gif'/> ";  
  document.getElementById("priceDataContainerDIV").style.display = "none";  
  
  
  if(yearsValue =="")
  {
	  alert('please select a Year'); 
	  return ;
  }
  if(monthsValue =="")
  {
	  alert('please select a Month'); 
	  return ;
  }
  if(dayValue =="")
  {
	  alert('please select a Day'); 
	  return ;
  }

  var d = "";

  if(xmlOfPriceLookup == null)
  {
     /*xmlOfPriceLookup=loadXMLDoc('/utc/xml/priceLookups.xml');	   	   */
	 alert("Couldn't load priceLookup file");
  }
 
  if(isIEBrowser())
  {    
   
	   
	   d+=monthsValue+"-"+dayValue+"-"+yearsValue; 
	   
	   var xPathQuery = constructXPathQuery(d);
	   
	   var node = xmlOfPriceLookup.selectSingleNode(xPathQuery);	   	   	   

       if(node == null)	
	   {
	      node = getPreviousDate(xmlOfPriceLookup,monthsValue,dayValue,yearsValue);
	   }
	   
	   if(node !=null)
	   {
		   var arr = new Array();

		   splitString(node.text,'-',arr);		   
		   
		   var mo = arr[0];
		   var da = arr[1];
		   var ye = arr[2];		   		   
		   
		   var ss = arrOfAllMonthsInBrief[parseInt(mo)] + " " + parseInt(da) +", " + ye ;		   
		   
		   var t = new Date(Date.parse(ss));
		   
		   var searchDate = arrOfAllMonthes[t.getMonth()-1] + " " + t.getDate() + ", " + t.getFullYear();
		   
		   document.getElementById("searchDate").innerHTML = searchDate;  	         	   	   	   	   	   
  	   
  	      var parent = node.parentNode;

	      document.getElementById('low').innerHTML="$" + parent.selectSingleNode("low").text;
	      document.getElementById('high').innerHTML="$" + parent.selectSingleNode("high").text;
	      document.getElementById('close').innerHTML="$" + parent.selectSingleNode("close").text;
	      document.getElementById('open').innerHTML="$" + parent.selectSingleNode("open").text;
	      document.getElementById('Volume').innerHTML=parent.selectSingleNode("volume").text;
	   }
	   
  }
  else  
  {           
	  
	   d+=monthsValue+"-"+dayValue+"-"+yearsValue;
	  
	   var node = SelectSingleNodeForFF(xmlOfPriceLookup,constructXPathQueryFF(d));	   	   
	   
	   if(node==null)
	   {			 
	          var previousDate = getPreviousDateFF(xmlOfPriceLookup,monthsValue,dayValue,yearsValue);
	          node = previousDate;	          	                       
	   }
	   
	   if(node !=null)
	   {
		   
		   var arr = new Array();

		   splitString(node.textContent,'-',arr);		   
		   
		   var mo = arr[0];
		   var da = arr[1];
		   var ye = arr[2];		   		   
		   
		   var ss = arrOfAllMonthsInBrief[parseInt(mo)] + " " + parseInt(da) +", " + ye ;		   
		   
		   var t = new Date(Date.parse(ss));
		   
		   var searchDate = arrOfAllMonthes[t.getMonth()-1] + " " + t.getDate() + ", " + t.getFullYear();
		   
		   document.getElementById("searchDate").innerHTML = searchDate;	   	   	   	   	   	   
		   
		   document.getElementById("open").innerHTML =   "$" + SelectSingleNodeForFF(node.parentNode,"open").textContent;
		   document.getElementById("close").innerHTML =  "$" + SelectSingleNodeForFF(node.parentNode,"close").textContent;
		   document.getElementById("low").innerHTML =    "$" + SelectSingleNodeForFF(node.parentNode,"low").textContent;
		   document.getElementById("high").innerHTML =   "$" + SelectSingleNodeForFF(node.parentNode,"high").textContent;
		   document.getElementById("Volume").innerHTML = SelectSingleNodeForFF(node.parentNode,"volume").textContent;
	   }
  }      
  
    document.getElementById("loadingImgDIV").style.display = "none";  
    document.getElementById("priceDataContainerDIV").style.display = "";
  
}

function constructXPathQueryFF(date)
{

   var xPathQuery = "/price-items/price-item/date[text()=";

   xPathQuery+="' ";

   xPathQuery+=date;      

   xPathQuery+=" '";

   xPathQuery+="]";

   return xPathQuery ;      

}



function splitString(str,sep,arr)
{  
  var indOfSep = str.indexOf(sep);    
  
  if(indOfSep == -1)
  {
	  arr[arr.length] = str;
  }
  else
  {	  
	  arr[arr.length] = str.substr(0,indOfSep);
	  
	  splitString(str.substr(indOfSep+1,str.length),sep,arr);
  }
  
}

function getPreviousDate(xml,m,d,y)
{
   var date = m+"-"+d+"-"+y;      
    
   var elem = xml.selectSingleNode(constructXPathQuery(date));
   
   if(elem !=null)
   {
     return elem ; 
   }   
   else if(d-1 > 0)
   {
      return getPreviousDate(xml,m,d-1,y);
   }
   else if(m-1 > 0)
   {
      return getPreviousDate(xml,m-1,31,y);
   }
   else if(y-1 > 1980)
   {
      return getPreviousDate(xml,12,31,y-1);
   }
   else
   {
     alert('not in the range');
   }
}


function getPreviousDateFF(xml,m,d,y)
{
  //alert("m d y :" + m + " " + d + " " + y);
   var date = m+"-"+d+"-"+y;       
   
   var elem = SelectSingleNodeForFF(xml,constructXPathQueryFF(date));
   
   if(elem !=null)
   {
     return elem ; 
   }   
   else if(d-1 > 0)
   {
      return getPreviousDateFF(xml,m,d-1,y);
   }
   else if(m-1 > 0)
   {
      return getPreviousDateFF(xml,m-1,31,y);
   }
   else if(y-1 > 1980)
   {
      return getPreviousDateFF(xml,12,31,y-1);
   }
   else
   {
     alert('not in the range');
   }
}



function SelectSingleNodeForFF(xml,path)
{   
   var evaluator = new XPathEvaluator();         
   
   var result = evaluator.evaluate(path,xml,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);   

   if (result.singleNodeValue != null) 
   {
      var elem = result.singleNodeValue;
      
      return elem;
   }
 
      return null ;
}

function constructXPathQuery(date)
{

   var xPathQuery = "/price-items/price-item/date[text()=";   

   xPathQuery+="'";

   xPathQuery+=date;

   xPathQuery+="'";

   xPathQuery+="]";

   return xPathQuery ;

}

function drawDropdown(parentDivID,valuesDivID,startIndex,endIndex,asc,strOfValue,spanIdOfSelectedValue,type,label)
{
    
	var selectedVar = "";
    
	if(type==0)
	{
		selectedVar = "selectedYear";
	}
	else if(type==1)
	{
		selectedVar = "selectedMonth";
	}
	else
	{
		selectedVar = "selectedDay";
	}

	var st = "";  
  
    
	st+='<div id="';
	st+=parentDivID;
	st+='" class="DropdownClosed" onclick="OpenDropdown(this,';
	
	st+='\'' + valuesDivID + '\'';
	
	st+=');"> ';  
	
	st+='<div id="';

	st+=valuesDivID ;
	
	st+='" class="DropdownValues" style="display:none;"> '; 
	
	st+='<ul>'; 
	
for(var i=startIndex;i<=endIndex;i++)
{
	st+='<li>';   		
	
	st+='<span class="link" onMouseOver="this.className=\'linkHover\';" onMouseOut="this.className=\'\';" ';
	st+='onclick="';
	
	st+=selectedVar + '=' 
	
	if(asc=="desc")
	{	  
	  st+=endIndex-i+startIndex;
	}
	else
	{
	   st+=i;	 
	}
	
	st+=';';
	
	st+='CloseDropdown(';
	
	st+='\'' + parentDivID + '\'';
	
	st+=',';
	
	st+='\'' + valuesDivID + '\'';
	
	st+=',this,';
	
	st+='\'' + spanIdOfSelectedValue + '\'';
	
	st+=');/*filter(this,\'tblFiltering\',1);*/">';	
	
	if(strOfValue=="Month")
	{	 
	  st+=arrOfAllMonthes[i-1];
	}
	else if(asc=="desc")
	{	  
	  st+=endIndex-i+startIndex;
	}
	else
	{
	   st+=i;	 
	}
	
	st+='</span>';	
	
	st+='</li>';	
	
}
	st+='</ul>';
	
	st+='</div>';  	
	
	st+=label + " :";
	
	st+='<span id="';
	st+=spanIdOfSelectedValue;
	st+='">select</span>';	  	
	
	st+='</div>';		  

	st+='\n\n';
	
return st ;

}

function fillDateDIV()
{
 
 var y = getYears();
 var m = getMonths();
 var d = getDays();  
 
 document.getElementById('searchByDateDIV').innerHTML="<div class='contentLinkFilter'>"+y+m+d+"</div><div class='Clear'></div>";
   
 initializePriceData();  
   
}
function initializePriceData()
{
  var da = new Date();
  
  selectedYear = da.getFullYear();
  selectedMonth = da.getMonth() + 1;
  selectedDay = da.getDate();
  
  searchPrice();
}
function getYears()
{	
  //alert(drawDropdown("yearParentDivID","yearValuesID",1980,1980,"","spanyearID",0," Year"));  
    return drawDropdown("yearParentDivID","yearValuesID",1980,2008,"desc","","spanyearID",0," Year") ;
}
function getMonths()
{	
   return drawDropdown("monthParentDivID","monthValuesID",1,12,"asc","Month","spanMonthID",1,"Month") ;
}	
function getDays()
{
	return drawDropdown("dayParentDivID","dayValuesID",1,31,"asc","","spanDayID",2,"Day") ;
}		