var addClass = YAHOO.util.Dom.addClass;
var removeClass = YAHOO.util.Dom.removeClass;

// called when selecting one of Earnings, Dividends, or Splits in the top nav
var changeDisplay = function (type) {
    var elements = YAHOO.util.Dom.getElementsByClassName("menutab_on", "li", "earningsContainer");

	var el = elements[0];
	addClass(el,"menutab_off");
	removeClass(el,"menutab_on");

	el = $(sType+"Link");
	
    removeClass(el,"menutab_off");
    addClass(el,"menutab_on");

    if ( sType != type ) {
        sType = type;
        
        // record history
        recordRequestParams();
    }
    
    return false;
};

// handle successful response from server
var handleSuccess = function(o) {
	if( o.responseText !== undefined ) {
        
        addClass($("loadingPanel"),"hide");
        
        var buf = "";
        
		buf += parseResponse( eval("(" + o.responseText + ")") );
        
        var startTime;
		
		loadFrame.innerHTML = buf;
		$("copyright").innerHTML = copyright[sType];
		
		if ( sType == "earnings" ) {
            $("legend").show();
		} else {
            $("legend").hide();
        }
		
		if ( window.adjustNewsPanelHeight ) adjustNewsPanelHeight();
	}
};

// handles failure in response from server
var handleFailure = function(o) {
	if(o.responseText !== undefined) {
		loadFrame.innerHTML = "<h2>An error occured</h2>";
		loadFrame.innerHTML += "<p>Transaction id: " + o.tId + "</p>";
		loadFrame.innerHTML += "<p>HTTP status: " + o.status + "</p>";
		loadFrame.innerHTML += "<p>Status code message: " + o.statusText + "</p>";
	}
};

// callback for AJAX requests
var callback =
{
  success:handleSuccess,
  failure:handleFailure,
  timeout: 60000, 
  argument: {}
};

// AJAX request call
var makeRequest = function () {
    // show loading text
    removeClass($("loadingPanel"),"hide");
    
	var request = YAHOO.util.Connect.asyncRequest('GET', 
        sUrl + "type=" + sType + sRequiredParams + sFilters, callback);
};


var recordRequestParams = function () {
    var requiredParams = sType + sRequiredParams.replace(/&/g,"_amp_").replace(/\=/g,"_eq_") + 
        sFilters.replace(/&/g,"_amp_").replace(/\=/g,"_eq_");

    YAHOO.util.History.navigate( "rq", requiredParams );
};

var updateDate = function () {
	
    var selectedDate = $("dateSelect").value;
	var startDate, endDate;
	var separator = selectedDate.indexOf("_");
	
	if ( selectedDate == "" ) {
		// do nothing
	} else if ( separator != -1 ) {
		startDate = selectedDate.substr( 0, separator );
		endDate = selectedDate.substr( separator+1, selectedDate.length );
		sRequiredParams = "&start_date=" + startDate + "&end_date=" + endDate;
	} else {
		sRequiredParams = "&start_date=" + selectedDate + "&end_date=" + selectedDate;
	}
    
    recordRequestParams();
	
};

// get filtered results based on the event selector
var getResults = function (el) {
	
    var industry = $("industry");
    var index = $("index");
    var exchange = $("exchange");
	
	if ( el == industry ) {
		index.selectedIndex = 0;
		exchange.selectedIndex = 0;
    	sFilters = "&industry=" + industry.value;
	} else if ( el == index ) {
		industry.selectedIndex = 0;
		exchange.selectedIndex = 0;
		sFilters = "&index_id=" + index.value;
	} else if ( el == exchange )  {
		index.selectedIndex = 0;
		industry.selectedIndex = 0;
		sFilters = "&exchange_code=" + exchange.value;
	} else {
		index.selectedIndex = 0;
		industry.selectedIndex = 0;
		exchange.selectedIndex = 1;
		sFilters = "&exchange_code=" + exchange.value;
	}
    
    recordRequestParams();
	
};

// takes in a JSON object and outputs appropriate HTML
var parseResponse = function (response) {
    
    var buf = new Array();
    var rows = response["data"];
    var n = rows.length;
    var startTime;
	var j = 0;
	
    if ( response["type"] == "earnings" ) {                     // EARNINGS CALL
    
        title = "<div class=\"title\">Earnings</div>";
        
        if ( n == 0 ) {
            buf.push( "<p>" + response["message"] + "</p>" );
        } else {
            
            var curDate = "";
            var header = "<tr class=\"second\"><td class=\"first\" id=\"companyCol\">Company</td><td id=\"symbolCol\">Symbol</td><td id=\"quarterCol\">Qtr.</td><td id=\"statusCol\">Status</td><td id=\"timeCol\">Time</td><td class=\"eps\" id=\"estimateCol\">Estimate $</td><td class=\"eps\" id=\"actualCol\">Actual $</td><td class=\"eps\" id=\"yearAgoCol\">Year Ago $</td><td class=\"eps\" id=\"actualVsEstimateCol\">Act. vs. Est. %</td><td class=\"eps\" id=\"actualVsYearAgoCol\">Act. vs. Yr. Ago %</td></tr></thead><tbody>";
            
            for ( var i=0; i<n; ++i ) {
                
                var row = rows[i];
                
                if ( curDate != row["longDate"] ) {
					j = 0;
                    curDate = row["longDate"];
                    buf.push( i>0 ? "</tbody></table>" : "" );
                    buf.push( "<table cellspacing=\"1\" class=\"earnings\"><thead><tr><td class=\"first\" colspan=\"5\">" + curDate + "</td><td class=\"eps\" colspan=\"5\">EPS</td></tr>" );
                    buf.push( header );
                }
				
				var className = ( j%2 == 0 ) ? "even" : "odd";
                
                var tr  = "<tr class=\"" + className + "\" id=\"row" + i + "\">";
                
                tr += "<td class=\"first\"><a href=\"" + companyUrl + row["companyId"] + "\" title=\"View company snapshot\">" + row["company"] + "</a></td>";
                    
                tr += "<td><a title=\"View stock quote\" class=\"quotelink\" href=\"" + quoteUrl + row["symbol"] + "\">" + row["symbol"] + "</a></td>";
                
                tr += "<td>" + row["fiscalQuarter"] + row["fiscalYear"] + "</td>";
                
                if ( row["status"] != "" ) {
                    tr += "<td>" + row["status"] + "</td>";
                } else {
                    tr += "<td>&nbsp;</td>";
                }
                
                tr += "<td>" + row["time"] + "</td>";
                
                var epsEstimate =  row["epsEstimate"];
                tr += "<td " + ( epsEstimate == "-" ? "class=\"na\""  : "" ) + ">" + epsEstimate + "</td>";
                
                var epsActual =  row["epsActual"];
                tr += "<td " + ( epsActual == "-" ? "class=\"na\""  : "" ) + ">" + epsActual + "</td>";
                
                var epsYearAgo =  row["epsYearAgo"];
                tr += "<td " + ( epsYearAgo == "-" ? "class=\"na\""  : "" ) + ">" + epsYearAgo + "</td>";
                
                var percent = parseFloat (row["epsActualVsEstimate"] );
                
                if ( isNaN(percent) || percent == 0 ) {
                    tr += "<td class=\"na\">-</td>";
                } else if ( percent > 0 ) {
                    tr += "<td><span class=\"positive\">+" + row["epsActualVsEstimate"] + "</span></td>";
                } else if ( percent < 0 ) {
                    tr += "<td><span class=\"negative\">" + row["epsActualVsEstimate"] + "</span></td>";
                }
                
                percent = parseFloat (row["epsActualVsYearAgo"] );
                
                if ( isNaN(percent) || percent == 0 ) {
                    tr += "<td class=\"na\">-</td>";
                } else if ( percent > 0 ) {
                    tr += "<td><span class=\"positive\">+" + row["epsActualVsYearAgo"] + "</span></td>";
                } else if ( percent < 0 ) {
                    tr += "<td><span class=\"negative\">" + row["epsActualVsYearAgo"] + "</span></td></tr>";
				}
                
                buf.push( tr );   
				
				++j;
            } // for
            
            buf.push( "</tbody></table>" );
        
        } // if
        
    } else if ( response["type"] == "dividends" ) {                     // DIVIDENDS CALL
    
        title = "<div class=\"title\">Dividends</div>";
        
        if ( n == 0 ) {
            buf.push( "<p>" + response["message"] + "</p>" );
        } else {
        
            var header = "<tr class=\"second\"><td class=\"first\" id=\"companyCol\">Company</td><td id=\"symbolCol\">Symbol</td><td id=\"amountCol\">Amount $</td><td id=\"dateCol\">Payable Date</td></tr></thead><tbody>";

            for ( var i=0; i<n; ++i ) {
				
                var row = rows[i];
                
                if ( curDate != row["longDate"] ) {
					j = 0;
                    curDate = row["longDate"];
                    buf.push( i>0 ? "</tbody></table>" : "" );
                    buf.push( "<table cellspacing=\"1\"  class=\"dividends\"><thead><tr><td class=\"first\" colspan=\"4\">" + curDate + "</td></tr>" );
                    buf.push( header );
                }
				
				var className = ( j%2 == 0 ) ? "even" : "odd";

                var tr = "<tr class=\"" + className + "\" id=\"row" + i + "\">";
                 
                tr += "<td class=\"first\"><a href=\"" + companyUrl + row["companyId"] + "\" title=\"View company snapshot\">" + row["company"] + "</a></td>";
                
                tr += "<td><a title=\"View stock quote\" class=\"quotelink\" href=\"" + quoteUrl + row["symbol"] + "\">" + row["symbol"] + "</a></td>";
                
                tr += "<td>" + row["amount"] + "</td>" + "<td>" + row["payDate"] + "</td>" + "</tr>";
                
                buf.push( tr );
				
				++j;
            } // for
            
            buf.push( "</tbody></table>" );
        } // if
        
    } else if ( response["type"] == "splits" ) {                     // SPLITS CALL
    
        title = "<div class=\"title\">Splits</div>";
        
        if ( n == 0 ) {
            buf.push( "<p>" + response["message"] + "</p>" );
        } else {
        
            var header = "<tr class=\"second\"><td class=\"first\" id=\"companyCol\">Company</td><td id=\"symbolCol\">Symbol</td><td id=\"ratioCol\">Ratio</td></tr></thead><tbody>";

            for ( var i=0; i<n; ++i ) {
                
                var row = rows[i];
                
                if ( curDate != row["longDate"] ) {
					j = 0;
                    curDate = row["longDate"];
                    buf.push( ( i>0 ? "</tbody></table>" : "" ) + "<table cellspacing=\"1\"  class=\"splits\"><thead><tr><td class=\"first\" colspan=\"3\">" + curDate + "</td></tr>" );
                    buf.push( header );
                }
				
				var className = ( j%2 == 0 ) ? "even" : "odd";

                var tr = "<tr class=\"" + className + "\" id=\"row" + i + "\">";
                
                tr += "<td class=\"first\"><a href=\"" + companyUrl + row["companyId"] + "\" title=\"View company snapshot\">" + row["company"] + "</a></td>";
                
                tr += "<td><a title=\"View stock quote\" class=\"quotelink\" href=\"" + quoteUrl + row["symbol"] + "\">" + row["symbol"] + "</a></td>";
                
                tr += "<td>" + row["ratio"] + "</td>" + "</tr>";
                
                buf.push( tr );
				
				++j;
            } // for
            
            buf.push( "</tbody></table>" );
        } // if
    } // if
    
    return buf.join('');
};