/*
    Document   : MyPositions
    Created on : 09/08/2010
    Author     : Nadav
    Description:
        Purpose of the js: my positions code for all platforms
*/

var MyPositions  =  {
        container: null,
        todayOpenPositions : new Array(), //array of objects that contains position that closed today
        positionDialog: null,
        rollOverPercentage: 30, /* set the percentage to the new position using roll over function - need to move to site options */

        init: function(){
                MyPositions.container = $('div.container');
                MyPositions.fillTodayOpenPositions();
                MyPositions.updateMyPayout();
        },

        /* run through the open positions elements on the page and fill the today open positions array */
        fillTodayOpenPositions: function(){
            MyPositions.todayOpenPositions = null; /* reset current array */
            MyPositions.todayOpenPositions = new Array(); /* reset current array */
            
            // Click on a position, expands it and shows a graph
            $('div.leftSide div[class="open_positions today"] ul li.open_position').each(function(){
                $(this).unbind('click',MyPositions.onClickPosition).bind('click',{},MyPositions.onClickPosition);
                
                /* roll over and double up */
                $(this).find('a.rollOver').unbind('click',MyPositions.onClickRollOver).bind('click',{},MyPositions.onClickRollOver);
                $(this).find('a.x2').unbind('click',MyPositions.onClickDoubleUp).bind('click',{},MyPositions.onClickDoubleUp);
                
                var endDate = new Date(parseInt($(this).attr('enddate')) * 1000);

                var optionId         = parseInt($(this).attr('optionid'));
                var assetId          = parseInt($(this).attr('id').split('_').slice(3,4));
                var positionId       = parseInt($(this).attr('id').split('_').slice(2,3));
                var elementId        = 'open_position_' + positionId + '_' + assetId;
                var noPositionTime   = parseInt($(this).attr('times').split('_').slice(0,1));
                var lastPositionTime = parseInt($(this).attr('times').split('_').slice(1,2));
                var noRollOverTime 	=  parseInt($(this).attr('norollover'));

                MyPositions.todayOpenPositions.push({
                                                    id: positionId,
                                                    elementId: elementId,
                                                    optionId: optionId,
                                                    endDate: endDate,
                                                    noPositionTime:noPositionTime,
                                                    lastPositionTime:lastPositionTime,
                                                    noRollOverTime: noRollOverTime
                                                });
            });
        },

        /* this function is called every second
         * Check the conditions for double and rollover buttons and enable/disable these buttons*/
        onUpdateTime: function() {
            if (MyPositions.todayOpenPositions){
                /* find positions with this option id and disable double up button */
               $.each(MyPositions.todayOpenPositions , function(index,elem){
                    /* time difference between option end time and now */
                    var that = $(this)[0];
                    
                    var timeDifference =  (that.endDate.getTime() - General.dateTime.getTime())/1000;
					if(timeDifference < that.noRollOverTime * 60)
						MyPositions.enableDisableButtons(that.elementId , 'disable');
					
                    $('li#' + that.elementId).find('li.controls a.x2, li.controls a.x2disabled , li.controls a.rollOver, li.controls a.rollOverdisabled').attr('style', '');
                    $('li#' + that.elementId).next().find('div.myPositionsControls a').attr('style', 'none');
               });
            }
        },

        /* Check the conditions for double and rollover buttons and enable/disable these buttons*/
        enableDisableButtons: function(elementId,status){
            /* if there are today open positions */
            if (MyPositions.todayOpenPositions){
               if (status == 'disable'){
                    //$('li#' + elementId).find('a.x2').removeClass('x2').addClass('x2disabled').unbind('click').bind('click',{},General.stopPropagation);
                    $('li#' + elementId).find('a.rollOver').removeClass('rollOver').addClass('rollOverdisabled')
                                        .unbind('click').bind('click',{},function(event){
                                                                                    General.dialog(AppData.langHome.cannotRollover, AppData.langHome.error);
                                                                                    General.stopPropagation(event);
                                                                                   });
                    
                    //$('li#' + elementId).next().find('a.x2').removeClass('x2').addClass('x2disabled').unbind('click').bind('click',{},General.stopPropagation);
                    $('li#' + elementId).next().find('a.rollOver').removeClass('rollOver').addClass('rollOverdisabled')
                                        .unbind('click').bind('click',{},function(event){
                                                                                    General.dialog(AppData.langHome.cannotRollover,AppData.langHome.error);
                                                                                    General.stopPropagation(event);
                                                                                   });
               }
               else if (status == 'enable'){
                  //$('li#' + elementId).find('a.x2disabled').removeClass('x2disabled').addClass('x2').bind('click',{},MyPositions.onClickDoubleUp);
                  $('li#' + elementId).find('a.rollOverdisabled').removeClass('rollOverdisabled').addClass('rollOver')
                                      .unbind('click').bind('click',{},MyPositions.onClickRollOver);
                  
                  //$('li#' + elementId).next().find('a.x2disabled').removeClass('x2disabled').addClass('x2').bind('click',{},MyPositions.onClickDoubleUp);
                  $('li#' + elementId).next().find('a.rollOverdisabled').removeClass('rollOverdisabled').addClass('rollOver')
                                             .unbind('click').bind('click',{},MyPositions.onClickRollOver);
               }
            }
        },

       
       onClickRollOver: function(event){
       	
       	 
           var liElem = null;
           if ($(this).parent().hasClass('rolloverDiv')){
               /* big button in the graph section */
               liElem         = $(this).parent().parent().parent().prev();
           }else{
               liElem   = $(this).parent().parent().parent();
           }

         
           
           var optionId       = liElem.attr('optionid');
           var newOptionId    = null;
           
           /* if small button is clicked */
           var positionId     = liElem.attr('id').split('_').slice(2,3)[0];

           var positionAmount = null;
           var positionRate   = null;
           var position       = null; /* call/put */
           var assetId        = null;
           var expiryExists   = false; /* true if future expiries exists and we can choose them */
           
           /* profit and loss of the new option */
           var profit = null;
           var loss = null;
           
           /*$('div#dialog2').find('div.firstRow div.right').html(expiryTime);*/
           var optionsIds = new Array();
           var endTime = null;
           var expirySelect = null;
           var currentExpiryTime = null;
           var currentOptionEndTime = null;

           optionsIds[0] = parseInt(optionId);
           $.ajax({
                    type: "POST",
                    url:AppData.url + AppData.pageId + '/getOptionEndDate',
					data:{optionIds: JSON.stringify(optionsIds)},
                    async:false,
                    dataType:'json',
                    error: function(){
                        console.log("cant rollover: general error");
                      General.dialog(AppData.langHome.error, AppData.langHome.error)
                      return;
                    },
                    success:function(data){
                       endTime = new Date(data[0].endDate + AppData.timeZoneOffset);

                       assetId = data[0].assetId;

                        /* the timestamp of current option endTime */
                        currentOptionEndTime = data[0].endDate / 1000;
                       }
                   });

            var hours   = endTime.getHours();
            var minutes = endTime.getMinutes();
            if (hours<10)   hours = '0' + hours;
            if (minutes<10) minutes = '0' + minutes;
            currentExpiryTime = hours + ':' + minutes;
			

          $.ajax({
                     type: "POST",
                     url: AppData.url + AppData.pageId + '/getAssetOpenOptions',
                     data:{assetId: assetId},
                     async:false,
                     dataType:'json',
                     success: function(objectRecieved){
                            if(typeof objectRecieved!= 'object'){
                                //Home.refresh(); // if there is no open options for specific asset then refresh page
                            }
                            var optionsByDate = objectRecieved.options;
                            /* insert expiry times into select box */
                            $.each(optionsByDate, function(key, option){
                               if (key == "today"){
                                   /* show only todays options */
                                   if (option){
                                        expirySelect = $('<select>').addClass('expirySelect');
                                        var optionStr = '';
                                        $.each(option, function(key, todayOption){
                                            /* show only today future expiry times */
                                            if (todayOption.endDateUnix > currentOptionEndTime)
                                                optionStr += '<option value=' + todayOption.id + '>' + todayOption.expireTime + '</option>';
                                        });
                                        if (optionStr != ''){
                                            expiryExists = true;
                                        }
                                        expirySelect.append(optionStr);
                                        /* check if last today option is allowed for rollover */
                                        if (AppData.siteOptions['lastDayOptionRollover']['value'] == ''){
                                            /* not allowed - delete last option from the expire time select */
                                            expirySelect.find('option:last').remove();

                                            /* check how many options exists in rollover */
                                            if (!expirySelect.find('option').length)
                                                expiryExists = false;
                                        }
                                   }
                               }
                               
                            });
                     }
				//var selectedOption = Home.loadOptions(element, optionsByDate);
                 });

              if (!expiryExists){
                  console.log("cant rollover: noFuturesExpiries");
                  General.dialog(AppData.langHome.noFuturesExpiries,AppData.langHome.error);
                  event.preventDefault();
                  return false;
              }
              
              var prevPositionAmount = null;// previous amount of the position
              $.ajax({type: "POST",
                    url:'rpcProxy/getPositionInfo/' + positionId,
                    async:false,
                    success: function(data){
                        /* fill the missing parameters for the newPosition RPC call */

                        /* calculate the amount for the new position */
                        positionAmount = parseFloat(data.amount * (MyPositions.rollOverPercentage/100) + parseInt(data.amount)).toFixed(2);
                        profit = data.profit;
                        loss   = data.loss;
                        position = data.position;
                        
                        prevPositionAmount = data.amount;
                    },
                    dataType: 'json'
                });

             
          /*destory old dialog, if exists*/
          if(MyPositions.positionDialog !== null){
              MyPositions.positionDialog.remove();
              MyPositions.positionDialog = null;
          }
          /* insert the data into the dialog */
		  
		  if(AppData.accountCurrencyCode == 'USD') userCurrency = '&#36;';
		  else userCurrency = '&#8364;';
		  
          var dialogDiv =  $('#dialog2')//.clone()
          dialogDiv.find('div.firstRow   div.right').html(currentExpiryTime).end()
          .find('div.secondRow  div.right').html(expirySelect).end()
          .find('div.thirdRow   div.right').html(positionAmount + userCurrency);

           /* Show confirmation window */
           /*var temp      =  $('div#dialog2').html();
           var dialogDiv =  $('<div/>').html(temp).addClass('platformDialog');*/
           MyPositions.positionDialog = dialogDiv;
           
           MyPositions.positionDialog.dialog({
                autoOpen: false,
                width: '237',
                height: '273',
                modal:true,
                resizable: false,
                dialogClass: 'platformDialog',
                closeText: 'close' //TODO:this will need to be tanslatable
           });

           MyPositions.positionDialog.parent()
                .find('a.ui-dialog-titlebar-close span.ui-icon').removeClass('ui-icon');
     	   //prevent default close event
           MyPositions.positionDialog.parent()
                .find('a.ui-dialog-titlebar-close').unbind('click')
           $('#dialog2').find('select').selectbox(
				{
					inputClass: 'selectboxTime',
					containerClass: 'selectbox-wrapperTime',
					scrollBar: true,
					chainTitle: true
				}
            );

           /* events for buttons */
           /* apply button */
           MyPositions.positionDialog.find('a.btnApply').unbind('click').bind('click',{},function(){
               newOptionId = dialogDiv.find('div[id="_container"] ul li.selected').attr('id').split('_').splice(2,1)[0];

               if (MyPositions.positionDialog != null)
                    MyPositions.positionDialog.dialog('close');

                $.post(
                    'rpcProxy/rollover',
                     {
                                positionId: positionId,
                                optionId  : newOptionId,
                                assetId   : assetId,
                                newAmount:  positionAmount,
                                percentage: MyPositions.rollOverPercentage
                      },
                            function(data){
                                if (data.status == 'true'){
                                    /* no errors */
                                    /* create params as in new position form */
                                    var params = new Array();

                                    params[0] = new Array();
                                    params[1] = new Array();
                                    params[2] = new Array();
                                    params[3] = new Array();
                                    params[4] = new Array();
                                    params[5] = new Array();


                                    params[0]['name'] = 'amount';
                                    params[0]['value'] = positionAmount;
                                    params[1]['name'] = 'position';
                                    params[1]['value'] = positionId[0];
                                    params[2]['name'] = 'optionId';
                                    params[2]['value'] = optionId;
                                    params[3]['name'] = 'assetId';
                                    params[3]['value'] = assetId;
                                    params[4]['name'] = 'profit';
                                    params[4]['value'] = profit;
                                    params[5]['name'] = 'loss';
                                    params[5]['value'] = loss;

                                     //Apply browser (user) timezone offset, to correct times
									var userTime = new Date();	
                                    var newPositionEndTime = new Date(data.endDate * 1000 + AppData.timeZoneOffset);
                                    
                                    var newHours   = newPositionEndTime.getHours();
                                    var newMinutes = newPositionEndTime.getMinutes();
                                    if (newHours<10)   newHours = '0' + newHours;
                                    if (newMinutes<10) newMinutes = '0' + newMinutes;
									
									if(AppData.accountCurrencyCode == 'USD') userCurrency = '&#36;';
									else userCurrency = '&#8364;';
									
                                    liElem.find('li.investment').html(positionAmount + userCurrency);
                                    liElem.find('li.time').html(newHours + ':' + newMinutes);
                                    liElem.attr('optionId',newOptionId);
                                    liElem.attr('endDate',data.endDate);

                                    var elementClasses = liElem.attr('class').split(' ');
                                    $.each(elementClasses, function(index, elem){
                                        if(elem.indexOf('optionPosition') !== -1){
                                            liElem.removeClass(elem);
                                            liElem.addClass('optionPosition' + newOptionId);
                                        }
                                    })

                                    /* update today open positions */
                                    MyPositions.fillTodayOpenPositions();
                                    liElem.addClass('special'); /* yellow background*/


                                    //Update balance
                                    var currentBalance = parseInt($('#currentBalance').text());
                                    $('#currentBalance').text(currentBalance - (positionAmount - prevPositionAmount));
                                }
                                else{
                                    console.log('cant rollover: '+data.status);
                                    switch(data.status){
                                        case 'notLoggedIn':
                                            General.dialog(AppData.langHome.notLoggedIn,AppData.langHome.error)
                                        break;
                                        case 'optionIsClosed':
                                            General.dialog(AppData.langHome.optionIsClosedErrorPopupMessage,AppData.langHome.error)
                                        break;
                                        case 'insufficientFunds':
                                            General.dialog(AppData.langHome.insufficientFundsIsErrorPopupMessage,AppData.langHome.error);
                                        break;
                                        case 'invalidPositionRate':
                                            General.dialog(AppData.langHome.positionRateIsInvalid,AppData.langHome.error);
                                        break;
                                        case 'suspended':
                                            General.dialog(AppData.langHome.optionSuspended,AppData.langHome.error);
                                        break;
                                        case 'riskSuspentionActivated':
                                            General.dialog(AppData.langHome.riskSuspentionPopupMessage,AppData.langHome.error);
                                        break;
										case 'noTime':
											General.dialog(AppData.langHome.noRolloverTimePopupMessage,AppData.langHome.error);
											break;
										case 'positionWinning':
											General.dialog(AppData.langHome.positionIsWinningPopupMessage,AppData.langHome.error);
											break;
                                        case 'numberOfRolloversExceeded':
                                            General.dialog(AppData.langHome.numberOfRolloversExceededPopupMessage,AppData.langHome.error);
                                            break;
                                    }
                                }
                            },
                            'json'
                       );
                 if (MyPositions.positionDialog != null){
                    MyPositions.positionDialog.dialog( "destroy" );
                    MyPositions.positionDialog = null;
                 }
               });
           /* cancel button */
           MyPositions.positionDialog.find('a.btnCancel').bind('click',{},function(){
               if (MyPositions.positionDialog != null){
                 MyPositions.positionDialog.dialog('destroy');
                 MyPositions.positionDialog = null;
               }
           });
           /* close button */
           MyPositions.positionDialog.parent().find('a.ui-dialog-titlebar-close').bind('click',{},function(){
             if (MyPositions.positionDialog != null){
                 MyPositions.positionDialog.dialog('destroy');
                 MyPositions.positionDialog = null;
               }
           });
           
           
           MyPositions.positionDialog.dialog('open');
           //$('#rolloverDialog').css('height', '');//quick fix
           
           event.stopPropagation();//prevent of opening graph container
           
       },

       /* Double up functionality
        * Create new position with the same values as current position
        */
       onClickDoubleUp: function(event){

           var that = $(this);
           /* show dialog */
           var dialogDiv =  $('#dialog1').clone()
                                .attr('id', 'doubleUpDialog');

           MyPositions.positionDialog = dialogDiv;
           MyPositions.positionDialog.dialog({
                title: AppData.langHome.newPositionIsMade,
                autoOpen: false,
                resizable: false,
                width: '237',
                height: '273',
                modal:true,
                dialogClass: 'platformDialog',
                closeText: 'close X' //TODO:this will need to be tanslatable
           });
           MyPositions.positionDialog.parent()
                .find('a.ui-dialog-titlebar-close span.ui-icon').removeClass('ui-icon')
            /* apply button */
            MyPositions.positionDialog.find('a.btnApply').unbind('click').bind('click',{},function(){
                                MyPositions.positionDialog.dialog('close');


           /* if small button is clicked */
           var liElem     = that.parent().parent().parent();
           var positionId = liElem.attr('id').split('_')[2];

           /* if large button is clicked */
           if (typeof(positionId) == 'undefined'){
               positionId = that.parent().parent().parent().attr('id').replace(/\D/g,'');
           }

           var amount     = null;
           var position   = null;
           var assetId    = null;
           var loss       = null;
           var profit     = null;
           var optionId   = null;

           var params = new Array();

           $.ajax({type: "POST",
                    url:'rpcProxy/getPositionInfo/' + positionId,
                    async:false,
                    success: function(data){
                        /* fill the missing parameters for the newPosition RPC call */
                        amount   = data.amount;
                        position = data.position;
                        assetId  = data.assetId;
                        loss     = data.loss;
                        profit   = data.profit;
                        optionId = data.optionId;
                    },
                    dataType: 'json'
                });
           /* create new position */
           $.ajax({
					type: "POST",
					url: 'rpcProxy/newPosition',
					data: "amount=" + amount + "&position=" + position + "&assetId=" +assetId + "&loss=" + loss + "&profit=" + profit + "&optionId=" + optionId,
					async: false,
					dataType: 'json',
					error : function() {
						General.dialog(AppData.langHome.error,AppData.langHome.error)
					},
					success: function(result){
							/*** end of bug fix ***/
						if (typeof result == 'object') {

                            /* create params as in new position form */
                            var params = new Array();

                            params[0] = new Array();
                            params[1] = new Array();
                            params[2] = new Array();
                            params[3] = new Array();
                            params[4] = new Array();
                            params[5] = new Array();


                            params[0]['name'] = 'amount';
                            params[0]['value'] = amount;
                            params[1]['name'] = 'position';
                            params[1]['value'] = position;
                            params[2]['name'] = 'optionId';
                            params[2]['value'] = optionId;
                            params[3]['name'] = 'assetId';
                            params[3]['value'] = assetId;
                            params[4]['name'] = 'profit';
                            params[4]['value'] = profit;
                            params[5]['name'] = 'loss';
                            params[5]['value'] = loss;

                            /* add new position */
							Position.addPosition(params, result , function(){
                                     /* after position added do some animation
                                    * the scroll is a bit tricky because we don't have the last position in the positions list when we want to scroll there
                                    * The solution: get the last positions id and get the height of this LI
                                    * then we scroll to last position LI -5 pixels */
                                   var idOfLastPosition =  $('ul.positions li[id*="open_position_"]:last').attr('id');
                                   var myPos = MyPositions.findPos(document.getElementById(idOfLastPosition));

                                   $('body').scrollTo( parseInt(myPos[1] - 5) + 'px',800);

                                   /* animate the background of the positions LI */
                                   var new_pos = $('ul.positions li[id*="open_position_"]:last')
                                   new_pos.fadeTo(800, 0.5, function(){});
                                   new_pos.fadeTo(800, 1, function(){});
                                   new_pos.addClass('special'); /* change background of the element */

                                   MyPositions.positionDialog.dialog('destroy');
                                   MyPositions.positionDialog = null;

                                   /* update payout */
                                   MyPositions.updateMyPayout();
                            }, 'open', false);

                             /* prevent openning graph */
                             event.stopPropagation();

                           /* The new position is made - show popup */
                                     /* insert the data into the dialog */
                          if(MyPositions.positionDialog !== null){
                              MyPositions.positionDialog.dialog( "destroy" );
                          }
                           return false;
                           
						} else { //Error! -> user not logged in
							switch(result){
								case 'notLoggedIn':
                                    General.dialog(AppData.langHome.notLoggedIn,AppData.langHome.error)
									break;
								case 'optionIsClosed':
                                    General.dialog(AppData.langHome.optionIsClosedErrorPopupMessage,AppData.langHome.error)
									break;
								case 'insufficientFunds':
                                    General.dialog(AppData.langHome.insufficientFundsIsErrorPopupMessage,AppData.langHome.error);
									break;
								case 'invalidPositionRate':
                                    General.dialog(AppData.langHome.positionRateIsInvalid,AppData.langHome.error);
									break;
								case 'suspended':
                                    General.dialog(AppData.langHome.optionSuspended1,AppData.langHome.error);
									break;
								case 'riskSuspentionActivated':
                                    General.dialog(AppData.langHome.riskSuspentionPopupMessage,AppData.langHome.error);
									break;
							}

                              event.stopPropagation();
						}
				   }
				});



                           });
                           MyPositions.positionDialog.dialog('open');


            MyPositions.positionDialog.find('a.btnCancel').unbind('click').bind('click',{},function(){
                MyPositions.positionDialog.dialog('close');
                return;
            });

            return false;
          
                
               
       },
       
    addTodayPosition : function(positionProps, optionProp, params) {
				var positionId = positionProps.positionId;
        		var optionEndDate = new Date(parseInt(optionProp['endDate']) + AppData.timeZoneOffset);
            	var optionEndHour = optionEndDate.getHours();
            	var optionEndMinute = optionEndDate.getMinutes();
            	if(optionEndHour < 10 ) optionEndHour = '0' + optionEndHour;
            	if(optionEndMinute < 10) optionEndMinute = '0' + optionEndMinute;

                /* type of position regular or custom */
                var type=false;
                if (optionProp.ownedBy != 0)
                    type = 'custom';
                else
                    type = 'regular'
					
					if(AppData.accountCurrencyCode == 'USD') userCurrency = '&#36;';
					else userCurrency = '&#8364;';
					
					positionTodayHTML = '<li id="open_position_' + positionId + '_' + optionProp['assetId'] + '" class="open_position optionPosition'+ optionProp['id'] + '" optionid="' + optionProp['id'] + '" endDate="' + optionProp['endDate']/1000 +  '" profit="' + optionProp['profit'] + '" loss="' + optionProp['loss'] + '" payout="0" times="' + optionProp['noPositionTime'] + '_' + optionProp['lastPositionTime'] + '" norollover="' + optionProp['noRolloverTime'] + '" type=' + type + '>';
					positionTodayHTML +=	'<ul>';
					positionTodayHTML +=	'<li class="name" title="' + optionProp['assetName'] + '">' + optionProp['assetName'] + '</li>';
					positionTodayHTML +=	'<li class="time">' + optionEndHour + ':' + optionEndMinute + '</li>';
					positionTodayHTML +=	'<li class="investment">' + userCurrency + params.amount + '</li>';
					positionTodayHTML +=	'<li class="arrow"><img src="appProxy/site/home/optionArr' + params.position + '.png" style="_overflow:hidden;_margin-top:11px;"/></li>';
					positionTodayHTML +=	'<li class="asset">' + positionProps.positionRate + '</li>';
					positionTodayHTML +=    '<li class="controls">';
                    if (optionProp.ownedBy == 0){
                        positionTodayHTML +=    '<a class="rollOver" href="javascript:void(0);" style="display:none"></a>';
                        positionTodayHTML +=    '<a class="x2" href="javascript:void(0);"  style="display:none"></a></li>';
                    }else{
                        positionTodayHTML +=    '<a style="display:block;margin-top:-7px" href="javascript:void(0);"></a>';
                        positionTodayHTML +=    '<a class="x2" href="javascript:void(0);"  style="display:none;margin-top:-7px"></a></li>';
                    }
                        
                    positionTodayHTML +=	'</ul>';
					positionTodayHTML += '</li>';
                                        

					$('ul.positions').append(positionTodayHTML).find('li.name').truncate(10);
					$('ul.positions')
						.find( '#open_position_' + positionId + '_' + optionProp['assetId'])
						.unbind('click',MyPositions.onClickPosition).bind('click',{},MyPositions.onClickPosition)
                        .find('a.rollOver').unbind('click',MyPositions.onClickRollOver).bind('click',{},MyPositions.onClickRollOver).end()
                        .find('a.x2').unbind('click',MyPositions.onClickDoubleUp).bind('click',{},MyPositions.onClickDoubleUp);

                        if (optionProp.ownedBy != 0){
                            $('ul.positions').find( '#open_position_' + positionId + '_' + optionProp['assetId'])
                                             .find('div.rolloverDiv').remove();
                            $('ul.positions').find( '#open_position_' + positionId + '_' + optionProp['assetId'])
                                             .find('div.x2Div').css('margin-left','85px');
                        }


					///$('ul.positions').show(); this is not working
					$('div.today').removeClass('hidden');

					MyPositions.todayOpenPositions.push({
														id: parseInt(positionId),
														optionId: parseInt(params.optionId),
                                                        elementId: 'open_position_' + positionId + '_' + positionProps.assetId,
														endDate: optionEndDate,
                                                        noPositionTime:parseInt(optionProp['noPositionTime']),
                                                        lastPositionTime:parseInt(optionProp['lastPositionTime']),
                                                        noRollOverTime:optionProp['noRolloverTime'],
                                                        ownedBy:optionProp['ownedBy']
													});
                    /* update open trades payout */
                    var payoutElement = $('div.open_positions div.content ul.positionsInfo li.payoutAmount');
                    var currentPayoutAmount = parseFloat(payoutElement.html().substr(1));
                    var newPayout = currentPayoutAmount + parseFloat(params.amount);
					if(AppData.accountCurrencyCode == 'USD') userCurrency = '&#36;';
					else userCurrency = '&#8364;';
                    payoutElement.html(userCurrency + newPayout.toFixed(2));
                    
                    //open the position graph
                    
                    $('ul.positions').find('li#' + 'open_position_' + positionId + '_' + optionProp['assetId'])
                    				 .click();
                    
                    /* add this position to global_positions table in gcp */
                    $.get( 'rpcProxy/addGlobalPosition/' + positionId, {}, function(data){}, 'json' );

    },
/**
     * When a customer clicks on an open position item a container with a graph and a flip
     * button is created, it looks like this:
     *
     * <div id="openPositionGraphContainer_<positionId>">
     *  <div id="openPositionGraphContainer_<positionId>_">
     *     <!-- Here the flash object gets created, it replaces this div -->
     *  </div>
     *
     *  <input type="button" class="flipPositionButton" />
     *
     * </div>
     */
    onClickPosition: function() {
        var parts = this.id.split('_');
        var positionId = parts[2];
        var assetId    = parts[3];
        var optionId = $(this).attr('optionId');
		var positionType = $(this).attr('positiontype');

        var containerId = 'openPositionGraphContainer_' + positionId;
		var graphContainerId = containerId + '_';

        if ( 0 === $(this).next('#' + containerId).size() ) {

            var graphDiv = $('<div/>').attr('id', containerId)
                       .insertAfter(this)
                       .append( $('<div/>')
                                .attr('id', graphContainerId)
				.addClass('positionGraph')
                        )
                       .hide();
                       
			Graphs.graphs[graphContainerId] = {
                    currRate: new Array(0, 0),
                    itemName: 'asset_' + assetId + '_' + optionId + '_' + AppData.whiteLabelName,
					series : {},
					options : {}
             };
			$.ajax({
                url: AppData.url + 'home/getOpenPositionGraphJSON/' + positionId,
                method: 'GET',
                dataType: 'json',
                success: function (graphData) {

					Graphs.graphs[graphContainerId].series = [ graphData.series ];
					Graphs.graphs[graphContainerId].options = graphData.options;
					Graphs.redraw(graphContainerId);

					Graphs.startStreaming();
				}

				
			});

                var controls = '<div class="myPositionsControls">';
                if (positionType == 'custom'){
                    controls +='<div class="x2Div" style="float:none;margin-right:0px;margin:0 auto;">';
                    controls +='<a class="x2 button" style="display:none;" href="javascript:void(0);">'+ AppData.langHome.doubleUp +'</a>';
                }else if (positionType == 'regular'){
                    controls +='<div class="x2Div">';
                    controls +='<a class="x2 button" style="display:none" href="javascript:void(0);">'+ AppData.langHome.doubleUp +'</a>';
                }

                controls +='</div>';
                if (positionType == 'regular'){
                    controls +=' <div class="rolloverDiv">';
                    controls +='<a class="rollOver button" href="javascript:void(0);" style="display:none">'+ AppData.langHome.rollOver +'</a>';
                }else if (positionType == 'custom'){
                }
                controls +='<div class="clear"></div></div>';

                graphDiv.append(controls);
                //bind the buttons
                graphDiv.find('a.rollOver').unbind('click',MyPositions.onClickRollOver).bind('click',MyPositions.onClickRollOver);
                graphDiv.find('a.x2').unbind(MyPositions.onClickDoubleUp).bind('click',{},MyPositions.onClickDoubleUp);


            } // end if ( 0 === ... )

            $('#' + 'openPositionGraphContainer_' + positionId).toggle();
            $(this).toggleClass('selected');

       },
       onMinuteEnd: function(){
		$.each(MyPositions.todayOpenPositions, function(i, todayPosition){
			if(todayPosition.endDate.getTime() < General.dateTime.getTime()){
				Position.onOptionEnd(todayPosition.optionId)
				delete 	MyPositions.todayOpenPositions[i];
			}

		});
       },

    /* this function finds the coordinates of obj element in the page and returns (x,y) of the element*/
	findPos: function(obj)  {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
				curleft = obj.offsetLeft
				curtop = obj.offsetTop
				while (obj = obj.offsetParent) {
						curleft += obj.offsetLeft
						curtop += obj.offsetTop
				}
		}
		return [curleft,curtop];
	},


    /* update My Payout in open positions according to the positions rate */
    updateMyPayout: function(){
        /* save total amount of open positions */
		var totalAmount = 0;
		/* used for calculation of current real time payout */
		var totalPayout = 0;

		$('div.open_positions div.content ul.positions li[id*="open_position_"]').each(function(){
			totalAmount += parseFloat($(this).find('li.investment').html().substr(1));
			totalPayout += parseFloat($(this).attr('payout'));
		});
        
		var myPayout = parseFloat(totalPayout) - parseFloat(totalAmount);
		
		if(AppData.accountCurrencyCode == 'USD') userCurrency = '&#36;';
		else userCurrency = '&#8364;';
		
		if (myPayout > 0){
			$('div.open_positions div.content ul.positionsInfo li.payoutAmount')
			.html(userCurrency + parseFloat(totalPayout).toFixed(2))
			.css('color','#203f5d');
		}
		else if(myPayout < 0){
			$('div.open_positions div.content ul.positionsInfo li.payoutAmount')
			.html(userCurrency + parseFloat(totalPayout).toFixed(2))
			.css('color','#8d2e06');
		}else{
			$('div.open_positions div.content ul.positionsInfo li.payoutAmount')
			.html(userCurrency + parseFloat(totalPayout).toFixed(2))
			.css('color','#4E4E4E');
		}
    },

    /* update payout in the positions LI in the open positions section */
    updatePositionPayout: function(itemName,pricingRate){

        //console.log('** in update position payout **');

        var elem = null;
        /* find this element in open positions */
        var optionId = itemName.split('_').splice(2,1)[0];
        //console.log('option id from itemname = ' + optionId);
        
        $('div.open_positions div.content li[id*="open_position_"]').each(function(index){

           //console.log('option id from open position = ' + $(this).attr('optionid'));
			
			
            if ($(this).attr('optionid') == optionId){
                elem = $(this);
                if (elem == null) return;

				var elemId = elem.attr('id');
                var positionType = elem.find('li.arrow img').attr('src').toLowerCase();
                if (positionType.indexOf('call') !== -1)
                    positionType = 'call';
                else
                    positionType = 'put';
                var strikeRate   = elem.find('li.asset').html();
                var amount       = parseFloat(elem.find('li.investment').html().substr(1)); //without the currency sign
                var profit       = parseFloat(parseInt(elem.attr('profit')));
                var loss         = parseFloat((elem.attr('loss')));
                
                //console.info(positionType);
                
                /* update payout color and element background color (class) in open positions */
                if (positionType == 'call') {
                    if (parseFloat(pricingRate) > parseFloat(strikeRate)){
                        elem.addClass('win').removeClass('lose').removeClass('special'); /* win */
                        elem.attr('payout',parseFloat((100 + profit) * amount)/100);
			MyPositions.enableDisableButtons(elemId, 'disable');
                    }else if(parseFloat(pricingRate) < parseFloat(strikeRate)){
                        elem.addClass('lose').removeClass('win').removeClass('special'); /* lose */
                        elem.attr('payout',parseFloat((100-loss) * amount)/100 );
			MyPositions.enableDisableButtons(elemId, 'enable');
                    }else{
                        elem.removeClass('win').removeClass('lose').removeClass('special');/* no change */
                        elem.attr('payout',amount);
			MyPositions.enableDisableButtons(elemId, 'enable');
                    }
                } else { //Put
                    if (parseFloat(pricingRate) < parseFloat(strikeRate)){
                        elem.addClass('win').removeClass('lose').removeClass('special'); /* win */
                        elem.attr('payout',parseFloat(((100 + profit) * amount)/100 ));
			MyPositions.enableDisableButtons(elemId, 'disable');
                    }else if(parseFloat(pricingRate) > parseFloat(strikeRate)){
                        elem.addClass('lose').removeClass('win').removeClass('special'); /* lose */
                        elem.attr('payout',parseFloat((100 - loss) * amount)/100);
			MyPositions.enableDisableButtons(elemId, 'enable');
                    }else{
                        elem.removeClass('win').removeClass('lose').removeClass('special');/* no change */
                        elem.attr('payout',amount);
			MyPositions.enableDisableButtons(elemId, 'enable');
                    }
                }
            }
        });
    }
}

$(document).ready(function() {
	MyPositions.init();
});


