/* ===========================
  VERSION INFO:
  -------------------
  Author: Thomas Kim (thomas.kim@foxnews.com)
  Description: homepage.js contains the must-have javascript that is essential to the page prior to jquery's inclusion
  Revision: v 1.0.0
  Last Updated: 2008-05-02 @ 15:35 EST
  =========================== */
/*domNode features the functionality of finding an element based on id, checking for a class, removing a class and adding a class
  along with chaining the afforementioned dom methods
*/
(function(){
   var el;
   function _domNode(els,pos) {
     if(pos==null)el = document.getElementById(els);
     else el = getElementsByClass(els)[pos];
     return this;
   }
   _domNode.prototype = {
     $: function(){
          return el;
        },
     checkForClass: function(nameOfClass){ 
       return new RegExp('\\b' + nameOfClass + '\\b').test(el.className);
     },
     addClassName: function(value){
       if(el ==null) return this;
       if(!el.className) {el.className = value;} 
       else {
  	 	   newClassName = el.className;
  	 	   newClassName+= " ";
  		   newClassName+= value;
  		   el.className = newClassName;
  	   }
  	   return this;
     },
     byClass: function(searchClass,node,tag){
  	   var classElements = new Array();
  	   if ( node == null ) node = document;
  	   if ( tag == null ) tag = '*';
  	   var els = node.getElementsByTagName(tag);
  	   var elsLen = els.length;
  	   var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
  	   for (i = 0, j = 0; i < elsLen; i++) {
  		   if ( pattern.test(els[i].className) ) {classElements[j] = els[i];j++;}
  	   }
  	   return classElements;   
     },
     checkForClass: function(nameOfClass){
       if (el == null || el.className == '') {return false;} 
       else {return new RegExp('\\b' + nameOfClass + '\\b').test(el.className);}  
     },
     removeClassName: function(nameOfClass){
       if(this.checkForClass(nameOfClass))
       {
         el.className = el.className.replace(
         (el.className.indexOf(' ' + nameOfClass) >= 0 ? ' ' + nameOfClass : nameOfClass),
               '');
       }
       return this;
     }
   };
  window.domNode = function(argument,argument2){
  return new _domNode(argument,argument2);
  };
})();	
/*function domNode(x){return document.getElementById(x);}*/
/* Dustin Diaz's getElementsByClass() dustindiaz.com */
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null ) node = document;
	if ( tag == null ) tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {classElements[j] = els[i];j++;}
	}
	return classElements;
}
function quoteHPLink(s,n) {
var name = n ? n : s;
var quoteUrl = "/research.html?searchString=";
if ("$I.FOX50"==s){
	return '<a href="/markets/market-overview.html?marketview=foxgrades">'  + name + '</a>';
}
return '<a href="' + quoteUrl + s.replace('I.','') + '">' + name + '</a>';
}

function quoteName(s,n){
var name = n ? n : s;
return name;
}

function doNav(theSymbol)
  {
        var quoteLink = "http://quote.foxbusiness.com/symbol/";

        if(theSymbol !=null && "$I.FOX50" != theSymbol){
                theSymbol = theSymbol.toLowerCase();
                document.location.href = quoteLink + theSymbol.toLowerCase().replace('.', ':').replace('i:compx','i:comp') + "/snapshot";
        }else{
                document.location.href = "/markets/market-overview.html?marketview=foxgrades";
        }
  }


function homepageSnapshot()
{
  var msdiv = domNode('marketSlide marketIndices',0).$();
  var indicesTargets = msdiv.getElementsByTagName('tr');  
  var indicesIndicator="";
  var upindicator=""; //"<img src=\"/images/arrows_icons/upgreen_arrow.gif\">&nbsp;";
  var downindicator=""; //<img src=\"/images/arrows_icons/downred_arrow.gif\">&nbsp;";
  var snaps = indexdata.symbol.length;
  for(var i=0; i<snaps; i++) 
  {
	try{
		indicesIndicator="";
  		indicesTargets[i+1].setAttribute('id','indexRow'+i);
		//indicesTargets[i+1].setAttribute('onclick', 'javascript:doNav("' + indexdata.symbol[i] + '")');
    		domNode('indexRow'+i).$().getElementsByTagName('th')[0].innerHTML=quoteName(indexdata.symbol[i],indexdata.name[i]);
		if(indexdata.price[i] != null)
    			domNode('marketLast',i).$().innerHTML=indexdata.price[i];
		if(indexdata.change[i] != null)
    		domNode('marketChg',i).$().innerHTML=indexdata.change[i];
		if(indexdata.change[i] != null && indexdata.change[i].indexOf ("+") !=-1){
			indicesIndicator=upindicator;
		}else if(indexdata.change[i] != null && indexdata.change[i].indexOf("-") !=-1){
			indicesIndicator=downindicator;			
		}
		if((indexdata.pctchange[i] != null && indexdata.pctchange[i].substring(1) != null &&  indexdata.pctchange[i].indexOf("+") !=-1) || (indexdata.pctchange[i] != null && indexdata.pctchange[i].substring(1) != null  && indexdata.pctchange[i].indexOf("-")!=-1)){
			indexdata.pctchange[i]=indexdata.pctchange[i].substring(1);
		}
		if(indexdata.pctchange[i] != null)
			domNode('marketPctChg',i).$().innerHTML=indicesIndicator + indexdata.pctchange[i];
	}catch (err){}
  	// changing color if pos / neg change
  	if(indexdata.change[i].indexOf("+")!=-1 ) {
  	// positive change
	if(domNode('indexRow'+i) != undefined) 
  	  domNode('indexRow'+i).removeClassName('noChange').addClassName('posChange');
    } else if(indexdata.change[i].indexOf("-")!=-1) {
  	// negative change
  	  domNode('indexRow'+i).removeClassName('noChange').addClassName('negChange');
    }
  }
    // for futureStockMarket
	var ftMarketName = new Array();
	ftMarketName[0]="DJIA";
	ftMarketName[1]="NASDAQ";
	ftMarketName[2]="S&amp;P 500";

 	var ftdiv = domNode('futuremarketindices').$();
	var futureIndicesTargets = ftdiv.getElementsByTagName('tr');  

	var isFutureDataExist=false;

	if(typeof zq !="undefined" && zq[0] != null && zq[1]!=null && zq[2] !=null ){
		isFutureDataExist=true;
	}

	var ftmarketindicator="";

	if(isFutureDataExist){
	  	for(var p=0; p<3; p++) 
  		{
			ftmarketindicator="";
  			futureIndicesTargets[p+1].setAttribute('id','ftIndexRow'+p);
    			domNode('ftIndexRow'+p).$().getElementsByTagName('th')[0].innerHTML=ftMarketName[p]; //quoteHPLink(indexdata.symbol[i],indexdata.name[i]);
    			domNode('ftmarketLast',p).$().innerHTML=zq[p].price; 
			if(zq[p].change ==0){
				zq[p].change = "0.0000";
			}
    			domNode('ftmarketChg',p).$().innerHTML=zq[p].change; 
  			// changing color if pos / neg change
  			if(zq[p].pchg.indexOf("+")!=-1 || zq[p].pchg.indexOf("-")!=-1){
				zq[p].pchg=zq[p].pchg.substring(1);
			}
  			if(zq[p].change > 0) {  				
				ftmarketindicator=upindicator;
				domNode('ftmarketPctChg',p).$().innerHTML=ftmarketindicator + zq[p].pchg;
  		  		domNode('ftIndexRow'+p).removeClassName('noChange').addClassName('posChange');
    			} else if(zq[p].change < 0) {  				
				ftmarketindicator=downindicator;
                                domNode('ftmarketPctChg',p).$().innerHTML=ftmarketindicator + zq[p].pchg;
  			  	domNode('ftIndexRow'+p).removeClassName('noChange').addClassName('negChange');
    			}else{
				 domNode('ftmarketPctChg',p).$().innerHTML=zq[p].pchg;
			}
  		}
	}else {
	  	for(var p=0; p<3; p++) 
  		{
  			futureIndicesTargets[p+1].setAttribute('id','ftIndexRow'+p);
    			domNode('ftIndexRow'+p).$().getElementsByTagName('th')[0].innerHTML=ftMarketName[p]; 
    			domNode('ftmarketLast',p).$().innerHTML="no data"; 
    			domNode('ftmarketChg',p).$().innerHTML="--"; 	
			domNode('ftmarketPctChg',p).$().innerHTML="--";	
  			
  		}
	}


		// placing Movers
		moversTargets = domNode('marketSlide marketMovers',0).$();
    var theString='<table cellspacing="0"><tr><th>Symbol</th><th>Last Price</th><th>Net Change</th><th>Volume</th><th></th></tr>';
    var moverIndicator="";
    var moverFlag=0;
    var moverId="";
    for(var z=0; z<10;z++) {
		 moverIndicator="";
		 moverId="mmIndexRow" + z;
		 moverFlag=0;
		 if(marketmovers.netchange[z].indexOf("+") !=-1){
			moverIndicator=upindicator;
                        moverFlag=1;
		 }else if(marketmovers.netchange[z].indexOf("-") !=-1){
			moverIndicator=downindicator;
			moverFlag=-1
		 }else{
			moverIndicator="&nbsp;&nbsp;&nbsp;";
			moverFlag=0;
		 }
		 if(z%2==0){
			 
			 if(z==0 && moverFlag==1){
   				theString=theString+'<tr id="' +moverId + '" ' + 'class="odd posChange activeRow" onclick="javascript:doNav(\'' + marketmovers.symbol[z]   +'\')"><td>'+quoteName(marketmovers.symbol[z])+'</td><td>'+marketmovers.lastprice[z]+'</td><td class="marketChg">'+moverIndicator+marketmovers.netchange[z]+'</td><td>'+marketmovers.volume[z]+'</td></tr>';
			}
			 else if(moverFlag==1){
      				theString=theString+'<tr id="' +moverId + '" ' + 'class="odd posChange" onclick="javascript:doNav(\'' + marketmovers.symbol[z]   +'\')"><td>'+quoteName(marketmovers.symbol[z])+'</td><td>'+marketmovers.lastprice[z]+'</td><td class="marketChg">'+moverIndicator+marketmovers.netchange[z]+'</td><td>'+marketmovers.volume[z]+'</td></tr>';
			}else if(moverFlag=-1){
				theString=theString+'<tr id="' +moverId + '" ' + 'class="odd negChange" onclick="javascript:doNav(\'' + marketmovers.symbol[z]   +'\')"><td>'+quoteName(marketmovers.symbol[z])+'</td><td>'+marketmovers.lastprice[z]+'</td><td class="marketChg">'+moverIndicator+marketmovers.netchange[z]+'</td><td>'+marketmovers.volume[z]+'</td></tr>';
			}else{
				theString=theString+'<tr id="' +moverId + '" ' + 'class="odd" onclick="javascript:doNav(\'' + marketmovers.symbol[z]   +'\')"><td>'+quoteName(marketmovers.symbol[z])+'</td><td>'+marketmovers.lastprice[z]+'</td><td class="marketChg">'+moverIndicator+marketmovers.netchange[z]+'</td><td>'+marketmovers.volume[z]+'</td></tr>';
			}
     		}else{
			if(moverFlag==1){
      				theString=theString+'<tr id="' +moverId + '" ' + 'class="posChange"  onclick="javascript:doNav(\'' + marketmovers.symbol[z]   +'\')"><td>'+quoteName(marketmovers.symbol[z])+'</td><td>'+marketmovers.lastprice[z]+'</td><td class="marketChg">'+moverIndicator+marketmovers.netchange[z]+'</td><td>'+marketmovers.volume[z]+'</td></tr>';
			}else if(moverFlag==-1){
				theString=theString+'<tr id="' +moverId + '" ' + 'class="negChange" onclick="javascript:doNav(\'' + marketmovers.symbol[z]   +'\')"><td>'+quoteName(marketmovers.symbol[z])+'</td><td>'+marketmovers.lastprice[z]+'</td><td class="marketChg">'+moverIndicator+marketmovers.netchange[z]+'</td><td>'+marketmovers.volume[z]+'</td></tr>';
			}else{
				theString=theString+'<tr id="' +moverId + '" ' + ' onclick="javascript:doNav(\'' + marketmovers.symbol[z]   +'\')"><td>'+quoteName(marketmovers.symbol[z])+'</td><td>'+marketmovers.lastprice[z]+'</td><td>'+moverIndicator+marketmovers.netchange[z]+'</td><td>'+marketmovers.volume[z]+'</td></tr>';
			}
     		}
     }
    theString=theString+'</table>';    
    moversTargets.innerHTML=theString;

    var _space="&nbsp;&nbsp;";
    // placing Loan Center

		domNode("indexRow0").$().onmouseover=function(){changeHPMarker('indexRow0');};//changeHPMarker('indexRow0');
		domNode("indexRow1").$().onmouseover=function(){changeHPMarker('indexRow1');};//changeHPMarker('indexRow1');
		domNode("indexRow2").$().onmouseover=function(){changeHPMarker('indexRow2');};//changeHPMarker('indexRow2');
		domNode("indexRow3").$().onmouseover=function(){changeHPMarker('indexRow3');};//changeHPMarker('indexRow3');

		domNode("ftIndexRow0").$().onmouseover=function(){changeFTHPMarker('ftIndexRow0');};
		domNode("ftIndexRow1").$().onmouseover=function(){changeFTHPMarker('ftIndexRow1');};
		domNode("ftIndexRow2").$().onmouseover=function(){changeFTHPMarker('ftIndexRow2');};
		
		domNode("mmIndexRow0").$().onmouseover=function(){changeMMMarker('mmIndexRow0');};
		domNode("mmIndexRow1").$().onmouseover=function(){changeMMMarker('mmIndexRow1');};
		domNode("mmIndexRow2").$().onmouseover=function(){changeMMMarker('mmIndexRow2');};
		domNode("mmIndexRow3").$().onmouseover=function(){changeMMMarker('mmIndexRow3');};
		domNode("mmIndexRow4").$().onmouseover=function(){changeMMMarker('mmIndexRow4');};
		domNode("mmIndexRow5").$().onmouseover=function(){changeMMMarker('mmIndexRow5');};
		domNode("mmIndexRow6").$().onmouseover=function(){changeMMMarker('mmIndexRow6');};
		domNode("mmIndexRow7").$().onmouseover=function(){changeMMMarker('mmIndexRow7');};
		domNode("mmIndexRow8").$().onmouseover=function(){changeMMMarker('mmIndexRow8');};
		domNode("mmIndexRow9").$().onmouseover=function(){changeMMMarker('mmIndexRow9');};

		$('#indexRow0').click(function() { document.location.href ="http://quote.foxbusiness.com/symbol/i:dji/snapshot"; return false; });
		$('#indexRow1').click(function() { document.location.href ="http://quote.foxbusiness.com/symbol/i:comp/snapshot"; return false; });
		$('#indexRow2').click(function() { document.location.href ="http://quote.foxbusiness.com/symbol/inx/snapshot"; return false; });
		$('#indexRow3').click(function() { document.location.href ="/markets/market-overview.html?marketview=foxgrades"; return false; });

		
 changeHPMarker('indexRow0');


}

function changeHPMarker(row) {
  var trs = domNode('marketSlide marketIndices',0).$().getElementsByTagName("tr");
  var activeRow = getElementsByClass('activeRow')[0];
  var activecol = getElementsByClass('indicator')[0];
  activecol.innerHTML='';
  var row;
  //clear the last coloumns + the active row
  for (var c=1;c<trs.length;c++) {
       trs[c].getElementsByTagName("td")[3].innerHTML="&nbsp;";
       rw=c-1;
         domNode('indexRow'+rw).removeClassName('activeRow');
  }
	// put indicator in the new location
//	getElementsByClass('indicator',domNode(row).$(),'td')[0].innerHTML='<img src="/images/arrows_icons/arrow_marketPointer.gif" alt="Hilighted" />';	
  domNode(row).addClassName('activeRow');
  // replace chart
	var ticker = domNode(row).$().getElementsByTagName('th')[0].parentNode.getAttribute('id');   
  var overRow = ticker.substring(8);


  	if(indexdata !=null && "$i.dji" ==indexdata.symbol[overRow]){
                domNode('marketChart').$().setAttribute('src','http://www.foxbusiness.idmanagedsolutions.com/charts/indices/quote.chart?ID_NOTATION=324977&HEIGHT=85&WIDTH=253');
        }else if(indexdata !=null && "$I.COMPX" ==indexdata.symbol[overRow]){
                domNode('marketChart').$().setAttribute('src','http://www.foxbusiness.idmanagedsolutions.com/charts/indices/quote.chart?ID_NOTATION=324985&HEIGHT=85&WIDTH=253');
        }else if(indexdata !=null && "$INX" ==indexdata.symbol[overRow]){
                domNode('marketChart').$().setAttribute('src','http://www.foxbusiness.idmanagedsolutions.com/charts/indices/quote.chart?ID_NOTATION=4359526&HEIGHT=85&WIDTH=253');
        }else if(indexdata !=null && ("$I.FOX50" ==indexdata.symbol[overRow] || "FOX50" ==indexdata.symbol[overRow])){
                domNode('marketChart').$().setAttribute('src','http://www.foxbusiness.idmanagedsolutions.com/charts/indices/quote.chart?ID_NOTATION=19682584&HEIGHT=85&WIDTH=253');
        }
}
function changeMMMarker(row) {
	  var trs = domNode('marketSlide marketMovers',0).$().getElementsByTagName("tr");
	  var activeRow = getElementsByClass('activeRow')[0];
	  var row;
	  //clear the last coloumns + the active row
	  for (var c=1;c<trs.length;c++) {
		   rw=c-1;
	         domNode('mmIndexRow'+rw).removeClassName('activeRow');
	  }
		// put indicator in the new location
		domNode(row).addClassName('activeRow');
	}

function changeFTHPMarker(row) {
  var trs = domNode('futuremarketindices').$().getElementsByTagName("tr");
  var activeRow = getElementsByClass('activeRow')[0];
  var activecol = getElementsByClass('indicator')[0];
  activecol.innerHTML='';
  var row;
  //clear the last coloumns + the active row
  for (var c=1;c<trs.length;c++) {
       trs[c].getElementsByTagName("td")[3].innerHTML="&nbsp;";
       rw=c-1;
         domNode('ftIndexRow'+rw).removeClassName('activeRow');
  }
	// put indicator in the new location
	//getElementsByClass('ftindicator',domNode(row).$(),'td')[0].innerHTML='<img src="/images/arrows_icons/arrow_marketPointer.gif" alt="Hilighted" />';	
  domNode(row).addClassName('activeRow');
  
}


