var SixtySeconds = {
    /* keep the sixty seconds game container */
	container: null,
    assetSelect:null,
    chart_id:'sixtySecondsGraph',
    timers: {}, /* keep the timers instances */

	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: '300',
                height: '170',
                modal:true,
                dialogClass: 'baseTheme sixtySecondsDialog',
                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').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.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_settings 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_settings select#investmentAmountSelect option').remove();

                    var options = '';
                    $.each(ruleInfo.amountRange,function(index,element){
                        options += '<option value="' + element + '">' + element + ((AppData.isLoggedIn) ? AppData.accountCurrency : '$') + '</option>';
                    });

                    /* add new options to the select */
                    SixtySeconds.container.find('div#sixtySeconds_settings select#investmentAmountSelect').append(options);
                    SixtySeconds.container.find('div#sixtySeconds_settings input#investmentAmountSelect_input').remove();
                    SixtySeconds.container.find('div#sixtySeconds_settings 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' && $('#' + chart_id).length>0){
		var assetId = $('#' + chart_id).parent('div.graphContainer').attr('id').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
                                 var a=lastUpdated.substr(-2,2)
					   if (graphElement.series[0].data.length > 1) {
						   //Remove the last (current) rate
                                                 if (a%2 !=0)
							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, div.time').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, div.time').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, div.time').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, div.time').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, div.time').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, div.time').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_settings 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 */
                        $('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':General.dialog(AppData.langHome.notLoggedin,AppData.langHome.notLoggedinContent);
                                break;
                            case 'suspended':General.dialog(AppData.langHome.optionSuspended,AppData.langHome.riskSuspentionPopupMessage);
                                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.riskSuspentionPopupTitle,AppData.langHome.riskSuspentionPopupMessage);
                                break;
                            case 'error':General.dialog(AppData.langHome.error, AppData.langHome.error);
                                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 */
                        //$('span#currentBalance').html(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);
	};
}

