//-- Globals --
// example to test alert(JSON.stringify(results) ); 
var inFindStocks;
var colWidth;
var queryResults;
var stockInfoSites;
var gridMenu;  
//----
function resizeFilters() 
{ 
  $("ul.column").css({ 'width' : "100%"});
  var colWrap = $("ul.column").width(); 
  var colNum = Math.floor(colWrap / colWidth); //Find how many columns of 200px can fit per row / then round it down to a whole number
  var colFixed = Math.floor(colWrap / colNum); //Get the width of the row and divide it by the number of columns it can fit / then round it down to a whole number. This value will be the exact width of the re-adjusted column
  $("ul.column").css({ 'width' : colWrap}); //Set exact width of row in pixels instead of using % - Prevents cross-browser bugs that appear in certain view port resolutions.
  $("ul.column li").css({ 'width' : colFixed}); //Set exact width of the re-adjusted column	
}	
//----
function showContentSection(id)
{
  if ($('#' + id).hasClass('visibleClass'))
    return;
  $("div#content").children().removeClass('visibleClass');
  $("div#content").children().addClass('hiddenClass');
  $('#' + id).removeClass('hiddenClass').addClass('visibleClass');
};
//----
function onGetDonateHtml(donateHtml)
{
  $('#donateText').html(donateHtml);
  showContentSection('donate');
}
//----
function donateClick()
{
  agent.call( "./include/ajaxfunctions.php","getDonateHtml","onGetDonateHtml" )
}
//----
function onGetPrivacyPolicyHtml(privacyPolicyHtml)
{
  $('#privacyPolicyText').html(privacyPolicyHtml);
  showContentSection('privacy');
}
//----
function privacyPolicyClick()
{
  agent.call( "./include/ajaxfunctions.php","getPrivacyPolicyHtml","onGetPrivacyPolicyHtml" )
}
//----
function waitBoxClose()
{
  $.unblockUI();
  if(queryResults != null)
	showQueryResults();
}
//----
function showMessage(header, msg)
{
  $('#messageBoxMsg').html(msg);
  $.blockUI(
  { 
    theme: true, 
    title: header, 
	message: $('#messageBox')
  });
}
//----
function onGetStocks(stocks)
{
  queryResults = stocks;	
  if ($('#keepWaitBoxOpen').is(':checked'))
  {
	$("#busyImageInWaitBox").hide();
	$("#keepWaitBoxOpenSpan").hide();
    $("#waitBoxCloseLink").show();
    $("#waitBox").hide().show(); //to force IE to refresh properly
  }
  else
  {
  	$.unblockUI();
	showQueryResults();
  }
}
//----
function getDisplayColumnName(index, value)
{
  if(value=='COUNTRY')
    columnNames.push('Country');
  else if (value=='SYMBOL')
    columnNames.push('Symbol');
  else if (value=='COMPANYNAME')
    columnNames.push('Company Name');
  else
    columnNames.push( $('#' + value + 'TITLE').text() );
}
//----
function getColModel(name)
{
  var model = {};
  // default
  model.name = name;
  model.index = name;
  model.width = 70;
  model.sorttype = 'float';
  if( name in { SYMBOL:1, COUNTRY:1, EXCHANGE:1 } )
  {
    model.sorttype = 'text';
	model.width = 60;
  }
  
  if( name in { ANALYSTRECOMMENDATION:1 } )
  {
    model.sorttype = 'text';
	model.width = 120;
  }

  if( name in { INDUSTRY:1, COMPANYNAME:1 } )
  {
    model.sorttype = 'text';
	model.width = 170;
  }
  if( name in { DIVIDENDDATE:1, EXDIVIDENDDATE:1 } )
  {
    model.sorttype = 'text';
	model.width = 90;
  }
    
  return(model);
}
//----
function showQueryResults()
{
  if (queryResults.errorMessage)
  {
	showMessage('Error', queryResults.errorMessage);
    showFirstFilterTab(); 	
	return;
  }

  var rpcResponse = queryResults.response;
  
  if(rpcResponse.Error == true)
  {   
	showMessage('Error', response.ErrorMessage);
    showFirstFilterTab(); 		
	return;
  }

  var results = rpcResponse.Results;  
  
  if (results.length == 0)
  {
	showMessage('Information', 'There are not any stocks matching your search criteria. Please make your filters less selective.');
    showFirstFilterTab(); 	 	
	return;
  }	  
  
  if (rpcResponse.ResultsTruncated == true)
	showMessage('Information', 'More than 500 matching stocks have been found. Only 500 are displayed. Please narrow your search.');
   
  var columnNames = [];
  var columnModels = [];
  
  $.each
  ( 
    queryResults.response.ColumnNames, 
	function (index, value)
	{
	  var colName;
	  if(value=='COUNTRY')
        colName = 'Country';
      else if (value=='SYMBOL')
        colName = 'Symbol';
      else if (value=='COMPANYNAME')
        colName = 'Company Name';
      else
        colName = $('#' + value + 'TITLE').text();
	  columnNames.push(colName);
	
	  columnModels.push(getColModel(value));
    }
  );
  
  $("#searchResultsTable").GridUnload();
  
  var grid = $("#searchResultsTable").jqGrid({
	datatype: "local",
	height: 370,
   	colNames : columnNames,
    colModel : columnModels,
   	imgpath: '../css/smoothness/images',
   	multiselect: false,
    onRightClickRow: function (){} // need empty handler to force right click to select
    });

  $.each 
  ( 
    results, 
	function (index, row)
	{
	  var rowData = {};
	  $.each // cell 
	  (
	    queryResults.response.ColumnNames,
		function(index, name)
		{
  	      rowData[name] = row[index];
		}
	  )
	  grid.addRowData(index+1,rowData)	  
    }
  );

  $(function() { $('#searchResultsTable').contextMenu(gridMenu,{theme:'xp'}); });  
  
  $("#searchResultsDiv").show();
 }
//----
function setFilter( index, filter )
{
  var radioInputName = 'filterUsage' + filter.name;
  $('input[name="' + radioInputName + '"]').each(function() 
  {
    if($(this).val() == filter.usage) 
    {
      $(this).attr("checked","checked");  
    }
  }
  );	
	  
  if( (filter.usage == 'ignore') || (filter.usage =='display'))
    return;

  if(filter.type == 'range')
  {
	$('#min' + filter.name).val(filter.min);
	$('#max' + filter.name).val(filter.max);
  }
  if(filter.type == 'daterange')
  { 
    $('#min' + filter.name).datepicker( 'setDate', new Date(filter.min.year, filter.min.month-1, filter.min.day));	  
    $('#max' + filter.name).datepicker( 'setDate', new Date(filter.max.year, filter.max.month-1, filter.max.day));	  
  }
  if(filter.type == 'relative')
  {
	$('#percent' + filter.name).val(filter.percent);
  }
  if(filter.type == 'list')
  {
    $('#' + filter.name + 'Select').val(filter.items).attr("selected", "selected");	  
  }
}
//----
function setFiltersFromString(lastQueryStr)
{
  clearAllFilters();
	
  if(lastQueryStr != '')
  {
    lastQuery = JSON.parse(lastQueryStr);
    date = lastQuery.date;
    filters = lastQuery.filters;
    if(date)
      $('#filterDate').datepicker("setDate", new Date(date.year,date.month-1,date.day) );
    if(filters)
      $.each( filters, setFilter );
  }
  
  highlightAllTabs();
}
//----
function createBaseFilter( name, type )
{
  var usage = $('#' + name + 'Form input:radio:checked').val();	
  if(usage == 'ignore')
	return(null);  
  var filter = {};	
  filter.name = name;
  filter.usage = usage; 
  if(filter.usage == 'use')
      filter.type = type;
  return(filter);
}
//----
function addRangeParamToFilters(filters, name)
{
  var filter = createBaseFilter(name, 'range');
  if(!filter)
    return;
  if(filter.usage == 'use')
  {
    filter.min = $("#min" + name).val().replace(/\s/g, "");  
    filter.max = $("#max" + name).val().replace(/\s/g, "");
  }
  filters.push(filter);
}
//----
function addDateRangeParamToFilters(filters, name)
{
  var filter = createBaseFilter(name, 'daterange');
  if(!filter)
    return;
  if(filter.usage == 'use')
  {
    var minDate = $("#min" + name).datepicker('getDate');
    var maxDate = $("#max" + name).datepicker('getDate');
    if((null==minDate)||(null==maxDate))
	  return;    
	filter.min = {};
    filter.min.year = minDate.getFullYear();
    filter.min.month = minDate.getMonth()+1;
    filter.min.day = minDate.getDate();    
	
    filter.max = {};
    filter.max.year = maxDate.getFullYear();
    filter.max.month = maxDate.getMonth()+1;
    filter.max.day = maxDate.getDate();    
  }
  filters.push(filter);
}//----
function addRelativeParamToFilters(filters, name, higherThan, relativeTo)
{
  var filter = createBaseFilter(name, 'relative');
  if(!filter)
    return;
  if(filter.usage == 'use')
  {
    filter.percent = $("#percent" + name).val().replace(/\s/g, "") / 1.0;  
	filter.higherThan = higherThan;
	filter.relativeTo = relativeTo;
  }
  filters.push(filter);
}
//----
function addListParamToFilters(filters, name)
{
  var filter = createBaseFilter(name, 'list');
  if(!filter)
    return;
  if(filter.usage == 'use')
  {
    filter.items = [];
        
    $('#' + name + 'Select :selected').each( function(i, selected)
	  {
        filter.items.push($(selected).text());
      });
  }
  filters.push(filter);
}
//----
function getQuery()
{
  var query = {};
  var date = $("#filterDate").datepicker('getDate');
  query.date = {};
  query.date.year = date.getFullYear();
  query.date.month = date.getMonth()+1;
  query.date.day	 = date.getDate();
  query.filters = [];
  
  addRangeParamToFilters(query.filters, 'ClosingPrice' );
  addRangeParamToFilters(query.filters, 'PercentChangeFromPreviousDay' );
  addRangeParamToFilters(query.filters, 'LastMonthChangePercent' );
  addRangeParamToFilters(query.filters, 'ThreeMonthChangePercent' );
  addRangeParamToFilters(query.filters, 'YearChangePercent' );
  addRelativeParamToFilters(query.filters, 'Price52WeekHigh', true, 'ClosingPrice' );
  addRelativeParamToFilters(query.filters, 'Price52WeekLow', false, 'ClosingPrice' );
  addRelativeParamToFilters(query.filters, 'MovingAverage50Day', true, 'ClosingPrice' );
  addRelativeParamToFilters(query.filters, 'MovingAverage200Day', true, 'ClosingPrice' );
  
  addRangeParamToFilters(query.filters, 'PETrailing12Months' );
  addRangeParamToFilters(query.filters, 'PE1YearForward' );
  addRangeParamToFilters(query.filters, 'PEIndustry' );
  addRangeParamToFilters(query.filters, 'PE5YearHigh' );
  addRangeParamToFilters(query.filters, 'PE5YearLow' );

  addRangeParamToFilters(query.filters, 'DividendYieldAsOfTradeDate' );
  addRangeParamToFilters(query.filters, 'DividendGrowth5YearPercent' );
  addDateRangeParamToFilters(query.filters, 'ExDividendDate' );
  addDateRangeParamToFilters(query.filters, 'DividendDate' );
  addRangeParamToFilters(query.filters, 'PayoutRatio' );  
  
  addRangeParamToFilters(query.filters, 'SalesLastAnnual' );  
  addRangeParamToFilters(query.filters, 'IncomeLastAnnual' );  
  addRangeParamToFilters(query.filters, 'IncomeGrowthLastYear' );  
  addRangeParamToFilters(query.filters, 'IncomeGrowth5YearPercent' );  
  addRangeParamToFilters(query.filters, 'SalesGrowth5YearPercent' );  
  addRangeParamToFilters(query.filters, 'NetProfitMargin' );  
  addRangeParamToFilters(query.filters, 'MarketCap' );  
  addRangeParamToFilters(query.filters, 'NumberOfShares' );  
  addRangeParamToFilters(query.filters, 'NumberOfEmployees' );    
  addListParamToFilters(query.filters, 'Industry' );
  addListParamToFilters(query.filters, 'Exchange' );

  addRangeParamToFilters(query.filters, 'DebtEquityRatio' );  
  addRangeParamToFilters(query.filters, 'PriceToBook' );  
  addRangeParamToFilters(query.filters, 'PriceToBookIndustry' );  
  addRangeParamToFilters(query.filters, 'PriceToSales' );  
  addRangeParamToFilters(query.filters, 'PriceToSalesIndustry' );  
  addRangeParamToFilters(query.filters, 'PriceToCashFlow' );  
  addRangeParamToFilters(query.filters, 'PriceToCashFlowIndustry' );  
  addRangeParamToFilters(query.filters, 'ShortPercentage' );  
  addRangeParamToFilters(query.filters, 'CashToMarketCap' );  
  addRangeParamToFilters(query.filters, 'SimpleCashToMarketCap' );  
  addRangeParamToFilters(query.filters, 'PEGRatio' );  
  addRangeParamToFilters(query.filters, 'NumberOfAnalysts' );    
  addRangeParamToFilters(query.filters, 'Beta' );  
  addRangeParamToFilters(query.filters, 'InsiderHoldings' );  
  addRangeParamToFilters(query.filters, 'InstitutionalHoldings' );  
  addRangeParamToFilters(query.filters, 'InsiderTransactions6Months' );  
  addRangeParamToFilters(query.filters, 'SalesPerEmployee' );  
  addRangeParamToFilters(query.filters, 'IncomePerEmployee' );  
  
  addRangeParamToFilters(query.filters, 'AverageDailyVolume' );  
  
  addListParamToFilters(query.filters, 'AnalystRecommendation' );

  $.cookie("stock4d_query", JSON.stringify(query), { expires: 180 });  
  
  return (query);	
}
//----
function findStocks()
{
  if (inFindStocks)
	return;
  inFindStocks = 1;
  try 
  {
    $("ul.filterTabs li").removeClass("active"); 
    $(".filterContent").hide(); 
    $("#searchResultsDiv").hide();
	
	var quote = agent.call( "./include/ajaxfunctions.php","getRandomQuote", null );
	$('#quote').html(quote['quote']);
	$('#author').html('&nbsp;-' + quote['author']);
    $("#waitBoxCloseLink").hide();
	$("#busyImageInWaitBox").show();
	$("#keepWaitBoxOpenSpan").show();
	$.blockUI({ 
            theme:     true, 
            title:    'While you are waiting for the answer...', 
			message: $('#waitBox')
			}); 

	queryResults = null;
    agent.call( "./include/ajaxfunctions.php","getStocks","onGetStocks", getQuery() );
  } 
  catch( error ) 
  {
    alert( error.name + ': ' + error.message );
  } 
  finally 
  {
    inFindStocks = 0;
  }	  
}
//----
function windowResize()
{
  if ($('#filter').hasClass('visibleClass'))
    resizeFilters();
}
//----
function tabClick()
{
  var wasActive = $(this).hasClass("active");
  $("ul.filterTabs li").removeClass("active"); //Remove any "active" class
  $(".filterContent").hide(); //Hide all tab content
  if(!wasActive) 
  {
	$(this).addClass("active"); //Add "active" class to selected tab
	var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content
	$(activeTab).fadeIn(); //Fade in the active ID content
  };
  return false;
}
//----
function showFirstFilterTab()
{
  $(".filterContent").hide(); 
  $("ul.filterTabs li:first").addClass("active").show(); 
  $(".filterContent:first").show(); 
  $("ul.filterTabs li").click( tabClick ); 
}
//----
function getSelectedCountrySymbol()
{
  var rowNo = jQuery("#searchResultsTable").jqGrid('getGridParam','selrow'); 
  if (rowNo) 
  { 
    var row = jQuery("#searchResultsTable").jqGrid('getRowData',rowNo); 
    obj = {};
	obj.country = row.COUNTRY;
	obj.symbol = row.SYMBOL; 
	obj.exchange = row.EXCHANGE;
	return(obj);
  }
  else
    return(null);
  
}
//----
function viewStockDetails(menuIndex)
{
  obj = getSelectedCountrySymbol();
  if(!obj)
    return;
  url =   agent.call( "./include/ajaxfunctions.php","getStockInfoUrl",null,obj.country,obj.symbol,obj.exchange,stockInfoSites[menuIndex]); 
  if(url!='')
    window.open(url);
}
//----
function viewStock0(menuItem,menuObject) { viewStockDetails(0) }
function viewStock1(menuItem,menuObject) { viewStockDetails(1) }
function viewStock2(menuItem,menuObject) { viewStockDetails(2) }
function viewStock3(menuItem,menuObject) { viewStockDetails(3) }
function viewStock4(menuItem,menuObject) { viewStockDetails(4) }
function viewStock5(menuItem,menuObject) { viewStockDetails(5) }
function viewStock6(menuItem,menuObject) { viewStockDetails(6) }
function viewStock7(menuItem,menuObject) { viewStockDetails(7) }
function viewStock8(menuItem,menuObject) { viewStockDetails(8) }
function viewStock9(menuItem,menuObject) { viewStockDetails(9) }

//----
function onGetStockInfoSites(sites)
{
  stockInfoSites = sites;
  gridMenu = [];  
  // not elegant. Context menu callbach does not provide menu item index
  for ( var i=0; i<stockInfoSites.length; i++ )
  {
	if(i>9)
	  break;
    menu = {};  
    switch(i)
    {
      case 0:menu['View on ' + stockInfoSites[i]] = viewStock0; break;
      case 1:menu['View on ' + stockInfoSites[i]] = viewStock1; break;
      case 2:menu['View on ' + stockInfoSites[i]] = viewStock2; break;
      case 3:menu['View on ' + stockInfoSites[i]] = viewStock3; break;
      case 4:menu['View on ' + stockInfoSites[i]] = viewStock4; break;
      case 5:menu['View on ' + stockInfoSites[i]] = viewStock5; break;
      case 6:menu['View on ' + stockInfoSites[i]] = viewStock6; break;
      case 7:menu['View on ' + stockInfoSites[i]] = viewStock7; break;
      case 8:menu['View on ' + stockInfoSites[i]] = viewStock8; break;
      case 9:menu['View on ' + stockInfoSites[i]] = viewStock9; break;
    }
    gridMenu.push(menu);
  }  
  
  // $.contextMenu.separator, 
 // {'Export to CSV (to load in Excel)':function(menuItem,menu) { alert("Export to csv"); } } 
}
//----
function filterValueChange(eventObject) 
{
  var radioInputName;
  if($(this).attr("alt") == 'percent')
	radioInputName  = $(this).parent().parent().siblings().find('input:radio').filter(":first").attr("name");
  else
    radioInputName  = $(this).parent().parent().children().find('input:radio').filter(":first").attr("name");
  $('input[name="' + radioInputName + '"]').each(function() 
    {
      if($(this).val() == "use") 
      {
        $(this).attr("checked","checked");  
      }
      if($(this).val() == "ignore") 
        $(this).parent().parent().parent().removeClass("activeBlock");
	  else
        $(this).parent().parent().parent().addClass("activeBlock");

      highlightTab($(this).parent().parent().parent().parent().parent().parent().attr("id"));
    }
  );	
}
//----
function highlightTab(tabID)
{
  var active=0;
  
  $('#' + tabID + ' input:radio').each( function()
  {
    if($(this).val() == 'ignore') 
    {
	  if(!$(this).attr("checked") )  
      {
		active=1;
		return false;
	  }
    }
  }
  );  
  if(active)
    $('a[href=#' + tabID + ']').addClass( "activeTab");
  else
    $('a[href=#' + tabID + ']').removeClass( "activeTab");
}
//----
function highlightAllTabs()
{
  $('.filterContent').each( function ()
  {
    highlightTab($(this).attr("id"));  
  }
  );
  
  $('.filterContainer input:radio').each( function()
  {
    if($(this).val() == 'ignore') 
    {
      if(!$(this).attr("checked") )  
	    $(this).parent().parent().parent().addClass("activeBlock");
    }
  }
  );
}
//----
function radioFieldChange(eventObject) 
{
  if($(this).val() == "ignore") 
    $(this).parent().parent().parent().removeClass("activeBlock");
  else
    $(this).parent().parent().parent().addClass("activeBlock");

  highlightTab($(this).parent().parent().parent().parent().parent().parent().attr("id"));
}
//---
function clearAllFilters()
{
  $('.filterContainer input:radio').each( function()
  {
    if($(this).val() == 'ignore') 
    {
      $(this).attr("checked","checked");  
	  $(this).parent().parent().parent().removeClass("activeBlock");
    }
  }
  );

  $('.filterContainer select option').each( function()
  {
	$(this).attr('selected', false);  
  }
  );  
  
  $('.field').val(0);
  $('.percentField').val(0);
  $('.dateField').val('');
  
  highlightAllTabs(); // must be called as applyExampleFilter may not follow
}
//---
function applyExampleFilter()
{
  var filterExample = $('#exampleFilterSelect').val();
  if (filterExample == 'Clear')
  {
	setFiltersFromString('');
  }
  if (filterExample == 'LowPEGLargeCap')
  {
	setFiltersFromString('{"filters":[{"name":"ClosingPrice","usage":"display"},{"name":"PETrailing12Months","usage":"display"},{"name":"PE1YearForward","usage":"display"},{"name":"MarketCap","usage":"use","type":"range","min":"10000000000","max":"1000000000000"},{"name":"DebtEquityRatio","usage":"use","type":"range","min":"0","max":"0.30"},{"name":"PEGRatio","usage":"use","type":"range","min":"0.00","max":"0.40"},{"name":"NumberOfAnalysts","usage":"display"}]}');  
  }

  if (filterExample == 'HighDividend')
  {
	setFiltersFromString(
'{"filters":[{"name":"ClosingPrice","usage":"display"},{"name":"PETrailing12Months","usage":"display"},{"name":"DividendYieldAsOfTradeDate","usage":"use","type":"range","min":"4.00","max":"50.00"},{"name":"DividendGrowth5YearPercent","usage":"display"},{"name":"ExDividendDate","usage":"display"},{"name":"PayoutRatio","usage":"use","type":"range","min":"0.01","max":"25.00"},{"name":"MarketCap","usage":"display"}]}' );
  } 

  if (filterExample == 'LowPE')
  {
	setFiltersFromString(
'{"filters":[{"name":"ClosingPrice","usage":"use","type":"range","min":"2.00","max":"1000000000.00"},{"name":"MovingAverage200Day","usage":"use","type":"relative","percent":30,"higherThan":true,"relativeTo":"ClosingPrice"},{"name":"PETrailing12Months","usage":"use","type":"range","min":"0.50","max":"10.00"},{"name":"MarketCap","usage":"display"}]}' );
  } 

  if (filterExample == 'GrowthAndInsiders')
  {
	setFiltersFromString(
'{"filters":[{"name":"ClosingPrice","usage":"display"},{"name":"PETrailing12Months","usage":"display"},{"name":"IncomeGrowthLastYear","usage":"use","type":"range","min":"20.00","max":"10000.00"},{"name":"IncomeGrowth5YearPercent","usage":"use","type":"range","min":"20.00","max":"10000.00"},{"name":"SalesGrowth5YearPercent","usage":"use","type":"range","min":"20.00","max":"10000.00"},{"name":"NetProfitMargin","usage":"display"},{"name":"MarketCap","usage":"display"},{"name":"InsiderHoldings","usage":"use","type":"range","min":"10.00","max":"100.00"}]}' );
  }
 

  if (filterExample != 'Clear')
    showMessage( 'Information', 'Filters have been applied. Click on the "Search for stocks" button to execute the search.');
}
function onGetUrlFilter(filter)
{
  if(filter == '')
  {
    var lastQuery = $.cookie("stock4d_query");
    if(lastQuery)
      setFiltersFromString(lastQuery);
  }
  else
   	setFiltersFromString(filter.replace(/'\"'/, '"'));  
	  
  
  $(".filterField").change( filterValueChange );
  
  $(".radioField").change( radioFieldChange );
  
  showContentSection('filter');    
}
//----
function loadDefaultFilter()
{
  agent.call( "./include/ajaxfunctions.php","getUrlFilter","onGetUrlFilter" )
}
//----
function showFilterLink()
{
  var query = getQuery();
  delete query.date;
  
  if(query.filters.length == 0)
  {
    showMessage('Information', 'There are not any filter parameters set. Cannot create link to an empty search.' );
	return;
  }
  
  var url='http://www.stock4d.com/index.php?filter=' + JSON.stringify(query);

  $('#emailLinkInput').val( url );
  $('#htmlLinkInput').val( '<a href="' + encodeURI(url) + '">Find stocks on www.Stock4D.com</a>' );
 
  $('#showLinkBox').dialog("open"); 
  $('#emailLinkInput').focus();
}
//----
function documentReady()
{
  // for xhtml validation. use rel* to support multiple values like rel="external nofollow"	
  $('a[rel*=external]').click( function() {
    window.open(this.href);
    return false;
  });	
	
  $('#dontShowMsgAgain').hide();
  $('#closeMessageBoxButton').click(function() { $.unblockUI(); return false; });   
  
  showFirstFilterTab();  
  $('#privacyLink').click( function () { privacyPolicyClick() } );
  $('#aboutLink').click( function () { showContentSection('about') } );
  $('.donateLink').click( function () { donateClick() } );
  $('.returnToFilter').click( function () { showContentSection('filter') } );
  $('#findStocks').click( function () { findStocks() } );
  $('#waitBoxCloseLink').click( function () { waitBoxClose() } );
  $('#applyExampleFilter').click( function () { applyExampleFilter() } );  
  $('.filterLink').click( function () { showFilterLink() } );
  $('#showLinkBox').dialog(
  { 
    autoOpen: false,
	height: 150,
    width: 480,
	modal: true,
	position: [195,94],
    title: 'Link to this stock screen'
  }); 

  $('#emailLinkInput').focus(function() { $(this).select(); });  
  $('#htmlLinkInput').focus(function() { $(this).select(); });  
  
  // text field masks
  $.mask.masks.percent = { mask : '99.999 999', type : 'reverse', defaultValue : '+000' };
  $.mask.masks.positivePrice = { mask : '99.999 999 999 999 999', type : 'reverse', defaultValue : '000' };
  $.mask.masks.price = { mask : '99.999 999 999 999 999', type : 'reverse', defaultValue : '+000' };  
  $.mask.masks.positiveInteger = { mask : '999 999 999 999 999', type : 'reverse', defaultValue : '0' };  
  
  $("#filterDate").datepicker(
	  {showOn: 'button', buttonImage: 'img/calendar.gif', buttonImageOnly: true,changeMonth: true,changeYear: true, minDate: (new Date(2006, 7, 30)), maxDate: '+0D' });
  $("#filterDate").datepicker('setDate', '-0');
  $("#minExDividendDate").datepicker(
	  {showOn: 'button', buttonImage: 'img/calendar.gif', buttonImageOnly: true });
  $("#maxExDividendDate").datepicker(
	  {showOn: 'button', buttonImage: 'img/calendar.gif', buttonImageOnly: true });
  $("#minDividendDate").datepicker(
	  {showOn: 'button', buttonImage: 'img/calendar.gif', buttonImageOnly: true });
  $("#maxDividendDate").datepicker(
	  {showOn: 'button', buttonImage: 'img/calendar.gif', buttonImageOnly: true });
  
  $('input:text').setMask();
  
  agent.call( "./include/ajaxfunctions.php","getStockInfoSites","onGetStockInfoSites" ); 
  
  loadDefaultFilter();
}
//----
function startUp()
{
  $('#header').corner("top").corner("bottom;3px");
  $('#footer').corner("bottom").corner("top;3px");
  $('#content').corner("3px");
  // init globals
  inFindStocks = 0;
  colWidth     = 244;
}
//----
$(document).ready( documentReady ); 
startUp();


