
var selected_data = "|";
var plot_x_label="Mkt YTD Return (%)", plot_y_label="Expense Ratio";

var col_start =0, col_end = 8, total_rows = 0, total_etfs = 0,  v_cat_section = "", v_select_all = 0;
var s_etf_data   = "";
var etf_criteria_info  = new Array();
var compareArray       = new Array();
var standardFieldName  = new Array();
standardFieldName[0]   = "Fund Name"
standardFieldName[1]   = "Ticker"

var last_k = 6, k0=0, bTime = -1;
var curRowCount = 0, iTo = 20, maxCol = 20;
var sel_tickers = "";
var nScatter    = 0;
var bScatter    = true;
var v_category  = "", v_family = "";
var n_page      = 1, n_begin_page  = 1, n_total_page = 0;
var n_sort_col  = -1, n_sort_field = -1, n_sortOder = 0,  n_sort_ticker = "";
var user_type   = "", v_ETF_Leverage = "", v_leverage_no_yes = "";
var debug       = 0; /// to check open and save operations

var ar_options  = new Array("10", "20", "35", "50", "100");
var n_selected  = 1, n_mx_page = 1;
var n_cri_number="";
// Barclays Global Investors
// BLDRS
// Claymore Securities
// Credit Suisse
// Deutsche Bank AG
// Direxionfunds
// Fidelity Investments
// First Trust
// Global X Funds
// GreenHaven
// HSBC Bank
// IndexIQ
// JPMorgan
// MacroMarkets
// Merrill Lynch
// PDR Services LLC
// PowerShares
// Rydex
// UBS AG
// Van Eck
// Vanguard
// WisdomTree
// XShares
/// 
var Criteria_parent = new Array();
//Criteria_parent[0]="Default Criteria"
Criteria_parent[0]="Quote"
Criteria_parent[1]="Performance"
Criteria_parent[2]="Fundamental"
Criteria_parent[3]="Valuation"
Criteria_parent[4]="Nuts & Bolts"
Criteria_parent[5]="Portfolio Style"
/// quote

//ETF Fund Family
//// Barclays Global Investors|Claymore
var FundFamily = new Array();
FundFamily[0]="Barclays"
FundFamily[1]="BLDRS"
FundFamily[2]="Fidelity Group"
FundFamily[3]="Nasdaq-Amex Investment Prod Svcs"
FundFamily[4]="PDR SERVICES LLC"
FundFamily[5]="Powershares"
FundFamily[6]="Rydex"
FundFamily[7]="State Street Global Advisors"
FundFamily[8]="Vanguard"
FundFamily[9]="World Gold Trust Services, LLC"

var i_currView = 0;

var v_category_number    = new Array();
var v_category_array     = new Array();
var s_etf_category ="Large Value|Large Blend|Large Growth|Mid-Cap Value|Mid-Cap Blend|Mid-Cap Growth|Small Value|Small Blend|Small Growth"
s_etf_category +="|Natural Resources|Technology|Utilities|Health|Financial|Real Estate|Communications|Miscellaneous Sector|Consumer Discretionary|Consumer Staples|Equity Energy|Industrials|Equity Precious Metals";    
s_etf_category +="|Foreign Large Value|Foreign Large Blend|Foreign Large Growth|Foreign Small/Mid Value|Foreign Small/Mid Growth|World Stock"      
s_etf_category +="|Europe Stock|Diversified Pacific/Asia|Pacific/Asia ex-Japan Stk|Japan Stock|Latin America Stock|Diversified Emerging Mkts"
s_etf_category +="|Global Real Estate|Long Government|Intermediate Government|Short Government|Inflation-Protected Bond|Long-Term Bond"
s_etf_category +="|Intermediate-Term Bond|Short-Term Bond|Ultrashort Bond|Bank Loan|High Yield Bond|Multisector Bond|World Bond|Emerging Markets Bond"
s_etf_category +="|Conservative Allocation|Moderate Allocation|World Allocation|Currency|Long-Short|Bear Market"         
s_etf_category +="|Barclays Global Investors|Claymore Securities|Deutsche Bank AG|Direxionfunds|PowerShares|ProShares|Rydex|Van Eck|Vanguard"
/// new Commodities categories
s_etf_category +="|Agriculture|Broad Basket|Energy|Industrial Me|Miscellaneous|Precious Meta"
//s_etf_category +="|Commodities Agriculture|Commodities Broad Basket|Commodities Energy|Commodities Industrial Me|Commodities Miscellaneous|Commodities Precious Meta"

/// new sector categories
//s_etf_category +="|Consumer Discretionary|Consumer Staples|Equity Energy|Industrials";


var etf_name = "Day Change %|Morningstar Ratings|Market Return 1-Month|Market Return 3-Month|Historical Earnings Growth (%)|Sales Growth %|"
etf_name += "Cash Flow Growth %|Price/Trailing Earnings|Price/Cash Flow|Price/Book|Price/Sales|"
etf_name += "Market Return YTD|Expense Ratio (%)|Average Market Cap ($ mil)|Total Assets ($ mil)|Market Return 1-Year|Market Return 3-Year|"
etf_name += "Market Return 5-Year|NAV YTD Return (%)|NAV Return 1-Year|NAV Return 3-Year |NAV Return 5-Year|Standard Deviation (%)|"
etf_name += "Sharpe Ratio (%)|3-Year Tax Cost Ratio (%)|5-Year Tax Cost Ratio (%)|Style Box|P/E Ratio|P/B Ratio|Turnover (%)|"
etf_name += "% Assets in Top 10 Holdings|Yield (%)|Average Daily Volume|"; //Exchange|Fund Family"
etf_name += "Price/Fair Value|52 Wk Price Change %|Premium/Discount|% Above 52 Wk Low|% Below 52 Wk High|"
etf_name += "Software|Hardware|Media|Telecommunications|Healthcare|Consumer Services|Business Services|Financial Services|Consumer Goods|IndustrialMaterials|Energy|Utilities|"
etf_name += "Worst 3 Mo Return|3yr Standard Deviation|1yr Standard Deviation|1yr Beta|"
etf_name += "United States|Canada|Latin America|United Kingdom|Eurozone|Europe - ex Euro|Europe - Emerging|Africa|Middle East|Japan|Australasia|Asia - Developed|Asia - Emerging|Developed Markets|Emerging Markets|"
etf_name += "Return on Equity Trailing 12 months|"
etf_name += "Energy|Materials|Industrials|Consumer Discretionary|Consumer Staples|Health Care|Financials|Information Technology|Telecommunication Services|Utilities|"
etf_name += "Expected Return %|Hurdle Rate %|Excess Return %|FairValue|Consider Buying|Consider Selling|"
etf_name += "Coverage Rate %|Moat Percent Wide|Moat Percent Narrow|Moat Percent None|Fixed Income Duration|"
etf_name += "Dow Jones Industrial Average|S&P SmallCap 600 Index|MSCI EAFE|Russell 1000|Russell 2000|Russell 3000|Standard & Poor's 500|S&P 400 MidCap Index|NASDAQ";


var etf_col = "PriceChange,Rating3Year,DailyMarketReturn4Week,DailyMarketReturn13Week,ForecastedEarningsGrowthRate,ForecastedRevenueGrowthRate,"
etf_col += "ForecastedCashFlowGrowthRate,PTETtm,PTCTtm,PTBTtm,PTSTtm,"
etf_col += "DailyMarketReturnYTD,LastExpenseRatio,MMC,FundNetAssetsInMillion,DailyMarketReturn52Week,DailyMarketReturn156Week,"
etf_col += "DailyMarketReturn260Week,DailyNAVReturn,DailyNAVReturn52Week,DailyNAVReturn156Week,DailyNAVReturn260Week,StandardDeviation3Year,"
etf_col += "SharpeRatio3Year,TaxCostRatio3Year,TaxCostRatio5Year,StockStyleBox,ProspectiveEarningsYield,ProspectiveBookValueYield,LastTurnoverRatio,"
etf_col += "Top10HoldingAssetsPercent,MonthlyYield,Volume,";//ExchangeId,FundFamilyName"
etf_col += "PriceOverFairValue,PriceChangePct52Wk,PremiumOverDiscount,PctAbove52WkLow,PctBelow52WkHigh,"
etf_col += "Sector0,Sector1,Sector2,Sector3,Sector4,Sector5,Sector6,Sector7,Sector8,Sector9,Sector10,Sector11,"
etf_col += "Worst3Month,StandardDeviation1Year,StandardDeviation3Year,Beta1Year,"
etf_col += "Region1,Region2,Region3,Region4,Region5,Region6,Region7,Region8,Region9,Region10,Region11,Region12,Region13,RegionDeveloped,RegionEmerging,"
etf_col += "ROETtm,"
etf_col += "GICSSector0,GICSSector1,GICSSector2,GICSSector3,GICSSector4,GICSSector5,GICSSector6,GICSSector7,GICSSector8,GICSSector9,"
etf_col += "ExpectedReturn,HurdleRate,ExcessReturn,FairValue,ConsiderBuy,ConsiderSell,"
etf_col += "CoverageRate,MoatPercentWide,MoatPercentNarrow,MoatPercentNone,FixedIncomeDuration,"
etf_col += "RSquared3Yr_DJIA,RSquared3Yr_SPSmallCap,RSquared3Yr_MSCIEAFE,RSquared3Yr_Russell1000,RSquared3Yr_Russell2000,RSquared3Yr_Russell3000,RSquared3Yr_SP500,RSquared3Yr_SPMidCap400,RSquared3Yr_NASDAQ"

var etf_col_width = "PriceChange,Rating3Year,DailyMarketReturn4Week,DailyMarketReturn13Week,ForecastedEarningsGrowthRate,ForecastedRevenueGrowthRate,"
etf_col_width += "ForecastedCashFlowGrowthRate,PTETtm,PTCTtm,PTBTtm,PTSTtm,"
etf_col_width += "DailyMarketReturnYTD,LastExpenseRatio,MMC,FundNetAssetsInMillion,DailyMarketReturn52Week,DailyMarketReturn156Week,"
etf_col_width += "DailyMarketReturn260Week,DailyNAVReturn,DailyNAVReturn52Week,DailyNAVReturn156Week,DailyNAVReturn260Week,StandardDeviation3Year,"
etf_col_width += "SharpeRatio3Year,TaxCostRatio3Year,TaxCostRatio5Year,StockStyleBox,ProspectiveEarningsYield,ProspectiveBookValueYield,LastTurnoverRatio,"
etf_col_width += "Top10HoldingAssetsPercent,MonthlyYield,Volume,";//ExchangeId,FundFamilyName"
etf_col_width += "PriceOverFairValue,PriceChangePct52Wk,PremiumOverDiscount,PctAbove52WkLow,PctBelow52WkHigh,"
etf_col_width += "Sector0,Sector1,Sector2,Sector3,Sector4,Sector5,Sector6,Sector7,Sector8,Sector9,Sector10,Sector11,"
etf_col_width += "Worst3Month,StandardDeviation1Year,StandardDeviation3Year,Beta1Year,"
etf_col_width += "Region1,Region2,Region3,Region4,Region5,Region6,Region7,Region8,Region9,Region10,Region11,Region12,Region13,RegionDeveloped,RegionEmerging,"
etf_col_width += "ROETtm,"
etf_col_width += "GICSSector0,GICSSector1,GICSSector2,GICSSector3,GICSSector4,GICSSector5,GICSSector6,GICSSector7,GICSSector8,GICSSector9,"
etf_col_width += "ExpectedReturn,HurdleRate,ExcessReturn,FairValue,ConsiderBuy,ConsiderSell,"
etf_col_width += "CoverageRate,MoatPercentWide,MoatPercentNarrow,MoatPercentNone,FixedIncomeDuration,"
etf_col_width += "RSquared3Yr_DJIA,RSquared3Yr_SPSmallCap,RSquared3Yr_MSCIEAFE,RSquared3Yr_Russell1000,RSquared3Yr_Russell2000,RSquared3Yr_Russell3000,RSquared3Yr_SP500,RSquared3Yr_SPMidCap400,RSquared3Yr_NASDAQ"

var viewArray    = new Array();
var defViewData  = new Array();

var v_data       = new Array();

var v_results    = new Array();
var v_results_ar = new Array();
var v_criteria   = new Array();
var v_cat_name   = new Array();
var v_stock_exposure  = new Array();
v_cat_name[0] = {sort:-1, ticker:"Symbol"};
v_cat_name[1] = {sort:-1, ticker:"StandardName"};
v_cat_name[2] = {sort:-1, ticker:"CategoryName"};
/// all column or data points min and max with index
var v_back_info = new Array();
var v_back_bars = new Array();
var v_back_mnmx = new Array();
var v_min_max   = new Array();

function get_start_time()
{
   var d = new Date();
   k0 = d.getTime();
}
function show_end_time(v)
{
    var d = new Date();
    var k= parseInt(d.getTime())
    alert(v+ " seconds = "+ ((k - k0)*0.001))
}
function totalPages()
{
   n_total_page = parseInt(total_rows/20 +"") +1;
}
function EncodeUrl(str)
{
	var r = /%/g;
	str = str.replace(r,"%25" );
	r = /&/g;
	str = str.replace(r,"%26" );
	r = /\+/g;
	str = str.replace(r,"%2B" );
	r = /\//g;
	str = str.replace(r,"%2F" );
	r = /#/g;
	str = str.replace(r,"%23" );
	r = /\?/g;
	str = str.replace(r,"%3F" );
	return str;
}

function free_trial()
{
    document.location.href = "http://members.morningstar.com/memberstpages/portfoliolp.html"
}
function getParameters(v)
{
    var url = getCriteria()
    if (v == 1 )
       return url;
    while (url.indexOf('&')>=0)
    {
		url = url.replace('&', '!');
    }
    return url + "&family="+ v_family + "&category="+ v_category +"&stocks="+ getExposuresStocks()+  "&sort="+ n_sort_ticker +"&sortOrder=" +n_sortOder+ "&leverage=" +v_leverage;;
}
function check_member()
{ 
	var cri  =  "criteria="+ getParameters(0)
	cri     += "&levelOne="+levelOne+"&levelTwo="+levelTwo + "&cat_levelOne="+cat_levelOne+"&cat_levelTwo="+ cat_levelTwo +"&open=" + m_open;	
 	//if (user_type != "")//&& user_type != "P"  )
	{
		var url = "http://" + window.location.hostname + window.location.pathname + "?" + cri;	
		url = EncodeUrl(url);
		document.location.href = "http://members.morningstar.com/forbidden/loginrawP.html?vurl=" + url + "&referid=A2723";
	}
}

function login_member()
{ 
//	var currentPath = window.location.pathname.toUpperCase();	

	var cri  =  "criteria="+ getParameters(0)
	cri     += "&levelOne="+levelOne+"&levelTwo="+levelTwo + "&cat_levelOne="+cat_levelOne+"&cat_levelTwo="+ cat_levelTwo +"&open=" + m_open;	
 	//if (user_type != "")//&& user_type != "P"  )
	{
		var url = "http://" + window.location.hostname + window.location.pathname + "?" + cri;	
		url = EncodeUrl(url);
		if (v_UserType == null || v_UserType == "")
			document.location.href = "http://members.morningstar.com/forbidden/loginrawP.html?vurl=" + url + "&referid=A2723";
	}
}
function initialize_premium_criteria()
{
     if (debug < 1)
     {
		if (v_UserType != null && v_UserType != "")
		{
			
			$(".hide_pri").show();
			$(".pri_box_h").hide();
		}
	}
}
///  new
function getExposuresStocks()
{
   var temp="";
   for (var i=0; i< v_stock_exposure.length; i++)
   {
     if (i ==0 )
       temp = v_stock_exposure[i].ticker;
     else
       temp = temp +"|"+  v_stock_exposure[i].ticker;
   }
   return temp;
}
function getCriteria()
{
    var url = "";
    for (var i=0; i< v_criteria.length; i++)
    {
       if (url == "")
       {
			url += ("collumn"+ i +"=")
			url += v_criteria[i].ColumnName
			url += ("&low" +i +"=");
			url += v_criteria[i].low
			url += ("&high" +i +"=");
		    url += v_criteria[i].high
       }else{       
			url += ("&collumn"+ i +"=")
			url += v_criteria[i].ColumnName
			url += ("&low" +i +"=");
			url += v_criteria[i].low
			url += ("&high" +i +"=");
		    url += v_criteria[i].high
	   }
    }
    return url;
}
function UpdateNumberOfCriretia(strNum)
{
   var s = strNum.split('|');
   for (var i=0; i< v_criteria.length; i++)
   {
      findObj("numOf"+v_criteria[i].ColumnName).innerHTML   = '<span class="nr_ii">'+s[i]+'</span>';
   }
}
function set_pre_default_Data(parameter){
	initializeCategory()
    var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="production.aspx?"+parameter + "&family="+ v_family + "&category="+ v_category +"&stocks="+ getExposuresStocks()+  "&sort="+ n_sort_ticker +"&sortOrder=" +n_sortOder+ "&leverage=" +v_leverage+"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { process_pre_default_Data(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
    return false;
}
function process_pre_default_Data(xmlhttp){
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
				  	var temp    = xmlhttp.responseText; 
		  			if (temp != "")
	                {	 
	                   selected_data = "";
		 			   curRowCount = 0;
		 			   iTo  = maxCol;       
		 			   var tmp1    = temp.split('%');
		 			   var tmp     = tmp1[0].split('^');
		 			   v_min_max   = tmp1[1].split('^');
		 			   v_back_mnmx = tmp1[2].split('#');
		 			
		 			   v_back_info = tmp1[3].split('^');
		 			   v_back_bars = tmp1[4].split('^');
		 				  // 		   alert(temp)    
		 			   v_data          = new Array();
	                   for (var i=0; i< tmp.length; i++)
	                   {
	                        var s   = tmp[i].split('#');
	                        v_data[i] = {ticker:s[0], name:s[1], category: s[2], family: s[3], data:s[4], weighting: s[5] , leverage: s[6], flag: 1, checked:0};//,
	                      //  alert(s[4])
	               	   }
	               	   update_category_number(tmp1[6])
	               	   total_etfs = tmp1[7],
	               	   total_rows = v_data.length;
	                   if (Mstar_Screen != "" )
					   {
					      Mstar_Screen = Mstar_Screen.toUpperCase()
					      if (Mstar_Screen.indexOf("LOWEST") >=0 )
					         morningStar_screen(0)
					      else  if (Mstar_Screen.indexOf("MOST") >=0 )
					         morningStar_screen(1)
					      else  if (Mstar_Screen.indexOf("YTD") >=0 )
					         morningStar_screen(2)
					      else
					         pre_defaultCriteria()
					   }else
	               	      pre_defaultCriteria()
	               	    set_mstar_screen();
	                  	/// critereia number and change category number
						v_results = v_data;
						n_cri_number = tmp1[5];
						UpdateNumberOfCriretia(tmp1[5])
					    v_leverage_no_yes = tmp1[8];
					    resetLeverage()
						resetCategory(v_cat_section)
						/// end of update
						document.body.style.cursor = 'default';
	                    findObj("detail_table").innerHTML = getTable_view(v_data);  
	                    if (bTime >0)
						{
 							show_end_time("complete all: ")
							get_start_time()
						}
		 		
	                }else
	                   alert("Empty return data of process_Results_Data()");
		 		   
				}catch(ex)
				{
					  // alert(ex + "xxxxx in process_Results_Data()");
				}				
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in process_Results_Data End");
	 }
}
function pre_defaultCriteria()
{
    v_criteria      = new Array();
    var ticker_ar   = new Array();
    var name_ar     = new Array();
    var low_ar      = new Array();
    var high_ar     = new Array();
	if (etf_criteria != "")
	{
		var tt = etf_criteria.split('&');
		for (var k=0; k< tt.length; k++)
		{
		    if (tt[k].indexOf("family")>=0)
		       break;
			
		    var v = tt[k].substring(tt[k].indexOf('=')+1);
			if ( k == 0 || k%3 == 0) 
				    ticker_ar[ticker_ar.length] = v;
			else if(k == 1 ||  k%3 == 1) 
				    low_ar[low_ar.length] = v;
			else if (k == 3 || k %3 == 2 ) 
				    high_ar[high_ar.length] = v;
	
		}
		for (var k=0; k< ticker_ar.length; k++)
		{
			var N = getColumnIndex_1(ticker_ar[k]);
			var mx          = v_min_max[N];
			var mx_ar       = mx.split('|');
			var num = getNumberOfETF(v_back_info[N]);
			/// should add reset criteria here
			/// ticker_ar[k] is ID
			
			///
			addRowToTable(v_fields_name_array[N], num, ticker_ar[k],v_back_bars[N], v_back_info[N], v_back_mnmx[N], mx_ar[0], mx_ar[1],  low_ar[k], high_ar[k]);
		    
			//alert(ticker_ar[k] +"  "+ low_ar[k] +"  "+ high_ar[k]);
		}		   
	}
  
}

function reset_leverageResults_Data(parameter){

	initializeCategory()
    var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="production.aspx?"+ parameter + "&family="+ v_family + "&category="+ v_category +"&stocks="+ getExposuresStocks()+  "&sort="+ n_sort_ticker +"&sortOrder=" +n_sortOder+ "&leverage=" +v_leverage+"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { process_Leverage_Results_Data(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
    return false;
}

function process_Leverage_Results_Data(xmlhttp){
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
				    if (bTime >0)
					{
 						show_end_time("from server getResults_Data: ")
						get_start_time()
					}
		 			var temp    = xmlhttp.responseText; 
		 			if (temp != "" && temp.indexOf('%')>= 0 )
	                {	 
	                   selected_data = "";
		 			   curRowCount = 0;
		 			   iTo  = maxCol;   
		 	
		 			   var tmp1    = temp.split('%');
		 			   var tmp     = tmp1[0].split('^');
		 			   v_data          = new Array();
	                   for (var i=0; i< tmp.length; i++)
	                   {
	                        var s   = tmp[i].split('#');
	                        v_data[i] = {ticker:s[0], name:s[1], category: s[2], family: s[3], data:s[4], weighting: s[5],leverage:s[6], flag: 1, checked:0};//,
	                      //   alert(s[4])
	               	   }
	               	   total_rows = v_data.length;
	               	   n_cri_number = tmp1[5];
	               	   UpdateNumberOfCriretia(tmp1[5])
	               	   update_category_number(tmp1[6])
	               	   total_etfs  = tmp1[7],
	               	   v_leverage_no_yes = tmp1[8];
	                   v_results = v_data;
	                   resetCategory(v_cat_section)
	           
	               	   document.body.style.cursor = 'default';
	                   findObj("detail_table").innerHTML = getTable_view(v_data);  
	                   if (bTime >0)
					   {
 							show_end_time("after getTable_view: ")
							get_start_time()
					   }	             
	                }else{
	                   UpdateNumberOfCriretia(temp)
	                   v_results = v_data;
	                   resetCategory(v_cat_section)
	                   v_data          = new Array();
	                   total_rows = v_data.length;
	                   document.body.style.cursor = 'default';
	                   findObj("detail_table").innerHTML = getTable_view(v_data); 
	                } 
	                v_category_flag = 0;
		 		   
				}catch(ex)
				{
					   alert(ex + "in xxxx   process_Leverage_Results_Data()");
				}				
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in process_Results_Data End");
	 }
}
function resetRCategory_Data(){

    var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="production.aspx?"+ getCriteria()+ "&family="+ v_family + "&category="+ v_category +"&stocks="+ getExposuresStocks()+  "&sort="+ n_sort_ticker +"&sortOrder=" +n_sortOder+ "&leverage=" +v_leverage+"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { process_New_Category_Data(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
    return false;
}

function process_New_Category_Data(xmlhttp){
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
				    if (bTime >0)
					{
 						show_end_time("from server getResults_Data: ")
						get_start_time()
					}
		 			var temp    = xmlhttp.responseText; 
	
		   			if (temp  == "no_exposure" )
		 			{
		 			   $("#exposure1").hide();
		 			   
		 			   //$("#etf_not_found").html("We could not find the security <b>"+v_exposure_ticker+"</b>")
						// message
						$("#exp_msg_title").html('<span class="alert_msg">We could not find the security '+v_exposure_ticker+'</span>')
						$("#exp_msg_title, #exp_msg").fadeIn();
						
						$.timer(2000, function (timer) {
						$("#exp_msg").fadeOut("" );
					 
						timer.stop();
						}); 
				 		v_stock_exposure.length = v_stock_exposure.length -1;   
		 			   return;
		 			} 
		 			//Change_Exposure(v_exposure_ticker); should be deleteed
		  			if (temp != "" && temp.indexOf('%')>= 0 )
	                {	 
	                   selected_data = "";
		 			   curRowCount = 0;
		 			   iTo  = maxCol;   
		 	
		 			   var tmp1    = temp.split('%');
		 			   var tmp     = tmp1[0].split('^');
		 			   v_data      = new Array();
	                   for (var i=0; i< tmp.length; i++)
	                   {
	                        var s   = tmp[i].split('#');
	                        v_data[i] = {ticker:s[0], name:s[1], category: s[2], family: s[3], data:s[4], weighting: s[5],leverage:s[6], flag: 1, checked:0};//,
	                      //   alert(s[4])
	               	   }
	                   total_rows = v_data.length;
	               	   n_cri_number = tmp1[5];
	               	   UpdateNumberOfCriretia(tmp1[5])
	               	   total_etfs  = tmp1[7],
	               	   v_leverage_no_yes = tmp1[8];
	      
	                   resetLeverage()
	       
	                   v_results = v_data;
	   
	  	           	   document.body.style.cursor = 'default';
	                   findObj("detail_table").innerHTML = getTable_view(v_data);  
	                   if (bTime >0)
					   {
 							show_end_time("after getTable_view: ")
							get_start_time()
					   }
            
	                }else{		              
	                   v_results = v_data;
	                   v_data          = new Array();
	                   total_rows = v_data.length;
	                   document.body.style.cursor = 'default';
	                   findObj("detail_table").innerHTML = getTable_view(v_data); 
	                }
	                v_category_flag = 0;
		 		   
				}catch(ex)
				{
					   alert(ex + "in xxxx   process_New_Category_Data()");
				}				
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in process_Results_Data End");
	 }
}

function resetResults_Data(){

	initializeCategory()
    var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="production.aspx?"+ getCriteria()+ "&family="+ v_family + "&category="+ v_category +"&stocks="+ getExposuresStocks()+  "&sort="+ n_sort_ticker +"&sortOrder=" +n_sortOder+ "&leverage=" +v_leverage+"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { process_New_Results_Data(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
    return false;
}

function process_New_Results_Data(xmlhttp){
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
				    if (bTime >0)
					{
 						show_end_time("from server getResults_Data: ")
						get_start_time()
					}
		 			var temp    = xmlhttp.responseText; 
		   			if (temp  == "no_exposure" )
		 			{
		 			   $("#exposure1").hide();
		 			   
		 			   //$("#etf_not_found").html("We could not find the security <b>"+v_exposure_ticker+"</b>")
						// message
						$("#exp_msg_title").html('<span class="alert_msg">We could not find the security '+v_exposure_ticker+'</span>')
						$("#exp_msg_title, #exp_msg").fadeIn();
						
						$.timer(2000, function (timer) {
						$("#exp_msg").fadeOut("" );
					 
						timer.stop();
						}); 
				 		v_stock_exposure.length = v_stock_exposure.length -1;   
		 			   return;
		 			} 
		 	
		 			 			//Change_Exposure(v_exposure_ticker); should be deleteed
		 			if (temp != "" && temp.indexOf('%')>= 0 )
	                {	 
	                   selected_data = "";
		 			   curRowCount = 0;
		 			   iTo  = maxCol;   
		 	
		 			   var tmp1    = temp.split('%');
		 			   var tmp     = tmp1[0].split('^');
		 			   v_data      = new Array();
	                   for (var i=0; i< tmp.length; i++)
	                   {
	                        var s   = tmp[i].split('#');
	                        v_data[i] = {ticker:s[0], name:s[1], category: s[2], family: s[3], data:s[4], weighting: s[5],leverage:s[6], flag: 1, checked:0};//,
	                      //   alert(s[4])
	               	   }
	               	   total_rows = v_data.length;
	               	   n_cri_number = tmp1[5]
	               	   UpdateNumberOfCriretia(tmp1[5])
	               	   update_category_number(tmp1[6])
	               	   total_etfs  = tmp1[7],
	               	   v_leverage_no_yes = tmp1[8];
	                   resetLeverage()
	                   v_results = v_data;
	              
	                  // this caused zero category
					   resetCategory(v_cat_section)
	             
	               	   document.body.style.cursor = 'default';
	                   findObj("detail_table").innerHTML = getTable_view(v_data);  
	                   if (bTime >0)
					   {
 							show_end_time("after getTable_view: ")
							get_start_time()
					   }
	           
	                }else{
	          
	                   var s = temp.split('^');
	                   if (s[0] != "")
	                      UpdateNumberOfCriretia(s[0])
	                   if (s.length > 1 && s[1] != "")
	                   {
							update_category_number(s[1])
							resetCategory(v_cat_section)
	                   }
	                   v_results = v_data;
	               //    resetCategory(v_cat_section)
	                   v_data          = new Array();
	                   total_rows = v_data.length;
	                   document.body.style.cursor = 'default';
	                   findObj("detail_table").innerHTML = getTable_view(v_data); 
	                }
	                v_category_flag = 0;
		 		   
				}catch(ex)
				{
					   alert(ex + "in xxxx   process_New_Results_Data()");
				}				
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in process_Results_Data End");
	 }
}
function getDefault_Criteria()
{
// LastExpenseRatio,  DailyMarketReturnYTD, DailyMarketReturn52Week, DailyMarketReturn156Week, DailyMarketReturn260Week
    var url ="collumn0=LastExpenseRatio&low0=0.07&high0=0.5"
    url += "&collumn1=DailyMarketReturnYTD&low1=-73.05&high1=65.22"
    url += "&collumn2=DailyMarketReturn52Week&low2=-88.53&high2=9.85"
 //   url += "&collumn3=DailyMarketReturn156Week&low3=-36.84&high3=17.93"
  //  url += "&collumn4=DailyMarketReturn260Week&low4=-36.84&high4=23.13"
    return url;
} 
function getResults_Data(){
    if (bTime >0)
	{
		get_start_time()
	}
	initializeCategory()
    var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="production.aspx?"+getDefault_Criteria()+ "&family="+ v_family + "&category="+ v_category +"&stocks="+ getExposuresStocks()+  "&sort="+ n_sort_ticker +"&sortOrder=" +n_sortOder+ "&leverage=" +v_leverage+"&default=y"+"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { process_Results_Data(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
    return false;
}
function process_Results_Data(xmlhttp){
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
				  	var temp    = xmlhttp.responseText; 
		  			if (temp != "")
	                {	 
	                   selected_data = "";
		 			   curRowCount = 0;
		 			   iTo  = maxCol;       
		 			   var tmp1    = temp.split('%');
		 			   var tmp     = tmp1[0].split('^');
		 			   v_min_max   = tmp1[1].split('^');
		 			   v_back_mnmx = tmp1[2].split('#');
		 			
		 			   v_back_info = tmp1[3].split('^');
		 			   v_back_bars = tmp1[4].split('^');
		 				  // 		   alert(temp)    
		 			   v_data          = new Array();
	                   for (var i=0; i< tmp.length; i++)
	                   {
	                        var s   = tmp[i].split('#');
	                        v_data[i] = {ticker:s[0], name:s[1], category: s[2], family: s[3], data:s[4], weighting: s[5] , leverage: s[6], flag: 1, checked:0};//,
	                      //  alert(s[4])
	               	   }
	                   update_category_number(tmp1[6])
	               	   total_etfs = tmp1[7],
	               	   total_rows = v_data.length;
	                   if (Mstar_Screen != "" )
					   {
					      Mstar_Screen = Mstar_Screen.toUpperCase()
					      if (Mstar_Screen.indexOf("LOWEST") >=0 )
					         morningStar_screen(0)
					      else  if (Mstar_Screen.indexOf("MOST") >=0 )
					         morningStar_screen(1)
					      else  if (Mstar_Screen.indexOf("YTD") >=0 )
					         morningStar_screen(2)
					      else
					         defaultCriteria()
					   }else
					       defaultCriteria()				       
				
					  //  if (tmp1[9].indexOf("not")>=0)
	               	  //     alert("Cache failures")
	               	    set_mstar_screen();
	                  	/// critereia number and change category number
						v_results = v_data;
						n_cri_number = tmp1[5];
						UpdateNumberOfCriretia(tmp1[5])
					    v_leverage_no_yes = tmp1[8];
					    resetLeverage()
						resetCategory(v_cat_section)
						/// end of update
						document.body.style.cursor = 'default';
	                    findObj("detail_table").innerHTML = getTable_view(v_data);  
	                    if (bTime >0)
						{
 							show_end_time("complete all: ")
							get_start_time()
						}
		 		
	                }else
	                   alert("Empty return data of process_Results_Data()");
		 		   
				}catch(ex)
				{
					   alert(ex + "xxxxx in process_Results_Data()");
				}				
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in process_Results_Data End");
	 }
}
// end of new
function getETF_back_info(){
    var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="etf_data/ETF_back_info.txt";
	xmlhttp.onreadystatechange = function() { process_ETF_back_info(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
    return false;
}

function process_ETF_back_info(xmlhttp){
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
		 			var temp    = xmlhttp.responseText; 
		 			var tmp     = temp.split('#');
		  			if (temp != "")
	                {
	                   v_back_info = tmp[0].split('^');
	                   if (v_back_info.length> 0)
	                      getETF_Data()
	                   else
	                      alert("None")
	                }
				}catch(ex)
				{
						alert(ex + "in process_ETF_back_info");
				}
				
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in process_ETF_back_info End");
	 }
}

/// quick sort
function showMessage(v)
{
		alert(v)
}
function getValue(d, n, acc)
{
   if (n < 0)
      return d.name;  
   if (n == 0)
      return d.ticker
   else if(n == 1)
      return d.name;
   else  if (n == 2)
      return d.category;

   if (n >= 2000)
   {
       var dd = d.data.split('|');
	   n = n- 2000;
	   if (dd[n] != "" && dd[n] != undefined )
			return parseFloat(dd[n]);   
	   else if (acc == 0)
			return 99999999999;
	   else if (acc == 1)
			return -99999999999;		  
      
   }else if (n >= 1000)
   {
      var dw  =  getObj_Weighting(d, n-1000)
      if (dw == undefined  || dw.indexOf("--")>=0)
      {
         if (acc == 0)
            dw = 9999999;
         else
            dw = -9999999;
      }
      return  parseFloat(dw);
      
   }
  
}

///  Global data for QuickSort


var aQuickSort;   // Array of elements (strings, values, etc)

///
//  QuickSort function
//  Usage:   
//  QuickSort(aQuickSort, index, 0,aQuickSort.length-1)
//  'aQuickSort' should have been initialized.
//
function QuickSort(aQuickSort, index, first,last, acc)
{
  var center; // This local variable is the only recursive stack space used
  if (first < last)
  {
    center = QuickSortSub(aQuickSort, index,first,last, acc);
    if (center != -1)
    {
      QuickSort(aQuickSort,index, first,center-1, acc);
      QuickSort(aQuickSort,index, center,last, acc);
    }
  }
} 

//  QuickSort internal subroutines

function QuickSortSub(aQuickSort, index, i1, i2, acc)
{
  var n;
  var m;
  var ip;
  var im;
  var pivot;
  var s;
  var b = true;

  im     = Math.floor((i1+i2)/2); // Note, im may be equal to i1 but never to i2
  n      = im;
  ip     = n--;
  pivot  = getValue(aQuickSort[ip], index, acc);
  while (n  >= i1 && b)
  {
    m  = n--;
    b  = (pivot == getValue(aQuickSort[m], index, acc));
  }
  n = im+1; // n may be equal to i2 but not i2+1 (at this point)
  while (n <= i2 && b)
  {
    m  =  n++;
    b  = (pivot == getValue(aQuickSort[m], index, acc));
  }
  if ( b )
    return -1;
  if (getValue(aQuickSort[m], index, acc) > pivot)
  {
    ip    = m;
    pivot = getValue(aQuickSort[ip], index, acc);
  }
  n = i1;  // Left
  m = i2;  // Right
  while (n <= m)
  {
    if (acc == 0)
    {
		while (pivot > getValue(aQuickSort[n], index, acc))
		{
			n++;
		}
		while (pivot <= getValue(aQuickSort[m], index, acc))
		{
			m--;
		}
    }else {
		while (pivot <= getValue(aQuickSort[n], index, acc))
		{
			n++;
		}
		while (pivot > getValue(aQuickSort[m], index, acc))
		{
			m--;
		}
    }
    if (n < m)
    {
      s             = aQuickSort[m];
      aQuickSort[m] = aQuickSort[n];
      aQuickSort[n] = s;
      m--;
      n++;
    }
  }
  return n;
}

/// end of quicksort

function getTickers()
{
    var tickers = ""
    var k =0;
	for (var i=0; i< v_results.length; i++)
	{
	   if (v_results[i].checked == 0) continue;
	   if (k > 10)
	   {
	      tickers = "too many";
	      break;
	   }
	   if (tickers == "")
	   {
	      tickers = v_results[i].ticker;//etf_data[parseInt(sel[i])].substring(0, etf_data[parseInt(sel[i])].indexOf('|'));
	   }else{
	      tickers = tickers +"|"+v_results[i].ticker;;//etf_data[parseInt(sel[i])].substring(0, etf_data[parseInt(sel[i])].indexOf('|'));
	   }
	   k++;	     
	}
	return tickers;
}

function AddPort()
{
   sel_tickers   = getTickers();
   if (sel_tickers == "too many")
   {
     alert("10 selections is maximum.")
     return;
   
   }else if (sel_tickers == "")
   {
      //fnOpen('45')
     alert("You have not specified which ETF to include in your portfolio. Please click the check box(s) to the left of the ETF names to make a selection");
    // alert("you have not specified which etf to include in your watch list.\n Click on the check boxes next to the etf names to make a selection")
     return;  
   }
   document.location.href ="http://portfolio.morningstar.com/NewPort/Reg/AddToPortfolio.aspx?ticker="+ sel_tickers +"&name=";
}

function inRange(d, d1, d2)
{
    if (parseFloat(d) >= parseFloat(d1) && parseFloat(d) <= parseFloat(d2))
      return true;
    return false;
}
function isGreater(d1, d2)
{
    if (parseFloat(d1) >= parseFloat(d2))
      return true;
    return false;
}
function update_category_number(categories)
{
   var cat  = categories.split('|');
   for (var i=0; i< v_category_array.length; i++)
   {
      v_category_number[i].number = cat[i];
   } 
}
function initialize_category()
{
   for (var i=0; i< v_category_array.length; i++)
   {
      var tmp = v_category_array[i];
      if (tmp == "Industrial Me")
          tmp = "Industrial Metals"
      else if (tmp == "Precious Meta")
          tmp = "Precious Metals"
      else if (tmp == "Natural Resources")
          tmp = "Equity Natural Resources"
	  v_category_number[i] = {name:tmp, number:0};

   } 
}
function getIndexOfCategory(category)
{
   for (var i=0; i< v_category_array.length; i++)
   {
	if (category.indexOf(v_category_array[i])>=0)
	  return i;
   }
   return -1;
}
function setCategory_Number(category)
{
   var index = getIndexOfCategory(category)
   if (index >= 0)
   {
	//	v_category_number[index].name   = category;
		v_category_number[index].number += 1;
   }
}
function getCategory_Number(category)
{
   var index = getIndexOfCategory(category)
   var ss = v_category_number[index].number;//v_category_number[index].name +' <span class="nr">('+(v_category_number[index].number)+')</span>';
 //  alert("getCategory_Number()  "+ss)
   return ss;
}
function getCategory_Number_s(category)
{
   var index = getIndexOfCategory(category)
   var ss = v_category_number[index].name +' <span class="nr">('+(v_category_number[index].number)+')</span>';
 //  alert("getCategory_Number()  "+ss)
   return ss;
}
function Reset_All_Exposure_to_Results(ar, ind)
{
    var temp = "";  
    var ar_r  = new Array();
    for (var i=0; i<ar.length; i++)
	{
	   try{
			var obj = ar[i];
			if ( obj.weighting == "")
			   continue;
			var ss  = obj.weighting.split('|');
			obj.weighting = "";
			for (var k=0; k<ss.length; k++)
			{
				if (k == ind )
				  continue;
				if (obj.weighting == "")
				   obj.weighting = ss[k];
			    else
			       obj.weighting = obj.weighting + "|" + ss[k];
			}
			ar_r[i] = obj;
			
		}catch(ex)
		{
			alert(ex + "Add_Exposure_to_Results() 1");
 		}
	}
	return ar_r;
}
function Add_Exposure_to_Results(ar)
{
    var temp = "";  
    var ar_r  = new Array();
    for (var i=0; i<ar.length; i++)
	{
	   try{
			var obj = ar[i];
			var exp_obj = v_stock_exposure[v_stock_exposure.length-1];
			temp = "|"+exp_obj.data;
			if (temp.indexOf("|"+obj.ticker +",") >= 0)
			{
					d = getWeightings(obj, exp_obj.data)
					if (obj.weighting == "")
						 obj.weighting = d;
					else
						 obj.weighting = obj.weighting +"|"+d;
			}else{
					if (obj.weighting == "")
						 obj.weighting = "--";
					else
						 obj.weighting = obj.weighting +"|--";
			}
			ar_r[i] = obj;
			
		}catch(ex)
		{
			alert(ex + "Add_Exposure_to_Results() 1");
 		}
	}
	return ar_r;
}
function getLeverage(obj)
{
   var temp = "|"+ v_ETF_Leverage;
   if (temp.indexOf("|"+obj.ticker +",") >= 0)
   {
      temp =  temp.substring(temp.indexOf("|"+obj.ticker +",") + 1)
      temp =  temp.substring(temp.indexOf(",")+1, temp.indexOf("|"));
      return temp;
   }
   return "";
}

function getWeightings(obj, exp_data)
{
   var temp = "|"+ exp_data;
   if (temp.indexOf("|"+obj.ticker +",") >= 0)
   {
      temp =  temp.substring(temp.indexOf("|"+obj.ticker +",") + 1)
      temp =  temp.substring(temp.indexOf(",")+1, temp.indexOf("|"));
      return temp;
   }
   return "--";
}
function QueryData_add_Exposure(col)
{
    var d
    var     ar      = new Array()
    if (v_results.length > 0)
       ar              = v_results;
    else
       ar              = v_data;

    var mx_ar                 = new Array();

	try{
	    ar = Add_Exposure_to_Results(ar)
	}catch(ex)
	{
		alert(ex + "in QueryData_add_Exposure() 00");
	}

	//v_results_ar[v_results_ar.length] = ar;
	v_results                 = ar;
	total_rows                = ar.length;	
	findObj("detail_table").innerHTML = getTable_view(v_results);
   
}

function resetLeverage()
{
   var lev = v_leverage_no_yes.split('|');
   $("#no_leverage2").html('('+lev[0]+')')
   $("#yes_leverage2").html('('+lev[1]+')')
    //$("#all_leverage2").html((n_yes+n_no))
}
function resetCategory(v)
{ 

   if (v == "")
     return;
   v_cat_section = v;
   /// category level a b c 
   for (var i=0; i< v_category_array.length; i++)
   {
      var cat = v_category_array[i].toLowerCase()
      while (cat.indexOf(" ")>=0)
      {
         cat     = cat.replace(" ", "_")
      }
      while (cat.indexOf("/")>=0)
      {
         cat     = cat.replace("/", "_")
      }

      if (v == "a" && i>= 0 && i< 9)
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
      else if (v == "b" && i>= 9 && i< 22)
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
      else if (v == "c" && i>= 22 && i< 35)
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
      else if (v == "d" && i>= 35 && i< 48)
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
      else if (v == "e" && i>= 48 && i< 51)
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
     else if (v == "f" && i>= 51 && i< 54)
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
     else if (v == "g" && i>= 54 && i< 63)
     {
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
     }else if (v == "h" && i>= 63 && i< 69)
     {
         findObj(cat).innerHTML ='<a  href="#" onclick=toCatJ_1("' +cat+'") >' +getCategory_Number_s(v_category_array[i]) +'</a>'
     }
   }
}
function getAddedLevereage(v)
{
   var scat   = "";  
   if (v == "" || v == "|")
   {
       return;   
   }
   var lev_num = v_leverage_no_yes.split('|');
   n_without_leverage = "("+lev_num[0] +")";
   n_with_leverage    = "("+lev_num[1] +")";
   var ss     = v.split('|');
   total_rows = 0;
   for (var i=0; i< ss.length; i++)
   {    
     var num = "";
     if (ss[i].indexOf("yes")>= 0){
        s = 'ETFs with leverage <span class="nr">'+n_with_leverage+'</span>'
        num = n_with_leverage;
       
     }else{
        num = n_without_leverage ;
        s = 'ETFs without leverage <span class="nr">'+n_without_leverage+'</span>'
     }
     num      = num.replace("(", "");
	 num      = num.replace(")", "");
     total_rows += parseInt(num)
     if (scat == "")
		scat = '<div id="a_cat_box"><a href="javascript:check_leverage(\''+ ss[i] +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> '+ s+ '</div>'
	 else
		scat = scat + '<div id="a_cat_box"><a href="javascript:check_leverage(\''+ ss[i] +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> '+ s+ '</div>'
	
   }
   return scat;
}
function getAddedCategory(v, n )
{
   var scat   = "";  
   var ss     = v.split('|');
 
   for (var i=0; i< ss.length; i++)
   {
     var temp = ss[i];
     if (temp.indexOf("Commodities")>=0)
        temp = temp.substring(temp.indexOf(" ") +1 );
     if (n == 0)
     {
		if (scat == "")
			scat = '<div id="a_cat_box"><a href="javascript:check_category(\''+ temp +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> '+ getCategory_Number_s(temp)+ '</div>'
		else
			scat =scat + '<div id="a_cat_box"><a href="javascript:check_category(\''+ temp +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> ' +getCategory_Number_s(temp)+'</div>'
	 }else{
		if (scat == "")
			scat = '<div id="a_cat_box"><a href="javascript:check_family(\''+ temp +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> '+ getCategory_Number_s(temp)+ '</div>'
		else
			scat =scat + '<div id="a_cat_box"><a href="javascript:check_family(\''+ temp +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> ' +getCategory_Number_s(temp)+'</div>'

	 }
   }
   return scat;
}
function check_exposure(v)
{
 /* Jqurey take out button green @@@  */
	//	$('#'+v).removeClass('added_bt'); 
	//	$('#'+v).addClass('add_bt');
	//	$('#'+v).html('Add Criteria');
    last_k--;
    reset_Weighting_list(v)
 	findObj("detail_table").innerHTML = getTable_view(v_results); 
}
function check_leverage(v)
{
 /* Jqurey take out button green @@@  */
		$('#'+v).removeClass('added_bt'); 
		$('#'+v).addClass('add_bt');
		$('#'+v).html('Add Criteria');
    v_leverage = CheckLeverage(v_leverage, v)
    resetResults_Data() 
    return;
    if (v_leverage == "") 
    {
       total_rows =v_results.length;
    }
//	findObj("rs").innerHTML  = total_rows;
	$("#rs").html(total_rows)
//	$("rs").innerHTML  = total_rows;
	findObj("detail_table").innerHTML = getTable_view(v_results); 
}
function check_category(v)
{
 /* Jqurey take out button green @@@  */
	var j_v= toDash(v.toLowerCase())
    if (v == "Industrial Metals")
    {
        v = "Commodities Industrial Metals";
        j_v ="industrial_me";
    }
	$('#cat_'+ j_v +' .added_bt').hide();
	$('#cat_'+ j_v +' .add_bt').fadeIn();

    v_category = CheckCategory(v_category, v)
    resetRCategory_Data()
  
}
function check_family(v)
{
  /* Jqurey take out button green @@@  */
	var j_v= toDash(v.toLowerCase())   
	$('#cat_'+ j_v +' .added_bt').hide();
	$('#cat_'+ j_v +' .add_bt').fadeIn();		
    v_family = CheckCategory(v_family, v)
    resetRCategory_Data()   
}
function setCategory_on_list()
{
 
    var fat = "";
    var cat = "";
    var lev = "";
    var exp = "";
    if (v_category == "" &&  v_family == "" && v_leverage == "" && v_stock_exposure.length == 0)
    {
      findObj("added_cat_list").innerHTML = "";
     // hide("added_cat_list");
      return;
    }
    if (v_category != "" )
    { 
       cat = getAddedCategory(v_category, 0);
	}
	if (v_family != "")
    {
       fat = getAddedCategory(v_family, 1);
	}
	if (v_stock_exposure.length >0 )
    {
       exp  =  getAddedExposure()
	}
	if (v_leverage != "")
    {
       lev =  getAddedLevereage(v_leverage )
	}
    findObj("added_cat_list").innerHTML = fat +cat + lev + exp;
    //showT("added_cat_list");
    $("#added_cat_list").slideDown();
}
function getAddedExposure()
{
   var sexp =""
   for (var i=0; i< v_stock_exposure.length; i++)
   {
   if (sexp == "")
		sexp = '<div id="a_cat_box"><a href="javascript:check_exposure(\''+ v_stock_exposure[i].ticker +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> '+ v_stock_exposure[i].name+ '</div>'
   else
		sexp = sexp + '<div id="a_cat_box"><a href="javascript:check_exposure(\''+ v_stock_exposure[i].ticker +'\')"><img src="img/x_cat.gif" class="x_added_cat"/></a> '+ v_stock_exposure[i].name+ '</div>'
   }
   return sexp;
}
function initializeCategory()
{
   for (var i=0; i< v_category_number.length; i++)
   {
       v_category_number[i].number = 0;
   
   }

}
function getNumberOfETF(v)
{
  if (v == undefined || v == "")
     return;
   var s = v.split('|');
   var k = 0;
   for (var i=0; i< s.length; i++)
   {
      if (s[i] != "" )
        k += parseInt(s[i]);
   }
   return k;
}
// LastExpenseRatio,  DailyMarketReturnYTD, DailyMarketReturn52Week, DailyMarketReturn156Week, DailyMarketReturn260Week

function defaultCriteria()
{
	//onreset_j()
   try{
    v_criteria      = new Array();
    var k = getColumnIndex_1("LastExpenseRatio");
	var mx          = v_min_max[k];
    var mx_ar       = mx.split('|');
    var num = getNumberOfETF(v_back_info[k]);
    addRowToTable(v_fields_name_array[k], num, 'LastExpenseRatio',v_back_bars[k], v_back_info[k], v_back_mnmx[k], mx_ar[0], mx_ar[1],  mx_ar[0], "0.5");
    
    k = getColumnIndex_1("DailyMarketReturnYTD");
    mx          = v_min_max[k];
    mx_ar       = mx.split('|');
    num = getNumberOfETF(v_back_info[k]);
    addRowToTable(v_fields_name_array[k], num, 'DailyMarketReturnYTD',v_back_bars[k], v_back_info[k], v_back_mnmx[k],mx_ar[0], mx_ar[1], mx_ar[0], mx_ar[1]);
 

    k  =  getColumnIndex_1("DailyMarketReturn52Week");
    mx          = v_min_max[k];
    mx_ar       = mx.split('|');
    num = getNumberOfETF(v_back_info[k]);
    addRowToTable(v_fields_name_array[k], num,  'DailyMarketReturn52Week', v_back_bars[k], v_back_info[k], v_back_mnmx[k], mx_ar[0], mx_ar[1], mx_ar[0], mx_ar[1]);
 //    k  =  getColumnIndex_1("DailyMarketReturn156Week");
 //   mx          = v_min_max[k];
 //   mx_ar       = mx.split('|');
  //  num = getNumberOfETF(v_back_info[k]);
  //  addRowToTable(v_fields_name_array[k], num,  'DailyMarketReturn156Week', v_back_bars[k], v_back_info[k], v_back_mnmx[k], mx_ar[0], mx_ar[1], mx_ar[0], mx_ar[1]);

 //   k  =  getColumnIndex_1("DailyMarketReturn260Week");
 //   mx          = v_min_max[k];
 //   mx_ar       = mx.split('|');
 //   num = getNumberOfETF(v_back_info[k]);
 //   addRowToTable(v_fields_name_array[k], num,  'DailyMarketReturn260Week', v_back_bars[k], v_back_info[k], v_back_mnmx[k], mx_ar[0], mx_ar[1], mx_ar[0], mx_ar[1]);

    }catch(ex)
	{
		alert(ex + "in defaultCriteria");
	}
}
function update_defaultCriteria(hist_bar)
{
   var  bars = hist_bar.split('!');
   for (var i=0; i<v_criteria.length; i++)
   {
     findObj("histogram_"+v_criteria[i].ColumnName).innerHTML = bars[i];
  
   }
   
}
function load_criteria_data(field)
{
	var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="back_image.aspx?field=" + field+ "&info=y&r="+Math.random();
	xmlhttp.onreadystatechange = function() { processCriteria_Data(xmlhttp, field); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}
function processCriteria_Data(xmlhttp, field)
{
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
		 			var temp    = xmlhttp.responseText; 
		 			var tmp     = temp.split('#');
		 			etf_criteria_info = tmp[0].split('^');
		 	
		 		
				}catch(ex)
				{
						alert(ex + "in processCriteria_Data");
				}
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in processCriteria_Data End");
	 }
}
function load_ETF_data(fields, sqlQuery)
{
	var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="etf_data.aspx?fields=" + fields+ "&sqlQuery=" + sqlQuery+ "&r="+Math.random();
	xmlhttp.onreadystatechange = function() { processETFData(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}

function processETFData(xmlhttp)
{
	try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{
		 			var temp    = xmlhttp.responseText; 
		 			
				}catch(ex)
				{
						alert(ex + "in processETFData");
				}
				
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in processETFData End");
	 }
}
function sortTable(n, m)
{
 
    var acc = 0, i =0;
    n_begin_page   = 1;
    for (i=0; i<v_cat_name.length;i++)
    {
	    v_cat_name[i].sort = -1;
	}
    for (i=0; i<v_criteria.length;i++)
    {
		if (n_sort_field >= 0 && n_sort_field != n)
		   v_criteria[i].sort = -1;
    }
    n_sort_field = n;
    if (parseInt(v_criteria[n].sort) < 0)
    {
       v_criteria[n].sort = 0;
       acc = 0;
    }else if (parseInt(v_criteria[n].sort) == 0)
    {
       v_criteria[n].sort = 1;
       acc = 1;
    }else if (parseInt(v_criteria[n].sort) == 1)
    {
       v_criteria[n].sort = 0;
       acc = 0;
    }
    n_sort_ticker =  v_criteria[n].ColumnName;
    n_sortOder = acc;
    n_sort_col = m;
  	QuickSort(v_results, m, 0,v_results.length-1, acc)
	curRowCount = 0;
	iTo  = maxCol;
	findObj("detail_table").innerHTML = getTable_view(v_results);
}
function sortTable_exposure(m)
{
    m= parseInt(m)
    n_begin_page   = 1;
    var k = m - 1000;
    if (v_stock_exposure[k].sort == -1)
       v_stock_exposure[k].sort = 0;
    else if (v_stock_exposure[k].sort == 0)
       v_stock_exposure[k].sort = 1;
    else
       v_stock_exposure[k].sort = 0;
    n_sort_field  = m;
    n_sort_col    = m;
    n_sortOder    = v_stock_exposure[k].sort;
    n_sort_ticker = v_stock_exposure[k].ticker;
	QuickSort(v_results, m, 0,v_results.length-1, v_stock_exposure[k].sort)

	curRowCount = 0;
	iTo  = maxCol;

	findObj("detail_table").innerHTML = getTable_view(v_results);
}
function sortTable_1(m)
{
    m = parseInt(m)
    n_begin_page   = 1;
    for (i=0; i< v_cat_name.length; i++)
    {
       if (i != m )
		 v_cat_name[i].sort = -1;
    }
    if (v_cat_name[m].sort == -1)
       v_cat_name[m].sort = 0;
    else if (v_cat_name[m].sort == 0)
       v_cat_name[m].sort = 1;
    else
       v_cat_name[m].sort = 0;
    n_sort_field  = m;
    n_sort_col    = m;
    n_sortOder    = v_cat_name[m].sort;
    n_sort_ticker = v_cat_name[m].ticker;
	QuickSort(v_results, m, 0,v_results.length-1, v_cat_name[m].sort)
	curRowCount = 0;
	iTo  = maxCol;
	findObj("detail_table").innerHTML = getTable_view(v_results);

}
function Select_ETFs()
{  
     if (v_select_all > 0)
        v_select_all = 0;
     else       
        v_select_all = 1;

     for (var i = 0; i<v_results.length; i++)
     {
          v_results[i].checked = v_select_all;
     }
    
     findObj("detail_table").innerHTML = getTable_view(v_results);
   
}
function getTable_view(ar)
{
    setCategory_on_list()
    var fat = "|"+v_family +"|";
    var cat = "|"+v_category +"|";
 	var tab = "";
 	var rows = 0;
 	var pp  = 0;
 
 	if (v_criteria.length > 4 )
      tab += 	'<table border=0 cellspacing=0 cellpadding=0>';
    else 
      tab += 	'<table  width = "950" border=0 cellspacing=0 cellpadding=0>';
   //put add profolio button
      
    tab += 	'<tr>';
	tab += 	'<td colspan="'+ (v_criteria.length + last_k + v_stock_exposure.length) +'">';
	if (v_select_all < 1)
	    tab += 	'<div id="eft_head_res"><div id="selector_ii"><a class="sel3" id="sel_an" href="javascript:Select_ETFs()">Select All</a><a class="sel2" href="javascript:AddPort()">Add to My Portfolio</a></div><span class="loading"><img src="img/loading_w.gif" style="MARGIN-TOP:-2px; PADDING-LEFT:9px; FLOAT:right"><span style="FLOAT: right">Loading ...</span></span><span class="result2">'
	else
	    tab += 	'<div id="eft_head_res"><div id="selector_ii"><a class="sel3" id="sel_an" href="javascript:Select_ETFs()">Select None</a><a class="sel2" href="javascript:AddPort()">Add to My Portfolio</a></div><span class="loading"><img src="img/loading_w.gif" style="MARGIN-TOP:-2px; PADDING-LEFT:9px; FLOAT:right"><span style="FLOAT: right">Loading ...</span></span><span class="result2">'
	tab += total_rows
	tab += '&nbsp;Results Found out of&nbsp;<div id="total">'
	tab += total_etfs
	tab += '</div></span></div>';
	tab += 	'</td>';
	tab += 	'</tr>';
      
      
      //end add proflio icon
    tab += 	'<tr class="head_tr">'
    tab += '<td>&nbsp;</td>';

    /// ETF Name
    tab += '<td  width= 300  class="msSmall"><a href=javascript:sortTable_1(1) >' + GetTitles(standardFieldName[0])+'</a></td>'
    // ETF Ticker
    tab += '<td   class="msSmall" width= 75 ><a href=javascript:sortTable_1(0) >Symbol</a></td>'
    /// ETF Category
	tab += '<td class="msSmall" width= 200 ><a href=javascript:sortTable_1(2) >Category</a></td>'

	for (var i = 0; i<v_criteria.length; i++)
	{
		tab += '<td  class="head_td_rj" align ="right" class="head_td_rj"><a href=javascript:sortTable('+ i +','+ (i + 2000) +') class="head_td_rj">' + v_criteria[i].name+'</a></td><td>&nbsp;&nbsp;</td>'
	}
	for (k = 0; k<v_stock_exposure.length; k++)
	{
           tab += '<td  class="head_td_rj" align ="right" class="head_td_rj"><a href=javascript:sortTable_exposure('+ (k+ 1000) +','+ l +') class="head_td_rj">' + v_stock_exposure[k].name+'</a></td><td>&nbsp;&nbsp;</td>'
	}
	tab += 	'</tr>'
	/// start  arrow
	  tab += 	'<tr class="head_trs">'
    tab += '<td>&nbsp;</td>';

    /// ETF Name
    if (v_cat_name[1].sort == 0)
        tab += '<td  width= 300 valign="middle"><a href=javascript:sortTable_1(1) ><img  border="0" src="img/sort_up.gif"></a></td>'
	else if (v_cat_name[1].sort == 1)
	    tab += '<td  width= 300 valign="middle"><a href=javascript:sortTable_1(1) ><img  border="0" src="img/sort_down.gif"></a></td>'
	else
	    tab += '<td  width= 300 >&nbsp;</td>'
    // ETF Ticker
    if (v_cat_name[0].sort == 0)
		tab += '<td class="msSmall" width= 75 valign="middle"><a href=javascript:sortTable_1(0) ><img  border="0" src="img/sort_up.gif"></a></td>'
	else if (v_cat_name[0].sort == 1)
		tab += '<td  class="msSmall" width= 75 valign="middle"><a href=javascript:sortTable_1(0) ><img  border="0" src="img/sort_down.gif"></a></td>'
	else
	    tab += '<td class="msSmall" width= 75 valign="middle">&nbsp;</td>'
    /// ETF Category
	if (v_cat_name[2].sort == 0)
		tab += '<td   class="msSmall" width= 200 valign="middle"><a href=javascript:sortTable_1(2) ><img  border="0" src="img/sort_up.gif"></a></td>'
	else if (v_cat_name[2].sort == 1)
		tab += '<td  class="msSmall" width= 200 valign="middle" ><a href=javascript:sortTable_1(2) ><img  border="0" src="img/sort_down.gif"></a></td>'
	else
	    tab += '<td  class="msSmall" width= 200 valign="middle">&nbsp;</td>'
	for (var i = 0; i<v_criteria.length; i++)
	{

	     if (n_sort_col >0 && n_sort_ticker != "Symbol" && n_sort_ticker != "StandardName" && n_sort_ticker != "CategoryName")
	     {
			if ( i == n_sort_field)
			{
				if ( v_criteria[i].sort == 0)
					tab += '	<td  class="head_td_rj_60" valign="middle"><a href=javascript:sortTable('+ i +','+(i + 2000) +') class="head_td_rj"><img border="0" src="img/sort_up.gif"></a></td><td>&nbsp;&nbsp;</td>'
				else if ( v_criteria[i].sort == 1)
					tab += '	<td  class="head_td_rj" valign="middle"><a href=javascript:sortTable('+ i +','+ (i + 2000) +') class="head_td_rj"><img  border="0" src="img/sort_down.gif"></a></td><td>&nbsp;&nbsp;</td>'
		     }else
		        tab += '	<td  class="head_td_rj" >&nbsp;</td><td>&nbsp;&nbsp;</td>'
		 }else  {
			if ( i > 0)
				tab += '	<td   align ="right" >&nbsp;</td><td>&nbsp;&nbsp;</td>'
			else
				tab += '	<td  class="head_td_rj" align ="right" class="head_td_rj">&nbsp;</td><td>&nbsp;&nbsp;</td>'
		 }
	}
	for (k = 0; k<v_stock_exposure.length; k++)
	{
        if (n_sort_field != "" &&  (k+1000) == n_sort_field )
		{
			if ( v_stock_exposure[k].sort == 0)
					tab += '<td  class="head_td_rj_60" valign="middle"><a href=javascript:sortTable_exposure('+ (k+ 1000) +','+l +') class="head_td_rj"><img  border="0" src="img/sort_up.gif"></a></td><td>&nbsp;&nbsp;</td>'
			else if ( v_stock_exposure[k].sort == 1)
					tab += '<td  class="head_td_rj" valign="middle"><a href=javascript:sortTable_exposure('+ (k+ 1000) +','+l +') class="head_td_rj"><img  border="0" src="img/sort_down.gif"></a></td><td>&nbsp;&nbsp;</td>'
		}else		
	        tab += '<td  class="head_td_rj" align ="right" class="head_td_rj">&nbsp;</td><td>&nbsp;&nbsp;</td>'
	}
	tab += 	'</tr>'
	/// end arrow
    if (ar.length > 0)
    {
		var k=0, l = 1;
		for (i = curRowCount ; i< ar.length && k< maxCol;i++)
		{
		    var obj =  ar[i];
		    k++;

		    var ss0 = ar[i].data;
		
			var ss  = ss0.split('|');
			if (k % 2 == 0)
				tab += '<tr class="odd_tr">'
			else
				tab += '<tr class="even_tr">'
		    if (ar[i].checked > 0)
			     tab += '<td  align=center  class="msSmall" width="10" ><input checked onclick=onClick(this) name="' + i + '" type="checkbox" ' + '></td>'
			//	Dan's stuff   tab += '<td  align=center  class="msSmall"><a href="#' + i + '" class="fakecheck" id="' + i + '" onclick=onClick(this)></a><input checked type="checkbox" name="' + i + '" id="' + i + '" style="display:none" /></td>'
			else
			     tab += '<td  align=center  class="msSmall" width="10"><input onclick=onClick(this) name="' + i + '" type="checkbox" ' + '></td>'
			     // Dan's stuff  tab += '<td  align=center  class="msSmall"><a href="#' + i + '" class="fakecheck" id="fakedotcom" ></a><input type="checkbox" name="dotcom" id="' + i + '" style="display:none" /></td>'
			     
			var url= '<a href="http://quote.morningstar.com/ETFQuote.html?pgid=hetopquote&ticker='+ ar[i].ticker +'" class="msSmall_1">'+ar[i].name +'</a>'
  
		    tab += '<td align=left  class="msSmall">' + url + '</td>'
		    url= '<a href="http://quote.morningstar.com/ETFQuote.html?pgid=hetopquote&ticker='+ ar[i].ticker +'" class="msSmall_1">'+ar[i].ticker +'</a>'
		    tab += '<td align=left  class="msSmall">' + url + '</td>'
		    tab += '<td align=left  class="msSmall">' + ar[i].category + '</td>'
		    for (var j = 0; j<v_criteria.length; j++)
			{
			   try{
			     var n = parseInt(v_criteria[j].index); 

			     if (v_criteria[j].name.indexOf("Ratings")>= 0)
			     {
	                   tab += '<td align=right  class="msSmall"><img border=0 src='+ getStarRating(ss[j])  + '></td><td>&nbsp;</td>'           
	             }else if (v_criteria[j].name.indexOf("Box")>= 0)
                     tab += '<td align=center  class="msSmall"><img border=0 src='+ getStyleBox_1(ss[j])  + '></td><td>&nbsp;</td>'
                 else if (v_criteria[j].name.indexOf("Volume")>= 0)
                     tab += '<td align=right  class="msSmall">'+formatVol(ss[j])+'</td><td>&nbsp;</td>'
            
                 else
				     tab += '<td '+ GetAlign(v_criteria[j].name)+'  class="msSmall">' + ss[j] + '</td><td>&nbsp;</td>'
			   }catch(ex)
			   {
					alert(ex + "in getTable_view()");
			   }
			}
			for (var n = 0; n<v_stock_exposure.length; n++)
			{
	           var dw  =  getObj_Weighting(obj, n)
	           if (dw == undefined ) dw = "--";
    	       tab += '<td '+ GetAlign(v_stock_exposure[n].name)+'  class="msSmall">'+  dw + '</td><td>&nbsp;</td>'
			}
			tab += '</tr>'
		}
	}
	tab += 	'<tr id="foot">';
	tab += 	'<td colspan="'+ (v_criteria.length + last_k) +'">';
	tab +=' <div id="foot_container"><div id="f_right"><span class="button"><a href=javascript:AddPort()> Add to Portfolio</a>'

	tab += 	'<span class="foot_result"><b>'
	tab += '<span id="rs">'
	tab += total_rows
	tab += '</span>'
	tab += '</b>'
	tab += '&nbsp;Results&nbsp;Found out of '
	tab += total_etfs
	tab += 	'</span></div>';

	tab += 	'<div id="foot_pages" align="right">'
	
		/* Selection */
	n_mx_page =  parseInt(total_rows/maxCol)+1;
	
	tab += '<span style="//top:-3px; //position: relative">Show Rows:</span> <select name="select" id="select_page" onChange="show_row(this)" style="font-size: 10px; top:-2px; position: relative">'
	for (var n=0; n< 5; n++)
	{
	   if (n_selected == n )
	      tab += '<option selected value="'+n+'">' + ar_options[n]+ '</option>'
	   else
	      tab += '<option value="'+n+'">' + ar_options[n]+ '</option>'
	}
    tab += '</select>&nbsp; &nbsp; <span id="pageof" style="//top:-3px; //position: relative">'
	tab += 'Page&nbsp;'
	tab += '<INPUT TYPE="text" onkeydown = "toPage(event,this)" STYLE="width:20px;border: none;background: #eeeeee;text-align: center; font-size:11px;" value='
	tab += n_begin_page
	tab += '>';
	tab += '&nbsp;of&nbsp;'+n_mx_page+'&nbsp;'
	tab += '</span>&nbsp; &nbsp'; 
	
	tab +='<a  class="button" href=javascript:GoPrev()><img src="img/prev.gif" border="none">&nbsp; Previous &nbsp;</a>'
	
	tab +=' 		<a href=javascript:GoNext(-1)  style="TEXT-DECORATION: none">&nbsp; Next &nbsp;<img src="img/next.gif" border="none"></a></span>'
	tab += 	'</div></div></td>';
	tab += 	'</tr>';
	tab += '</table>'

  //  findObj("rs").innerHTML    = total_rows;//v_results.length;
    $("#rs").html(total_rows)
	$("#total").html(total_etfs)
	return tab;
}

var n_selected = 1;
function show_row(v)
{
    
     maxCol = parseInt(v.options[v.selectedIndex].text )    
     n_selected = parseInt(v.options[v.selectedIndex].value);
     n_begin_page = 1;
     curRowCount  = 0;
     findObj("detail_table").innerHTML = getTable_view(v_results); 

}

/// after delete reset obj weighting and weighting list
function reset_Weighting_list(col)
{
  var k = 0;
  var ar = v_stock_exposure;
  var ind =  get_weighting_index(col)
  v_stock_exposure = new Array();
  for (var i=0; i< ar.length ; i++)
  {
    if (col.toUpperCase()== ar[i].ticker.toUpperCase() )  
         continue;   
    v_stock_exposure[k++] = ar[i];
  }
  v_results = Reset_All_Exposure_to_Results(v_results, ind)
}
/// end of reset
function get_weighting_index(col)
{
  for (var i=0; i< v_stock_exposure.length; i++)
  {
      if (v_stock_exposure[i].ticker.toUpperCase()== col.toUpperCase() )  
       return i;   
  }
  return -1;
}
function getObj_Weighting(obj, index)
{
 //  alert("getObj_Weighting  "+obj.weighting)
  var temp = obj.weighting.split('|');
  return temp[index];
}

function getStarRating(v)
{
  v = parseInt(v)
  var starRating ="http://im.morningstar.com/im/1stars.gif"
  switch(v) 
	{
		case 1:
			starRating ="http://im.morningstar.com/im/1stars.gif"
			break;
		case 2:
			starRating ="http://im.morningstar.com/im/2stars.gif"
			break;
		case 3:
			starRating ="http://im.morningstar.com/im/3stars.gif"
			break;
		case 4:
			starRating ="http://im.morningstar.com/im/4stars.gif"
			break;
		case 5:
			starRating ="http://im.morningstar.com/im/5stars.gif"
			break;		
		default:
		    starRating ="http://im.morningstar.com/im/dot_clear.gif"
			break;
	}
	return starRating;
}
function getStyleBox_1(v)
{
  v = parseInt(v)
  var getStyleBox ="https://im.morningstar.com/im/StyleSmall1.gif"
  switch(v) 
	{
		case 1:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall1.gif"
			break;
		case 2:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall2.gif"
			break;
		case 3:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall3.gif"
			break;
		case 4:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall4.gif"
			break;
		case 5:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall5.gif"
			break;
		case 6:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall6.gif"
			break;
		case 7:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall7.gif"
			break;
		case 8:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall8.gif"
			break;
		case 9:
			getStyleBox ="https://im.morningstar.com/im/StyleSmall9.gif"
			break;	
		default:
			break;
	}
	return getStyleBox;
}

function getSelectData()
{
    var s_sel   = "";
	/// data from v_data array with checked
	var k = 0;
	for (var i=0; i< v_data.length; i++)
	{
	   if (v_data[i].data == "" || v_data[i].checked < 1) 
	        continue;
	   if (s_sel == "")
	   {
	      s_sel       = v_data[i].ticker +"||"+v_data[i].data;
	   }else{
	      s_sel = s_sel +"^"+ v_data[i].ticker +"||"+v_data[i].data;
	   }	     
	}
	return s_sel;
}

function GetTitles(DataPoint)
{
    var GetTitle = "";
	switch(DataPoint) 
	{
		case "Fund Name":
			GetTitle="ETF&nbsp;Name"
			break;
		case "Morningstar Category":
			GetTitle="Morningstar<br>Category"
			break;
		case "Total Assets ($ mil)":
			GetTitle="Total<br>Assets<br>($ mil)"
			break;
		case "Ticker":
			GetTitle="Symbol"
			break;
		case "Mkt YTD Return (%)":
			GetTitle="Market<br>YTD<br>Return (%)"
			break;
		case "Mkt 1-Year Return (%)":n 
			GetTitle="Market<br>1-Year<br>Return (%)"
			break;
		case "Mkt 3-Year Return (%)":
			GetTitle="Market<br>3-Year<br>Return (%)"
			break;
		case "Mkt 5-Year Return (%)":
			GetTitle="Market<br>5-Year<br>Return (%)"
			break;
		case "NAV YTD Return (%)":
			GetTitle="NAV<br>YTD<br>Return (%)"
			break;
		case "NAV 1-Year Return (%)":
			GetTitle="NAV<br>1-Year<br>Return (%)"
			break;
		case "NAV 3-Year Return (%)":
			GetTitle="NAV<br>3-Year<br>Return (%)"
			break;
		case "NAV 5-Year Return (%)":
			GetTitle="NAV<br>5-Year<br>Return (%)"
			break;
		case "Standard Deviation (%)":
			GetTitle="Standard<br>Deviation<br>( % )"
			break;
		case "Sharpe Ratio (%)"	:
			GetTitle="Sharpe<br>Ratio<br>( % )"
			break;
		case "3-Year Tax Cost Ratio (%)":
			GetTitle="3-year Tax<br>Cost Ratio<br>( % )"
			break;
		case "5-Year Tax Cost Ratio (%)":
			GetTitle="5-year Tax<br>Cost Ratio<br>( % )"
			break;
		case "Potential Cap Gains Exp (%)":
			GetTitle="Potential<br>Cap Gains<br>Exp (%)"
			break;
		case "Style Box":
			GetTitle="Style<br>Box"
			break;
		case "P/E Ratio":
			GetTitle="P/E<br>Ratio"
			break;
		case "P/B Ratio":
			GetTitle="P/B<br>Ratio"
			break;
		case "Average Market Cap ($ mil)":
			GetTitle="Average<br>Market Cap<br>($ mil)"
			break;
		case "Turnover (%)":
			GetTitle="Turnover<br>( % )"
			break;
		case "% Assets in Top 10 Holdings":
			GetTitle="% Assets<br>in Top 10<br>Holdings"
			break;
		case "Yield (%)":
			GetTitle="Yield<br>( % )"
			break;
		case "Exchange":
			GetTitle="Exchange"
			break;
		case "Daily Volume":
			GetTitle="Daily<br>Volume"
			break;
		case "Expense Ratio (%)":
			GetTitle="Expense<br>Ratio<br>( % )"
			break;
		case "Fund Family":
			GetTitle="Fund Family"
			break;
		case "Fund Inception Date":
			GetTitle="Fund<br>Inception<br>Date"
			break;
		default:
			break;
	}
	return GetTitle;
}
function GetColumn_Name(col)
{
    var Column_Name = "";
    switch(col) 
	{
		case "DailyMarketReturnYTD":
			Column_Name="Market YTD Return (%)"	
			break;
		case "DailyMarketReturn52Week":
			Column_Name="Market 1-Year Return (%)"
			break;
		case "DailyMarketReturn156Week":
			Column_Name="Market 3-Year Return (%)"
			break;
		case "DailyMarketReturn260Week":
			Column_Name="Market 5-Year Return (%)"
			break;
		case "DailyNAVReturn":
			Column_Name="NAV YTD Return (%)"
			break;
		case "DailyNAVReturn52Week":
			Column_Name="NAV 1-Year Return (%)"
			break;
		case "DailyNAVReturn156Week":
			Column_Name="NAV 3-Year Return (%)"
			break;
		case "DailyNAVReturn260Week":
			Column_Name="NAV 5-Year Return (%)"
			break;
		case "StandardDeviation3Year":
			Column_Name="Standard Deviation ( % )"
			break;
		case "SharpeRatio3Year":
			Column_Name="Sharpe Ratio ( % )"
			break;
		case "TaxCostRatio3Year":
			Column_Name="3-year Tax Cost Ratio ( % )"
			break;
		case "TaxCostRatio5Year":
			Column_Name="5-year Tax Cost Ratio ( % )"
			break;
		case "PotentialCapitalGainExposure":
			Column_Name="Potential Cap Gains Exp (%)"
			break;
		case "Volume":
			Column_Name="Daily Volume"
			break;
		case "LastExpenseRatio":
			Column_Name= "Expense Ratio ( % )"
			break;
		case "StockStyleBox":
			Column_Name="Style Box"
			break;
		case "ProspectiveEarningsYield":
			Column_Name="P/E Ratio"
			break;
		case "ProspectiveBookValueYield":
			Column_Name="P/B Ratio"
			break;
		case "MMC":
			Column_Name="Average Market Cap ($ mil)"
			break;
		case "LastTurnoverRatio":
			Column_Name="Turnover ( % )"
			break;
		case "Top10HoldingAssetsPercent":
			Column_Name="% Assets in Top 10 Holdings"
			break;
		case "MonthlyYield":
			Column_Name="Yield ( % )"
			break;
		
		default:
			break;
	}
	return Column_Name;
	
}
function GetAlign(DataPoint)
{
    var GetAlign = "";
	switch(DataPoint) 
	{
		case "Fund Name":
			GetAlign="left"
			break;
		case "Morningstar Category":
			GetAlign="left"
			break;		
		case "Fund Family":
		    alert(DataPoint)
			GetAlign="left"
			break;
		case "Fund Inception Date":
			GetAlign="left"
			break;		
		case "Style Box":
			GetAlign="left"
			break;
		case "Ticker":
			GetAlign="left"
			break;
	    case "Exchange":
	        GetAlign="left"
			break;
		default:
			GetAlign="right"
			break;
	}
	return "align="+GetAlign;
}
// Toggle ticker to put or remove from the ticker selection
function ToggleTicker(i, ticker)
{
	if (ticker == "")
	{
		alert("Empty ticker. Please report this bug. Thanks.");
		return;
	}

	var cb = eval("document.FormResults.t_" + i);
	if (cb)
	{
		if (cb.checked)
			cb.checked = AddTickerSelection(ticker);
		else
			cb.checked = RemoveTickerSelection(ticker);
	}
	else
	{
		alert("Invalid checkbox. Please report this bug. Thanks.");
	}
}

// Add ticker to the ticker selection
function AddTickerSelection(ticker)
{
	var selection = document.FormResults.InputTickerSelection.value;
	if (selection == "")
	{
		document.FormResults.InputTickerSelection.value = ticker;
		return true;
	}

	var selArray = selection.split(",");
	if (selArray.length >= 50)
	{
		alert("You cannot select more than 50 securities.");
		return false;
	}

	document.FormResults.InputTickerSelection.value = selection + "," + ticker;
	return true;
}

// Remove ticker from the ticker selection
function RemoveTickerSelection(ticker)
{
	var selection = document.FormResults.InputTickerSelection.value;
	if (selection == "")
	{
		alert("Empty ticker selection. Please report this bug. Thanks.");
		return true;
	}

	var tmp = "," + selection + ",";
	if (tmp.indexOf("," + ticker + ",") < 0)
	{
		alert("Corrupt ticker selection. Please report this bug. Thanks.");
		return true;
	}

	var tickerArray = selection.split(",");
	var i;
	for (i = 0; i < tickerArray.length; i++)
		if (tickerArray[i] == ticker)
			tickerArray[i] = "";

	tmp = "";
	for (i = 0; i < tickerArray.length; i++)
		if (tickerArray[i] != "")
			tmp = tmp + tickerArray[i] + ",";
	if (tmp != "")
		tmp = tmp.substr(0, tmp.length-1);
	document.FormResults.InputTickerSelection.value = tmp;
	return false;
}

function getMaxNameWidth()
{
    var len = -9999;
    for (var i = 0 ; i< v_data.length;i++)
	{
	  //  var ss0 = v_data[i].split('%');
	  //  var ss  = ss0[0].split('|');
	  //  len = Math.max(len, ss[1].length)
	}
	return len*7;
}
function toPage(e, page)
{
  
  if(e.keyCode == 13)
  {
        var n = page.value;
         try{
        
            n = parseInt(n) +"";
			if ( n.indexOf("NaN") >= 0)
			{
			    alert("Illegal page number.")
           		return;
			}
        } catch(ex)
		{
			
		}
		if (n > n_mx_page || n < 1)
		{
		  alert("Page number is out of range.");
		  return;		
		}
		n_begin_page = n;
		curRowCount  = maxCol*(n_begin_page -1);
		iTo = curRowCount + maxCol;
		if (curRowCount > total_rows )
		{
			curRowCount = total_rows - maxCol;
			iTo         = total_rows;
			n_begin_page -= 1;
		}
		findObj("detail_table").innerHTML = getTable_view(v_results);
   }
}

function GoNext(page)
{
  if (total_rows != 0 && curRowCount+ maxCol> total_rows )
     return;
  if (n_begin_page*maxCol >  total_rows)
     return;
  n_begin_page++;
  curRowCount = (maxCol*(n_begin_page -1 ));
  iTo = curRowCount + maxCol;
 
  if (curRowCount > total_rows )
  {
     curRowCount = total_rows - maxCol - 1;
     iTo = v_results.length;
     n_page -= 5;
  }
  findObj("detail_table").innerHTML = getTable_view(v_results);
}
function GoPrev()
{
	if ( n_begin_page <= 1)
	{
		return;
    }

	if (n_begin_page > 1)
	  n_begin_page--;

	curRowCount = maxCol*(n_begin_page -1);// - maxCol;
	iTo         = curRowCount + maxCol;
	if (curRowCount < 0)
	{
		curRowCount = 0;
		iTo         = maxCol;
		return;
	}
    findObj("detail_table").innerHTML = getTable_view(v_results);
}


function isChecked(v)
{
   if (selected_data.indexOf("|"+v +"|") >= 0)
      return true;
   else
      return false;
}
function onClick(v)
{  
 
    if (v.checked)
    {  
		if (selected_data == "")
			selected_data = "|"+ v.name +"|"
		else
			selected_data = selected_data + "|"+v.name +"|";	
		v_results[parseInt(v.name)].checked = 1;
	   
    }else{
        v_results[parseInt(v.name)].checked = 0;
        selected_data = selected_data.replace("|"+v.name +"|", "|")   
    }    
    selected_data = selected_data.replace("||", "|");

}

//////////////////////////////////////////////////////////////
/// Save my Screen
function get_criteria_to_save()
{
   var s_criteria = "";
   for (var i=0; i< v_criteria.length; i++)
   {
      if (i ==0 )
		 s_criteria = v_criteria[i].index +"|"+  v_criteria[i].min +"|"+  v_criteria[i].max +"|"+  v_criteria[i].low +"|"+  v_criteria[i].high;  
	  else
	     s_criteria = s_criteria +"^" +v_criteria[i].index +"|"+  v_criteria[i].min +"|"+  v_criteria[i].max +"|"+  v_criteria[i].low +"|"+  v_criteria[i].high;  
   }
   return s_criteria;
}
function get_category_to_save()
{
	return v_category +"^"+v_family +"^"+ getExposuresStocks() +"^"+ v_leverage;
}
function save_my_Screen()
{
    if (debug < 1)
    {
		if (v_UserType == null || v_UserType == "" || (v_UserType != "S" && v_UserType != "P"))
		{
			check_member()
			return;
		}
    }
    var name     = findObj("screen_name").value;
    if (name == "" )
       name = "My Screen";
	$("#my_win_ii").slideUp("fast");
	$("#my_edit_ii").removeClass('xsel8');
	$("#my_edit_ii").addClass('sel8');
	
    //findObj("screen_name_display").innerHTML = name+' has been saved';
     $("#screen_name_display").html('<span class="green">'+name+' has been saved</span>')
	$.timer(2000, function (timer) {
	 $(".msg").fadeOut("slow", function (){ 
	 
	 findObj("screen_name_display").innerHTML = 'Showing '+name;	
	 $(".msg").fadeIn(); }   );
	 
	timer.stop();
	});     
     

    var cri      = get_criteria_to_save();
    var cat      = get_category_to_save();
	var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="save_screen.aspx?Name=" + name + "&Type=FE" +  "&Criteria=" +cri+"&Category=" +cat+ "&debug="+debug+ "&r="+Math.random();
	xmlhttp.onreadystatechange = function() { processSave(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}
function processSave(xmlhttp)
{
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{	 		
		 	       getScreen_List();
				}catch(ex)
				{
						alert(ex + "in processSave");
				}
			} 
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in processSave End");
	 }
}
function Screen_Exist(id)
{
   var name1 = "";
    for (var i=0; i< v_screen.length; i++)
    {
    
       if (parseInt(v_screen[i].searchId )== parseInt(id))
       {
          name1  = v_screen[i].name;
          var name2  = findObj("screen_name").value ;
          if (name1.toLowerCase() == name2.toLowerCase() )
             return name1
         name1 = "";
       }
    }
    return name1;
}
function get_Screen_Name(id)
{
   var name1 = "";
    for (var i=0; i< v_screen.length; i++)
    {
    
       if (parseInt(v_screen[i].searchId )== parseInt(id))
       {
          name1  = v_screen[i].name;
          return name1
       }
    }
    return name1;
}
function Delete(id)
{
  
	var  xmlhttp = getXMLHTTP();/// in common.js
	var url ="delete_Screen.aspx?SearchId=" + id + "&r="+Math.random();
	xmlhttp.onreadystatechange = function() { processDelete(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}
function processDelete(xmlhttp)
{
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{	 		
		 	        getScreen_List();
				}catch(ex)
				{
						alert(ex + "in processDelete");
				}
			} 
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in processDelete End");
	 }
}
function getScreen_List()
{
	var  xmlhttp = getXMLHTTP();/// in common.js
    var url ="load_screen_name_list.aspx?Type=FE"+ "&debug="+debug+"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { processScreen_List(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}
function processScreen_List(xmlhttp)
{
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{		 		
		 		var temp    = xmlhttp.responseText; 
		 		if (temp == "")
		 		  return;
		 		var  ss     = temp.split('^');
		 		v_screen    = new Array();
		 		for (var i=0; i< ss.length; i++)
		 		{
		 		    var t       = ss[i].split('|');
		 			v_screen[i] = {name:t[1], searchId: t[0], index:i}
		 		}
		  		init_manager()
		 	
				}catch(ex)
				{
				  alert(ex + "in processScreen_List()");
				}
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in processScreen_List End");
	 }
}

function open_A_Screen(id)
{
    
	var  xmlhttp = getXMLHTTP();/// in common.js
    var url ="load_screen.aspx?Type=FE"+ "&SearchId=" +id +"&debug="+ debug +"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { processScreen_Open(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}

function processScreen_Open(xmlhttp)
{
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{	
					clear_all();
					var temp1        = xmlhttp.responseText; 
					var tmp         = temp1.split('!')
			 		var criteria    = tmp[0]; 
			 		v_criteria      = new Array();
			 		v_results_ar    = new Array();
			 
			 		removeAllRowsFromTable();
			 		var temp        = criteria.split('^');
			 		for (var i=0; i< temp.length; i++)
			 		{
			 		  if (temp[i] == "")
			 		     continue;
			 		  var ss        = temp[i].split('|');				 			 	
			 		  var k         = parseInt(ss[0]) -4;
			 		  var sname     = v_fields_name_array[k];
		
			 		  var col_name  = v_fields_array[k];	
			 		  //dan chen: 
			 			$("#"+col_name).html("Criteria Added");
						$("#"+col_name).removeClass('add_bt'); 
						$("#"+col_name).addClass('added_bt');
			 	
			 	      var num = getNumberOfETF(v_back_info[k]);
			 	      //(name, num, col_name, bars, info, bars_mx, min, max, low, high)		
			 		  addRowToTable(sname, num, col_name, v_back_bars[k], v_back_info[k], v_back_mnmx[k],ss[1], ss[2], ss[3], ss[4]);
			 	      
					}
					v_category      = "";
			 		v_family        = "";
		            v_leverage      = "";
		            if (tmp.length > 1 )
		            {
						temp            = tmp[1].split('^'); 
						v_category      = temp[0];
						v_family		= temp[1];
						v_leverage      = temp[3];
		            }
		           	v_stock_exposure = new Array();
		            if (tmp.length > 2 )
		            {
		     			if (temp[2] != "")
						{
								var s = temp[2].split('|');
						
								for (var i=0; i< s.length; i++)
								{
								
									v_stock_exposure[v_stock_exposure.length] = {name:"% Exposure to "+ s[i], ticker:s[i],  sort:-1};
		   						}
		   				}
		   			}
					l_clear();
					resetResults_Data();
				}catch(ex)
				{
				  alert(ex + "in processScreen_Open()");
				}
					 
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in processScreenID End");
	 }
}


function get_stock_name(ticker)
{

	var  xmlhttp = getXMLHTTP();/// in common.js
    var url ="getStock_Name.aspx?ticker="+ ticker +"&r="+Math.random();
	xmlhttp.onreadystatechange = function() { processStock_name(xmlhttp); }; 
	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}

function processStock_name(xmlhttp)
{
    try{
		if(xmlhttp.readyState == 4)
		{
			if(xmlhttp.status == 200)
			{	
				try{	
					 		
			 		v_exposure_name   = xmlhttp.responseText; 
			 		have_exp ();
				}catch(ex)
				{
				  alert(ex + "in processStock_name()");
				}
					 
			}
		}
	  }
	 catch(ex)
	 {
		alert(ex + " in processStock_name End");
	 }
}

function formatVol(dd)
{
	if (dd == "NaN")
		return "--";
	var ss =parseInt(dd) +"", temp ="", sign ="";

	if (ss.indexOf("-") >= 0)
	{
		sign = "-";
		ss   = ss.substring(1);
	}
	var len = ss.length;
	while (len >= 3 )
	{
		if (temp == "")
			temp = ss.substring(len - 3);
		else
			temp = ss.substring(len - 3) + "," +temp;

		ss = ss.substring(0, len - 3);
		len -= 3;
	}
	if (ss != "" && temp != "")
		temp = ss +","+ temp;
	else if (ss != "")
		temp = ss;

	if (sign == "-")
		temp = sign + temp;
	return temp;
}

