var WAGER_MAXIMUM = 32000;

function GetBetString() {
	var betElement = document.getElementById("txtBet");
	var bet = betElement.value;
	var matches = bet.match(/(V|N|Q|S|WA|T1|T2|X1|X2)[RHG] (WN|PL|EW|QN|EX|TF|CD|DD|QD|TW|\?TF|\?TF\/C) \d{1,2} ([\dFCfc]{1,2}([+]{1}[\d{1,2}FCfc]){0,}\/{0,1}){1,4}(:\d{1,5}(\.5){0,1}){1,2}/);
	if (matches != null) {
		bet = matches[0]; //truncate extra data not matching the regex
		betElement.value = bet;
		return bet;
	} else {
		return null;
	} 
}

function Bet(string) {

	var _BOX = "/C";
	var _D = " ";	//Delimiter
	var _DC = ":";	//Cost delimiter
	
	var betString;	
	var postString = "";
	var sParts = string.split(" ");
	var sDetails = sParts[3].split(":");
		
	var enteredBetType = sParts[1];
	var codedBetType = GetBetType(enteredBetType);
	betString = codedBetType;
	
	this.win = parseFloat(sDetails[1]);
	if (sDetails.length > 2) {
		this.place = parseFloat(sDetails[2]);
	} else {
		this.place = 0;
	}

	switch (betString) {
		case "place":
			this.place = this.win;
			this.win = 0;
			betString = "win_place_eachway";
			break;
		case "mystery":
			betString = "?TF";
			this.win = 1;
			break;
		case "mystery_boxed":
			betString = "?TF";
			postString = _BOX;
			this.win = 3;
			break;
	}

	betString += _D + sParts[2];
	if (enteredBetType == "?TF") {
		// Handle mystery bet string construction
		betString += postString;	
	} else {
		// Handle standard bet string construction
		betString += _D + sDetails[0];
	}
	
	betString += _DC + this.win;
	if (this.place > 0) betString += _DC + this.place;
	
	this.betString = betString;
	this.meetingVenue = GetMeetingVenue(sParts[0].substr(0, sParts[0].length - 1));
	this.meetingType = sParts[0].charAt(sParts[0].length - 1);
	this.meetingDate = document.getElementById("meetingDate").value;
	this.costcheck = "0";
}

function GetBetQS(bet) {
	var qs = "meetingVenue=" + UrlEncode(bet.meetingVenue);
	qs += "&meetingType=" + UrlEncode(bet.meetingType);
	qs += "&meetingDate=" + UrlEncode(bet.meetingDate);
	qs += "&bet=" + UrlEncode(bet.betString);
	qs += "&costcheck=" + bet.costcheck;
	qs += "&system=local";	//Assume we are betting on local events
	return qs;
}

function setMessage(message) {
	document.getElementById("errorMessage").innerHTML = message;
}

function confirmBet() {
	
	var sBet = GetBetString();
	if (sBet == null) {
		setMessage(Translate(MSG_FORMAT_WRONG));
		return;
	}
	
	setMessage("");
	
	var oBet = new Bet(sBet);
	
    if (oBet.win > WAGER_MAXIMUM || oBet.place > WAGER_MAXIMUM) {
		setMessage(Translate(MSG_MAXBET) + WAGER_MAXIMUM);
		return;
	}
	
    var oDlg = new DialogWindow("confirm.aspx?" + GetBetQS(oBet));	
    oDlg.Name = "confirm";
    oDlg.Width = 570;
    oDlg.Height = 340;
    oDlg.Scroll = false;
    oDlg.Status = false;
    oDlg.Resizable = true;
    oDlg.TryModal = true;
    oDlg.Show();
    if (oDlg.WasModal) {
        var result = oDlg.ReturnValue;
        if (result != null) handleBetAction(result);
    }
}

function GetMeetingVenue(string) {
    switch (string.toUpperCase()) {
        case "V": return "VIC";
        case "N": return "NSW";
        case "Q": return "QLD";
        case "S": return "SA";
        case "WA": return "WA";
        case "T1": return "TAS1";
        case "T2": return "TAS2";
        default: return string;
    }
}

function resetSelections() {
	document.getElementById("txtBet").value = "";
}

function GetBetType(string) {
    switch (string.toUpperCase()) {
        case "WN": return "win_place_eachway";
        case "PL": return "place";
        case "EW": return "win_place_eachway";
        case "QN": return "quinella";
        case "EX": return "exacta";
        case "TF": return "trifecta";
        case "CD": return "cd";
        case "DD": return "dd";
        case "QD": return "qd";
        case "TW": return "tw";
        case "?TF": return "mystery";
        case "?TF/C": return "mystery_boxed";
        default: return "";
    }
}
