var dummy = '$Id: racing.js,v 1.1.2.35 2010-08-04 15:08:59 mjack Exp $';

function update_prices() {
	location.reload();		
}



// Add a racing selection to the betslip.
//
// The price_string should contain all the information which we must
// communicate from the drilldown page to the betslip in order to
// ensure the customer gets the selection at the terms he's expecting.
//
// The price_terms_string consists of fields:
//   price_type, lp_num, lp_den, mkt_tags, ew_fac_num, ew_fac_den, ew_places
// separated by underscores. Empty fields at the end may be omitted.
//
// Fields in the price string can be overriden by passing them as additional
// arguments - e.g. do_racecard_bet(123,'L_3_1_|AP|_1_3_4',price_type,'S')
// would cause the price type to be S, not the L given in the price string.
//
// bet_origin is an optional string used to record the page the bet was placed from
//
function do_racecard_bet(ev_oc_id, price_string, bet_origin) {

	var price_terms = price_string.split('_');

	var P = new Object();

	P.price_type = price_terms[0];
	P.lp_num     = price_terms[1];
	P.lp_den     = price_terms[2];
	P.mkt_tags   = price_terms[3];
	P.ew_fac_num = price_terms[4];
	P.ew_fac_den = price_terms[5];
	P.ew_places  = price_terms[6];

	for (var i = 2; i < arguments.length; i += 2) {
		var key = arguments[i];
		var val = arguments[i+1];
		P[key] = val;
	}

	if (P.price_type == 'S') {
		P.lp_num = '';
		P.lp_den = '';
	}

	BS_set_leg('selections',  ev_oc_id);

	BS_set_leg('price_type',  P.price_type);
	BS_set_leg('lp_num',      P.lp_num);
	BS_set_leg('lp_den',      P.lp_den);
	BS_set_leg('market_tags', P.mkt_tags);
	BS_set_leg('ew_fac_num',  P.ew_fac_num);
	BS_set_leg('ew_fac_den',  P.ew_fac_den);
	BS_set_leg('ew_places',   P.ew_places);

	if ((typeof bet_origin != 'undefined') && (bet_origin != undefined) && (bet_origin != "")) {
		BS_set_leg('bet_origin', bet_origin);
	}

	BS_go_bet();
}

function go_racecard() {

	var ev_id_list = "";
	var ev_time_list = "";
	var num_selected = 0;

	var ev_id_checkboxes = document.getElementsByName('checkbox_ev_id');
	var ev_start_times = document.getElementsByName('ev_start_time');

	for (i = 0; i < ev_id_checkboxes.length; i++) {

		if (ev_id_checkboxes[i].checked) {

			if (ev_id_list != "") {
				ev_id_list = ev_id_list + "|";
				ev_time_list = ev_time_list + "|";
			}
			ev_id_list = ev_id_list + ev_id_checkboxes[i].value;
			ev_time_list = ev_time_list + ev_start_times[i].value;

			num_selected = num_selected + 1;
		}
	}

	if (num_selected == 0) {
		alert(noRacesSelected);
	} else if (num_selected > racecardLimit) {
		alert(racesSelectedLimit + ': ' + racecardLimit);
	} else {
		document.forms["ev_ids_form"].ev_ids.value = ev_id_list;
		document.forms["ev_ids_form"].ev_times.value = ev_time_list;
		document.forms["ev_ids_form"].submit();
	}
}


// CHECK LIMITS (UNCHECK BOXES AS CHECKING HAPPENS)
//=============================================

function checkLimits(tf,seln_row,seln_col,num_selections,ev_id) {

	var col_max;

	if (tf == "t") {
		col_max = 3;
	} else {
		col_max = 2;
	}

	if (seln_col == "A") {
		checkLimitsAny(tf,col_max,seln_row,seln_col,num_selections,ev_id);
	} else {
		checkLimits123(tf,col_max,seln_row,seln_col,num_selections,ev_id);
	}

	return;

}


function checkLimits123(tf,col_max,seln_row,seln_col,num_selections,ev_id) {

	//mutal-exclusion check: since its 1/2/3, unselect all 'any order'
	//-----
	var chkbx_name;
	for (var j = 1; j <= num_selections; j++) {
		chkbx_name = "tfcast" + tf + "_" + j + "_A_" + ev_id;
		// DISABLE THIS CHKBX
		clear(chkbx_name);
	}

	//if 1/2/3
	//-----
	//clear all others in same column
	var this_name = "tfcast" + tf + "_" + seln_row + "_" + seln_col + "_" + ev_id;
	for (var j = 1; j <= num_selections; j++) {
		chkbx_name = "tfcast" + tf + "_" + j + "_" + seln_col + "_" + ev_id;
		// if not THIS, then GET + DISABLE THIS CHKBX
		if (chkbx_name != this_name) { clear(chkbx_name); }
	}

	//clear all others in same row
	for (var i = 1; i <= col_max; i++) {
		chkbx_name = "tfcast" + tf + "_" + seln_row + "_" + i + "_" + ev_id;
		// if not THIS, then GET + DISABLE THIS CHKBX
		if (chkbx_name != this_name) { clear(chkbx_name); }
	}

	return;

}


var last_1 = "";
var last_2 = "";
var last_3 = "";

function checkLimitsAny(tf,col_max,seln_row,seln_col,num_selections,ev_id) {

	//mutal-exclusion check: since its 'any order', unselect all 1/2/3
	//-----
	var chkbx_name;
	var this_name = "tfcast" + tf + "_" + seln_row + "_" + seln_col + "_" + ev_id;
	for (var i = 1; i <= col_max; i++) {
		for (var j = 1; j <= num_selections; j++) {
			chkbx_name = "tfcast" + tf + "_" + j + "_" + i + "_" + ev_id;
			// DISABLE THIS CHKBX
			clear(chkbx_name);
		}
	}

	return;
}

// SOME UTILITY FUNCTIONS FOR CHECK LIMITS
//=============================================

function clear(name){

	if (document.getElementById) {
		obj = document.getElementsByName(name).item(0);
	} else if (document.all) {
		obj= document.all[name];
	} else if (document.layers) {
		obj = getObjNN4(document,name);
	}

	if (obj) {
		obj.checked=false;
	}

}

function getObj(sname) {
	if (document.getElementById) {
		obj = document.getElementsByName(sname).item(0);
	} else if (document.all) {
		obj= document.all[sname];
	} else if (document.layers) {
		obj = getObjNN4(document,sname);
	}

	return obj;
}

function getObjNN4(obj,name)
{
	var x = obj.layers;
	var thereturn;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	thereturn = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) thereturn = tmp;
	}
	return thereturn;
}


function prepXCast(num_selections,ev_id) {

	var badXCast = true;

	// Check Forecasts, then Tricasts
	for (var col_max = 2; col_max <= 3; col_max++) {

		var selns    = new Array();
		var tf       = col_max == 2 ? 'f' : 't';
		var combi    = false;
		var leg_sort = 'BAD';

		// Check Straight, then Combis
		for (var i = 1; i <= (col_max + 1); i++) {

			// Check Selections
			for (var j = 1; j <= num_selections; j++) {

				// Build the selection checkbox's name
				if (i > col_max) {
					chkbx_name = "tfcast" + tf + "_" + j + "_A_" + ev_id;
				} else {
					chkbx_name = "tfcast" + tf + "_" + j + "_" + i + "_" + ev_id;
				}
				obj = getObj(chkbx_name);

				// if the selection wasn't chosen then check next selection
				if (obj.checked != true) continue;

				// Add the selection
				selns.push(obj.value);

				// Check if it's a combi i.e. RF or CT
				if (i > col_max) combi = true;
			}
		}

		// if there aren't enough selections then check next xCast
		if ( selns.length < col_max ) continue;

		if (col_max == 2) {
			leg_sort = combi ? 'RF' : 'SF';
		} else {
			leg_sort = combi ? 'CT' : 'TC';
		}

		// If bad leg_sort then check next xCast
		if (leg_sort == 'BAD') continue;

		var ev_oc_ids = selns.join('c');

		// Create the leg
		BS_set_leg('leg_sort',    leg_sort);
		BS_set_leg('price_type',       'D');
		BS_set_leg('selections', ev_oc_ids);
		BS_select_bet(leg_sort + '_' + ev_oc_ids);

		// found a valid xCast so disarm flag
		badXCast = false;
	}

	return badXCast;
}



function createInput(sname,svalue) {

	var x = getObj(sname);

	if (!x) {
		var oInput = document.createElement("INPUT");
		oInput.name = sname;
		oInput.type = "HIDDEN";
		oInput.id = sname;
		oInput.value = svalue;
		oForm = getObj("betform");
		oForm.appendChild(oInput);
	} else {
		x.value = svalue;
	}

}


function place_fore_tricast(num_selections,ev_id) {

	if (prepXCast(num_selections,ev_id)) {
		alert(notEnoughSelections);
		return;
	}
	BS_go_bets();
}



function toggleRaceDetails(ev_id) {

	var the_div = document.getElementById('race_details_' + ev_id);
	var the_span = document.getElementById('remove_return_' + ev_id);

	if (the_div.style.display == 'block') {
		the_div.style.display = 'none';
		the_span.innerHTML = '<a href="javascript:toggleRaceDetails(' + ev_id + ');" class="remove">' + returnLink + '</a>';
	} else {
		the_div.style.display = 'block';
		the_span.innerHTML = '<a href="javascript:toggleRaceDetails(' + ev_id + ');" class="remove">' + removeLink + '</a>';
	}
}

function toggleHiddenRunners(ev_id) {
	
	var the_span = document.getElementById('remove_return_' + ev_id);
	var filtered_list  = filtered_hash.get(ev_id);
	var row = null;
	var show = 0;
	
	for (var r = 0; r < filtered_list.length; r++) {
		row = document.getElementById("seln_row_"+ ev_id +"_"+ filtered_list[r]);
		links = row.getElementsByTagName("a");
		//alert(odds.href);
		if (row.style.display == '') {
			row.style.display = 'none';
			forceToggleLinks(row,'none');
			show = 0;
		} else {
			row.style.display = '';
			forceToggleLinks(row,'');
			show = 1;
		}
	}
	

	if (show) {
		the_span.innerHTML = '<a href="javascript:toggleHiddenRunners(' + ev_id + ');" class="hidehiddenrunners">' + hide_filtered + '</a>';
		
		if (document.getElementById('unnamed_first_' + ev_id) != null){
			document.getElementById('unnamed_first_' + ev_id).style.display = "";
			forceToggleLinks(document.getElementById('unnamed_first_' + ev_id),"");
		}
		if (document.getElementById('unnamed_second_' + ev_id) != null){
			document.getElementById('unnamed_second_' + ev_id).style.display = "";
			forceToggleLinks(document.getElementById('unnamed_second_' + ev_id),"");
		}
		
	} else {
		the_span.innerHTML = '<a href="javascript:toggleHiddenRunners(' + ev_id + ');" class="showhiddenrunners">' + show_filtered + '</a>';
		
		if (document.getElementById('unnamed_first_' + ev_id) != null){
			document.getElementById('unnamed_first_' + ev_id).style.display = "none";
			forceToggleLinks(document.getElementById('unnamed_first_' + ev_id),"none");
		}
		if (document.getElementById('unnamed_second_' + ev_id) != null){
			document.getElementById('unnamed_second_' + ev_id).style.display = "none";
			forceToggleLinks(document.getElementById('unnamed_second_' + ev_id),"none");
		}
	}
}

function forceToggleLinks(row,display){
	links = row.getElementsByTagName("a");
	for(var l=0;l<links.length;l++){
		links[l].style.display = display;
	}
}

function toggleForm(ev_type_id) {

	var the_title_box;
	var the_title;
	var the_button_span;
	var the_div;

	var open_form = document.getElementById('open_form');
	var open_form_input = open_form.value;

	if (open_form.value != '-') {

		// the form is open and we want to close it

		the_title_box = document.getElementById('ev_type_title_box_' + open_form.value);
		the_title = document.getElementById('ev_type_title_' + open_form.value);
		the_button_span = document.getElementById('form_button_' + open_form.value);
		the_div = document.getElementById('form_' + open_form.value);

		// close the form
		the_div.style.display = 'none';
		the_title_box.style.background = '#EFEFEF';
		the_title.style.color = '#000';
		the_button_span.innerHTML = formButton;

		open_form.value = '-';
	}

	if (open_form_input != ev_type_id) {

		// all forms closed, opening the one they want

		the_title_box = document.getElementById('ev_type_title_box_' + ev_type_id);
		the_title = document.getElementById('ev_type_title_' + ev_type_id);
		the_button_span = document.getElementById('form_button_' + ev_type_id);
		the_div = document.getElementById('form_' + ev_type_id);

		// open the form
		the_div.style.display = 'block';
		the_title_box.style.background = '#018539';
		the_title.style.color = '#fff';
		the_button_span.innerHTML = closeButton;

		open_form.value = ev_type_id;
	}
}


function toggleEventForm(ev_id) {

	var event_form_exists = document.getElementById('event_form_exists_' + ev_id);
	var the_button_span = document.getElementById('event_form_button_' + ev_id);
	var the_div = document.getElementById('event_form_' + ev_id);

	if (event_form_exists != null && event_form_exists.value == 'Y') {
		if (the_div.style.display == 'block') {
			the_div.style.display = 'none';
			the_button_span.innerHTML = formButton;
		} else {
			the_div.style.display = 'block';
			the_button_span.innerHTML = closeButton;
		}
	}
}


function displayFormSummaryCallback(ev_type_id, start_time, state, the_text) {

	var form_links = document.getElementsByName('form_links_' + ev_type_id);
	for ( var i = 0; i < form_links.length; i++ ) {
		if (form_links[i].innerHTML == start_time) {
			form_links[i].style.textDecoration = 'underline';
		} else {
			form_links[i].style.textDecoration = 'none';
		}
	}

	var the_span = document.getElementById('form_summary_' + ev_type_id);
	the_span.innerHTML = '<strong>' + start_time + '</strong><br>&nbsp;<br>' + the_text;

}



function displayFormSummary(ev_type_id, ev_id, start_time) {

	var req = null;

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		req = new ActiveXObject('Microsoft.XMLHTTP');
	}

	if (req) {

		req.onreadystatechange = function() {

			if (req.readyState != 4) return;

			var reqStatus;
			try {
				reqStatus = req.status;
			} catch (e) {
				reqStatus = '';
			}

			if (reqStatus != 200) {
				displayFormSummaryCallback(ev_type_id,start_time,false,'HTTP');
			} else {
				var content_type = req.getResponseHeader("Content-Type");
				displayFormSummaryCallback(ev_type_id,start_time,true,req.responseText,content_type);
			}

		}

		try {
			req.open('GET', racing_cgi_url + '?action=go_racing_form_text&ev_id=' + ev_id, true);
			req.send(null);
		} catch (e) {
			displayFormSummaryCallback(ev_type_id,start_time,false,'UNSUPPORTED');
		}

	} else {
		displayFormSummaryCallback(ev_type_id,start_time,false,'UNSUPPORTED');
	}

}



function do_racecard_reset() {

	var ev_oc_id = "";
	var ev_ids = document.getElementsByName('racecard_ev_id');
	var ev_oc_ids;

	for ( var i = 0; i < ev_ids.length; i++ ) {

		ev_oc_ids = document.getElementsByName('racecard_ev_oc_id_' + ev_ids[i].value);

		for ( var j = 0; j < ev_oc_ids.length; j++) {
			ev_oc_ids[j].checked = false;
		}
	}
}

function do_foretricasts_reset(num_selections, ev_id) {

	var tf;
	var id_string = "";
	var count = 0;
	createInput("f_selected_leg_sort","");
	createInput("t_selected_leg_sort","");

	for (var col_max = 2; col_max <= 3; col_max++) {

		id_string = "";
		count = 0;

		if (col_max == 2) { tf = "f"; } else { tf = "t"; }
		var combination = 0;
		var straight = 0;

		for (var i = 1; i <= (col_max + 1); i++) {

			for (var j = 1; j <= num_selections; j++) {
				if (i > col_max) {
					chkbx_name = "tfcast" + tf + "_" + j + "_A_" + ev_id;
				} else {
					chkbx_name = "tfcast" + tf + "_" + j + "_" + i + "_" + ev_id;
				}

				if (document.getElementById) {
					obj = document.getElementsByName(chkbx_name).item(0);
				} else if (document.all) {
					obj= document.all[chkbx_name];
				} else if (document.layers) {
					obj = getObjNN4(document,chkbx_name);
				}

				obj.checked = false;

			}
		}
	}
}

function update_prices2(ev_id) {

	// we only need the ev_id to anchor back to wherever the refresh button was pressed

	var tabs = document.getElementsByTagName("li");
	var tabs_string = "";

	for(var i=0; i < tabs.length; i++) {
		if(tabs[i].className == "on" && tabs[i].id.indexOf("li_") > -1) {
			if (tabs_string != "") {
				tabs_string = tabs_string + "|";
			}
			tabs_string = tabs_string + tabs[i].id;
		}
	}

	document.update_prices_form.tabs.value = tabs_string;

	// include the filtering on jockey or trainer if there is any
	if (filter_type == "J") {
		document.update_prices_form.jockey.value = filter_text;
	} else if (filter_type == "T") {
		document.update_prices_form.trainer.value = filter_text;
	}

	document.update_prices_form.action = document.update_prices_form.action + '#' + ev_id;
	document.getElementById("action_update_prices").name = "action";
	document.getElementById("action_update_prices").value = "go_racing";

	document.update_prices_form.submit();
}


function do_tabs(ev_id) {

	var li_markets = document.getElementById('li_markets_' + ev_id + '_');
	var li_forecast = document.getElementById('li_forecast_' + ev_id + '_');
	var li_match = document.getElementById('li_match_' + ev_id + '_');

	if (li_markets != null) {
		li_markets.style.display = 'none';
	}
	if (li_forecast != null) {
		li_forecast.style.display = 'none';
	}
	if (li_match != null) {
		li_match.style.display = 'none';
	}

	document.getElementById('li_full_' + ev_id + '_').style.display = '';
}


function switcher(action,ev_id,num_runners,num_markets) {

	var td_element;

	// if we're trying to switch to all markets tab but it's not there
	// then we need to fall back on racecard tab
	if (action == 'markets') {
		if (document.getElementById('li_racecard_' + ev_id + '_' + num_runners + '_' + num_markets) != null) {
			if (document.getElementById('li_markets_' + ev_id + '_' + num_runners + '_' + num_markets) == null) {
				switcher('racecard',ev_id,num_runners,num_markets);
				return;
			}
		}
	}

	// if we're trying to switch to racecard tab but we don't have it, then
	// we should fall back on the markets tab. if that doesn't exist either,
	// then we must have a single market template race, so switch to single
	if (action == 'racecard') {
		if (document.getElementById('li_racecard_' + ev_id + '_' + num_runners + '_' + num_markets) == null) {
			if (document.getElementById('li_markets_' + ev_id + '_' + num_runners + '_' + num_markets) == null) {
				document.getElementById('singles_' + ev_id).style.display = "";
			} else {
				switcher('markets',ev_id,num_runners,num_markets);
				return;
			}
		}
	}


	var tabs=document.getElementsByTagName("li");
	for(var i=0;i<tabs.length;i++) {
		if(tabs[i].id.indexOf("_" + ev_id + "_") > -1) {
			tabs[i].className="";
		}
	}


	if (document.getElementById('match_' + ev_id + '_') != null) {document.getElementById('match_' + ev_id + '_').style.display = 'none';}
	if (document.getElementById('li_match_' + ev_id + '_') != null) {document.getElementById('li_match_' + ev_id + '_').className = "";}

	if (action == "racecard") {
		// hide headers
		if (document.getElementById('cell_number_' + ev_id) != null) {document.getElementById('cell_number_' + ev_id).style.display = "";}
		if (document.getElementById('cell_silk_' + ev_id) != null) {document.getElementById('cell_silk_' + ev_id).style.display = "";}
		if (document.getElementById('cell_horse_' + ev_id) != null) {document.getElementById('cell_horse_' + ev_id).style.display = "";}
		if (document.getElementById('cell_trainer_' + ev_id) != null) {document.getElementById('cell_trainer_' + ev_id).style.display = "";}
		if (document.getElementById('cell_form_' + ev_id) != null) {document.getElementById('cell_form_' + ev_id).style.display = "";}
		if (document.getElementById('cell_age_' + ev_id) != null) {document.getElementById('cell_age_' + ev_id).style.display = "";}
		if (document.getElementById('cell_previous_' + ev_id) != null) {document.getElementById('cell_previous_' + ev_id).style.display = "";}
		if (document.getElementById('cell_markets_' + ev_id + '_0') != null) {document.getElementById('cell_markets_' + ev_id + '_0').style.display = "";}
		for (i = 1; i < num_markets; i++) {
			if (document.getElementById('cell_markets_' + ev_id + '_' + i) != null) {document.getElementById('cell_markets_' + ev_id + '_' + i).style.display = "none";}
		}
		if (document.getElementById('cell_fctc_odds_' + ev_id) != null) {document.getElementById('cell_fctc_odds_' + ev_id).style.display = "none";}
		if (document.getElementById('cell_fore_tricast_' + ev_id) != null) {document.getElementById('cell_fore_tricast_' + ev_id).style.display = "none";}

		//hide data
		for (i = 0; i < num_runners; i++) {
			if (document.getElementById('cell_number_' + ev_id + '_' + i) != null) {document.getElementById('cell_number_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_silk_' + ev_id + '_' + i) != null) {document.getElementById('cell_silk_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_horse_' + ev_id + '_' + i) != null) {document.getElementById('cell_horse_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_trainer_' + ev_id + '_' + i) != null) {document.getElementById('cell_trainer_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_form_' + ev_id + '_' + i) != null) {document.getElementById('cell_form_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_age_' + ev_id + '_' + i) != null) {document.getElementById('cell_age_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_previous_' + ev_id + '_' + i) != null) {document.getElementById('cell_previous_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_market_' + ev_id + '_' + i + '_0') != null) {document.getElementById('cell_market_' + ev_id + '_' + i + '_0').style.display = "";}
			for (j = 1; j < num_markets; j++) {
				if (document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j) != null) {document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j).style.display = "none";}
			}
			if (document.getElementById('cell_fctc_odds_' + ev_id + '_' + i) != null) {document.getElementById('cell_fctc_odds_' + ev_id + '_' + i).style.display = "none";}
			if (document.getElementById('cell_fore_tricast_' + ev_id + '_' + i) != null) {document.getElementById('cell_fore_tricast_' + ev_id + '_' + i).style.display = "none";}
		}

		if (document.getElementById('li_racecard_' + ev_id + '_' + num_runners + '_' + num_markets) != null) {document.getElementById('li_racecard_' + ev_id + '_' + num_runners + '_' + num_markets).className = "on";}

		// hide singles div
		if (document.getElementById('singles_' + ev_id) != null) {document.getElementById('singles_' + ev_id).style.display = "none";}

		// hide bet now and reset buttons
		if (document.getElementById('bet_now_button_' + ev_id) != null) {document.getElementById('bet_now_button_' + ev_id).style.display = "none";}

		// the unnamed favourites
		if (document.getElementById('unnamed_first_' + ev_id) != null) {document.getElementById('unnamed_first_' + ev_id).style.display = "";}
		if (document.getElementById('unnamed_second_' + ev_id) != null) {document.getElementById('unnamed_second_' + ev_id).style.display = "";}

		var markets_ew = document.getElementById('markets_ew_' + ev_id);
		if (markets_ew != null) {markets_ew.style.display = "none";}

		var racecard_ew = document.getElementById('racecard_ew_' + ev_id);
		if (racecard_ew != null) {racecard_ew.style.display = "";}
	}

	if (action == "markets") {
		// hide headers
		if (document.getElementById('cell_number_' + ev_id) != null) {document.getElementById('cell_number_' + ev_id).style.display = "";}
		if (document.getElementById('cell_silk_' + ev_id) != null) {document.getElementById('cell_silk_' + ev_id).style.display = "";}
		if (document.getElementById('cell_horse_' + ev_id) != null) {document.getElementById('cell_horse_' + ev_id).style.display = "";}
		if (document.getElementById('cell_trainer_' + ev_id) != null) {document.getElementById('cell_trainer_' + ev_id).style.display = "none";}
		if (document.getElementById('cell_form_' + ev_id) != null) {document.getElementById('cell_form_' + ev_id).style.display = "none";}
		if (document.getElementById('cell_age_' + ev_id) != null) {document.getElementById('cell_age_' + ev_id).style.display = "none";}
		if (document.getElementById('cell_previous_' + ev_id) != null) {document.getElementById('cell_previous_' + ev_id).style.display = "none";}
		for (i = 0; i < num_markets; i++) {
			if (document.getElementById('cell_markets_' + ev_id + '_' + i) != null) {document.getElementById('cell_markets_' + ev_id + '_' + i).style.display = "";}
		}
		if (document.getElementById('cell_fctc_odds_' + ev_id) != null) {document.getElementById('cell_fctc_odds_' + ev_id).style.display = "none";}
		if (document.getElementById('cell_fore_tricast_' + ev_id) != null) {document.getElementById('cell_fore_tricast_' + ev_id).style.display = "none";}

		//hide data
		for (i = 0; i < num_runners; i++) {
			if (document.getElementById('cell_number_' + ev_id + '_' + i) != null) {document.getElementById('cell_number_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_silk_' + ev_id + '_' + i) != null) {document.getElementById('cell_silk_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_horse_' + ev_id + '_' + i) != null) {document.getElementById('cell_horse_' + ev_id + '_' + i).style.display = "";}
			if (document.getElementById('cell_trainer_' + ev_id + '_' + i) != null) {document.getElementById('cell_trainer_' + ev_id + '_' + i).style.display = "none";}
			if (document.getElementById('cell_form_' + ev_id + '_' + i) != null) {document.getElementById('cell_form_' + ev_id + '_' + i).style.display = "none";}
			if (document.getElementById('cell_age_' + ev_id + '_' + i) != null) {document.getElementById('cell_age_' + ev_id + '_' + i).style.display = "none";}
			if (document.getElementById('cell_previous_' + ev_id + '_' + i) != null) {document.getElementById('cell_previous_' + ev_id + '_' + i).style.display = "none";}
			for (j = 0; j < num_markets; j++) {
				if (document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j) != null) {document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j).style.display = "";}
			}
			if (document.getElementById('cell_fctc_odds_' + ev_id + '_' + i) != null) {document.getElementById('cell_fctc_odds_' + ev_id + '_' + i).style.display = "none";}
			if (document.getElementById('cell_fore_tricast_' + ev_id + '_' + i) != null) {document.getElementById('cell_fore_tricast_' + ev_id + '_' + i).style.display = "none";}
		}

		if (document.getElementById('li_markets_' + ev_id + '_' + num_runners + '_' + num_markets) != null) {document.getElementById('li_markets_' + ev_id + '_' + num_runners + '_' + num_markets).className = "on";}

		// show singles div
		if (filter_type != "J" && filter_type != "T") {
			if (document.getElementById('singles_' + ev_id) != null) {document.getElementById('singles_' + ev_id).style.display = "block";}
		}

		// hide bet now and reset buttons
		if (document.getElementById('bet_now_button_' + ev_id) != null) {document.getElementById('bet_now_button_' + ev_id).style.display = "none";}

		// the unnamed favourites
		if (document.getElementById('unnamed_first_' + ev_id) != null) {document.getElementById('unnamed_first_' + ev_id).style.display = "";}
		if (document.getElementById('unnamed_second_' + ev_id) != null) {document.getElementById('unnamed_second_' + ev_id).style.display = "";}

		var markets_ew = document.getElementById('markets_ew_' + ev_id);
		if (markets_ew != null) {markets_ew.style.display = "";}

		var racecard_ew = document.getElementById('racecard_ew_' + ev_id);
		if (racecard_ew != null) {racecard_ew.style.display = "none";}
	}

	if (action == "forecast") {
		// hide headers
		if (document.getElementById('cell_number_' + ev_id) != null) document.getElementById('cell_number_' + ev_id).style.display = "";
		if (document.getElementById('cell_silk_' + ev_id) != null) document.getElementById('cell_silk_' + ev_id).style.display = "";
		if (document.getElementById('cell_horse_' + ev_id) != null) document.getElementById('cell_horse_' + ev_id).style.display = "";
		if (document.getElementById('cell_trainer_' + ev_id) != null) document.getElementById('cell_trainer_' + ev_id).style.display = "none";
		if (document.getElementById('cell_form_' + ev_id) != null) document.getElementById('cell_form_' + ev_id).style.display = "none";
		if (document.getElementById('cell_age_' + ev_id) != null) document.getElementById('cell_age_' + ev_id).style.display = "none";
		if (document.getElementById('cell_previous_' + ev_id) != null) document.getElementById('cell_previous_' + ev_id).style.display = "none";
		for (i = 0; i < num_markets; i++) {
			if (document.getElementById('cell_markets_' + ev_id + '_' + i) != null) document.getElementById('cell_markets_' + ev_id + '_' + i).style.display = "none";
		}
		if (document.getElementById('cell_fctc_odds_' + ev_id) != null) document.getElementById('cell_fctc_odds_' + ev_id).style.display = "";
		if (document.getElementById('cell_fore_tricast_' + ev_id) != null) document.getElementById('cell_fore_tricast_' + ev_id).style.display = "";

		//hide data
		for (i = 0; i < num_runners; i++) {
			if (document.getElementById('cell_number_' + ev_id + '_' + i) != null) document.getElementById('cell_number_' + ev_id + '_' + i).style.display = "";
			if (document.getElementById('cell_silk_' + ev_id + '_' + i) != null) document.getElementById('cell_silk_' + ev_id + '_' + i).style.display = "";
			if (document.getElementById('cell_horse_' + ev_id + '_' + i) != null) document.getElementById('cell_horse_' + ev_id + '_' + i).style.display = "";
			if (document.getElementById('cell_trainer_' + ev_id + '_' + i) != null) document.getElementById('cell_trainer_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_form_' + ev_id + '_' + i) != null) document.getElementById('cell_form_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_age_' + ev_id + '_' + i) != null) document.getElementById('cell_age_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_previous_' + ev_id + '_' + i) != null) document.getElementById('cell_previous_' + ev_id + '_' + i).style.display = "none";
			for (j = 0; j < num_markets; j++) {
				if (document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j) != null) document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j).style.display = "none";
			}
			if (document.getElementById('cell_fctc_odds_' + ev_id + '_' + i) != null) document.getElementById('cell_fctc_odds_' + ev_id + '_' + i).style.display = "";
			if (document.getElementById('cell_fore_tricast_' + ev_id + '_' + i) != null) document.getElementById('cell_fore_tricast_' + ev_id + '_' + i).style.display = "";
		}

		if (document.getElementById('li_forecast_' + ev_id + '_' + num_runners + '_' + num_markets) != null) document.getElementById('li_forecast_' + ev_id + '_' + num_runners + '_' + num_markets).className = "on";

		// hide singles div

		if (document.getElementById('singles_' + ev_id) != null) document.getElementById('singles_' + ev_id).style.display = "none";

		// show bet now and reset buttons
		if (document.getElementById('bet_now_button_' + ev_id) != null) {document.getElementById('bet_now_button_' + ev_id).style.display = "";}

		// the unnamed favourites
		if (document.getElementById('unnamed_first_' + ev_id) != null) document.getElementById('unnamed_first_' + ev_id).style.display = "none";
		if (document.getElementById('unnamed_second_' + ev_id) != null) document.getElementById('unnamed_second_' + ev_id).style.display = "none";

		var markets_ew = document.getElementById('markets_ew_' + ev_id);
		if (markets_ew != null) {markets_ew.style.display = "none";}

		var racecard_ew = document.getElementById('racecard_ew_' + ev_id);
		if (racecard_ew != null) {racecard_ew.style.display = "none";}
	}
	
	if (action == "greyhounds") {
		
		//headers
		//show this
		if (document.getElementById('cell_horse_' + ev_id) != null) document.getElementById('cell_horse_' + ev_id).style.display = "";
		if (document.getElementById('cell_fore_tricast_' + ev_id) != null) document.getElementById('cell_fore_tricast_' + ev_id).style.display = "";
		for (i = 0; i < num_markets; i++) {
			if (document.getElementById('cell_markets_' + ev_id + '_' + i) != null) document.getElementById('cell_markets_' + ev_id + '_' + i).style.display = "";
		}
		
		// hide this
		if (document.getElementById('cell_number_' + ev_id) != null) document.getElementById('cell_number_' + ev_id).style.display = "none";
		if (document.getElementById('cell_trainer_' + ev_id) != null) document.getElementById('cell_trainer_' + ev_id).style.display = "none";
		if (document.getElementById('cell_form_' + ev_id) != null) document.getElementById('cell_form_' + ev_id).style.display = "none";
		if (document.getElementById('cell_age_' + ev_id) != null) document.getElementById('cell_age_' + ev_id).style.display = "none";
		if (document.getElementById('cell_silk_' + ev_id) != null) document.getElementById('cell_silk_' + ev_id).style.display = "none";
		if (document.getElementById('cell_fctc_odds_' + ev_id) != null) document.getElementById('cell_fctc_odds_' + ev_id).style.display = "none";
		if (document.getElementById('cell_previous_' + ev_id) != null) document.getElementById('cell_previous_' + ev_id).style.display = "none";
		
		for (i = 0; i < num_runners; i++) {
			// show this
			if (document.getElementById('cell_horse_' + ev_id + '_' + i) != null) document.getElementById('cell_horse_' + ev_id + '_' + i).style.display = "";
			if (document.getElementById('cell_fore_tricast_' + ev_id + '_' + i) != null) document.getElementById('cell_fore_tricast_' + ev_id + '_' + i).style.display = "";
			for (j = 0; j < num_markets; j++) {
				if (document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j) != null) document.getElementById('cell_market_' + ev_id + '_' + i + '_' + j).style.display = "";
			}
			
			//hide this
			if (document.getElementById('cell_number_' + ev_id + '_' + i) != null) document.getElementById('cell_number_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_fctc_odds_' + ev_id + '_' + i) != null) document.getElementById('cell_fctc_odds_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_trainer_' + ev_id + '_' + i) != null) document.getElementById('cell_trainer_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_form_' + ev_id + '_' + i) != null) document.getElementById('cell_form_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_age_' + ev_id + '_' + i) != null) document.getElementById('cell_age_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_silk_' + ev_id + '_' + i) != null) document.getElementById('cell_silk_' + ev_id + '_' + i).style.display = "none";
			if (document.getElementById('cell_previous_' + ev_id + '_' + i) != null) document.getElementById('cell_previous_' + ev_id + '_' + i).style.display = "none";
		}

		//show this
		if (document.getElementById('li_forecast_' + ev_id + '_' + num_runners + '_' + num_markets) != null) document.getElementById('li_forecast_' + ev_id + '_' + num_runners + '_' + num_markets).className = "on";

		// hide singles div
		if (document.getElementById('singles_' + ev_id) != null) document.getElementById('singles_' + ev_id).style.display = "none";

		// show bet now and reset buttons
		if (document.getElementById('bet_now_button_' + ev_id) != null) {document.getElementById('bet_now_button_' + ev_id).style.display = "";}

		// hide the unnamed favourites
		if (document.getElementById('unnamed_first_' + ev_id) != null) document.getElementById('unnamed_first_' + ev_id).style.display = "";
		if (document.getElementById('unnamed_second_' + ev_id) != null) document.getElementById('unnamed_second_' + ev_id).style.display = "";

		var markets_ew = document.getElementById('markets_ew_' + ev_id);
		if (markets_ew != null) {markets_ew.style.display = "none";}

		//var racecard_ew = document.getElementById('racecard_ew_' + ev_id);
		//if (racecard_ew != null) {racecard_ew.style.display = "none";}
	}

	if (action == "match") {
		document.getElementById('myracecard_' + ev_id + '_').style.display = 'none';
		document.getElementById('singles_' + ev_id).style.display = "none";
		document.getElementById('match_' + ev_id + '_').style.display = 'block';
		document.getElementById('li_match_' + ev_id + '_').className = "on";
	} else {
		if (document.getElementById('myracecard_' + ev_id + '_') != null) document.getElementById('myracecard_' + ev_id + '_').style.display = 'block';
	}
	
	if (filter_type == "J" || filter_type == "T") {
		// hide the match tab
		if (document.getElementById('li_match_' + ev_id + '_') != null) {
			document.getElementById('li_match_' + ev_id + '_').style.display = "none";
		}
		
		if (document.getElementById('match_' + ev_id + '_') != null) {
			document.getElementById('match_' + ev_id + '_').style.display = "none";
		}
		// hide the forecast tab
		if (document.getElementById("li_forecast_"+ev_id+"_"+num_runners+"_"+num_markets) != null) {
			document.getElementById("li_forecast_"+ev_id+"_"+num_runners+"_"+num_markets).style.display = "none";
		}
		// hide quickpick button
		if (document.getElementById("li_quickpick_"+ev_id+"_"+num_runners+"_"+num_markets) != null) {
			document.getElementById("li_quickpick_"+ev_id+"_"+num_runners+"_"+num_markets).style.display = "none";
		}
		// hide tote button
		if (document.getElementById("li_tote_"+ev_id+"_"+num_runners+"_"+num_markets) != null) {
			document.getElementById("li_tote_"+ev_id+"_"+num_runners+"_"+num_markets).style.display = "none";
		}
		
		// hide the unnamed favourites
		if (document.getElementById('unnamed_first_' + ev_id) != null) document.getElementById('unnamed_first_' + ev_id).style.display = "none";
		if (document.getElementById('unnamed_second_' + ev_id) != null) document.getElementById('unnamed_second_' + ev_id).style.display = "none";
	}

}







/*
 * The following functions are used for drawing a row (runner) on racecard.
 * The parameter list is a bit big - but I wanted to outline everything
 * that is expected. The first set of inputs are general runner details,
 * followed by a repeated set of 6 parameters that are the necessary details
 * for each market for that runner.
 */

function do_runner (
	is_greyhounds,
	is_american,
	is_virtual,
	force_market_tab,
	ev_id,
	runner_idx,
	runner_num,
	stall,
	silk,
	horse,
	jockey,
	jockey_url,
	trainer,
	trainer_url,
	form,
	age,
	weight,
	num_multi,
	race_status,
	jockey_hover_text,
	trainer_hover_text,
	fc_avail,
	tc_avail,
	runner_status,
	num_runners,
	ev_oc_id_0,
	fb_result_0,
	runner_odds_0,
	runner_previous_odds_0,
	mkt_cell_class_0,
	runner_cell_class_0,
	runner_odds_class_0,
	shp_avail_0,
	sp_avail_0,
	lp_avail_0,
	price_string_0,
	ev_oc_id_1,
	fb_result_1,
	runner_odds_1,
	runner_previous_odds_1,
	mkt_cell_class_1,
	runner_cell_class_1,
	runner_odds_class_1,
	shp_avail_1,
	sp_avail_1,
	lp_avail_1,
	price_string_1,
	ev_oc_id_2,
	fb_result_2,
	runner_odds_2,
	runner_previous_odds_2,
	mkt_cell_class_2,
	runner_cell_class_2,
	runner_odds_class_2,
	shp_avail_2,
	sp_avail_2,
	lp_avail_2,
	price_string_2,
	ev_oc_id_3,
	fb_result_3,
	runner_odds_3,
	runner_previous_odds_3,
	mkt_cell_class_3,
	runner_cell_class_3,
	runner_odds_class_3,
	shp_avail_3,
	sp_avail_3,
	lp_avail_3,
	price_string_3,
	ev_oc_id_4,
	fb_result_4,
	runner_odds_4,
	runner_previous_odds_4,
	mkt_cell_class_4,
	runner_cell_class_4,
	runner_odds_class_4,
	shp_avail_4,
	sp_avail_4,
	lp_avail_4,
	price_string_4,
	ev_oc_id_5,
	fb_result_5,
	runner_odds_5,
	runner_previous_odds_5,
	mkt_cell_class_5,
	runner_cell_class_5,
	runner_odds_class_5,
	shp_avail_5,
	sp_avail_5,
	lp_avail_5,
	price_string_5,
	ev_oc_id_6,
	fb_result_6,
	runner_odds_6,
	runner_previous_odds_6,
	mkt_cell_class_6,
	runner_cell_class_6,
	runner_odds_class_6,
	shp_avail_6,
	sp_avail_6,
	lp_avail_6,
	price_string_6,
	ev_oc_id_7,
	fb_result_7,
	runner_odds_7,
	runner_previous_odds_7,
	mkt_cell_class_7,
	runner_cell_class_7,
	runner_odds_class_7,
	shp_avail_7,
	sp_avail_7,
	lp_avail_7,
	price_string_7,
	ev_oc_id_8,
	fb_result_8,
	runner_odds_8,
	runner_previous_odds_8,
	mkt_cell_class_8,
	runner_cell_class_8,
	runner_odds_class_8,
	shp_avail_8,
	sp_avail_8,
	lp_avail_8,
	price_string_8,
	ev_oc_id_9,
	fb_result_9,
	runner_odds_9,
	runner_previous_odds_9,
	mkt_cell_class_9,
	runner_cell_class_9,
	runner_odds_class_9,
	shp_avail_9,
	sp_avail_9,
	lp_avail_9,
	price_string_9
) {

	var runner_idx_incr = runner_idx + 1;

	// ok, let's start the row
	var row = document.createElement('tr');
	// give it a unique id
	row.id = "seln_row_"+ ev_id +"_"+ ev_oc_id_0;
	
	var show_row = 1;
	if (filter_type == "J") {
		if (filter_text != jockey) {
			show_row = 0;
		}
	} else if (filter_type == "T") {
		if (filter_text != trainer) {
			show_row = 0;
		}
	}
	
	if (show_row != 1 && fb_result_0 != 1 && fb_result_0 != 2) {
		var filtered_list = filtered_hash.get(ev_id)
		
		if(filtered_list != null) {
			filtered_list.push(ev_oc_id_0);
			filtered_hash.set(ev_id,filtered_list)
			
		} else {
			filtered_list = [];
			filtered_list.push(ev_oc_id_0);
			filtered_hash.set(ev_id,filtered_list)
		}
		
		// hide the row
		row.style.display = "none";
	}

	// if this is an unnamed favourite, give the row an id
	if (fb_result_0 == 1) {
		row.id = 'unnamed_first_' + ev_id;
	} else if (fb_result_0 == 2) {
		row.id = 'unnamed_second_' + ev_id;
	}


	// if not force_market_tab or is_virtual
	if (force_market_tab != 'Y' || is_virtual == 'Y') {
		// runner number column
		row.appendChild(do_runner_num(ev_id,runner_idx,fb_result_0,runner_num,stall));

		if (is_virtual == 'N') {
			// silk image column{
			row.appendChild(do_silk(ev_id,silk,runner_idx,horse,jockey));
		}

	}

	//horse column
	row.appendChild(do_horse(ev_id,horse,jockey,runner_idx,fb_result_0,is_greyhounds,runner_num,jockey_url,jockey_hover_text));

	if (is_virtual == 'N') {

		// trainer column
		row.appendChild(do_trainer(ev_id,trainer,runner_idx,fb_result_0,trainer_url,trainer_hover_text));

		// form column
		row.appendChild(do_form(ev_id,runner_idx,fb_result_0,form));

		// age/weight column
		row.appendChild(do_age(ev_id,runner_idx,fb_result_0,age,weight));

		// previous odds column
		row.appendChild(do_previous_odds(ev_id,runner_idx,fb_result_0,runner_previous_odds_0));

	}

	for (var i = 0; i < num_multi; i++) {
		row.appendChild(do_market(ev_id,runner_idx,i,eval('fb_result_' + i),eval('runner_cell_class_' + i),eval('runner_odds_class_' + i),eval('shp_avail_' + i),eval('sp_avail_' + i),eval('lp_avail_' + i),runner_status,race_status,eval('ev_oc_id_' + i),eval('price_string_' + i),eval('runner_odds_' + i),is_american,eval('mkt_cell_class_' + i),eval('runner_previous_odds_' + i),is_greyhounds));
	}

	row.appendChild(do_fore_tricast_odds(ev_id,runner_idx,mkt_cell_class_0,runner_odds_0,runner_status,fb_result_0));
	row.appendChild(do_fore_tricasts(ev_id,runner_idx,fb_result_0,runner_idx_incr,ev_oc_id_0,runner_status,fc_avail,tc_avail,num_runners,is_greyhounds));

	if (fb_result_0 == 1 || fb_result_0 == 2 || fb_result_0 == 'N' || fb_result_0 == 'V' || fb_result_0 == 'W' || fb_result_0 == 'R' || fb_result_0 == 'D') {
		document.getElementById('unsortable_body_' + ev_id).appendChild(row);
	} else {
		document.getElementById('sortable_body_' + ev_id).appendChild(row);
	}
}


function do_runner_num (ev_id,runner_idx,fb_result,runner_num,stall) {
	// runner number
	var td = document.createElement('td');
	td.id = 'cell_number_' + ev_id + '_' + runner_idx;
	td.className = 'jky no dg';
	td.style.display = 'none';
	if (fb_result != 1 && fb_result != 2) {
		td.appendChild(document.createTextNode(runner_num));
		td.appendChild(document.createElement('br'));
		if (stall != '') {
			td.appendChild(document.createTextNode('(' + stall + ')'));
		}
	} else {
		td.appendChild(document.createTextNode(' '));
	}
		
	return td;
}


function do_silk (ev_id,silk,runner_idx,horse,jockey) {
	// silk image
	var td = document.createElement('td');
	td.id = 'cell_silk_' + ev_id + '_' + runner_idx;
	td.className = 'jky dg';
	td.style.display = 'none';
	var img = document.createElement('img');
	img.alt = horse + ' - ' + jockey;
	img.width = 29;
	img.height = 21;
	if (silk == '') {
		img.src = racing_url_silk + 'silks/default.png';
	} else {
		img.src = racing_url_silk + 'silks/' + silk;
	}
	td.appendChild(img);
	return td;
}


function do_horse (ev_id,horse,jockey,runner_idx,fb_result,is_greyhounds,runner_num,jockey_url,jockey_hover_text) {
	// horse/jockey
	var td = document.createElement('td');
	td.id = 'cell_horse_' + ev_id + '_' + runner_idx;
	td.className = 'jky dg';
	td.style.display = 'none';
	
	if(is_greyhounds == "Y") {
		
		var dog_div = document.createElement('div');
		
		if (fb_result == 1) {
			dog_div.className = "trap trapf"
		} else if (fb_result == 2) {
			dog_div.className = "trap trapf2"
		} else {
			dog_div.className = "trap trap"+runner_num
		}
		
		dog_div.appendChild(document.createTextNode(horse));
		
		td.appendChild(dog_div);
		
		return td;
	}
	
	if (fb_result != 1 && fb_result != 2) {
		var strong = document.createElement('strong');
		strong.appendChild(document.createTextNode(horse));
		td.appendChild(strong);
		td.appendChild(document.createElement('br'));
		
		if (jockey_url != '') {
			var ja = document.createElement('a');
			ja.href=jockey_url;
			ja.title=jockey_hover_text;
			ja.innerHTML=jockey;
			td.appendChild(ja);
		}
		else {
			td.appendChild(document.createTextNode(jockey));
		}
	} else {
		td.appendChild(document.createTextNode(horse));
	}
	
	return td;
}


function do_trainer (ev_id,trainer,runner_idx,fb_result,trainer_url,trainer_hover_text) {
	// trainer
	var td = document.createElement('td');
	td.id = 'cell_trainer_' + ev_id + '_' + runner_idx;
	td.className = 'jky dg';
	td.style.display = 'none';
	if (fb_result != 1 && fb_result != 2 && trainer != '') {
		if (trainer_url != '') {
			var ta = document.createElement('a');
			ta.href=trainer_url;
			ta.title=trainer_hover_text;
			ta.innerHTML=trainer;
			td.appendChild(ta);
		}
		else {
			td.appendChild(document.createTextNode(trainer));
		}
	} else {
		td.appendChild(document.createTextNode(' '));
	}
	return td;
}


function do_form (ev_id,runner_idx,fb_result,form) {
	// form
	var td = document.createElement('td');
	td.id = 'cell_form_' + ev_id + '_' + runner_idx;
	td.className = 'dg';
	td.style.display = 'none';
	if (fb_result != 1 && fb_result != 2 && form != '') {
		td.className = 'jky dg';
		td.appendChild(document.createTextNode(form));
	} else {
		td.appendChild(document.createTextNode(' '));
	}
	return td;
}


function do_age (ev_id,runner_idx,fb_result,age,weight) {
	// age/weight
	var td = document.createElement('td');
	td.id = 'cell_age_' + ev_id + '_' + runner_idx;
	td.className = 'dg';
	td.style.display = 'none';
	if (fb_result != 1 && fb_result != 2 && age != '') {
		td.appendChild(document.createTextNode(age));
		if (weight != '') {
			td.appendChild(document.createElement('br'));
			td.appendChild(document.createTextNode(weight));
		}
	} else {
		td.appendChild(document.createTextNode(' '));
	}
	return td;
}


function do_previous_odds (ev_id,runner_idx,fb_result,previous_odds) {
	// previous odds for first market
	var td = document.createElement('td');
	td.id = 'cell_previous_' + ev_id + '_' + runner_idx;
	td.className = 'dg';
	td.style.display = 'none';
	if (fb_result != 'N' && fb_result != 'V' && fb_result != 'W' && previous_odds != '') {
		td.appendChild(document.createTextNode(previous_odds));
	} else {
		td.appendChild(document.createTextNode(' '));
	}
	return(td);
}


function do_market (ev_id,runner_idx,mkt_idx,fb_result,runner_cell_class,runner_odds_class,shp_avail,sp_avail,lp_avail,runner_status,race_status,ev_oc_id,price_string,runner_odds,is_american,mkt_cell_class,previous_odds,is_greyhounds) {

	var td = document.createElement('td');
	td.id = 'cell_market_' + ev_id + '_' + runner_idx + '_' + mkt_idx;
	td.style.display = 'none';
	
	if (is_greyhounds == 'Y') {
		if (lp_avail == 'Y') {
			td.colSpan = 2;
		}
	}

	if (fb_result == 'N' || fb_result == 'V' || fb_result == 'W') {

		// non-runner
		td.className = mkt_cell_class + ' c';
		td.appendChild(document.createTextNode(racing_msg_non_runner));

	} else {

		td.className = runner_cell_class + ' cellfix nostyle';

		var table = document.createElement('table');
		    table.style.width = '100%';
		    table.style.height = '100%';
		    table.cellspacing = 0;
		    table.cellpadding = 0;
		    table.border = 0;

		var tbody = document.createElement('tbody');

		var tr = document.createElement('tr');

		if (is_american == 'N') {

			var td1 = document.createElement('td');
			    td1.style.width = '60%';
			    td1.className = runner_odds_class;

			var ul = document.createElement('ul');
			    ul.className = 'dd-tv';

			var li = document.createElement('li');

			if (shp_avail == 'Y') {
				if (runner_status != 'S' && race_status == 1) {
					var li_a = document.createElement('a');
					    li_a.href = "javascript:do_racecard_bet(" + ev_oc_id + ",'" + price_string + "');"
					    if (is_greyhounds != 'Y') {
						    li_a.className = 'blue';
					    }
					    li_a.appendChild(document.createTextNode(runner_odds));
					    li.appendChild(li_a);
				} else {
					var li_font = document.createElement('font');
					    li_font.color = 'gray';
					    li_font.appendChild(document.createTextNode(runner_odds));
					    li.appendChild(li_font);
				}
			} else {
				if (fb_result == 'X') {
					li.appendChild(document.createTextNode(racing_msg_betting_without));
				} else if (fb_result == 'R' || fb_result == 'D') {
					var li_font = document.createElement('font');
					li_font.color = 'gray';
					li_font.appendChild(document.createTextNode(runner_odds));
					li.appendChild(li_font);
				} else if (runner_status != 'S' && race_status == 1) {
					var li_a = document.createElement('a');
					li_a.href = "javascript:do_racecard_bet(" + ev_oc_id + ",'" + price_string + "');"
					li_a.appendChild(document.createTextNode(runner_odds));
					li.appendChild(li_a);
				} else {
					var li_font = document.createElement('font');
					li_font.color = 'gray';
					li_font.appendChild(document.createTextNode(runner_odds));
					li.appendChild(li_font);
				}
			}

			if (lp_avail == 'Y' && previous_odds != '' && mkt_idx == 0) {
				var ul_prev = document.createElement('ul');
				var li_prev = document.createElement('li');
				if (shp_avail == 'Y' && is_greyhounds != 'Y') {
					li_prev.className = 'blue';
				}
				li_prev.appendChild(document.createTextNode(racing_msg_odds_history + ': ' + previous_odds));
				ul_prev.appendChild(li_prev);
				li.appendChild(ul_prev);
			}
			ul.appendChild(li);
			td1.appendChild(ul);
			tr.appendChild(td1);
		}

		if (sp_avail == 'Y' && (is_american == 'Y' || lp_avail == 'Y')) {
			var td2 = document.createElement('td');
			td2.style.borderLeft = '1px solid #ccc';

			var ul_sp = document.createElement('ul');
			ul_sp.className = 'dd-tv';

			var li_sp = document.createElement('li');
			if (runner_status != 'S' && race_status == 1) {
				var li_sp_a = document.createElement('a');
				li_sp_a.href = "javascript:do_racecard_bet(" + ev_oc_id + ",'S');";
				li_sp_a.appendChild(document.createTextNode('SP'));
				li_sp.appendChild(li_sp_a);
			} else {
				var li_sp_f = document.createElement('font');
				li_sp_f.color = 'gray';
				li_sp_f.appendChild(document.createTextNode('SP'));
				li_sp.appendChild(li_sp_f);
			}

			ul_sp.appendChild(li_sp);
			td2.appendChild(ul_sp);
			tr.appendChild(td2);
		}

		tbody.appendChild(tr);
		table.appendChild(tbody);

		td.appendChild(table);
	}

	return td;
}


function do_fore_tricast_odds (ev_id,runner_idx,mkt_cell_class,runner_odds,runner_status,fb_result) {
	// odds columns for forecast/tricast tab
	var td = document.createElement('td');
	td.id = 'cell_fctc_odds_' + ev_id + '_' + runner_idx;
	td.className = mkt_cell_class;
	td.style.display = 'none';
	if (fb_result != 1 && fb_result != 2 && fb_result != 'N' && fb_result != 'V' && fb_result != 'W' && runner_status != 'S' && runner_odds != 'SP' && runner_status != 'S' && runner_odds != '') {
		td.appendChild(document.createTextNode(runner_odds));
	} else {
		td.appendChild(document.createTextNode(' '));
	}
	return td;
}


function do_fore_tricasts (ev_id,runner_idx,fb_result,runner_idx_incr,ev_oc_id,runner_status,fc_avail,tc_avail,num_runners,is_greyhounds) {

	var ft_td = document.createElement('td');
	    ft_td.id = 'cell_fore_tricast_' + ev_id + '_' + runner_idx;
	    ft_td.className = 'nostyle';
	    ft_td.style.width = '255px';
	    ft_td.style.display = 'none';
		ft_td.style.fontSize = '9px';
		//ft_td.style.background = 'none';


	// the fore/tricast boxes go in a table
	var ft_table = document.createElement('table');
	    ft_table.style.borderCollapse = 'separate';
	    ft_table.style.borderSpacing = '1px 0';
	    ft_table.width = '100%';
	    ft_table.cellspacing = 0;
	    ft_table.cellpadding = 0;
	    ft_table.border = 0;

	var ft_tbody = document.createElement('tbody');

	var ft_tr = document.createElement('tr');

	// boxes for forecast/tricast
	var fc_td1 = document.createElement('td');
	    fc_td1.style.padding = 0;
	    fc_td1.style.width = '32px';
	    fc_td1.className = 'c';

	var fc_td2 = document.createElement('td');
	    fc_td2.style.padding = 0;
	    fc_td2.style.width = '32px';
	    fc_td2.className = 'c';

	var fc_tdA = document.createElement('td');
	    fc_tdA.style.padding = 0;
	    fc_tdA.style.width = '35px';
	    fc_tdA.className = 'c';

	var tc_td1 = document.createElement('td');
	    tc_td1.style.padding = 0;
	    tc_td1.style.width = '32px';
	    tc_td1.className = 'c ddg';

	var tc_td2 = document.createElement('td');
	    tc_td2.style.padding = 0;
	    tc_td2.style.width = '32px';
	    tc_td2.className = 'c ddg';

	var tc_td3 = document.createElement('td');
	    tc_td3.style.padding = 0;
	    tc_td3.style.width = '32px';
	    tc_td3.className = 'c ddg';

	var tc_tdA = document.createElement('td');
	    tc_tdA.style.padding = 0;
	    tc_tdA.style.width = '35px';
	    tc_tdA.className = 'c ddg';

	var fc_input1_hidden = '<input type=hidden name=tfcastf_' + runner_idx_incr + '_1_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_1_' + ev_id + ' value=' + ev_oc_id + '>';
	var fc_input2_hidden = '<input type=hidden name=tfcastf_' + runner_idx_incr + '_2_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_2_' + ev_id + ' value=' + ev_oc_id + '>';
	var fc_inputA_hidden = '<input type=hidden name=tfcastf_' + runner_idx_incr + '_A_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_A_' + ev_id + ' value=' + ev_oc_id + '>';
	var tc_input1_hidden = '<input type=hidden name=tfcastt_' + runner_idx_incr + '_1_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_1_' + ev_id + ' value=' + ev_oc_id + '>';
	var tc_input2_hidden = '<input type=hidden name=tfcastt_' + runner_idx_incr + '_2_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_2_' + ev_id + ' value=' + ev_oc_id + '>';
	var tc_input3_hidden = '<input type=hidden name=tfcastt_' + runner_idx_incr + '_3_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_3_' + ev_id + ' value=' + ev_oc_id + '>';
	var tc_inputA_hidden = '<input type=hidden name=tfcastt_' + runner_idx_incr + '_A_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_A_' + ev_id + ' value=' + ev_oc_id + '>';

	var fc_input1_check = '<input type=checkbox name=tfcastf_' + runner_idx_incr + '_1_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_1_' + ev_id + ' value=' + ev_oc_id + ' onclick="checkLimits(\'f\',' + runner_idx_incr + ',\'1\',' + num_runners + ',' + ev_id + ');">';
	var fc_input2_check = '<input type=checkbox name=tfcastf_' + runner_idx_incr + '_2_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_2_' + ev_id + ' value=' + ev_oc_id + ' onclick="checkLimits(\'f\',' + runner_idx_incr + ',\'2\',' + num_runners + ',' + ev_id + ');">';
	var fc_inputA_check = '<input type=checkbox name=tfcastf_' + runner_idx_incr + '_A_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_A_' + ev_id + ' value=' + ev_oc_id + ' onclick="checkLimits(\'f\',' + runner_idx_incr + ',\'A\',' + num_runners + ',' + ev_id + ');">';
	var tc_input1_check = '<input type=checkbox name=tfcastt_' + runner_idx_incr + '_1_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_1_' + ev_id + ' value=' + ev_oc_id + ' onclick="checkLimits(\'t\',' + runner_idx_incr + ',\'1\',' + num_runners + ',' + ev_id + ');">';
	var tc_input2_check = '<input type=checkbox name=tfcastt_' + runner_idx_incr + '_2_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_2_' + ev_id + ' value=' + ev_oc_id + ' onclick="checkLimits(\'t\',' + runner_idx_incr + ',\'2\',' + num_runners + ',' + ev_id + ');">';
	var tc_input3_check = '<input type=checkbox name=tfcastt_' + runner_idx_incr + '_3_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_3_' + ev_id + ' value=' + ev_oc_id + ' onclick="checkLimits(\'t\',' + runner_idx_incr + ',\'3\',' + num_runners + ',' + ev_id + ');">';
	var tc_inputA_check = '<input type=checkbox name=tfcastt_' + runner_idx_incr + '_A_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_A_' + ev_id + ' value=' + ev_oc_id + ' onclick="checkLimits(\'t\',' + runner_idx_incr + ',\'A\',' + num_runners + ',' + ev_id + ');">';

	// non runner
	if (fb_result == 1 || fb_result == 2) {
		
		ft_td.innerHTML = fc_input1_hidden + fc_input2_hidden + fc_inputA_hidden + tc_input1_hidden + tc_input2_hidden + tc_input3_hidden + tc_inputA_hidden;

		ft_td.appendChild(document.createTextNode(racing_msg_fc_tc_unamed_fav));

		return ft_td;
		
	} else if (fb_result == 'N' || fb_result == 'V' || fb_result == 'W' || runner_status == 'S') {
		
		if (is_greyhounds == 'Y') {
			// here we want to still show the checkboxes, but as disabled
			var fc_input1_check = '<input type=checkbox DISABLED name=tfcastf_' + runner_idx_incr + '_1_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_1_' + ev_id + ' value=' + ev_oc_id + '>';
			var fc_input2_check = '<input type=checkbox DISABLED name=tfcastf_' + runner_idx_incr + '_2_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_2_' + ev_id + ' value=' + ev_oc_id + '>';
			var fc_inputA_check = '<input type=checkbox DISABLED name=tfcastf_' + runner_idx_incr + '_A_' + ev_id + ' id=tfcastf_' + runner_idx_incr + '_A_' + ev_id + ' value=' + ev_oc_id + '>';
			var tc_input1_check = '<input type=checkbox DISABLED name=tfcastt_' + runner_idx_incr + '_1_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_1_' + ev_id + ' value=' + ev_oc_id + '>';
			var tc_input2_check = '<input type=checkbox DISABLED name=tfcastt_' + runner_idx_incr + '_2_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_2_' + ev_id + ' value=' + ev_oc_id + '>';
			var tc_input3_check = '<input type=checkbox DISABLED name=tfcastt_' + runner_idx_incr + '_3_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_3_' + ev_id + ' value=' + ev_oc_id + '>';
			var tc_inputA_check = '<input type=checkbox DISABLED name=tfcastt_' + runner_idx_incr + '_A_' + ev_id + ' id=tfcastt_' + runner_idx_incr + '_A_' + ev_id + ' value=' + ev_oc_id + '>';
			// need to pass in the hidden vars though
			ft_td.innerHTML = fc_input1_hidden + fc_input2_hidden + fc_inputA_hidden + tc_input1_hidden + tc_input2_hidden + tc_input3_hidden + tc_inputA_hidden;
		} else {
			ft_td.innerHTML = fc_input1_hidden + fc_input2_hidden + fc_inputA_hidden + tc_input1_hidden + tc_input2_hidden + tc_input3_hidden + tc_inputA_hidden;

			ft_td.appendChild(document.createTextNode(racing_msg_non_runner));

			return ft_td;
		}
	}

	// forcast
	if (fc_avail == 'Y') {

		fc_td1.innerHTML = fc_input1_check;
		fc_td2.innerHTML = fc_input2_check;
		fc_tdA.innerHTML = fc_inputA_check;

		ft_tr.appendChild(fc_td1);
		ft_tr.appendChild(fc_td2);
		ft_tr.appendChild(fc_tdA);

	} else {

		fc_td1.innerHTML = fc_input1_hidden + fc_input2_hidden + fc_inputA_hidden;

		fc_td1.style.width = '101px';
		ft_tr.appendChild(fc_td1);
	}


	// tricast
	if (tc_avail == 'Y') {

		tc_td1.innerHTML = tc_input1_check;
		tc_td2.innerHTML = tc_input2_check;
		tc_td3.innerHTML = tc_input3_check;
		tc_tdA.innerHTML = tc_inputA_check;

		ft_tr.appendChild(tc_td1);
		ft_tr.appendChild(tc_td2);
		ft_tr.appendChild(tc_td3);
		ft_tr.appendChild(tc_tdA);

	} else {

		tc_td1.innerHTML = tc_input1_hidden + tc_input2_hidden + tc_input3_hidden + tc_inputA_hidden;
		tc_td1.style.width = '143px';
		ft_tr.appendChild(tc_td1);

	}


	ft_tbody.appendChild(ft_tr);
	ft_table.appendChild(ft_tbody);

	ft_td.appendChild(ft_table);

	return ft_td;
}

function do_runner_single (ev_id, ev_oc_id, fb_result, jockey, trainer) {
	
	var show_row = 1;
	
	if (filter_type == "J") {
		if (filter_text != jockey) {
			show_row = 0;
		}
	} else if (filter_type == "T") {
		if (filter_text != trainer) {
			show_row = 0;
		}
	}
	
	row = document.getElementById("seln_row_"+ ev_id +"_"+ ev_oc_id);
	
	if (show_row != 1 && fb_result != 1 && fb_result != 2) {
		var filtered_list = filtered_hash.get(ev_id)
		
		if(filtered_list != null) {
			filtered_list.push(ev_oc_id);
			filtered_hash.set(ev_id,filtered_list)
			
		} else {
			filtered_list = [];
			filtered_list.push(ev_oc_id);
			filtered_hash.set(ev_id,filtered_list)
		}
		
		row.style.display = "none";
	}
}
