//embed required javascript files


var navigationDoms = []; // holds the options for each of the navigation Objects (left navs) indexed on dom object id
var eventCardDoms = []; // holds the options for each of the navigation Objects (left navs) indexed on dom object id
var notificationsDoms = []; // holds the options for each of the navigation Objects (left navs) indexed on dom object id

(function($){       
     /******************
     GBE eventCard
     ******************/
     $.fn.eventCard = function(options) {  
     var defaults = {
            selectionDefaultRowClass:null,
            selectionDisabledRow:null,
            selectionHoverRow:null,
            backBtnClass:null,
            layBtnClass:null,
            multipleBtnClass:null,
            markets:null,
            orders:null, 
            enableMultiples:true,
            priceClicked:null,
            numberBackPrices:2,
            numberLayPrices:2,
            interfaceType:InterfaceTypes.Exchange,
            resources:null,
            ccSymbol:"",
            oddsLadder:null
      };  
      var options = $.extend(defaults, options);  

      return this.each(function() { 
        options.priceClicked = com.globalbettingexchange.base.getFunctionName(options.priceClicked);
        options.multipleClicked = com.globalbettingexchange.base.getFunctionName(options.multipleClicked);
        com.globalbettingexchange.ui.drawTemplateEventCard(this, options.markets, options.orders, options, options.resources);
        //com.globalbettingexchange.ui.drawEventCard(this, options.markets, options);
      }); 
      return this; 
     };


    /******************
    GBE MultipleQuotationPanel
    ******************/
    $.fn.multipleQuotationPanel = function(options) {  
    var defaults = {           
        enableMultiples:true,
        priceClicked:null
    };  
    var options = $.extend(defaults, options);
    options.priceClicked = com.globalbettingexchange.base.getFunctionName(options.priceClicked);

    return this.each(function() { 
        com.globalbettingexchange.ui.multipleQuotationPanel(this, options);
    }); 
    return this; 
};     

    }
)(jQuery);

var fragmentName = null;
var currentEventClassifiers;
var currentMarkets;
  
if (com === null || typeof(com) != "object") { var com = {};}
if (com.globalbettingexchange === null || typeof(com.globalbettingexchange) != "object") { com.globalbettingexchange = {};}
if (com.globalbettingexchange.ui === null || typeof(com.globalbettingexchange.ui) != "object") { com.globalbettingexchange.ui = {};}



// all the functions in the com.gbeFragment namespace will go in this block
com.globalbettingexchange.ui = {
    Fragment: function (params) {
        var height = $("#" + params.fragmentID).height();
        var interfaceType;
        switch (params.interfaceType) {
            case 1: interfaceType = "Sportsbook"; break;
            case 2: interfaceType = "Sportsbook"; break;
            case 3: interfaceType = "Pool"; break;
            default: interfaceType = "Sportsbook";
        }
        if (params.enabledPoolBetting)
            interfaceType = "Pool";

        $("#" + params.fragmentID).html(String.format('<iframe id="GBEFrame" src="GEC_{0}.aspx" scrolling="no" frameborder="no" width="100%" height="100%"> Browser does not support frames </iframe>', interfaceType, height));

    },
    LeftNav: function (params) {
        console.time("GBE LeftNav");
        this.settings = params.settings;
        var marketsSummary;
        var indexedEvents = [];
        this.multipleMarketCount; // = marketsSummary.multipleMarketCount;
        this.allMarketCount; // = marketsSummary.allMarketCount;
        this.todaysMarketCount; // = marketsSummary.todaysMarketCount;
        this.inrunningMarketCount; // = marketsSummary.inrunningMarketCount;
        this.todaysInrunningMarketCount; // = marketsSummary.todaysInrunningMarketCount;

        this.inrunningMarkets;
        this.startingSoonMarkets;

        params.leftNav_All = params.domObj;
        params.leftNav_InPlay = params.domObj;
        params.leftNav_Starting = params.domObj;

        this.updateData = function (topLevelEvents) {
            marketsSummary = com.globalbettingexchange.ui.indexMarkets(topLevelEvents);
            this.multipleMarketCount = marketsSummary.multipleMarketCount;
            this.allMarketCount = marketsSummary.allMarketCount;
            this.todaysMarketCount = marketsSummary.todaysMarketCount;
            this.inrunningMarketCount = marketsSummary.inrunningMarketCount;
            this.todaysInrunningMarketCount = marketsSummary.todaysInrunningMarketCount;
        }

        this.jumpToMarket = function (marketId) {
            var thisMarket = marketsSummary.markets[marketId];
            if (thisMarket == null)
                return false;
            com.globalbettingexchange.ui.drillDownEvents(thisMarket.eventClassifier, params);
            $("selected", $(params.domObj)).removeClass("selected");
            $("#leftNavMarket_" + marketId + " a").addClass("selected");
        }
        this.jumpToEvent = function (eventId) {
            var thisEvent = marketsSummary.events[eventId];
            if (thisEvent == null)
                return false;
            com.globalbettingexchange.ui.drillDownEvents(thisEvent, params);
            $("selected", $(params.domObj)).removeClass("selected");
            //$("#leftNavMarket_" + marketId + " a").addClass("selected");
        }
        this.isEnabledForMultipleBets = function (marketId) {
            if (marketsSummary.markets[marketId] != null)
                return marketsSummary.markets[marketId].isEnabledForMultipleBets;
            else
                return false;
        }
        this.drawAllNav = function () {
            $(params.leftNav_Starting).removeClass("multiplesNav");
            $(params.leftNav_Starting).removeClass("allMarketNav");
            $(params.leftNav_Starting).removeClass("startingSoonNav");
            $(params.leftNav_Starting).removeClass("inrunningNav");

            $(params.leftNav_Starting).addClass("allMarketNav");
            params.mode = 1; //singles
            com.globalbettingexchange.ui.drawNavigation(params.events, params.markets, params);
        }
        this.drawMultiplesNav = function () {
            $(params.leftNav_Starting).removeClass("multiplesNav");
            $(params.leftNav_Starting).removeClass("allMarketNav");
            $(params.leftNav_Starting).removeClass("startingSoonNav");
            $(params.leftNav_Starting).removeClass("inrunningNav");

            $(params.leftNav_Starting).addClass("multiplesNav");
            params.mode = 2//multiples;
            com.globalbettingexchange.ui.drawNavigation(params.events, params.markets, params);
        }
        this.drawInrunningNav = function () {
            $(params.leftNav_Starting).removeClass("multiplesNav");
            $(params.leftNav_Starting).removeClass("allMarketNav");
            $(params.leftNav_Starting).removeClass("startingSoonNav");

            $(params.leftNav_Starting).addClass("inrunningNav");
            $(params.leftNav_Starting).html('<div class="title">Live Markets</div>');
            this.getInrunningMarkets(params.events, params);

        }
        this.getInrunningMarkets = function (eventArray, params) {
            for (var i = 0; i < eventArray.length; i++) {
                for (var j = 0; j < eventArray[i].markets.length; j++) {
                    if (eventArray[i].markets[j].currentlyInRunning) {
                        com.globalbettingexchange.ui.drawInrunningMarket(eventArray[i].markets[j], params);
                    }
                }
                this.getInrunningMarkets(eventArray[i].children, params);
            }
        }
        this.drawStartingSoonNav = function () {
            $(params.leftNav_Starting).removeClass("multiplesNav");
            $(params.leftNav_Starting).removeClass("allMarketNav");
            $(params.leftNav_Starting).removeClass("inrunningNav");

            $(params.leftNav_Starting).addClass("startingSoonNav");
            $(params.leftNav_Starting).html('<div class="title">Starting Soon</div>');

            var startingSoonMarkets = [];
            var i = 0;
            for (indexId in marketsSummary.markets) {
                startingSoonMarkets[i++] = marketsSummary.markets[indexId];
            }

            startingSoonMarkets.sort(com.globalbettingexchange.gec.SortOnStartTime);

            //var amountToShow = 20;

            i = 0;

            var startTime = new Date();

            var hrs = startTime.getHours();
            hrs -= 12;
            startTime.setHours(hrs);

            for (var j = 0; j < startingSoonMarkets.length; j++) {
                if ((startingSoonMarkets[j].startTime > startTime) && !startingSoonMarkets[j].currentlyInRunning) {
                    //i++;
                    com.globalbettingexchange.ui.drawStartingMarket(startingSoonMarkets[j], params);
                }
                //if (i > amountToShow) break;
            }
        }
        this.updateData(params.events);
        this.drawAllNav();
        console.timeEnd("GBE LeftNav");
        return this;
    },
    drawStartingMarket: function (market, params) {
        var marketsPanelId = String.format('#marketsPanel_{0}_{1}', market.startTime.getTime(), market.eventClassifier.eventClassifierId);

        if ($(marketsPanelId)[0] == null)// create an event Row
        {
            var eventRow = com.globalbettingexchange.ui.createStartingRow(market.eventClassifier, market, params);
            var a, b, lastEventBefore;
            var currentEventsArray = $("div", $(params.leftNav_Starting));
            $(params.leftNav_Starting).append(eventRow);

            $(eventRow).after(String.format('<div style="display:none;" class="marketsPanel" id="marketsPanel_{0}_{1}"></div>', market.startTime.getTime(), market.eventClassifier.eventClassifierId));
        }


        var row = document.createElement("div");
        $(row).attr("id", "leftNavMarket_" + market.marketId);
        $(row).attr("displayOrder", market.displayOrder);
        $(row).addClass(params.marketClass);

        var node = document.createElement("a");
        $(node).attr("href", "javascript:void(0);");

        $(node).bind("click", function () {
            GBEEmbeddedPaneInterface.eventMenuMarketClicked(clientObject.mode, 2, 2, 3, 4);
            $(".selected").removeClass("selected");
            if (params.marketClickedFunction != null)
                params.marketClickedFunction.call(null, [market]);

            $(this).addClass("selected");

            return false;
        });

        if (market.isEnabledForMultipleBets) {
            $(row).addClass(params.multipleClass);
        }

        var text = document.createElement("span");
        $(text).text(market.marketName);

        var icon = document.createElement("div");
        $(icon).text("  ");

        node.appendChild(icon);

        node.appendChild(text);
        row.appendChild(node);

        var currentMarkets = $(marketsPanelId).children();


        var id = null;
        for (var i = 0; i < currentMarkets.length; i++) {
            if ($($(currentMarkets)[i]).attr("displayOrder") > market.displayOrder) {
                id = $($(currentMarkets)[i]);
                break;
            }
        }

        if (id == null)
            $(marketsPanelId).append(row);
        else
            $(id).before(row);

    },
    drawInrunningMarket: function (market, params) {

        var topLevelEvent = com.globalbettingexchange.base.getTopLevelEvent(market.eventClassifier);
        var eventsPanelId = String.format('#eventsPanel_{0}', topLevelEvent.eventClassifierId);
        var marketsPanelId = String.format('#marketsPanel_{0}', market.eventClassifier.eventClassifierId);

        if ($(marketsPanelId)[0] == null)// create an event Row
        {
            if ($(eventsPanelId)[0] == null) {
                var topEventNode = this.createTopEventRow(topLevelEvent, params);
                $(params.leftNav_Starting).append(topEventNode);
                $(topEventNode).after(String.format('<div style="display:none;" class="eventsPanel" id="eventsPanel_{0}"></div>', topLevelEvent.eventClassifierId));
            }


            var eventRow = com.globalbettingexchange.ui.createInrunningRow(market.eventClassifier, market, params);
            $(eventsPanelId).append(eventRow);
            $(eventRow).after(String.format('<div style="display:none;" class="marketsPanel" id="marketsPanel_{0}"></div>', market.eventClassifier.eventClassifierId));

            if ($("#eventsPanel_" + topLevelEvent.eventClassifierId).children().length == 2) {
                var expander = document.createElement("span");
                // $(expander).text("+");
                $(expander).addClass("expander");
                $(expander).addClass("closed");


                $("a", $("#leftNavEvent_" + topLevelEvent.eventClassifierId)).prepend(expander);
            }
        }
        else {
            if ($(marketsPanelId).children().length == 1) {
                var expander = document.createElement("span");
                // $(expander).text("+");
                $(expander).addClass("expander");
                $(expander).addClass("closed");

                $("a", $("#leftNavEvent_" + market.eventClassifier.eventClassifierId)).prepend(expander);
            }
        }

        var row = document.createElement("div");
        $(row).attr("id", "leftNavMarket_" + market.marketId);
        $(row).addClass(params.marketClass);

        var node = document.createElement("a");
        $(node).attr("href", "javascript:void(0);");

        $(node).bind("click", function () {
            GBEEmbeddedPaneInterface.eventMenuMarketClicked(clientObject.mode, 2, 2, 3, 4);
            $(".selected").removeClass("selected");
            if (params.marketClickedFunction != null)
                params.marketClickedFunction.call(null, [market]);

            $(this).addClass("selected");

            return false;
        });

        if (market.isEnabledForMultipleBets) {
            $(row).addClass(params.multipleClass);
        }

        var text = document.createElement("span");
        $(text).text(market.marketName);

        var icon = document.createElement("div");
        $(icon).text("  ");

        node.appendChild(icon);

        node.appendChild(text);
        row.appendChild(node);

        $(marketsPanelId).append(row);
    },
    indexMarkets: function (events) {
        var marketsOnTheseEvents = [];
        var eventsOnTheseEvents = [];
        var multipleMarketCount = 0;
        var allMarketCount = 0;
        var todaysMarketCount = 0;
        var inrunningMarketCount = 0;
        var todaysInrunningMarketCount = 0;
        var today = new Date();
        var lastnight = new Date(today.getFullYear(), today.getMonth(), today.getDate());
        var tonight = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1);


        try {
            if (events != null)
                for (var eventCount = 0; eventCount < events.length; eventCount++) {
                    var marketsSummary = this.indexMarkets(events[eventCount].children);
                    multipleMarketCount += marketsSummary.multipleMarketCount;
                    allMarketCount += marketsSummary.allMarketCount;
                    todaysMarketCount += marketsSummary.todaysMarketCount;
                    inrunningMarketCount += marketsSummary.inrunningMarketCount;
                    todaysInrunningMarketCount += marketsSummary.todaysInrunningMarketCount;

                    var thisEventsMarkets = marketsSummary.markets;
                    var thisEventsChildren = marketsSummary.events;
                    //index markets and events
                    for (var attr in thisEventsMarkets) { marketsOnTheseEvents[attr] = thisEventsMarkets[attr]; }
                    for (var evId in thisEventsChildren) { eventsOnTheseEvents[evId] = thisEventsChildren[evId]; }

                    if (events[eventCount].markets != null)
                        for (var marketCount = 0; marketCount < events[eventCount].markets.length; marketCount++) {
                            allMarketCount++;
                            var thisMarket = events[eventCount].markets[marketCount];
                            if (thisMarket.isEnabledForMultipleBets && !thisMarket.currentlyInRunning) multipleMarketCount++;

                            if ((thisMarket.startTime < tonight) && (thisMarket.startTime > lastnight)) {
                                todaysMarketCount++;

                                if (thisMarket.willBeInRunning) todaysInrunningMarketCount++;
                            }
                            if (thisMarket.currentlyInRunning) inrunningMarketCount++;

                            marketsOnTheseEvents[events[eventCount].markets[marketCount].marketId] = events[eventCount].markets[marketCount];


                        }

                    eventsOnTheseEvents[events[eventCount].eventClassifierId] = events[eventCount];
                }
        }
        catch (e) {
            alert(e.message);
        }

        return {
            markets: marketsOnTheseEvents,
            events: eventsOnTheseEvents,
            multipleMarketCount: multipleMarketCount,
            allMarketCount: allMarketCount,
            todaysMarketCount: todaysMarketCount,
            inrunningMarketCount: inrunningMarketCount,
            todaysInrunningMarketCount: todaysInrunningMarketCount
        };
    },
    AccountsNav: function (params) {
        $(params.domObj).html('');
        if (params.showAccountStatement)
            $(params.domObj).append('<div id="leftNavAccountStatement" class="market"><a href="javascript:void(0);" onclick="showAccountStatement();"><div/><span>' + params.resources.AccountStatement + '</span></a></div>');

        if (params.interfaceType == InterfaceTypes.Exchange) {
            $(params.domObj).append('<div id="leftNavMatchedSingles" class="market"><a class="selected" href="javascript:void(0);" onclick="showAccountCurrentBets(\'Matched\');"><div/><span>' + params.resources.CurrentBets + ' (Matched)</span></a></div>');
            $(params.domObj).append('<div id="leftNavUnmatchedSingles" class="market"><a href="javascript:void(0);" onclick="showAccountCurrentBets(\'Unmatched\');"><div/><span>' + params.resources.CurrentBets + ' (Unmatched)</span></a></div>');
            $(params.domObj).append('<div id="leftNavSearchOrders" class="market"><a href="javascript:void(0);" onclick="showOrderSearchDialog();"><div/><span>Betting History</span></a></div>');
        }
        else {
            $(params.domObj).append('<div id="leftNavMatchedSingles" class="market"><a class="selected"  href="javascript:void(0);" onclick="showAccountSingleBets();"><div/><span>' + params.resources.SingleBets + '</span></a></div>');
        }
        $(params.domObj).append('<div id="leftNavMatchedMultiples" class="market"><a href="javascript:void(0);" onclick="showAccountMultipleBets();"><div/><span>' + params.resources.MultipleBets + '</span></a></div>');


        if (params.freeBetEnabled) {
            $(params.domObj).append('<div id="leftNavFreeBet" class="market"><a href="javascript:void(0);" onclick="showFreeBetEntitlements();"><div/><span>' + params.resources.FreeBet + '</span></a></div>');

        }

        return this;
    },
    EventCard: function (domObj, params) {
        this.oddsLadder = params.oddsLadder;
        this.ccSymbol = params.state.ccSymbol;
        this.interfaceType = params.state.interfaceType;

        $(domObj).eventCard(params);

        this.getDisplayOrder = function (marketId, selectionId) {
            var displayOrder = -1;
            if (selectionId == null) {
                //get market displayOrder
                displayOrder = -1; //$('#marketBody_' + marketId + ' tr').index($('#row_' + selectionId)) + 1;
            }
            else {
                //get selection displayOrder
                displayOrder = $('#marketBody_' + marketId + ' tr').index($('#row_' + selectionId)) + 1;
            }
            return displayOrder;
        }
        this.refresh = function (params) {


            switch (this.interfaceType) {
                case InterfaceTypes.Exchange:
                    {
                        var selectionTotals = com.globalbettingexchange.base.calcPnLs(params.markets, params.orders);

                        for (marketCount in params.markets) {
                            var activeSelectionCount = 0;
                            var m = params.markets[marketCount];

                            if ((m.marketStatusId != 2) && !$("#market_" + m.marketId).hasClass("blocked")) {
                                $("#market_" + m.marketId).block({
                                    message: '<h1>Suspended</h1>', cursor: '',
                                    css: { border: '3px solid #d51515' }, overlayCSS: {
                                        backgroundColor: 'transparent',
                                        cursor: 'default',
                                        opacity: 1
                                    }
                                });

                                $("#market_" + m.marketId).addClass("blocked");

                            }
                            else if ((m.marketStatusId == 2) && $("#market_" + m.marketId).hasClass("blocked")) {
                                $("#market_" + m.marketId).unblock();
                                $("#market_" + m.marketId).removeClass("blocked");
                            }
                            var marketOverrounds = com.globalbettingexchange.base.getOverRound(m, true);
                            $("#ForOverround_" + m.marketId).text(marketOverrounds.forOverround);
                            $("#AgainstOverround_" + m.marketId).text(marketOverrounds.againstOverround);
                            $("#MatchedAmount_" + m.marketId).html(com.globalbettingexchange.base.formatDecimal(m.totalMatchedAmount, 2, this.ccSymbol, true));

                            if (m.willBeInRunning && (params.mode == ModeTypes.Singles)) {

                                if (m.isCurrentlyInRunning) {
                                    $("#market_runningStatus_" + m.marketId).text('In Play');
                                    $("#market_runningStatus_" + m.marketId).addClass('currentInrunningIcon');
                                    $("#market_runningStatus_" + m.marketId).removeClass('futureInrunningIcon');
                                }
                                else {
                                    $("#market_runningStatus_" + m.marketId).text('Going In Play');
                                    $("#market_runningStatus_" + m.marketId).addClass('futureInrunningIcon');
                                    $("#market_runningStatus_" + m.marketId).removeClass('currentInrunningIcon');
                                }
                            }

                            for (selectionCount in m.selections) {
                                var s = m.selections[selectionCount];
                                var enableForMultiples = params.multipleCart.canAddToMultiple(s, false);
                                var multipleButton = $("#row_" + s.selectionId + " .multipleIcon");
                                if (s.selectionStatusId == 2)
                                    activeSelectionCount++;

                                if (s.selectionStatusId != 2) {
                                    $("#pl1_" + s.selectionId).html('Withdrawn');
                                } else {
                                    if (clientObject.currentlyLoggedIn && (params.mode == ModeTypes.Singles)) {

                                        var pnl1String = (selectionTotals[s.selectionId].PnL1 == -999999) ? "" : String.format("<span class='{0}'>{1}</span>", (selectionTotals[s.selectionId].PnL1 < 0) ? 'negative' : '', com.globalbettingexchange.base.formatDecimal(selectionTotals[s.selectionId].PnL1, 2, this.ccSymbol));
                                        var pnl2String = (selectionTotals[s.selectionId].PnL2 == -999999) ? "" : String.format("<span class='{0}'>{1}</span>", (selectionTotals[s.selectionId].PnL2 < 0) ? 'negative' : '', com.globalbettingexchange.base.formatDecimal(selectionTotals[s.selectionId].PnL2, 2, this.ccSymbol));
                                        var pnl3String = (selectionTotals[s.selectionId].PnL3 == -999999) ? "" : String.format("<span class='{0}'>{1}</span>", (selectionTotals[s.selectionId].PnL3 < 0) ? 'negative' : '', com.globalbettingexchange.base.formatDecimal(selectionTotals[s.selectionId].PnL3, 2, this.ccSymbol));

                                        $("#pl1_" + s.selectionId).html(pnl1String);
                                        $("#pl2_" + s.selectionId).html(pnl2String);
                                        $("#pl3_" + s.selectionId).html(pnl3String);
                                    }
                                }
                                var multipleButton = $("#multiple_odds_" + s.selectionId);
                                var multipleText = "";
                                if (s.forSportsbookPrices != null) {
                                    multipleText = (s.forSportsbookPrices.price > 0) ? resources.EventCard.AddToMultiple : "";
                                }
                                if (s.forExchangePrices[0] != null) {
                                    multipleText = (s.forExchangePrices[0].price > 0) ? resources.EventCard.AddToMultiple : "";
                                }
                                multipleButton.text(multipleText);

                                for (var forPriceCount = 0; forPriceCount < 3; forPriceCount++) {
                                    var priceCellName = "#back_odds_" + forPriceCount + "_" + s.selectionId;
                                    var stakeCellName = "#back_stake_" + forPriceCount + "_" + s.selectionId;

                                    var displayPrice = '';
                                    var price = { price: 0, representation: '' };
                                    var stake = '';

                                    if (s.forExchangePrices[forPriceCount] != null) {
                                        price = this.oddsLadder.band(s.forExchangePrices[forPriceCount].price, -1);
                                        stake = com.globalbettingexchange.base.formatDecimal(s.forExchangePrices[forPriceCount].amountAvailable, 0, this.ccSymbol, true);

                                        if (($(priceCellName).attr("decimalPrice") * 1) < price.price) {
                                            $(priceCellName).addClass("priceIncrease");
                                        }
                                        else
                                            if (($(priceCellName).attr("decimalPrice") * 1) > price.price) {
                                                $(priceCellName).addClass("priceDecrease");
                                            }
                                    }
                                    $(priceCellName).attr("decimalPrice", price.price);
                                    $(priceCellName).text(price.representation);
                                    $(stakeCellName).html(stake);
                                }
                                for (var againstPriceCount = 0; againstPriceCount < 3; againstPriceCount++) {
                                    var priceCellName = "#lay_odds_" + againstPriceCount + "_" + s.selectionId;
                                    var stakeCellName = "#lay_stake_" + againstPriceCount + "_" + s.selectionId;

                                    var displayPrice = '';
                                    var price = { price: 0, representation: '' };
                                    var stake = '';

                                    if (s.againstExchangePrices[againstPriceCount] != null) {
                                        price = this.oddsLadder.band(s.againstExchangePrices[againstPriceCount].price, -1);
                                        stake = com.globalbettingexchange.base.formatDecimal(s.againstExchangePrices[againstPriceCount].amountAvailable, 0, this.ccSymbol, true);

                                        if (($(priceCellName).attr("decimalPrice") * 1) < price.price) {
                                            $(priceCellName).addClass("priceIncrease");
                                        }
                                        else
                                            if (($(priceCellName).attr("decimalPrice") * 1) > price.price) {
                                                $(priceCellName).addClass("priceDecrease");
                                            }
                                    }
                                    $(priceCellName).attr("decimalPrice", price.price);
                                    $(priceCellName).text(price.representation);
                                    $(stakeCellName).html(stake);

                                }
                            } //end for
                            $(String.format("#market_{0} .selectionHeader span", m.marketId)).html(String.format("Selections ({0})", activeSelectionCount));

                        }
                        window.setTimeout(this.removeHighlights, 1000);
                    } break;
                case InterfaceTypes.Sportsbook:
                    {
                        for (marketCount in params.markets) {
                            var activeSelectionCount = 0;
                            var m = params.markets[marketCount];

                            if ((m.marketStatusId != 2) && !$("#market_" + m.marketId).hasClass("blocked")) {
                                $("#market_" + m.marketId).block({
                                    message: '<h1>Suspended</h1>', cursor: '',
                                    css: { border: '3px solid #d51515' }, overlayCSS: {
                                        backgroundColor: 'transparent',
                                        cursor: 'default',
                                        opacity: 1
                                    }
                                });

                                $("#market_" + m.marketId).addClass("blocked");

                            }
                            else if ((m.marketStatusId == 2) && $("#market_" + m.marketId).hasClass("blocked")) {
                                $("#market_" + m.marketId).unblock();
                                $("#market_" + m.marketId).removeClass("blocked");
                            }
                            var marketOverrounds = com.globalbettingexchange.base.getOverRound(m, true);
                            $("#ForOverround_" + m.marketId).text(marketOverrounds.forOverround);
                            $("#AgainstOverround_" + m.marketId).text(marketOverrounds.againstOverround);
                            $("#MatchedAmount_" + m.marketId).html(com.globalbettingexchange.base.formatDecimal(m.totalMatchedAmount, 2, this.ccSymbol, true));

                            if (m.willBeInRunning) {
                                if (m.isCurrentlyInRunning) {
                                    $("#market_runningStatus_" + m.marketId).text('In Play');
                                    $("#market_runningStatus_" + m.marketId).addClass('currentInrunningIcon');
                                    $("#market_runningStatus_" + m.marketId).removeClass('futureInrunningIcon');
                                }
                                else {
                                    $("#market_runningStatus_" + m.marketId).text('Going In Play');
                                    $("#market_runningStatus_" + m.marketId).addClass('futureInrunningIcon');
                                    $("#market_runningStatus_" + m.marketId).removeClass('currentInrunningIcon');
                                }
                            }

                            for (selectionCount in m.selections) {
                                var s = m.selections[selectionCount];
                                var multipleButton = $("#multiple_odds_" + s.selectionId);
                                var multipleText = "";
                                if (s.forSportsbookPrices != null) {
                                    multipleText = (s.forSportsbookPrices.price > 0) ? resources.EventCard.AddToMultiple : "";
                                }
                                if (s.forExchangePrices[0] != null) {
                                    multipleText = (s.forExchangePrices[0].price > 0) ? resources.EventCard.AddToMultiple : "";
                                }
                                multipleButton.text(multipleText);

                                if (s.selectionStatusId == 2)
                                    activeSelectionCount++;
                                var forPriceCount = 0; //forPriceCount < 3; forPriceCount++)
                                {
                                    var priceCellName = "#back_odds_" + forPriceCount + "_" + s.selectionId;
                                    var price = '';

                                    //if(s.forSportsbookPrices.prices[forPriceCount] != null)
                                    if (s.forSportsbookPrices.price > 0) {
                                        price = this.oddsLadder.band(s.forSportsbookPrices.price, -1).representation;
                                    }

                                    $(priceCellName).text(price);
                                }
                                var againstPriceCount = 0; //againstPriceCount < 3; againstPriceCount++)
                                {
                                    var priceCellName = "#lay_odds_" + againstPriceCount + "_" + s.selectionId;
                                    var price = '';

                                    // if(s.againstSportsbookPrices.prices[againstPriceCount] != null)
                                    if (s.againstSportsbookPrices.price > 0) {
                                        price = this.oddsLadder.band(s.againstSportsbookPrices.price, -1).representation
                                    }

                                    $(priceCellName).text(price);
                                }
                            } //end for

                            $(String.format("#market_{0} .selectionHeader span", m.marketId)).html(String.format("Selections ({0})", activeSelectionCount));

                        }
                    } break;
                default: alert("unknown interface type:" + params.interfaceType); break;
            }

        }
        this.removeHighlights = function () {
            $(".priceDecrease").removeClass("priceDecrease");
            $(".priceIncrease").removeClass("priceIncrease");
        }
        this.refreshPnL = function (params) {
            var selectionTotals = [];
            var existingTotals = [];

            if (params.pfOrders != null) {
                selectionTotals = com.globalbettingexchange.base.calcPnLs(params.markets, params.pfOrders);
                existingTotals = com.globalbettingexchange.base.calcPnLs(params.markets, params.orders);
            }

            for (marketCount in params.markets) {
                var m = params.markets[marketCount];

                for (selectionCount in m.selections) {
                    var s = m.selections[selectionCount];

                    var pnl1String = "";
                    var pnl2String = "";
                    var pnl3String = "";

                    if ((selectionTotals[s.selectionId] != null) && clientObject.currentlyLoggedIn) {
                        //(m.numberOfWinningSelections == 1)
                        if (selectionTotals[s.selectionId].PnL1 != 0) {
                            var existingTotal = (existingTotals[s.selectionId] != null) ? existingTotals[s.selectionId] : { PnL1: 0, PnL2: 0, PnL3: 0 };

                            pnl1String = com.globalbettingexchange.base.formatDecimal(selectionTotals[s.selectionId].PnL1 + existingTotal.PnL1, 2, this.ccSymbol);
                            pnl2String = com.globalbettingexchange.base.formatDecimal(selectionTotals[s.selectionId].PnL2 + existingTotal.PnL2, 2, this.ccSymbol);
                            pnl3String = com.globalbettingexchange.base.formatDecimal(selectionTotals[s.selectionId].PnL3 + existingTotal.PnL3, 2, this.ccSymbol);

                            pnl1String = (selectionTotals[s.selectionId].PnL1 < 0) ? "<span class='negative'>" + pnl1String + "</span>" : "<span>" + pnl1String + "</span>";
                            pnl2String = (selectionTotals[s.selectionId].PnL2 < 0) ? "<span class='negative'>" + pnl2String + "</span>" : "<span>" + pnl2String + "</span>";
                            pnl3String = (selectionTotals[s.selectionId].PnL3 < 0) ? "<span class='negative'>" + pnl3String + "</span>" : "<span>" + pnl3String + "</span>";

                            pnl1String = (selectionTotals[s.selectionId].PnL1 == -999999) ? "" : "> " + pnl1String;
                            pnl2String = (selectionTotals[s.selectionId].PnL2 == -999999) ? "" : pnl2String;
                            pnl3String = (selectionTotals[s.selectionId].PnL3 == -999999) ? "" : pnl3String;
                        }
                    }

                    $("#plpf1_" + s.selectionId).html(pnl1String);
                    $("#plpf2_" + s.selectionId).html(pnl2String);
                    $("#plpf3_" + s.selectionId).html(pnl3String);

                }
            }
        }
    },
    drawNavigation: function (events, markets, params) {
        //$(params.leftNav_All).html('<div class="title">All Events</div>');
        $(params.leftNav_All).html('');

        var row = document.createElement("div");
        //Draw breadcrumb
        breadCrumbEvent = (events != null) ? (events.length > 0) ? events[0].parent : markets[0].eventClassifier : markets[0].eventClassifier;


        if (breadCrumbEvent != null) {
            thisCurrentEvent = breadCrumbEvent;

            //(function (thisCurrentEvent) {
            for (marketTypeCount in thisCurrentEvent.marketTypeIds) {
                var marketTypeId = thisCurrentEvent.marketTypeIds[marketTypeCount];
                (function (marketTypeId) {
                    var marketTypeRow = document.createElement("div");
                    $(marketTypeRow).addClass(params.marketClass);

                    var nodeAllMarkets = document.createElement("a");
                    $(nodeAllMarkets).attr("href", "javascript:void(0);");


                    $(nodeAllMarkets).bind("click", function () {
                        $(".selected").removeClass("selected");
                        if (params.marketClickedFunction != null)
                            params.marketClickedFunction.call(null, [thisCurrentEvent], marketTypeId);
                        $(this).addClass("selected");
                        return false;
                    });
                    var text = document.createElement("span");

                    $(text).text('All ' + com.globalbettingexchange.gec.marketTypeName(marketTypeId) + ' Markets');

                    var icon1 = document.createElement("div");
                    $(icon1).text("  ");

                    nodeAllMarkets.appendChild(icon1);

                    nodeAllMarkets.appendChild(text);
                    marketTypeRow.appendChild(nodeAllMarkets);

                    $(params.leftNav_All).append(marketTypeRow);
                })(marketTypeId);

            }
            // })(thisCurrentEvent);
        }

        while (breadCrumbEvent != null) {
            var breadRow = com.globalbettingexchange.ui.createEventRow(breadCrumbEvent, params);
            $(breadRow).addClass(params.breadCrumbClass);
            $(params.leftNav_All).prepend(breadRow);

            breadCrumbEvent = breadCrumbEvent.parent;
        }

        var topLevelEvent = {};
        topLevelEvent.eventClassifierId = 1;
        topLevelEvent.eventClassifierName = params.resources.AllEvents;
        topLevelEvent.children = params.events;
        topLevelEvent.markets = params.markets;

        var row = com.globalbettingexchange.ui.createEventRow(topLevelEvent, params);
        $(params.leftNav_All).prepend(row);
        var i = 0;
        if (events != null) {
            for (i = 0; i < events.length; i++) {
                if ((params.mode == ModeTypes.Singles) || ((params.mode == ModeTypes.Multiples) && this.hasEventMultipleMarketForDisplaying(events[i]))) {
                    var eventRow = com.globalbettingexchange.ui.createEventRow(events[i], params);
                    $(params.leftNav_All).append(eventRow);
                }
            }
        }

        /***************START OF MARKETS **************/
        if (markets != null) {
            //Draw All Markets
            if (markets[0] != null) {


                if (markets[0].eventClassifier.shortcutAllMarkets) {
                    var allMarketsRow = document.createElement("div");
                    //$(allMarketsRow).attr("id", "leftNavAllMarket");
                    $(allMarketsRow).addClass(params.marketClass);

                    var nodeAllMarkets = document.createElement("a");
                    $(nodeAllMarkets).attr("href", "javascript:void(0);");
                    $(nodeAllMarkets).attr("tag", i);

                    marketObj = markets[i];
                    $(nodeAllMarkets).bind("click", function () {
                        $(".selected").removeClass("selected");
                        if (params.marketClickedFunction != null)
                            params.marketClickedFunction.call(null, markets);

                        $(this).addClass("selected");
                        return false;
                    });
                    var text = document.createElement("span");
                    $(text).text(params.resources.AllMarkets);

                    var icon1 = document.createElement("div");
                    $(icon1).text("  ");

                    nodeAllMarkets.appendChild(icon1);

                    nodeAllMarkets.appendChild(text);
                    allMarketsRow.appendChild(nodeAllMarkets);

                    $(params.leftNav_All).append(allMarketsRow);
                }
            }
            for (var i = 0; i < markets.length; i++) {
                var row = document.createElement("div");
                $(row).attr("id", "leftNavMarket_" + markets[i].marketId);
                $(row).addClass(params.marketClass);

                var node = document.createElement("a");
                $(node).attr("href", "javascript:void(0);");
                $(node).attr("tag", i);

                marketObj = markets[i];
                $(node).bind("click", function () {
                    GBEEmbeddedPaneInterface.eventMenuMarketClicked(clientObject.mode, 2, 2, 3, 4);
                    $(".selected").removeClass("selected");
                    if (params.marketClickedFunction != null)
                        params.marketClickedFunction.call(null, [markets[$(this).attr("tag")]]);

                    $(this).addClass("selected");

                    return false;
                });

                if (markets[i].isEnabledForMultipleBets) {
                    $(row).addClass(params.multipleClass);
                }

                var text = document.createElement("span");
                $(text).text(markets[i].marketName);

                var icon = document.createElement("div");
                $(icon).text("  ");

                node.appendChild(icon);

                node.appendChild(text);
                row.appendChild(node);

                if ((params.mode == ModeTypes.Singles) || ((params.mode == ModeTypes.Multiples) && markets[i].isEnabledForMultipleBets && !markets[i].currentlyInRunning)) {
                    $(params.leftNav_All).append(row);
                }

            }
        }
        return this;
    },
    hasEventMultipleMarketForDisplaying: function (ev) {
        var hasMarketForMultipleNav = false;
        if (ev.isEnabledForMultipleBets) {
            for (var i = 0; i < ev.markets.length; i++) {
                if (!ev.markets[i].currentlyInRunning)
                    return true;
            }
            for (var i = 0; i < ev.children.length; i++) {
                if (this.hasEventMultipleMarketForDisplaying(ev.children[i]))
                    return true;

            }
        }

        return hasMarketForMultipleNav;
    },
    createEventRow: function (eventClassifier, options) {
        var row = document.createElement("div");
        $(row).attr("id", "leftNavEvent_" + eventClassifier.eventClassifierId);

        var className = String.format("level{0}", com.globalbettingexchange.base.getEventLevel(eventClassifier));

        if (eventClassifier.eventClassifierId == 1)
            $(row).addClass('title');
        else {
            $(row).addClass(options.eventClass);
            $(row).addClass(className);

        }

        if (eventClassifier.isEnabledForMultipleBets) {
            $(row).addClass(options.multipleClass);
        }
        var node = document.createElement("a");

        $(node).attr("href", "javascript:void(0);");
        //var ev = eventClassifier;
        //(function (ev) {
        $(node).bind("click", function () {
            GBEEmbeddedPaneInterface.eventMenuEventClicked(clientObject.mode, 2, 2, 3, 4);
            if (options.eventClickedFunction != null) {
                var marketCount = (eventClassifier.markets == null) ? 0 : eventClassifier.markets.length;
                var eventCount = (eventClassifier.children == null) ? 0 : eventClassifier.children.length;

                if ((options.eventClickedFunction.call(null, eventClassifier)) && (eventCount + marketCount) > 0) {
                    com.globalbettingexchange.ui.drillDownEvents(eventClassifier, options);

                }
            }
            else
                com.globalbettingexchange.ui.drillDownEvents(eventClassifier, options);

            return false;
        });
        //})(ev);


        if (eventClassifier.eventClassifierId != 1) {
            var icon = document.createElement("div");
            $(icon).text("  ");
            node.appendChild(icon);
        }

        var text = document.createElement("span");
        $(text).text(eventClassifier.eventClassifierName);
        node.appendChild(text);

        row.appendChild(node);
        return row;
    },
    createTopEventRow: function (eventClassifier, options) {
        var row = document.createElement("div");
        $(row).attr("id", "leftNavEvent_" + eventClassifier.eventClassifierId);
        $(row).addClass(options.eventClass);
        if (eventClassifier.isEnabledForMultipleBets) {
            $(row).addClass(options.multipleClass);
        }
        var node = document.createElement("a");

        $(node).attr("href", "javascript:void(0);");
        //var ev = eventClassifier;
        //(function (ev) {
        $(node).bind("click", function () {
            GBEEmbeddedPaneInterface.eventMenuEventClicked(clientObject.mode, 2, 2, 3, 4);

            var eventsPanel = $(String.format('#eventsPanel_{0}', eventClassifier.eventClassifierId));

            var currentlyShown = ($(eventsPanel).css("display") == "block");

            if (currentlyShown) {
                $(eventsPanel).css({ "display": "none" });
                //$(".expander", $(node)).text("+");
                $(".expander", $(node)).addClass("closed");
                $(".expander", $(node)).removeClass("opened");

            }
            else {
                $(eventsPanel).css({ "display": "block" });
                //$(".expander", $(node)).text("-");
                $(".expander", $(node)).addClass("opened");
                $(".expander", $(node)).removeClass("closed");

            }

            return false;
        });
        //})(ev);

        var text = document.createElement("span");
        $(text).text(eventClassifier.eventClassifierName);

        var icon = document.createElement("div");
        $(icon).text("  ");
        node.appendChild(icon);

        node.appendChild(text);
        row.appendChild(node);
        return row;
    },
    createStartingRow: function (eventClassifier, market, options) {
        var row = document.createElement("div");
        $(row).attr("id", "leftNavEvent_" + eventClassifier.eventClassifierId);
        $(row).addClass(options.eventClass);

        var topLevelEvent = com.globalbettingexchange.base.getTopLevelEvent(market.eventClassifier);
        $(row).addClass(String.format("childof_{0}", topLevelEvent.eventClassifierId));

        if (eventClassifier.isEnabledForMultipleBets) {
            $(row).addClass(options.multipleClass);
        }
        var node = document.createElement("a");
        var icon = document.createElement("div");
        $(icon).text("  ");
        node.appendChild(icon);

        var text = document.createElement("span");
        var eventNameWithoutTime = eventClassifier.eventClassifierName;

        if (eventNameWithoutTime.charAt(2) == ":") {
            eventNameWithoutTime = eventNameWithoutTime.substring(6);
        }

        $(text).text(market.startTime.formatDate("HH:mm") + " " + eventNameWithoutTime);
        node.appendChild(text);

        $(node).attr("href", "javascript:void(0);");
        //var ev = eventClassifier;
        //(function (ev) {
        $(node).bind("click", function () {
            GBEEmbeddedPaneInterface.eventMenuEventClicked(clientObject.mode, 2, 2, 3, 4);

            var marketsPanel = $(String.format('#marketsPanel_{0}_{1}', market.startTime.getTime(), eventClassifier.eventClassifierId));

            var currentlyShown = ($(marketsPanel).css("display") == "block");
            if (currentlyShown) {
                $(marketsPanel).css({ "display": "none" });
                $(".expander", $(node)).text("+");
                $(".expander", $(node)).removeClass("opened");
                $(".expander", $(node)).addClass("closed");

            }
            else {
                $(marketsPanel).css({ "display": "block" });
                $(".expander", $(node)).text("-");
                $(".expander", $(node)).removeClass("closed");
                $(".expander", $(node)).addClass("opened");

            }










            return false;
        });
        //})(ev);

        row.appendChild(node);
        return row;
    },
    createTopLevelRow: function (eventClassifier, market, options) {


    },
    createInrunningRow: function (eventClassifier, market, options) {
        var row = document.createElement("div");
        $(row).attr("id", "leftNavEvent_" + eventClassifier.eventClassifierId);
        $(row).addClass(options.eventClass);
        if (ev.isEnabledForMultipleBets) {
            $(row).addClass(options.multipleClass);
        }
        var node = document.createElement("a");

        $(node).attr("href", "javascript:void(0);");
        //var ev = eventClassifier;
        //(function (ev) {
        $(node).bind("click", function () {
            GBEEmbeddedPaneInterface.eventMenuEventClicked(clientObject.mode, 2, 2, 3, 4);

            var marketsPanel = $(String.format('#marketsPanel_{0}', eventClassifier.eventClassifierId));

            var currentlyShown = ($(marketsPanel).css("display") == "block");
            var children = $(marketsPanel).children();
            if (currentlyShown) {
                $(marketsPanel).css({ "display": "none" });
                //$(".expander", $(node)).text("+");
                $(".expander", $(node)).removeClass("opened");
                $(".expander", $(node)).addClass("closed");
            }
            else {
                if (children.length > 1) {
                    $(marketsPanel).css({ "display": "block" });
                    //$(".expander", $(node)).text("-");
                    $(".expander", $(node)).removeClass("closed");
                    $(".expander", $(node)).addClass("opened");
                }
                else {
                    $("a", children[0]).click();
                }
            }

            return false;
        });
        //})(ev);

        var text = document.createElement("span");
        $(text).text(eventClassifier.eventClassifierName);

        var icon = document.createElement("div");
        $(icon).text("  ");
        node.appendChild(icon);

        node.appendChild(text);
        row.appendChild(node);
        return row;
    },
    drillDownEvents: function (eventClassifier, options) {
        com.globalbettingexchange.ui.drawNavigation(eventClassifier.children, eventClassifier.markets, options);
    },
    drawTemplateEventCard: function (domObj, marketArray, orderArray, options) {
        var templateObject = {};
        templateObject.marketArray = marketArray;
        templateObject.ordersArray = orderArray;
        templateObject.options = options;

        try {
            var result = new EJS({ element: 'template_marketView_row' }).render(templateObject);
            $(domObj).html(result);
        }
        catch (e) {
            template_error(e);
        }
    },
    MultipleCart: function (options) {
        this.oddsLadder = options.oddsLadder;
        this.ccSymbol = options.ccSymbol;

        this.selections = [];
        this.bets = [];
        this.addSelection = function (selection) {
            if (this.canAddToMultiple(selection, true)) {
                var selectionRow = document.createElement("tr");
                var selectionNameCell = document.createElement("td");
                var removeSelectionCell = document.createElement("td");
                $(selectionNameCell).html("<b>" + selection.selectionName + "</b> " + selection.market.eventClassifierFullName + " " + selection.market.marketName);

                var deleteButton = document.createElement("span");
                $(deleteButton).addClass("icon");
                $(deleteButton).addClass("deleteIcon");

                var thisCart = this;
                $(deleteButton).bind("click", function () {
                    $(this).parent().parent().remove();

                    thisCart.removeSelection(selection);
                });

                $(selectionRow).append(selectionNameCell);

                $(removeSelectionCell).append(deleteButton);
                $(selectionRow).append(removeSelectionCell);

                $(options.domObj).children('table').append(selectionRow);
                this.selections[selection.selectionId] = selection;
            }

            if (this.getGBESelections().length > 1)
                $(".betSlipFooter", "#multiplesCartWrapper").css("display", "");

            return 0;
        };
        this.getLevels = function () {
            var levels = [];
            var selections = this.getGBESelections();

            for (var i = 1; i < selections.length; i++) {
                levels[levels.length] = i + 1;
            }

            return levels;
        }
        this.clearSelections = function () {
            this.clearBets();
            this.selections = [];
            $(options.domObj).html('<table style="width:100%"></table>');
            $(".betSlipFooter", "#multiplesCartWrapper").css("display", "none");
            return 0;
        }

        this.getGBESelections = function () {
            var selections = [];
            for (sel in this.selections) {
                selections[selections.length] = this.selections[sel];
            }
            return selections;
        }
        this.getGBESelectionIds = function () {
            var selections = [];
            for (sel in this.selections) {
                selections[selections.length] = sel;
            }
            return selections;
        }
        this.getGBESelectionsOnMarket = function (market) {
            var selections = [];
            for (sel in this.selections) {
                if (this.selections[sel].market = market)
                    selections[selections.length] = this.selections[sel];
            }
        }
        this.canAddToMultiple = function (selection, showMessage) {
            var selectionCount = 0;
            for (sel in this.selections) {
                if (selection.selectionName == this.selections[sel].selectionName) {
                    if (showMessage) alert(options.resources.SelectionAlreadyInCart);
                    return false;
                }

                if (selection.market.eventClassifierFullName == this.selections[sel].market.eventClassifierFullName) {
                    if (showMessage) alert(options.resources.EventClassifierAlreadyInCart);
                    return false;
                }
                selectionCount++;
            }
            if (selectionCount >= clientObject.multiplesConfiguration.MaxMultipleSelectionsAllowed) {//max selections allowable in cart
                if (showMessage) alert(String.format("You may only choose up to {0} selections", clientObject.multiplesConfiguration.MaxMultipleSelectionsAllowed));
                return false;
            }

            return true;
        };
        this.removeSelection = function (selection) {
            if (this.selections[selection.selectionId] != null) {
                delete this.selections[selection.selectionId];
                if (this.getGBESelections().length < 2)
                    $(".betSlipFooter", "#multiplesCartWrapper").css("display", "none");
                return true;
            }
            else {
                return false;
            }
        };
        this.addBet = function (rowIndex, index, wantAllStake) {
            if (this.lastQuotation[rowIndex] != null)
                if (this.lastQuotation[rowIndex].offers[index] != null) {
                    this.bets[rowIndex] = {};
                    this.bets[rowIndex].price = this.lastQuotation[rowIndex].offers[index].offerPrice;
                    this.bets[rowIndex].stake = wantAllStake ? this.lastQuotation[rowIndex].offers[index].stake.amount : '';

                    this.bets[rowIndex].selections = this.lastQuotation[rowIndex].selections;

                    try {
                        var result = new EJS({ element: 'template_multipleBets' }).render({
                            bets: this.bets
                        });
                        $("#multiplesBetSlip").html(result);
                    }
                    catch (e) {
                        alert(e.message);
                    }
                }

            $(".betSlipFooter", "#multiplesBetSlipWrapper").css("display", "");
        }
        this.removeBet = function (index) {
            delete this.bets[index];
        }
        this.clearBets = function () {
            $("#multiplesBetSlip").html('');
            this.bets = [];
            $(".betSlipFooter", "#multiplesBetSlipWrapper").css("display", "none");
        }
        //combination is selected from list on main page
        //e.g. all Doubles, Trixie
        this.selectCombination = function (combination, params) {
            clientObject.rightNav.enableTab("#TmultipleBetSlipTab");
            this.selectedCombination = combination;
            this.ccSymbol = params.ccSymbol;
            var isAccumulator = (combination.charAt(0) == 'A');
            var maxCount = combination.charAt(1) * 1;
            var minCount = maxCount;
            this.numOfLines = 0;
            this.sumOfPrices = 0;

            clientObject.multipleSelectionCart.getQtyOf(2);

            if (isAccumulator)
                minCount = 2;

            for (var j = minCount; j < maxCount + 1; j++) {
                for (var i = 0; i < this.lastQuotation.length; i++) {
                    if (this.lastQuotation[i].selections.length == j) {
                        this.numOfLines++;
                        this.sumOfPrices += this.lastQuotation[i].offers[0].offerPrice;
                    }
                }
            }


            try {
                var result = new EJS({ element: 'template_multipleLocalBets' }).render({
                    betType: combination,
                    stake: clientObject.multiplesConfiguration[clientObject.state.currency].DefaultBetAmount,
                    stakes: clientObject.multiplesConfiguration[clientObject.state.currency].StakePadStakes,
                    price: this.sumOfPrices,
                    options: { ccSymbol: this.ccSymbol }
                });
                $("#multiplesBetSlip").html(result);

                var multipleTypeText = com.globalbettingexchange.ui.getCombinationString(combination, this.getQtyOf(combination.charAt(1)), options.resources);
                $("#multipleType").text(multipleTypeText);

                this.setSelectedRowStake(clientObject.multiplesConfiguration[clientObject.state.currency].DefaultBetAmount);
                $('#rightNav').tabs('option', 'selected', 6);
                clientObject.rightNav.selectTab('#TmultipleBetSlipTab');
                $(".betSlipFooter", "#multiplesBetSlipWrapper").css("display", "");
            }
            catch (e) {
                alert(e.message);
            }

        }
        this.getBetsToPlace = function (stakePerLine) {
            var requestedBets = [];
            var betCount = 0;

            var isAccumulator = (this.selectedCombination.charAt(0) == 'A');
            var maxCount = this.selectedCombination.charAt(1) * 1;
            var minCount = maxCount;

            if (isAccumulator)
                minCount = 2;

            for (var j = minCount; j < maxCount + 1; j++) {
                for (var i = 0; i < this.lastQuotation.length; i++) {
                    if (this.lastQuotation[i].selections.length == j) {
                        requestedBets[betCount] = {};
                        requestedBets[betCount].selections = this.lastQuotation[i].selections;
                        requestedBets[betCount].requestedGrossForSideStake = stakePerLine;
                        requestedBets[betCount].requestedForSidePrice = this.lastQuotation[i].offers[0].offerPrice;
                        betCount++;
                    }
                }
            }

            return requestedBets;

        };
        this.showBetConfirmation = function () {
            var stakePerLine = $('#txtStakePerLine').attr('value') * 1;
            var betsToPlace = this.getBetsToPlace(stakePerLine);
            var betType = com.globalbettingexchange.ui.getCombinationString(this.selectedCombination, this.getQtyOf(this.selectedCombination.charAt(1)), options.resources);
            //var betType = com.globalbettingexchange.ui.getMultipleType(betsToPlace[0].selections.length, betsToPlace.length, options.resources)

            clientObject.rightNav.selectTab('#TmultipleConfirmationTab');
            var htmlBody = 'You are about to place the following bet:';
            htmlBody += '<br /><table style="width:100%">';
            htmlBody += String.format('<tr><th align="right">{0}</th><td>{1}</td></tr>', 'Bet Type', betType);
            htmlBody += String.format('<tr><th align="right">{0}</th><td>{1}</td></tr>', 'Stake per Line', myFormatter.formatCurrency(stakePerLine, 2, true));
            htmlBody += String.format('<tr><th align="right">{0}</th><td>{1}</td></tr>', 'Total Stake', myFormatter.formatCurrency(stakePerLine * betsToPlace.length, 2, true));
            htmlBody += '</table>';

            $(options.confirmationDomObj).html(htmlBody);
        };
        this.submit = function (bypassConfirmation) {
            var stakePerLine = $('#txtStakePerLine').attr('value') * 1;

            if (stakePerLine < clientObject.multiplesConfiguration[clientObject.state.currency].MinimumStakePerLine) {
                alert("Stake Must Be Greater Than " + com.globalbettingexchange.base.formatDecimal(clientObject.multiplesConfiguration[clientObject.state.currency].MinimumStakePerLine, 2, ''));
                return false;
            }
            if ((stakePerLine * this.numOfLines) < clientObject.multiplesConfiguration[clientObject.state.currency].MinimumTotalStake) {
                alert("Total Stake Must Be Greater Than " + com.globalbettingexchange.base.formatDecimal(clientObject.multiplesConfiguration[clientObject.state.currency].MinimumTotalStake, 2, ''));
                return false;
            }

            if (options.preferences.showBetConfirmation && !bypassConfirmation)//bypassConfirmation means we've already confirmed
            {
                this.showBetConfirmation();
            }
            else {
                if (options.placeBetFunction != null) {
                    clientObject.rightNav.selectTab('#TmultipleBetSlipTab');

                    $(".betSlipFooter", "#multiplesBetSlipWrapper").css("display", "none");
                    $("#multiplesBetSlip").html("<div style='margin:auto;width:32px;'><span class='icon loadingIcon'></span></div>");
                    options.placeBetFunction.call(this, this.getBetsToPlace(stakePerLine));
                }
            }
        };
        this.getQtyOf = function (typeCount) {
            var qty = 0;
            for (var i = 0; i < this.lastQuotation.length; i++) {
                if (this.lastQuotation[i].selections.length == typeCount)
                    qty++;
            }
            return qty;
        };
        this.setSelectedRowStake = function (stake) {
            var stakeString = stake + '';
            if (stakeString.indexOf(".") > -1)
                stakeString = stakeString.substr(0, stakeString.indexOf(".") + 3);

            stake = stakeString * 1;


            var potential = this.sumOfPrices * stake;
            var totalStake = this.numOfLines * stake;
            $("#txtStakePerLine").attr("value", stakeString);
            $("#totalStake").html(com.globalbettingexchange.base.formatDecimal(totalStake, 2, this.ccSymbol));
            $("#multiplePotentialReturn").html(com.globalbettingexchange.base.formatDecimal(potential, 2, this.ccSymbol));

        }
        this.showReceipt = function (params) {
            var htmlString = '<div id="multiplesReceipt"><table style="width:100%"><thead><tr><th class="leftH">Reference</th><th class="rightH">Odds</th><th class="rightH">Stake</th><th class="rightH">Potential Return</th></tr></thead><tbody>';
            if (params.bets != null) {
                for (betCount in params.bets) {
                    if (params.bets[betCount].returnCode == 0) {
                        htmlString += String.format('<tr><td class="leftH"><a onclick="getMultipleBetDetails({0});" href="javascript:void(0);">{4}</a></td><td>{1}</td><td>{2}</td><td>{3}</td></tr>',
                        params.bets[betCount].multipleBetId,
                        clientObject.currentOddsLadder.band(params.bets[betCount].matchedPrice, -1, true, true).representation,
                        com.globalbettingexchange.base.formatDecimal(params.bets[betCount].matchedAmount, 2, this.ccSymbol),
                        com.globalbettingexchange.base.formatDecimal(params.bets[betCount].matchedAmount * params.bets[betCount].matchedPrice, 2, this.ccSymbol),
                        params.bets[betCount].multipleBetId);
                    }
                    else {
                        htmlString += String.format('<tr><td colspan="4">Following Bet Not Placed</td>')
                    }

                    htmlString += String.format('<tr><td colspan="4"><ul>');

                    for (var i = 0; i < params.requestedBets[betCount].selections.length; i++) {
                        htmlString += String.format('<li>{0}. <b>{1}</b>({2} - {3})</li>', i + 1, params.requestedBets[betCount].selections[i].selectionName, params.requestedBets[betCount].selections[i].market.eventClassifierFullName, params.requestedBets[betCount].selections[i].market.marketName);
                    }
                    htmlString += String.format('</ul></td></tr>');

                }
                htmlString += '</tbody></table></div>';
            }
            else {
                htmlString = params.message;
            }
            $(options.receiptDomObj).html(htmlString);

            $('#rightNav').tabs('option', 'selected', 7);

            this.selectCombination(this.selectedCombination, { ccSymbol: this.ccSymbol });

            clientObject.rightNav.selectTab('#TmultipleBetReceiptTab');

        };
        this.closeBetReceipt = function () {
            $(options.receiptDomObj).html('');
            //$('#rightNav').tabs('option', 'selected', 2);
            clientObject.rightNav.selectTab('#TmultipleSelectionsTab');

        };
        this.closeConfirmation = function () {
            $(options.confirmationDomObj).html('');
            clientObject.rightNav.selectTab('#TmultipleBetSlipTab');
            //$('#rightNav').tabs('option', 'selected', 2);
        };
        this.reset = function () {
            this.clearSelections();
            this.clearBets();
        }

        this.sumOfPrices = 0;
        this.numOfLines = 0;
        this.selectedCombination;
        this.lastQuotation;
    },
    multipleQuotationPanel: function (domObj, options) {
        try {
            var result = "";
            //switch(options.interfaceType)
            //{
            //    case InterfaceTypes.Exchange:
            //        result = new EJS({element: 'template_multipleQuotes'}).render({options:options,quotes:options.quotes, resources:options.resources});
            //    break;
            //    case InterfaceTypes.Sportsbook:
            result = new EJS({ element: 'template_multipleLocalQuotes' }).render({ options: options, quotes: options.quotes, resources: options.resources });
            //    break;
            //}
            $(domObj).html(result);
        }
        catch (e) {
            $(domObj).html(String.format("<div style='text-align:center;width:200px;margin:auto;'>{0}</div>", 'One or more of your Selections are not available for multiples. Please review your selections.'));
        }
    },
    getMultipleType: function (number, qty, resources) {
        var returnString = '';
        switch (number) {
            case 2: returnString = (qty > 1) ? resources.Doubles : resources.Double; break;
            case 3: returnString = (qty > 1) ? resources.Trebles : resources.Treble; break;
            case 4: returnString = (qty > 1) ? resources.FourFolds : resources.FourFold; break;
            case 5: returnString = (qty > 1) ? resources.FiveFolds : resources.FiveFold; break;
            case 6: returnString = (qty > 1) ? resources.SixFolds : resources.SixFold; break;
            case 7: returnString = (qty > 1) ? resources.SevenFolds : resources.SevenFold; break;
            case 8: returnString = (qty > 1) ? resources.EightFolds : resources.EightFold; break;
            case 9: returnString = (qty > 1) ? resources.NineFolds : resources.NineFold; break;
            case 10: returnString = (qty > 1) ? resources.TenFolds : resources.TenFold; break;
        }
        return String.format(returnString, (qty == null ? '' : qty));
    },
    getCombinationString: function (combination, qty, resources) {
        var returnString = '';

        switch (combination) {
            case 'M2': returnString = (qty > 1) ? resources.Doubles : resources.Double; break;
            case 'M3': returnString = (qty > 1) ? resources.Trebles : resources.Treble; break;
            case 'M4': returnString = (qty > 1) ? resources.FourFolds : resources.FourFold; break;
            case 'M5': returnString = (qty > 1) ? resources.FiveFolds : resources.FiveFold; break;
            case 'M6': returnString = (qty > 1) ? resources.SixFolds : resources.SixFold; break;
            case 'M7': returnString = (qty > 1) ? resources.SevenFolds : resources.SevenFold; break;
            case 'M8': returnString = (qty > 1) ? resources.EightFolds : resources.EightFold; break;
            case 'M9': returnString = (qty > 1) ? resources.NineFolds : resources.NineFold; break;
            case 'M10': returnString = (qty > 1) ? resources.TenFolds : resources.TenFold; break;

            case 'A3': returnString = resources.ThreeTimer; break;
            case 'A4': returnString = resources.FourTimer; break;
            case 'A5': returnString = resources.FiveTimer; break;
            case 'A6': returnString = resources.SixTimer; break;
            case 'A7': returnString = resources.SevenTimer; break;
            case 'A8': returnString = resources.EightTimer; break;
            case 'A9': returnString = resources.NineTimer; break;
            case 'A10': returnString = resources.TenTimer; break;

        }
        return String.format(returnString, qty);
    }

}//end namespace


//javascript for dialogs and popups

function showBetDetailsDialog(betObject, options) {
  //  var betPopupHTML = '<table> ';
  //  betPopupHTML += String.format(' <tr><td>Reference:</td><td><span>{0}</span></td></tr>', betObject.localBetId);
//    betPopupHTML += String.format(' <tr class="altRow"><th>Event:</th><td><span>{0}</span></td></tr>', com.globalbettingexchange.base.getEventName(betObject.eventClassifierFullName()));
//    betPopupHTML += String.format(' <tr><th>Market:</th><td><span>{0}</span></td></tr>', betObject.marketName());
//    betPopupHTML += String.format(' <tr class="altRow"><th>Selection:</th><td><span class="{0}">{1}</span> {2}</td></tr>', (betObject.polarityId == 1) ? 'forColorFont' : 'againstColorFont', betObject.polarityName(), betObject.selectionName());
//    betPopupHTML += String.format(' <tr><th>Placed:</th><td><span>{0}</span></td></tr>', betObject.placedAt.formatDate("dd-MM-yyyy hh:mm"));
//    betPopupHTML += String.format(' <tr><th>Odds:</th><td><span>{0}</span></td></tr>', clientObject.currentOddsLadder.band(betObject.punterPrice, (betObject.polarityId == 1) ? -1 : 1).representation);
//    betPopupHTML += String.format(' <tr class="altRow"><th>Stake:</th><td><span>{0}</span></td></tr>', myFormatter.formatCurrency(betObject.punterGrossAmountPlaced, 2, clientObject.state.ccSymbol));
//    betPopupHTML += String.format(' <tr class="altRow"><th>Potential Profit:</th><td><span>{0}</span></td></tr>', myFormatter.formatCurrency(betObject.punterGrossAmountPlaced * (betObject.punterPrice - 1), 2, clientObject.state.ccSymbol));
    //betPopupHTML += ' </table>';

    // $('#template_betDetailsPopup').html(betPopupHTML);

    $('#betPopup_localBetId').text(betObject.localBetId);
    $('#betPopup_event').text(com.globalbettingexchange.base.getEventName(betObject.eventClassifierFullName()));
    $('#betPopup_market').text(betObject.marketName());
    $('#betPopup_selection').text(betObject.selectionName());
    $('#betPopup_polarity').text(betObject.polarityName());
    $('#betPopup_polarity').attr("class", (betObject.polarityId == 1) ? 'forColorFont' : 'againstColorFont');

    $('#betPopup_placedAt').text(betObject.placedAt.formatDate("dd-MM-yyyy hh:mm"));
    $('#betPopup_price').text(clientObject.currentOddsLadder.band(betObject.punterPrice, (betObject.polarityId == 1) ? -1 : 1).representation);
    $('#betPopup_stake').html(myFormatter.formatCurrency(betObject.punterGrossAmountPlaced, 2, clientObject.state.ccSymbol));
    $('#betPopup_potentialprofit').text(betObject.localBetId);
    
    $('#template_betDetailsPopup').dialog({
        
        bgiframe: true,
        resizable: false,
        width: 500,
        modal: true

    }).dialog('open'); ;
}

function showOrderDetailsDialog(betObject, options) {
    var stakeForPotentialProfitCalculation = (betObject.averageMatchedPrice > 0) ? betObject.matchedStake : betObject.requestedStake;
    var priceForPotentialProfitCalculation = (betObject.averageMatchedPrice > 0) ? betObject.averageMatchedPrice : betObject.requestedPrice;
    var potentialProfit = (betObject.polarityId == 1) ? (priceForPotentialProfitCalculation - 1) * stakeForPotentialProfitCalculation : ((betObject.orderStatusId == 3) && (betObject.matchedStake > 0)) ? betObject.matchedStake : betObject.requestedStake;

    var status = "";
    switch (betObject.orderStatusId) {
        case 4: status = resources.OrderStatus.Settled; break;
        case 5: status = resources.OrderStatus.Voided; break;
        case 6: status = "Suspended"; break;
        default:
            if ((betObject.matchedStake > 0) && (betObject.orderStatusId == 3)) {
                status = resources.OrderStatus.Matched;
            } else
                if ((betObject.unmatchedStake > 0) && (betObject.matchedStake > 0)) {
                    status = resources.OrderStatus.PartMatched;
                } else
                    if ((betObject.matchedStake == 0) && betObject.orderStatusId == 3) {
                        status = resources.OrderStatus.Expired;
                    }
                    else if (betObject.matchedStake == 0) {
                        status = resources.OrderStatus.Unmatched;
                    }
                    else {
                        status = resources.OrderStatus.Matched;
                    }
    }

    var matchedOdds = '', matchedAt = '';

    if (betObject.averageMatchedPrice > 0) {
        matchedOdds = clientObject.currentOddsLadder.band(betObject.averageMatchedPrice, betObject.polarityId * 2 - 1, true).representation;
        matchedAt = betObject.matchingTimestamp.formatDate("dd-MM-yyyy hh:mm");
    }

    var betPopup = $('<div title="Bet Details"></div>');
    var detailsTable = $('<table></table>');
    detailsTable.append(String.format('<tr><th>Reference:</th><td><span>{0}</span></td></tr>', betObject.orderId + (betObject.isFreeBet ?' ' + resources.FreeBet : '')));
    detailsTable.append(String.format('<tr class="altRow"><th>Event:</th><td><span>{0}</span></td></tr>', betObject.eventClassifierFullName()));
    detailsTable.append(String.format('<tr><th>Market:</th><td><span>{0}</span></td></tr>', betObject.marketName));
    detailsTable.append(String.format('<tr class="altRow"><th>Selection:</th><td><span class="{0}">{1}</span> {2}</td></tr>', (betObject.polarityId == 1) ? 'forColorFont' : 'againstColorFont', betObject.polarityName(), betObject.selectionName));
    detailsTable.append(String.format('<tr><th>Placed:</th><td><span>{0}</span></td></tr>', betObject.issuedAt.formatDate("dd-MM-yyyy hh:mm")));
    detailsTable.append(String.format('<tr class="altRow"><th>Status:</th><td><span id="spanStatus">{0}</span></td></tr>', status));
    detailsTable.append(String.format('<tr><th>Requested Odds:</th><td><span>{0}</span></td></tr>', clientObject.currentOddsLadder.band(betObject.requestedPrice, betObject.polarityId * 2 - 1, true).representation));
    detailsTable.append(String.format('<tr class="altRow"><th>Matched At:</th><td><span>{0}</span></td></tr>', matchedAt));
    detailsTable.append(String.format('<tr><th>Matched Odds:</th><td><span>{0}</span></td></tr>', matchedOdds));
    detailsTable.append(String.format('<tr class="altRow"><th>Matched Stake:</th><td><span id="spanMatchedAmount">{0}</span></td></tr>', myFormatter.formatCurrency(betObject.matchedStake)));
    detailsTable.append(String.format('<tr><th>Unmatched Stake:</th><td><span id="spanUnmatchedAmount">{0}</span></td></tr>', myFormatter.formatCurrency(((betObject.orderStatusId == 3) && (betObject.matchedStake > 0)) ? 0 : betObject.unmatchedStake, 2, clientObject.state.ccSymbol)));
    detailsTable.append(String.format('<tr class="altRow"><th>Potential Profit:</th><td><span id="spanPotentialProfit">{0}</span></td></tr>', myFormatter.formatCurrency(potentialProfit)));
    detailsTable.append('<tr class=""><th></th><td><input style="border:none;"/></td></tr>');
    betPopup.append(detailsTable);
    betPopup.append('<table style="width: 100%;"><tbody id="orderResults"></tbody></table>');
    betPopup.append('<table style="width: 100%;"><tbody id="orderHistory"></tbody></table>');


    //Order Results Section
    if (betObject.orderStatusId == 4) //settled
    {
        $("#orderResults", betPopup).html('<tr><th colspan="2" style="text-align:left;">Bet Results</th></tr>');
        $("#orderResults", betPopup).append(String.format('<tr><td>Outcome</td><td>{0}<td></tr>', (betObject.orderPAndL > 0) ? 'Win' : 'Lose'));
        $("#orderResults", betPopup).append(String.format('<tr><td>Profit/Loss</td><td>{0}<td></tr>', myFormatter.formatCurrency(betObject.orderPAndL)));

        /*if (false) {
        $("#orderResults", betPopup).append(String.format('<tr><td>Take Commission</td><td>{0} ({1} x {2}%)<td></tr>', myFormatter.formatCurrency(obj.takeCommission * obj.takeCommissionRate), myFormatter.formatCurrency(obj.totalForSideTakeStake), myFormatter.formatNumber(obj.takeCommissionRate)));
        $("#orderResults", betPopup).append(String.format('<tr><td>Make Commission</td><td>{0} ({1} x {2}%)<td></tr>', myFormatter.formatCurrency(obj.makeCommission * obj.makeCommissionRate), myFormatter.formatCurrency(obj.totalForSideMakeStake), myFormatter.formatNumber(obj.makeCommissionRate)));
        $("#orderResults",betPopup).append(String.format('<tr><td>Net Profit/Loss</td><td>{0}<td></tr>', myFormatter.formatCurrency(obj.orderPAndL - obj.orderCommission)));
        }
        else {
        $("#orderResults", betPopup).append(String.format('<tr><td>Commission</td><td>{0}<td></tr>', 'Commission calculated on net winnings on the market'));
        }*/
    }


    //Order History Section            
    $("#orderHistory").html('<tr><th colspan="3" style="text-align:left;">Bet History</th></tr>');
    for (historyItem in betObject.history) {
        var takeText = ''; // (obj.history[historyItem].wasMake == null) ? '' : obj.history[historyItem].wasMake ? 'Make' : 'Take';
        var preStake = (betObject.history[historyItem].orderActionTypeId == 3) ? betObject.history[historyItem].matchedStake : betObject.history[historyItem].requestedStake;
        var prePrice = (betObject.history[historyItem].orderActionTypeId == 3) ? betObject.history[historyItem].priceMatched : (betObject.history[historyItem].orderActionTypeId == 8) ? betObject.history[historyItem].averagePrice : betObject.history[historyItem].requestedPrice;

        var preText = String.format("{0} {1} @ {2}", betObject.history[historyItem].orderActionTypeName(),
            myFormatter.formatCurrency(preStake, 2, true),
            clientObject.currentOddsLadder.band(prePrice, -1, true).representation);

        var matchedText = '';
        var description = String.format("{0} ({1} Unmatched, {2} Matched{3})",
            preText,
            myFormatter.formatCurrency(betObject.history[historyItem].amountUnmatched, 2, true),
            myFormatter.formatCurrency(betObject.history[historyItem].totalMatchedStake, 2, true),
            matchedText);

        switch (betObject.history[historyItem].orderActionTypeId) {
            case 2:
                matchedText = (betObject.history[historyItem].averagePrice > 0) ? ' @ ' + clientObject.currentOddsLadder.band(betObject.history[historyItem].averagePrice, -1, true, false).representation : '';
                description = String.format("{0} ({1} Unmatched, {2} Matched{3})",
                    preText,
                    myFormatter.formatCurrency(betObject.history[historyItem].amountUnmatched, 2, true),
                    myFormatter.formatCurrency(betObject.history[historyItem].totalMatchedStake, 2, true),
                    matchedText);
                break;
            case 3:
                matchedText = (betObject.history[historyItem].averagePrice > 0) ? ' @ ' + clientObject.currentOddsLadder.band(betObject.history[historyItem].averagePrice, -1, true, false).representation : '';
                description = String.format("{0} ({1} Unmatched, {2} Matched{3})",
                    preText,
                    myFormatter.formatCurrency(betObject.history[historyItem].amountUnmatched, 2, true),
                    myFormatter.formatCurrency(betObject.history[historyItem].totalMatchedStake, 2, true),
                    matchedText);
                break;
            case 4:
                preText = 'Cancelled Explicitly';
                matchedText = (betObject.history[historyItem].averagePrice > 0) ? ' @ ' + clientObject.currentOddsLadder.band(betObject.history[historyItem].averagePrice, -1, true, false).representation : '';
                description = String.format("{0} ({1} Unmatched, {2} Matched{3})",
                    preText,
                    myFormatter.formatCurrency(betObject.history[historyItem].amountUnmatched, 2, true),
                    myFormatter.formatCurrency(betObject.history[historyItem].totalMatchedStake, 2, true),
                    matchedText);
                break;
            case 11:
                description = 'Bet Voided';
                break;

            case 12: description = String.format("{0} ({1})",
                        betObject.history[historyItem].orderActionTypeName(),
                        myFormatter.formatCurrency(betObject.orderPAndL, 2, true)); //Settled

            case 1: takeText = ''; break; // Placed
        }

        $("#orderHistory", betPopup).append(String.format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", betObject.history[historyItem].time.formatDate("dd-MM-yyyy HH:mm:ss"), description, takeText));
    }

    $(betPopup).dialog({
        autoOpen: true,
        bgiframe: true,
        resizable: false,
        width: 500,
        modal: true,
        overlay: {
            backgroundColor: '#777',
            opacity: 0.5
        }

    });
}

function showMultiplesBetDetailsDialog(multipleBet, options) {

    var selectionHTML = '';

    for (var i = 0; i < multipleBet.matches[0].selectionPrices[0].selections.length; i++) {
        selectionHTML += String.format('{0}. <b>{1}</b> ({2} - {3})<br />', i + 1, multipleBet.matches[0].selectionPrices[0].selections[i].selectionName, com.globalbettingexchange.base.getEventName(multipleBet.matches[0].selectionPrices[0].selections[i].eventClassifierFullName), multipleBet.matches[0].selectionPrices[0].selections[i].marketName)
    }

    var betPopup = $('<table id="multipleBetDetailsDialog" class="gbeDialog" title="Multiple Bet Details" style="width: 100%;"></table>');
    betPopup.append(String.format('<tr><th>Reference:</th><td><span>{0}</span></td></tr>', multipleBet.multipleBetId));
    betPopup.append(String.format('<tr class="altRow"><th>Selections:</th><td id="spanMultipleSelections">{0}</td></tr>', selectionHTML));
    betPopup.append(String.format('<tr><th>Placed:</th><td><span id="spanMultiplePlacedAt">{0}</span></td></tr>', multipleBet.placedAt.formatDate("dd-MM-yyyy hh:mm")));
    betPopup.append(String.format('<tr class="altRow"><th>Status:</th><td><span id="spanMultipleStatus">{0}</span></td></tr>', multipleBet.multipleBetStatusName())); 
    betPopup.append(String.format('<tr><th>Requested Odds:</th><td><span id="spanMultipleRequestedOdds">{0}</span></td></tr>', clientObject.currentOddsLadder.band(multipleBet.requestedPrice, -1, true, true).representation));
    betPopup.append(String.format('<tr class="altRow"><th>Matched Odds:</th><td><span id="spanMultipleMatchedOdds">{0}</span></td></tr>', clientObject.currentOddsLadder.band(multipleBet.averageMatchedPrice, -1, true, true).representation));
    betPopup.append(String.format('<tr><th>Rollover Stake:</th><td><span id="spanMultipleRolloverStake">{0}</span></td></tr>', com.globalbettingexchange.base.formatDecimal(multipleBet.rolloverStake, 2, clientObject.state.ccSymbol)));
    betPopup.append(String.format('<tr><th>Remaining Odds:</th><td><span id="spanMultipleRemainingOdds">{0}</span></td></tr>', clientObject.currentOddsLadder.band(multipleBet.unsettledPrice, -1, true, true).representation));                                     
    betPopup.append(String.format('<tr class="altRow"><th>Stake:</th><td><span id="spanMultipleMatchedAmount">{0}</span></td></tr>', com.globalbettingexchange.base.formatDecimal(multipleBet.totalMatchedStake, 2, clientObject.state.ccSymbol)));
    betPopup.append(String.format('<tr><th>Potential Profit:</th><td><span id="spanMultiplePotentialProfit">{0}</span></td></tr>', com.globalbettingexchange.base.formatDecimal(multipleBet.totalMatchedStake * (multipleBet.averageMatchedPrice - 1), 2, clientObject.state.ccSymbol)));

    $(betPopup).dialog({
        autoOpen: true,
        bgiframe: true,
        resizable: false,
        width: 400,
        modal: true,
        overlay: {
            backgroundColor: '#777',
            opacity: 0.5
        }
    });

}
var testHarness;
function showTestHarness() {
    if (testHarness == null) {

        testHarness = $('<div id="testHarness" title="Test Harness" class="gbeDialog"></div>');
        var telebetFieldSet = $('<fieldset><legend>Telebet Session</legend></fieldset>');

        telebetFieldSet.append('<a href="javascript:void(0);" class="button" onclick="establishTelebetSessionExample();"><span>establishTelebetSession</span></a>');
        telebetFieldSet.append('<a href="javascript:void(0);" class="button" onclick="endTelebetSessionExample();"><span>endTelebetSession</span></a>');
        telebetFieldSet.append('<input type="text" id="txtUser" />');
        telebetFieldSet.append('<a href="javascript:void(0);" class="button" onclick="setUserContextExample();"><span>setUserContext</span></a>');
        telebetFieldSet.append('<a href="javascript:void(0);" class="button" onclick="clearUserContextExample();"><span>clearUserContext</span></a>');
        testHarness.append(telebetFieldSet);

        var normalFieldSet = $('<fieldset><legend>Normal Session</legend></fieldset>');
        normalFieldSet.append('<a href="javascript:void(0);" class="button" onclick="establishUserSessionExample();"><span>establishUserSession</span></a>');
        normalFieldSet.append('<a href="javascript:void(0);" class="button" onclick="endUserSessionExample();"><span>endUserSession</span></a> ');
        testHarness.append(normalFieldSet);

        testHarness.append('<select id="ddlLanguage"><option value="en">en</option><option value="zh-CHS">zh-CHS</option><option value="zh-CHT">zh-CHT</option></select>');
        testHarness.append('<select id="ddlCurrency"><option value="EUR">EUR</option><option value="GBP">GBP</option><option value="USD">USD</option></select>');
        testHarness.append('<br />');
        testHarness.append('<input type="checkbox" id="chkPlayMarkets" title="Play Markets" onclick="togglePlayMarkets();" />:Play Markets');

        var partnerFieldSet = $('<fieldset><legend>Partner Parameters</legend></fieldset>');
        var partnerTable = $('<table></table>');

        partnerTable.append('<tr><td>logClientEntries</td><td><input type="checkbox" id="chkLogClientEntries" title="log Client Entries"  /></td><td>useAveragePricing</td><td><input type="checkbox" id="chkAveragePricing" title="sportsbook average pricing" /></td></tr>');
        partnerTable.append('<tr><td>showAccountStatement</td><td><input type="checkbox" id="chkAccountStatement" title="sportsbook average pricing"  /></td><td></td></tr>');
        partnerTable.append('<tr><td>numBackSidePrices</td><td><select id="ddlBackSidePrices"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option></select></td><td>numLaySidePrices</td><td><select id="ddlLaySidePrices"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option></select></td></tr>');
        partnerTable.append('<tr><td>defaultCurrency</td><td><input type="text" id="txtCurrency" title="sportsbook average pricing"  /></td></tr>');
        partnerTable.append('<tr><td>screenName</td><td><input type="text" id="txtScreenName" title="sportsbook average pricing"  /></td></tr>');
        partnerTable.append('<tr><td>Default Markets</td><td><textarea id="txtOpenMarkets" rows="5" cols="20">181089\n182406</textarea></td><td>Market Types</td><td><textarea id="txtDefaultMarkets" rows="5" cols="20">100003=3,10,22,4\n100004=1</textarea></td></tr>');
        partnerTable.append('<tr><td></td><td></td><td></td><td><input type="button" id="Checkbox2" value="Save &amp; Refresh" onclick="saveTestHarness();" /></td></tr>');
        partnerFieldSet.append(partnerTable);
        testHarness.append(partnerFieldSet);

        $(testHarness).dialog({ width: 550 }).dialog('open');
    }
    else {
        $(testHarness).dialog('open');
    }
    $("#chkLogClientEntries", testHarness).attr("checked", top.document.getElementById("GBEFrame").contentWindow.GBEParams.logClientEntries);
    $("#chkAveragePricing", testHarness).attr("checked", top.document.getElementById("GBEFrame").contentWindow.GBEParams.useAveragePricing);
    $("#chkAccountStatement", testHarness).attr("checked", top.document.getElementById("GBEFrame").contentWindow.GBEParams.showAccountStatement);

    $("#txtCurrency", testHarness).val(top.document.getElementById("GBEFrame").contentWindow.GBEParams.defaultCurrency);
    $("#txtScreenName", testHarness).val(top.document.getElementById("GBEFrame").contentWindow.GBEParams.screenName);
    
    var defaultsString = "";
    for (defaultI in top.document.getElementById("GBEFrame").contentWindow.GBEParams.defaultMarkets) {
        defaultsString += String.format("{0}={1}\n", defaultI, top.document.getElementById("GBEFrame").contentWindow.GBEParams.defaultMarkets[defaultI].join(","));
    }
    $("#txtDefaultMarkets", testHarness).val(defaultsString.substring(0, defaultsString.length - 1));

    var openMarketString = "";
    for (openI in top.document.getElementById("GBEFrame").contentWindow.GBEParams.openMarkets) {
        openMarketString += String.format("{0}\n", top.document.getElementById("GBEFrame").contentWindow.GBEParams.openMarkets[openI]);
    }

    $("#txtOpenMarkets", testHarness).val(openMarketString.substring(0, openMarketString.length - 1));
    $("#ddlBackSidePrices", testHarness).val(top.document.getElementById("GBEFrame").contentWindow.GBEParams.numBackSidePrices);
    $("#ddlLaySidePrices", testHarness).val(top.document.getElementById("GBEFrame").contentWindow.GBEParams.numLaySidePrices);

}

function saveTestHarness() {
    top.document.getElementById("GBEFrame").contentWindow.GBEParams.logClientEntries = $("#chkLogClientEntries", testHarness).attr("checked")
    top.document.getElementById("GBEFrame").contentWindow.GBEParams.useAveragePricing = $("#chkAveragePricing", testHarness).attr("checked")
    top.document.getElementById("GBEFrame").contentWindow.GBEParams.showAccountStatement = $("#chkAccountStatement", testHarness).attr("checked")

    top.document.getElementById("GBEFrame").contentWindow.GBEParams.defaultCurrency = $("#txtCurrency", testHarness).val();
    top.document.getElementById("GBEFrame").contentWindow.GBEParams.screenName = $("#txtScreenName", testHarness).val();

    var openMarkets = $("#txtOpenMarkets", testHarness).val().split("\n");
    if ($("#txtOpenMarkets", testHarness).val() != "") {
        top.document.getElementById("GBEFrame").contentWindow.GBEParams.openMarkets = [];
        for (var i = 0; i < openMarkets.length; i++) {
            top.document.getElementById("GBEFrame").contentWindow.GBEParams.openMarkets[i] = openMarkets[i] * 1;
        }
    }
    else
        top.document.getElementById("GBEFrame").contentWindow.GBEParams.openMarkets = null;

    var defaultMarkets = $("#txtDefaultMarkets", testHarness).val().split("\n");
    top.document.getElementById("GBEFrame").contentWindow.GBEParams.defaultMarkets = [];
    for (var i = 0; i < defaultMarkets.length; i++) {
        var vals = defaultMarkets[i].split("=");
        var ids = vals[1].split(",");
        top.document.getElementById("GBEFrame").contentWindow.GBEParams.defaultMarkets[vals[0]] = [];
        for (var j = 0; j < ids.length; j++) {
            top.document.getElementById("GBEFrame").contentWindow.GBEParams.defaultMarkets[vals[0]][j] = ids[j] * 1;
        }
    }


    top.document.getElementById("GBEFrame").contentWindow.GBEParams.numBackSidePrices = $("#ddlBackSidePrices", testHarness).val() * 1;
    top.document.getElementById("GBEFrame").contentWindow.GBEParams.numLaySidePrices = $("#ddlLaySidePrices", testHarness).val() * 1;

    top.document.getElementById("GBEFrame").src = top.document.getElementById("GBEFrame").src;
    alert("saved");
}
