/*
    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
            $('.NavPanel div.open_positions ul.positions 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);
                                                                                    event.preventDefault();
                                                                                   });

                    //$('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);
                                                                                    event.preventDefault();
                                                                                   });
               }
               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 */
                        /* the new position amount */
                        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;
              $('div.ui-dialog').remove();
              $('div#rolloverDialog').remove();
          }
          /* insert the data into the dialog */
          //var dialogDiv =  $('#dialog2')//.clone()
          var dialogDiv =  $('#dialog2').clone().attr('id', 'rolloverDialog');
          dialogDiv.find('div.firstRow   div.right').html(currentExpiryTime).end()
          .find('div.secondRow  div.right').html(expirySelect).end()
          .find('div.thirdRow   div.right').html(positionAmount + AppData.accountCurrency);

           /* Show confirmation window */
           /*var temp      =  $('div#dialog2').html();
           var dialogDiv =  $('<div/>').html(temp).addClass('platformDialog');*/
           MyPositions.positionDialog = dialogDiv;

           MyPositions.positionDialog.dialog({
                title: AppData.langHome.rollOverTitle,
                autoOpen: false,
                resizable: false,
                width: 383,
                height: 220,
                modal:true,
                dialogClass: 'baseTheme platformDialog',
                closeText: ''
           });

           MyPositions.positionDialog.parent().find('a.ui-dialog-titlebar-close span.ui-icon').removeClass('ui-icon');

           $('#rolloverDialog').find('select').selectbox(
				{
					inputClass: 'selectboxTime',
					containerClass: 'selectbox-wrapperTime',
					scrollBar: true,
					chainTitle: true,
					onChange:function(text, id, element){
						$('#rolloverDialog .dialog_inner .selectboxTime').blur();
					}
				}
            );

           /* events for buttons */
           /* apply button */
           MyPositions.positionDialog.find('button.btnApply').unbind('click').bind('click',{},function(event){
               newOptionId = dialogDiv.find('div[id="_container"] ul li.selected').attr('id').split('_').splice(2,1)[0];

               if (MyPositions.positionDialog != null)
                    MyPositions.positionDialog.dialog('close');
                    $('div.ui-dialog').remove();
                    $('div#rolloverDialog').remove();

                 $.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;

                                    liElem.find('li.investment').html(positionAmount + AppData.accountCurrency);
                                    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)
                                            event.preventDefault();
                                        break;
                                        case 'optionIsClosed':
                                            General.dialog(AppData.langHome.optionIsClosedErrorPopupMessage,AppData.langHome.error)
                                            event.preventDefault();
                                        break;
                                        case 'insuficientFunds':
                                            General.dialog(AppData.langHome.insufficientFundsIsErrorPopupMessage,AppData.langHome.error);
                                            event.preventDefault();
                                        break;
                                        case 'invalidPositionRate':
                                            General.dialog(AppData.langHome.positionRateIsInvalid,AppData.langHome.error);
                                            event.preventDefault();
                                        break;
                                        case 'suspended':
                                            General.dialog(AppData.langHome.optionSuspended,AppData.langHome.error);
                                            event.preventDefault();
                                        break;
                                        case 'riskSuspentionActivated':
                                            General.dialog(AppData.langHome.riskSuspentionPopupMessage,AppData.langHome.error);
                                            event.preventDefault();
                                        break;
										case 'noTime':
											General.dialog(AppData.langHome.noRolloverTimePopupMessage,AppData.langHome.error);
                                            event.preventDefault();
											break;
										case 'positionWinning':
											General.dialog(AppData.langHome.positionIsWinningPopupMessage,AppData.langHome.error);
                                            event.preventDefault();
											break;
                                        case 'numberOfRolloversExceeded':
                                            General.dialog(AppData.langHome.numberOfRolloversExceededPopupMessage,AppData.langHome.error);
                                            event.preventDefault();
                                            break;
                                    }
                                }
                            },
                            'json'
                       );
                 if (MyPositions.positionDialog != null){
                    MyPositions.positionDialog.dialog( "destroy" );
                    MyPositions.positionDialog = null;
                 }
               });

           /* cancel button */
           MyPositions.positionDialog.find('button.btnCancel').unbind('click').bind('click',{},function(){
               MyPositions.positionDialog.dialog('close');
               if (MyPositions.positionDialog != null){
                 MyPositions.positionDialog.dialog('destroy');
                 MyPositions.positionDialog = null;
                 $('div.ui-dialog').remove();
                 $('div#rolloverDialog').remove();
                 event.preventDefault(); /* cancel the anchor link */
               }
           });

           /* close button */
           MyPositions.positionDialog.parent().find('a.ui-dialog-titlebar-close').unbind('click').bind('click',{},function(event){
             if (MyPositions.positionDialog != null){
                 MyPositions.positionDialog.dialog('destroy');
                 MyPositions.positionDialog = null;
                 $('div.ui-dialog').remove();
                 $('div#rolloverDialog').remove();
                 event.preventDefault(); /* cancel the anchor link */
               }
           });


           MyPositions.positionDialog.dialog('open');
		   $('#rolloverDialog .dialog_inner .selectboxTime').blur();
           //MyPositions.positionDialog.find(".selectbox-wrapperTime").hide();
           event.stopPropagation();//prevent of opening graph container
           event.preventDefault();
       },

       /* 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.generalLang.doubleUpTitle,
                autoOpen: false,
                resizable: false,
                width: 383,
                height: 200,
                modal:true,
                dialogClass: 'baseTheme platformDialog',
                closeText: "" //TODO:this will need to be tanslatable
           });

           MyPositions.positionDialog.parent()
                .find('a.ui-dialog-titlebar-close span.ui-icon').removeClass('ui-icon');

           MyPositions.positionDialog.parent().find('a.ui-dialog-titlebar-close').unbind('click').bind('click',{},function(event){
				$('div.ui-dialog').remove();
				$('div#doubleUpDialog').remove();
				MyPositions.positionDialog.dialog('close');
				event.preventDefault();
			});

            /* apply button */
            MyPositions.positionDialog.find('button.btnApply').unbind('click').bind('click',{},function(){
				MyPositions.positionDialog.dialog('close');
				$('div.ui-dialog').remove();
				$('div#doubleUpDialog').remove();


				/* 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,
					dataType: 'json',
					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;
					}
				});

			   /* 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));

											 //temporary disabled  $('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)
												event.preventDefault();
											break;
										case 'optionIsClosed':
											General.dialog(AppData.langHome.optionIsClosedErrorPopupMessage,AppData.langHome.error)
												event.preventDefault();
											break;
										case 'insufficientFunds':
											General.dialog(AppData.langHome.insufficientFundsIsErrorPopupMessage,AppData.langHome.error);
												event.preventDefault();
											break;
										case 'invalidPositionRate':
											General.dialog(AppData.langHome.positionRateIsInvalid,AppData.langHome.error);
												event.preventDefault();
											break;
										case 'suspended':
											General.dialog(AppData.langHome.optionSuspended1,AppData.langHome.error);
												event.preventDefault();
											break;
										case 'riskSuspentionActivated':
											General.dialog(AppData.langHome.riskSuspentionPopupMessage,AppData.langHome.error);
												event.preventDefault();
											break;
									}

									  event.stopPropagation();
								}
						   }
						});



                           });
                MyPositions.positionDialog.dialog('open');


                MyPositions.positionDialog.find('button.btnCancel').unbind('click').bind('click',{},function(){
                MyPositions.positionDialog.dialog('close');
                    /* when closing the dialog - the dialog div stays on the page. we need to remove it manually */
                    $('div.ui-dialog').remove();
                    $('div#doubleUpDialog').remove();
                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';


					var 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'] + '" positionType="' + type + '">';
					positionTodayHTML +=	'<ul class="data">';
					positionTodayHTML +=	'<li class="name" title="' + optionProp['assetName'] + '">' + optionProp['assetName'] + '</li>';
					positionTodayHTML +=	'<li class="time">' + optionEndHour + ':' + optionEndMinute + '</li>';
					positionTodayHTML +=	'<li class="investment">' + AppData.accountCurrency + params.amount + '</li>';
					positionTodayHTML +=	'<li class="arrow" style="#padding-top:13px;"><img src="appProxy/site/myPositions/optionArr' + params.position.capitalize() + '.png"/></li>';
					positionTodayHTML +=	'<li class="asset">' + positionProps.positionRate + '</li>';
					positionTodayHTML +=    '<li class="controls">';

					if (optionProp.ownedBy == 0){
                        positionTodayHTML +=    '<a class="rollOver" href="#" style=""></a>';
                        positionTodayHTML +=    '<a class="x2" href="#"  style=""></a></li>';
                    }else{
                        //positionTodayHTML +=    '<a class="rollOver hidden" href="#"></a>';
                        positionTodayHTML +=    '<a class="x2" href="#"  style="display:none;margin-top:28px !important"></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);
                    payoutElement.html(AppData.accountCurrency + 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" href="#">'+ AppData.langHome.doubleUp +'</a>';
			}
			else if (positionType == 'regular'){
				controls +='<div class="x2Div">';
				controls +='<a class="x2 button" href="#">'+ AppData.langHome.doubleUp +'</a>';
			}

			controls +='</div>';
			if (positionType == 'regular'){
				controls +=' <div class="rolloverDiv">';
				controls +='<a class="rollOver button" href="#">'+ AppData.langHome.rollOver +'</a>';
			}else if (positionType == 'custom'){
			}
			controls +='</div><div class="cb"></div></div>';

			graphDiv.html(graphDiv.html()+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(1000 * ((parseInt($('#' + todayPosition.elementId).attr('enddate')) - 30 )) < (General.dateTime.getTime() - AppData.timeZoneOffset)){ //strange bug, when use getTime on General.dateTime object the resault
																									  //not considering the time zone offset

				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((AppData.accountCurrency.length == 2)? 2 : 1));
			totalPayout += parseFloat($(this).attr('payout'));
		});

		var myPayout = parseFloat(totalPayout) - parseFloat(totalAmount);
		if (myPayout > 0){
			$('div.open_positions div.content ul.positionsInfo li.payoutAmount')
			.html(AppData.accountCurrency + parseFloat(totalPayout).toFixed(2))
			.css('color','#006e00');
		}
		else if(myPayout < 0){
			$('div.open_positions div.content ul.positionsInfo li.payoutAmount')
			.html(AppData.accountCurrency + parseFloat(totalPayout).toFixed(2))
			.css('color','#bc7979');
		}else{
			$('div.open_positions div.content ul.positionsInfo li.payoutAmount')
			.html(AppData.accountCurrency + parseFloat(totalPayout).toFixed(2))
			.css('color','#4E4E4E');
		}
    },

    /* update payout in the positions LI in the open positions section */
    updatePositionPayout: function(itemName,pricingRate){
        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'));
           //alert('option id from li ' + $(this).attr('optionId') + ' optionId from LS' + 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((AppData.accountCurrency.length == 2)? 2 : 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();
});


