//replace dwr default error handler with our funcion - bodogErrorHandler (defined below)
var reload_interval = 30000;
var timeout_interval = 45000;
var checkedColumns = 0;
var MIN_MTP = 3000;

var RACE_ID_TOKEN ="raceid";
var SADDLE_ID_TOKEN = "saddleId";

DWREngine.setErrorHandler(bodogErrorHandler);
DWREngine.setTimeout(timeout_interval) ;
dwr.util.setEscapeHtml(false);

function updateRaceMenuJSON(Locale,Timezone) {	
	TracksManager.getSubMenu(Locale,Timezone,handleRaceMenuJSONUpdate);
}

function handleRaceMenuJSONUpdate(json)
{
	var jsonObject = eval('(' + json + ')');
	if(jsonObject != null && jsonObject.menu.races  != null 
			&& jsonObject.menu.races.race  != null){
		var length = 1;
		if(jsonObject.menu.races.race.length){
			length = jsonObject.menu.races.race.length;
		}
		var upcomingRaces = "";
		var i;		
		for(i = 0; i < length; i=i+1){
			var row = jsonObject.menu.races.race[i];
			upcomingRaces += '<div class="leaf">\n'
				+ '<a href="/horse-betting/'+row.seo+'.jsp?r='+row.id+'">'
				+ row.track + '</a>\n<div class="race-info">Race #'
				+ row.num + ' - ' +row.mtp
				+ '\n</div>\n</div>';
		}
		dwr.util.setValue("upcomingraces", upcomingRaces);
	}
}

function updateMTPJSON(TrackCode,Locale,Timezone) {	
	TracksManager.getTrackDetails(TrackCode,Locale,Timezone,handleTodaysRacesJSONUpdate);
}

function handleTodaysRacesJSONUpdate(json)
{	var selectedRaceID = raceID;//If this race Id does not exist, then the day has changed
	var jsonObject = eval('(' + json + ')');
	if(jsonObject != null && jsonObject.track.raceInfo  != null 
			&& jsonObject.track.raceInfo.race  != null 
			&& jsonObject.track.raceInfo.race.length  != null ){
		var length = jsonObject.track.raceInfo.race.length;
		var selected = raceNumber; //this is set on race.jsp
		var maxPayout = jsonObject.track.maxPayout;
		var selectedraceIDFound = false;
		var i;
		for(i = 1; i <= length; i=i+1){
			var row = jsonObject.track.raceInfo.race[i-1];
			if(row.raceId == selectedRaceID){
				selectedraceIDFound = true;
			}
		}
		if(selectedraceIDFound == true){
			for(i = 1; i <= length; i=i+1){
				var row = jsonObject.track.raceInfo.race[i-1];
				var divHtml = "";
				if(selected == i){
					divHtml += "<strong>";
				}
				
				divHtml += "<div class=\"race-info-numbering\" >";
				
				if(selected == i){
					if(row.status == "O"){
						divHtml += "<img src=\"/images/icons/arrow-green.gif\">";
					} else {
						divHtml += "<img src=\"/images/icons/arrow-grey.gif\">";
					}
				}
				
				divHtml += "</div>";
				
				if(row.status == "O"){
					divHtml += "<span class=\"race-info-numbering-selected\">";
					divHtml += "("+i+") ";  					
					divHtml += "</span>"; 
				} else {
					divHtml += "("+i+") ";  
				}
	
				divHtml += "<span ID=\"PT_"+row.raceId+"\">";
				divHtml += "<span class=\""+row.status+"\">";
				
				if(row.status == "O"){
					divHtml += "<A HREF=\"/horse-betting/"+trackSEOName+".jsp?r="+row.raceId+"\">";
					if(row.badPostTime == "false"){
						divHtml += row.time;
					} else {
						divHtml += "Post Time TBD";
					}
					divHtml += "</A>";
				} else if(row.status == "B"){
					divHtml += row.time + " - <a href=\"/horse-betting/race.jsp?type=WPS&tc="+trackCode+"&r="+row.raceId+"\">Pending</a>";
				} else {
					divHtml += row.time + " - <a href=\"/horse-betting/result.jsp?type=WPS&tc="+trackCode+"&r="+row.raceId+"\">Results</a>";
				}
				
				divHtml += "</span></span>";
				divHtml += "<span ID=\"MTP_"+row.raceId+"_sb\">";
				if(row.status == "O" && row.mtp != "" && row.mtp != "0"){
					divHtml += " &nbsp;- "+row.mtp+" MTP";
				}
				divHtml += "</span>";
				
				
				if(selected == i){
					divHtml += "</strong>";
				}
				dwr.util.setValue("race-info-row-"+i,divHtml);
				dwr.util.setValue("maxPayout",maxPayout);
			}
		}
	}
}

function handleNextRacesUpdate(trackUpdate) {
	var i, ur;
	var htmlTrackName = "";
	var counter = 0;

	htmlTrackName += "<table class=\"line-table\" >";

	htmlTrackName += "<tr>";
	htmlTrackName += "<td colspan=\"3\" align=\"left\" class=\"upcoming-heading-track\" style=\"text-align:left;\">Track </td>";
	htmlTrackName += "<td>&nbsp;</td>";												

	htmlTrackName += "<td colspan=\"3\" align=\"left\" class=\"upcoming-heading-race\">Race</td>";
	htmlTrackName += "<td>&nbsp;</td>";							

	htmlTrackName += "<td colspan=\"3\" align=\"left\" class=\"upcoming-heading-race\">MTP</td>";	
	htmlTrackName += "<td>&nbsp;</td>";							
	
	htmlTrackName += "</tr>";
	

					
	htmlTrackName += "<tr><td colspan=\"12\" class=\"line-table-space\"></td></tr></tr>";										

					
    for (i = 0; i != trackUpdate.raceUpdates.length; i = i + 1) {
        ur = trackUpdate.raceUpdates[i];
		if (ur.stateText == "O"){

				
		htmlTrackName += "<tr>";

		htmlTrackName += "<td align=\"right\"><img src=\"/images/sportsbook/line-info-left.gif\" /></td>";	
		htmlTrackName += "<td class=\"line-table-copy-block-track-name\" >";
		htmlTrackName += "<div class=\"line-table-copy\"  >";
		htmlTrackName += "<A href=\"" + ur.trackLink + "?r=" + ur.raceCode + "\">" + ur.trackName + "</A>";
		htmlTrackName += "</div>";
		htmlTrackName += "</td>";
		htmlTrackName += "<td ><img src=\"/images/sportsbook/line-info-right.gif\" /></td>";							

		htmlTrackName += "<td>&nbsp;</td>";							
									
		htmlTrackName += "<td  align=\"right\"><img src=\"/images/sportsbook/line-info-left.gif\" /></td>";	
		htmlTrackName += "<td class=\"line-table-copy-block-race\" >";
		htmlTrackName += "<div class=\"line-table-copy-race\" >";
		htmlTrackName += "<A HREF=\"" + ur.trackLink + "?r=" + ur.raceCode + "\">" + ur.raceNumber + "</A>";
		htmlTrackName += "</div>";
		htmlTrackName += "</td>";
		htmlTrackName += "<td ><img src=\"/images/sportsbook/line-info-right.gif\" /></td>";							
		
		htmlTrackName += "<td>&nbsp;</td>";							

		htmlTrackName += "<td  align=\"right\"><img src=\"/images/sportsbook/line-info-left.gif\" /></td>";	
		htmlTrackName += "<td class=\"line-table-copy-block-race\"  >";
		htmlTrackName += "<div class=\"line-table-copy-race\" >";
		htmlTrackName += "<A HREF=\"" + ur.trackLink + "?r=" + ur.raceCode + "\">" + ur.mtp.mtp + "</A>";
		htmlTrackName += "</div>";
		htmlTrackName += "</td>";
		htmlTrackName += "<td ><img src=\"/images/sportsbook/line-info-right.gif\" /></td>";							
		
		htmlTrackName += "<td>&nbsp;</td>";			

		htmlTrackName += "<tr><td colspan=\"12\" class=\"line-table-space\"></td></tr></tr>";										
		htmlTrackName += "</tr>";		

		
		}
	}
		
	htmlTrackName += "</table>";
	
	if (trackUpdate.raceUpdates.length > 0){
	    DWRUtil.setValue("nextrace", htmlTrackName);
	}
	
}

function updateNextFiveRaces() {
	TracksManager.getNextRacesUpdate(handleNextRacesUpdate);
}

function updateRacebookTrackJSON() {
	TracksManager.getRacebookUpdateJSON(handleRacebookJSON);
}

function handleRacebookJSON (json) {
	var jsonObject = eval('(' + json + ')');
	if(jsonObject != null && jsonObject.list  != null 
			&& jsonObject.list.track  != null
			&& jsonObject.list.track.length  != null ){
		var length = jsonObject.list.track.length;
		for ( i = 0; i < length ; i++){
			var tu = jsonObject.list.track[i];
			var thisTrackCode = tu.code;
			var thisTrackName = tu.name;
			
			var isIndex = (location.href.indexOf("index.jsp") >= 0) || (location.href.substring(location.href.length - 1) == "/") ;	
			
			var htmlTrackName = "";
				
			if ( trackCode == thisTrackCode && !isIndex ) {
				htmlTrackName += "<div class=\"leaf-selected\">";
				htmlTrackName += thisTrackName;				
			} else {
				htmlTrackName = "<div class=\"leaf\">";
				htmlTrackName += "<a href=\"" + tu.link + "\">" + thisTrackName + "</a>";				
			}
			DWRUtil.setValue("_" + thisTrackCode, htmlTrackName);
		}
	}
}

function removeAllWagers() {
	document.getElementById("dwrError").innerHTML = "";
    
	$(".picks-list").each(function(i){
        $(this).fadeOut(400, function(){
        	$("#ticket-contextual-help").fadeIn("slow");
        });
    });
    
    TicketManager.removeAllWagers(handleTicket);
    
    var anotherCookie = "" + document.cookie;
	var cookies = anotherCookie.split(";");
	for (var i = 0; i < cookies.length; i++) {
		var startIndex = cookies[i].indexOf("HB");
		if ( startIndex > -1 )
		{
			var endIndex = cookies[i].indexOf("=");
			var uniqueId = cookies[i].substring(startIndex + 2, endIndex);
			var now = new Date();
			document.cookie = "HB" + uniqueId + "=; path=/; expires="+now.toGMTString()+";"+";";
		}
	}
}

function forgetWager(wagerId, uniqueId) {
	// delete cookie
	var now = new Date();
	document.cookie = "HB" + uniqueId + "=; path=/; expires="+now.toGMTString()+";"+";";	
	if( $(".picks-list").size() == 1 )
		{
		   $(".picks-list").hide();
		   $("#ticket-contextual-help").fadeIn("slow");
		}
	document.getElementById("dwrError").innerHTML = "";
	
	TicketManager.removeWager(wagerId, handleTicket);

    checkedColumns = 0;

}

function boxWager(boxWagerId, uniqueId) {
   var theCookie = "" + document.cookie;
   var cookieArr = theCookie.split(";");
   var betValues = new Array();
   var betIds = new Array();
   var elem = getElementsByStyleClass("picks-list");
   var wagerCounter = 0;
   
   for (i = 0; i < elem.length; i++)
   {
   		var wagerUniqueId = elem[i].getAttribute("uniqueWagerId");
   		var wagerId = elem[i].getAttribute("wagerId");
   		
   		var horseRacingTicketName = "HB" + wagerUniqueId;
		
		for (j = 0; j < cookieArr.length; j++){
			if (cookieArr[j].indexOf("HB" + wagerUniqueId) > -1 ){
				var cookieValue = cookieArr[j].substring(cookieArr[j].indexOf("=")+1);		
				if (cookieValue != ""){					
					betValues[wagerCounter] = cookieValue.substring(1);
					betIds[wagerCounter] = wagerId;
					wagerCounter++;
				}
			}
		}
   }
   
	TicketManager.boxWager(boxWagerId,betIds,betValues , handleTicket);
}

function setStake(wagerId, amount) {
	validateStake(amount);
}
function validateStake(amt){
	var validStr = "0123456789";
	var validStrArray = validStr.split("");
	var amtArray = amt.split("");
	err = "";
	if (amt==""){
		err = "Minimum stake amount is 1";
	}else{
		for (i=0;i<amtArray.length ; i++){
			var n = amtArray[i];
			if (n=="0"&&amtArray.length==1){
				err = "Minimum stake amount is 1";
				break;
			}
			if (validStr.indexOf(n)<0){
				if (n=="."){
					err = "No decimal allowed in stake.";	
					break;
				}else{
					err = "Invalid character in the stake field.";
					break;
				}
			}
		}
	}
	if (err!=""){
		errMsg()
	} else {
	    DWRUtil.setValue("dwrError", "");
	}
}

function addToTicket(stake, trackName, raceNumber, 
            wagerType, box, selection) {
   document.getElementById("dwrError").innerHTML = "";
   var button = document.getElementById("add-to-bet-ticket-loader");
  if ( wagerType == 'WPS' ) {
	  if( $('input[@value$="_1"]:checked').size() > 0 )
	  {
	    checkedColumns++;
	  }
	  
	  if( $('input[@value$="_2"]:checked').size() > 0 )
	  {
	    checkedColumns++;
	  }
	  
	  if( $('input[@value$="_3"]:checked').size() > 0 )
	  {
	    checkedColumns++;
	  }
  }
  else {
  	checkedColumns = 1;
  }
  
   if (button){
	   button.innerHTML = '<img align="right" src="/images/horse-betting/loading-icon-add-to-ticket.gif" alt="">';   		
   }   
   
   var theCookie = "" + document.cookie;
   var cookieArr = theCookie.split(";");
   var betValues = new Array();
   var betIds = new Array();
   var elem = getElementsByStyleClass("picks-list");
   var wagerCounter = 0;
   
   for (i = 0; i < elem.length; i++)
   {
   		var wagerUniqueId = elem[i].getAttribute("uniqueWagerId");
   		var wagerId = elem[i].getAttribute("wagerId");
   		
   		var horseRacingTicketName = "HB" + wagerUniqueId;
		
		for (j = 0; j < cookieArr.length; j++){
			if (cookieArr[j].indexOf("HB" + wagerUniqueId) > -1 ){
				var cookieValue = cookieArr[j].substring(cookieArr[j].indexOf("=")+1);		
				if (cookieValue != ""){					
					betValues[wagerCounter] = cookieValue.substring(1);
					betIds[wagerCounter] = wagerId;
					wagerCounter++;
				}
			}
		}
   }
   
   TicketManager.addToTicketWithWagerUpdate(stake, trackName, raceNumber, 
            wagerType, box, selection, betIds, betValues, handleAddResults);
}

function getElementsByStyleClass (className) {
  var all = document.all ? document.all :
    document.getElementsByTagName('*');
  var elements = new Array();
  for (var e = 0; e < all.length; e++)
    if (all[e].className == className)
      elements[elements.length] = all[e];
  return elements;
}

function handleAddResults(addResults) {
    if (addResults.errorMessage != "") {		
		err = addResults.errorMessage;
		errMsg();
    } else {
		deselectAll();
        handleTicket(addResults.ticket);
        // Reload the page (once the ticket has been handled and no errors have ocurred)
        // to avoid re-adding tickets with back button see: RBK-987
        self.location.search = document.URL.substring(document.URL.indexOf('?'));
    }
}
function loadTicket() {
    TicketManager.getTicket(handleTicket);
}
function handleTicket(aTicket) { 
    var htmlTicket = "";
    var htmlTicketList = new Array();
	var htmlTicketButton = "";
	var htmlMTP = ""
    var i, w;
    var sum = 0;
	
	// need to add cookie check
	
	//read cookie in.
	// place in container
	var theCookie = "" + document.cookie;
	var cookieArr = theCookie.split(";");
	//removeWagers();

    for (i = 0; i != aTicket.wagers.length;i++ ) {
        w = aTicket.wagers[i];
        currencySymbol = aTicket.currencySymbol;
		
			// check if the id is in the cookie
		var horseRacingTicketName = "HB" + w.uniqueID;
		var inCookie = false;
		var betValue = -1;
		var exceedLimit = false;
		var zeroStake = false;
		for (j = 0; j < cookieArr.length; j++){

			if (cookieArr[j].indexOf("HB" + w.uniqueID) > -1 && cookieArr[j].indexOf("=") > -1){
				var cookieValue = cookieArr[j].substring(cookieArr[j].indexOf("=")+1);		
				if (cookieValue != ""){					
					betValue = cookieValue.substring(1);
					inCookie = true;
					if (cookieValue.indexOf("E")==0){
						exceedLimit = true;
					}
					if (cookieValue.indexOf("Z")==0){
						zeroStake = true;
					}
				}
			}
		}
		var stakeKey = w.trackAndRace + " " + w.description;
		htmlTicket += "<div class=\"picks-list\" wagerId = " + w.ID +" uniqueWagerId=" + w.uniqueID + " hashCode=" + w.wagerLimitHashString + ">";
		htmlTicket += "<div class=\"pick-block\">";
		htmlTicket += "<div class=\"pick-check\" >";
				
		htmlTicket += "<div class=\"pick-bet-info\">" + w.trackAndRace + "</div>";
		htmlTicket += "<div class=\"pick-wager-info\"><div><strong>Wager: </strong> <span>" + formatWagerDescription(w.description) + "</span></div>";

		if ( w.description.indexOf ( "Exacta") >=0  || w.description.indexOf ( "Trifecta") >=0 ) {
			if(w.boxable==true) {
				htmlTicket += "<div class=\"pick-block-box\" align=\"left\">";
				htmlTicket += "<input type='checkbox' onclick='boxWager("+w.ID+","+w.uniqueID+")'>Box This Wager";
				htmlTicket += "</div>";
			}
		}


		if (exceedLimit){
			var msg = "The maximum stake allowed to wager on this selection is " + currencySymbol + dollarize(w.maxStake.amountInCents/100);
			htmlTicket += 	"<div class=\"error-message\" id=\"error_bet_" + w.ID + "\">" + msg + "</div>";

		} else if (zeroStake){

			htmlTicket += 	"<div class=\"error-message\" id=\"error_bet_" + w.ID + "\">Unit stake can not be zero, negative or empty</div>";
		
		} else {
			if (!inCookie){	
				htmlTicket += 	"<div class=\"error-message\" id=\"error_bet_" + w.ID + "\">" + w.errorMessage + "</div>";
			} else {
				htmlTicket += 	"<div class=\"error-message\" id=\"error_bet_" + w.ID + "\"></div>";		
			}
		}
		
		htmlTicket += "</div>"; //pick-wager-info

		if(w.errorMessage.indexOf("This race is closed for betting") == -1) {

			htmlTicket += "<div class=\"pick-stake-info\"><strong>Stake: " + currencySymbol + " " + "</strong>";
			
			htmlTicket += "<input type=text size=\"3\" maxlength=\"4\" autocomplete=\"off\" name='stake_" + w.ID + "' id='stake_" + w.ID + "' value='";		

			
			if (inCookie){				
				htmlTicket +=  betValue;
			} else {
			
				betValue = w.stake.amountInCents/100;
				maxStake = w.maxStake.amountInCents/100;
				var isWPS = (w.description.search('Win') != -1) || (w.description.search('Place') != -1) || (w.description.search('Show') != -1);
				
				if (isWPS && betValue == 1 && checkWagerLimits(w.wagerLimitHashString, maxStake, w.uniqueID, betValue + 1)) {
					betValue = betValue + 1;
				}
				htmlTicket += betValue;	
				document.cookie = "HB" + w.uniqueID + "=V" + betValue +"; path=/;";
			
				/*var maxStake = w.maxStake.amountInCents/100;
				var isWPS = (w.description.search('Win') != -1) || (w.description.search('Place') != -1) || (w.description.search('Show') != -1);
				
				betValue = w.stake.amountInCents/100;
				
				if (betValue + 1 <= maxStake && isWPS && betValue == 1) { 
					betValue++;
				}*/
				/*if (betValue <= maxStake) {
				}*/

			}

					
			htmlTicket += "' ";
			htmlTicket += "onblur=\"updateStakeBlur('" + w.ID + "');\" ";
			
			htmlTicket += "onkeyup=\"updateStakeTotal('" + w.ID + "', '" + w.uniqueID + "', " +  w.multiplier + ", " + w.maxStake.amountInCents/100 + ", '" + currencySymbol + "', '" + w.wagerLimitHashString + "');\"";
			htmlTicket += ">";
			
			htmlTicket += "</div>"; //pick-stake-info
						
			htmlTicket += "<div class=\"pick-total-info\"><strong>Total:</strong> <span id='total_"  + w.ID + "'>";
			
			if (betValue > -1){
				htmlTicket += currencySymbol + " " + dollarize(betValue * w.multiplier);
			} else {		
				htmlTicket += currencySymbol + "&nbsp;" + dollarize(w.stake.amountInCents/100);
			}
			
			htmlTicket += "</span></div>"; //pick-total-info

		} else {
			
			htmlTicket += "<div class=\"pick-stake-info\">&nbsp;</div><div class=\"pick-total-info\">&nbsp;</div>";
		}

//		htmlTicket += "</div>";

		htmlTicket += "<div class=\"pick-buttons\">";
		htmlTicket += "<a onclick=\"$(this).parent().parent().parent().parent().fadeOut('fast',function(){forgetWager(" + w.ID + "," + w.uniqueID + ");});\">";
		htmlTicket += "<img src=\"/images/icons/button-red-cross.gif\" width=\"15\" height=\"14\" ";
		htmlTicket += "alt=\"Remove this bet from ticket\" title=\"Remove This Bet from Ticket\" border=\"0\">";
		htmlTicket += "</a></div></div>";
		
		htmlMTP += '<!-- RBK-41. Remove comments to show MTP info to user, at the bottom of the ticket. '
		htmlMTP += '<div id="mtp_'+w.ID+'" class="mtp" style="background-color: #D8E2E4;"></div>';
		
		htmlMTP += '-->'
		
		//var wager = new Wager("mtp_" + w.ID, w.raceID, w.trackAndRace);
		//wager = null;

		htmlTicket+=htmlMTP + "</div></div>";
		htmlTicketList[i] = htmlTicket;
		htmlMTP = '';
	}
	

	if (aTicket.wagers.length>0){

		htmlTicketButton += "<a href=\"javascript:confirmTicket();\" title=\"Proceed With Bet\">";
		htmlTicketButton += "<img align=\"right\" id=\"placeticketbutton\" name=\"placeticketbutton\"";
		htmlTicketButton += "src=\"/images/horse-betting/button-place-ticket.gif\" alt=\"Proceed With Bet\"></a>";

		var htmlDeleteAll = "<div style=\"float:right;padding-right:5px;\">";
		htmlDeleteAll +="<a href=\"javascript:removeAllWagers();\" style=\"color:#8EC5E3;\">Delete All</a></div>";
		DWRUtil.setValue("deleteAll", htmlDeleteAll);

	} else {

		htmlTicketButton += "<img align=\"right\" id=\"placeticketbutton\" name=\"placeticketbutton\"";
		htmlTicketButton += "src=\"/images/horse-betting/button-place-ticket-disable.gif\" alt=\"Proceed With Bet\">";	
		var htmlDeleteAll = "<div style=\"float:right;padding-right:5px;\">";
		htmlDeleteAll +="<span style=\"color:#cccccc;\">Delete All</span></div>";
		DWRUtil.setValue("deleteAll", htmlDeleteAll);
	}
		
	DWRUtil.setValue("active-picks-button-bar", htmlTicketButton);
	
	
	if (aTicket.wagers.length == 0){
		DWRUtil.setValue("ticketCount", "");
	
        var picks = document.getElementById( "picks" );			
        picks.className = "dsbl";
		var footerActive = document.getElementById( "active-picks-footer");		
		footerActive.className = "closed";
		
	} else if (aTicket.wagers.length > 0){

		DWRUtil.setValue("ticketCount", "&nbsp;-&nbsp;To submit ticket click 'Proceed With Bet'");		
	
        var picks = document.getElementById( "picks" );			
		var footerActive = document.getElementById( "active-picks-footer");		
		
		if (picks.className == "dsbl"){
        	picks.className = "open";	
			footerActive.className = "open";								
		}
	}
    
	var button = document.getElementById("add-to-bet-ticket-loader");
    // need to check if user is logged in here. 
    // if not logged in, then show regular button.
  
    if (button){
		if(button.className != "add-to-bet-ticket"){
		   button.innerHTML = '<a href="javascript:loginToAdd();" title="Add To Bet Ticket"><img align="right" src="/images/horse-betting/button-add-to-ticket-off.gif" alt="Add To Bet Ticket"></a>';   		
		} else {		
		   button.innerHTML = '<a href="javascript:addBets();" title="Add To Bet Ticket"><img align="right" src="/images/horse-betting/button-add-to-ticket-off.gif" alt="Add To Bet Ticket"></a>';   
		}
    }
    
	for( var j = 0; j < ( htmlTicketList.length - (checkedColumns) ) ; j++ )
	{
	   DWRUtil.setValue("yourTicket", htmlTicketList[j]);
	   //populateMTP();
	}

	
	if( checkedColumns == 3 )
		{
			
		   DWRUtil.setValue("yourTicket", htmlTicketList[htmlTicketList.length - 3]);
		   DWRUtil.setValue("yourTicket", htmlTicketList[htmlTicketList.length - 2]);
		   DWRUtil.setValue("yourTicket", htmlTicketList[htmlTicketList.length - 1]);
			//populateMTP();
		   $($(".picks-list")[htmlTicketList.length - 3]).hide();
		   $($(".picks-list")[htmlTicketList.length - 2]).hide();
		   $($(".picks-list")[htmlTicketList.length - 1]).hide();
		   
		  
		 if($("#ticket-contextual-help").css("display") == "block"){ 
		  $("#ticket-contextual-help").fadeOut(400, function(){
		       $($(".picks-list")[htmlTicketList.length - 3]).fadeIn(400, function(){
		       		$($(".picks-list")[htmlTicketList.length - 2]).fadeIn(400, function(){
		       			$($(".picks-list")[htmlTicketList.length - 1]).fadeIn(400);
		       			});
		       		});
	       		});
	      }
	      else
	      {
	      		$($(".picks-list")[htmlTicketList.length - 3]).fadeIn(400, function(){
		       		$($(".picks-list")[htmlTicketList.length - 2]).fadeIn(400, function(){
		       			$($(".picks-list")[htmlTicketList.length - 1]).fadeIn(400);
		       		});
		       });
	      }
		}
		
		if( checkedColumns == 2 )
	    {
	       DWRUtil.setValue("yourTicket", htmlTicketList[htmlTicketList.length - 2]);
	       DWRUtil.setValue("yourTicket", htmlTicketList[htmlTicketList.length - 1]);
	       //populateMTP();
		   $($(".picks-list")[htmlTicketList.length - 2]).hide();
		   $($(".picks-list")[htmlTicketList.length - 1]).hide();
	       
	       if($("#ticket-contextual-help").css('display') == "block"){
	       	$("#ticket-contextual-help").fadeOut(400, function(){
	       		$($(".picks-list")[htmlTicketList.length - 2]).fadeIn(400, function(){
	       			$($(".picks-list")[htmlTicketList.length - 1]).fadeIn(400, function(){
		       		});
	       		});
	       	});
	      }	     
	      else
	      {
	       		$($(".picks-list")[htmlTicketList.length - 2]).fadeIn(400, function(){
	       			$($(".picks-list")[htmlTicketList.length - 1]).fadeIn(400);
		       	});
	      }
	    }
	    
	    if( checkedColumns == 1 )
	    {
	       $(DWRUtil.setValue("yourTicket", htmlTicketList[htmlTicketList.length - 1]));
	       $($(".picks-list")[htmlTicketList.length - 1]).hide();
	       //populateMTP();
	       if($("#ticket-contextual-help").css('display')=="block"){
	      		$("#ticket-contextual-help").fadeOut(400, function(){
	       		$($(".picks-list")[htmlTicketList.length - 1]).fadeIn(400);});
	       }
	       else
	       {
	       		$($(".picks-list")[htmlTicketList.length - 1]).fadeIn(400);
	       }
	    }

	checkedColumns = 0;
}

function checkWagerLimits(wagerLimitCode, maxAmount, uniqueId, stakeAmount) {
	if (wagerLimitCode == null || wagerLimitCode == "null" || wagerLimitCode.length == 0) {
		return true;
	}

	//extract all the different hash codes
	var tokens = wagerLimitCode.split("|");
	var theCookie = "" + document.cookie;
	var cookieArr = theCookie.split(";");

	var elem = getElementsByStyleClass("picks-list");
	var wagerUniqueIds = new Array();  
	var wagerIds = new Array();  
	var tempTokensArray = new Array();
	var betTotalArray = new Array(tokens.length);
	
	for (var i = 0; i < elem.length; i++) {
		wagerUniqueIds[i] = elem[i].getAttribute("uniqueWagerId");
		wagerIds[i] = elem[i].getAttribute("wagerId");
		var hashCodes = elem[i].getAttribute("hashCode");
		tempTokensArray[i] = hashCodes.split("|");
	}
	
	qsort(tokens, 0, tokens.length);

	for (var i = 0; i < elem.length; i++) {
		var wagerUniqueId = wagerUniqueIds[i];
		
		if (wagerUniqueId == uniqueId)
	   		continue;
	   	
	   	//get the betValue
	   	var betValue = 0;
  		for (j = 0; j < cookieArr.length; j++){
			if (cookieArr[j].indexOf("HB" + wagerUniqueId) > -1 ){
				var cookieValue = cookieArr[j].substring(cookieArr[j].indexOf("=")+1);		
				if (cookieValue != "") {
					var betValue = parseInt(cookieValue.substring(1));
				}
			}
		}
		
		//sort the second list before comparing
		var wagerId = wagerIds[i];
	   	var tempTokens = tempTokensArray[i];
	   	
		//reset error message
	   	var errorControl = document.getElementById("error_bet_" + wagerId);
   		errorControl.innerHTML = "";
		errorControl.style.display = "none";
	   	
	   	qsort(tempTokens, 0, tempTokens.length);
	   	
	   	var mCount = 0;
	   	var tCount = 0;
	   	while (mCount < tokens.length && tCount < tempTokens.length) {
	   		while (tokens[mCount] < tempTokens[tCount] && mCount < tokens.length) {
	   			mCount++;
	   		}
	   		
	   		if (mCount < tokens.length && tokens[mCount] == tempTokens[tCount])
	   		{
				if (betTotalArray[mCount] == null) {
					betTotalArray[mCount] = parseInt(stakeAmount);
				}
				
				betTotalArray[mCount] += betValue; 
				
				if (betTotalArray[mCount] > maxAmount) {
					return false;
				} 
				
				mCount++;
	   			tCount++;
	   		}
	   		
	   		if (mCount >= tokens.length || tCount >= tempTokens.length) 
	   			break;
	   		
	   		while (tempTokens[tCount] < tokens[mCount] && tCount < tempTokens.length) {
	   			tCount++;
	   		}

	   		if (tCount < tempTokens.length && tokens[mCount] == tempTokens[tCount])
	   		{
				if (betTotalArray[mCount] == null) {
					betTotalArray[mCount] = parseInt(stakeAmount);
				}
				
				betTotalArray[mCount] += betValue; 
				
				if (betTotalArray[mCount] > maxAmount) {
					return false;
				}
				
				mCount++;
	   			tCount++;
	   		}
	   	}
	}
	
	return true;
}

function qsort(array, begin, end)
{
	if(end-1>begin) {
		var pivot=begin+Math.floor(Math.random()*(end-begin));

		pivot=partition(array, begin, end, pivot);

		qsort(array, begin, pivot);
		qsort(array, pivot+1, end);
	}
}

function partition(array, begin, end, pivot)
{
	var piv=array[pivot];
	array.swap(pivot, end-1);
	var store=begin;
	var ix;
	for(ix=begin; ix<end-1; ++ix) {
		if(array[ix]<=piv) {
			array.swap(store, ix);
			++store;
		}
	}
	array.swap(end-1, store);

	return store;
}

Array.prototype.swap=function(a, b)
{
	var tmp=this[a];
	this[a]=this[b];
	this[b]=tmp;
}



function activateUpdateTicket() {
	htmlTicketButton = "<span id=\"update-ticket-button-area\">";
	htmlTicketButton += "<a href=\"javascript:updateTotal();\"><img align=\"right\" id=\"updateticketbutton\" name=\"updateticketbutton\"";
	htmlTicketButton += "src=\"/images/horse-betting/button-update-ticket-off.gif\" alt=\"Update Ticket\"></a>";
	htmlTicketButton += "</span>";
    DWRUtil.setValue("update-ticket-button-area", htmlTicketButton);
}
function loadTicketForConfirm() {
    TicketManager.getTicket(handleTicketForConfirm);
}
function handleTicketForConfirm(aTicket) {
    DWRUtil.setValue("dwrError", "");
    var htmlTicket = "";
	var htmlTicketButton = "";
    var i, w;
    var sum = 0;
	var pickCounter = 0;
    for (i = 0; i != aTicket.wagers.length; i = i + 1) {
        w = aTicket.wagers[i];
		
			if (pickCounter > 0){
				htmlTicket += "<div class=\"bet-line-separator\">&nbsp;</div>"
			}					
					htmlTicket += "<div class=\"line1\">" + w.trackAndRace + "</div>";
					htmlTicket += "<div class=\"line2\">" + w.description + "</div>";
					htmlTicket += "<div class=\"line3\">Stake: " + (w.stake.amountInCents/100) + "  Amount: " + w.printableAmount + "</div>";
										
			pickCounter++;
	}		
    
	DWRUtil.setValue("yourTicket", htmlTicket);	
	var htmlRiskAmount = "";
	if ( aTicket.totalAmount!='0' ){
		htmlRiskAmount = "Total Risk amount for all wagers: <strong>"+ aTicket.currencySymbol + aTicket.totalAmount + ".00</strong>";
	}
	
	DWRUtil.setValue("riskAmount", htmlRiskAmount);
}


function SelectRow(number) {
	var tmp, itm, j, i, str, num;
	str = new String(1);
	for(i=0;i<document.getElementById("horse-betting").length;i++){		
			itm = document.getElementById("horse-betting").elements[i];

		if (itm.name.substring(0,1) == "B") {
			j = itm.value.indexOf("_");
			if (j >= 0) {
				str = itm.value.toString();
				num = str.substring(0,j);				
				if (num  == number)
					document.getElementById("horse-betting").elements[i].checked = true;
			}
		}				
	}
}

function deselectRow(number) {
	var tmp, itm, j, i, str, num;
	str = new String(1);
	for(i=0;i<document.getElementById("horse-betting").length;i++){		
			itm = document.getElementById("horse-betting").elements[i];

		if (itm.name.substring(0,1) == "E") {
			j = itm.value.indexOf("_");
			if (j >= 0) {
				str = itm.value.toString();
				num = str.substring(0,j);				
				if (num  == number)
					document.getElementById("horse-betting").elements[i].checked = true;
			}
		}				
	}
}

function SelectColumn(column) {
	
	if ((wagerType == 'Superfecta') && (box == 'true')) {
		var superfectaSelections = 0;
		for(i=0;i<document.getElementById("horse-betting").length;i++){		
			itm = document.getElementById("horse-betting").elements[i];
			if (itm.name.substring(0,1) == "E") {
				superfectaSelections++;
			}
		}
		if (superfectaSelections > 10) {
			displaySuperfectaSelectionsError();
			return;
		}
	}
	
	var tmp, itm, j, i, str, num;
	str = new String(1);
	for(i=0;i<document.getElementById("horse-betting").length;i++){
		if (!document.getElementById('horse-betting').elements[i].disabled) {
			itm = document.getElementById("horse-betting").elements[i];
	
			if (itm.name.substring(0,1) == "E") {
				j = itm.value.indexOf("_");
				if (j >= 0) {
					str = itm.value.toString();
					col = str.substring(j+1);	
	
					if (col  == column){
							document.getElementById("horse-betting").elements[i].checked = true;
						if (box=='true'){
							 if (markRow(document.getElementById("horse-betting").elements[i]) < 0) {
								 return;
							 }
						}
					}
				}
			}
		}
	}
}
function deselectColumn(column) {
	var tmp, itm, j, i, str, num;
	str = new String(1);
	for(i=0;i<document.getElementById("horse-betting").length;i++){		
		if (!document.getElementById('horse-betting').elements[i].disabled) {		
			itm = document.getElementById("horse-betting").elements[i];
	
			if (itm.name.substring(0,1) == "E") {
				j = itm.value.indexOf("_");
				if (j >= 0) {
					str = itm.value.toString();
					col = str.substring(j+1);	
	
					if (col  == column){
						document.getElementById("horse-betting").elements[i].checked = false;
						if (box=='true'){
							markRow(document.getElementById("horse-betting").elements[i]);
						}
					}
				}
			}				
		}
	}
}
function populateSelection(s){
	splitArray = s.split("|");
	for (i=0; i<splitArray.length ; i++){
		columnNumber = i+1;
		str = splitArray[i];
		selectionArray = str.split(",");		
		for (j=0;j<selectionArray.length;j++ ){			
			horseNumber = selectionArray[j];
			value = horseNumber + "_" + columnNumber;
			for(k=0;k<document.getElementById("horse-betting").length;k++){		
				itm = document.getElementById("horse-betting").elements[k];
				name = itm.name;
				val = itm.value;
				if (val == value){		
					document.getElementById("horse-betting").elements[k].checked = true;
					if (box=='true'){
						markRow(document.getElementById("horse-betting").elements[k]);
					}
				}
			}

		}

	}
}
function clearSelection(s){
	splitArray = s.split("|");
	for (i=0; i<splitArray.length ; i++){
		columnNumber = i+1;
		str = splitArray[i];
		selectionArray = str.split(",");		
		for (j=0;j<selectionArray.length;j++ ){			
			horseNumber = selectionArray[j];
			value = horseNumber + "_" + columnNumber;
			for(k=0;k<document.getElementById("horse-betting").length;k++){		
				itm = document.getElementById("horse-betting").elements[k];
				name = itm.name;
				val = itm.value;
				if (val == value){		
					document.getElementById("horse-betting").elements[k].checked = false;
					if (box=='true'){
						markRow(document.getElementById("horse-betting").elements[k]);
					}
				}
			}

		}

	}
}
function deselectAll() {
	var itm;
	for(i=0;i<document.getElementById("horse-betting").length;i++){		
		itm = document.getElementById("horse-betting").elements[i];
		if (itm.type == 'checkbox') {
			if (document.getElementById("horse-betting").elements[i].checked == true){
				document.getElementById("horse-betting").elements[i].checked = false;
				if (box=='true'){
					var count = 1;
					if (wagerType == 'Exacta'){
						count = 2;
					}
					if (wagerType == 'Trifecta'){
						count = 3;
					}
					if (wagerType == 'Superfecta'){
						count = 4;
					}
					name = itm.name
					for(j=0;j<count;j++){
						var id = "B" + itm.name.substring(1, name.indexOf("_") + 1) + (j + 1);	
						document.getElementById(id).innerHTML = "<div>&nbsp;</div>";	
					}
				}
			}
		}				
	}
}
function markRow(o) {
	
	if (wagerType == 'Superfecta'&& box) {
		errMsg();
		var counter = 0;	
		for(i=0; i<document.getElementById("horse-betting").length; i++) {		
			itm = document.getElementById("horse-betting").elements[i];		
			if (itm.name.substring(0,1) == "E") {
				j = itm.value.indexOf("_");
				if (j >= 0) {
					str = itm.value.toString();
					col = str.substring(j+1);	
					if (document.getElementById("horse-betting").elements[i].checked == true) {
						counter++;
						if (counter > 10) {
							o.checked = false;
							displaySuperfectaSelectionsError();
							return -1;
						}
					}
				}
			}				
		}	
	}
	
	var name=o.name;
	var count = 1;
	if (wagerType == 'Exacta'){
		count = 2;
	}
	if (wagerType == 'Trifecta'){
		count = 3;
	}
	if (wagerType == 'Superfecta'){
		count = 4;
	}
	for(i=0;i<count;i++){
		var id = "B" + name.substring(1, name.indexOf("_") + 1) + (i + 1);	
		if (o.type == 'checkbox'){
			if (o.checked==true){
				document.getElementById(id).innerHTML = "<img src=\"/images/icons/dot-gray.gif\" >";	
			}else{
				document.getElementById(id).innerHTML = "<div>&nbsp;</div>";	
			}
		}
	}
}

function show(raceNumber,key){

	if(key == null){
		var pref;
		var theCookie = "" + document.cookie;
		var cookieArr = theCookie.split(";");		
		for (j = 0; j < cookieArr.length; j++){
			if (cookieArr[j].indexOf("JockeyTrainer") > -1 && cookieArr[j].indexOf("=") > -1){
				pref = cookieArr[j].substring(cookieArr[j].indexOf("=")+1);	
				//alert(pref);
			}
		}
		if(pref==''){
			key = "jockey";
		}else{
			key = pref;
		}
	}
	var lnk;
	var itm;
	for(i=0;i<document.getElementById("horse-betting").length;i++){		
		itm = document.getElementById("horse-betting").elements[i];
		itmId = itm.id;
		if (itm.type == 'hidden') {
			if (itmId.indexOf('JT' + raceNumber)>=0){
				var namesArray = itm.value.split("|");
				var jockey = namesArray[0];
				var trainer = namesArray[1];
				var id = "JT_" + raceNumber + "-" +itmId.substring(itmId.indexOf("-") + 1);
				if (key == 'jockey'){
					document.getElementById(id).innerHTML = jockey;	
					lnk=document.getElementById('lnkjockey');
					lnk.style.textDecoration='none';
					lnk.style.fontWeight='bold';
					lnk=document.getElementById('lnktrainer');
					lnk.style.textDecoration='underline';
					lnk.style.fontWeight='bold';
				}
				if (key == 'trainer'){
					document.getElementById(id).innerHTML = trainer;
					lnk=document.getElementById('lnkjockey');
					lnk.style.textDecoration='underline';
					lnk.style.fontWeight='bold';
					lnk=document.getElementById('lnktrainer');
					lnk.style.textDecoration='none';
					lnk.style.fontWeight='bold';

				}
			}
		}				
	}
	document.cookie = "JockeyTrainerPref=" + key +"; path=/;";	
}
function getCheckBoxColumnCount() {
	columns = new Array;
	col_count = 0;
	if (box == 'false'){
		if(wagerType == 'Pick4' || wagerType == 'Superfecta') {
			col_count = 4;
		} else if (wagerType == 'Pick3' || wagerType == 'Trifecta'|| wagerType == 'WPS'){
			col_count = 3;
		} else if ( wagerType == 'Double' || wagerType == 'Exacta'){
			col_count = 2;
		} else if ( wagerType == 'Quinella'){
			col_count = 1;
		}
	} else {
		col_count = 1;
	}
	for ( i = 0; i < col_count; i++){
		columns[i] = "_" + (i+1);
	}
	return columns;
}
function getBetsStr() {
	var tmp, itm, val, j, k, i, selection="";
	var columns = getCheckBoxColumnCount();
	var hasSelection = false;
	for (j=0; j<columns.length; j++){	
		ticks = "";
		hasTicks = false;
		for(i=0;i<document.getElementById("horse-betting").length;i++){
			itm = document.getElementById("horse-betting").elements[i];
			val = itm.value;

			if (itm.name.substring(0,1) == "E") {

				horse_num = val.substring(0,val.indexOf("_"));
				col_num = val.substring(val.indexOf("_"));	
				if (itm.type == 'checkbox' && 
					itm.checked == true && 
							col_num == columns[j]){
					ticks += horse_num + ",";
					hasTicks = true;
					hasSelection = true;
				}
			}
		}	
		if (hasTicks == true) {
			selection += ticks.substring(0, ticks.lastIndexOf(",")) + "|";		
		} else {
			//it needs to add a space in order to parse correctly in the ticketmanager
			selection += " |";
		}
	}
	if (hasSelection == true){
		return selection.substring(0, selection.lastIndexOf("|"));
	} else {
		return "no selection";
	}
}

var errorcount=0;
function bodogErrorHandler(message) {
	err=message;
	errorcount++;
	if (errorcount > 4) {
		errMsg();
		errorcount=0;
	}
}

function errMsg() {	
	var errorDiv = document.getElementById("dwrError");
	var disabledZoneDiv = document.getElementById('disabledZone');
	var errorHTML = "";
	
	if ( disabledZoneDiv ){
		disabledZoneDiv.style.visibility = 'hidden';
	}
	
	if (err != ""&&err!="null"){
		if (err == "Timeout"){
			err = "A timeout has occurred. Please refresh your browser or click any button to proceed.";
		}

		errorHTML = "";
		errorHTML += "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-bottom: 3px;\">";
		errorHTML += "<tr ><td width=\"18px\" valign=\"top\"><img src=\"/images/icons/icon-error.gif\" ></td>";	
		errorHTML += "<td valign=\"top\" class=\"error-message\">" + err + "</td>";
		errorHTML += "</tr></table>";
		
		//This code is to reset the global variable checkedColumns in case of 
		//error due to the maximum amount in a stake has been passed
		if(err.indexOf("maximum stake")!=-1) {
			checkedColumns=0;
		}
	
	} else {
		errorHTML = "";	
	}
	
	if ( errorDiv ){
		errorDiv.innerHTML = errorHTML;
	}

   var button = document.getElementById("add-to-bet-ticket-loader");
   // need to check if user is logged in here. 
   // if not logged in, then show regular button.
  
   if (button){
		if(button.className != "add-to-bet-ticket"){
		   button.innerHTML = '<a href="javascript:loginToAdd();" title="Add To Bet Ticket"><img align="right" src="/images/horse-betting/button-add-to-ticket-off.gif" alt="Add To Bet Ticket"></a>';   		
		} else {		
		   button.innerHTML = '<a href="javascript:addBets();" title="Add To Bet Ticket"><img align="right" src="/images/horse-betting/button-add-to-ticket-off.gif" alt="Add To Bet Ticket"></a>';   
		}
   }   

	

}

function displaySuperfectaSelectionsError() {
	err = 'Maximum number of selections for Superfecta Box is 10!';
	errMsg();
	self.location = '#ticket';
	scroll(0,0);
}

function errCalendarMsg() {	
	var errorDiv = document.getElementById("calendarError");
	var errorHTML = "";

	errorHTML = "";
	errorHTML += "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-bottom: 3px;\">";
	errorHTML += "<tr ><td width=\"18px\" valign=\"top\"><img src=\"/images/icons/icon-error.gif\" ></td>";	
	errorHTML += "<td valign=\"top\" class=\"error-message\">Highlighting race days in the calendar failed. Please refresh your browser or select a different Racetrack.</td>";
	errorHTML += "</tr></table>";
	
	if ( errorDiv ){
		errorDiv.innerHTML = errorHTML;
	}
}

/*
 * overwrite the DWRUtil.debug in util.js
 */
DWRUtil.debug = function(message) {
	err = message;
	if (message.indexOf("setValue")>=0){
		err = "Race data is out of date. Please reselect a race or reload the page.";
	}
	errMsg();
}

/*
 * If not logged in, clicking 'add to ticket' will invoke this method.
 */
function loginToAdd() {
	err = "";
	errMsg();
	selection = getBetsStr();
	if(selection =='no selection'){
		err = "Please select a wager.";
		errMsg();
	} else {
	var query = '&type=' + wagerType + 
				'&tc=' + trackCode + 
				'&r=' + raceID +
				'&s=' + selection +
				'&box=' + box;
		self.location='/horse-betting/login-redirect.jsp?' + query;
	}
}
function refreshTicket() {
	loadTicket();
}
/*
 * This method is invoked in the body onload which will automatically add to ticket after login.
 */
function addTicketAfterLogin() {
	populateSelection(selectionStr);
	addToTicket(stake,trackCode,raceID,wagerType,box,selectionStr);
}
/*
 * If logged in, clicking 'add to ticket' will invoke this method.
 */
function addBets() {
	err = "";
	errMsg();
	selection = getBetsStr();
	if(selection =='no selection'){
		err = "Please select a wager.";
		errMsg();
	} else {
		addToTicket(stake,trackCode,raceID,wagerType,box,selection);
		scroll(0,0);
	}	
}
function confirmTicket(){
	document.forms["horse-betting"].submit();
}
function indexInitJSON(Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	DWREngine.beginBatch();
	updateRaceMenuJSON(Locale,Timezone);
	updateRacebookTrackJSON();
	updateLiveOdds();
	DWREngine.endBatch();
	setTimeout("indexInitJSON('"+Locale+"','"+Timezone+"')", reload_interval);
}
function raceInitJSON(TrackCode,Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	DWREngine.beginBatch();
	updateRaceMenuJSON(Locale,Timezone);
	updateRacebookTrackJSON();
	updateMTPJSON(TrackCode,Locale,Timezone);
	updateLiveOdds();
	DWREngine.endBatch();
	setTimeout("raceInitJSON('"+TrackCode+"','"+Locale+"','"+Timezone+"')", reload_interval);
}
function featuredRaceInitJSON(Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	DWREngine.beginBatch();
	updateRaceMenuJSON(Locale,Timezone);
	updateRacebookTrackJSON();
	updateLiveOdds();
	DWREngine.endBatch();
	setTimeout("featuredRaceInitJSON('"+Locale+"','"+Timezone+"')", reload_interval);
}

function resultInitJSON(TrackCode,Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	DWREngine.beginBatch();
	updateRaceMenuJSON(Locale,Timezone);
	updateRacebookTrackJSON();
	updateMTPJSON(TrackCode,Locale,Timezone);
	DWREngine.endBatch();
	setTimeout("resultInitJSON('"+TrackCode+"','"+Locale+"','"+Timezone+"')", reload_interval);
}

function previewInitJSON(Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	updateRaceMenuJSON(Locale,Timezone);
	setTimeout("previewInit('"+Locale+"','"+Timezone+"')", reload_interval);
}

function archiveViewAllInit(Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	DWREngine.beginBatch();
	updateRaceMenuJSON(Locale,Timezone);
	updateRacebookTrackJSON();
	resultArchiveQuickUpdate();
	reloadTodaysTrack();
	DWREngine.endBatch();
	setTimeout("archiveViewAllInit('"+Locale+"','"+Timezone+"')", reload_interval);
}

function archiveTrackInit(Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	DWREngine.beginBatch();
	updateRaceMenuJSON(Locale,Timezone);
	updateRacebookTrackJSON();
	resultArchiveTrackQuickUpdate();
	DWREngine.endBatch();
	setTimeout("archiveTrackInit('"+Locale+"','"+Timezone+"')", reload_interval);
}

function leftMenusInitJSON(Locale,Timezone){
	DWRUtil.useLoadingMessage("&nbsp;");
	DWREngine.beginBatch();
	updateRaceMenuJSON(Locale,Timezone);
	updateRacebookTrackJSON();
	DWREngine.endBatch();
	setTimeout("leftMenusInitJSON('"+Locale+"','"+Timezone+"')", reload_interval);
}

//----- Start Code for MTP Checking ( RBK-41 ) -------- 

/*

// Gathers and attaches to a single div id, the MTP information.
function getMTP(element, raceID, trackAndRace){
	TracksManager.getRaceById(raceID, function(race){
		
		var displayText = '';
		
		if( !race.minutesToPost.isEmpty ){
			if( race.minutesToPost.mtp == '0' ){
				$("#" + element).parent().parent().parent().prev().css({background: "RED"});
			}
			else if( parseInt(race.minutesToPost.mtp) <= MIN_MTP ){
				displayText = "<i> Less than " + race.minutesToPost.mtp +" MTP for "+ trackAndRace +". </i>";
			}
		}
		if((document.getElementById(element) != null) && (displayText != '')){
			document.getElementById(element).innerHTML = displayText;
			$("#" + element).parent().parent().parent().parent().show();
		}
	});
}

function getMTPDirectly( raceID, trackAndRace){
	var toReturn = "";
	
	TracksManager.getRaceById(raceID, function(race){
		
		var displayText = '';
		
		if( !race.minutesToPost.isEmpty ){
			if( race.minutesToPost.mtp == '0' ){
				displayText = '';
			}
			else if( parseInt(race.minutesToPost.mtp) <= MIN_MTP ){
				displayText = "<i> Less than " + race.minutesToPost.mtp +" MTP for "+ trackAndRace +". </i>";
			}
		}
		toReturn = displayText;
	});
	return toReturn;
}

// An array of wager objects.
var Wagers = new Array();

// The wager object.
function Wager(id, race, track){
	this.id= id;
	this.race= race
	this.track=track;
	
	// Add the wager object to the array Wagers
	Wagers.push(this);
};

// Purge the array of wager objects. I.e start with no wagers in ticket.
function removeWagers(){
	if( (Wagers != null) || (Wagers.length > 0) ){
		 for(var i = 0; i < Wagers.length; i++){
		 	Wagers.pop();
		 }
	}
}

// Go through all the wagers and populate the appropriate div's.
function populateMTP(){
	var wager;
	for( var i=0; i < Wagers.length; i++){
		wager = Wagers[i];
		getMTP(wager.id, wager.race, wager.track);
	}
	
	for( var i = 0; i < $(".mtp").length; i++){
		if( $($(".mtp")[i]).children().text() == "" ){
			$($(".mtp")[i]).parent().parent().parent().parent().hide();
		}
	}
	
	wager=null;
	return true;
}

//----- End Code for MTP Checking ( RBK-41 ) --------

*/
function getTrackDates(trackCode){
	$("#dateLoader").css("visibility", "visible");
	if (trackCode != "ALLTRACKS")
		TracksManager.getTrackDateStrings(trackCode, handleDateStrings);
}

function getTrackDatesViaSubmit(trackCode){
	$("#dateLoader").css("visibility", "visible");
	if (trackCode == "ALLTRACKS")  {
		var dates = new Array(1);
		dates[0] = new Date();
		handleDatesViaSubmit(dates);
	}
	else
		TracksManager.getTrackDateStrings(trackCode, handleDateStringsViaSubmit);
}

//Stored dates for the calendar to hilight
var gDates;

function handleDateStringsViaSubmit(dates){
	if((dates != null) && (dates.length > 0)){
		var latestDate = dates[dates.length-1];
		var date = latestDate.split(',');

		var latestMonth = date[1];
		var latestDay = date[2]
		
	 	document.cal_date.date.value = date[0] + '-' + (latestMonth) + '-' + latestDay;
	 	document.cal_date.submit();
	  }else
	 {
	 	errCalendarMsg();
	 	$("#dateLoader").css("visibility", "hidden");
	 	//showCalendarControl(false);
	 	//$("#CalendarControl").css('display', 'block');
	 	gDates = [];
	 }
}

function handleDatesViaSubmit(dates){
	if((dates != null) && (dates.length > 0)){
		var latestDate = dates[dates.length-1];
		
		var latestMonth = latestDate.getMonth() + 1;
		var latestDay = latestDate.getDate();
		
		if (latestMonth < 10) {latestMonth = "0" + latestMonth;}
        if (latestDay < 10) {latestDay = "0" + latestDay;}
		
	 	document.cal_date.date.value = latestDate.getFullYear() + '-' + (latestMonth) + '-' + latestDay;
	 	document.cal_date.submit();
	  }else
	 {
	 	errCalendarMsg();
	 	$("#dateLoader").css("visibility", "hidden");
	 	//showCalendarControl(false);
	 	//$("#CalendarControl").css('display', 'block');
	 	gDates = [];
	 }
}

function formatRacebookDate(date){
	var day = date.getDate();
	var month = date.getMonth() + 1;
	var year = date.getFullYear();
	
	if (month < 10) {month = "0" + month;}
    if (day < 10) {day = "0" + day;}
	
	return year + '-' + (month) + '-' + day;
}

function handleDates(dates){
	if((dates != null) && (dates.length > 0)){
		var latestDate = dates[dates.length-1];
	 	//document.cal_date.date.value = latestDate.getFullYear() + '-' + ( 1 + latestDate.getMonth()) + '-' + latestDate.getDate();
	 	gDates = dates;
	 	if(gDates){ highlight(dates); }
	 }else
	 {	
	 	errCalendarMsg();
	 	$("#dateLoader").css("visibility", "hidden");
	 	//showCalendarControl(false);
	 	//$("#CalendarControl").css('display', 'block');
	 	gDates = [];
	 }
}

function handleDateStrings(dates){
	if((dates != null) && (dates.length > 0)){
		var latestDate = dates[dates.length-1];
	 	//document.cal_date.date.value = latestDate.getFullYear() + '-' + ( 1 + latestDate.getMonth()) + '-' + latestDate.getDate();
	 	gDates = dates;
	 	if(gDates){ highlight(dates); }
	 }else
	 {	
	 	errCalendarMsg();
	 	$("#dateLoader").css("visibility", "hidden");
	 	//showCalendarControl(false);
	 	//$("#CalendarControl").css('display', 'block');
	 	gDates = [];
	 }
}

function highlight(dates){
	var calendarElements = $("a[@href*='setCalendarControlDate']");
	var href, date;
	
	for( var i = 0; i < calendarElements.size(); i++){
		href = $(calendarElements).get(i).href;
        //javascript:setCalendarControlDate(2008,10,14)
        //                                  ^^^^^^^^^^
        //javascript:setCalendarControlDate(2008,1,4)
        //                                  ^^^^^^^^
        //Characters 34 to length-1
		date = href.substring(34, href.length-1)
		
		for( var j = 0; j < dates.length; j++){
            var thisDate = dates[j];
            if (thisDate == date) {
                var curEl = $("a[@href$=(" + date + ")]").children()[0];
                curEl.className = "available";
			}
		}
	}
	$("#dateLoader").css("visibility", "hidden");
}

function handleCalendar(callingElement){
	showCalendarControl(false);
	getTrackDates(callingElement);
	hideCalendarControl();
}

function handleCalendarViaSubmit(callingElement){
	showCalendarControl(false);
	getTrackDatesViaSubmit(callingElement);
	//hideCalendarControl();
}

function showCalendarControlForTrack(){
	showCalendarControl(true);
	getTrackDates($("option:selected").val());
}

function updateLiveOdds() {
	var liveOdds;
	liveOdds = document.getElementsByName("liveOdds");
	if (  liveOdds.length == 0 ) {
		//then work around for non standard browsers ( i.e., IE )
		var selectionsBox = document.getElementById("selectionsBox");
		liveOdds = getElementsByName_iefix ( selectionsBox, "span", "liveOdds");
	}
	
	if ( liveOdds.length > 0 ) {

		raceId = parseIdsFromLiveOdds ( liveOdds[0], RACE_ID_TOKEN);

		TracksManager.getRaceById(raceId, function(race) {

			for ( i = 0 ; i < liveOdds.length ; i++ ) {
				liveOddsElement = document.getElementById (  liveOdds[i].id);

				saddleNumber =parseIdsFromLiveOdds (  liveOddsElement , SADDLE_ID_TOKEN);
		
				runners = race.runners;
				
				
				for ( x = 0 ; x < runners.length ; x++ ) {
					runner = runners[x];
					

					if ( runner.saddleNumber == saddleNumber ) {
						liveOddsElement.innerHTML = runner.winOdds;
						runners.splice(x,1);
						break;
					}
				}
				
			}
		});
	}
}

function getElementsByName_iefix(element, tag, name) {
     
     var elem = document.getElementsByTagName(tag);
     var arr = new Array();
     for(i = 0,iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute("name");
          if(att == name) {
               arr[iarr] = elem[i];
               iarr++;
          }
     }
     return arr;
}

function parseIdsFromLiveOdds ( liveOddsElement, idToken ) {
	
	var toReturn;
	
	idName = liveOddsElement.id;
	seperatorPos = idName.indexOf("-");
	dataStartPos = idName.indexOf("_")+1;
	saddleLength = seperatorPos - dataStartPos;

	raceId = idName.substr (dataStartPos, saddleLength);
	saddleNumber = idName.substr (seperatorPos+1);

	if ( idToken == RACE_ID_TOKEN ) {
		toReturn = raceId;
	}
	
	if ( idToken == SADDLE_ID_TOKEN ) {
		toReturn = saddleNumber ;
	}

	return toReturn;
}

function formatWagerDescription ( text ) {

	var toReturn = text;
	
	if ( toReturn.length > 20 ) {
		if ( text.indexOf ( "/" ) >= 0 ) {
			toReturn = formatExotics ( toReturn );
		}

		toReturn = formatWinPlaceShow ( toReturn );
	}
	
	
	
	return toReturn;
}

function formatExotics ( text ) {
	var endOfLine = "/<br>";
	var toReturn ="";
	var lines = text.split("/");
	
	for ( i = 0 ; i < lines.length ; i++ ) {
		toReturn = toReturn + lines[i] + endOfLine;
		
	}
	
	toReturn = toReturn.substr ( 0, toReturn.length - endOfLine.length);

	return toReturn;
}

function formatWinPlaceShow ( text ) {

	pos = text.indexOf ( " " );
	
	startText = text.substring ( 0, pos );
	endText = text.substring ( pos, text.length );
	
	toReturn = startText + "<br>" + endText;
	
	return toReturn;
}



function getTracks(year, month, date){
	var date = new Date(year, month, date);
	$("#dateLoader").css("visibility", "visible");
	dwr.util.removeAllOptions("tc");
	
	TracksManager.getJSTracks(date, handleTracks);
}

function handleTracks(tracks){
	//for( var i = 0; i < tracks.length(); i++ ){
	//	tracks[i]
	//}
	$("#dateLoader").css("visibility", "hidden");
	dwr.util.addOptions( "tc", tracks, code, name );
}
