function clickOnChallengeFriends(){if(loggedUsername==""){Ext.Msg.alert("Entre en su sesión para lanzar retos","Para lanzar un reto antes tiene que registrarse y entrar en su sesión. Después, en menos de un minuto podrá haber lanzado un reto a sus amigos.")}else{scroll(0,0);userInterestedInChallenge();Ext.Fx.syncFx();Ext.get("createAChallenge").slideIn("t",{duration:1});Ext.get("createAChallenge").frame("#15428B",3,{duration:0.5})}}var storeContacts;var isStoreContactsLoad=false;var arrContactosYEmailsRetados=new Array();var arrContactosRetados=new Array();var arrEmailsRetados=new Array();var isChallengeAddUsers=false;function userInterestedInChallenge(){if(isChallengeAddUsers==false){Ext.getCmp("startsID").show();Ext.getCmp("endsID").show();Ext.getCmp("validationDateErrorsID").show()}Ext.getCmp("lanzarID").show();Ext.getCmp("contactosRetadosID").show()}function userLostInterestInChallenge(){if(arrContactosYEmailsRetados.length==0&&Ext.getCmp("challengeFriendEmailID").getValue()==""){Ext.getCmp("validationDateErrorsID").hide();Ext.getCmp("startsID").hide();Ext.getCmp("endsID").hide();Ext.getCmp("lanzarID").hide();Ext.getCmp("contactosRetadosID").hide();Ext.getCmp("validationDateErrorsID").hide()}}function printParticipants(){for(i=0;i<arrContactosRetados.length-1;i++){for(j=i+1;j<arrContactosRetados.length;j++){if(arrContactosRetados[i]==arrContactosRetados[j]){arrContactosRetados.splice(j,1)}}}for(i=0;i<arrEmailsRetados.length-1;i++){for(j=i+1;j<arrEmailsRetados.length;j++){if(arrEmailsRetados[i]==arrEmailsRetados[j]){arrEmailsRetados.splice(j,1)}}}for(i=0;i<arrContactosYEmailsRetados.length-1;i++){for(j=i+1;j<arrContactosYEmailsRetados.length;j++){if(arrContactosYEmailsRetados[i]==arrContactosYEmailsRetados[j]){arrContactosYEmailsRetados.splice(j,1)}}}var a;if(isChallengeAddUsers==false){a="<b>Participantes en el reto:</b><br>"}else{a="<b>Nuevos participantes en el reto:</b><br>"}if(arrContactosYEmailsRetados.length==0){a=""}for(i=0;i<arrContactosYEmailsRetados.length;i++){var b=arrContactosYEmailsRetados[i];b.toString();if(b.length>7){b=b.slice(0,7);b+="..."}a+=b+"<b><a href=\"javascript:indexOf=arrContactosRetados.indexOf('"+arrContactosYEmailsRetados[i]+"');if (indexOf != -1) arrContactosRetados.splice(indexOf,1);indexOf=arrEmailsRetados.indexOf('"+arrContactosYEmailsRetados[i]+"');if (indexOf != -1) arrEmailsRetados.splice(indexOf,1);arrContactosYEmailsRetados.splice(arrContactosYEmailsRetados.indexOf('"+arrContactosYEmailsRetados[i]+'\'),1);printParticipants();void(0);" style="text-decoration : none;color: red" qtip="Borrar '+arrContactosYEmailsRetados[i]+' de la lista">(X)</a></b>';if(i!=arrContactosYEmailsRetados.length-1){a+=", "}}Ext.getCmp("contactosRetadosID").body.update(a);if(arrContactosYEmailsRetados.length==0){userLostInterestInChallenge()}}function adaptChallengeToolbarToUserContacts(){storeContacts=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"server/getContacts.php",method:"GET"}),reader:new Ext.data.JsonReader({totalProperty:"total",root:"data",fields:[{name:"username"},{name:"contactname"}]})});storeContacts.on("load",function(){Ext.getCmp("challengeFriendContactID").bindStore(null);Ext.getCmp("challengeFriendContactID").bindStore(storeContacts,true);isStoreContactsLoad=true},this,true);storeContacts.load()}function handleClickStartChallenge(){if(challengeToolbar.getForm().isValid()==true&&arrContactosYEmailsRetados.length>0){strContactosYEmails="";for(i=0;i<arrContactosYEmailsRetados.length;i++){if(i==arrContactosYEmailsRetados.length-1){if(arrContactosYEmailsRetados.length==1){strContactosYEmails=arrContactosYEmailsRetados[i]}else{strContactosYEmails+=" y a "+arrContactosYEmailsRetados[i]}}else{strContactosYEmails+=arrContactosYEmailsRetados[i];if(i<arrContactosYEmailsRetados.length-2){strContactosYEmails+=", "}}}var c="";if(isChallengeAddUsers==true){c="Se va a proceder a actualizar el reto con los nuevos participantes: "+strContactosYEmails+"."}else{c="Se va a proceder a lanzar un reto a "+strContactosYEmails+" que empezará el "+Ext.getCmp("startsID").getRawValue()+" a las 9:00 y acabara el "+Ext.getCmp("endsID").getRawValue()+" a las 17:30.<br>&nbsp;<br>Ponle un nombre al reto y si quieres añade un mensaje personalizado:<br>&nbsp;<br>"}ponleUnNombreAlReto="";var b=new Ext.form.FormPanel({title:"Lanzar el reto",id:"createChallengeID",url:"server/setupchallenge.php",width:400,defaults:{width:250},autoHeight:true,method:"post",items:[{xtype:"panel",autoWidth:true,border:false,html:c},{xtype:"textfield",allowBlank:false,disabled:isChallengeAddUsers,fieldLabel:"Nombre del reto",id:"challengeNameID"},{xtype:"textarea",fieldLabel:"Mensaje",maxLength:256,height:60,emptyText:"Ya preparamos nosotros el mensaje pero si quieres puedes añadir algunas palabras",id:"personalizedChallengeMessageID"}],buttons:[{text:"Lanzar el reto",handler:function(){if(Ext.getCmp("createChallengeID").form.isValid()){hangindSetupChallenge=Ext.Msg.wait("Preparando el reto...");Ext.Ajax.request({url:"server/setupchallenge.php",failure:function(d,e){hangindSetupChallenge.hide();Ext.Msg.alert("Problema de conexión","Disculpe, está siendo imposible conectarse con el servidor.");a.close()},success:function(d,e){hangindSetupChallenge.hide();responseObj=Ext.util.JSON.decode(d.responseText);if(responseObj.success==false){if(responseObj.reason){Ext.Msg.alert("Se ha producido un error",responseObj.reason,handleClickStartChallenge)}else{Ext.Msg.alert("Se ha producido un error","Error desconocido. Por favor, disculpe las molestias")}}else{if(!isChallengeAddUsers){if(pageTracker){pageTracker._trackEvent("challenge","create",Ext.getCmp("challengeNameID").getValue())}Ext.Msg.alert("El reto se ha creado con éxito","Felicidades, acaba de lanzar un reto. A continuación se comunicará por e-mail las instrucciones a los participantes del reto. Siga la evolución en el panel izquierdo de la web.")}else{Ext.Msg.alert("El reto se ha actualizado con éxito","Acaba de invitar a más participantes al reto. A continuación se comunicará por e-mail las instrucciones a los nuevos participantes del reto. Siga la evolución en el panel izquierdo de la web.");if(!fastChallenge){adaptChallengeFormToAddUsers(false)}}Ext.getCmp("startsID").reset();Ext.getCmp("endsID").reset();arrContactosRetados.splice(0,arrContactosRetados.length);arrEmailsRetados.splice(0,arrEmailsRetados.length);arrContactosYEmailsRetados.splice(0,arrContactosYEmailsRetados.length);Ext.getCmp("challengeFriendEmailID").reset();Ext.getCmp("challengeFriendContactID").reset();printParticipants();storeChallenge.load();if(sideBarChallengePanel){sideBarChallengePanel.show()}if(fastChallenge){fastChallenge.close()}}a.close()},params:{json:Ext.util.JSON.encode([{editExistingChallenge:isChallengeAddUsers.toString(),ID:((storeChallenge.getAt(challengePosition)===undefined)?0:(storeChallenge.getAt(challengePosition)).data.ID),contacts:arrContactosRetados,emails:arrEmailsRetados,challengename:Ext.getCmp("challengeNameID").getValue(),starts:Ext.getCmp("startsID").getRawValue(),ends:Ext.getCmp("endsID").getRawValue(),challengepersonalizedmessage:Ext.getCmp("personalizedChallengeMessageID").getValue()}])}})}}}]});if(isChallengeAddUsers){Ext.getCmp("challengeNameID").setValue(Ext.getCmp("challengeListID").getValue())}var a=new Ext.Window({layout:"fit",modal:"true",width:400,closeAction:"close",items:[b]});a.show()}else{if(arrContactosYEmailsRetados.length==0){Ext.MessageBox.alert("Error en el formulario",'Para añadir un participante recuerda a <b><font color="red">presionar el botón [+]</font></b> tras cada e-mail o contacto.')}else{if(isChallengeAddUsers==false){Ext.MessageBox.alert("Error en el formulario","Recuerda a poner las fechas de inicio y fin del reto.")}}}}var challengeToolbar;function startChallengePanel(){challengeToolbar=new Ext.FormPanel({id:"challengeToolbarID",renderTo:"createAChallenge",labelAlign:"left",baseCls:"x-small-editor",method:"post",width:200,layout:"fit",autoHeight:true,defaults:{border:false,bodyStyle:"background-color:transparent;"},items:[{xtype:"panel",autoHeight:true,id:"challengeToolbarDescriptionID",style:"font-size:11px;margin-bottom:5px;margin-top:5px;",html:'<font color=#207F7B><b>Reta a amigos</b></font> a invertir en bolsa entre dos fechas con ranking privado. <a href="blog/?p=87" target="_blank"">Más info</a>',layout:"fit"},{xtype:"panel",layout:"column",autoHeight:true,defaults:{border:false,bodyStyle:"background-color:transparent;"},items:[{xtype:"trigger",width:100,triggerClass:"invite_friend",emptyText:"Añade e-mail",style:"font-size:11px;",inputType:"e-mail",vtype:"email",allowBlank:true,msgTarget:"validationMailErrorsID",msgDisplay:"block",id:"challengeFriendEmailID",maxLength:64,maxLengthText:"El e-mail como m&aacute;ximo puede tener 64 caracteres",vtypeText:"Introduzca uno a uno e-mails de amigos o contactos y presione el botón [+] para agregarlos.",onTriggerClick:function(){if(this.validate()==true&&this.getValue()!=""){arrContactosYEmailsRetados.push(this.getValue());arrEmailsRetados.push(this.getValue());printParticipants();userInterestedInChallenge()}this.setValue("")},listeners:{specialkey:function(a,b){if(b.getKey()==13){if(this.validate()==true&&this.getValue()!=""){arrContactosYEmailsRetados.push(this.getValue());arrEmailsRetados.push(this.getValue());printParticipants();userInterestedInChallenge()}this.setRawValue("")}},focus:function(){userInterestedInChallenge()},blur:function(){userLostInterestInChallenge()}}},{xtype:"panel",layout:"column",items:[{xtype:"combo",width:80,editable:false,displayField:"contactname",triggerAction:"all",style:"font-size:11px;",emptyText:"Contactos",id:"challengeFriendContactID",listeners:{focus:function(){if(isStoreContactsLoad==true){if(storeContacts.getCount()==0){Ext.MessageBox.alert("Aún no tiene contactos",'Empezará a tener contactos tras agregarlos desde el panel "Tus Contactos". Recuerde que también puede crear un reto introduciendo e-mails de amigos y estos se convertirán en contactos tras aceptar el reto.')}}userInterestedInChallenge()},blur:function(){}}},{xtype:"trigger",triggerClass:"invite_friend",width:0,style:"padding:0px;border:0;margin-left:-4px;",displayField:"contactname",id:"challengeFriendContactButtonID",onTriggerClick:function(){contactVal=Ext.getCmp("challengeFriendContactID").getValue();if(contactVal!=""){arrContactosYEmailsRetados.push(contactVal);arrContactosRetados.push(contactVal);printParticipants();userInterestedInChallenge();Ext.getCmp("challengeFriendContactID").reset()}}}]}]},{xtype:"panel",id:"validationMailErrorsID",style:"color:red;font-size:11px;",border:false,width:200},{xtype:"panel",width:200,style:"font-size:11px;margin-top:5px;margin-bottom:5px;",border:false,id:"contactosRetadosID"},{xtype:"panel",width:200,layout:"column",items:[{width:70,id:"startsID",hidden:true,xtype:"datefield",format:"d/m/y",minValue:new Date().add(Date.DAY,1).clearTime(),maxValue:new Date().add(Date.DAY,31).clearTime(),disabledDays:[0,6],editable:false,allowBlank:false,emptyText:"Del día",msgTarget:"validationDateErrorsID",msgDisplay:"block",dateFormat:"timestamp"},{width:70,id:"endsID",hidden:true,xtype:"datefield",border:false,format:"d/m/y",minValue:new Date().add(Date.DAY,1).clearTime(),maxValue:new Date().add(Date.DAY,31).clearTime(),disabledDays:[0,6],editable:false,allowBlank:false,emptyText:"Al día",style:"font-size:11px;",msgTarget:"validationDateErrorsID",msgDisplay:"block",dateFormat:"timestamp"},{width:5,xtype:"panel",bodyStyle:"background-color:transparent;",border:false,html:"&nbsp;"},{border:false,bodyStyle:"background-color:transparent;",items:{xtype:"button",width:55,xtype:"button",text:"¡Reta!",hidden:true,id:"lanzarID"}}]},{id:"validationDateErrorsID",style:"color:red;font-size:11px;",border:false,width:200}]});printParticipants();challengeToolbar.hide();challengeToolbar.findById("challengeFriendEmailID").getEl().on("click",function(){if(Ext.getCmp("challengeFriendEmailID").getValue()==""){Ext.getCmp("challengeFriendEmailID").setValue("-");Ext.getCmp("challengeFriendEmailID").setRawValue("")}});challengeToolbar.findById("lanzarID").getEl().on("click",handleClickStartChallenge);challengeToolbar.findById("challengeFriendContactID").getEl().on("click",function(){Ext.getCmp("challengeFriendContactID").reset()});challengeToolbar.findById("startsID").getEl().on("blur",function(){Ext.getCmp("endsID").minValue=Ext.getCmp("startsID").getValue();Ext.getCmp("endsID").initComponent()});challengeToolbar.findById("endsID").getEl().on("blur",function(){Ext.getCmp("startsID").maxValue=Ext.getCmp("endsID").getValue();Ext.getCmp("startsID").initComponent()});Ext.getCmp("challengeFriendEmailID").setValue("")}var sidebarChallengeData;var storeChallenge;var sideBarChallengePanel;var challengePosition;function getOutOfChallenge(){var a=Ext.getCmp("challengeListID").getValue();Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme que quiere salirse del reto "+a+".",function(b){if(b=="yes"){var c=Ext.Msg.wait("Comprobando el acceso...");var d=new Ext.data.Connection();d.request({url:"server/removeFromChallenge.php",method:"POST",params:{challengename:a},callback:function(f,g,e){c.hide();c=false;if(!g){Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible conectarse con el servidor.");return}else{if(Ext.util.JSON.decode(e.responseText).success==true){Ext.MessageBox.alert("Acci&oacute;n completada","Ha sido retirado del reto con &eacute;xito");storeChallenge.load()}else{Ext.MessageBox.alert("Error","La operaci&oacute;n no ha podido ser cancelada")}}}})}})}function getRankingForChallenge(){sidebarChallengeData.load({params:{start:0,limit:10,challengename:Ext.getCmp("challengeListID").getValue()}});challengePosition=storeChallenge.find("challengename",Ext.getCmp("challengeListID").getValue());startsChallengeTS=(storeChallenge.getAt(challengePosition)).data.start_timestamp;var c=new Date(parseInt(startsChallengeTS)*1000);finishChallengeTS=(storeChallenge.getAt(challengePosition)).data.finish_timestamp;var g=new Date(parseInt(finishChallengeTS)*1000);var b=new Date();var d="";if(b<c){d="<b>El reto aún no ha empezado.</b><br>"}if(b>g){d="<b>El reto ha concluído.</b><br>"}var f=Ext.getCmp("challengeListID").getValue();if(f.length>7){f=f.slice(0,7);f+="..."}var a='<a href="javascript:getOutOfChallenge();" style="color:red;" qtip="Pulsando este link, usted saldrá de este reto.">Darse de baja del reto '+f+".</a>";var e="";if(loggedUsername.toString().toLowerCase()==(storeChallenge.getAt(challengePosition)).data.username.toString().toLowerCase()){e='<a href="javascript:adaptChallengeFormToAddUsers(true);" style="color:green;" qtip="Pulsando este link, usted podrá invitar a más gente al reto.">Añadir participantes a '+f+".</a>"}Ext.getCmp("challengeInfoID").getEl().update(c.format("d/m/y H:i")+" - "+g.format("d/m/y H:i")+"<br>"+d+a+"<br>"+e);sideBarChallengePanel.show()}function rankingRenderer(b){var a=((b-1)*100).toFixed(2);if(a>=0){return'<font color="green">'+a+"%</font>"}else{return'<font color="red">'+a+"%</font>"}}function rankingContactRenderer(c,b,a){tmp_canonicaluser=a.data.canonicalusername;return'<a style="text-decoration:underline;color:#2E86BE;" href="'+tmp_canonicaluser+'" target=_blank>'+c+"</a>"}function prepareStoreChallenge(){storeChallenge=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"server/getChallenges.php",method:"GET"}),autoLoad:true,reader:new Ext.data.JsonReader({totalProperty:"total",root:"data",fields:[{name:"username"},{name:"ID"},{name:"challengename"},{name:"start_timestamp"},{name:"finish_timestamp"}]})})}function startSideBarChallengePanel(){var a=new Ext.grid.ColumnModel([{id:"username",header:"Participante",sortable:false,renderer:rankingContactRenderer,dataIndex:"username"},{header:"Beneficios",sortable:false,renderer:rankingRenderer,dataIndex:"performance"}]);sidebarChallengeData=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"server/getChallengeRanking.php",method:"POST"}),reader:new Ext.data.JsonReader({totalProperty:"total",root:"data",fields:[{name:"username"},{name:"canonicalusername"},{name:"performance"}]})});sidebarChallengeData.proxy.on("beforeload",function(b,c){c.challengename=Ext.getCmp("challengeListID").getValue()});prepareStoreChallenge();sideBarChallengePanel=new Ext.Panel({renderTo:"yourchallenges",title:"Tus Retos",collapsible:true,animCollapse:false,width:180,baseCls:"sidebarPanel",ctCls:"x-small-editor",items:[{xtype:"combo",width:168,editable:false,displayField:"challengename",triggerAction:"all",store:storeChallenge,id:"challengeListID",listeners:{select:getRankingForChallenge}},{xtype:"grid",id:"challengeRankingID",border:true,width:168,ds:sidebarChallengeData,cm:a,sm:SelectionModel=new Ext.grid.RowSelectionModel({singleSelect:true}),height:170,listeners:{render:function(b){b.getSelectionModel().selectRow(0);b.getSelectionModel().selectFirstRow()},delay:10},viewConfig:{forceFit:true},bbar:toolBarSideBar=new Ext.PagingToolbar({pageSize:10,style:"border:0;background-image: url(./client/s.gif);background-color: transparent;",store:sidebarChallengeData,displayInfo:true,beforePageText:"Pg.",displayMsg:"",emptyMsg:"No hay participantes"})},{id:"challengeInfoID",xtype:"panel",layout:"fit"}]});toolBarSideBar.first.hide();toolBarSideBar.last.hide();sideBarChallengePanel.hide();storeChallenge.on("load",function(){if(storeChallenge.getCount()>0){Ext.getCmp("challengeListID").render();Ext.getCmp("challengeListID").setValue((storeChallenge.getAt(0)).data.challengename);Ext.getCmp("challengeListID").el.setWidth(151);getRankingForChallenge()}else{sideBarChallengePanel.hide()}},this,true)}var isAdaptChallengeFormToAddUsersStandaloneCreationAndCreateWindow=false;var fastChallenge;function adaptChallengeFormToAddUsers(a){if(isAdaptChallengeFormToAddUsersStandaloneCreationAndCreateWindow==true){fastChallenge=new Ext.Window({layout:"fit",modal:true,title:"Añade nuevos participantes",closeAction:"close",width:220,html:"<div style='text-align:left;padding-left:5px;' id='createAChallenge'></div>"});fastChallenge.show();startChallengePanel();challengeToolbar.show();adaptChallengeToolbarToUserContacts();storeChallenge.load()}arrContactosYEmailsRetados=new Array();arrContactosRetados=new Array();arrEmailsRetados=new Array();printParticipants();isChallengeAddUsers=a;if(a==true){Ext.getCmp("challengeToolbarDescriptionID").body.update("Añade más participantes al reto <b>"+Ext.getCmp("challengeListID").getValue()+"</b>:");Ext.getCmp("startsID").allowBlank=true;Ext.getCmp("endsID").allowBlank=true;Ext.getCmp("startsID").hide();Ext.getCmp("endsID").hide();if(!fastChallenge){clickOnChallengeFriends()}}else{Ext.getCmp("challengeToolbarDescriptionID").body.update('<font color=#207F7B><b>Reta a amigos</b></font> a invertir en bolsa entre dos fechas con ranking privado. <a href="blog/?p=87" target="_blank"">Más info</a>');Ext.getCmp("startsID").allowBlank=false;Ext.getCmp("endsID").allowBlank=false}}function renderSidebarContacts(c,b,a){tmp_canonicaluser=a.data.contactcanonicalname;return'<a href="'+tmp_canonicaluser+'" target=_blank>El Rincón de <b>'+c+"</b></a>"}function setMessageStatus(a){if(a!=0){Ext.getCmp("messageStatusID").getEl().update('<center><img src="client/mail.gif">&nbsp;&nbsp;&nbsp;<a style="text-decoration:underline;color:#2E86BE;" href="'+loggedCanonicalUsername+'"><b>Tienes un mensaje nuevo en Tu Rincón</b></a></center>')}else{Ext.getCmp("messageStatusID").getEl().update('<center><a style="text-decoration:underline;color:#2E86BE;" href="'+loggedCanonicalUsername+'"><b>Tu Rincón</b> (zona de mensajes)</a></center>')}}function startSideBarContactsPanel(){var a=new Ext.grid.ColumnModel([{id:"contactname",header:"Tu Contacto",sortable:false,renderer:renderSidebarContacts,dataIndex:"contactname"}]);sidebarContactsData=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"server/getContacts.php",method:"GET"}),reader:new Ext.data.JsonReader({totalProperty:"total",root:"data",fields:[{name:"username"},{name:"contactname"},{name:"contactcanonicalname"}]})});sidebarContactsData.on("load",function(b){setMessageStatus(sidebarContactsData.reader.jsonData.newmessage);if(sidebarContactsData.getCount()==0){MyRecordType=Ext.data.Record.create(["username","contactname"]);myrec=new MyRecordType({username:"",contactname:'Aún no tienes contactos<br>&nbsp;<br>Una vez tengas contactos <b>podrás ver sus operaciones</b>. También podrás enviarles mensajes y crear retos de bolsa con un par de clicks.<br><a href="javascript:addContactWindow();void(0);">¡Pulsa y crea un contacto!</a>'});a.setRenderer(0,function(c){return c});b.add(myrec);a.setRenderer(0,renderSidebarContacts)}},this,true);sideBarContactsPanel=new Ext.Panel({renderTo:"yourcontacts",title:'Tus Contactos - <a href="javascript:addContactWindow();void(0);">Agregar</a>',collapsible:true,animCollapse:false,width:180,baseCls:"sidebarPanel",ctCls:"x-small-editor",items:[{id:"messageStatusID",style:"margin-bottom: 10px;",xtype:"panel"},{xtype:"grid",id:"contactListID",border:true,hideHeaders:true,width:168,ds:sidebarContactsData,cm:a,sm:SelectionModel=new Ext.grid.RowSelectionModel({singleSelect:true}),height:170,listeners:{render:function(b){b.getSelectionModel().selectRow(0);b.getSelectionModel().selectFirstRow()},delay:10},viewConfig:{forceFit:true},bbar:toolBarSideBarContacts=new Ext.PagingToolbar({style:"border:0;background-image: url(./client/s.gif);background-color: transparent;",store:sidebarContactsData,displayInfo:true,beforePageText:"Pg.",displayMsg:"",emptyMsg:""})}]});toolBarSideBarContacts.first.hide();toolBarSideBarContacts.last.hide();sideBarContactsPanel.hide();setMessageStatus(0)}var loggedUsername="";var loggedCanonicalUsername="";var topPanel;var loginAndRegisterToolbar;var operationsToolbar;var bReloadPageOnUserSettings=false;function userValidator(a){if((a.split("*")).length!=1){return"No use asteriscos (*) en el nombre de usuario"}return true}function passwordValidator(a){if(a==Ext.get("registrationPasswordID").getValue()){return true}return"Los passwords no coinciden"}function isInt(a){a=a.toString();a=a.replace(/^[0]+/g,"");var b=parseInt(a);if(isNaN(b)){return false}return a==b&&a.toString()==b.toString()}function isFloat(a){a=a.toString();a=a.replace(/^[0]+/g,"");if(a.charAt(0)=="."){a="0"+a}isDecimal=false;for(i=0;i<a.length;i++){if(a.charAt(i)=="."){isDecimal=true}}if(isDecimal){indexOfLastZero=a.length;for(i=a.length-1;i>=0;i--){if(a.charAt(i)=="0"){indexOfLastZero=i}else{break}}if(a.charAt(indexOfLastZero-1)=="."){indexOfLastZero-=1}a=a.slice(0,indexOfLastZero)}var b=parseFloat(a);if(isNaN(b)){return false}return a==b&&a.toString()==b.toString()}function initialcapitalValidator(a){if(isInt(a)==true){if(a>100000){return"Introduzca una cifra menor a 100000 €"}if(a>0){return true}}return"Introduzca una cifra (s&oacute;lo n&uacute;meros)"}function openRegistrationWindow(){var b=new Ext.form.FormPanel({id:"registrationFormPanelID",defaultType:"textfield",autoHeight:true,autoWidth:true,title:"Darse de alta en la bolsa virtual",url:"server/registration.php",method:"post",items:[{xtype:"fieldset",title:"Introduzca sus datos",defaultType:"textfield",autoHeight:true,autoWidth:true,items:[{fieldLabel:"Usuario",id:"registrationUserID",allowBlank:false,maxLength:64,minLength:5,minLengthText:"El nombre de usuario como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El nombre de usuario como m&aacute;ximo puede tener 64 caracteres",blankText:"Usuario es obligatorio",validator:userValidator},{fieldLabel:"Contrase&ntilde;a",inputType:"password",id:"registrationPasswordID",minLengthText:"El password como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El password como m&aacute;ximo puede tener 64 caracteres",allowBlank:false,maxLength:64,minLength:5,blankText:"Contrase&ntilde;a es obligatoria"},{fieldLabel:"Repita la contrase&ntilde;a",inputType:"password",id:"registrationConfirmPasswordID",minLengthText:"El password como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El password como m&aacute;ximo puede tener 64 caracteres",allowBlank:false,maxLength:64,minLength:5,blankText:"Contrase&ntilde;a es obligatoria",validator:passwordValidator},{fieldLabel:"e-mail",inputType:"e-mail",id:"registrationEmailID",vtype:"email",allowBlank:false,maxLength:64,maxLengthText:"El e-mail como m&aacute;ximo puede tener 64 caracteres",vtypeText:"El e-mail est&aacute; mal formado"},{fieldLabel:"Capital inicial (&#8364;)",id:"registrationInitialcapitalID",allowBlank:false,blankText:"Es necesario indicar el dinero con el que se quiere iniciar la simulaci&oacute;n",validator:initialcapitalValidator}]}]});var a=new Ext.Window({layout:"fit",modal:"true",id:"registrationWindowID",closeAction:"close",width:330,items:[b],buttons:[{text:"Darse de alta",handler:function(){if((b.getForm()).isValid()){(b.getForm()).submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, registrando usuario...",failure:function(c,d){Ext.Msg.alert("Registro","El registro no ha sido posible. O bien ese nombre de usuario ya existe o has usado caracteres que no son letras, números o espacios para el nombre de usuario. Tampoco se aceptará el uso de código html en ningún campo. Prueba a introducir otro nombre de usuario, por favor.")},success:function(c,d){if(pageTracker){pageTracker._trackEvent("registration","register",Ext.get("registrationUserID").getValue())}Ext.Msg.alert("Registro","Ha sido registrado con &eacute;xito. Se procede a abrir una sesi&oacute;n.",function(){Ext.getCmp("loginUserID").setValue(Ext.get("registrationUserID").getValue());Ext.getCmp("loginPasswordID").setValue(Ext.get("registrationPasswordID").getValue());a.close();onUserPasswordSubmit()})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]});a.show()}function checkIfLoggedToStartUserToolbar(){var a=new Ext.data.Connection();a.request({url:"server/getUser.php",method:"get",callback:function(c,d,b){if(!d){loggedUsername="";Ext.MessageBox.alert("Error","Disculpe las molestias. No est&aacute; siendo posible conectarse con el servidor");return}else{decodedMessage=Ext.util.JSON.decode(b.responseText);if(decodedMessage.success==true){loggedUsername=decodedMessage.username;loggedCanonicalUsername=decodedMessage.canonicalusername;if(pageTracker){pageTracker._trackEvent("login","login",loggedUsername);pageTracker._setVar(loggedUsername)}Ext.get("mipagina").update('<a href="'+loggedCanonicalUsername+'">Tu Rincón</a>');Ext.get("mipagina").setDisplayed(true);startUserToolbar();challengeToolbar.show();sideBarChallengePanel.show();sideBarContactsPanel.show();Ext.get("intro_simulador_bolsa").setDisplayed(false);adaptChallengeToolbarToUserContacts();storeChallenge.load();sidebarContactsData.load({params:{start:0,limit:toolBarSideBarContacts.pageSize}});Ext.getCmp("portfoliotab").enable();Ext.getCmp("historicaltab").enable();return}else{loggedUsername="";return}}}})}function logOut(){var b=Ext.Msg.wait("Comprobando el acceso...");var a=new Ext.data.Connection();a.request({url:"server/logout.php",method:"get",callback:function(d,e,c){operationsToolbar.hide();Ext.get("mipagina").setDisplayed(false);loginAndRegisterToolbar.show();challengeToolbar.hide();sideBarChallengePanel.hide();sideBarContactsPanel.hide();Ext.get("intro_simulador_bolsa").setDisplayed(true);closeUserForm();Ext.getCmp("portfoliotab").disable();Ext.getCmp("historicaltab").disable();reloadStocksGridForm();loggedUsername="";b.hide();b=false}})}var onUserPasswordSubmitExtraCallback=null;function onUserPasswordSubmit(){if((Ext.get("loginUserID").getValue().length<5||Ext.get("loginUserID").getValue().length>64)||(Ext.get("loginPasswordID").getValue().length<5||Ext.get("loginPasswordID").getValue().length>64)){Ext.MessageBox.alert("Advertencia","Los nombres de usuario y contrase&ntilde;a deben tener entre 5 y 64 caracteres.");return}var b=Ext.Msg.wait("Comprobando el acceso...");var a=new Ext.data.Connection();a.request({url:"server/login.php",method:"post",params:{loginUserID:Ext.get("loginUserID").getValue(),loginPasswordID:Ext.get("loginPasswordID").getValue()},callback:function(d,e,c){b.hide();b=false;if(!e){Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible conectarse con el servidor");return}else{if(Ext.util.JSON.decode(c.responseText).success==true){checkIfLoggedToStartUserToolbar();if(onUserPasswordSubmitExtraCallback!=null){onUserPasswordSubmitExtraCallback()}}else{if(Ext.util.JSON.decode(c.responseText).reason=="nonvalidable"){Ext.Msg.prompt("Cambio de nombre de usuario necesario.","Lo sentimos. Desafortunadamente La Bolsa Virtual se ve obligada a reducir el número de caracteres disponibles para los nombres de usuario.<br>&nbsp;<br>A partir a ahora sólo se aceptan caracteres alfa-numéricos incluyendo vocales acentuadas, espacios y los caracteres '-', '_', 'ñ', 'ç' , '@' y '.'<br>Tu nombre de usuario tiene algún caracter no compatible.<br>Por ese motivo nos vemos obligados a cambiar tu nombre de usuario :-(<br>&nbsp;<br>Por favor introduce un nuevo nombre de usuario (mantendremos tu password, contactos, etc.):",function(f,g){if(f=="ok"){Ext.Ajax.request({url:"server/changeusername.php",method:"POST",params:{username:g,oldusername:Ext.get("loginUserID").getValue()},waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, cambiando nombre...",failure:function(){Ext.Msg.alert("Error","Ese nombre de usuario ya está cojido o tiene algún caracter no válido. Pruebe con otro nombre.")},success:function(h,k){responseObj=Ext.util.JSON.decode(h.responseText);if(responseObj.success==false){Ext.Msg.alert("Error","Ese nombre de usuario ya está cojido o tiene algún caracter no válido. Pruebe con otro nombre.")}if(responseObj.success==true){Ext.Msg.alert("Perfecto","Ya tiene su nuevo nombre de usuario. Gracias y disculpa las molestias. Ya puedes abrir una sesión.")}}})}})}else{Ext.MessageBox.alert("Login no v&aacute;lido","Int&eacute;ntelo de nuevo: la operaci&oacute;n no se pudo realizar.")}}}}})}function startUserToolbar(){operationsToolbar=new Ext.Toolbar({width:800});loginAndRegisterToolbar.hide();operationsToolbar.addListener("render",function(){operationsToolbar.add("Sesi&oacute;n de bolsa de <b>"+loggedUsername+"</b>");operationsToolbar.add(new Ext.Toolbar.Fill());operationsToolbar.addButton({text:"Configurar mi cuenta",pressed:true,handler:openUserSettingsWindow});operationsToolbar.add(new Ext.Toolbar.Separator());operationsToolbar.addButton({text:"Cerrar la sesi&oacute;n",pressed:true,handler:logOut})});operationsToolbar.render(topPanel.bbar);startUserForm();reloadStocksGridForm()}function startLoginRegistrationToolbar(){loginAndRegisterToolbar=new Ext.Toolbar({width:800,id:"loginAndRegisterToolbarID"});topPanel=new Ext.Panel({width:800,bbar:loginAndRegisterToolbar,layout:"border",id:"loginAndRegisterPanelID",renderTo:"contentMainPage",items:[{html:"<div height: 100%></div>"}]});topPanel.render();loginAndRegisterToolbar.add("Usuario:",new Ext.form.TextField({fieldLabel:"Usuario",id:"loginUserID"}),new Ext.Toolbar.Spacer(),"Contrase&ntilde;a:",new Ext.form.TextField({fieldLabel:"Contraseña",inputType:"password",id:"loginPasswordID",listeners:{specialkey:function(a,b){if(b.getKey()==13){onUserPasswordSubmit()}}}}),new Ext.Toolbar.Spacer());loginAndRegisterToolbar.addButton({text:"OK",pressed:true,handler:onUserPasswordSubmit});loginAndRegisterToolbar.add(new Ext.Toolbar.Spacer(),"-",new Ext.Toolbar.Spacer());loginAndRegisterToolbar.addButton({text:"Darse de alta",id:"darsedealtaID",pressed:true,handler:openRegistrationWindow});checkIfLoggedToStartUserToolbar()}var listOfPossibleOperationPublicationDelay=[["0"],["4"],["8"],["24"],["48"]];var operationPublicationDelayStore=new Ext.data.SimpleStore({fields:["operationPublicationDelayField"],data:listOfPossibleOperationPublicationDelay});var listOfPossiblePrivacitySettings=[["Comparto mensajes con todos"],["Restrinjo mensajes a amigos"]];var iPrivacitySettings;var privacitySettingsStore=new Ext.data.SimpleStore({fields:["privacitySettingsField"],data:listOfPossiblePrivacitySettings});function augmentcapitalValidator(a){if(usersettingsIsInt(a)==true){if(a>0){return true}}return"Introduzca una cifra (s&oacute;lo n&uacute;meros)"}function resetcapitalValidator(a){if(usersettingsIsInt(a)==true){if(a>100000){return"Introduzca una cifra menor a 100000 €"}if(a>0){return true}}return"Introduzca una cifra (s&oacute;lo n&uacute;meros)"}function usersettingsPasswordValidator(a){if(a==Ext.get("usersettingsNewPasswordID").getValue()){return true}return"Los passwords no coinciden"}function usersettingsIsInt(a){a=a.toString();a=a.replace(/^[0]+/g,"");var b=parseInt(a);if(isNaN(b)){return false}return a==b&&a.toString()==b.toString()}var userSettingsActiveTab=0;function openUserSettingsWindow(){var b=new Ext.TabPanel({title:"Mi cuenta",cls:"settings-tabpanel-multirow",deferredRender:false,height:300,activeTab:userSettingsActiveTab,defaults:{hideMode:"offsets",autoHeight:true,labelWidth:150,bodyStyle:"padding:20px;",autoScroll:true},items:[{title:"Nombre/apellidos",id:"changecompletenameFormID",xtype:"form",defaultType:"textfield",url:"server/usersettings.php",method:"post",items:[{xtype:"panel",border:false,style:"margin-bottom:10;",html:"Introduce tu nombre completo para que tus amigos te puedan encontrar más facilmente. De este modo facilitas que te puedan agregar en LaBolsaVirtual para luego poder lanzarte retos y comunicarse contigo."},{xtype:"panel",id:"usersettingsCurrentCompleteNameID",border:false,html:"Nombre actualmente introducido: Consultando al servidor...",style:"margin-bottom:20;"},{id:"usersettingsNewCompleteNameID",fieldLabel:"Nombre y apellidos",allowBlank:false,width:220,minLength:5,minLengthText:"El nombre completo como mínimo debe tener 5 caracteres",maxLength:64,maxLengthText:"El nombre completo como m&aacute;ximo puede tener 64 caracteres"}],buttons:[{text:"Introducir un nuevo nombre completo",handler:function(){if(Ext.getCmp("changecompletenameFormID").form.isValid()){Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme que desea introducir su nombre completo",function(g){if(g=="yes"){Ext.getCmp("changecompletenameFormID").form.submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, introduciendo el nombre completo...",failure:function(h,k){Ext.Msg.alert("Reset","No ha sido posible cambiar el nombre completo. Por favor, procure usar caracteres normales.");d.close()},success:function(h,k){Ext.Msg.alert("Reset","El nombre completo ha sido introducido con &eacute;xito");if(bReloadPageOnUserSettings){document.location.reload(true)}reloadUserForm();d.close()}})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]},{title:"E-mail",id:"changeemailFormID",xtype:"form",defaultType:"textfield",url:"server/usersettings.php",method:"post",items:[{xtype:"panel",border:false,style:"margin-bottom:10;",html:"Introduce el e-mail donde quieres recibir los retos así como las solicitudes para ser contacto de tus amigos. Si el e-mail está mal escrito no podrás disfrutar de todas las funcionalidades de LaBolsaVirtual. Recuerda que tu e-mail está protegido y sólo es visible por ti."},{xtype:"panel",id:"usersettingsCurrentEmailID",border:false,html:"E-mail actual: Consultando al servidor...",style:"margin-bottom:20;"},{id:"usersettingsNewEmailID",fieldLabel:"Nuevo e-mail",inputType:"e-mail",vtype:"email",width:220,allowBlank:false,maxLength:64,maxLengthText:"El e-mail como m&aacute;ximo puede tener 64 caracteres",vtypeText:"El e-mail est&aacute; mal formado"}],buttons:[{text:"Hacer el cambio de e-mail",handler:function(){if(Ext.getCmp("changeemailFormID").form.isValid()){Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme que desea cambiar su e-mail",function(g){if(g=="yes"){Ext.getCmp("changeemailFormID").form.submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, cambiando el e-mail...",failure:function(h,k){Ext.Msg.alert("Reset","No ha sido posible cambiar el e-mail. Por favor, pru&eacute;belo m&aacute;s tarde.");d.close()},success:function(h,k){Ext.Msg.alert("Reset","El e-mail ha sido cambiado con &eacute;xito");if(bReloadPageOnUserSettings){document.location.reload(true)}reloadUserForm();d.close()}})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]},{title:"Password",id:"changepasswordFormID",xtype:"form",defaultType:"textfield",url:"server/usersettings.php",method:"post",items:[{xtype:"panel",border:false,style:"margin-bottom:40;",html:"Si quieres, puedes cambiar tu contraseña. Primero introduce tu vieja contraseña y luego la nueva."},{id:"usersettingsOldPasswordID",fieldLabel:"Contrase&ntilde;a actual",inputType:"password",minLengthText:"El password como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El password como m&aacute;ximo puede tener 64 caracteres",allowBlank:false,maxLength:64,minLength:5,width:220,blankText:"Contrase&ntilde;a es obligatoria"},{id:"usersettingsNewPasswordID",fieldLabel:"Nueva contrase&ntilde;a",inputType:"password",minLengthText:"El password como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El password como m&aacute;ximo puede tener 64 caracteres",allowBlank:false,maxLength:64,minLength:5,width:220,blankText:"Contrase&ntilde;a es obligatoria"},{fieldLabel:"Repite nueva contrase&ntilde;a",inputType:"password",id:"usersettingsConfirmPasswordID",minLengthText:"El password como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El password como m&aacute;ximo puede tener 64 caracteres",allowBlank:false,maxLength:64,minLength:5,width:220,blankText:"Contrase&ntilde;a es obligatoria",validator:usersettingsPasswordValidator}],buttons:[{text:"Hacer el cambio de password",handler:function(){if(Ext.getCmp("changepasswordFormID").form.isValid()){Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme que desea cambiar su password",function(g){if(g=="yes"){Ext.getCmp("changepasswordFormID").form.submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, cambiando el password...",failure:function(h,k){Ext.Msg.alert("Reset","No ha sido posible cambiar el password. Por favor, pru&eacute;belo m&aacute;s tarde.");d.close()},success:function(h,k){Ext.Msg.alert("Reset","El password ha sido cambiado con &eacute;xito");if(bReloadPageOnUserSettings){document.location.reload(true)}reloadUserForm();d.close()}})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]},{title:"Aumentar capital",id:"augmentFormID",xtype:"form",defaultType:"textfield",url:"server/usersettings.php",method:"post",items:[{xtype:"panel",border:false,style:"margin-bottom:40;",html:"Si quieres, puedes pueder aumentar tu capital disponible. Utiliza esta opción cuando todo te ha ido mal y has perdido mucho dinero o bien cuando veas una oportunidad para invertir pero ya tengas todo tu capital invertido en acciones."},{fieldLabel:"Aumento (&#8364;)",id:"usersettingsAugmentcapitalID",allowBlank:false,blankText:"Es necesario indicar el dinero con el que se quiere aumentar la cuenta",validator:augmentcapitalValidator}],buttons:[{text:"Aumentar",handler:function(){if(Ext.getCmp("augmentFormID").form.isValid()){Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme que desea aumentar su capital",function(g){if(g=="yes"){Ext.getCmp("augmentFormID").form.submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, aumentando el capital...",failure:function(h,k){Ext.Msg.alert("Aumento de capital","No ha sido posible aumentar el capital. Por favor, pru&eacute;belo m&aacute;s tarde.");d.close()},success:function(h,k){Ext.Msg.alert("Aumento de capital","La cuenta ha sido aumentada con &eacute;xito");if(bReloadPageOnUserSettings){document.location.reload(true)}reloadUserForm();d.close()}})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]},{title:"Resetear cuenta",id:"resetFormID",xtype:"form",defaultType:"textfield",url:"server/usersettings.php",method:"post",items:[{xtype:"panel",border:false,style:"margin-bottom:40;",html:"Si quieres, puedes borrar tu historial de operaciones y empezar desde cero. Sólo tienes que elegir cual es el capital inicial con el que quieres empezar.<br>Atención: está operación supondrá salir automáticamente de todos los retos que hayan empezado ya."},{fieldLabel:"Capital inicial (&#8364;)",id:"usersettingsInitialcapitalID",allowBlank:false,blankText:"Es necesario indicar el dinero con el que se quiere iniciar la simulaci&oacute;n tras resetear la cuenta",validator:resetcapitalValidator}],buttons:[{text:"Resetear",handler:function(){if(Ext.getCmp("resetFormID").form.isValid()){Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme que desea borrar su balance actual y todo su historial de operaciones. Además está operación supondrá salir automáticamente de todos los retos que hayan empezado ya.",function(g){if(g=="yes"){Ext.getCmp("resetFormID").form.submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, reseteando la cuenta...",failure:function(h,k){Ext.Msg.alert("Reset","No ha sido posible resetear la cuenta. Por favor, pru&eacute;belo m&aacute;s tarde.");d.close()},success:function(h,k){Ext.Msg.alert("Reset","La cuenta ha sido reseteada con &eacute;xito");if(bReloadPageOnUserSettings){document.location.reload(true)}reloadUserForm();d.close();storeChallenge.load();storeContacts.load()}})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]},{title:"Retrasar publicación de operaciones",id:"setupMessagesFormID",xtype:"form",url:"server/usersettings.php",method:"post",items:[{xtype:"panel",border:false,style:"margin-bottom:20;",html:"Cada operación que realizas se publica en <b>Tu Rincón</b>.<br>Si participas frecuentemente en los retos y no quieres que te copien la estrategia, aquí puedes introducir las horas de retraso con las que se publicarán cada una de las operaciones que realices a partir de ahora."},{xtype:"panel",id:"usersettingsCurrentOperationPublicationDelayID",border:false,html:"Retraso actual: Consultando al servidor...",style:"margin-bottom:20;"},{xtype:"combo",fieldLabel:"Retraso (horas)",style:"text-align:center;",id:"usersettingsMessagesID",readOnly:true,displayField:"operationPublicationDelayField",triggerAction:"all",mode:"local",editable:false,value:"0",modal:true,store:operationPublicationDelayStore}],buttons:[{text:"Aplicar nuevo tiempo de retraso",handler:function(){if(Ext.getCmp("setupMessagesFormID").form.isValid()){Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme que quiere que sus operaciones se publiquen "+Ext.getCmp("usersettingsMessagesID").getValue()+" horas después de ser ejecutadas.",function(g){if(g=="yes"){Ext.getCmp("setupMessagesFormID").form.submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, configurando el retraso en las publicaciones de las órdenes...",failure:function(h,k){Ext.Msg.alert("Retraso de publicación de órdenes","No ha sido posible cambiar el retraso en la publicación de órdenes. Por favor, pru&eacute;belo m&aacute;s tarde.");d.close()},success:function(h,k){Ext.Msg.alert("Retraso de publicación de órdenes","El retraso en la publicación de órdenes se ha realizado satisfactoriamente. Las órdenes procesadas a partir de este momento se publicarán "+Ext.getCmp("usersettingsMessagesID").getValue()+" horas después de ser ejecutadas.");if(bReloadPageOnUserSettings){document.location.reload(true)}reloadUserForm();d.close()}})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]},{title:"Privacidad",id:"setupPrivacityFormID",xtype:"form",url:"server/usersettings.php",method:"post",items:[{xtype:"panel",border:false,style:"margin-bottom:20;",html:'Introduce el nivel de privacidad por defecto para nuevos mensajes y operaciones. También podrás configurar cada mensaje mediante el desplegable junto al botón <b>"Enviar"</b><br>&nbsp<br>Haz públicos tus mensajes: <b>¡Usa la infraestructura de LaBolsaVirtual para ganar seguidores</b> que lean tus opiniones y sigan tus operaciones de bolsa!'},{xtype:"panel",id:"usersettingsCurrentPrivacityID",border:false,html:"Privacidad actual: Consultando al servidor...",style:"margin-bottom:20;"},{xtype:"combo",fieldLabel:"Privacidad",id:"usersettingsPrivacityID",readOnly:true,displayField:"privacitySettingsField",triggerAction:"all",mode:"local",width:220,editable:false,value:listOfPossiblePrivacitySettings[0],modal:true,store:privacitySettingsStore}],buttons:[{text:"Aplicar nueva directiva de privacidad",handler:function(){if(Ext.getCmp("setupPrivacityFormID").form.isValid()){Ext.MessageBox.confirm("Confirmaci&oacute;n",'Por favor, confirme que quiere que aplicar la directiva: "'+Ext.getCmp("usersettingsPrivacityID").getValue()+'"',function(g){if(g=="yes"){for(iCP=0;iCP<listOfPossiblePrivacitySettings.length;iCP++){if(Ext.getCmp("usersettingsPrivacityID").getValue()==listOfPossiblePrivacitySettings[iCP]){iPrivacitySettings=iCP;break}}Ext.Ajax.request({url:"server/usersettings.php",method:"POST",params:{usersettingsPrivacityID:iPrivacitySettings},waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, configurando las nuevas directivas de privacidad...",failure:function(){Ext.Msg.alert("Directiva de privacidad","No ha sido posible cambiar las directivas de privacidad. Por favor, pru&eacute;belo m&aacute;s tarde. Si sigue sin funcionar, por favor, contacte con labolsavirtual@labolsavirtual.com");d.close()},success:function(){Ext.Msg.alert("Directiva de privacidad","El cambio de directivas de privacidad se ha realizado satisfactoriamente.");if(bReloadPageOnUserSettings){document.location.reload(true)}reloadUserForm();d.close()}})}})}else{Ext.MessageBox.alert("Error en el formulario","El forumario no est&aacute; correctamente cumplimentado.")}}}]}]});var d=new Ext.Window({layout:"fit",title:"Configuración de la cuenta",modal:true,closeAction:"close",width:500,height:350,items:[b],buttons:[{text:"Salir",handler:function(){d.close()}}]});d.show();userSettingsActiveTab=0;function f(){Ext.Ajax.request({url:"server/usersettings.php",method:"POST",params:{retrieveUsersettingsMessagesID:"true"},failure:function(g,h){Ext.getCmp("usersettingsCurrentOperationPublicationDelayID").getEl().update("No está siendo posible consultar el retraso actual. Pruebe a recargar la página. Si sigue sin funcionar, por favor avise a labolsavirtual@labolsavirtual.com. Gracias")},success:function(g,h){responseObj=Ext.util.JSON.decode(g.responseText);Ext.getCmp("usersettingsCurrentOperationPublicationDelayID").getEl().update("Retraso actual: "+responseObj.operationspublicationdelay+" horas")}})}function e(){Ext.Ajax.request({url:"server/usersettings.php",method:"POST",params:{retrieveUsersettingsPrivacityID:"true"},failure:function(g,h){Ext.getCmp("usersettingsCurrentPrivacityID").getEl().update("No está siendo posible consultar cuales son las directivas de privacidad actuales. Pruebe a recargar la página. Si sigue sin funcionar, por favor avise a labolsavirtual@labolsavirtual.com. Gracias")},success:function(g,h){responseObj=Ext.util.JSON.decode(g.responseText);if(responseObj.privacity==0){Ext.getCmp("usersettingsCurrentPrivacityID").getEl().update("Directiva actual: <font color='green'>\""+listOfPossiblePrivacitySettings[responseObj.privacity]+'"</font>')}else{Ext.getCmp("usersettingsCurrentPrivacityID").getEl().update("Directiva actual: <font color='red'>\""+listOfPossiblePrivacitySettings[responseObj.privacity]+'"</font>')}}})}function c(){Ext.Ajax.request({url:"server/usersettings.php",method:"POST",params:{retrieveUsersettingsCompleteNameID:"true"},failure:function(g,h){Ext.getCmp("usersettingsCurrentCompleteNameID").getEl().update("No está siendo posible consultar el retraso actual. Pruebe a recargar la página. Si sigue sin funcionar, por favor avise a labolsavirtual@labolsavirtual.com. Gracias")},success:function(g,h){responseObj=Ext.util.JSON.decode(g.responseText);if(responseObj.completename==""){Ext.getCmp("usersettingsCurrentCompleteNameID").getEl().update("Aún no has introducido tu nombre completo en el sistema.")}else{Ext.getCmp("usersettingsCurrentCompleteNameID").getEl().update("Nombre actualmente introducido: <b>"+responseObj.completename+"</b>")}}})}function a(){Ext.Ajax.request({url:"server/usersettings.php",method:"POST",params:{retrieveUsersettingsEmailID:"true"},failure:function(g,h){Ext.getCmp("usersettingsCurrentEmailID").getEl().update("No está siendo posible consultar el retraso actual. Pruebe a recargar la página. Si sigue sin funcionar, por favor avise a labolsavirtual@labolsavirtual.com. Gracias")},success:function(g,h){responseObj=Ext.util.JSON.decode(g.responseText);Ext.getCmp("usersettingsCurrentEmailID").getEl().update("E-mail actual: <b>"+responseObj.email+"</b>")}})}c();f();e();a()}function createMessage(f,o,n,s,g,h,l,q,p){var b="";var d="";var a="";var e="";var c="";g=(parseFloat(g)).toFixed(2);s=(parseFloat(s)).toFixed(2);if(p!=listOfStopLoss[0]){p=(parseFloat(p)).toFixed(2)}if(o==OPMAIL){if(n==listOfConditions[1]){c="supere"}if(n==listOfConditions[2]){c="baje de"}return"Avisa por mail cuando el valor de "+f+" "+c+" "+g+"&#8364;."}if(o!=""&&h!=""&&f!=""&&n!=""){if(o==OPCOMPRA||o==OPCOMPRACFD){e="demanda"}else{e="oferta"}if(n==listOfConditions[0]){b=" a precio de mercado"}else{if(n==listOfConditions[1]){c="supere"}if(n==listOfConditions[2]){c="baje de"}b=" cuando el precio de "+e+" de la acci&oacute;n "+c+" "+g+"&#8364;"}if(h==1){strAccionesOrAccion="acci&oacute;n"}else{strAccionesOrAccion="acciones"}if((s!=-1)&&(((n==listOfConditions[1])&&(parseFloat(g)<parseFloat(s)))||((n==listOfConditions[2])&&(parseFloat(g)>parseFloat(s))))){d=' (<font color="red">atenci&oacute;n: esa condici&oacute;n ya se est&aacute; cumpliendo actualmente</font>)'}var k="";if(n!=listOfConditions[0]){if(l!=0&&q==listOfOperationStatus[0]){var m=new Date(parseInt(l)*1000);k=" La operaci&oacute;n vence el "+m.format("d \\d\\e F \\d\\e Y")+" a las "+m.format("H:i")+"."}else{k=" La operaci&oacute;n no tiene fecha de vencimiento."}}var r="";if(p!=-1&&p!=listOfStopLoss[0]&&(o==OPCOMPRA||o==OPCOMPRACFD||o==OPVENDECFD)){r=" Se programar&aacute; un <b>STOP LOSS al "+p+"%</b> tras la";if(o==OPCOMPRACFD||o==OPCOMPRA){r+=" compra."}else{r+=" venta."}}a=o+" "+h+" "+strAccionesOrAccion+" de "+f+b+d+"."+r+k;return a}return""}var storeOperations;var storeEvolution;var allOrdersTitle="&Oacute;rdenes (se procesan cada 2' s&oacute;lo durante horario de bolsa)";function toggleDetails(b,c){var a=grid.getView();a.showPreview=c;a.refresh()}function cancelOperation(b,a){Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme la cancelaci&oacute;n de:<br>"+b,function(d){if(d=="yes"){var e=Ext.Msg.wait("Comprobando el acceso...");var c=new Ext.data.Connection();c.request({url:"server/canceloperation.php",method:"post",params:{ID:a},callback:function(g,h,f){e.hide();e=false;if(!h){Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible conectarse con el servidor.");return}else{if(Ext.util.JSON.decode(f.responseText).success==true){if(pageTracker){pageTracker._trackEvent("operation","new","cancel")}Ext.MessageBox.alert("Operaci&oacute;n completada","La operaci&oacute;n ha sido cancelada con &eacute;xito");reloadUserForm();reloadStocksGridForm()}else{Ext.MessageBox.alert("Error","La operaci&oacute;n no ha podido ser cancelada.<br>"+Ext.util.JSON.decode(f.responseText).errormessage);reloadUserForm()}}}})}})}function deleteOperation(d,c){var b=Ext.Msg.wait("Comprobando el acceso...");var a=new Ext.data.Connection();a.request({url:"server/deleteoperation.php",method:"post",params:{ID:c},callback:function(f,g,e){b.hide();b=false;if(!g){Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible conectarse con el servidor.");return}else{if(Ext.util.JSON.decode(e.responseText).success!=true){Ext.MessageBox.alert("Error","La operaci&oacute;n no ha podido ser borrada.<br>"+Ext.util.JSON.decode(e.responseText).errormessage)}else{if(pageTracker){pageTracker._trackEvent("operation","new","delete")}reloadUserForm()}}}})}function renderBrokerCommentHeader(f,g,d){var e=new Date(parseInt(d.data.completeness_timestamp)*1000);var b=createMessage(d.data.fullcompanyname,d.data.operationtype,d.data.condition,"-1",d.data.conditionalstockvalue,d.data.numberofstocks,d.data.expiration_timestamp,d.data.completeness_state,d.data.stoploss);var c;var a;if(d.data.completeness_state==listOfOperationStatus[1]){c="green"}if(d.data.completeness_state==listOfOperationStatus[2]){c="red"}if(d.data.completeness_state==listOfOperationStatus[0]){c=""}if(b!=""){b+="<br>"}strMessage=b+'<font color="'+c+'">'+d.data.brokercomment+" el "+e.format("d \\d\\e F \\d\\e Y \\a \\l\\a\\s H:i.")+"</font>";if(d.data.annotation==""){a=""}else{a="&nbsp;-&nbsp;<a href=\"javascript:Ext.MessageBox.alert('Anotaci&oacute;n', '"+d.data.annotation+'\');void(0);" qtip="Nota: '+d.data.annotation+'">Ver nota.</a>'}strMessage+=a;if(d.data.completeness_state==listOfOperationStatus[0]){if(d.data.operationtype!=listOfPossibleOperations[2]){strMessage+="<br><center><a href=\"javascript:cancelOperation('"+b+"',"+d.data.ID+');void(0);">CANCELAR LA OPERACI&Oacute;N</a></center>'}else{strMessage+="<br><center><a href=\"javascript:cancelOperation('"+b+"',"+d.data.ID+');void(0);">CANCELAR LA ALERTA</a></center>'}}else{strMessage+="<br><center><a href=\"javascript:deleteOperation('"+b+"',"+d.data.ID+');void(0);">BORRAR DE LA LISTA</a></center>'}return strMessage}var userForm;function closeUserForm(){if(userForm){userForm.destroy()}if(storeOperations){storeOperations.destroy()}if(storeEvolution){storeEvolution.destroy()}}function reloadUserForm(){storeOperations.load({params:{start:0,limit:10,showOrdersOfCertainStockOnly:"ALL"}});Ext.getCmp("ordersPanel").setTitle(allOrdersTitle);Ext.getCmp("noFiltrarOperaciones").hide();storeEvolution.load({params:{}})}function startUserForm(){storeOperations=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"server/getLastOperations.php",method:"POST"}),reader:new Ext.data.JsonReader({totalProperty:"total",root:"data",fields:[{name:"ID"},{name:"fullcompanyname"},{name:"operationtype"},{name:"ticker"},{name:"condition"},{name:"conditionalstockvalue",type:"float"},{name:"numberofstocks",type:"int"},{name:"timestamp",type:"int"},{name:"expiration_timestamp",type:"int"},{name:"completeness_timestamp",type:"int"},{name:"completeness_stockvalue",type:"float"},{name:"completeness_state"},{name:"annotation"},{name:"brokercomment"},{name:"stoploss"}]})});storeEvolution=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"server/getUserEvolution.php",method:"GET"}),reader:new Ext.data.JsonReader({root:"data",fields:[{name:"invertedcapital",type:"float"},{name:"remainingcapital",type:"float"},{name:"commissions",type:"float"},{name:"dividends",type:"float"},{name:"guarantees",type:"float"},{name:"initialcapital",type:"float"}]})});storeOperations.on("load",function(){operationsSelectionModel.selectFirstRow()},this,true);storeEvolution.on("load",function(){evolutionRecord=storeEvolution.getAt(0);if(evolutionRecord){disponibleyacciones=evolutionRecord.data.remainingcapital+evolutionRecord.data.invertedcapital;if(evolutionRecord.data.initialcapital<=disponibleyacciones){fontcolorevolution="green"}else{fontcolorevolution="red"}Ext.getCmp("evolucionID").getEl().update("RESUMEN:<br><br>Part&iacute;as con <b>"+(evolutionRecord.data.initialcapital).toFixed(3)+" &#8364;</b> y ahora tendrías <b><font color="+fontcolorevolution+">"+(disponibleyacciones).toFixed(3)+" &#8364;</font></b> si cerrases en este instante todas tus operaciones.<br><br><br>DETALLE:<br><br>Tienes disponible "+(evolutionRecord.data.remainingcapital).toFixed(3)+" &#8364;.<br>Del disponible, tienes bloqueado en garantías por CFDs "+(evolutionRecord.data.guarantees).toFixed(3)+" &#8364;.<br>Por tanto, tu líquido para operar es "+(evolutionRecord.data.remainingcapital-evolutionRecord.data.guarantees).toFixed(3)+" &#8364;.<br>Has pagado "+(evolutionRecord.data.commissions).toFixed(3)+" &#8364; en comisiones.<br>Podr&iacute;as cerrar todas las operaciones de tu cartera por "+(evolutionRecord.data.invertedcapital).toFixed(3)+' &#8364; una vez aplicadas las comisiones correspondientes.<br><br><br><center><b>Consulta tu evolución gráfica <a href="'+loggedCanonicalUsername+'">aquí.</a></b></center>')}},this,true);function b(c){return c}var a=new Ext.grid.ColumnModel([{id:"comentariooperacion",header:"Operaci&oacute;n",sortable:true,renderer:renderBrokerCommentHeader,dataIndex:"completeness_state"}]);userForm=new Ext.FormPanel({renderTo:"contentMainPage",frame:true,labelAlign:"left",bodyStyle:"padding:5px",width:800,layout:"column",items:[{columnWidth:0.65,layout:"fit",items:{xtype:"grid",ds:storeOperations,cm:a,sm:operationsSelectionModel=new Ext.grid.RowSelectionModel({singleSelect:true}),height:350,id:"ordersPanel",title:allOrdersTitle,border:true,listeners:{render:function(c){c.getSelectionModel().selectRow(0);c.getSelectionModel().selectFirstRow()},delay:10},viewConfig:{forceFit:true,enableRowBody:true},bbar:new Ext.PagingToolbar({pageSize:10,store:storeOperations,displayInfo:true,displayMsg:"Operaciones {0} - {1} de {2}",emptyMsg:"No hay operaciones pendientes"})},buttons:[{id:"noFiltrarOperaciones",text:"Ver las operaciones del resto de títulos",hidden:true,handler:function(){chosenTicker="ALL";reloadUserForm()}},{id:"recargarUsuario",text:"Actualizar panel",handler:function(){reloadUserForm()}}],buttonAlign:"center"},{columnWidth:0.35,items:[{title:"Evoluci&oacute;n"},{id:"evolucionID",xtype:"panel",layout:"fit",style:"padding-left: 15px; padding-top: 5px;"}]}]});reloadUserForm();userForm.render()}Ext.grid.RowExpander=function(a){Ext.apply(this,a);this.addEvents({beforeexpand:true,expand:true,beforecollapse:true,collapse:true});Ext.grid.RowExpander.superclass.constructor.call(this);if(this.tpl){if(typeof this.tpl=="string"){this.tpl=new Ext.Template(this.tpl)}this.tpl.compile()}this.state={};this.bodyContent={}};Ext.extend(Ext.grid.RowExpander,Ext.util.Observable,{header:"",width:20,sortable:false,fixed:true,menuDisabled:true,dataIndex:"",id:"expander",lazyRender:true,enableCaching:true,getRowClass:function(a,e,d,c){d.cols=d.cols-1;var b=this.bodyContent[a.id];if(!b&&!this.lazyRender){b=this.getBodyContent(a,e)}if(b){d.body=b}return this.state[a.id]?"x-grid3-row-expanded":"x-grid3-row-collapsed"},init:function(b){this.grid=b;var a=b.getView();a.getRowClass=this.getRowClass.createDelegate(this);a.enableRowBody=true;b.on("render",function(){a.mainBody.on("mousedown",this.onMouseDown,this)},this)},getBodyContent:function(a,b){if(!this.enableCaching){return this.tpl.apply(a.data)}var c=this.bodyContent[a.id];if(!c){c=this.tpl.apply(a.data);this.bodyContent[a.id]=c}return c},onMouseDown:function(b,a){if(a.className=="x-grid3-row-expander"){b.stopEvent();var c=b.getTarget(".x-grid3-row");this.toggleRow(c)}},renderer:function(b,c,a){c.cellAttr='rowspan="2"';return'<div class="x-grid3-row-expander">&#160;</div>'},beforeExpand:function(b,a,c){if(this.fireEvent("beforeexpand",this,b,a,c)!==false){if(this.tpl&&this.lazyRender){a.innerHTML=this.getBodyContent(b,c)}return true}else{return false}},toggleRow:function(a){if(typeof a=="number"){a=this.grid.view.getRow(a)}this[Ext.fly(a).hasClass("x-grid3-row-collapsed")?"expandRow":"collapseRow"](a)},expandRow:function(c){if(typeof c=="number"){c=this.grid.view.getRow(c)}var b=this.grid.store.getAt(c.rowIndex);var a=Ext.DomQuery.selectNode("tr:nth(2) div.x-grid3-row-body",c);if(this.beforeExpand(b,a,c.rowIndex)){this.state[b.id]=true;Ext.fly(c).replaceClass("x-grid3-row-collapsed","x-grid3-row-expanded");this.fireEvent("expand",this,b,a,c.rowIndex)}},collapseRow:function(c){if(typeof c=="number"){c=this.grid.view.getRow(c)}var b=this.grid.store.getAt(c.rowIndex);var a=Ext.fly(c).child("tr:nth(1) div.x-grid3-row-body",true);if(this.fireEvent("beforcollapse",this,b,a,c.rowIndex)!==false){this.state[b.id]=false;Ext.fly(c).replaceClass("x-grid3-row-expanded","x-grid3-row-collapsed");this.fireEvent("collapse",this,b,a,c.rowIndex)}}});var stocksCommentMaxLength=300;var hangingFirstLoad;var chosenTicker="ALL";var chosenTickerToBeReloaded;var chosenTickerFullCompanyName;var chosenTickerCurrentValue;var chosenTickerBidValue;var chosenTickerAskValue;var chosenTickerNiceURL;var isQuotationsFlashLoad=false;var jsonStoreStockValues;var strIntroValCondicional="Introduzca valor condicional";var panelMode=false;var listOfOperationStatus=[["set"],["ok"],["ko"]];var OPCOMPRA="Compra";var OPVENDE="Vende";var OPMAIL="Avisa por mail";var OPCOMPRACFD="CFD: Compra (posición larga)";var OPVENDECFD="CFD: Vende (posición corta)";var listOfPossibleOperations=[[OPCOMPRA],[OPVENDE],[OPMAIL]];var buyOperation=[[OPCOMPRA],[OPMAIL]];var listOfPossibleOperationsCFD=[[OPCOMPRA],[OPVENDE],[OPCOMPRACFD],[OPVENDECFD],[OPMAIL]];var buyOperationCFD=[[OPCOMPRA],[OPCOMPRACFD],[OPVENDECFD],[OPMAIL]];var listOfConditions=[["ahora a precio de mercado"],["cuando el valor suba de:"],["cuando el valor baje de:"]];var listOfMailConditions=[["cuando el valor suba de:"],["cuando el valor baje de:"]];var listOfLimitedPeriod=[["ilimitada"],["24 horas"],["1 semana"],["1 mes"]];var listOfStopLoss=[["no aplicar"],["5%"],["10%"],["15%"],["20%"],["25%"],["30%"],["35%"],["40%"],["45%"],["50%"],["55%"],["60%"],["65%"],["70%"],["75%"],["80%"],["85%"],["90%"],["95%"]];function explainGuarantees(a){row=Ext.getCmp("gridStocksID").view.getRow(a);record=Ext.getCmp("gridStocksID").getStore().getAt(a);result=printOrComputeGuarantees(record);gurarantees=result[0];szGuarantees=result[1];text='<div style="padding-left:20px;"><br>Cuando usas CFDs no tienes que esperar a cerrar la operación para recibir beneficios (o pérdidas). Con los CFDs al final de cada día se reparten beneficios o se cobran las pérdidas usando el valor con el que cierra la jornada la empresa en la que has invertido.<br>El broker necesita garantizar que tú vas a tener dinero en caso de que tu operación salga mal. Por eso se te bloquea una pequeña cantidad. Con los CFDs se estipula una garantía de sólo el 5% del valor total de la operación. Si no cierras la operación el mismo día en que la abres el 5% se convierte en un 10%.<br>&nbsp;<br>En el caso de tu <b>operativa con '+record.data.fullcompanyname+"</b> tienes bloqueados "+parseFloat(gurarantees).toFixed(3)+" €.<br>Esa cantidad corresponde "+szGuarantees+"</div><br>";Ext.get("explainGuarantees"+record.data.stock).update(text)}var indexNotToCollapse=-1;function printConventionalOperation(b,e){var c=computeCommission(b.numberofstocks*b.completeness_stockvalue);var d=new Date(parseInt(b.completeness_timestamp)*1000);var a="";a+=('<font color="#2E86BE">'+d.format("d\\/m\\/y H:i")+"</font>: "+b.operationtype+" "+b.numberofstocks+((b.numberofstocks>1)?" acciones ":" acción ")+"por "+(parseFloat(b.completeness_stockvalue)).toFixed(3)+" € (comisión de "+c.toFixed(3)+" €)");annotation=b.annotation;if(annotation!=0){verNota="&nbsp;-&nbsp;<a href=\"javascript:Ext.MessageBox.alert('Anotaci&oacute;n', '"+annotation+"');codeToExecuteInLinksInRows("+e+');void(0);" qtip="Nota: '+annotation+'">Anotación.</a>';a+=verNota}a+="<br>";return[c,a]}function printCFDOperation(b,e){var c=computeCommission(Math.abs(b.number_of_CFD_stocks)*b.completeness_stockvalue);var d=new Date(parseInt(b.completeness_timestamp)*1000);var a="";if(b.operationtype==listOfPossibleOperationsCFD[2]){operationtype="CFD ~ Compra"}else{operationtype="CFD ~ Vende"}a+=('<font color="#2E86BE">'+d.format("d\\/m\\/y  H:i")+"</font>: "+operationtype+" "+b.number_of_CFD_stocks+((Math.abs(b.number_of_CFD_stocks)!=1)?" acciones ":" acción ")+"por "+(parseFloat(b.completeness_stockvalue)).toFixed(3)+" € (comisión de "+c.toFixed(3)+" €)");annotation=b.annotation;if(annotation!=0){verNota="&nbsp;-&nbsp;<a href=\"javascript:Ext.MessageBox.alert('Anotaci&oacute;n', '"+annotation+"');codeToExecuteInLinksInRows("+e+');void(0);" qtip="Nota: '+annotation+'">Anotación.</a>';a+=verNota}a+="<br>";return[c,a]}function printOrComputeUserGainsWithACertainTicker(h,b,l){row=Ext.getCmp("gridStocksID").view.getRow(h);record=Ext.getCmp("gridStocksID").getStore().getAt(h);body=Ext.DomQuery.selectNode("tr:nth(2) div.x-grid3-row-body",row);globalConventionalAndCFDGains=null;globalConventionalAndCFDTotalInvested=null;if(record.data.conventional!=0||record.data.CFD!=0||record.data.cuedoperations!=null){var m="";var c="";if(record.data.conventionaloperations){m+='<b><font color="#15428B">Operaciones abiertas con '+record.data.fullcompanyname+":</font></b><br>";totalPaid=0;totalReceived=0;totalCommissions=0;for(var f=record.data.conventionaloperations.length-1;f>=0;f--){var n=printConventionalOperation(record.data.conventionaloperations[f],h);totalCommissions+=n[0];m+=n[1];if(record.data.conventionaloperations[f].operationtype==listOfPossibleOperations[0]){totalPaid+=(record.data.conventionaloperations[f].numberofstocks*record.data.conventionaloperations[f].completeness_stockvalue)}if(record.data.conventionaloperations[f].operationtype==listOfPossibleOperations[1]){totalReceived+=(record.data.conventionaloperations[f].numberofstocks*record.data.conventionaloperations[f].completeness_stockvalue)}}closeValue=record.data.conventional*record.data.bid;closeValueMinusCommissions=closeValue-computeCommission(closeValue);totalInvested=totalPaid-totalReceived+totalCommissions;var d=closeValueMinusCommissions-totalInvested;g=(closeValueMinusCommissions/totalInvested-1)*100;globalConventionalAndCFDGains+=d;globalConventionalAndCFDTotalInvested+=totalInvested;strConclussion="<br>Acciones: "+record.data.conventional+" || Total Compras "+(totalReceived?"- Ventas ":"")+" + Comisiones = "+totalInvested.toFixed(3)+" €<br>";strConclussion+="Podrías vender tus acciones por "+closeValue.toFixed(3)+" € - "+(computeCommission(closeValue)).toFixed(3)+" €  de comisiones = "+(closeValueMinusCommissions).toFixed(3)+" €<br>";if(closeValueMinusCommissions>=totalInvested){strConclussion+='<font color="green">Si vendieses ganarías '+(closeValueMinusCommissions-totalInvested).toFixed(3)+" € ("+((closeValueMinusCommissions/totalInvested-1)*100).toFixed(2)+" % de beneficios sobre todo el dinero puesto)</font>"}else{strConclussion+='<font color="red">Si vendieses perderías '+(totalInvested-closeValueMinusCommissions).toFixed(3)+" € ("+((1-closeValueMinusCommissions/totalInvested)*100).toFixed(2)+" % de pérdidas sobre todo el dinero puesto)</font>"}m+=strConclussion+"<br>&nbsp;<br>";c+="["+record.data.conventional+" "+((record.data.conventional>1)?" acciones ":" acción ")+" | ";if(d>=0){c+="beneficios: "+d.toFixed(2)}else{c+="pérdidas: "+(Math.abs(d)).toFixed(2)}c+=" € ("+(Math.abs(g)).toFixed()+"%)] "}if(record.data.CFDoperations){m+='<b><font color="#15428B">Operaciones CFDs abiertas con '+record.data.fullcompanyname+":</font></b><br>";totalCommissions=0;var e=0;for(var f=record.data.CFDoperations.length-1;f>=0;f--){var n=printCFDOperation(record.data.CFDoperations[f],h);totalCommissions+=n[0];m+=n[1];if(record.data.CFDoperations[f].operationtype==listOfPossibleOperationsCFD[2]){e+=(record.data.CFDoperations[f].number_of_CFD_stocks*record.data.bid-record.data.CFDoperations[f].completeness_stockvalue*record.data.CFDoperations[f].number_of_CFD_stocks)}else{e-=(record.data.CFDoperations[f].number_of_CFD_stocks*record.data.ask-record.data.CFDoperations[f].completeness_stockvalue*record.data.CFDoperations[f].number_of_CFD_stocks)}}if(record.data.CFD>0){lastValue=record.data.bid}else{lastValue=record.data.ask}updated_settlment_for_current_period=parseFloat((lastValue-record.data.CFDlast_settlement_value)*record.data.CFD+record.data.CFDsettlment_for_current_period);alreadyReceived=e-updated_settlment_for_current_period;strConclussion="<br>Acciones: "+record.data.CFD+" || Liquidaciones recibidas - Comisiones = "+alreadyReceived.toFixed(3)+" - "+totalCommissions.toFixed(3)+" = "+(alreadyReceived-totalCommissions).toFixed(3)+" €<br>";n=printOrComputeGuarantees(record);var k=n[0];strConclussion+="Tienes actualmente bloqueados "+k.toFixed(3)+' € en concepto de garantías - <a href="javascript:codeToExecuteInLinksInRows('+h+");explainGuarantees("+h+');void(0);">Ver explicación</a><br><div id="explainGuarantees'+record.data.stock+'"></div>';if(record.data.CFD>0){lastCommission=Math.abs(computeCommission(record.data.CFD*record.data.bid));strConclussion+="Podrías vender tus acciones y hacer una última liquidación de "+updated_settlment_for_current_period.toFixed(3)+" € - "+lastCommission.toFixed(3)+" € de comisiones = "+(updated_settlment_for_current_period-lastCommission).toFixed(3)+" €<br>"}else{lastCommission=Math.abs(computeCommission(record.data.CFD*record.data.ask));strConclussion+="Podrías comprar tus acciones y hacer una última liquidación de "+updated_settlment_for_current_period.toFixed(3)+" € - "+lastCommission.toFixed(3)+" € de comisiones = "+(updated_settlment_for_current_period-lastCommission).toFixed(3)+" €<br>"}finalBalance=e-lastCommission-totalCommissions;var g=finalBalance/k*100;globalConventionalAndCFDGains+=finalBalance;globalConventionalAndCFDTotalInvested+=k;if(finalBalance>=0){strConclussion+='<font color="green">Si cerrases ahora, tus CFDs te habrían hecho ganar '+finalBalance.toFixed(3)+" € ("+g.toFixed(2)+"% de beneficios sobre las garantías depositadas) </font>"}else{strConclussion+='<font color="red">Si cerrases, tus CFDs te habrían hecho perder '+Math.abs(finalBalance).toFixed(3)+" € ("+Math.abs(g).toFixed(2)+"% de pérdidas sobre las garantías depositadas)</font>"}m+=strConclussion+"<br>&nbsp;<br>";c+="["+record.data.CFD+((record.data.CFD!=0)?" CFDs ":" CFD ")+" | ";if(d>=0){c+="beneficios: "+finalBalance.toFixed(2)}else{c+="pérdidas: "+(Math.abs(finalBalance)).toFixed(2)}c+=" € ("+(Math.abs(g)).toFixed()+"%)] "}if(record.data.cuedoperations){var a='<b><font color="#15428B">Órdenes en cola con '+record.data.fullcompanyname+":</font></b>";for(var f=0;f<record.data.cuedoperations.length;f++){strOriginalMessage=createMessage(record.data.fullcompanyname,record.data.cuedoperations[f].operationtype,record.data.cuedoperations[f].condition,"-1",record.data.cuedoperations[f].conditionalstockvalue,record.data.cuedoperations[f].numberofstocks,record.data.cuedoperations[f].expiration_timestamp,listOfOperationStatus[0],record.data.cuedoperations[f].stoploss);a+="<br>"+strOriginalMessage;a+=" <a href=\"javascript:cancelOperation('"+strOriginalMessage+"',"+record.data.cuedoperations[f].ID+");codeToExecuteInLinksInRows("+h+');void(0);">CANCELAR.</a>'}m+=a+"<br>&nbsp;<br>";c+="[ops. en cola]"}m+='<center>Accede a las opiniones de otros inversores sobre <a href="invertir-en-'+chosenTickerNiceURL+'.html">'+record.data.fullcompanyname+"</a>.</center>";if(l){if(b==false){body.innerHTML='<div style="padding:10px; margin:10px; border:1px solid #8DB2E3;">'+m+"</div>"}else{body.innerHTML='<div style="margin-bottom:5px;color:#888;text-align:center;">'+c+"</div>";Ext.fly(body).dom.style.cssText="display: block !important;"}}}return[globalConventionalAndCFDTotalInvested,globalConventionalAndCFDGains]}function filterRowsWithoutClosedOperations(a){var c=0;if(a.data.conventionaloperations){for(var b=0;b<a.data.conventionaloperations.length;b++){if(a.data.conventionaloperations[b].operationtype==listOfPossibleOperations[0]){c+=parseInt(a.data.conventionaloperations[b].numberofstocks)}if(a.data.conventionaloperations[b].operationtype==listOfPossibleOperations[1]){c-=parseInt(a.data.conventionaloperations[b].numberofstocks)}if(c==0){return true}}}c=0;if(a.data.CFDoperations){for(var b=0;b<a.data.CFDoperations.length;b++){if(a.data.CFDoperations[b].operationtype==listOfPossibleOperationsCFD[2]){c+=parseInt(a.data.CFDoperations[b].number_of_CFD_stocks)}if(a.data.CFDoperations[b].operationtype==listOfPossibleOperationsCFD[3]){c-=parseInt(a.data.CFDoperations[b].number_of_CFD_stocks)}if(c==0){return true}}}return false}function printOrComputeHistoricalOperations(g,a){row=Ext.getCmp("gridStocksID").view.getRow(g);record=Ext.getCmp("gridStocksID").getStore().getAt(g);body=Ext.DomQuery.selectNode("tr:nth(2) div.x-grid3-row-body",row);var n="";var d=0;var e=0;var h=0;if(record.data.conventionaloperations){var b=0;var k="";totalPaid=0;totalReceived=0;totalCommissions=0;for(var f=0;f<record.data.conventionaloperations.length;f++){var m=printConventionalOperation(record.data.conventionaloperations[f],g);k+=m[1];totalCommissions+=m[0];if(record.data.conventionaloperations[f].operationtype==listOfPossibleOperations[0]){totalPaid+=(record.data.conventionaloperations[f].numberofstocks*record.data.conventionaloperations[f].completeness_stockvalue)}if(record.data.conventionaloperations[f].operationtype==listOfPossibleOperations[1]){totalReceived+=(record.data.conventionaloperations[f].numberofstocks*record.data.conventionaloperations[f].completeness_stockvalue)}if(record.data.conventionaloperations[f].operationtype==listOfPossibleOperations[0]){b+=parseInt(record.data.conventionaloperations[f].numberofstocks)}if(record.data.conventionaloperations[f].operationtype==listOfPossibleOperations[1]){b-=parseInt(record.data.conventionaloperations[f].numberofstocks)}if(b==0){n+='<b><font color="#15428B">Operacion número '+parseInt(e+1)+" cerrada con "+record.data.fullcompanyname+":</font></b><br>";n+=k;var l=totalReceived-totalCommissions-totalPaid;if(l<0){n+="<font color=red>En total perdiste "}else{n+="<font color=green>En total ganaste "}n+=Math.abs(l.toFixed(3))+" € ("+(totalReceived-totalPaid).toFixed(3)+" € brutos - "+totalCommissions.toFixed(3)+" € de comisiones)</font><br>&nbsp;<br>";k="";e++;totalPaid=0;totalReceived=0;totalCommissions=0}}}d+=e;if(record.data.CFDoperations){var b=0;var k="";totalPaid=0;totalReceived=0;totalCommissions=0;for(var f=0;f<record.data.CFDoperations.length;f++){var m=printCFDOperation(record.data.CFDoperations[f],g);k+=m[1];totalCommissions+=m[0];if(record.data.CFDoperations[f].operationtype==listOfPossibleOperationsCFD[2]){totalPaid+=(record.data.CFDoperations[f].number_of_CFD_stocks*record.data.CFDoperations[f].completeness_stockvalue)}if(record.data.CFDoperations[f].operationtype==listOfPossibleOperationsCFD[3]){totalReceived+=(record.data.CFDoperations[f].number_of_CFD_stocks*record.data.CFDoperations[f].completeness_stockvalue)}if(record.data.CFDoperations[f].operationtype==listOfPossibleOperationsCFD[2]){b+=parseInt(record.data.CFDoperations[f].number_of_CFD_stocks)}if(record.data.CFDoperations[f].operationtype==listOfPossibleOperationsCFD[3]){b-=parseInt(record.data.CFDoperations[f].number_of_CFD_stocks)}if(b==0){n+='<b><font color="#15428B">Operacion con CFDs número '+parseInt(h+1)+" cerrada con "+record.data.fullcompanyname+":</font></b><br>";n+=k;var l=totalReceived-totalCommissions-totalPaid;if(l<0){n+="<font color=red>En total perdiste "}else{n+="<font color=green>En total ganaste "}n+=Math.abs(l.toFixed(3))+" € ("+(totalReceived-totalPaid).toFixed(3)+" € brutos - "+totalCommissions.toFixed(3)+" € de comisiones)</font><br>&nbsp;<br>";k="";h++;totalPaid=0;totalReceived=0;totalCommissions=0}}}d+=h;if(a==false){n+='<center>Esta funcionalidad está en fase de pruebas. Ve <a href="blog/control-de-operaciones-cerradas-y-otras-novedades.html">aquí</a> para opinar.</center>';body.innerHTML='<div style="padding:10px; margin:10px; border:1px solid #8DB2E3;">'+n+"</div>"}else{var c='<div style="margin-bottom:5px;color:#888;text-align:center;">';if(d==1){c+="<center>Tienes "+d+" operación cerrada</center>"}else{c+="<center>Tienes "+d+" operaciones cerradas</center>"}c+="</div>";body.innerHTML=c;Ext.fly(body).dom.style.cssText="display: block !important;"}}var dateTimeRenderer=function(a){if(typeof a=="string"){a=parseInt(a)}var b=new Date(a);return Ext.util.Format.date(b,"d/m H:i")};var dateRenderer=function(a){if(typeof a=="string"){a=parseInt(a)}var b=new Date(a);return Ext.util.Format.date(b,"d/m/y")};var stocksGridFormExpander=new Ext.grid.RowExpander({listeners:{beforeexpand:function(b,c,a){a.style.cssText=""},collapse:function(c,d,a,e){if(Ext.getCmp("gridselector").getActiveTab().id!="historicaltab"){printOrComputeUserGainsWithACertainTicker(e,true,true)}else{printOrComputeHistoricalOperations(e,true)}}}});function uploadDetailedGraphsLink(){document.getElementById("graficosComplementariosTextID").innerHTML='<a href="invertir-en-'+chosenTickerNiceURL+'.html">Ver <b>gráficos adicionales</b> y <b>comentarios</b> de inversores</a>'}stocksGridFormExpander.onMouseDown=function(){};stocksGridFormExpander.renderer=function(b,c,a,d){c.cellAttr='rowspan="2"';if(a.data.conventional!=0||a.data.CFD!=0||a.data.cuedoperations!=null){return'<div class="x-grid3-row-expander">&#160;</div>'}else{return""}};function computeCommission(a){INTERMEDIACION_LIMIT_LOW=2000;INTERMEDIACION_LIMIT_HIGH=15000;INTERMEDIACION_PCT_LOW=0.15;INTERMEDIACION_PCT_HIGH=0.1;STOCKS_CANNON_STEP_1=300;STOCKS_CANNON_STEP_2=3000;STOCKS_CANNON_STEP_3=35000;STOCKS_CANNON_STEP_4=70000;STOCKS_CANNON_STEP_5=140000;STOCKS_CANNON_FIXED_1=1.1;STOCKS_CANNON_PCT_1=0;STOCKS_CANNON_FIXED_2=2.45;STOCKS_CANNON_PCT_2=0.024;STOCKS_CANNON_FIXED_3=4.65;STOCKS_CANNON_PCT_3=0.012;STOCKS_CANNON_FIXED_4=6.4;STOCKS_CANNON_PCT_4=0.007;STOCKS_CANNON_FIXED_5=9.2;STOCKS_CANNON_PCT_5=0.003;STOCKS_CANNON_FIXED_6=13.4;STOCKS_CANNON_PCT_6=0;if(a==0){return 0}commission=0;if(a<=INTERMEDIACION_LIMIT_LOW){commission+=3}if(a>INTERMEDIACION_LIMIT_LOW&&a<=INTERMEDIACION_LIMIT_HIGH){commission+=a*INTERMEDIACION_PCT_LOW/100}if(a>INTERMEDIACION_LIMIT_HIGH){commission+=a*INTERMEDIACION_PCT_HIGH/100}if(a<=STOCKS_CANNON_STEP_1){commission+=(STOCKS_CANNON_FIXED_1+a*STOCKS_CANNON_PCT_1/100)}if(a>STOCKS_CANNON_STEP_1&&a<=STOCKS_CANNON_STEP_2){commission+=(STOCKS_CANNON_FIXED_2+a*STOCKS_CANNON_PCT_2/100)}if(a>STOCKS_CANNON_STEP_2&&a<=STOCKS_CANNON_STEP_3){commission+=(STOCKS_CANNON_FIXED_3+a*STOCKS_CANNON_PCT_3/100)}if(a>STOCKS_CANNON_STEP_3&&a<=STOCKS_CANNON_STEP_4){commission+=(STOCKS_CANNON_FIXED_4+a*STOCKS_CANNON_PCT_4/100)}if(a>STOCKS_CANNON_STEP_4&&a<=STOCKS_CANNON_STEP_5){commission+=(STOCKS_CANNON_FIXED_5+a*STOCKS_CANNON_PCT_5/100)}if(a>STOCKS_CANNON_STEP_5){commission+=(STOCKS_CANNON_FIXED_6+a*STOCKS_CANNON_PCT_6/100)}return commission}function printOrComputeGuarantees(k){if(k.data.CFD==0){return}CFDGUARANTEEPCT=0.05;CFDGUARANTEEINTERDAYPCT=0.1;var g=0;var l=0;var h=0;var c=0;var q=0;var o=new Array();var p=0;var f=0;var a="";for(var n=0;n<k.data.CFDoperations.length;n++){var b=k.data.real_time_timestamp;var d=new Date(parseInt(k.data.CFDoperations[n].completeness_timestamp)*1000);if(dateRenderer(d)!=dateRenderer(b)){break}if(k.data.CFDoperations[n].operationtype==listOfPossibleOperationsCFD[2]){g+=k.data.CFDoperations[n].number_of_CFD_stocks}else{g-=k.data.CFDoperations[n].number_of_CFD_stocks}var e=Math.abs(CFDGUARANTEEPCT*k.data.CFDoperations[n].number_of_CFD_stocks*k.data.CFDoperations[n].completeness_stockvalue);o[p]="5% de "+Math.abs(k.data.CFDoperations[n].number_of_CFD_stocks)+" "+((Math.abs(k.data.CFDoperations[n].number_of_CFD_stocks)!=1)?" acciones ":" acción ")+" x "+parseFloat(k.data.CFDoperations[n].completeness_stockvalue).toFixed(3)+" € (el precio al que se ejecutó la operación) = "+parseFloat(e).toFixed(3)+" €";p++;h+=e}for(f=p-1;f>=0;f--){var m=" más el ";if(f==p-1){m="al "}a+=m+o[f]}if(h){a+=", por la operativa de hoy."}l=k.data.CFD-g;q=k.data.CFDlast_settlement_value-k.data.CFDsettlment_for_current_period/k.data.CFD;c=Math.abs(CFDGUARANTEEINTERDAYPCT*l*q);if(c){if(h){a+=" Además, hay que sumar el "}else{a+="al "}a+="10% de "+l+" "+(Math.abs(l!=1)?" acciones ":" acción ")+" (las que tenías en el último cierre) x "+parseFloat(q).toFixed(3)+" € (el precio con el que se calculó la última liquidación) = "+parseFloat(c).toFixed(3)+" €.";if(h){a+=" En total, "+parseFloat(c+h).toFixed(3)+" €."}}return[c+h,a]}function codeToExecuteInLinksInRows(a){indexNotToCollapse=a;myRow=Ext.getCmp("gridStocksID").view.getRow(a);stocksGridFormExpander.expandRow(myRow)}stocksGridFormExpander.on("expand",function(c,b,a,d){if(chosenTickerToBeReloaded!=b.data.stock){Ext.getCmp("gridStocksID").getSelectionModel().selectRow(d)}if(Ext.getCmp("gridselector").getActiveTab().id=="historicaltab"){printOrComputeHistoricalOperations(d,false)}else{printOrComputeUserGainsWithACertainTicker(d,false,true)}});stocksGridFormExpander.on("collapse",function(c,b,a,d){Ext.getCmp("gridStocksID").getSelectionModel().deselectRow(d)});var lastStock=null;var lastTimeSpanInDays=1;function reloadQuotesForOFC(b,a){if(b==lastStock){Ext.getCmp("quotationsGraphID").getEl().unmask();return}Ext.getCmp("quotationsGraphID").getEl().mask("Descargando gráfico interactivo...");if(b==null){b=lastStock}else{lastStock=b}if(a==null){a=lastTimeSpanInDays}else{lastTimeSpanInDays=a}if(b==null||a==null){alert("Error, avisar al webmaster, gracias!")}connectionQuotesForOFC=new Ext.data.Connection();connectionQuotesForOFC.request({url:"server/getQuotesExtended.php?days="+a+"&stock="+b,method:"get",callback:function(d,e,c){if(e){objectOFCQuotations=document.getElementById("ofc_quotations");if(objectOFCQuotations.load){objectOFCQuotations.load(c.responseText);uploadDetailedGraphsLink()}}Ext.getCmp("quotationsGraphID").getEl().unmask()}})}function reloadQuotesForOFCInSomeSeconds(c,b,a){Ext.getCmp("quotationsGraphID").getEl().mask("Descargando gráfico interactivo...");setTimeout("if ('"+c+"' == chosenTickerToBeReloaded) reloadQuotesForOFC('"+c+"', "+b+");",1000*a)}function enableGridSelector(){if(loggedUsername!=""){Ext.getCmp("portfoliotab").enable();Ext.getCmp("historicaltab").enable()}Ext.getCmp("mercadocontinuotab").enable();Ext.getCmp("ibextab").enable()}function disableGridSelector(){Ext.getCmp("portfoliotab").disable();Ext.getCmp("historicaltab").disable();Ext.getCmp("mercadocontinuotab").disable();Ext.getCmp("ibextab").disable()}function reloadStocksGridForm(){if(Ext.getCmp("gridselector").getActiveTab().id=="mercadocontinuotab"){jsonStoreStockValues.load({params:{IBEX35:false,cartera:false,historical:false}})}if(Ext.getCmp("gridselector").getActiveTab().id=="ibextab"){jsonStoreStockValues.load({params:{IBEX35:true,cartera:false,historical:false}})}if(Ext.getCmp("gridselector").getActiveTab().id=="portfoliotab"){jsonStoreStockValues.load({params:{IBEX35:false,cartera:true,historical:false}})}if(Ext.getCmp("gridselector").getActiveTab().id=="historicaltab"){jsonStoreStockValues.load({params:{IBEX35:false,cartera:false,historical:true}})}}function startStocksGridForm(){var u=new Ext.data.SimpleStore({fields:["operations"],data:listOfPossibleOperations});var p=new Ext.data.SimpleStore({fields:["operations"],data:buyOperation});var c=new Ext.data.SimpleStore({fields:["operations"],data:listOfPossibleOperationsCFD});var s=new Ext.data.SimpleStore({fields:["operations"],data:buyOperationCFD});var z=new Ext.data.SimpleStore({fields:["conditions"],data:listOfMailConditions});var o=new Ext.data.SimpleStore({fields:["conditions"],data:listOfConditions});var d=new Ext.data.SimpleStore({fields:["limitedperiod"],data:listOfLimitedPeriod});var e=new Ext.data.SimpleStore({fields:["stoploss"],data:listOfStopLoss});function y(){var D=new Date();expirationTimestamp=D.format("U");if(Ext.getCmp("fechalimiteID").getValue()==listOfLimitedPeriod[0]){expirationTimestamp=0}if(Ext.getCmp("fechalimiteID").getValue()==listOfLimitedPeriod[1]){expirationTimestamp+=24*60*60}if(Ext.getCmp("fechalimiteID").getValue()==listOfLimitedPeriod[2]){expirationTimestamp+=7*24*60*60}if(Ext.getCmp("fechalimiteID").getValue()==listOfLimitedPeriod[3]){expirationTimestamp+=30*24*60*60}if(Ext.getCmp("operationTypeID").getValue()==OPCOMPRA||Ext.getCmp("operationTypeID").getValue()==OPCOMPRACFD){dBidOrAskValue=chosenTickerAskValue}if(Ext.getCmp("operationTypeID").getValue()==OPVENDE||Ext.getCmp("operationTypeID").getValue()==OPVENDECFD){dBidOrAskValue=chosenTickerBidValue}if(Ext.getCmp("operationTypeID").getValue()==OPMAIL){dBidOrAskValue=chosenTickerCurrentValue}var E=createMessage(B.findById("fullcompanynameID").getValue(),Ext.getCmp("operationTypeID").getValue(),B.findById("conditionsID").getValue(),dBidOrAskValue,B.findById("valueID").getValue(),B.findById("accionesID").getValue(),expirationTimestamp,"set",B.findById("stoplossID").getValue());if(Ext.getCmp("operationTypeID").getValue()==OPVENDECFD||Ext.getCmp("operationTypeID").getValue()==OPCOMPRACFD){E+="<br>----<br>Haciendo uso de los CFDs usted no desembolsará su dinero en la operación. Inicialmente el broker tan solo impondrá una garantía del 5% del valor total de la operación (excepto en el caso en que se esté cerrando; supuesto que conllevaría la supresión de la garantía). Si su operación no se cierra el mismo día en que se abre, entonces el broker actualizará la garantía al final de cada jornada, situándola en un 10% del valor total. Los CFDs se liquidan diáriamente; observe su panel de operaciones al final de cada jornada para ver si la liquidación le ha sido favorable o no."}return E}function t(){if(Ext.getCmp("operationTypeID").getValue()==OPMAIL){Ext.getCmp("accionesID").setValue(1)}stockValue=Ext.getCmp("valueID").getValue();if(stockValue==""){Ext.getCmp("totalvalorID").reset();Ext.getCmp("accionesID").reset();Ext.getCmp("totalvalorID").disable();Ext.getCmp("accionesID").disable()}numberOfStocks=B.findById("accionesID").getValue();totalValue=stockValue*numberOfStocks;if(isFloat(totalValue)){B.findById("totalvalorID").setValue(totalValue.toFixed(3)+"   ("+stockValue+"x"+numberOfStocks+")")}}function C(){if((Ext.getCmp("operationTypeID").getValue()==OPCOMPRA||Ext.getCmp("operationTypeID").getValue()==OPCOMPRACFD||Ext.getCmp("operationTypeID").getValue()==OPVENDECFD)&&(panelMode=="advancedPanel")){Ext.getCmp("stoplossID").getEl().up(".x-form-item").setDisplayed(true)}else{Ext.getCmp("stoplossID").setValue(listOfStopLoss[0]);Ext.getCmp("stoplossID").getEl().up(".x-form-item").setDisplayed(false)}Ext.getCmp("totalvalorID").reset();Ext.getCmp("accionesID").reset();if((Ext.getCmp("conditionsID").getValue()==listOfConditions[0])&&(Ext.getCmp("operationTypeID").getValue()==OPCOMPRA||Ext.getCmp("operationTypeID").getValue()==OPCOMPRACFD)){Ext.getCmp("valueID").disable();Ext.getCmp("valueID").setValue(chosenTickerAskValue)}if((Ext.getCmp("conditionsID").getValue()==listOfConditions[0])&&(Ext.getCmp("operationTypeID").getValue()==OPVENDE||Ext.getCmp("operationTypeID").getValue()==OPVENDECFD)){Ext.getCmp("valueID").disable();Ext.getCmp("valueID").setValue(chosenTickerBidValue)}if(Ext.getCmp("conditionsID").getValue()!=listOfConditions[0]){Ext.getCmp("valueID").enable();Ext.getCmp("valueID").setValue("");Ext.getCmp("totalvalorID").disable();Ext.getCmp("accionesID").disable();if(Ext.getCmp("operationTypeID").getValue()!=OPMAIL){Ext.getCmp("fechalimiteID").getEl().up(".x-form-item").setDisplayed(true)}}else{Ext.getCmp("totalvalorID").enable();Ext.getCmp("accionesID").enable();Ext.getCmp("fechalimiteID").getEl().up(".x-form-item").setDisplayed(false)}t();if(Ext.getCmp("operationTypeID").getValue()==OPMAIL){Ext.getCmp("totalvalorID").getEl().up(".x-form-item").setDisplayed(false);Ext.getCmp("anotacionID").getEl().up(".x-form-item").setDisplayed(false);Ext.getCmp("accionesID").getEl().up(".x-form-item").setDisplayed(false);Ext.getCmp("fechalimiteID").getEl().up(".x-form-item").setDisplayed(false);Ext.getCmp("valueID").enable();Ext.getCmp("valueID").setValue("");Ext.getCmp("fechalimiteID").setValue(listOfLimitedPeriod[0]);Ext.getCmp("conditionsID").bindStore(null);Ext.getCmp("conditionsID").bindStore(z,true);if(Ext.getCmp("conditionsID").getValue()==listOfConditions[0]){Ext.getCmp("conditionsID").setValue(listOfMailConditions[0])}}else{Ext.getCmp("totalvalorID").getEl().up(".x-form-item").setDisplayed(true);Ext.getCmp("anotacionID").getEl().up(".x-form-item").setDisplayed(true);Ext.getCmp("accionesID").getEl().up(".x-form-item").setDisplayed(true);if(Ext.getCmp("conditionsID").getValue()==listOfConditions[0]){Ext.getCmp("fechalimiteID").getEl().up(".x-form-item").setDisplayed(false)}Ext.getCmp("conditionsID").bindStore(null);Ext.getCmp("conditionsID").bindStore(o,true)}}jsonStoreStockValues=new Ext.data.JsonStore({url:"server/getLastValues.php",totalProperty:"total",method:"post",root:"data",fields:[{name:"ID"},{name:"stock"},{name:"fullcompanyname"},{name:"niceURL"},{name:"value",type:"float"},{name:"bid",type:"float"},{name:"ask",type:"float"},{name:"changepoints",type:"float"},{name:"changepct",type:"float"},{name:"open",type:"float"},{name:"intra_top",type:"float"},{name:"intra_down",type:"float"},{name:"conventional",type:"float"},{name:"conventionaloperations"},{name:"CFD",type:"int"},{name:"CFDoperations"},{name:"cuedoperations"},{name:"CFDlast_settlement_value"},{name:"CFDsettlment_for_current_period"},{name:"volume",type:"int"},{name:"real_time_timestamp",type:"date",dateFormat:"timestamp"},{name:"delayed_timestamp",type:"date",dateFormat:"timestamp"}]});jsonStoreStockValues.setDefaultSort("fullcompanyname","asc");jsonStoreStockValues.on("load",function(){selModel.selectFirstRow();if(hangingFirstLoad!=false){hangingFirstLoad.hide();uploadDetailedGraphsLink()}hangingFirstLoad=false;enableGridSelector();if(Ext.getCmp("gridselector").getActiveTab().id=="historicaltab"){jsonStoreStockValues.filterBy(filterRowsWithoutClosedOperations)}for(iLoopPrintPreview=0;iLoopPrintPreview<Ext.getCmp("gridStocksID").getStore().getCount();iLoopPrintPreview++){if(Ext.getCmp("gridselector").getActiveTab().id!="historicaltab"){printOrComputeUserGainsWithACertainTicker(iLoopPrintPreview,true,true)}else{printOrComputeHistoricalOperations(iLoopPrintPreview,true)}}},this,true);jsonStoreStockValues.on("beforeload",function(){disableGridSelector()},this,true);function f(D){return"<i>"+D+"</i>"}function n(D){if(D>0){return'<span style="color:green;">'+D+"</span>"}else{if(D<0){return'<span style="color:red;">'+D+"</span>"}}return D}function q(D){return D+" &#8364;"}function g(D){if(D>=0){return'<span style="color:green;">'+D+"%</span>"}else{if(D<0){return'<span style="color:red;">'+D+"%</span>"}}return D}function k(G,F,E){var D="";if(E.data.conventional!=0){D="ACC: "+E.data.conventional+"<br>"}if(E.data.CFD!=0){D+="CFD: "+E.data.CFD+"<br>"}if(E.data.cuedoperations!=null){D+="EN COLA<br>"}if(D==""){D="-"}return D}function r(F,E,D,G){if(Ext.getCmp("gridselector").getActiveTab().id=="historicaltab"){return"click para ver"}ganancias=printOrComputeUserGainsWithACertainTicker(G,false,false);if(ganancias[0]==null||ganancias[1]==null){return"-"}else{if(ganancias[1]>=0){szColor="<font color=green>"}else{szColor="<font color=red>"}szTmp=szColor+(ganancias[1]).toFixed(2)+" €</font>";return szTmp}}function v(D){D=D.slice(0,12);return D}var m=new Ext.grid.ColumnModel([stocksGridFormExpander,{id:"company",header:"Ticker",width:75,hidden:true,sortable:true,locked:false,dataIndex:"stock"},{header:"Empresa",width:95,sortable:true,renderer:v,dataIndex:"fullcompanyname"},{header:"Valor",width:70,sortable:true,renderer:q,dataIndex:"value"},{header:"Cambio (%)",width:70,sortable:true,renderer:g,dataIndex:"changepct"},{header:"Volumen",width:70,sortable:true,dataIndex:"volume"},{header:"Beneficios",width:80,sortable:false,renderer:r},{header:"Fecha",width:70,sortable:true,renderer:dateTimeRenderer,dataIndex:"delayed_timestamp"}]);function w(){if(Ext.getCmp("textAreaStockCommentMainPageID").getValue().toString().length==0){return}if(Ext.getCmp("textAreaStockCommentMainPageID").getValue().toString().length>stocksCommentMaxLength){Ext.MessageBox.alert("Reduce el mensaje","Los mensajes no pueden superar los "+stocksCommentMaxLength+" caracteres. Hazlo un poco más corto, por favor.");return}Ext.getCmp("textAreaStockCommentMainPageID").disable();Ext.getCmp("enviaOpinionMainPageID").disable();var D=new Ext.data.Connection();D.request({url:"server/sendMessage.php",method:"post",params:{message_type:3,ticker:x,message:Ext.getCmp("textAreaStockCommentMainPageID").getValue()},callback:function(F,G,E){Ext.getCmp("textAreaStockCommentMainPageID").enable();Ext.getCmp("enviaOpinionMainPageID").enable();if(!G){Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible enviar el mensaje");return}else{if(Ext.util.JSON.decode(E.responseText).success==true){Ext.getCmp("panelSendStockCommentID").getEl().update("¡Muchas gracias! Acabamos de publicar tu comentario.<br><a href='invertir-en-"+l+".html'>Puedes ver tu comentario así como los comentarios de otros usuarios sobre "+a+" siguiendo este link.</a>");Ext.getCmp("windowAfterOperationID").setActive(true);Ext.getCmp("windowAfterOperationID").setActive(false);if(pageTracker){pageTracker._trackEvent("comment","send","stock")}}else{Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible enviar el mensaje")}}}})}var b=new Ext.ux.grid.Search({iconCls:"icon-zoom",minChars:2,autoFocus:true,mode:"local",width:200,searchText:"&nbsp;Busca una empresa por su nombre o ticker:",showSelectAll:false,disableIndexes:["value","changepct","volume","conventional","delayed_timestamp"],position:"top"});var x;var a;var l;function A(D,F,G){x=D;a=F;l=G;var E=new Ext.Window({title:"Resultado de la operaci&oacute;n",id:"windowAfterOperationID",layout:"fit",modal:"true",width:400,closeAction:"close",items:[{xtype:"form",border:false,bodyStyle:"background-color:transparent;",style:"padding-left: 5px;padding-right: 5px;padding-top: 10px;",autoHeight:true,items:[{xtype:"panel",border:false,bodyStyle:"background-color:transparent;",html:"<b><font color=green>La operaci&oacute;n ha sido puesta en cola con éxito</font></b><br> El broker procesa las operaciones cada 2 minutos durante horario laboral de la Bolsa de Madrid. Consulta la tabla de operaciones para ver la evoluci&oacute;n."}],buttons:[{text:"OK: cerrar ventana",handler:function(){E.close()}}]},{xtype:"panel",id:"panelSendStockCommentID",border:true,layout:"column",bodyStyle:"background-color:transparent;",style:"padding-left: 10px;padding-right:10px;margin-left:10px;margin-right:10px;margin-bottom:10px;margin-top:10px;",autoHeight:true,layout:"column",items:[{columnWidth:1,xtype:"panel",border:false,bodyStyle:"background-color:transparent;",html:"Si te apetece, <b>escribe un comentario</b> sobre tu operación para que aparezca en el <b>foro público de "+a+'</b>.<div id="writeStockCommentCharCounterID"></div>'},{columnWidth:1,xtype:"form",buttonAlign:"right",border:true,layout:"column",bodyStyle:"background-color:transparent;",style:"padding-left: 10px;padding-right:10px;padding-top:10px;",autoHeight:true,items:[{xtype:"textarea",id:"textAreaStockCommentMainPageID",height:60,width:"100%",border:false,style:"overflow-y:scroll;",preventScrollbars:false,maxLengthText:"Por favor no superes los +"+stocksCommentMaxLength+" caracteres",emptyText:"¡Anímante a escribir tus informaciones, intuiciones o preguntas sobre "+a+"! Y lee la opinión de otros usuarios.",validator:function(I){var H=stocksCommentMaxLength-I.toString().length;if(H>=0){remainingCharsFontColor="gray"}else{remainingCharsFontColor="red"}document.getElementById("writeStockCommentCharCounterID").innerHTML='<center><b><font color="'+remainingCharsFontColor+'"><br>Aún tienes '+H+" caracteres disponibles</font></b></center>";return true}}],buttons:[{id:"enviaOpinionMainPageID",text:"Publicar comentario",handler:function(){w()}}]}]}]});E.show()}var B=new Ext.FormPanel({renderTo:"contentMainPage",id:"company-form",frame:true,labelAlign:"left",bodyStyle:"padding:5px",url:"server/operations.php",method:"post",width:800,layout:"column",items:[{columnWidth:0.6375,layout:"fit",items:[{id:"gridStocksID",xtype:"grid",loadMask:{msg:"Descargando valores..."},ds:jsonStoreStockValues,cm:m,sm:selModel=new Ext.grid.RowSelectionModel({singleSelect:true,listeners:{rowselect:function(G,F,E){Ext.getCmp("valueID").reset();Ext.getCmp("conditionsID").reset();Ext.getCmp("totalvalorID").reset();Ext.getCmp("accionesID").reset();Ext.getCmp("totalvalorexactoID").reset();Ext.getCmp("anotacionID").reset();Ext.getCmp("stoplossID").reset();Ext.getCmp("totalvalorexactoID").disable();chosenTicker=E.data.stock;chosenTickerFullCompanyName=E.data.fullcompanyname;chosenTickerCurrentValue=E.data.value;chosenTickerBidValue=E.data.bid;chosenTickerToBeReloaded=E.data.stock;chosenTickerAskValue=E.data.ask;chosenTickerNiceURL=E.data.niceURL;Ext.getCmp("company-form").getForm().loadRecord(E);if(E.data.conventional>0){Ext.getCmp("operationTypeID").bindStore(null);if(panelMode=="advancedPanel"){Ext.getCmp("operationTypeID").bindStore(c,true)}else{Ext.getCmp("operationTypeID").bindStore(u,true)}Ext.getCmp("operationTypeID").setValue(OPCOMPRA)}else{Ext.getCmp("operationTypeID").bindStore(null);if(panelMode=="advancedPanel"){Ext.getCmp("operationTypeID").bindStore(s,true)}else{Ext.getCmp("operationTypeID").bindStore(p,true)}Ext.getCmp("operationTypeID").setValue(OPCOMPRA)}Ext.getCmp("conditionsID").setValue(listOfConditions[0]);Ext.getCmp("stoplossID").setValue(listOfStopLoss[0]);Ext.getCmp("valueID").disable();Ext.getCmp("valueID").setValue(chosenTickerAskValue);Ext.getCmp("stockID").getEl().up(".x-form-item").setDisplayed(false);Ext.getCmp("fechalimiteID").setValue(listOfLimitedPeriod[0]);Ext.getCmp("fechalimiteID").getEl().up(".x-form-item").setDisplayed(false);Ext.getCmp("totalvalorID").getEl().up(".x-form-item").setDisplayed(true);Ext.getCmp("anotacionID").getEl().up(".x-form-item").setDisplayed(true);Ext.getCmp("accionesID").getEl().up(".x-form-item").setDisplayed(true);Ext.getCmp("stoplossID").setValue(listOfStopLoss[0]);if(panelMode=="normalPanel"){Ext.getCmp("stoplossID").getEl().up(".x-form-item").setDisplayed(false)}else{Ext.getCmp("stoplossID").getEl().up(".x-form-item").setDisplayed(true)}if(isQuotationsFlashLoad==false){var D={};D.wmode="transparent";swfobject.embedSWF("server/open-flash-chart.swf","ofc_quotations","100%","150","9.0.0","expressInstall.swf",{"data-file":escape("server/getQuotesExtended.php?days=1&stock="+E.data.stock),loading:"Descargando motor gráfico...",id:"value"},D);lastStock=E.data.stock;isQuotationsFlashLoad=true;Ext.getCmp("quotationsGraphID").getEl().mask();Ext.getCmp("quotationsGraphID").getEl().unmask()}else{reloadQuotesForOFCInSomeSeconds(E.data.stock,null,1)}Ext.getCmp("masinfoID").getEl().update("<b>"+E.data.fullcompanyname+"</b><br>Fecha: "+dateTimeRenderer(E.data.delayed_timestamp)+"<br>Oferta: "+E.data.bid+"<br>Demanda: "+E.data.ask+"<br>&Uacute;ltimo valor: "+E.data.value+"<br>Min: "+E.data.intra_down+" Max: "+E.data.intra_top+"<br>Apertura: "+E.data.open+"<br>Cambio: "+E.data.changepoints+"/"+E.data.changepct+"%<br>Volumen: "+E.data.volume+'<br><a href="invertir-en-'+chosenTickerNiceURL+'.html">Acceder a gráficos (<b>RSI</b>, <b>volumen</b>)</a>')}}}),plugins:[b,stocksGridFormExpander],height:350,title:'<span style="float: left;">Empresas del Mercado Continuo</span> <span style="float: right;"><a href="blog/?p=23" target="_blank">Ayuda</a>&nbsp;&nbsp;&nbsp;&nbsp;</span>',border:true,listeners:{render:function(D){D.getSelectionModel().selectRow(0);D.getSelectionModel().selectFirstRow()},rowclick:function(D,G,F){if(indexNotToCollapse==G){indexNotToCollapse=-1;return}var E=D.getStore().getAt(G);if(E.data.conventional!=0||E.data.CFD!=0||E.data.cuedoperations!=null){myRow=D.view.getRow(G);if(Ext.fly(myRow).hasClass("x-grid3-row-expanded")){stocksGridFormExpander.collapseRow(myRow)}else{stocksGridFormExpander.expandRow(myRow)}}},sortchange:function(E,D){for(i=0;i<E.getStore().getCount();i++){myRow=E.view.getRow(i);stocksGridFormExpander.collapseRow(myRow)}},delay:10},tbar:new Ext.Toolbar(),deferredRender:false},{xtype:"tabpanel",id:"gridselector",style:"margin-bottom: 10px;",activeTab:0,border:false,plain:true,tabPosition:"bottom",items:[{title:"Mercado Continuo",id:"mercadocontinuotab",html:"<div height: 100%></div>"},{title:"IBEX 35",id:"ibextab",html:"<div height: 100%></div>"},{title:"<< Mi Cartera >>",id:"portfoliotab",disabled:true,html:"<div height: 100%></div>"},{title:"<< Mi Historial >>",id:"historicaltab",disabled:true,html:"<div height: 100%></div>"}],listeners:{tabchange:function(E,D){reloadStocksGridForm();gridpanelid=D.id;if(gridpanelid=="portfoliotab"){Ext.getCmp("gridStocksID").setTitle("Mi Cartera")}if(gridpanelid=="historicaltab"){Ext.getCmp("gridStocksID").setTitle("Mi Historial")}if(gridpanelid=="mercadocontinuotab"){Ext.getCmp("gridStocksID").setTitle("Empresas del Mercado Continuo")}if(gridpanelid=="ibextab"){Ext.getCmp("gridStocksID").setTitle("Empresas del IBEX 35")}}}}]},{columnWidth:0.3625,bodyStyle:"padding-left:10px;",items:[{title:'<span style="float: left;">Operaciones posibles</span> <span style="float: right;"><a href="blog/?p=8" target="_blank">Ayuda</a></span>',bodyStyle:"padding-bottom:10px",html:"<div height: 100%></div>"},{xtype:"tabpanel",activeTab:0,tabPosition:"top",border:true,plain:true,items:[{title:"Modo Normal",id:"normalPanel",html:"<div height: 100%></div>"},{title:"Modo Avanzado: CFDs/STOPs",id:"advancedPanel",html:"<div height: 100%></div>"}],listeners:{tabchange:function(E,D){panelMode=D.id;if(panelMode=="advancedPanel"){Ext.getCmp("stoplossID").reset();Ext.getCmp("stoplossID").setValue(listOfStopLoss[0]);if(Ext.getCmp("operationTypeID").getValue()==OPCOMPRA||Ext.getCmp("operationTypeID").getValue()==OPCOMPRACFD||Ext.getCmp("operationTypeID").getValue()==OPVENDECFD){Ext.getCmp("stoplossID").getEl().up(".x-form-item").setDisplayed(true)}if(Ext.getCmp("operationTypeID").store==u){Ext.getCmp("operationTypeID").bindStore(null);Ext.getCmp("operationTypeID").bindStore(c,true)}if(Ext.getCmp("operationTypeID").store==p){Ext.getCmp("operationTypeID").bindStore(null);Ext.getCmp("operationTypeID").bindStore(s,true)}}else{Ext.getCmp("stoplossID").reset();Ext.getCmp("stoplossID").setValue(listOfStopLoss[0]);if(Ext.getCmp("stoplossID").getEl()!=null){Ext.getCmp("stoplossID").getEl().up(".x-form-item").setDisplayed(false)}if(Ext.getCmp("operationTypeID").store==c){Ext.getCmp("operationTypeID").bindStore(null);Ext.getCmp("operationTypeID").bindStore(u,true)}if(Ext.getCmp("operationTypeID").store==s){Ext.getCmp("operationTypeID").bindStore(null);Ext.getCmp("operationTypeID").bindStore(p,true)}if(Ext.getCmp("operationTypeID").getValue()!=OPMAIL){Ext.getCmp("operationTypeID").setValue(OPCOMPRA)}}}}},{xtype:"fieldset",labelWidth:75,defaults:{width:170},defaultType:"textfield",autoHeight:true,bodyStyle:Ext.isIE?"padding:20px 0 0px 0px;":"padding:10px 5px;",border:true,style:"background-color:#FFFFFF;border-color:#8DB2E3;padding:5px;",items:[{name:"stock",id:"stockID"},{fieldLabel:"Empresa",emptyText:"Cargando...",id:"fullcompanynameID",name:"fullcompanyname",readOnly:"true"},{id:"operationTypeID",xtype:"combo",displayField:"name",triggerAction:"all",mode:"local",editable:false,emptyText:"Compras o vendes",selectOnFocus:true,fieldLabel:"Acci&oacute;n",displayField:"operations",store:u,listeners:{select:C}},{id:"conditionsID",xtype:"combo",displayField:"name",triggerAction:"all",mode:"local",editable:false,value:listOfConditions[0],selectOnFocus:true,fieldLabel:"Condici&oacute;n",displayField:"conditions",store:o,listeners:{select:C}},{fieldLabel:"Valor (€)",id:"valueID",allowBlank:false,emptyText:strIntroValCondicional,validator:function(D){if(isFloat(D)&&D>0){Ext.getCmp("totalvalorID").enable();Ext.getCmp("accionesID").enable();return true}else{Ext.getCmp("totalvalorID").setRawValue("");Ext.getCmp("accionesID").setRawValue("");Ext.getCmp("totalvalorID").disable();Ext.getCmp("accionesID").disable();if(D.indexOf(",")>-1){return'Separa los decimales con "."'}return strIntroValCondicional}}},{xtype:"textfield",id:"accionesID",fieldLabel:"Nº acciones",name:"acciones",allowBlank:false,validator:function(D){if(!isInt(D)||D<=0){return"Introduzca un valor entero positivo"}stockID=jsonStoreStockValues.find("fullcompanyname",Ext.getCmp("fullcompanynameID").getValue());stockRecord=jsonStoreStockValues.getAt(stockID);varOwned=stockRecord.data.conventional;if(Ext.getCmp("operationTypeID").getValue()==OPVENDE&&D>varOwned){return"S&oacute;lo puede vender un n&uacute;mero de acciones igual o inferior a las pose&iacute;das: "+varOwned}return true}},{xtype:"textfield",fieldLabel:"Total (&#8364;)",id:"totalvalorID",allowBlank:false,validator:function(D){splitValue=D.split(" ");if(isFloat(splitValue[0])&&splitValue[0]>0){return true}return"Introduzca una cifra positiva (con decimales opcionalmente)"}},{xtype:"textfield",fieldLabel:"Valor total exacto (&#8364;)",id:"totalvalorexactoID",readOnly:"true"},{xtype:"combo",fieldLabel:"Fecha l&iacute;mite",id:"fechalimiteID",readOnly:true,displayField:"limitedperiod",triggerAction:"all",mode:"local",editable:false,store:d},{xtype:"combo",fieldLabel:'Stop Loss <a href="blog/?p=45" target="_blank">?</a>',id:"stoplossID",readOnly:true,displayField:"stoploss",triggerAction:"all",mode:"local",editable:false,store:e},{xtype:"textarea",fieldLabel:"Anotaci&oacute;n",height:65,id:"anotacionID",maxLength:256,preventScrollbars:true,maxLengthText:"Por favor no supere los 256 carácteres",emptyText:"Opcionalmente introduce una nota sobre la operación para tus futuras consultas"}]}],buttons:[{text:"Lanzar la operaci&oacute;n",handler:function(){if((B.getForm()).isValid()){if(loggedUsername==""){Ext.Msg.alert("Resultado de la operaci&oacute;n","Debe abrir una sesi&oacute;n para poder hacer operaciones.")}else{Ext.MessageBox.confirm("Confirmaci&oacute;n","Por favor, confirme la operaci&oacute;n:<br>"+y(),function(D){if(D=="yes"){Ext.getCmp("anotacionID").setRawValue(Ext.getCmp("anotacionID").getValue());(B.getForm()).submit({waitTitle:"Comprobando acceso",waitMsg:"Espere un momento por favor, realizando la operaci&oacute;n...",failure:function(E,F){Ext.Msg.alert("Resultado de la operaci&oacute;n","La operaci&oacute;n no ha podido ser puesta en cola. Por favor, pru&eacute;belo m&aacute;s tarde.")},success:function(E,F){if(pageTracker){pageTracker._trackEvent("operation","new",Ext.getCmp("operationTypeID").getValue())}A(chosenTicker,chosenTickerFullCompanyName,chosenTickerNiceURL);reloadUserForm();reloadStocksGridForm()}})}})}}else{Ext.MessageBox.alert("Error en el formulario","El formulario no est&aacute; correctamente cumplimentado.")}}}],buttonAlign:"center"},{columnWidth:0.85,id:"quotationsGraphID",items:[{title:"Cotizaciones"},{id:"quotationsID",xtype:"panel",border:true,html:'<center><div id="ofc_quotations"></div><div style="inline-table;width:450;"><div style="padding-top:3px;float:left;">Ver:</div><div style="float:left; width: 100;"><select id="chooseTimeSpanStocks" name="chooseTimeSpanStocks"><option value="1">1 día</option><option value="5">5 días</option><option value="26">1 mes</option><option value="77">3 meses</option><option value="364">1 año</option></select></div><div style="padding-top:3px;float:left;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- <div style="display:inline;" id="graficosComplementariosTextID"></div><div></div></center>'}]},{columnWidth:0.15,items:[{title:'<span style="float: left;">Más info</span> <span style="float: right;"><a href="blog/?p=23" target="_blank">Ayuda</a></span>'},{id:"masinfoID",xtype:"panel",border:true,layout:"fit",style:"padding-left: 5px; padding-top: 5px;"}]}]});hangingFirstLoad=Ext.Msg.wait("Preparando la plataforma...");Ext.getCmp("fechalimiteID").getEl().up(".x-form-item").setDisplayed(false);Ext.getCmp("stoplossID").getEl().up(".x-form-item").setDisplayed(false);jsonStoreStockValues.load({params:{IBEX35:false,cartera:false}});B.render();var h=new Ext.form.ComboBox({triggerAction:"all",ctCls:"x-small-editor",transform:"chooseTimeSpanStocks",width:100,editable:false,forceSelection:true});h.on("select",function(){reloadQuotesForOFC(null,this.value)});Ext.getCmp("totalvalorexactoID").getEl().up(".x-form-item").setDisplayed(false);B.findById("accionesID").getEl().on("keyup",function(D){t()});B.findById("totalvalorID").getEl().on("blur",function(){Ext.getCmp("totalvalorexactoID").getEl().up(".x-form-item").setDisplayed(false);B.findById("totalvalorID").setValue(B.findById("totalvalorexactoID").getValue())});B.findById("totalvalorID").getEl().on("focus",function(){totalValue=B.findById("totalvalorID").getValue();totalValue=totalValue.split(" ");B.findById("totalvalorID").setValue(totalValue[0])});B.findById("totalvalorID").getEl().on("keyup",function(){stockValue=Ext.getCmp("valueID").getValue();totalValue=B.findById("totalvalorID").getValue();numberOfStocks=Math.round(totalValue/stockValue);totalValue=stockValue*numberOfStocks;if(isFloat(totalValue)){B.findById("totalvalorexactoID").setValue(totalValue.toFixed(3)+"   ("+stockValue+"x"+numberOfStocks+")");B.findById("accionesID").setValue(numberOfStocks);Ext.getCmp("totalvalorexactoID").getEl().up(".x-form-item").setDisplayed(true)}});B.findById("valueID").getEl().on("keyup",t);B.findById("valueID").getEl().on("focus",function(){if(B.findById("valueID").validateValue(B.findById("valueID").getValue())==false){B.findById("valueID").setRawValue("")}})}Ext.App=function(a){Ext.apply(this,a||{});this.addEvents({ready:true})};Ext.extend(Ext.App,Ext.util.Observable,{isReady:false,initApp:function(){this.fireEvent("ready",this);this.isReady=true},onReady:function(b,a){if(!this.isReady){this.on("ready",b,a)}else{b.call(a,this)}}});App=new Ext.App();function zseedFixer(){Ext.form.ComboBox.prototype.initComponent=Ext.form.ComboBox.prototype.initComponent.createSequence(function(){this.on("render",function(){var b=Ext.WindowMgr.zseed+5000;this.on("expand",function(){this.list.setStyle("z-index",b.toString())},this,{single:true})},this,{single:true})});var a=Ext.MessageBox.alert;Ext.MessageBox.alert=function(){var c=Ext.WindowMgr.zseed;Ext.WindowMgr.zseed=50000;var b=a.apply(this,arguments);Ext.WindowMgr.zseed=c;return b}}function onReadyLabolsaCommon(){var b=navigator.userAgent.toLowerCase();if(b.indexOf("msie 8")>-1||(document.documentMode)){var c=Ext.getBody();var a=[Ext.isIE?"ext-ie "+(Ext.isIE6?"ext-ie6":"ext-ie7"):Ext.isGecko?"ext-gecko":Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":""];a.push("ext-ie8");c.addClass(a.join(" "))}Ext.useShims=true;Ext.QuickTips.init();Ext.WindowMgr.zseed=50000;zseedFixer();Ext.form.Field.prototype.msgTarget="under"}Ext.override(Ext.grid.GridView,{getColumnWidth:function(b){var a=this.cm.getColumnWidth(b);if(typeof a=="number"){return(Ext.isBorderBox||Ext.isSafari3||Ext.isChrome?a:(a-this.borderWidth>0?a-this.borderWidth:0))+"px"}return a}});var ADDTOCHALLENGE=0;var CREATECONTACT=1;var sidebarContactsData;function getUrlParam(c){var b=Ext.urlDecode(location.search.substring(1));var a=b;if(c){a=b[c]}else{a=b}return a}App.onReady(function(){onReadyLabolsaCommon();startChallengePanel();startSideBarChallengePanel();startSideBarContactsPanel();startLoginRegistrationToolbar();startStocksGridForm();if(getUrlParam("challenge")!=null){if(getUrlParam("newUser")=="true"){specialRegistration(ADDTOCHALLENGE)}else{specialLogin(ADDTOCHALLENGE)}}if(getUrlParam("contact")!=null){if(getUrlParam("newUser")=="true"){specialRegistration(CREATECONTACT)}else{specialLogin(CREATECONTACT)}}});var swfobject=function(){var aq="undefined",aD="object",ab="Shockwave Flash",X="ShockwaveFlash.ShockwaveFlash",aE="application/x-shockwave-flash",ac="SWFObjectExprInst",ax="onreadystatechange",af=window,aL=document,aB=navigator,aa=false,Z=[aN],aG=[],ag=[],al=[],aJ,ad,ap,at,ak=false,aU=false,aH,an,aI=true,ah=function(){var a=typeof aL.getElementById!=aq&&typeof aL.getElementsByTagName!=aq&&typeof aL.createElement!=aq,e=aB.userAgent.toLowerCase(),c=aB.platform.toLowerCase(),h=c?/win/.test(c):/win/.test(e),l=c?/mac/.test(c):/mac/.test(e),g=/webkit/.test(e)?parseFloat(e.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,d=!+"\v1",f=[0,0,0],m=null;if(typeof aB.plugins!=aq&&typeof aB.plugins[ab]==aD){m=aB.plugins[ab].description;if(m&&!(typeof aB.mimeTypes!=aq&&aB.mimeTypes[aE]&&!aB.mimeTypes[aE].enabledPlugin)){aa=true;d=false;m=m.replace(/^.*\s+(\S+\s+\S+$)/,"$1");f[0]=parseInt(m.replace(/^(.*)\..*$/,"$1"),10);f[1]=parseInt(m.replace(/^.*\.(.*)\s.*$/,"$1"),10);f[2]=/[a-zA-Z]/.test(m)?parseInt(m.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof af.ActiveXObject!=aq){try{var k=new ActiveXObject(X);if(k){m=k.GetVariable("$version");if(m){d=true;m=m.split(" ")[1].split(",");f=[parseInt(m[0],10),parseInt(m[1],10),parseInt(m[2],10)]}}}catch(b){}}}return{w3:a,pv:f,wk:g,ie:d,win:h,mac:l}}(),aK=function(){if(!ah.w3){return}if((typeof aL.readyState!=aq&&aL.readyState=="complete")||(typeof aL.readyState==aq&&(aL.getElementsByTagName("body")[0]||aL.body))){aP()}if(!ak){if(typeof aL.addEventListener!=aq){aL.addEventListener("DOMContentLoaded",aP,false)}if(ah.ie&&ah.win){aL.attachEvent(ax,function(){if(aL.readyState=="complete"){aL.detachEvent(ax,arguments.callee);aP()}});if(af==top){(function(){if(ak){return}try{aL.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}aP()})()}}if(ah.wk){(function(){if(ak){return}if(!/loaded|complete/.test(aL.readyState)){setTimeout(arguments.callee,0);return}aP()})()}aC(aP)}}();function aP(){if(ak){return}try{var b=aL.getElementsByTagName("body")[0].appendChild(ar("span"));b.parentNode.removeChild(b)}catch(a){return}ak=true;var d=Z.length;for(var c=0;c<d;c++){Z[c]()}}function aj(a){if(ak){a()}else{Z[Z.length]=a}}function aC(a){if(typeof af.addEventListener!=aq){af.addEventListener("load",a,false)}else{if(typeof aL.addEventListener!=aq){aL.addEventListener("load",a,false)}else{if(typeof af.attachEvent!=aq){aM(af,"onload",a)}else{if(typeof af.onload=="function"){var b=af.onload;af.onload=function(){b();a()}}else{af.onload=a}}}}}function aN(){if(aa){Y()}else{am()}}function Y(){var d=aL.getElementsByTagName("body")[0];var b=ar(aD);b.setAttribute("type",aE);var a=d.appendChild(b);if(a){var c=0;(function(){if(typeof a.GetVariable!=aq){var e=a.GetVariable("$version");if(e){e=e.split(" ")[1].split(",");ah.pv=[parseInt(e[0],10),parseInt(e[1],10),parseInt(e[2],10)]}}else{if(c<10){c++;setTimeout(arguments.callee,10);return}}d.removeChild(b);a=null;am()})()}else{am()}}function am(){var g=aG.length;if(g>0){for(var h=0;h<g;h++){var c=aG[h].id;var n=aG[h].callbackFn;var a={success:false,id:c};if(ah.pv[0]>0){var k=aS(c);if(k){if(ao(aG[h].swfVersion)&&!(ah.wk&&ah.wk<312)){ay(c,true);if(n){a.success=true;a.ref=av(c);n(a)}}else{if(aG[h].expressInstall&&au()){var e={};e.data=aG[h].expressInstall;e.width=k.getAttribute("width")||"0";e.height=k.getAttribute("height")||"0";if(k.getAttribute("class")){e.styleclass=k.getAttribute("class")}if(k.getAttribute("align")){e.align=k.getAttribute("align")}var f={};var d=k.getElementsByTagName("param");var m=d.length;for(var l=0;l<m;l++){if(d[l].getAttribute("name").toLowerCase()!="movie"){f[d[l].getAttribute("name")]=d[l].getAttribute("value")}}ae(e,f,c,n)}else{aF(k);if(n){n(a)}}}}}else{ay(c,true);if(n){var b=av(c);if(b&&typeof b.SetVariable!=aq){a.success=true;a.ref=b}n(a)}}}}}function av(b){var d=null;var c=aS(b);if(c&&c.nodeName=="OBJECT"){if(typeof c.SetVariable!=aq){d=c}else{var a=c.getElementsByTagName(aD)[0];if(a){d=a}}}return d}function au(){return !aU&&ao("6.0.65")&&(ah.win||ah.mac)&&!(ah.wk&&ah.wk<312)}function ae(f,d,h,e){aU=true;ap=e||null;at={success:false,id:h};var a=aS(h);if(a){if(a.nodeName=="OBJECT"){aJ=aO(a);ad=null}else{aJ=a;ad=h}f.id=ac;if(typeof f.width==aq||(!/%$/.test(f.width)&&parseInt(f.width,10)<310)){f.width="310"}if(typeof f.height==aq||(!/%$/.test(f.height)&&parseInt(f.height,10)<137)){f.height="137"}aL.title=aL.title.slice(0,47)+" - Flash Player Installation";var b=ah.ie&&ah.win?"ActiveX":"PlugIn",c="MMredirectURL="+af.location.toString().replace(/&/g,"%26")+"&MMplayerType="+b+"&MMdoctitle="+aL.title;if(typeof d.flashvars!=aq){d.flashvars+="&"+c}else{d.flashvars=c}if(ah.ie&&ah.win&&a.readyState!=4){var g=ar("div");h+="SWFObjectNew";g.setAttribute("id",h);a.parentNode.insertBefore(g,a);a.style.display="none";(function(){if(a.readyState==4){a.parentNode.removeChild(a)}else{setTimeout(arguments.callee,10)}})()}aA(f,d,h)}}function aF(a){if(ah.ie&&ah.win&&a.readyState!=4){var b=ar("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(aO(a),b);a.style.display="none";(function(){if(a.readyState==4){a.parentNode.removeChild(a)}else{setTimeout(arguments.callee,10)}})()}else{a.parentNode.replaceChild(aO(a),a)}}function aO(b){var d=ar("div");if(ah.win&&ah.ie){d.innerHTML=b.innerHTML}else{var e=b.getElementsByTagName(aD)[0];if(e){var a=e.childNodes;if(a){var f=a.length;for(var c=0;c<f;c++){if(!(a[c].nodeType==1&&a[c].nodeName=="PARAM")&&!(a[c].nodeType==8)){d.appendChild(a[c].cloneNode(true))}}}}}return d}function aA(e,g,c){var d,a=aS(c);if(ah.wk&&ah.wk<312){return d}if(a){if(typeof e.id==aq){e.id=c}if(ah.ie&&ah.win){var f="";for(var k in e){if(e[k]!=Object.prototype[k]){if(k.toLowerCase()=="data"){g.movie=e[k]}else{if(k.toLowerCase()=="styleclass"){f+=' class="'+e[k]+'"'}else{if(k.toLowerCase()!="classid"){f+=" "+k+'="'+e[k]+'"'}}}}}var h="";for(var l in g){if(g[l]!=Object.prototype[l]){h+='<param name="'+l+'" value="'+g[l]+'" />'}}a.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+f+">"+h+"</object>";ag[ag.length]=e.id;d=aS(e.id)}else{var b=ar(aD);b.setAttribute("type",aE);for(var m in e){if(e[m]!=Object.prototype[m]){if(m.toLowerCase()=="styleclass"){b.setAttribute("class",e[m])}else{if(m.toLowerCase()!="classid"){b.setAttribute(m,e[m])}}}}for(var n in g){if(g[n]!=Object.prototype[n]&&n.toLowerCase()!="movie"){aQ(b,n,g[n])}}a.parentNode.replaceChild(b,a);d=b}}return d}function aQ(b,d,c){var a=ar("param");a.setAttribute("name",d);a.setAttribute("value",c);b.appendChild(a)}function aw(a){var b=aS(a);if(b&&b.nodeName=="OBJECT"){if(ah.ie&&ah.win){b.style.display="none";(function(){if(b.readyState==4){aT(a)}else{setTimeout(arguments.callee,10)}})()}else{b.parentNode.removeChild(b)}}}function aT(a){var b=aS(a);if(b){for(var c in b){if(typeof b[c]=="function"){b[c]=null}}b.parentNode.removeChild(b)}}function aS(a){var c=null;try{c=aL.getElementById(a)}catch(b){}return c}function ar(a){return aL.createElement(a)}function aM(a,c,b){a.attachEvent(c,b);al[al.length]=[a,c,b]}function ao(a){var b=ah.pv,c=a.split(".");c[0]=parseInt(c[0],10);c[1]=parseInt(c[1],10)||0;c[2]=parseInt(c[2],10)||0;return(b[0]>c[0]||(b[0]==c[0]&&b[1]>c[1])||(b[0]==c[0]&&b[1]==c[1]&&b[2]>=c[2]))?true:false}function az(b,f,a,c){if(ah.ie&&ah.mac){return}var e=aL.getElementsByTagName("head")[0];if(!e){return}var g=(a&&typeof a=="string")?a:"screen";if(c){aH=null;an=null}if(!aH||an!=g){var d=ar("style");d.setAttribute("type","text/css");d.setAttribute("media",g);aH=e.appendChild(d);if(ah.ie&&ah.win&&typeof aL.styleSheets!=aq&&aL.styleSheets.length>0){aH=aL.styleSheets[aL.styleSheets.length-1]}an=g}if(ah.ie&&ah.win){if(aH&&typeof aH.addRule==aD){aH.addRule(b,f)}}else{if(aH&&typeof aL.createTextNode!=aq){aH.appendChild(aL.createTextNode(b+" {"+f+"}"))}}}function ay(a,c){if(!aI){return}var b=c?"visible":"hidden";if(ak&&aS(a)){aS(a).style.visibility=b}else{az("#"+a,"visibility:"+b)}}function ai(b){var a=/[\\\"<>\.;]/;var c=a.exec(b)!=null;return c&&typeof encodeURIComponent!=aq?encodeURIComponent(b):b}var aR=function(){if(ah.ie&&ah.win){window.attachEvent("onunload",function(){var a=al.length;for(var b=0;b<a;b++){al[b][0].detachEvent(al[b][1],al[b][2])}var d=ag.length;for(var c=0;c<d;c++){aw(ag[c])}for(var e in ah){ah[e]=null}ah=null;for(var f in swfobject){swfobject[f]=null}swfobject=null})}}();return{registerObject:function(a,e,c,b){if(ah.w3&&a&&e){var d={};d.id=a;d.swfVersion=e;d.expressInstall=c;d.callbackFn=b;aG[aG.length]=d;ay(a,false)}else{if(b){b({success:false,id:a})}}},getObjectById:function(a){if(ah.w3){return av(a)}},embedSWF:function(m,e,h,f,c,a,b,k,g,l){var d={success:false,id:e};if(ah.w3&&!(ah.wk&&ah.wk<312)&&m&&e&&h&&f&&c){ay(e,false);aj(function(){h+="";f+="";var s={};if(g&&typeof g===aD){for(var q in g){s[q]=g[q]}}s.data=m;s.width=h;s.height=f;var p={};if(k&&typeof k===aD){for(var r in k){p[r]=k[r]}}if(b&&typeof b===aD){for(var n in b){if(typeof p.flashvars!=aq){p.flashvars+="&"+n+"="+b[n]}else{p.flashvars=n+"="+b[n]}}}if(ao(c)){var o=aA(s,p,e);if(s.id==e){ay(e,true)}d.success=true;d.ref=o}else{if(a&&au()){s.data=a;ae(s,p,e,l);return}else{ay(e,true)}}if(l){l(d)}})}else{if(l){l(d)}}},switchOffAutoHideShow:function(){aI=false},ua:ah,getFlashPlayerVersion:function(){return{major:ah.pv[0],minor:ah.pv[1],release:ah.pv[2]}},hasFlashPlayerVersion:ao,createSWF:function(a,b,c){if(ah.w3){return aA(a,b,c)}else{return undefined}},showExpressInstall:function(b,a,d,c){if(ah.w3&&au()){ae(b,a,d,c)}},removeSWF:function(a){if(ah.w3){aw(a)}},createCSS:function(b,a,c,d){if(ah.w3){az(b,a,c,d)}},addDomLoadEvent:aj,addLoadEvent:aC,getQueryParamValue:function(b){var a=aL.location.search||aL.location.hash;if(a){if(/\?/.test(a)){a=a.split("?")[1]}if(b==null){return ai(a)}var c=a.split("&");for(var d=0;d<c.length;d++){if(c[d].substring(0,c[d].indexOf("="))==b){return ai(c[d].substring((c[d].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(aU){var a=aS(ac);if(a&&aJ){a.parentNode.replaceChild(aJ,a);if(ad){ay(ad,true);if(ah.ie&&ah.win){aJ.style.display="block"}}if(ap){ap(at)}}aU=false}}}}();var privateSpecialType=ADDTOCHALLENGE;function addSpecialInfoToForm(a){var b;if(privateSpecialType==ADDTOCHALLENGE){b=new Ext.form.Hidden({name:"challenge",value:getUrlParam("challenge")})}if(privateSpecialType==CREATECONTACT){b=new Ext.form.Hidden({name:"contact",value:getUrlParam("contact")})}Ext.getCmp(a).getForm().add(b);Ext.getCmp(a).add(b);var d=Ext.urlDecode(location.search.substring(1));if(privateSpecialType==ADDTOCHALLENGE){Ext.getCmp(a).setTitle("Regístrese y entre en el reto");Ext.getCmp("registrationWindowID").add({html:'<b>Si usted ya está registrado</b>, entonces <a href="'+location.href.substring(0,location.href.lastIndexOf("?"))+"?challenge="+d.challenge+"&authcode="+d.authcode+'&newUser=false">pulse aquí</a> para aceptar el reto directamente sin tener que crear una nueva cuenta'})}if(privateSpecialType==CREATECONTACT){Ext.getCmp(a).setTitle("Regístrese y hágase contacto de quien le invitó");Ext.getCmp("registrationWindowID").add({html:'<b>Si usted ya está registrado</b>, entonces <a href="'+location.href.substring(0,location.href.lastIndexOf("?"))+"?contact="+d.contact+"&authcode="+d.authcode+'&newUser=false">pulse aquí</a> y hágase contacto de quien le invitó sin tener que crear una nueva cuenta'})}var c=new Ext.form.Hidden({name:"authcode",value:getUrlParam("authcode")});Ext.getCmp(a).getForm().add(c);Ext.getCmp(a).add(c);Ext.getCmp(a).doLayout();Ext.getCmp("registrationWindowID").doLayout()}function specialRegistration(b){privateSpecialType=b;var a=new Ext.data.Connection();a.request({url:"server/logout.php",method:"get",callback:function(d,e,c){specialRegistrationAfterLogOut()}})}function specialRegistrationAfterLogOut(){onUserPasswordSubmitExtraCallback=function(){location.href=location.href.substring(0,location.href.lastIndexOf("?"))};openRegistrationWindow();addSpecialInfoToForm("registrationFormPanelID")}function specialLogin(b){privateSpecialType=b;var a=new Ext.data.Connection();a.request({url:"server/logout.php",method:"get",callback:function(d,e,c){specialLoginAfterLogout()}})}function specialLoginAfterLogout(){var b;var a;if(privateSpecialType==ADDTOCHALLENGE){b="¡Entre en el reto!";a="Introduzca sus datos para entrar en el reto";specialButtonText="Aceptar el reto"}if(privateSpecialType==CREATECONTACT){b="¡Agregue un nuevo contacto!";a="Confirme sus datos para crear el nuevo contacto";specialButtonText="Crear contacto"}var d=new Ext.form.FormPanel({title:b,autoWidth:true,autoHeight:true,defaultType:"textfield",items:[{xtype:"fieldset",defaultType:"textfield",autoHeight:true,autoWidth:true,title:a,items:[{fieldLabel:"Usuario",id:"specialUserID",allowBlank:false,maxLength:64,minLength:5,minLengthText:"El nombre de usuario como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El nombre de usuario como m&aacute;ximo puede tener 64 caracteres",blankText:"Usuario es obligatorio"},{fieldLabel:"Contrase&ntilde;a",inputType:"password",id:"specialPasswordID",minLengthText:"El password como m&iacute;nimo debe tener 5 caracteres",maxLengthText:"El password como m&aacute;ximo puede tener 64 caracteres",allowBlank:false,maxLength:64,minLength:5,blankText:"Contrase&ntilde;a es obligatoria"}]}],buttons:[{text:specialButtonText,handler:function(){if(privateSpecialType==ADDTOCHALLENGE){specialParams={loginUserID:Ext.get("specialUserID").getValue(),loginPasswordID:Ext.get("specialPasswordID").getValue(),authcode:getUrlParam("authcode"),challenge:getUrlParam("challenge")}}if(privateSpecialType==CREATECONTACT){specialParams={loginUserID:Ext.get("specialUserID").getValue(),loginPasswordID:Ext.get("specialPasswordID").getValue(),authcode:getUrlParam("authcode"),contact:getUrlParam("contact")}}if(d.getForm().isValid()==false){return}hangingAcceptChallenge=Ext.Msg.wait("Estableciendo conexion con el servidor...");Ext.Ajax.request({url:"server/login.php",failure:function(e,f){hangingAcceptChallenge.hide();Ext.Msg.alert("Problema de conexión","Disculpe, está siendo imposible conectarse con el servidor.")},success:function(e,f){hangingAcceptChallenge.hide();responseObj=Ext.util.JSON.decode(e.responseText);if(responseObj.success==false){Ext.Msg.alert("Se ha producido un error","Por favor, disculpe las molestias. No se ha podido completar la operación.")}else{if(privateSpecialType==ADDTOCHALLENGE){Ext.Msg.alert("El reto se ha aceptado con éxito","Felicidades, acaba de entrar en el reto.",function(){location.href=location.href.substring(0,location.href.lastIndexOf("?"))})}if(privateSpecialType==CREATECONTACT){Ext.Msg.alert("Contacto agregado con éxito","Felicidades, acaba de crear un contacto.",function(){location.href=location.href.substring(0,location.href.lastIndexOf("?"))})}}},params:specialParams})}}]});var c=new Ext.Window({layout:"fit",modal:true,closable:false,closeAction:"close",width:350,items:[d]});c.show()}Ext.ns("Ext.ux.grid");Ext.ux.grid.Search=function(a){Ext.apply(this,a);Ext.ux.grid.Search.superclass.constructor.call(this)};Ext.extend(Ext.ux.grid.Search,Ext.util.Observable,{searchText:"Busca",searchTipText:"Entre el texto a buscar y pulse Enter",selectAllText:"Seleccionar todo",position:"bottom",iconCls:"icon-magnifier",checkIndexes:"all",disableIndexes:[],dateFormat:undefined,showSelectAll:true,menuStyle:"checkbox",minCharsTipText:"Teclea como m&iacute;nimo {0} car&aacute;cteres",mode:"remote",width:100,xtype:"gridsearch",paramNames:{fields:"fields",query:"query"},shortcutKey:"r",shortcutModifier:"alt",init:function(a){this.grid=a;if("string"===typeof this.toolbarContainer){this.toolbarContainer=Ext.getCmp(this.toolbarContainer)}a.onRender=a.onRender.createSequence(this.onRender,this);a.reconfigure=a.reconfigure.createSequence(this.reconfigure,this)},onRender:function(){var b=this.toolbarContainer||this.grid;var a="bottom"===this.position?b.bottomToolbar:b.topToolbar;this.menu=new Ext.menu.Menu();if("right"===this.align){a.addFill()}else{if(0<a.items.getCount()){a.addSeparator()}}a.addText(this.searchText);a.add({iconCls:this.iconCls});this.field=new Ext.form.TwinTriggerField({width:this.width,selectOnFocus:undefined===this.selectOnFocus?true:this.selectOnFocus,trigger1Class:"x-form-clear-trigger",trigger2Class:this.minChars?"x-hidden":"x-form-search-trigger",onTrigger1Click:this.onTriggerClear.createDelegate(this),onTrigger2Click:this.onTriggerSearch.createDelegate(this),minLength:this.minLength});this.field.on("render",function(){this.field.el.dom.qtip=this.minChars?String.format(this.minCharsTipText,this.minChars):this.searchTipText;if(this.minChars){this.field.el.on({scope:this,buffer:300,keyup:this.onKeyUp})}var e=new Ext.KeyMap(this.field.el,[{key:Ext.EventObject.ENTER,scope:this,fn:this.onTriggerSearch},{key:Ext.EventObject.ESC,scope:this,fn:this.onTriggerClear}]);e.stopEvent=true},this,{single:true});a.add(this.field);this.reconfigure();if(this.shortcutKey&&this.shortcutModifier){var d=this.grid.getEl();var c=[{key:this.shortcutKey,scope:this,stopEvent:true,fn:function(){this.field.focus()}}];c[0][this.shortcutModifier]=true;this.keymap=new Ext.KeyMap(d,c)}if(true===this.autoFocus){this.grid.store.on({scope:this,load:function(){this.field.focus()}})}},onKeyUp:function(){var a=this.field.getValue().toString().length;if(0===a||this.minChars<=a){this.onTriggerSearch()}},onTriggerClear:function(){if(this.field.getValue()){this.field.setValue("");this.field.focus();this.onTriggerSearch()}},onTriggerSearch:function(){if(!this.field.isValid()){return}var c=this.field.getValue();var b=this.grid.store;if("local"===this.mode){b.clearFilter();if(c){b.filterBy(function(e){var d=false;this.menu.items.each(function(g){if(!g.checked||d){return}var h=e.get(g.dataIndex);h=h instanceof Date?h.format(this.dateFormat||e.fields.get(g.dataIndex).dateFormat):h;var f=new RegExp(c,"gi");d=f.test(h)},this);if(d){return true}return d},this)}else{}}else{if(b.lastOptions&&b.lastOptions.params){b.lastOptions.params[b.paramNames.start]=0}var a=[];this.menu.items.each(function(d){if(d.checked){a.push(d.dataIndex)}});delete (b.baseParams[this.paramNames.fields]);delete (b.baseParams[this.paramNames.query]);if(b.lastOptions&&b.lastOptions.params){delete (b.lastOptions.params[this.paramNames.fields]);delete (b.lastOptions.params[this.paramNames.query])}if(a.length){b.baseParams[this.paramNames.fields]=Ext.encode(a);b.baseParams[this.paramNames.query]=c}b.reload()}},setDisabled:function(){this.field.setDisabled.apply(this.field,arguments)},enable:function(){this.setDisabled(false)},disable:function(){this.setDisabled(true)},reconfigure:function(){var c=this.menu;c.removeAll();if(this.showSelectAll&&"radio"!==this.menuStyle){c.add(new Ext.menu.CheckItem({text:this.selectAllText,checked:!(this.checkIndexes instanceof Array),hideOnClick:false,handler:function(e){var d=!e.checked;e.parentMenu.items.each(function(f){if(e!==f&&f.setChecked&&!f.disabled){f.setChecked(d)}})}}),"-")}var a=this.grid.colModel;var b=undefined;if("radio"===this.menuStyle){b="g"+(new Date).getTime()}Ext.each(a.config,function(e){var d=false;if(e.header&&e.dataIndex){Ext.each(this.disableIndexes,function(f){d=d?d:f===e.dataIndex});if(!d){c.add(new Ext.menu.CheckItem({text:e.header,hideOnClick:false,group:b,checked:"all"===this.checkIndexes,dataIndex:e.dataIndex}))}}},this);if(this.checkIndexes instanceof Array){Ext.each(this.checkIndexes,function(e){var d=c.items.find(function(f){return f.dataIndex===e});if(d){d.setChecked(true,true)}},this)}if(this.readonlyIndexes instanceof Array){Ext.each(this.readonlyIndexes,function(e){var d=c.items.find(function(f){return f.dataIndex===e});if(d){d.disable()}},this)}}});var hangingSetupContact;var messageData;var lastMessageIDShown=0;var toolBarChat;var isChatExpanded=true;var maxLengthAllowed=300;var consecutiveServerChatConnections=0;var chatWindow;function addContactWindow(){var b=new Ext.form.FormPanel({title:"Invita a un amigo",id:"addContactFormPanelID",url:"server/setupcontact.php",width:400,defaults:{width:250},autoHeight:true,method:"post",items:[{xtype:"panel",autoWidth:true,border:false,html:"Invita a un contacto por mail. Cuando acepte la invitación podrás seguir sus mensajes y sus operaciones bursátiles. Tu contacto también podrá seguir tus evoluciones, aprendiendo mutuamente a invertir en bolsa.<br>&nbsp;<br>"},{xtype:"textfield",vtype:"email",allowBlank:false,fieldLabel:"e-mail",id:"contactmailID"},{xtype:"textarea",fieldLabel:"Mensaje",maxLength:256,height:60,emptyText:"Ya preparamos nosotros el mensaje pero si quieres puedes añadir algunas palabras",id:"personalizedContactMessageID"}],buttons:[{text:"Enviar invitación",handler:function(){if(Ext.getCmp("addContactFormPanelID").form.isValid()){hangingSetupContact=Ext.Msg.wait("Realizando la petición...");Ext.Ajax.request({url:"server/setupcontact.php",failure:function(c,d){hangingSetupContact.hide();Ext.Msg.alert("Problema de conexión","Disculpe, está siendo imposible conectarse con el servidor.");a.close()},success:function(c,d){hangingSetupContact.hide();responseObj=Ext.util.JSON.decode(c.responseText);if(responseObj.success==false){if(responseObj.reason){Ext.Msg.alert("Se ha producido un error",responseObj.reason,a)}else{Ext.Msg.alert("Se ha producido un error","Error desconocido. Por favor, disculpe las molestias")}a.close()}else{if(pageTracker){pageTracker._trackEvent("contact","create",loggedUsername)}Ext.Msg.alert("Solicitud de contacto creada con éxito","Felicidades, acaba de invitar a participar en la web a su amigo. A continuación se comunicará por e-mail la invitación.");a.close()}},params:{json:Ext.util.JSON.encode([{contactmail:Ext.getCmp("contactmailID").getValue(),contactmessage:Ext.getCmp("personalizedContactMessageID").getValue()}])}})}}}]});var a=new Ext.Window({layout:"fit",modal:"true",width:400,closeAction:"close",items:[b]});a.show()}function sendMessage(){Ext.getCmp("sendMessageID").disable();var a=new Ext.data.Connection();a.request({url:"server/sendMessage.php",method:"post",params:{message:Ext.getCmp("messengerTextAreaID").getValue()},callback:function(c,d,b){Ext.getCmp("sendMessageID").enable();if(!d){Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible enviar el mensaje");return}else{if(Ext.util.JSON.decode(b.responseText).success==true){consecutiveServerChatConnections=0;messageData.load({params:{start:0,limit:10}});Ext.getCmp("messengerTextAreaID").setRawValue("")}else{Ext.MessageBox.alert("Error","Disculpe las molestias. No ha sido posible enviar el mensaje")}}}})}function titleMessenger(){var a=maxLengthAllowed-Ext.getCmp("messengerTextAreaID").getValue().toString().length;if(a>=0){remainingCharsFontColor="gray"}else{remainingCharsFontColor="red"}Ext.getCmp("chatWindowID").setTitle('<div style="width:450px;"><span style="float:left;"><font color="#333333">¿Qué te cuentas?</font></span><span style="float:right;"><a style="font-weight:normal;" href="javascript:addContactWindow();void(0);">¿Quieres tener más contactos?</a></span></div>');Ext.getCmp("remainingCharsPanelID").getEl().update('<center><font color="'+remainingCharsFontColor+'">('+a+" cars.)</font></center>")}function messageRenderer(d,e,a){var f=new Date(parseInt(a.data.timestamp)*1000);var g=new Date(parseInt(a.data.publication_timestamp)*1000);var b="";if(a.data.ticker!=""){b+='Comentario sobre <a href="invertir-en.php?ticker='+a.data.ticker+'">'+a.data.ticker+"</a>. "}if(a.data.publication_timestamp==a.data.timestamp){b+=f.format("d F \\a \\l\\a\\s H:i")}else{sOptional="";publicationDelay=(a.data.publication_timestamp-a.data.timestamp)/3600;if(publicationDelay>1){sOptional="s"}b+="Operación del "+f.format("d F \\a \\l\\a\\s H:i")+" publicada "+publicationDelay.toFixed(2)+" hora"+sOptional+" después"}var c=d.split("*");parsedValue=c[0];if(c.length>1){for(i=1;i<c.length;i++){if(i%2){parsedValue+="<a href=\"javascript:Ext.getCmp('messengerTextAreaID').setValue(Ext.getCmp('messengerTextAreaID').getValue()+ '*"+c[i]+"* ');Ext.getCmp('messengerTextAreaID').focus(false, 50);void(0);\">"+c[i]}else{parsedValue+="</a>"+c[i]}}if(i%2==0){parsedValue+="</a>"}}return'<font color="blue">'+a.data.user+":</font> "+parsedValue.replace(/\n/g,"<br>")+'<span style="font-size:9px;color:grey;float:right;">'+b+"</span>"}var isMessengerStarted=false;function startMessenger(){if(loggedUsername==""){isMessengerStarted=false;Ext.Msg.alert("Debes de abrir una sesión","Para acceder a tu zona de mensajes primero debes abrir una sesión.");return}if(isMessengerStarted==true){chatWindow.show();messageData.load({params:{start:0,limit:10}});return}isMessengerStarted=true;function b(){chatWindow.anchorTo(document,"br-br",[-20,-20],true)}var a=new Ext.grid.ColumnModel([{id:"message",sortable:false,renderer:messageRenderer,dataIndex:"message"}]);messageData=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"server/getMessages.php",method:"POST",timeout:60000}),reader:new Ext.data.JsonReader({totalProperty:"total",root:"data",fields:[{name:"ID"},{name:"message"},{name:"user"},{name:"timestamp"},{name:"ticker"},{name:"publication_timestamp"}]}),listeners:{load:function(c,d){if(messageData.getAt(0)===undefined){return}else{lastMessageIDShown=(messageData.getAt(0)).data.ID}if(consecutiveServerChatConnections>6){chatWindow.collapse();return}if(isChatExpanded==true&&messageData.reader.jsonData.start==0){messageData.load({params:{start:0,limit:toolBarChat.pageSize,lastMessageID:lastMessageIDShown}});consecutiveServerChatConnections++}}}});chatWindow=new Ext.Window({layout:"anchor",bodyStyle:"background-color:#DDFFCC;",baseCls:"x-panel",style:"border: 1px solid #BDDCAD;",title:"",plain:true,collapsible:true,draggable:false,floating:true,resizable:false,shadow:true,border:false,frame:false,id:"chatWindowID",width:500,height:460,renderTo:"contentMainPage",animCollapse:false,closeAction:"hide",listeners:{collapse:function(){Ext.Ajax.abort(messageData.proxy.activeRequest);isChatExpanded=false;b()},expand:function(){if(isChatExpanded==false){consecutiveServerChatConnections=0;isChatExpanded=true;messageData.load({params:{start:((toolBarChat.getPageData()).activePage-1)*toolBarChat.pageSize,limit:toolBarChat.pageSize,lastMessageID:lastMessageIDShown}});b()}},close:function(){Ext.Ajax.abort(messageData.proxy.activeRequest)},hide:function(){Ext.Ajax.abort(messageData.proxy.activeRequest)}},items:[{xtype:"panel",border:false,style:"border: 1px solid #DDFFCC;",layout:"column",items:[{xtype:"panel",border:false,bodyStyle:"background-color: #f2ffeb; border-bottom:1px solid #BDDCAD; font-family:tahoma;font-size:11px;padding-left:15px;padding-right:15px;padding-top:5px;padding-bottom:5px;",width:500,height:40,html:'Lo que escribes lo pueden leer todos tus contactos. Para atraer la atención de un usuario cítalo entre *asteriscos*. Configura <a href="javascript:openUserSettingsWindow();void(0);">aquí</a> el retraso en la publicación de tus operaciones. <a href="http://www.labolsavirtual.com/blog/el-juego-de-bolsa-se-empieza-a-socializar.html" target="_blank">Más Info</a>.'},{xtype:"textarea",height:60,width:400,border:false,style:"margin:10px;overflow-y:scroll;border:1px solid #BDDCAD;",preventScrollbars:false,msgTarget:"qtip",emptyText:"Escribe aquí",validator:function(c){titleMessenger();return true},id:"messengerTextAreaID"},{border:false,items:[{style:"font-family:tahoma;font-size:11px;margin-top:10px",id:"remainingCharsPanelID",xtype:"panel",html:"test"},{xtype:"button",height:60,style:"margin:10px;",text:"Envía",id:"sendMessageID",listeners:{click:function(c,d){if(Ext.getCmp("messengerTextAreaID").getValue().toString().length>0){if(Ext.getCmp("messengerTextAreaID").getValue().toString().length>maxLengthAllowed){Ext.MessageBox.alert("Reduce el mensaje","Los mensajes no pueden superar los "+maxLengthAllowed+" caracteres. Hazlo un poco más corto, por favor.")}else{Ext.Ajax.abort(messageData.proxy.activeRequest);sendMessage()}}}}}]}]},{xtype:"grid",id:"messengerGridID",hideHeaders:true,border:false,ds:messageData,cm:a,sm:new Ext.grid.RowSelectionModel({singleSelect:true}),height:310,listeners:{render:function(c){c.getSelectionModel().selectRow(0);c.getSelectionModel().selectFirstRow()},delay:10},viewConfig:{forceFit:true,enableRowBody:true},bbar:toolBarChat=new Ext.PagingToolbar({pageSize:10,style:"border:0;background-image: url(./client/s.gif);background-color: transparent;",store:messageData,displayInfo:true,beforePageText:"Página",afterPageText:"",displayMsg:"Mostrando mensajes {0} a {1}"})}]});toolBarChat.last.hide();titleMessenger();chatWindow.show();messageData.load({params:{start:0,limit:10}});b()};