// Copyright 2008 The LinuxTrader , All Rights Reserved

Ext.onReady(function(){var tradect=1;var collapsed="false";var showroi="false";turnontips();function newtrade(ct){var thecount=ct;var shortleg=new traderecord({projectId:102,project:'Trade #'+thecount+' &#160 Bullish to Stagnant',taskId:25,leg:'short',option:'put',fees:0.015,description:'Sell To Open: &#160&#160<b ext:qtitle="<center class=qtip>First: &#160 Sell-To-Open a Short Put &#160&#160 <span class=blk>( Primary Instrument )</span></center>" ext:qtip="Current Month: Out of The Money, Below Support">Short_Put</b> &#160&#160 ( OTM, Below Support )',putstk:'<b ext:qtip="Click to enter the <b>Short_Put_Strike</b> price" style="font-size:11px;padding-left:15px">&#60; strike &#62;</b>',rate:'<b ext:qtip="Click to enter the <b>Short_Put_Bid</b> price" style="font-size:11px;">bid&#160;</b>'});var longleg=new traderecord({projectId:102,project:'Trade #'+thecount+' &#160 Bullish to Stagnant',taskId:26,leg:'long',option:'put',fees:0.015,description:'Buy To Open: &#160&#160<b ext:qtitle="<center class=qtip>Second: &#160 Buy-To-Open a Long Put &#160&#160 <span class=blk>( Limit Instrument for protection )</span></center>" ext:qtip="Current Month: 1-2 Strikes below the Short_Put">Long_Put</b> &#160&#160&#160&#160 ( 1-2 Strikes Lower )',putstk:'<b ext:qtip="Click to enter the <b>Long_Put_Strike</b> price" style="font-size:11px;padding-left:15px">&#60; strike &#62;</b>',rate:'<b ext:qtip="Click to enter the <b>Long_Put_Ask</b> price" style="font-size:11px;">ask&#160;</b>'});danstore.add(shortleg);danstore.add(longleg);}
function isvalid(form){gv.refresh();}
function opennumber(form){form.reset();form.addListener('valid',isvalid,this,{single:true,buffer:100});}
function enterkey(form,key){var myrow=rsm.getSelected();if(myrow===undefined){grid.stopEditing();}else{if(myrow.data.leg==="long"){grid.stopEditing();}}}
function myblur(form){form.removeListener('valid',isvalid,this);rsm.clearSelections();collapsed='false';}
var neteditor=new Ext.form.NumberField({allowBlank:false,allowNegative:false,maxLength:10,minValue:'.01',selectOnFocus:false,style:"font-size:13px;",validationDelay:1500,validateOnBlur:true,listeners:{'focus':{fn:opennumber},'specialkey':{fn:enterkey},'blur':{fn:myblur}},style:'text-align:left'});var feeeditor=new Ext.form.NumberField({allowBlank:false,allowNegative:false,decimalPrecision:4,maxLength:10,selectOnFocus:false,style:"font-size:13px;",validationDelay:1500,validateOnBlur:true,listeners:{'focus':{fn:opennumber},'specialkey':{fn:enterkey},'blur':{fn:myblur}},style:'text-align:left'});var tocloseeditor=new Ext.form.NumberField({allowBlank:false,allowNegative:false,maxLength:10,selectOnFocus:false,style:"font-size:13px;",validationDelay:1500,validateOnBlur:true,listeners:{'focus':{fn:opennumber},'specialkey':{fn:enterkey},'blur':{fn:myblur}},style:'text-align:left'});var strikebox=new Ext.form.ComboBox({listeners:{'select':{fn:function(combo,record,index){rsm.clearSelections();var arecord=record;var myindex=arecord.data.id;var nxtline=strikes[myindex-1];var nxtvalue=nxtline[1];try{danstore.commitChanges();}catch(err){}
danstore.fireEvent("datachanged",danstore);var recarry=danstore.getModifiedRecords();var myrecord=recarry[0];var leg=myrecord.data.leg;if(leg==="short"){var thisind=danstore.indexOf(myrecord);var longrecord=danstore.getAt(thisind+1);longrecord.set('putstk',nxtvalue);danstore.fireEvent("datachanged",danstore);}}},'focus':{fn:function(){strikebox.clearValue();strikebox.clearInvalid();}}},store:new Ext.data.SimpleStore({fields:['id','value'],data:strikes}),allowBlank:false,displayField:'value',editable:true,hideTrigger:false,lazyRender:true,listClass:'x-combo-list-small',maxLength:7,mode:'local',regex:new RegExp("^[1-9][0-9]*[\.]?[0,5]?[0]?$"),regexText:'sorry bad value',selectOnFocus:false,style:"font-size:13px;border:1px solid #636d84;border-bottom:2px solid #636d84;",title:'Find Strike prices with...<br/>&#149 Scrollbar<br/>&#149 Arrow Keys<br/>&#149 Enter a value',typeAhead:true,triggerAction:'all'});var danstore=new Ext.data.GroupingStore({reader:reader,data:xg.bullputData,sortInfo:{field:'due',direction:"ASC"},groupField:'project'});var rsm=new Ext.grid.RowSelectionModel({moveEditorOnEnter:true});var summary=new Ext.grid.GroupSummary();var gv=new Ext.grid.GroupingView({listeners:{'refresh':{fn:function(){collapsed="false";}}},forceFit:false,startCollapsed:false,showGroupName:false,enableGroupingMenu:false,enableNoGroups:false,hideGroupedColumn:true});var mytoolbar=[{text:'Enable Hints',iconCls:'tipson',handler:function(){starttips(grid);}},'-',{text:'Disable Hints',iconCls:'tipsoff',handler:function(){stoptips(grid);}},'-',{text:'Add a Trade',iconCls:'add',handler:function(){grid.stopEditing();tradect=tradect+1;newtrade(tradect);}},'-',{id:'squeeze',text:'Compress/Expand Rows',iconCls:'summary',handler:function(){grid.stopEditing();if(collapsed==="false"){gv.collapseAllGroups();collapsed='true';}else{gv.expandAllGroups();collapsed='false';}}},'-',{text:'Show/Hide ROI Conditions',iconCls:'roi',handler:function(){grid.stopEditing();if(showroi==="false"){cm.setHidden(0,true);cm.setHidden(1,false);cm.setHidden(3,true);cm.setHidden(5,true);cm.setHidden(6,true);cm.setHidden(9,false);cm.setHidden(10,true);showroi="true";}else{cm.setHidden(0,false);cm.setHidden(1,true);cm.setHidden(3,false);cm.setHidden(5,false);cm.setHidden(6,false);cm.setHidden(9,true);cm.setHidden(10,false);showroi="false";}}}];var bottombar=[{text:'Move Selected Rows To Top',iconCls:'totop',handler:function(){grid.stopEditing();var rows=rsm.getSelections();for(i=0;i<rows.length;i++){danstore.remove(danstore.getById(rows[i].id));}
gv.refresh();myreverse=[];j=0;for(i=(rows.length-1);i>-1;i=i-1){myreverse[j]=rows[i];j++;}
danstore.insert(0,myreverse);gv.refresh();}},'-',{text:'Delete Selected Rows',iconCls:'remove',handler:function(){grid.stopEditing();var rows=rsm.getSelections();for(i=0;i<rows.length;i++){danstore.remove(danstore.getById(rows[i].id));}
gv.refresh();}},'-',{text:'Delete All Rows',iconCls:'remove',handler:function(){Ext.Msg.show({title:'Confirm?',msg:'Are you sure you want to delete all trades in this panel?',buttons:Ext.Msg.OKCANCEL,fn:function(btn){if(btn=='ok'){danstore.removeAll();grid.stopEditing();tradect=1;newtrade(tradect);}}});}}];var cm=new Ext.grid.ColumnModel([{id:'description',align:'left',header:"To Exit: <b ext:qtitle='<div class=qtip><center><b>Exit Points</b></center><ul><li>PE: &#160 Both Options to Expire Worthless<li>SE: &#160 Close at Break-even, Purchase Stock, or Adjust</ul></div>' ext:qtip='The Bull-Put often leads to stock ownership' > &#160 Both Options Expire Worthless</b>",width:300,dataIndex:'description',summaryType:'entertext',hideable:false},{id:'descshort',align:'right',header:"<span ext:qtitle='<div class=qtip><center><b>Exit Points</b></center><ul><li>PE: &#160 Both Options to Expire Worthless<li>SE: &#160 Close at Break-even, Purchase Stock, or Adjust</ul></div>' ext:qtip='The Bull-Put often leads to stock ownership' >Opened</span>",width:80,hidden:true,renderer:function(v,params,record){leg=record.data.leg;option=record.data.option;return'<span style="padding-right:12px;">'+leg+' '+option+'</span>';}},{header:"Type",width:130,dataIndex:'project'},{id:'netstrike',align:'right',header:"<div ext:qtitle='<center class=qtip>Strike Prices</center>' ext:qtip='Short_Strike minus Long_Strike = Net_Strike'>Strike</div>",width:90,dataIndex:'putstk',summaryType:'substrike',renderer:function(v,params,record){return v;},summaryRenderer:function(v){return((v>0)?(v):((v<0||v===0.0)?('improper'):('')));},editor:strikebox},{id:'netcredit',align:'right',header:"<div ext:qtitle='<center class=qtip>Net Credit is the Max Reward</center>' ext:qtip='Short_Put <b>(credit)</b> minus Long_Put <b>(debit)</b>'>Net Credit</div>",width:90,renderer:function(v,params,record){leg=record.data.leg;word=((leg==='short')?('<b ext:qtip="The amount you recieve <b>(a credit)</b> for selling the Put" style="font-size:11px;"> &nbsp&nbsp bid&#160;</b>'):('<b ext:qtip="The amount you pay <b>(a debit)</b> to buy a Put" style="font-size:11px;"> &nbsp&nbsp ask&#160;</b>'));if(leg==="short"){return((v>0)?(Ext.util.Format.usMoney(v)+word):(v));}else{return myask(v);}},summaryRenderer:function(v,p,record){if(v>0||v===0){if(v>0.39){return Ext.util.Format.usMoney(v)+'<span style="font-size:11px;"/>';}else{return'<span style=\'color:red;\' ext:qtip="<span class=negative>Caution: Probably not enough credit.</span>">'+Ext.util.Format.usMoney(v)+'<span style="font-size:11px;"/>'+'</span>';}}else{if(v<0){return'improper';}else{return'';}}},dataIndex:'rate',summaryType:'subbidask',editor:neteditor},{id:'maxr',align:'center',header:"<div ext:qtitle='<center class=qtip>Max Risk is the Amount Broker Holds</center>' ext:qtip='<center>Net_Strike minus Net_Credit<center>'>Max Risk</div>",width:90,groupable:false,dataIndex:'maxr',summaryType:'totalRisk',summaryRenderer:function(v){return((v>0||v===0)?(Ext.util.Format.usMoney(v)):((v<0)?('improper'):('')));}},{id:'retratio',align:'center',header:"<div ext:qtitle='<center class=qtip>Return to Risk Ratio</center>' ext:qtip='Net_Credit divided by Max_Risk, x 100'>Ret to Risk</div>",width:90,groupable:false,dataIndex:'retratio',summaryType:'Ratio',summaryRenderer:function(v,params,record){return((v>0||v===0)?(Ext.util.Format.substr(v,0,4)+' %'):(''));}},{id:'netfee',align:'left',header:"<div ext:qtitle='<center class=qtip>Total Commisions per share basis</center>' ext:qtip='<ul><li><b class=blk>OC:</b> Fees to <b class=blk>O</b>pen and later <b class=blk>C</b>lose one leg of the trade<li><b class=blk>OE:</b> Fees to <b class=blk>O</b>pen and let <b class=blk>E</b>xpire one leg of the trade</ul>'>Commisions</div>",width:90,hideable:'true',groupable:false,dataIndex:'fees',summaryType:'sum',editor:feeeditor,renderer:function(v,params,record){word='<span style="font-size:11px;"> &nbsp&nbsp OE&#160;</span>';return((v>0)?('$'+v+word):(v));},summaryRenderer:function(v,p,record){if(v>0||v===0){return'$'+v+'<span style="font-size:11px;"/>';}else{if(v<0){return'improper';}else{return'';}}}},{id:'brkeven',align:'center',header:"<div ext:qtitle='<center class=qtip>Break-Even Stock Price</center>' ext:qtip='<b>(Short_Strike minus Net_Credit) </b> plus Commisions'>Even Price</div>",width:90,groupable:false,dataIndex:'brkeven',summaryType:'Brkevensub',summaryRenderer:function(v){return((v>0||v===0)?(Ext.util.Format.usMoney(v)):((v<0)?('improper'):('')));}},{id:'target',align:'center',header:"<div ext:qtitle='<center class=qtip>Target Exit in Bull_Put is for stock price to close above the Short_Put Strike price, at expiration.<br/><br/><span class=blk>&#149 Because we intend both sides to expire worthless</span></center>' ext:qtip='Both Options Expire Worthless, and we keep the Max-reward per contract because......<br/><br/>Stock price closes above the Short_Put strike at expiration.'>ROI Price</div>",width:90,hidden:true,groupable:false,dataIndex:'target',summaryType:'roitarget',summaryRenderer:function(v){return((v>0||v===0)?('<span class=smallcell>above </span>'+Ext.util.Format.usMoney(v)):((v<0)?('improper'):('')));}},{id:'profit',align:'center',header:"<div ext:qtitle='<center class=qtip>Max Profit per Contract</center>' ext:qtip='(Net_Credit minus Commisions)<br/> X 100 shares'>Max Profit</div>",width:80,hideable:'true',groupable:false,dataIndex:'profit',summaryType:'Profit',summaryRenderer:function(v){return((v>0||v===0)?(Ext.util.Format.usMoney(v)):((v<0)?('improper'):('')));}}]);cm.defaultSortable=false;var grid=new xg.EditorGridPanel({ds:danstore,cm:cm,sm:rsm,plugins:summary,view:gv,tbar:mytoolbar,bbar:bottombar,listeners:{'render':{buffer:200,fn:function(){grid.collapse();}},'collapse':{fn:function(){grid.setTitle('<div <b ext:qtitle="<center class=qtip><b class=positive>Bull-Put:</b> Bullish to stagnant, also called a Short_Put_Vertical</center>" ext:qtip="<ul><li><b>Best:</b> Stock price remains above Short_Put_Strike price<li><b>Worst:</b> Stock price drops to Long_Put_Strike price</ul>" class=scoot4>Click to open <span class=bullish>Bull-Put Credit Trades</span></b></div>');dd12.dd.unlock();}},'expand':{fn:function(){grid.setTitle('<div <b ext:qtitle="<center class=qtip><b class=positive>Bull-Put:</b> Bullish to stagnant, also called a Short_Put_Vertical</center>" ext:qtip="<ul><li><b>Best:</b> Stock price remains above Short_Put_Strike price<li><b>Worst:</b> Stock price drops to Long_Put_Strike price</ul>" class=scoot4b>Bull-Put Credit Trades</b></div>');dd12.dd.lock();}}},autoScroll:true,autoHeight:true,maxHeight:500,enableDragDrop:false,draggable:false,width:955,frame:true,clicksToEdit:1,collapsible:true,collapsed:false,enableColumnMove:false,enableHdMenu:false,stateful:false,titleCollapse:true,animCollapse:false,trackMouseOver:true,title:'<div <b ext:qtitle="<center class=qtip><b class=positive>Bull-Put:</b> Bullish to stagnant, also called a Short_Put_Vertical</center>" ext:qtip="<ul><li><b>Best:</b> Stock price remains above Short_Put_Strike price<li><b>Worst:</b> Stock price drops to Long_Put_Strike price</ul>" class=scoot4b>Bull-Put Credit Trades</b></div>',iconCls:'icon-grid',renderTo:'bullput'});var dd12=Ext.get('bullput');dd12.dd=new Ext.dd.DDProxy('bullput','group');});Ext.grid.bullputData=[{projectId:100,project:'Trade #1 &#160 Bullish to Stagnant',taskId:1,leg:'short',option:'put',fees:0.015,description:'Sell To Open: &#160&#160<b ext:qtitle="<center class=qtip>First: &#160Sell-To-Open a Short Put &#160&#160 <span class=blk>( Primary Instrument )</span></center>" ext:qtip="Current Month: Out of The Money, Below Support">Short_Put</b> &#160&#160 ( OTM, Below Support )',putstk:95,rate:3.0,due:'01/19/2008'},{projectId:100,project:'Trade #1 &#160 Bullish to Stagnant',taskId:2,leg:'long',option:'put',fees:0.015,description:'Buy To Open: &#160&#160<b ext:qtitle="<center class=qtip>Second: &#160 Buy-To-Open a Long Put &#160&#160 <span class=blk>( Limit Instrument for protection )</span></center>" ext:qtip="Current Month: 1-2 Strikes below the Short_Put">Long_Put</b> &#160&#160&#160&#160 ( 1-2 Strikes Lower )',putstk:90,rate:1.2,due:'01/19/2008'}];