var SixtySeconds = {
    /* keep the sixty seconds game container */
    container: null,
    assetSelect:null,
    chart_id:'sixtySecondsGraph',
    timers: {}, /* keep the timers instances */
    //approvedStatus: true, /*approved in confirm dialog, default true for auto allow*/
    //approvedAction: false, /*user pressed buttons on confirm dialog*/

    init: function(){
        if (AppData.platformMode == 'pro'){
            SixtySeconds.container = $('div#sixtySeconds_main');

            SixtySeconds.assetSelect = SixtySeconds.container.find('select#assetChoose');

            SixtySeconds.assetSelect.bind('change',{},SixtySeconds.onAssetChange);
            //SixtySeconds.container.find('div#sixtySeconds_tradingZone div.rightSide select.investmentAmountSelect').bind('change',{},SixtySeconds.onInvestmentChange);

            var currentSelectedAsset = SixtySeconds.assetSelect.find('option:selected');
            SixtySeconds.container.find('div.assetName').text(currentSelectedAsset.text());

            SixtySeconds.container.find('div.actionButtons li.call , div.actionButtons li.put').bind('click',{},SixtySeconds.onClickCallPut);

            SixtySeconds.container.find('div.startButton , div.startButtonDisabled').bind('click',{},SixtySeconds.onStartClick);

            $('div#sixtySecondsGraph:last').remove(); /* ie bug fix */

            /* init sections */
            SixtySeconds.initGraph();
            SixtySeconds.updateGraph();
            SixtySeconds.onInvestmentChange();
            //SixtySeconds.initProgressBar();

            /* init select boxes */
            if(!SixtySeconds.container.find('div.selectbox-wrapperInvestment').length){
                SixtySeconds.container.find('select#investmentAmountSelect').selectbox(
                {
                    inputClass: 'selectboxInvestment',
                    containerClass: 'selectbox-wrapperInvestment',
                    scrollBar: true,
                    chainTitle: false,
                    onChange: SixtySeconds.onInvestmentChange
                }
                )
            }
        
            if(!SixtySeconds.container.find('div.selectbox-wrapperAssets').length){
                SixtySeconds.container.find('select#assetChoose').selectbox(
                {
                    inputClass: 'selectboxAssets',
                    containerClass: 'selectbox-wrapperAssets',
                    scrollBar: true,
                    chainTitle: false,
                    onChange: SixtySeconds.onAssetChange
                }
                )
            }


            /* Start button blink */
            //SixtySeconds.startBlink();


            /* 30 seconds interval for expired options removal
         * After 30 seconds the expired options should be removed from the page with effect
         */
            setInterval( "SixtySeconds.checkForExpiredOptions()", 5000);

        }
    },
    
    showConfirmationDialog: function(values){
        var title = AppData.langHome.sixtySecondsConfirmationTitle;
        if (typeof(title) == 'undefined'){
            title = 'Confirmation'
        }
        
        var defaults = {
            autoOpen: true,
            width: '400',
            height: '230',
            modal:true,
            dialogClass: 'baseTheme',
            title: title,
            buttons: {
                    "Ok": function() {
                        $(this).dialog("close");
                    },
                    "Cancel": function(){
                        $(this).dialog("close");
                        SixtySeconds.onConfirmationCancel(values);
                    }
                },
            closeText: '', //TODO:this will need to be tanslatable,
            open: function(event, ui) {
                //hide close button.
                $(this).parent().children().children('.ui-dialog-titlebar-close').hide();
                var el = $(this).find('.countDownTimer .value');
                     var outputString = '00:00:0';
                     var counter = 3;
                     var dialogTimer = setInterval(function(){
                       // var prev = parseInt(el.text());
                        counter=counter-1;
                        el.text(outputString + counter);
                        if(counter <= 0){
                            clearInterval(dialogTimer);
                        }
                    },1000);
            }
        }

        var text = $('div#sixtySeconds_confirm').clone();
            
        text.find('div.asset     div.value').html(values.assetName).end()
        .find('div.position  div.value').addClass(values.position + 'position').html(values.position).end()
        .find('div.expiry    div.value').html(values.endDateStr).end()
        .find('div.entryRate div.value').html(values.positionRate).end()
        .find('div.countDownTimer div.value').html('00:00:03').end()

        var myDialog = $('<div/>').html(text.html());
        myDialog.dialog(defaults);
            
        setTimeout(function(){
            myDialog.dialog('destroy');
        },3000);
            
        return myDialog;
    },

    onConfirmationCancel: function(values){
        //cancel position, must be a synchronic call
        $.ajax({
            type: 'POST',
            url: 'rpcProxy/changePositionStatus/canceled/' + values.positionId + '/' + true,
            data: "name=John&location=Boston",
            async: false,
            success: function(){
               var container = $('div#sixtySecondsPosition_' + values.assetId + '_' + values.optionId);
               container.fadeOut(300);
            }
        });
    },

    checkForExpiredOptions: function(){
        $('div#sixtySeconds_positions div.sixtySeconds_position').each(function(index){
            try{
                var timeoutValue = parseInt($(this).find('div.time').attr('timeout'));
                if (timeoutValue>=0){
                    $(this).find('div.time').attr('timeout', parseInt($(this).find('div.time').attr('timeout')) - 5);
                }else if (timeoutValue<=0){
                    $(this).fadeOut(1200,function(){
                        $(this).remove();
                    });

                }
            }catch(ex){
                console.log(ex);
            }

        /*var timeElem = $(this).find('div.time');
                if (!timeElem.find('div.clock').length){
                    if(timeElem.html()!=AppData.langHome.expiring || timeElem.html()!='expiring'){
                        //$(this).fadeOut(1200);
                    }
                }*/
        });
    },

    startBlink: function(){
        var startButton = $('div.startButton');
        var startButtonBlink = (1000*Math.random()) + 1500;

        setTimeout(
            function(){
                if (startButton.hasClass('startButtonColor1')){
                    startButton.removeClass('startButtonColor1').addClass('startButtonColor2');
                }else{
                    startButton.removeClass('startButtonColor2').addClass('startButtonColor1');
                }
                SixtySeconds.startBlink();
            },startButtonBlink
            );
    },

    /*
     * Show the graph
     */
    initGraph: function(event){
        $('<div/>').attr('id', SixtySeconds.chart_id).addClass('assetChart').appendTo(SixtySeconds.container.find('div.graphContainer'));

        Graphs.graphs[SixtySeconds.chart_id] = {
            series : {},
            options : {},
            currRate: null,
            itemName: null,
            container:  this,
            plot : null
        };

        SixtySeconds.loadChartData(SixtySeconds.chart_id);
        Graphs.startStreaming();
    },

    /* change the asset event */
    onAssetChange: function(event){
        if ($(this).find('option:selected').hasClass('title')) return;
        
        var selectedAsset = SixtySeconds.container.find('select#assetChoose option:selected');
        SixtySeconds.container.find('div.assetName').text(selectedAsset.text());
        SixtySeconds.container.find('span#upDownAssetName').text(selectedAsset.text());
        SixtySeconds.updateProfit(selectedAsset.attr('rule'));
        SixtySeconds.updateGraph();        
    },

    /* occurs when the customer changes the investment amount */
    onInvestmentChange: function(event){
        var ruleProfit = parseInt($('div#sixtySeconds_settings input[name="profit"]').val());
        var investment = parseInt($('div#sixtySeconds_tradingZone select.investmentAmountSelect option:selected').val());

        var profit = investment + (ruleProfit * investment)/100;
        SixtySeconds.container.find('div#sixtySeconds_tradingZone div.rightSide input.payoutAmountInput').val(profit);
    },

    /* update the graph with the new asset that was choosen */
    updateGraph: function(event){
        var selectedAsset = SixtySeconds.container.find('select#assetChoose option:selected');
        SixtySeconds.container.find('div[id^="sixtySecondsGraphContainer_"]').attr('id','sixtySecondsGraphContainer_'+selectedAsset.val());
        SixtySeconds.loadChartData(SixtySeconds.chart_id);
    },

    /* update the profit values in the Sixty Seconds options box */
    updateProfit: function(ruleId){
        $.get(AppData.url + 'rpcProxy/getSixtySecondsRule/' + ruleId,
        {},
            function(ruleInfo){
                SixtySeconds.container.find('div#sixtySeconds_settings div.rightSide div.profitPercent').text(ruleInfo.profit + '%');
                SixtySeconds.container.find('div#sixtySeconds_tradingZone div.rightSide div.profitPercent').text(ruleInfo.profit + '%');
                SixtySeconds.container.find('div#sixtySeconds_settings input[name="profit"]').val(ruleInfo.profit);
                SixtySeconds.container.find('div#sixtySeconds_settings input[name="loss"]').val(ruleInfo.loss);
                SixtySeconds.container.find('div#sixtySeconds_tradingZone select#investmentAmountSelect option').remove();
                    
                var options = '';
                $.each(ruleInfo.amountRange,function(index,element){
                    options += '<option value="' + element + '">' + element + AppData.accountCurrency + '</option>';
                });
                    
                /* add new options to the select */
                SixtySeconds.container.find('div#sixtySeconds_tradingZone select#investmentAmountSelect').append(options);
                SixtySeconds.container.find('div#sixtySeconds_tradingZone input#investmentAmountSelect_input').remove();
                SixtySeconds.container.find('div#sixtySeconds_tradingZone div#investmentAmountSelect_container').remove();
                    
                /* init the selectbox */
                SixtySeconds.container.find('select#investmentAmountSelect').selectbox(
                {
                    inputClass: 'selectboxInvestment',
                    containerClass: 'selectbox-wrapperInvestment',
                    scrollBar: true,
                    chainTitle: false,
                    onChange: SixtySeconds.onInvestmentChange
                }
                )
                    
                SixtySeconds.onInvestmentChange();
            },
            'json');
    },

    /* calculate the new payout from the investment amount that was selected by the customer */
    updatePayout: function(event){
        SixtySeconds.container.find('div#sixtySeconds_tradingZone div.rightSide input.payoutAmountInput').val('');
    },

    /**
     * Loads a given chart data, chart_id is a key in Graphs.graph object,
     * a chart knows which asset data it should load, the asset id is located
     * in its parent container id ( div#graphContainer_<assetId> ).
     *
     * @param string chart_id - chart to update
     */
    loadChartData: function(chart_id) {
        if (AppData.platformMode == 'pro'){
            var assetId = $('#' + chart_id).parent('div.graphContainer').attr('id')
            if(assetId != null) {
                assetId = assetId.split('_')[1];
            }
            if (chart_id && assetId){
                var optionId = assetId * (-1); /* no pricing for now */
                var feedElement = SixtySeconds.container.find('li.currentPosition');

                $.ajax({
                    url: AppData.url + 'home/getAssetGraphJSON/' + assetId,
                    method: 'GET',
                    dataType: 'json',
                    success: function (graphData) {
                    
                        Graphs.graphs[chart_id].options = graphData.options;
                        if(graphData.series.length){
                            Graphs.graphs[chart_id].series = [];
                            $.each(graphData.series, function(i, data){
                                Graphs.graphs[chart_id].series.push(data);
                            });
                        }
                        else{
                            Graphs.graphs[chart_id].series = [graphData.series];
                            graphData.series =  new Array(graphData.series);
                        }
                        //Graphs.graphs[chart_id].series = [ graphData.series ];

                        var assetId = SixtySeconds.container.find('div.graphContainer').attr('id').split('_')[1];

                        var itemName = 'asset_' + assetId + '_' + optionId + '_' + AppData.whiteLabelName;

                        Graphs.graphs[chart_id].itemName = itemName;

                        if (graphData.series.length || graphData.series.data.length) { //graph data is available
                            //draw the graph
                            if($('#sixtySeconds_main').is(':visible')){
                                Graphs.redraw(chart_id);
                            }

                            //Save current point to graphs array
                            Graphs.graphs[chart_id].currRate = graphData.series[0].data.pop();
                            var lastRate = Graphs.graphs[chart_id].currRate[1].toFixed(graphData.options.yaxis.tickDecimals);
                            feedElement.html(lastRate);

                        } else { //No data!
                            //Empty graph
                            Graphs.graphs[chart_id].series[0].data = new Array();
                            Graphs.graphs[chart_id].currRate = null;

                            //draw the graph
                            Graphs.redraw(chart_id);

                            if (graphData === 'Not tradeable') {
                                feedElement.html('<div style="position:absolute;width:200px;">Not Tradeable</div>');
                            } else {
                                feedElement.html('N/A');
                            }
                        }

                        /* subscribe the items with the LS */
                        Graphs.startStreaming();
                    } //end success()
                });
            }
        }
    },
    onItemUpdate: function(item, itemUpdate, itemName) {
        if($('#sixtySeconds_main').is(':visible')){
            try{
                var feedElement = SixtySeconds.container.find('li.currentPosition');
         
                if ( Graphs.nextUpdate === null ) {
                    Graphs.nextUpdate = Graphs.calculateNextUpdate();
                }


                var graphElement = Graphs.graphs[SixtySeconds.chart_id];
                if (itemUpdate.isValueChanged('pricingRate')) {
                    var pricingRate = itemUpdate.getNewValue('pricingRate');
                    var rate        = itemUpdate.getNewValue('rate');
                    var color       = parseInt(itemUpdate.getNewValue('color'));
                    var lastUpdated = itemUpdate.getNewValue('lastUpdated');

                    // Iterate each graph and check if its the one being updated
                    if ( graphElement.itemName ==  itemName) {
                        //Update current rate array
                        var d = new Date();
                        var unixTime = new Date((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear() + " " + lastUpdated);
                        var offset = General.serverOffset + General.browserOffset;
                        this.currRate  = new Array(unixTime.getTime() + offset, parseFloat(rate));

                        if (graphElement.series[0].data.length > 0) { //At least 1 point
                            //At least 2 points
                            if (graphElement.series[0].data.length > 1) {
                                //Remove the last (current) rate
                                graphElement.series[0].data.pop();
                            }
                            //Add the new rate
                            graphElement.series[0].data.push(this.currRate);
                        
                            //Upgrade rate marking on asset graph
                            graphElement.options.grid.markings[0].yaxis.from = this.currRate[1];
                            graphElement.options.grid.markings[0].yaxis.to = this.currRate[1];
						
                            //Redraw the graph
                                                
                            Graphs.redraw(SixtySeconds.chart_id);
                                                       
                        }
                        /* update the rate in the sixty seconds builder box */
                        feedElement.html(rate);
                    }

                    /* update the rate in the open positions
                * the pricing rate for the open position is like in the builder pricing rate
                * asset_assetId_-assetId_wlName
                *
                */
                    if (itemName.split('_')[1] == -1 * itemName.split('_')[2]){
                        var positionElem = $('div#sixtySeconds_positions div[id^="sixtySecondsPosition_' + itemName.split('_')[1] + '"]');

                        if (positionElem.length){
                            positionElem.each(function(index){
                                /* update the payout */
                                var positionType = $(positionElem[index]).find('div.position').attr('position');
                                var entryRate    = $(positionElem[index]).find('div.entryRate').text();
                                var payout       = $(positionElem[index]).find('div.payout');
                                var time         = $(positionElem[index]).find('div.time');
                                var amount       = $(positionElem[index]).find('input[name="amount"]').val();
                                var profit       = parseFloat($(positionElem[index]).find('input[name="profit"]').val());
                                var loss         = parseFloat($(positionElem[index]).find('input[name="loss"]').val());

                                /* if the option is not yet expired */
                                if (time.find('div.clock').length){
                                    $(positionElem[index]).find('div.currentRate').html(rate);
                                    /* highlight the rate */
                                    var highlight = new RateHighlight();
                                    highlight.init($(positionElem[index]), {
                                        startColor:'#FACD7E',
                                        endColor:'#E2E0DE',
                                        time:300
                                    });

                                    if (positionType.toLowerCase() == 'call') {
                                        if (parseFloat(rate) > parseFloat(entryRate)){
                                            payout.html(parseFloat((100 + profit) * amount)/100);
                                            $(positionElem[index]).find('div.asset,div.position,div.start,div.end,div.entryRate,div.currentRate,div.payout').removeClass('lossPosition').removeClass('tiePosition').addClass('winPosition');
                                        }else if(parseFloat(rate) < parseFloat(entryRate)){
                                            payout.html(parseFloat((100-loss) * amount)/100 );
                                            $(positionElem[index]).find('div.asset,div.position,div.start,div.end,div.entryRate,div.currentRate,div.payout').removeClass('winPosition').removeClass('tiePosition').addClass('lossPosition');
                                        }else{
                                            payout.html(amount);
                                            $(positionElem[index]).find('div.asset,div.position,div.start,div.end,div.entryRate,div.currentRate,div.payout').removeClass('winPosition').removeClass('lossPosition').addClass('tiePosition');
                                        }
                                    } else { //Put
                                        if (parseFloat(rate) < parseFloat(entryRate)){
                                            payout.html(parseFloat(((100 + profit) * amount)/100 ));
                                            $(positionElem[index]).find('div.asset,div.position,div.start,div.end,div.entryRate,div.currentRate,div.payout').removeClass('lossPosition').removeClass('tiePosition').addClass('winPosition');
                                        }else if(parseFloat(rate) > parseFloat(entryRate)){
                                            payout.html(parseFloat((100 - loss) * amount)/100)
                                            $(positionElem[index]).find('div.asset,div.position,div.start,div.end,div.entryRate,div.currentRate,div.payout').removeClass('winPosition').removeClass('tiePosition').addClass('lossPosition');
                                        }else{
                                            payout.html(amount);
                                            $(positionElem[index]).find('div.asset,div.position,div.start,div.end,div.entryRate,div.currentRate,div.payout').removeClass('winPosition').removeClass('lossPosition').addClass('tiePosition');
                                        }
                                    }
                                }
                            });
                        }
                    }
                }
            }catch(ex){
                console.log(ex);
            }
        }
    }, // end onItemUpdate()

    /* this event occurs when call/put is clicked */
    onClickCallPut: function(event){
        //$(this).find('input').removeClass('putPressed,callPressed').addClass($(this).attr('class') + 'Pressed');
        var positionType = $(this).attr('positiontype');
        
        //do tracking only if user has logged in
        if (AppData.isLoggedIn){
            //get assetId from the clicked button
            var assetId  = SixtySeconds.container.find('select#assetChoose option:selected').val();
            var optionId = -1 * assetId;

            $.post(AppData.url + AppData.pageId + '/selectedPositionTrack',
            {
                assetId:assetId,
                direction:positionType,
                optionId:optionId
            },

            {},
            'json');
        }
        
        if (positionType == 'call'){
            $('div.startButtonDisabled').removeClass('startButtonDisabled').addClass('startButton'); /* change the button */
            $(this).parents('ul.actions').find('input#sixtySeconds_call').addClass('callPressed');
            $(this).parents('ul.actions').find('input#sixtySeconds_put').removeClass('putPressed');
        }else{
            $('div.startButtonDisabled').removeClass('startButtonDisabled').addClass('startButton'); /* change the button */
            $(this).parents('ul.actions').find('input#sixtySeconds_put').addClass('putPressed');
            $(this).parents('ul.actions').find('input#sixtySeconds_call').removeClass('callPressed');
        }

        SixtySeconds.container.find('div#sixtySeconds_tradingZone div.leftSide input[name="position"]').val($(this).attr('class'));
    },

    /* this event occurs when the start button is clicked */
    onStartClick: function(event){
        try{
            
            if ($(this).hasClass('startButtonDisabled')) return; /* if no position is clicked - disable click on start */
            
            var assetId  = SixtySeconds.container.find('select#assetChoose option:selected').val();
            var amount   = SixtySeconds.container.find('div#sixtySeconds_tradingZone select.investmentAmountSelect option:selected').val();
            var ruleId   = SixtySeconds.container.find('select#assetChoose option:selected').attr('rule');
            var position = SixtySeconds.container.find('div#sixtySeconds_tradingZone div.leftSide input[name="position"]').val();
        
            $.post(AppData.url + AppData.pageId + '/selectedPositionTrack',
            {
                assetId:assetId,
                direction:'apply'
            },

            {},
            'json');
        
            if (position == ''){
                General.dialog(AppData.langHome.chooseDirection,AppData.langHome.error);
                return;
            }
        
            $.post(AppData.url + 'rpcProxy/newSixtySecondsOption',
            {
                assetId:assetId,
                amount:amount,
                ruleId:ruleId,
                position:position
            },
            function(result){
                if (result.status == "ok"){

                    //SixtySeconds.startTimer();

                    var startDate = new Date(parseInt(result.startDateUnix * 1000) + AppData.timeZoneOffset);
                    var endDate   = new Date(parseInt(result.endDateUnix * 1000) + AppData.timeZoneOffset);
                    /* start date */
                    var startDateHours = startDate.getHours();
                    if (startDateHours <10)
                        startDateHours = '0' + startDateHours;
                    var startDateMinutes = startDate.getMinutes();
                    if (startDateMinutes <10)
                        startDateMinutes = '0' + startDateMinutes;

                    var startDateSeconds = startDate.getSeconds();
                    if (startDateSeconds <10)
                        startDateSeconds =  '0' + startDateSeconds;

                    /* end date */
                    var endDateHours = endDate.getHours();
                    if (endDateHours <10)
                        endDateHours = '0' + endDateHours;
                    var endDateMinutes = endDate.getMinutes();
                    if (endDateMinutes <10)
                        endDateMinutes = '0' + endDateMinutes;

                    var endDateSeconds = endDate.getSeconds();
                    if (endDateSeconds <10)
                        endDateSeconds =  '0' + endDateSeconds;

                    var startDateStr = startDateHours + ':' + startDateMinutes + ':' + startDateSeconds;
                    var endDateStr   = endDateHours   + ':' + endDateMinutes   + ':' + endDateSeconds;

                    var newPosition = $('div#sixtySeconds_position_template').clone();
                    newPosition.attr('id','sixtySecondsPosition_' + result.assetId + '_' + result.optionId).removeClass('hidden')
                    .find('div.asset').html(result.assetName).end()
                    .find('div.position').attr('position',result.position).end()
                    .find('div.positionImg').addClass(result.position + 'position').end()
                    .find('div.start').html(startDateStr).end()
                    .find('div.end').html(endDateStr).end()
                    .find('div.entryRate').html(result.positionRate).end()
                    .find('div.currentRate').html(result.currentRate).end()
                    .find('div.payout').html(result.payout).end()
                    .find('input[name="profit"]').val(result.profit).end()
                    .find('input[name="loss"]').val(result.loss).end()
                    .find('input[name="amount"]').val(result.amount).end()
                    .find('input[name="positionId"]').val(result.positionId).end();

                    /* add the position to the positions grid */
                    if($('#sixtySeconds_positions').find('.sixtySeconds_position').length){
                        $('#sixtySeconds_positions').find('.sixtySeconds_position').last().after(newPosition);
                    }
                    else{
                        $('div#sixtySeconds_positions_inner').after(newPosition);
                    }
                        
                        
                    var clockContainer = $('div#sixtySecondsPosition_' + result.assetId + '_' + result.optionId)
                    .find('div.time');

                    /* start the timer */
                    SixtySeconds.timers[result.positionId] = {
                        container: clockContainer.parents('div.sixtySeconds_position')
                    }
                    var tzineClock = new TzineClock();
                    tzineClock.init(clockContainer, {
                        time:60,
                        callBackFunction:function(){
                            /* position ended */
                            clockContainer.parents('div.sixtySeconds_position').find('div.currentRate').html('');
                            if (typeof(AppData.langHome.expiring) != 'undefined')
                                var txt = AppData.langHome.expiring;
                            else
                                var txt = 'expiring';
                            clockContainer.parents('div.sixtySeconds_position').find('div.time').html(txt);
                            SixtySeconds.onEndPosition(clockContainer.parents('div.sixtySeconds_position'));
                        }
                    });

                /* update the customer balance */
                /* the balance updated with the live balance */
                /*$('span#currentBalance').html(result.balance);*/
                        
                        
                result['endDateStr'] = endDateStr;
                        
                /* show confirmation window */
                SixtySeconds.showConfirmationDialog(result);
            /* end of confirmation window */
                        
            }else{
                console.log('error occured - ' + result.status);
                switch (result.status){
                    case 'notLoggedIn':
                        $('#sixtySeconds_tradingZone').find('.popup').removeClass('hidden')
                        .find('div.popupTitle span')
                        .text(AppData.langHome.loginPopupTitle)
                        .end()
                        .end()
                        .find('div#notLoggedIn')
                        .removeClass('hidden');
                        break;
                    case 'suspended':
                        General.dialog(AppData.langHome.optionSuspended,AppData.langHome.error);
                        break;
                    case 'invalidPositionRate':
                        General.dialog(AppData.langHome.positionRateIsInvalid,AppData.langHome.error);
                        break;
                    case 'insufficientFunds':
                        General.dialog(AppData.langHome.insufficientFundsIsErrorPopupMessage,AppData.langHome.error);
                        break;
                    case 'riskSuspentionActivated':
                        General.dialog(AppData.langHome.riskSuspentionPopupMessage,AppData.langHome.riskSuspentionPopupTitle);
                        break;
                    case 'error':
                        General.dialog(AppData.langHome.error, AppData.langHome.error);
                        break;
                    case undefined:
                    General.dialog(AppData.langHome.suspendedContent,AppData.langHome.suspendedTitle);
                    break;
                }
            }
            },
            'json');
    }catch(ex){
        console.log(ex);
    }
},

/* this function will be called when the position ends after 60 seconds */
onEndPosition: function(container){
    var positionId = container.find('input[name="positionId"]').val();

    $.post(AppData.url + 'rpcProxy/getPositionInfo/' + positionId,
    {
        },
        function(positionInfo){
            if (positionInfo.status == 'won' || positionInfo.status == 'lost' || positionInfo.status == 'tie'){
                /* position expired */
                container.find('div.time').html(positionInfo.status.toUpperCase());
                container.find('div.payout').html(positionInfo.payout);
                container.find('div.currentRate').html(positionInfo.endRate);

                /* set color for the position */
                if (positionInfo.status == 'won'){
                    container.find('div:not(.time)').removeClass('lossPosition').removeClass('tiePosition').addClass('winPosition');
                }
                else if (positionInfo.status == 'lost')
                    container.find('div:not(.time)').removeClass('tiePosition').removeClass('winPosition').addClass('lossPosition');
                else{
                    container.find('div:not(.time)').removeClass('winPosition').removeClass('lossPosition').addClass('tiePosition');
                }

                container.find('div.time').attr('timeout',30);
                container.fadeOut(300).fadeIn(300);

                /* update the customer balance */
                $('#currentBalance').text(positionInfo.customerBalance);
            }else{
                /* not expired yet */
                var checkTimeout = (100*Math.random()) + 1000;
                setTimeout(
                    function(){
                        SixtySeconds.onEndPosition(container);
                    },checkTimeout
                    );
            }
        },
        'json');
},

/* init the progress bar to 100% */
initProgressBar: function(){
    SixtySeconds.container.find('div.progressBar').progressBar(100, {
        showText: false
    });
},

/* start the timer and count 60 seconds */
startTimer: function(){
    /*var timerObj = new Countdown();
		timerObj.init(30, 'timeLeftValue', function(){
            console.log('after countdown');
        });*/

    var timer = setInterval(function(){
        var currentSec = $('span#timeLeftValue').html();
        currentSec = parseInt(currentSec)-1;
        $('span#timeLeftValue').html(currentSec);
                                            
        /* update progress bar */
        $('div.progressBar').progressBar( (100 * currentSec)/60  , {
            showText: false
        } );

        /* timeout */
        if (currentSec<=0){
            clearInterval(timer);
            SixtySeconds.resetTimer();
        }

    }, 1000);
},
resetTimer: function(){
    $('span#timeLeftValue').html('60'); /* set back to 60 seconds */
    SixtySeconds.initProgressBar();
},

/* add to subscribed assets array the assets that should be subscribed in order to get rate updates
     * for the sixty seconds box
     */
subscribe:function(assetsToSubscribe){
    var assets   = SixtySeconds.container.find('select#assetChoose option[class!="title"]');
    assets.each(function(index){
        var itemName = 'asset_' + $(this).val() + '_' + $(this).val() * (-1) + '_' + AppData.whiteLabelName;
        if (-1 === jQuery.inArray( itemName, assetsToSubscribe) || typeof(jQuery.inArray( itemName, assetsToSubscribe))=='undefined' )
            assetsToSubscribe.push (itemName);
    });
    return assetsToSubscribe;
}
}
$(document).ready(function() {
    SixtySeconds.init();
    setTimeout(function(){
        SixtySeconds.loadChartData('sixtySecondsGraph');
    }, 60000)
});


/* Rate Highlight */
function RateHighlight() {
    //private vars
    var startColor = false;

    var endColor = false;

    var time = false;

    //private methods

    /* highlight the element */
    function highlight(container)
    {
        container.find('div.currentRate')
        .animate({
            backgroundColor: RateHighlight.startColor
            }, RateHighlight.time)
        .animate({
            backgroundColor: RateHighlight.endColor
            }, RateHighlight.time);
    }

    //public methods
    this.init = function(container, opts){

        RateHighlight.startColor = opts.startColor;
        RateHighlight.endColor   = opts.endColor;
        RateHighlight.time       = opts.time;

        if(!container)
        {
            try{
                console.log("Invalid selector!");
            } catch(e){}

            return false;
        }

        highlight(container);
    };
}


