// ВАЖНО!
// После таких комментариев на русском языке необходимо оставлять пустую строку!
// лучше вообще не использовать комментарии на русском языке

var thEvent;
var thMarket;
var thOdds;
var betSlipType = 'S';
var showLive;
var pendingBetId = 0;
var showIFrame = false;
var isSoccer = 1;
var betmarkets = [];
var state = 1;
var currency = "EUR";
var ewVisible = false;
var canConfirm = true;
var betIsPending = false;

/* calculations of bet parameters */
function BetCalculate()
{
    var baseMarkets = 0;
    var betType = getBetType();
    var bonus = 0;
    var bonusGl = 0;
    var bonusSum = 0;
    var bonusSumGl = 0;    
    var columnsCount = 0;
    var columnsCountGl = 0;    
    var combLength = 0;
    var eventsCount = betmarkets.length;
    var potentialWin = 0;
    var potentialWinGl = 0;
    var potentialEwWin = 0;
    var spl = 0;
    var totalStake = 0;
    var totalStakeGl = 0;
    var unitStake = 0;
    
	
	if (eventsCount > 0)
    {
        var isError = false;
        for (var j = 0; j < betmarkets.length; j++)
        {
            if (!IsNullOrEmpty(document.getElementById('tbStake' + j)))
                isError = isError || !stakeIsValid('tbStake' + j);
        }
        
        if (!isError)
        {
            for (var i = 0; i < betmarkets.length; i++)
            {
                if ((document.getElementById('tbStake' + i)!= null))
                    document.getElementById('tbStake' + i).removeAttribute("disabled");
                if (betmarkets[i].isBanker == true)
                    baseMarkets++;
            }
            
            if (baseMarkets > 1)
            {
                for (var i = 1; i < baseMarkets; i++)
                {
                    stakes[i - 1] = 0;
                    document.getElementById('tbStake'+(i - 1)).setAttribute("disabled", "disabled");
                    document.getElementById('tbStake'+(i - 1)).value = '0';
                }
            }
            
            for (var i = 0; i < betmarkets.length; i++)
            {
                if ((!IsNullOrEmpty(document.getElementById('tbStake' + i)) && parseFloat(document.getElementById('tbStake' + i).value) > 0) 
                    || betType == 'FC' || betType == 'FCS')
                {
                    if (betType == 'FC' && i < 1)
                        continue;
                        
                    if ((betType != 'FC' && betType != 'FCS') || i == 0)
                        stakes[i] = parseFloat(document.getElementById('tbStake' + i).value);
                    unitStake = (betType == 'FC' || betType == 'FCS') ? parseFloat(document.getElementById('tbStake0').value)
                             : parseFloat(document.getElementById('tbStake' + i).value);                    
                    combLength = (getBetType() == 'M') ? betmarkets.length : (parseInt(i) + 1);                    
                    
                    if (betType == 'N' || betType == 'M' || betType == 'S' || betType == 'FC' || betType == 'FCS')
                    {
                        var res = GetMaxWinnings(betmarkets, combLength);
                        columnsCount = parseInt(res.columnsCount);
                        totalStake = parseFloat(unitStake * columnsCount);
                        potentialWin = parseFloat(res.maxWin * unitStake);
                        
                        bonus = parseFloat(GetBonus(combLength));
                        bonusSum = parseFloat(GetBonusSum(bonus, potentialWin - totalStake));
                        potentialWin += bonusSum;
                        
                        potentialWin = CheckWinnings(potentialWin, totalStake);
                    }
                    else
                    {
                       if (betType == 'SF' || betType == 'ST')
                        columnsCount = 1;
                       else if (betType == 'RF')
                        columnsCount = 2;
                       else if (betType == 'CF')
                        columnsCount = betmarkets[0].odds.length * (betmarkets[0].odds.length - 1);
                       else if (betType == 'CT')
                        columnsCount = betmarkets[0].odds.length * (betmarkets[0].odds.length - 1) * (betmarkets[0].odds.length - 2);
                       
                       totalStake = unitStake * columnsCount;
                       potentialWin = 0;
                       bonus = 1;
                       bonusSum = 0;
                    }
                    columnsCountGl += columnsCount;
                    totalStakeGl += totalStake;
                    potentialWinGl += potentialWin;
                    bonusGl += bonus;
                    bonusSumGl += bonusSum;
                }
            }
        }
        LockPlaceButton(totalStakeGl >= 0.01);
    }
    
    HideError();
    document.getElementById('divPotWin').innerHTML = fix(isNumber(potentialWinGl));
    document.getElementById('divSelCount').innerHTML = eventsCount;
    document.getElementById('divTotStake').innerHTML = fix(isNumber(totalStakeGl));
    document.getElementById('divLines').innerHTML = columnsCountGl;
}

function getBetType()
 {
     if (betSlipType == 'S')
     {
        if (document.getElementById('radSingle').checked)
            return 'N';
        if (document.getElementById('radMultiple').checked)
            return 'M';
        if (document.getElementById('radFullCover').checked)
            return 'FC';
        if (document.getElementById('radFullCoverSingle').checked)
            return 'FCS';
        if (document.getElementById('radForecast').checked && document.getElementById('lblRacing') != null)
        {
            var betType = document.getElementById('lblRacing').innerHTML;
            switch(betType)
            {
                case 'Straight Forecast': return 'SF';
                case 'Reversed Forecast': return 'RF';
                case 'Tricast': return 'ST';
                case 'Combination Forecast': return 'CF';                
                case 'Combination Tricast': return 'CT';
            } 
        }
     }
     else if (betSlipType == 'C')
        return 'S';
}

function getStakes()
{
    var stakes = new Array();
    var id;
    for (var i = 0; i < betmarkets.length; i++)
    {
        id = 'tbStake' + i;
        if (document.getElementById(id) != null)
            if (isNumber(document.getElementById(id).value))
                stakes[i] = document.getElementById(id).value;
            else 
                stakes[i] = 0;
    }
    return stakes;
}

function getEws()
{
    var ews = new Array();
    var id;
    for (var i = 0; i < betmarkets.length; i++)
    {
        id = 'chbEW' + i;
        if (document.getElementById(id) != null)
            ews[i] = document.getElementById(id).checked;
        else
            ews[i] = false;
        
        if (getBetType() != 'S')
            break;
    }
    return ews;
}

function GetMaxWinnings(bm, combLength)
{
    var selectionsCount = bm.length;
    
    /* odnomernyy massiv indeksov   */
    var test = new Array();

    /* inicializaciya   */
    for (var i = 0; i < combLength; i++)
        test[i] = i + 1;

    /* podgotavlivaem massiv indeksov sobytiy, kotoryy 
     * doljny obyazatel'no prisutstvovat' v kajdoy vyborke
     * uslovie odno - v kajdoy vyborke obyazatel'no prisutstvie "bazovyh" sobytiy
     */
    var bases = new Array();
    var k = 0;
    for (var i = 0; i < bm.length; i++)
    {
        if (bm[i].isBanker)
            bases[k++] = i + 1;
    }
            
    /* schitaem */
    var maxValue = 0;
    var columnsCount = 0;

    do
    {
        /* esli vse bazovye sobytiya prisutstvuyut v vyborke - to
         * schitaem, inache - propuskaem etu vyborku
         */
        if ((IsSubArray(test, bases)) || (bases.length == 0))
        {
            var tempCols = 1;
            var tempValue = 1;
            var ewValue = 1; /* each way */
            for (var i = 0; i < combLength; i++)
            {                
                /* nakoplenie koefficientov rynkov dlya dannoy kombinacii   */
                var idx = test[i] - 1;
                if (((getEws().length > (combLength - 1) && getEws()[combLength - 1]) 
                    || (getBetType() != 'S' && getEws().length > 0 && getEws()[0]))
                    && AnyAllowEW(bm, test))
                {
                    if (tempCols == 1) tempCols *= 2;
                    if(bm[idx].allowEachWay)
                    {
                        var priceSum = SumPrices(bm[idx].odds);
                        if (priceSum > 0)
                            ewValue *= (bm[idx].odds.length + parseFloat(bm[idx].ewCoeff) * parseFloat(SumPrices(bm[idx].odds) - bm[idx].odds.length));
                        else
                            ewValue *= 0;
                        //tempCols++;
                    }
                    else
                        ewValue *= SumPrices(bm[idx].odds);
                }
                else
                    ewValue = 0;
                tempValue *= parseFloat(SumPrices(bm[idx].odds));
                tempCols *= bm[idx].odds.length;
            }
            maxValue += parseFloat(tempValue) + ewValue;
            columnsCount += tempCols;
        }
    } while (nextcombination(test, selectionsCount, combLength - 1));
    
    return {"maxWin":maxValue, "columnsCount":columnsCount};
}

function IsSubArray(arr, subArr)
{
    var flag = false;
    for (var i = 0; i < subArr.length; i++)
    {
        flag = false;

        for (var j = 0; j < arr.length; j++)
        {
            if (arr[j] != subArr[i])
                flag = false;
            else
            {
                flag = true;
                break;
            }
        }
        if (!flag)
            break;
    }
    return flag;
}

function nextcombination(x, n, m)
{
    var result;
    var i = 0;

    if (n <= 0 | m < 0 | m > n)
    {
        result = false;
        return result;
    }
    for (i = 0; i <= m - 1; i++)
    {
        if (!(x[i] < x[i + 1]))
        {
            result = false;
            return result;
        }
    }
    if (x[0] < 1 | x[1] > n)
    {
        result = false;
        return result;
    }
    if (x[m] < 1 | x[m] > n)
    {
        result = false;
        return result;
    }

    result = true;
    i = m;
    while (i >= 0)
    {
        if (x[i] < n - (m - i))
            break;
        i = i - 1;
    }
    if (i >= 0)
    {
        x[i] = x[i] + 1;
        i = i + 1;
        while (i <= m)
        {
            x[i] = x[i - 1] + 1;
            i = i + 1;
        }
    }
    else
    {
        result = false;
    }
    return result;
}

function SumPrices(odds)
{
    var sum = 0;
    for (var i = 0; i < odds.length; i++)
    {
        sum += parseFloat(odds[i].price);
    }
    return sum;
}

function AnyAllowEW(bms, indexes)
{
    for (var i = 0; i < indexes.length; i++)
    {
        var ind = indexes[i] - 1;
        if (bms[ind].allowEachWay)
            return true;
    }
    return false;
}

function GetBonus(combLength)
{
    var bonus = 1;
    for (var i = 0; i < bb.length; i++)
    {
        var low = (bb[i].low == null) ? 0 : bb[i].low;
        var top = (bb[i].top == null) ? 255 : bb[i].top;
        if ((combLength >= low) && (combLength <= top))
        {
            bonus = bb[i].value;
            break;
        }
    }
    return bonus;
}

function GetBonusSum(bonus, winnings)
{
    var b = (parseFloat(bonus) - 1) * winnings;
    if (b > glMaxBonus)
        b = glMaxBonus;
    return b;
}

function CheckWinnings(win, stake)
{
    var maximalWin = 0;
    if (IsNight())
    {
        maximalWin = getMin(userNightMaxWin, glNightMaxWin);
    }
    else
    {
        maximalWin = stake * getMin(userWinEuro, glWinEuro);
        if (maximalWin > getMin(userMaxWin, glMaxWin))
            maximalWin = getMin(userMaxWin, glMaxWin);
    }
    if (win > maximalWin)
        win = maximalWin;
    return win;
}

function IsNight()
{
    var tsMorning = new Date();
    tsMorning.setHours(morningTime.getHours(), morningTime.getMinutes(), morningTime.getSeconds());
            
    var tsEvening = new Date();
    tsEvening.setHours(eveningTime.getHours(), eveningTime.getMinutes(), eveningTime.getSeconds());
            
    var tsBet = new Date();
    tsBet.setHours(betTime.getHours(), betTime.getMinutes(), betTime.getSeconds());
    var isNight = !((tsBet >= tsMorning) && (tsBet < tsEvening));
    
    return isNight;
}
/*******************************************************************/





/* validation */
function stakeIsValid(id)
{
    var isOk = ((document.getElementById(id).value * 1 == document.getElementById(id).value) && (parseFloat(document.getElementById(id).value) >= 0))
    return isOk;
}
/********************************************/




/* methods to display information */
function LockPlaceButton(isOk)
{
    if (isOk)
    {
        document.getElementById('bPlaceId').removeAttribute("disabled");
    }
    else
    {
        document.getElementById('bPlaceId').setAttribute("disabled", "disabled");
        ShowError("Invalid stake");
    }
}

function AddBettMarket(eventId, eventDesc, allowEW, ewCoeff, selId, selName, price, priceType, priceStr, allowFC, allowTC, isUF, anyOrder)
{
    if (state == 2)
        return;
    
    if (state == 3)
    {
        if (betIsPending)
            return;
            
        state = 1;
        ClearBetMarkets();        
        ChangeState();        
        StopTheBetsClock();
        ShowWaitPanel(false);                                 
    }
    
    document.getElementById("divCombinations").style.display = 'block';
    AddBetMarket(eventId, eventDesc, -1, allowEW, ewCoeff, selId, selName, price, priceType, priceStr, allowFC, allowTC, isUF, anyOrder);
    BindDivBetMarkets();
    LockStakesTextBoxes();
    ShowSpecialRBs();
    BetCalculate();
    expand();
}

function ClearBetMarkets()
{
    betmarkets = [];
    ews = [];
}

function AddBetMarket(eventId, eventDesc, liveId, allowEW, ewCoeff, selId, selName, price, priceType, priceStr, allowFC, allowTC, isUF, anyOrder)
{
     if (state == 1)
     {
         for (var i = 0; i < betmarkets.length; i++)
         {
               if (betmarkets[i].eventId == eventId)
               {    
                    for (var j = 0; j < betmarkets[i].odds.length; j++)
                    {
                        if (betmarkets[i].odds[j].selectionId == selId)
                            return;
                    }
                    betmarkets[i].anyOrder = (betmarkets[i].anyOrder  || anyOrder);
                    betmarkets[i].odds[betmarkets[i].odds.length] = new Odd(selId, selName, price, priceType, priceStr, isUF);
                    return;
               }
         }
         
         var newBM = new BetMarket(eventId, eventDesc, liveId, false, allowEW, ewCoeff, allowFC, allowTC, anyOrder);
         newBM.odds[0] = new Odd(selId, selName, price, priceType, priceStr, isUF);
         betmarkets[betmarkets.length] = newBM;
     }
}

function DeleteBetMarket(odd_id)
{
     var found = false;
     for (var i = 0; i < betmarkets.length; i++)
     {
           for (var j = 0; j < betmarkets[i].odds.length; j++)
           {
                if (betmarkets[i].odds[j].selectionId == odd_id)
                {
                    found = true;
                    betmarkets[i].odds.splice(j, 1);
                    if (betmarkets[i].odds.length < 1)
                        betmarkets.splice(i, 1);
                    break;
                }
           }
           if (found)
                break;
     }
     BindDivBetMarkets();
     LockStakesTextBoxes();
     ShowSpecialRBs();
     if (betmarkets.length > 0)
        BetCalculate();
     else
     {
        //betType = '';
        colapse();
     }
}

function DeleteAllBetMarkets()
{
     betmarkets = new Array();
     stakes = new Array();
     BindDivBetMarkets();
     LockStakesTextBoxes();
     ShowSpecialRBs();
     colapse();
     return;
}

function BindDivBetMarkets()
{
    var divBetSlip = document.getElementById("betmarkets");
    expand();
    if (divBetSlip != null)
    {
        var tableBetSlip = document.getElementById("tableBetSlip");
        ewVisible = false;
        if(tableBetSlip != null)
        {
            divBetSlip.removeChild(tableBetSlip);
        }
        tableBetSlip = document.createElement("table");
        tableBetSlip.className = "table";
        tableBetSlip.setAttribute("id","tableBetSlip");
        divBetSlip.appendChild(tableBetSlip);
        var tb = document.createElement("tbody");        
        /* header */
        var divDelAll = document.getElementById('divDelAll');
        divDelAll.innerHTML = "<img id='iDeleteAll' src='images/del-all.gif' onclick='javascript:DeleteAllBetMarkets();'>";
        /* body */
        for(var i = 0; i < betmarkets.length; i++)
        {                   
            var tr = document.createElement("tr");
            var tdEvent = document.createElement("td");
            tdEvent.className = "td_event";
            tdEvent.innerHTML = betmarkets[i].eventDesc;
            tr.appendChild(tdEvent);
            
            var tdOdds = document.createElement("td");
            tdOdds.className = "td_odds"
            tdOdds.colspan = 4;
            var tableOdds = document.createElement("table");
            var tbodyOdds = document.createElement("tbody");
            for (var j = 0; j < betmarkets[i].odds.length; j++)
            {
                var trOdd = document.createElement("tr");
                var tdMarket = document.createElement("td");
                tdMarket.className = "td_market";
                tdMarket.innerHTML = betmarkets[i].odds[j].selectionName;
                trOdd.appendChild(tdMarket);
                var tdOdd = document.createElement("td");
                tdOdd.className = "td_odd";
                tdOdd.innerHTML = betmarkets[i].odds[j].priceStr;
                // mark odd, if price has changed
                if (betmarkets[i].odds[j].priceHasChanged)
                    tdOdd.style.color = "red";
                trOdd.appendChild(tdOdd);
                if(betSlipType == 'C')
                {
                    var tdB = document.createElement("td");
                    tdB.className = "td_b";
                    if (j == 0)
                    {
                        tdB.rowspan = betmarkets[i].odds.length;
                        if (betmarkets[i].isBanker)
                            tdB.innerHTML = "<input id='cbBase1_" + i + "' onclick='javascript:UpdateBetMarketB(" + i + ");' type='checkbox' checked='checked'>";
                        else
                            tdB.innerHTML = "<input id='cbBase1_" + i + "' onclick='javascript:UpdateBetMarketB(" + i + ");' type='checkbox'>";
                    }             
                    trOdd.appendChild(tdB);      
                }
                var tdDel = document.createElement("td");
                tdDel.className = "td_del";
                tdDel.innerHTML = "<img id='iDelete1_" + i + "' src='images/del-one.gif' onclick='javascript:DeleteBetMarket(" + betmarkets[i].odds[j].selectionId + ");'>";
                trOdd.appendChild(tdDel);
                tbodyOdds.appendChild(trOdd);
            }
            tableOdds.appendChild(tbodyOdds);
            tdOdds.appendChild(tableOdds);
            tr.appendChild(tdOdds);
                
            tb.appendChild(tr); 
        }
        tableBetSlip.appendChild(tb);
    }
    setSimpleEwVisibility();
}


function BindBetStakes(betStakes, betId, bType, bmsCount)
{
    var divState2 = document.getElementById("state2");
    if (divState2 != null && betStakes != null)
    {
        var totWin = 0;
        var totStake = 0;
        var divBetStakes = document.getElementById("betStakes");
        if(divBetStakes != null)
        {
            divState2.removeChild(divBetStakes);
        }
        divBetStakes = document.createElement("div");
        divBetStakes.setAttribute("id","betStakes");
        divState2.appendChild(divBetStakes);
        var tb = document.createElement("tbody");        
        if (state == 3 && betId != null)
        {
            /* bet title */
            var titleBet = document.createElement("div");
            titleBet.className = "title-betstake";
            titleBet.innerHTML = getBetTypeName(bType, bmsCount) + ((state == 3) ? " Placed" : "");
            divBetStakes.appendChild(titleBet);
            /* clear float   */
            var clearDiv = document.createElement("div");
            clearDiv.className = "clear_float";
            divBetStakes.appendChild(clearDiv);
            var numBet = document.createElement("div");
            numBet.className = "title-betstake";
            numBet.innerHTML += "No: " + betId;
            divBetStakes.appendChild(numBet);
            /* clear float   */
            var clearDiv = document.createElement("div");
            clearDiv.className = "clear_float";
            divBetStakes.appendChild(clearDiv);
        }
        /* body */
        for(var i = 0; i < betStakes.length; i++)
        {
            totWin += betStakes[i].PotentialWin;
            totStake += betStakes[i].Stake;
            var titleBStake = document.createElement("div");
            titleBStake.className = "title-betstake";
            titleBStake.innerHTML = getGameName(betStakes[i].Game);
            divBetStakes.appendChild(titleBStake);
            if(betStakes[i].EachWay)
            {
                var titleEW = document.createElement("div");
                titleEW.className = "title-EW";
                titleEW.innerHTML = "(E/W)";
                divBetStakes.appendChild(titleEW);
            }
            /* clear float   */
            var clearDiv = document.createElement("div");
            clearDiv.className = "clear_float";
            divBetStakes.appendChild(clearDiv);
            /* stake title   */
            var bStake = document.createElement("div");
            bStake.className = "title_win";
            bStake.innerHTML = "Stake";
            divBetStakes.appendChild(bStake);
            /* Currency   */
            var bCurr = document.createElement("div");
            bCurr.className = "currency";
            bCurr.innerHTML = currency;
            divBetStakes.appendChild(bCurr);
            /* stake value   */
            var bStakeV = document.createElement("div");
            bStakeV.className = "text_win";
            bStakeV.innerHTML = fix(betStakes[i].Stake);
            divBetStakes.appendChild(bStakeV);
            /* clear float   */
            var clearDiv1 = document.createElement("div");
            clearDiv1.className = "clear_float";
            divBetStakes.appendChild(clearDiv1);
            
            /* Winings title   */
            var bWin = document.createElement("div");
            bWin.className = "title_win";
            bWin.innerHTML = "Potential Winings";
            divBetStakes.appendChild(bWin);
            /* Currency   */
            var bCurrW = document.createElement("div");
            bCurrW.className = "currency";
            bCurrW.innerHTML = currency;
            divBetStakes.appendChild(bCurrW);
            /* stake value    */
            var bWinV = document.createElement("div");
            bWinV.className = "text_win";
            bWinV.innerHTML = fix(betStakes[i].PotentialWin);
            divBetStakes.appendChild(bWinV);
            /* clear float    */
            var clearDiv2 = document.createElement("div");
            clearDiv2.className = "clear_float";
            divBetStakes.appendChild(clearDiv2);
            
            /* status    */
            if (state == 3)
            {
                /* Status title    */
                var bStatus = document.createElement("div");
                bStatus.className = "title_win";
                bStatus.innerHTML = "Status";
                divBetStakes.appendChild(bStatus);
                var binn= document.createElement("div");
                binn.className = "currency";
                divBetStakes.appendChild(binn);
                var bStatusV = document.createElement("div");
                bStatusV.className = "text_win";
                bStatusV.innerHTML = getStatusName(betStakes[i].Status);
                divBetStakes.appendChild(bStatusV);
                /* clear float   */
                var clearDiv3 = document.createElement("div");
                clearDiv3.className = "clear_float";
                divBetStakes.appendChild(clearDiv3);
                if(betStakes[i].Status == 'R') /* pending - wait wor traider   */
                {
                    binn.innerHTML = "<img src='images/loadernew.gif' />";
                }
                if(betStakes[i].Status == 'W') /* wait for client   */
                {
                    /* 2 buttons   */
                    var container = document.createElement("div");
                    container.className = "div_bottom";
                    container.style.display = 'block';
                    var containerb = document.createElement("div");
                    containerb.className = "accept";
                    containerb.innerHTML = "<input id='bAccept_"+ betStakes[i].BetStakeId 
                        + "' class='lbutton' type='button' onclick='acceptBet(" + betStakes[i].BetStakeId 
                        + ")' value='Accept' /><div class='button-separator'></div><input id='bCancel_" + betStakes[i].BetStakeId 
                        + "' class='rbutton' type='button' onclick='voidBet(" 
                        + betStakes[i].BetStakeId + ")' value='Cancel' /><div class='clear_float'></div>";
                    container.appendChild(containerb);
                    divBetStakes.appendChild(container);
                    /* clear float   */
                    var clearDiv4 = document.createElement("div");
                    clearDiv4.className = "clear_float";
                    divBetStakes.appendChild(clearDiv4);
                }
            }
        }
        document.getElementById('divPotWin').innerHTML = fix(totWin);
        document.getElementById('divTotStake').innerHTML = fix(totStake);
    }
}

/* rabota s tekstboksami v zavisimosti ot tipa stavki */
function LockStakesTextBoxes()
{
    stakes = getStakes();
    sDiv = document.getElementById("divCombinations");
    if (sDiv != null)
    {
        var divBody = document.getElementById("divBody");
        if (divBody != null)
            sDiv.removeChild(divBody);        
        divBody = document.createElement("div");
        divBody.setAttribute("id","divBody");
        
        if (getBetType() == 'S' && betmarkets.length > 1)
        {
            /* pokazat' tablicu */
            sDiv.style.display = '';
            
            /* zadat' kolichestvo stakes (ih doljno byt' stol'ko je skol'ko i (betmarkets)) */
            if (betmarkets.length <= stakes.length)
            {
                stakes_new = new Array();
                for ( var i = 0; i < betmarkets.length; i++ )
                    stakes_new[i] = stakes[i];
                stakes = stakes_new;
            }
            else
                for ( var i = stakes.length; i < betmarkets.length; i++ )
                    stakes[i] = 0;
            var i = 1;
            var b = getEwVisibility();
            while (i < stakes.length)
            {
                var divTitle = document.createElement("div");
                divTitle.className = "title_stake";
                divTitle.innerHTML = getGameName(i + 1);
                divBody.appendChild(divTitle);
                
                var divEwChb = document.createElement("div");
                divEwChb.className = "ew-chb";                
                divBody.appendChild(divEwChb);
                
                var divEwText = document.createElement("div");
                divEwText.className = "ew-text";                
                divBody.appendChild(divEwText);
                if(b)
                {
                    divEwChb.innerHTML = "<input id='chbEW" + ( i ) + 
                       "' type='checkbox' onclick='javascript:BetCalculate();'/>";
                    divEwText.innerHTML = "E/W";
                }
                var currTitle = document.createElement("div");
                currTitle.className = "currency";
                currTitle.innerHTML = currency;
                divBody.appendChild(currTitle);
                
                var textTitle = document.createElement("div");
                textTitle.className = "text_stake";
                textTitle.innerHTML = "<input id='tbStake" + ( i ) + "' value='" 
                  + stakes[i] + "' class='text' type='text' onkeyup='javascript:BetCalculate();'/>";                
                divBody.appendChild(textTitle);
                                
                i++;
            }        }
        else if (betmarkets.length < 1)
        {
            sDiv.style.display='none';
        }
        sDiv.appendChild(divBody);
    }
}

function ShowSpecialRBs()
{    
    var sDiv = document.getElementById("divSimpleType");
    if (sDiv != null)
    {
        /* accumulator */
        var radSingle = document.getElementById("radSingle");
        var radMultiple = document.getElementById("radMultiple");
        var radForecast = document.getElementById("radForecast");
        var divMultiple = document.getElementById("divMultiple");
        radMultiple.style.display = (betmarkets.length < 2) ? 'none' : 'block';            
        divMultiple.style.display = (betmarkets.length < 2) ? 'none' : 'block';
        
        
        /* forecasts and tricasts */
        var divRacingBets = document.getElementById("divRacing");
        divRacingBets.style.display = 'none';
        
        if (betmarkets.length == 1 
            && (betmarkets[0].allowForecast || betmarkets[0].allowTricast))
        {            
            var forecastOddsCnt = getOddsWithoutUnnamed(betmarkets[0].odds);
            if (forecastOddsCnt > 1)
            {
                divRacingBets.style.display = 'block';            
                var racingBets = new Array();
                if (forecastOddsCnt == 2 && betmarkets[0].allowForecast)
                {                
                    if (betmarkets[0].anyOrder)
                        racingBets[racingBets.length] = "Reversed Forecast";
                    else 
                        racingBets[racingBets.length] = "Straight Forecast";
                }
                
                if (forecastOddsCnt == 3)
                {
                    if (betmarkets[0].allowTricast)
                    {
                        if (betmarkets[0].anyOrder)
                            racingBets[racingBets.length] = "Combination Tricast";
                        else
                            racingBets[racingBets.length] = "Tricast";
                    }
                    if (betmarkets[0].allowForecast && betmarkets[0].anyOrder)
                        racingBets[racingBets.length] = "Combination Forecast";
                }
                
                if (forecastOddsCnt > 3 && betmarkets[0].anyOrder)
                {
                    if (betmarkets[0].allowForecast)
                        racingBets[racingBets.length] = "Combination Forecast";
                    if (betmarkets[0].allowTricast)
                        racingBets[racingBets.length] = "Combination Tricast";
                }
                ShowRacingDDL(racingBets);
                radForecast.checked = true;
                LockEWs(true);
            }
            else
            {
                radSingle.checked = true;
                LockEWs(false);
            }
        }
        else
        {                    
            radForecast.checked = false;
            LockEWs(false);
            
            /* full cover bets */
            var radFullCover = document.getElementById("radFullCover");
            var radFullCoverSingle = document.getElementById("radFullCoverSingle");
            var divRBs = document.getElementById("divFullCoverBets");
            
            var allowFullCover = true;
            for (var i = 0; i < betmarkets.length; i++)
            {
                allowFullCover = allowFullCover && (betmarkets[i].odds.length) == 1;
            }
            
            if (betmarkets.length > 2 && betmarkets.length < 9 && allowFullCover)
            {
                divRBs.style.display = 'block';
                
                /* radio buttons names depend on betmarkets count*/
                var divFullCover = document.getElementById("divFullCover");
                if (divFullCover != null)
                {
                    var spanFCName = document.getElementById("spanFCName");
                    if (spanFCName != null)
                        spanFCName.innerHTML = fullCoverBet(betmarkets.length);
                    divFullCover.style.visibility = "visible";
                }
                
                var divFullCoverSingle = document.getElementById("divFullCoverSingle");
                if (divFullCoverSingle != null)
                {
                    if (betmarkets.length < 7)
                    {
                        var spanFCSName = document.getElementById("spanFCSName");
                        if (spanFCSName != null)
                                spanFCSName.innerHTML = fullCoverBetWithSingle(betmarkets.length);
                        divFullCoverSingle.style.visibility = "visible";
                    }
                    else
                        divFullCoverSingle.style.visibility = "hidden";
                }
            }
            else
            {
                divRBs.style.display = "none";
                //if (radFullCover.checked || radFullCoverSingle.checked)
                //{
                    if (betmarkets.length < 2)
                        radSingle.checked = true;
                    else
                        radMultiple.checked = true;
                //}
            }
        }
    }
}

function getOddsWithoutUnnamed(odds)
{
    var cnt = 0;
    for (var i = 0; i < odds.length; i++)
    {
        if (!odds[i].isUnnamedFavorite)
            cnt++;
    }
    return cnt;
}

function ShowRacingDDL(racingBets) 
{
    var divRacing = document.getElementById("divRacingTypes");
    if (divRacing != null && racingBets != null && racingBets.length > 0) 
    {
        var ddlRacing = document.getElementById("ddlRacing");
        var divRacingOptions = document.getElementById("divRacingOptions");
        if (ddlRacing != null)
            divRacing.removeChild(ddlRacing);
        if (divRacingOptions != null)
        divRacing.removeChild(divRacingOptions);
        
        ddlRacing = document.createElement("div");
        ddlRacing.className = "ddlHolder";
        ddlRacing.setAttribute("id", "ddlRacing");
        Sys.UI.DomEvent.addHandler(ddlRacing, 'click', ExpandRacingDDL);
        
        var lblRacing = document.createElement("div");
        lblRacing.className = "ddlArrow";
        lblRacing.setAttribute("id", "lblRacing");
        lblRacing.innerHTML = racingBets[0];
        ddlRacing.appendChild(lblRacing);
        
        divRacing.appendChild(ddlRacing);
        
        divRacingOptions = document.createElement("div");
        divRacingOptions.style.display = "none";
        divRacingOptions.setAttribute("id", "divRacingOptions");
        for (var i = 0; i < racingBets.length; i++)
        {
            var divSelection = document.createElement("span");
            divSelection.className = "selection";
            divSelection.innerHTML = racingBets[i];
            Sys.UI.DomEvent.addHandler(divSelection, 'click', ChangeRacingLBL);
            divRacingOptions.appendChild(divSelection);
        }
        divRacing.appendChild(divRacingOptions);
    }
}

function ExpandRacingDDL()
{
    var ddlRacing = document.getElementById("ddlRacing");
    var divRacingOptions = document.getElementById("divRacingOptions");
    if (ddlRacing != null && divRacingOptions != null)
    {
        var pos = GetElementPosition(ddlRacing);
        SetElementY(divRacingOptions, pos.y + 20);
        SetElementWidth(divRacingOptions, pos.width - 2);
        SetElementDisplay(divRacingOptions, "block");
        divRacingOptions.className = "drop-down-selections";
        divRacingOptions.style.position = "absolute";
        divRacingOptions.style.visibility = "visible";
        CollapseRacingDDL = false;
    }
}
var CollapseRacingDDL = false;

document.body.onclick = function DocumentOnclick() 
{
    if (!CollapseRacingDDL)
        CollapseRacingDDL = true;
    else
    {
        var divRacingOptions = document.getElementById("divRacingOptions");
        SetElementDisplay(divRacingOptions, "none");
    }
}

function ChangeRacingLBL(event)
{
    var lblRacing = document.getElementById("lblRacing");
    lblRacing.innerHTML = event.target.innerHTML;
    var divRacingOptions = document.getElementById("divRacingOptions");
    SetElementDisplay(divRacingOptions, "none");
    BetCalculate();
}

function LockEWs(lock)
{
    /*var radForecast = document.getElementById('radForecast');
    if (!radForecast.checked && lock)
        return;
    if (radForecast.checked && !lock)
        return;
        
    var divEwChb = document.getElementById('divEwChb');
    var divEwText = document.getElementById('divEwText');
    var divSingleStake = document.getElementById('divSingleStake');
    var lblRacing = document.getElementById("lblRacing");
    if (divEwChb == null || divEwText == null || lblRacing == null)
        return;
        
    if ((lock && divEwChb.style.display == 'none') 
        || (!lock && (divEwChb.style.display == 'block' || divEwChb.style.display == '')))
        return;
    
    var w = (lock) ? (divSingleStake.clientWidth + divEwChb.clientWidth + divEwText.clientWidth-5) 
        : (divSingleStake.clientWidth - divEwChb.clientWidth - divEwText.clientWidth-5);
    if (w <= 0)
        return;
        
    divSingleStake.style.width = w + "px";
    divEwChb.style.display = (lock) ? 'none' : 'block';
    divEwText.style.display = (lock) ? 'none': 'block';
    if (lock)
        divEwChb.checked = false;*/
    var divEws = document.getElementById('divEws');
    var divEwChb = document.getElementById('divEwChb');
    var divEwText = document.getElementById('divEwText');
    divEwChb.style.display = (lock) ? 'none' : 'block';
    divEwText.style.display = (lock) ? 'none' : 'block';
}

/*function UnlockEWs()
{
    var radForecast = document.getElementById('radForecast');
    if (radForecast.checked)
        return;
    var divEwChb = document.getElementById('divEwChb');
    var divEwText = document.getElementById('divEwText');
    var divSingleStake = document.getElementById('divSingleStake');
    var lblRacing = document.getElementById("lblRacing");
    if (divEwChb == null || divEwText == null || divEwChb.style.display == 'block')
        return;
    
    var w =  divSingleStake.clientWidth - divEwChb.clientWidth - divEwText.clientWidth-5;
    if (w <= 0)
        return;
    divSingleStake.style.width = w + "px";
    divEwChb.style.display = 'block';
    divEwText.style.display = 'block';
}*/

function UpdateBetMarketB(bmId)
{
    betmarkets[bmId].isBanker = (betmarkets[bmId].isBanker == false) ? true : false;
    BetCalculate();     
}

function UpdateChbStakes(chbId)
{
    if (document.getElementById('chbStake' + chbId).checked == false)
        document.getElementById('tbStake' + chbId).value = "0";
}

function UpdateBetMarketVal(bmId, num)
{
    var n = "tbOddValue" + num + "_" + bmId;
    var tb = document.getElementById(n).value;
    if (isNumber(tb))
    {
        document.getElementById(n).className = "login";
        document.getElementById(bPlaceId).removeAttribute("disabled");
        if (num == 1)
            betmarkets[bmId].Value1 = tb;
        else
            betmarkets[bmId].Value2 = tb;
        BetCalculate();     
    }
    else
    {
        document.getElementById(n).className = "loginerr";
        document.getElementById(bPlaceId).setAttribute("disabled", "disabled");
    }
}

function SetFocus(elId)
{
    document.getElementById(elId).focus();
}

function LockDropDownList()
{
    if (betType == 'Live')
    {
        document.getElementById(ddlTypeId).selectedIndex = 0;
        document.getElementById(ddlTypeId).setAttribute("disabled", "disabled");
    }
    else
    {
        document.getElementById(ddlTypeId).removeAttribute("disabled");
    }
}
 
function ChangeState()
{
    switch(state)
    {
        case 1: ToState1(); break;
        case 2: ToState2(); break;
        case 3: ToState3(); break;
    }
}

function ToState1() 
{
    document.getElementById('state1').style.display = 'block';
    document.getElementById('state2').style.display = 'none';
    document.getElementById('state3').style.display = 'none';
    for (var i = 0; i < betmarkets.length; i++)
    {
        var tbStake = document.getElementById('tbStake' + i);
        if (tbStake != null)
            tbStake.removeAttribute("disabled");
    }
    
    document.getElementById('radSingle').removeAttribute("disabled");
    document.getElementById('radMultiple').removeAttribute("disabled");
    document.getElementById('radFullCover').removeAttribute("disabled");
    document.getElementById('radFullCoverSingle').removeAttribute("disabled");
    document.getElementById('radForecast').removeAttribute("disabled");
        
    document.getElementById('divPlace').style.display = 'block';
    document.getElementById('divCombinations').style.display = 'block';
    document.getElementById('divConfirm').style.display = 'none';
    state = 1;
    ShowSpecialRBs();
    BindDivBetMarkets();    
    BetCalculate();
 }
 
 function ToState2(betStakes) 
 {
    state = 2;
    
    sDiv = document.getElementById("divCombinations");
    if ((sDiv != null))
    {
        sDiv.style.display = 'none';
    }
    document.getElementById('divPlace').style.display = 'none';
    document.getElementById('divConfirm').style.display = 'block';
    document.getElementById('state2').style.display = 'block';
    BindBetStakes(betStakes);
    BindDivBetMarkets();
    
    document.getElementById('radSingle').setAttribute("disabled", "disabled");
    document.getElementById('radMultiple').setAttribute("disabled", "disabled");
    document.getElementById('radFullCover').setAttribute("disabled", "disabled");
    document.getElementById('radFullCoverSingle').setAttribute("disabled", "disabled");
    document.getElementById('radForecast').setAttribute("disabled", "disabled");
    if (document.getElementById('radForecast').checked)
        { if (document.getElementById('ddlRacing') != null) Sys.UI.DomEvent.removeHandler(document.getElementById('ddlRacing'), 'click', ExpandRacingDDL); }
    else
        { if (document.getElementById('ddlRacing') != null) document.getElementById('ddlRacing').style.display = 'none'; }
    
    for (var i = 0; i < betmarkets.length; i++)
    {
        var chB = document.getElementById('cbBase1_' + i);
        var iDel = document.getElementById('iDelete1_' + i);
        var tbStake = document.getElementById('tbStake' + i);
        if(chB != null)
            chB.setAttribute("disabled", "disabled");
        if(iDel != null)
            iDel.onclick = null;
        if(tbStake != null)
            tbStake.setAttribute("disabled", "disabled");
    }
    var divDelAll = document.getElementById('divDelAll');
        divDelAll.innerHTML = "<img id='iDeleteAll' src='images/del-all.gif''>";    
 }
 
 function ToState3(bets, betId, betTypeSgn, bmsCount)
 {
    state = 3;
    BindBetStakes(bets, betId, betTypeSgn, bmsCount);
    betIsPending = false;
    for (var i = 0; i<bets.length; i++)
    {
        if (bets[i].Status == 'R' || bets[i].Status == 'W') /* 0-C;1-S;2-N;3-A;4-R;5-W; */
        {
            betIsPending = true;
        }
    }
       
    if(betIsPending)
    {
        document.getElementById('waitTrader').style.display='block';
        ShowWaitPanel(true);
        InitializeMbaTimer();        
    }
    else
        StopTheBetsClock();
        
    document.getElementById('state3').style.display='block';
    document.getElementById('divPlace').style.display='none';
    document.getElementById('divConfirm').style.display='none';
 }
 
 function changeType(t) 
 {
    HideError();
    var div_single = document.getElementById('div_single');
    var div_mult = document.getElementById('div_mult');
    var div_singleStake = document.getElementById('divSingleStake');
    var div_betSlip = document.getElementById('state1');
    var divSimpleType = document.getElementById('divSimpleType');    
    if (div_single.className == 'active_tab')
    {
        if (betSlipType != t && state == 1)
        {
            div_single.className = 'inactive_tab';
            div_mult.className = 'active_tab';
            div_singleStake.innerHTML = 'Singles';
            div_betSlip.className = 'combined';
            betSlipType = 'C';
            LockStakesTextBoxes();
            BindDivBetMarkets();
            BetCalculate();
            divSimpleType.style.display ='none';
            document.getElementById('head_b').innerHTML = "B";
        }
    }
    else
    {
        if (betSlipType != t && state == 1)
        {
            div_single.className = 'active_tab';
            div_mult.className = 'inactive_tab';
            div_singleStake.innerHTML = 'Stake';
            div_betSlip.className = 'simple';
            betSlipType = 'S';
            LockStakesTextBoxes();
            ShowSpecialRBs();
            BindDivBetMarkets();
            BetCalculate();
            divSimpleType.style.display = '';
            document.getElementById('head_b').innerHTML = "";
        }
    }
 } 
 
 function setUnLoad()
 {
    document.body.setAttribute('onbeforeunload','saveBetSlip();');
    document.body.onbeforeunload = saveBetSlip;
 }
 
 function colapse()
 {
    var divBS = document.getElementById('betslipInner');
    var divColapse = document.getElementById('collapse');
    if(divBS.style.display =='none' && betmarkets.length>0)
    {
         divBS.style.display = '';
         divColapse.className='expanded';
    }
    else
    {
        divBS.style.display = 'none';
        divColapse.className='collapsed';
    }
 }
 
 function expand()
 {
    if (betmarkets.length > 0)
    {
        var divBS = document.getElementById('betslipInner');
        var divColapse = document.getElementById('collapse');
        divBS.style.display = '';
        divColapse.className='expanded';
    }
 }
 
 function getStatusName(i)
 {
    var name='';   
    switch (i)
    {
            case 'C': name ='Open'; break;
            case 'S': name ='Win'; break;
            case 'N': name ='Lost'; break;
            case 'A': name ='Void'; break;
            case 'R': name ='Pending'; break;
            case 'W': name ='Waiting for client'; break;
        }
    return name;
 }       
        
 function getGameName(game)
 {
    var name='';   
    switch (game)
    {
        case 0: name = "Singles"; break;
        case 1: name = "Singles"; break;
        case 2: name = "Doubles"; break;
        case 3: name = "Trebles"; break;
        default: name = game + "-fold"; break;
    }
    return name;
 }
 
 function fullCoverBet(bmsCount)
 {
    switch (bmsCount)
    {
        case 3: return "Trixie";
        case 4: return "Yankee";
        case 5: return "Canadian";
        case 6: return "Heinz";
        case 7: return "Super Heinz";
        case 8: return "Goliath";
        default: return "";
    }
 }
 
 function fullCoverBetWithSingle(bmsCount)
 {
    switch (bmsCount)
    {
        case 3: return "Patent";
        case 4: return "Lucky&nbsp;15";
        case 5: return "Lucky&nbsp;31";
        case 6: return "Lucky&nbsp;63";
        default: return "";
    }
 }
 
 function getBetTypeName(sgn, bmsCount)
 {
    switch (sgn)
    {
        case 'N': return 'Single';
        case 'M': return 'Accumulator';
        case 'S': return 'Combinations';
        case 'FC': return fullCoverBet(bmsCount);
        case 'FCS': return fullCoverBetWithSingle(bmsCount);
        case 'SF': return 'Straight Forecast';
        case 'RF': return 'Reversed Forecast';
        case 'CF': return 'Combination Forecast';
        case 'ST': return 'Straight Tricast';
        case 'CT': return 'Combination Tricast';
        default: return '';
    }
 }
 
 function setCurrency()
 {
    document.getElementById('divSimpleStakeCurr').innerHTML = currency;
    document.getElementById('divTotStakeCurr').innerHTML = currency;
    document.getElementById('divTotWinCurr').innerHTML = currency;
 }
 
 function getEwVisibility()
 {
    for (var i = 0; i < betmarkets.length; i++)
    {
        if (betmarkets[i].allowEachWay)
            return true;
    }
    return false;
 }
 
 function setSimpleEwVisibility()
 {
    var divEwChb = document.getElementById('divEwChb');
    var divEwText = document.getElementById('divEwText');
    if (getEwVisibility())
    {
        if (ews != null && ews.length > 0 && ews[0])
            divEwChb.innerHTML = "<input id='chbEW0' type='checkbox' checked='checked' onclick='javascript:BetCalculate();'/>";
        else
            divEwChb.innerHTML = "<input id='chbEW0' type='checkbox' onclick='javascript:BetCalculate();'/>";
        divEwText.innerHTML = "E/W";
    }
    else
    {
        divEwChb.innerHTML = "";
        divEwText.innerHTML = "";
    }
}



/* Web-methods */
/* betslip save methods */
function saveBetSlip() 
{
    ShowWaitPanel(true);
    /* Instantiate a WebRequest.   */
    var wRequest = new Sys.Net.WebRequest();
    /* Set the request URL.   */
    var params = {'betmarkets': betmarkets, 'stakes':getStakes()};
    wRequest.set_url(PublicSite.WebServices.BetSlipService.get_path()+ "/SaveData");
    /* Set the request verb.   */
    wRequest.set_httpVerb('POST');

    wRequest.get_headers()['Content-Type'] = 'application/json; charset=utf-8';

    var body = Sys.Serialization.JavaScriptSerializer.serialize(params);
    wRequest.set_body(body);

    var executor = new Sys.Net.XMLHttpSyncExecutor();
    wRequest.set_executor(executor);


    /* Execute the request.   */
    wRequest.invoke();

    if (executor.get_responseAvailable()) {
        ShowWaitPanel(false);
    }
 }
 
 /* bet place methods */
 function placeBet() 
 {
    var type = getBetType();
    ews = getEws();
    PublicSite.WebServices.BetSlipService.PlaceBet(betmarkets, getStakes(), ews, type, onS, onE);
    ShowWaitPanel(true);
 }
 
function onS(result, userContext, methodName) 
{
    ShowWaitPanel(false);
    HideError();
    switch(result.Status)
    {
        case 0: ShowError('This bet requires more selections'); break;
        case 1: {
                    betmarkets = result.BMarkets;
                    stakes = result.Stakes;
                    ToState2(result.Bsbets); break;                    
                }
        case 2: ShowError('Insufficient funds'); break;
        case 3: ShowError('Please login or sign-up for a new account'); break;
        case 4: {
                    ShowError('Price has changed, please confirm'); 
                    betmarkets = result.BMarkets;
                    stakes = result.Stakes;
                    ToState2(result.Bsbets); break;
                }
        case 5: ShowError('An internal error occurred'); break;
        case 6: ShowError('Event has completed: ' + result.ErrMsg);
        case 7: ShowError(result.ErrMsg); break;
        case 8: {
                    ShowError(result.ErrMsg);
                    ToState2(result.Bsbets); break;
                }
        case 9: ShowError(result.ErrMsg); break;
    }
 }
 
 function onE(error, userContext, methodName)
 {
    ShowWaitPanel(false);
    ShowError('An internal error occurred');
 }
 
 /* bet confirm methods */
 function ConfirmBet() 
 {
     if (canConfirm) {
         PublicSite.WebServices.BetSlipService.ConfirmBet(onConfirmBetS, onConfirmBetE);
         canConfirm = false;
     }
    ShowWaitPanel(true);
 }
 function onConfirmBetS(result, userContext, methodName) 
 {
     ShowWaitPanel(false);
     HideError();
     canConfirm = true;
     switch(result.Status)
    {
        case 0: ShowError('This bet requires more selections'); break;
        case 1: {
                    ToState3(result.Bsbets, result.BetId, result.BetType, result.BMarkets.length); break;
                }
        case 2: ShowError('Insufficient funds'); break;
        case 3: ShowError('Please login or sign-up for a new account'); break;
        case 4: {
                    ShowError('Price has changed, please confirm'); 
                    betmarkets = result.BMarkets;
                    stakes = result.Stakes;
                    ToState2(result.Bsbets); break;
                }
        case 5: ShowError('An internal error occurred'); break;
        case 6: ShowError('Event has completed: ' + result.ErrMsg); break;
        case 7: {
                    ShowError('Bet has changed, please accept or decline');
                    betmarkets = result.BMarkets;
                    BindDivBetMarkets(3);
                    ToState3(result.Bsbets, result.BetId, result.BetType, result.BMarkets.length); break;
                }
        case 8: {
                    ShowError(result.ErrMsg);
                    ToState2(result.Bsbets); break;
                }
        case 9: ShowError(result.ErrMsg); break;
    }  
 }
 
 function onConfirmBetE(error, userContext, methodName) 
 {
     ShowWaitPanel(false);
     canConfirm = true; 
     ShowError('An internal error occurred');
 }
 
 /* bet settlement methods */
 function acceptBet(betStakeId) 
 {  
    PublicSite.WebServices.BetSlipService.AcceptBet(betStakeId, onSettlementS, onSettlementE);
    ShowWaitPanel(true);
 }
 
 function voidBet(betStakeId) 
 {  
    PublicSite.WebServices.BetSlipService.VoidBet(betStakeId, onSettlementS, onSettlementE);
    ShowWaitPanel(true);
 }
 
 function onSettlementS(result, userContext, methodName) 
 {
    ShowWaitPanel(false);
    doBetsUpdate();
    HideError();
 }
 
 function onSettlementE(error, userContext, methodName) 
 {
    ShowWaitPanel(false);
    ShowError('An internal error occurred');
 }
 
function ShowWaitPanel(visible) 
{
    if(visible)
        document.getElementById('panel_wait').style.display = 'block';
    else
        document.getElementById('panel_wait').style.display = 'none';
}

function ShowError(text) 
{
    document.getElementById('bsErrorMsg').style.display = 'block';
    document.getElementById('errorText').innerHTML = text;
}

function HideError() 
{
    document.getElementById('bsErrorMsg').style.display = 'none';
}


 
/* Bet classes */
function BetMarket(eventId, eventDesc, liveMarketId, isBanker, allowEW, ewCoeff, allowFC, allowTC, anyOrder)
{
    this.eventId = eventId;
    this.eventDesc = eventDesc;
    this.liveMarketId = liveMarketId;
    this.isBanker = isBanker;
    this.allowEachWay = allowEW;
    this.ewCoeff = ewCoeff;
    this.allowForecast = allowFC;
    this.allowTricast = allowTC;
    //this.priceHasChanged = false;
    this.marketDetails = null;
    this.odds = new Array();
    this.anyOrder = anyOrder;
}

function MarketDetails(eventDesc, champDesc, eventDate, gameSystemId, ewPlaces, placeTNum, placeTDen)
{
    this.eventDesc = eventDesc;
    this.champDesc = champDesc;
    this.eventDate = eventDate;
    this.gameSystemId = gameSystemId;
    this.ewPlaces = ewPlaces;
    this.placeTNum = placeTNum;
    this.placeTDen = placeTDen;
}

function Odd(selectionId, selectionName, price, priceType, priceStr, isUnnamedFavorite)
{
    this.selectionId = selectionId;
    this.selectionName = selectionName;
    this.price = (priceType == 'S') ? 0 : price;
    this.priceType = priceType;
    this.priceStr = (priceType == 'S') ? 'SP' : priceStr;
    this.isUnnamedFavorite = isUnnamedFavorite;
    this.priceHasChanged = false;
}

function b(low, top, value)
{ 
    this.low = low;
    this.top = top;
    this.value = value;
}



// Since this script is not loaded by System.Web.Handlers.ScriptResourceHandler
// invoke Sys.Application.notifyScriptLoaded to notify ScriptManager 
// that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();



/* live event timer   */
var secs;
var timerID = null;
var timerRunning = true;
var delay = 50;

function InitializeTimer()
{
    /* Set the length of the timer, in seconds   */
    secs = delay;
    StopTheClock();
    StartTheTimer();
}

function StopTheClock()
{
    if(timerRunning)
        clearTimeout(timerID);
    timerRunning = false;
}

function StartTheTimer()
{
    if (secs==0)
    {
        StopTheClock();
        secs = delay;
        doUpdate();
        StartTheTimer();
    }
    else
    {
        self.status = secs;
        secs = secs - 1;
        timerRunning = true;
        timerID = self.setTimeout("StartTheTimer()", 1000);
    }
}


/* mba timer   */
var mbaSecs;
var mbaTimerID = null;
var mbaTimerRunning = false;
var mbaDelay = 20;

function doBetsUpdate()
{  
    PublicSite.WebServices.BetSlipService.GetData(onConfirmBetS, OnFailedMba);
}

function InitializeMbaTimer()
{
    /* Set the length of the timer, in seconds   */
    mbaSecs = mbaDelay;
    StopTheBetsClock();
    StartTheBetsTimer();
}

function StopTheBetsClock()
{
    if(mbaTimerRunning)
        clearTimeout(mbaTimerID);
    mbaTimerRunning = false;
}

function StartTheBetsTimer()
{
    if (mbaSecs==0)
    {
        StopTheBetsClock();
        mbaSecs = mbaDelay;
        doBetsUpdate();      
        StartTheBetsTimer();  
    }
    else
    {
        self.status = mbaSecs;
        mbaSecs = mbaSecs - 1;
        mbaTimerRunning = true;
        mbaTimerID = self.setTimeout("StartTheBetsTimer()", 1000);
    }   
}

function OnFailedMba(error, userContext, methodName)
{
    ShowWaitPanel(false);
    ShowError('Error :(');
}


