<%@ page language="java" contentType="text/javascript"%> <%@ include file="inc/_constants.jsp" %> var handicap_price = new Array(); var formSubmitted = false; var lastEventTimeStamp=0; function UpdateUserInfo(){ if (window.self==window.top) reloadUserDetails(); else window.top.reloadUserDetails(); } function ContinueAfterWager(form){ var url=form.action; $.ajax({ type: "POST", url: url, data: $("#betslip").serialize(), // serializes the form's elements. success: function(result){ var divbet=$("#betslipcontainer"); divbet.html(result); }, error: function (xhr, ajaxOptions, thrownError) { alert("Connection Error. Try Again in a bit. ("+xhr.status+"-"+xhr.responseText+")"); } }); return false; } function confirmBetSlip(form) { var isOkay = false; if (formSubmitted) { //showDialog('<%=DIALOG_WARNING%>','<%=WARNING_WAGER_SUBMITTED %>','warning'); } else { var totalBetAmount = getTotalBetAmount(form); if (totalBetAmount > 0) { var confirm = form.elements['confirm']; if (confirm != undefined && confirm.checked) { formSubmitted = true; displayProcessing(); var url = $("#betslip").attr("action"); $.ajax({ type: "POST", url: url, data: $("#betslip").serialize(), // serializes the form's elements. success: function(result){ var divbet=$("#betslipcontainer"); divbet.html(result); formSubmitted=false; UpdatePlayerInfo("/servlet/newspb.front?Page=PlayerInfo&SubLicenseeID=941&format=json","/sportsbook"); }, error: function (xhr, ajaxOptions, thrownError) { alert("Connection Error. Try Again in a bit. ("+xhr.status+"-"+xhr.responseText+")"); $("#placeBetButton").show(); } }); } else { showDialog('<%=DIALOG_WARNING%>','<%=WARNING_CONFIRMBET %>','warning'); $("#placeBetButton").show(); } } else { showDialog('<%=DIALOG_WARNING%>','<%=WARNING_ENTERBETAMOUNT %>','warning'); $("#placeBetButton").show(); } } return isOkay; } function displayProcessing() { document.getElementById('processing_overlay').style.display = ''; } function initBetSlip() { var form = document.getElementById('betslip'); if (form===null) return; var elements = form.elements; var element; for (var i = 0; i < elements.length; i++) { element = elements[i]; if (element.type == 'text') { // disable autocomplete for all input text fields element.setAttribute('autocomplete', 'off'); } // if field name starts with 'bet_' if (element.name.indexOf('bet_') == 0) { // initialize the 'bet_' field 'originalvalue' variable to // be the current field value for field onchange detection. element.originalvalue = element.value; } } } /** * Saves the bet amount in a cookie if the bet amount changes. */ function saveBetAmountOnChange(form, fieldKey) { var betField = form.elements['bet_' + fieldKey]; // Need to implement custom onchange detection because if the // bet amount field.value is manually updated, the field onchange // event does not fire. if (betField.originalvalue != betField.value) { betField.originalvalue = betField.value; saveTicketField(fieldKey, betField.value); } } /** * Helper function to get the decimal price of the entry. * Handles buy points price as well. */ function getEntryPrice(form, fieldKey) { // price of bet slip entry var priceField = form.elements['price_' + fieldKey]; var price = priceField.value; // price of bet slip entry if bought points var handicapField = form.elements['handicap_' + fieldKey]; if (handicapField != undefined) { var selectedIndex = handicapField.selectedIndex;initBetSlip var handicapIndex = handicapField.options[selectedIndex].value; if (handicapIndex >= 0) { price = handicap_price[fieldKey][handicapIndex]; } } return price; } /** * Given the bet amount, calculate the win amount and set the win amount * in the form field. */ function calculateToWin(form, fieldKey) { var betField = form.elements['bet_' + fieldKey]; var winField = form.elements['win_' + fieldKey]; var price = getEntryPrice(form, fieldKey); var winFieldValue = getWinFieldValue(betField, price); if (winField.value != winFieldValue) { // set the win amount in the form winField.value = winFieldValue; } return true; } /** * Given the bet amount, calculate the progressive parlay potential * win amounts and set the win amounts in the page. */ function calculateProgressiveParlayToWin(form, fieldKey, size) { var betField = form.elements['bet_' + fieldKey]; var priceField; var price; var winFieldValue; for (var i = 0; i < size; i++) { priceField = form.elements['price_' + i + '_' + fieldKey]; price = priceField.value; winFieldValue = getWinFieldValue(betField, price); document.getElementById('prog_' + i + '_' + fieldKey).innerHTML = addCommas(formatAmount(winFieldValue)); } } /** * Helper function to calculate the win amount given the bet amount. */ function getWinFieldValue(betField, price) { var winFieldValue = ''; if (betField.value != '') { var betAmount = Number(betField.value); if (isNaN(betAmount)) { betAmount = 0; } var paidAmount = betAmount * price; var winAmount = truncate(paidAmount - betAmount); // format the win amount to 2 decimal places winFieldValue = formatAmount(winAmount); } return winFieldValue; } /** * Given the win amount, calculate the bet amount and set the bet amount * in the form field. */ function calculateToBet(form, fieldKey) { var betField = form.elements['bet_' + fieldKey]; var winField = form.elements['win_' + fieldKey]; var price = getEntryPrice(form, fieldKey); var betFieldValue = ''; if (winField.value != '') { // Use the existing bet amount to calculate the // win amount. If the win amount is the same, // then we do not need to calculate the bet amount. var winFieldValue = getWinFieldValue(betField, price); if (winFieldValue == winField.value) { // Do not calculate the bet amount, // use existing bet amount. betFieldValue = betField.value; } else { // Calculate the bet amount. var winAmount = Number(winField.value); if (isNaN(winAmount)) { winAmount = 0; } var betAmount = truncate(winAmount / (price - 1.0)); var paidAmount = truncate(betAmount * price);; while (paidAmount < truncate(Number(winField.value) + betAmount)) { betAmount += 0.01; paidAmount = truncate(betAmount * price); } betFieldValue = formatAmount(betAmount); } } if (betField.value != betFieldValue) { // set the bet amount in the form betField.value = betFieldValue; } return true; } function saveAllStraightBetAmounts(form) { var entries = form.elements['entry']; var entryField; var fieldKey; var betField; for (var i = 0; i < entries.length; i++) { entryField = entries[i]; fieldKey = entryField.value; betField = form.elements['bet_' + fieldKey]; if (betField != undefined) { saveBetAmountOnChange(form, fieldKey); } } } function setAllStraightBetAmounts(isBlur, event, form, inputValue) { var keyCode; if (window.event) // IE { keyCode = event.keyCode; } else if (event.which) // Netscape/Firefox/Opera { keyCode = event.which; } if ((isBlur || keyCode == 9) && inputValue == '') // tab { // ignore the tab character, do nothing } else { // copy the straight bet value to all bet entry fields var entries = form.elements['entry']; var entryField; var fieldKey; var betField; for (var i = 0; i < entries.length; i++) { entryField = entries[i]; fieldKey = entryField.value; betField = form.elements['bet_' + fieldKey]; if (betField != undefined) { betField.value = inputValue; calculateToWin(form, fieldKey); calculateTotalBetAmount(betField); } } } } function resetStraightBets(form) { var straightField = form.elements['straight_bet']; if (straightField != undefined) { straightField.value = ''; } } function calculateTotalBetAmount(betField) { if (betField.originalvalue != betField.value) { // Calculate the total bet amount when the bet amount changes. var totalBetAmount = getTotalBetAmount(betField.form); setTotalBetAmount(totalBetAmount); var totalWinAmount = getTotalWinAmount(betField.form); setTotalWinAmount(totalWinAmount); } } function calculateTotalParlayWin(betField) { var parlaybets=""; var accsizes=""; var elements = null; if (betField==null){ elements=document.getElementById("betslip").elements; } else{ elements=betField.form.elements; } for (var i = 0; i < elements.length; i++) { var element = elements[i]; if (element.name.indexOf('bet_parlay_') == 0) { if (element.value.trim().length>0){ parlaybets+=","+element.value; accsizes+=","+element.name.replace("bet_parlay_",""); } } } if (parlaybets.length>0) parlaybets=parlaybets.substring(1); if (accsizes.length>0) accsizes=accsizes.substring(1); $("#totalWinParlay").load("/servlet/sportsbook.user?Page=ParlayPotentialWin&SubLicenseeID=<%=SUBLICENSEE_ID%>&accumSize="+ accsizes +"&betAmount="+parlaybets); } function getTotalBetAmount(form) { var totalBetAmount = 0; var elements = form.elements; var element; // special case for if/reverse bets // 'bet_unit_risk_3' is the unit bet for if bets. // 'bet_unit_risk_4' is the unit bet for reverse bets. element = form.elements['bet_unit_risk_3']; if (element == undefined) { element = form.elements['bet_unit_risk_4']; } if (element != undefined) { // special case for if/reverse bets, do not include bet entries totalBetAmount += getAdjustedBetAmount(element, elements); } else { // total all entry and accumulator bet fields for non if/reverse bets for (var i = 0; i < elements.length; i++) { element = elements[i]; // if field name starts with 'bet_' if (element.name.indexOf('bet_') == 0) { totalBetAmount += getAdjustedBetAmount(element, elements); } } } return totalBetAmount; } function setFreeBetAmount(freebetSelect,freebetamount) { if (freebetamount===undefined){ setCookie('fbid',0,1); return; } var elements = freebetSelect.form.elements; for (var i = 0; i < elements.length; i++) { element = elements[i]; // if field name starts with 'bet_' if (element.name.indexOf('bet_') == 0) { element.value=freebetamount; var elementkey=element.name.substring(4); setCookie('fbid',freebetSelect.options[freebetSelect.selectedIndex].value,1); cleanAmountField(element); calculateToWin(element.form,elementkey); formatAmountField(element); calculateTotalBetAmount(element); saveBetAmountOnChange(freebetSelect.form,elementkey); return; } } alert('Please select at least one wager to claim free bet'); setCookie('fbid',0,1); freebetSelect.selectedIndex=0; } function getAdjustedBetAmount(betField, elements) { var adjustedBetAmount = 0; if (betField.value != '') { var betAmount = parseFloat(betField.value); if (isNaN(betAmount)) { betAmount = 0; } // default multiplier to 1 for straight bets var multiplier = 1; // get the multiplier if it exists for accumulators var multiplierField = elements['multiplier_' + betField.name]; if (multiplierField != undefined) { multiplier = parseInt(multiplierField.value); } adjustedBetAmount = (betAmount * multiplier); } return adjustedBetAmount; } function getTotalWinAmount(form) { var totalBetAmount = 0; var elements = form.elements; var element; // special case for if/reverse bets // 'bet_unit_risk_3' is the unit bet for if bets. // 'bet_unit_risk_4' is the unit bet for reverse bets. /*element = form.elements['bet_unit_risk_3']; if (element == undefined) { element = form.elements['bet_unit_risk_4']; } */ if (element != undefined) { // special case for if/reverse bets, do not include bet entries totalBetAmount += getAdjustedBetAmount(element, elements); } else { // total all entry and accumulator bet fields for non if/reverse bets for (var i = 0; i < elements.length; i++) { element = elements[i]; // if field name starts with 'bet_' if (element.name.indexOf('win_') == 0) { totalBetAmount += getAdjustedBetAmount(element, elements); } } } return totalBetAmount; } function getAdjustedWinAmount(betField, elements) { var adjustedBetAmount = 0; if (betField.value != '') { var betAmount = parseFloat(betField.value); if (isNaN(betAmount)) { betAmount = 0; } // default multiplier to 1 for straight bets var multiplier = 1; // get the multiplier if it exists for accumulators var multiplierField = elements['multiplier_' + betField.name]; if (multiplierField != undefined) { multiplier = parseInt(multiplierField.value); } adjustedBetAmount = (betAmount * multiplier); } return adjustedBetAmount; } function setTotalBetAmount(amount) { document.getElementById('totalBet').innerHTML = addCommas(formatAmount(amount)); } function setTotalWinAmount(amount) { if (document.getElementById('totalWin')){ document.getElementById('totalWin').innerHTML = addCommas(formatAmount(amount)); } } function formatAmountField(amountField) { if (amountField.value != '') { amountField.value = formatAmount(amountField.value); } } function truncate(amount) { var epsilon = 0.0000000000005; var temp = amount * 100.0; temp = Math.floor(temp + epsilon); amount = temp / 100.0; return amount; } /** * Format a number to 2 decimal places. */ function formatAmount(amount) { var temp = Number(amount); if (isNaN(temp)) { temp = 0; } return temp.toFixed(2); } /** * Format a number with commas. */ function addCommas(amount) { var nStr = '' + amount; var x = nStr.split('.'); var x1 = x[0]; var x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } function getCaretPos(input) { var caretPos = 0; if (input.selectionStart || input.selectionStart == '0') // Firefox { caretPos = input.selectionStart; } else if (document.selection) // IE { // Set focus on the element input.focus(); // To get cursor position, get empty selection range var sel = document.selection.createRange(); var selLength = sel.text.length; // Move selection start to 0 position sel.moveStart('character', -input.value.length); // The caret position is selection length caretPos = sel.text.length - selLength; } return caretPos; } function getSelectionLength(input) { var selectionLength = 0; if (input.selectionStart || input.selectionStart == '0') // Firefox { selectionLength = input.selectionEnd - input.selectionStart; } else if (document.selection) // IE { // Set focus on the element input.focus(); // To get cursor position, get empty selection range var sel = document.selection.createRange(); selectionLength = sel.text.length; } return selectionLength; } function isDecimalPoint(event, keyCode) { return (!event.shiftKey && ((keyCode == 110) || (keyCode == 190))); // decimal, period } function isNumberKey(event, keyCode) { return (!event.shiftKey && ((keyCode >= 48 && keyCode <= 57) || // 0-9 (keyCode >= 96 && keyCode <= 105))); // keypad 0-9 } function isKeyAllowed(event, keyCode) { return (isNumberKey(event, keyCode) || // 0-9, keypad 0-9 isDecimalPoint(event, keyCode) || // decimal, period (keyCode == 110) || (keyCode == 190) || // decimal, period (keyCode == 37) || (keyCode == 39) || // left arrow, right arrow (keyCode == 36) || (keyCode == 35) || // home, end (keyCode == 8) || (keyCode == 46) || // backspace, delete (keyCode == 45) || (keyCode == 9)); // insert, tab } function filterAmountKeyPress(event, input) { // capture these key states immediately var isShift=event.shiftKey; var isCtrl=event.ctrlKey; var isAlt=event.altKey; var value = input.value; var decimalPos = value.indexOf('.'); var decimalAlreadyExists = (decimalPos != -1); var remainder = ''; if (decimalAlreadyExists) { remainder = value.substring(decimalPos + 1, value.length); } var selectionLength = getSelectionLength(input); var caretPos = getCaretPos(input); var keyCode; if (window.event) // IE { keyCode = event.keyCode; } else if (event.which) // Netscape/Firefox/Opera { keyCode = event.which; } var returnValue = true; if (isCtrl || isAlt || isKeyAllowed(event, keyCode)) { if (remainder.length >= 2 && caretPos > decimalPos && selectionLength == 0 && (isNumberKey(event, keyCode) || isDecimalPoint(event, keyCode))) { // Do not allow entering more than 2 digits after the // decimal point if the cursor is after the decimal // point and there is nothing selected/highlighted. returnValue = false; } else if (decimalAlreadyExists && selectionLength == 0 && isDecimalPoint(event, keyCode)) { // Do not allow entering another decimal point if a decimal point // already exists and there is nothing selected/highlighted. returnValue = false; } else { // Let the browser process the keystroke. } } else { // Do not allow entering of non number character. returnValue = false; } return returnValue; } function cleanAmountField(input) { var value = input.value; // Only digits and one decimal point are allowed. // Only 2 digits allowed after the decimal point. // Remove characters that are not allowed. var isHasDecimal = false; var digitsAfterDecimal = 0; var result = ''; for (var i = 0; i < value.length; i++) { var ch = value.charAt(i); if (ch == '.' && !isHasDecimal) { result += ch; isHasDecimal = true; } else if (ch >= '0' && ch <= '9') { if (isHasDecimal) { if (digitsAfterDecimal < 2) { result += ch; ++digitsAfterDecimal; } // else character not allowed } else { result += ch; } } // else character not allowed } if (value != result) { // the caret will be move to the end of the field. input.value = result; } else { // Do nothing so that the caret stays in the same place // and does not move to the end of the text field. } return true; }