Ext.namespace('cmv.mypage');

Ext.apply(Ext.form.VTypes, {
  //  vtype validation function
  phone: function(val, field) {
    return /^\d{8}$/.test(val);
  },
  // vtype Text property: The error text to display when the validation function returns false
  phoneText: 'Ugyldigt telefonnummer. Skal bestå af 8 cifre.',
  // vtype Mask property: The keystroke filter mask
  phoneMask: /\d/i
});

cmv.mypage.OrderGrid = Ext.extend(Ext.grid.GridPanel, {
  orderid:undefined,
  orderdate:undefined,
  paydate:undefined,
  constructor: function(config) {
    config=Ext.apply({
      autoDestroy: true,
      title:'Faktura: '+config.orderid,
      items:[{
        html:'<br>Ordret: '+config.orderdate.format(Date.patterns.LongDateTime)+'<br>'+(config.paydate!=null?'Betalt: '+config.paydate.format(Date.patterns.LongDate)+'<br>':'')
      }],
      frame:true,
      colModel: new cmv.cloth.colModel(),
      autoExpandColumn: 'artikel',
      autoHeight: true,
      stripeRows: true,
      enableColumnMove:false,
      enableColumnResize: false,
      store:new Ext.data.JsonStore({
        autoDestroy: true,
        autoLoad: true,
        url: 'json/getinvoice.php?orderid='+config.orderid,
        // reader configs
        root: 'data',
        totalProperty: 'total',
        baseParams :{
        },
        fields: [{
          name: 'antal'
        },
        {
          name: 'artikel'
        },
        {
          name: 'size'
        },
        {
          name: 'pris',
          type: 'float'
        }]
      }),
      viewConfig:{
        headersDisabled:true
      },
      autoscroll: true
    },config);
    cmv.mypage.OrderGrid.superclass.constructor.call(this, config);
  },
  invoice:function()
  {
    //var oid=gridpanel.orderid;
    var html="<html>";
    html+="<head>";
    html+='<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">';
    html+="<title>Cykel Motion Viborg klubtøj faktura</title>";
    html+='<link rel="stylesheet" type="text/css" href="css/invoicestyles.css">';
    html+="</head>";
    html+="<body>";
    //Invoice Date
    html+="<div class=dato>Ordret "+this.orderdate.format(Date.patterns.BirthDate)+"</div>";
    //End Invoice Date
    //Invoice logo
    html+="<div class=logo><img src='images/logo.gif' /></div>";
    //End Invoice logo
    var rec=cmv.mypage.personalstore.getAt(0);
    //Adresse field
    html+="<div class=address>";
    html+=rec.get('Fornavn')+" "+rec.get('Mellemnavn')+" "+rec.get('Efternavn')+"<br>";
    html+=rec.get('vej')+"<br>";
    var pnr=cmv.mypage.postnrStore.find('value',rec.get('Postnr'));
    html+=cmv.mypage.postnrStore.getAt(pnr).get('text')+"<br>";
    html+="Telefon: "+rec.get('Telefon')+"<br><br>";
    var fakno="CMV"+(this.orderid.toString().length<4?('0000' + this.orderid.toString()).slice(-4):this.orderid);
    html+="Faktura: "+fakno+"<br>";
    html+="</div>";
    //End Adresse field
    var itemstore=this.getStore()
    //Items on invoice
    html+="<div class=delegatesbox>";
    html+="Du har bestilt følgende klubtøj i Cykel Motion Viborg:<br><br>";
    itemstore.each(function(rec){
      var total=rec.get('artikel')!="<b>Samlet ordre pris</b>"?"":"total";
      html+="<div class='names"+total+"'>";
      html+=rec.get('antal')+" "+rec.get('artikel')+(rec.get('size')!=""?", str. "+rec.get('size'):"");
      html+="</div>";
      html+="<div class='extensions"+total+"'>";
      html+="kr.";
      html+="</div>";
      html+="<div class='amounts"+total+"'>";
      html+=Ext.util.Format.Money(rec.get('pris'));
      html+="</div>";
    })
    //End total amount field
    html+="<div class=postinvoice>";
    html+="Beløbet bedes indbetalt til Cykel Motion Viborgs konto i Vestjysk Bank:<br><br>";
    html+="<b>Reg. nr.: 7605 Konto nr.: 0001091486</b><br><br>";
    html+="<b>Angiv venligst "+fakno+" på indbetalingen.</b><br><br>";
    html+="<i>Det bestilte udleveres først efter betalingen er registreret.</i><br><br>";
    html+="Med venlig hilsen<br><br><br>";
    html+="Freddy Brion Nielsen<br>";
    html+="<div class=kasserer>Kasserer Cykel Motion Viborg</div>";
    html+="<br>Tlf.: 86 63 95 09<br>";
    html+="Email: <a href='mailto:freddybrion@hotmail.com'>freddybrion@hotmail.com</a>";
    html+="</div>";
    //End delegates on invoice
    html+="</div>";
    //footer
    html+="<div class='footer'>";
    //footer left
    html+="<div class='footerleft'>";
    html+="Cykel Motion Viborg<br>";
    html+="Bøssemagervej 3A<br>";
    html+="8800 Viborg<br>";
    html+="</div>";
    //End footerleft
    //footer right
    html+="<div class='footerright'>";
    html+="CVR/SE# 17 89 42 34";
    html+="</div>";
    //End footerright
    html+="</div>";
    //End footer
    html+="</body>";
    html+="</html>";
    return html;
  }
});

Ext.reg('cmvmypageordergrid', cmv.mypage.OrderGrid);

//Extension holding availabe sizes depending on cloth type
cmv.mypage.TextField = Ext.extend(Ext.form.TextField,{
  constructor:function(config){
    config=Ext.apply({
      allowBlank:false,
      name: Ext.isDefined(config.name)?config.name:config.fieldLabel,
      listeners:{
        change:{
          fn: function(field, newVal, oldVal){
            var frm=this.ownerCt.ownerCt.ownerCt;
            frm.buttons[0].enable();
            frm.buttons[1].enable();
          }
        }
      }
    },config);
    cmv.mypage.TextField.superclass.constructor.call(this, config);
  }
});

Ext.reg('cmvmypagetextfield', cmv.mypage.TextField);

cmv.mypage.SignupGrid = Ext.extend(Ext.grid.GridPanel, {
  signedup:false,
  constructor: function(config) {
    config=Ext.apply({
      autoDestroy: true,
      frame:true,
      width: 660,
      colModel: new Ext.grid.ColumnModel({
        columns:[{
          xtype: 'actioncolumn',
          width: 60,
          items: [{
            icon   : 'images/information.png',
            tooltip: 'Se mere info',
            handler: function(grid, rowIndex, colIndex) {
              var rec = grid.store.getAt(rowIndex);
              var actwin = new cmv.mypage.activityWindow({
                activityid:rec.get('idx')
              });
              actwin.show();

            }
          },{
            getClass: function(v, meta, rec) {
              if(rec.get('signedup'))
              {
                if (rec.get('Frist') < new Date()) {
                  this.items[1].tooltip = 'Din tilmelding/bestilling er nu bindende';
                  return 'acc-col';
                } else {
                  this.items[1].tooltip = 'Du kan afmelde/afbestille indtil '+rec.get('Frist').format(Date.patterns.Date);
                  return 'del-col';
                }
              }
              else
              {
                if (rec.get('Free')==0) {
                  this.items[1].tooltip = 'Grænsen for tilmelding/bestilling på '+rec.get('Limit')+' er nået!';
                  return 'crs-col';
                } else {
                  this.items[1].tooltip = 'Tilmeld/bestil'+(rec.get('Free')<6?' '+rec.get('Free')+' pladser tilbage!':'');
                  if(rec.get('Free')>5)
                    return 'add-col';
                  else
                    return 'err-col';
                }
              }
            },
            handler: function(grid, rowIndex, colIndex) {
              var rec = grid.store.getAt(rowIndex);
              if(rec.get('signedup'))
              {
                if (rec.get('Frist') < new Date()) {
                  Ext.Msg.alert(rec.get('overskrift'),'Din tilmelding er nu bindende da fristen '+rec.get('Frist').format(Date.patterns.Date)+' er passeret.');
                } else {
                  Ext.Msg.confirm(rec.get('overskrift'),'Ønsker du at afmelde / afbestille?',function(btn){
                    if(btn=="yes")
                    {
                      Ext.Ajax.request({
                        url: 'php/updateactdeltagere.php',
                        params: {
                          action:'del',
                          actid:rec.get('idx')
                        },
                        callback:function(options,success,response){
                          if(success)
                          {
                            cmv.mypage.tilmeldingerpanel.get(0).getStore().reload();
                            cmv.mypage.tilmeldingerpanel.get(2).getStore().reload();
                          }
                          else
                            Ext.Msg.alert('Fejl','Der skete desværre en fejl. Prøv igen.');
                        }
                      });
                    }
                  });
                }
              }
              else
              {
                if (rec.get('Free')==0) {
                  Ext.Msg.alert(rec.get('overskrift'),'Grænsen for antal tilmeldinger/bestillinger på '+rec.get('Limit')+' er desværre nået.');
                } else {
                  if (rec.get('LedsagerOK')&&rec.get('Free')>1)
                    Ext.Msg.prompt(rec.get('overskrift'),'Skal du have en ledsager tilmeldt, så udfyld feltet. Ellers lad det være tomt. Klik OK for tilmelding.',function(btn,ledsager){                      
                      if(btn=="ok")
                      { 
                        Ext.Ajax.request({
                          url: 'php/updateactdeltagere.php',
                          params: {
                            action:'add',
                            actid:rec.get('idx'),
                            ledsager:ledsager
                          },
                          callback:function(options,success,response){
                            if(success)
                            {
                              cmv.mypage.tilmeldingerpanel.get(0).getStore().reload();
                              cmv.mypage.tilmeldingerpanel.get(2).getStore().reload();
                            }
                            else
                              Ext.Msg.alert('Fejl','Der skete desværre en fejl. Prøv igen.');
                          }
                        });
                      }
                    });
                  else
                    Ext.Msg.confirm(rec.get('overskrift'),'Ønsker du at tilmelde dig / bestille dette?',function(btn){
                      if(btn=="yes")
                      {
                        Ext.Ajax.request({
                          url: 'php/updateactdeltagere.php',
                          params: {
                            action:'add',
                            actid:rec.get('idx')
                          },
                          callback:function(options,success,response){
                            if(success)
                            {
                              cmv.mypage.tilmeldingerpanel.get(0).getStore().reload();
                              cmv.mypage.tilmeldingerpanel.get(2).getStore().reload();
                            }
                            else
                              Ext.Msg.alert('Fejl','Der skete desværre en fejl. Prøv igen.');
                          }
                        });
                      }
                    });
                }
              }
              
            }
          },{
            getClass: function(v, meta, rec) {
              
              if (rec.get('LedsagerOK')) {
                this.items[2].tooltip = 'Se tilmeldte inkl. ledsagere';
                return 'uad-col';
              } else {
                this.items[2].tooltip = 'Se tilmeldte';

                return 'usr-col';
              }
            },     
            handler: function(grid, rowIndex, colIndex) {
              var rec = grid.store.getAt(rowIndex);
              var gridwin = new cmv.mypage.deltagerWindow({
                activityid:rec.get('idx'),
                activityname:rec.get('overskrift'),
                ledsagerOK:rec.get('LedsagerOK')
              });
              gridwin.show();
            }
          }]
        },{
          header:'Dato',
          width:160,
          renderer: Ext.util.Format.signup,
          dataIndex:'dato'
        },{
          header:'Frist',
          width:110,
          renderer: Ext.util.Format.dateRenderer(Date.patterns.Date),
          dataIndex:'Frist'
        },{
          header: 'Ledsager',
          width: 110,
          dataIndex: 'Ledsager'
        },{
          id:'overskrift',
          header: 'Aktivitet',
          width: 175,
          dataIndex: 'overskrift'
        }],
        defaults:{
          sortable:false
        }
      }),
      autoExpandColumn: 'overskrift',
      autoHeight: true,
      stripeRows: true,
      enableColumnMove:false,
      enableColumnResize: true,
      defaults: {
        sortable: false,
        filterable: false
      },
      store:new Ext.data.JsonStore({
        autoDestroy: true,
        autoLoad: true,
        url: 'json/getsignup.php?signedup='+config.signedup,
        // reader configs
        root: 'data',
        totalProperty: 'total',
        idProperty: 'idx',
        baseParams :{
        },
        fields: [{
          name:'signedup',
          type:'boolean'
        },{
          name:'Free',
          type:'int'
        },{
          name:'LedsagerOK',
          type:'boolean'
        },{
          name:'Limit',
          type:'int'
        },{
          name:'idx',
          type:'int'
        },{
          name: 'dato',
          type: 'date',
          dateFormat: Date.patterns.ISO8601Long
        },{
          name: 'Frist',
          type: 'date',
          dateFormat: Date.patterns.ISO8601Long
        },
        {
          name: 'artikel'
        },
        {
          name: 'overskrift'
        },
        {
          name: 'Ledsager'
        }]
      }),
      viewConfig:{
        headersDisabled:true
      },
      autoscroll: true,
      bbar:{
        hidden:true
      }
    },config);
    cmv.mypage.SignupGrid.superclass.constructor.call(this, config);
    if(config.signedup)
      this.getColumnModel().setHidden(2, true);
    else
      this.getColumnModel().setHidden(3, true);
    this.getBottomToolbar().add([new Ext.Button({
      tooltip: 'Opfrisk',
      overflowText: 'Opfrisk',
      iconCls: 'x-tbar-loading',
      handler: function(){
        this.getStore().reload();
      },
      scope: this
    })])
    this.getBottomToolbar().setVisible(true);
  }
});

Ext.reg('cmvmypagesignupgrid', cmv.mypage.SignupGrid);

cmv.mypage.deltagerWindow = Ext.extend(Ext.Window, {
  activityid:undefined,
  activityname: undefined,
  ledsagerOK: undefined,
  constructor: function(config) {
    config=Ext.apply({
      modal:true,
      layout:'auto',
      width:420,
      y:100,
      closable: true,
      resizable: true,
      plain: true,
      border: false,
      items: new Ext.grid.GridPanel({
        autoDestroy: true,
        title:'Tilmeldte: '+(Ext.isDefined(config.activityname)?config.activityname:''),
        frame:true,
        columns: [{
          id: 'Navn'  ,
          header: 'Navn',
          width: 110,
          dataIndex: 'Navn'
        },{
          header: 'Ledsager',
          width: 110,
          dataIndex: 'Ledsager'
        }],
        autoExpandColumn: 'Navn',
        autoHeight: true,
        stripeRows: true,
        enableColumnMove:false,
        enableColumnResize: false,
        defaults: {
          sortable: false,
          filterable: false
        },
        store:new Ext.data.JsonStore({
          autoDestroy: true,
          autoLoad: true,
          url: 'json/getactdeltagere.php',
          // reader configs
          root: 'data',
          idProperty:'Navn',
          totalProperty: 'total',
          baseParams:{
            start:0,
            limit:20,
            actid: config.activityid
          },
          fields: [{
            name: 'Navn'
          },{
            name: 'Ledsager'
          }],
          listeners:{
            update: {
              fn: function(store, record, operation){
                store.reload();
              }
            }
          }
        }),
        viewConfig:{
          headersDisabled:true,
          forceFit: true
        },
        autoscroll: true,
        bbar:{
          hidden:true
        }
      })
    },config)
    cmv.mypage.deltagerWindow.superclass.constructor.call(this, config);
    var delgrid=this.getComponent(0);
    delgrid.getColumnModel().setHidden(1,!this.ledsagerOK);
    var tb=delgrid.getBottomToolbar();
    tb.addItem(new Ext.PagingToolbar({
      store: delgrid.getStore(),
      pageSize: 20,
      displayInfo: true
    }));
    tb.setVisible(true);
  }
})

Ext.reg('cmvmypagedeltagerwindow', cmv.mypage.deltagerWindow);

cmv.mypage.helperWindow = Ext.extend(Ext.Window, {
  activityid:undefined,
  activityname: undefined,
  constructor: function(config) {
    config=Ext.apply({
      modal:true,
      layout:'fit',
      width:450,
      y:100,
      closable: true,
      resizable: true,
      plain: true,
      border: false,
      items: new Ext.grid.GridPanel({
        autoDestroy: true,
        title:'Hjælpere: '+(Ext.isDefined(config.activityname)?config.activityname:''),
        frame:true,
        columns: [{
          header: 'Navn',
          width: 110,
          dataIndex: 'navn'
        },{
          header: 'Telefon',
          width: 70,
          dataIndex: 'Telefon'
        },{
          id: 'email'  ,
          header: 'Email',
          width: 170,
          dataIndex: 'email'
        }],
        autoExpandColumn: 'email',
        autoHeight: true,
        stripeRows: true,
        enableColumnMove:false,
        enableColumnResize: false,
        defaults: {
          sortable: false,
          filterable: false
        },
        store:new Ext.data.JsonStore({
          autoDestroy: true,
          autoLoad: true,
          url: 'json/gethelpers.php',
          // reader configs
          root: 'data',
          idProperty:'Navn',
          totalProperty: 'total',
          baseParams:{
            start:0,
            limit:20,
            actid: config.activityid
          },
          fields: [{
            name: 'navn'
          },{
            name: 'Telefon'
          },{
            name: 'email'
          }],
          listeners:{
            update: {
              fn: function(store, record, operation){
                store.reload();
              }
            }
          }
        }),
        viewConfig:{
          headersDisabled:true,
          forceFit: true
        },
        autoscroll: true,
        bbar:{
          hidden:true
        }
      })
    },config)
    cmv.mypage.deltagerWindow.superclass.constructor.call(this, config);
    var delgrid=this.getComponent(0);
    var tb=delgrid.getBottomToolbar();
    tb.addItem(new Ext.PagingToolbar({
      store: delgrid.getStore(),
      pageSize: 20,
      displayInfo: true
    }));
    tb.setVisible(true);
  }
})

Ext.reg('cmvmypagehelperwindow', cmv.mypage.deltagerWindow);

cmv.mypage.activityWindow = Ext.extend(Ext.Window, {
  activityid:undefined,
  constructor: function(config) {
    config=Ext.apply({
      modal:true,
      layout:'auto',
      width:550,
      y:100,
      closable: true,
      resizable: true,
      plain: true,
      border: false
    },config)
    cmv.mypage.activityWindow.superclass.constructor.call(this, config);
    var actstore=new Ext.data.JsonStore({
      // store configs
      autoDestroy: true,
      url: 'json/activities.php?idx='+config.activityid,
      storeId: 'winactivities',
      idProperty: 'idx',
      root: 'data',
      totalProperty: 'total',
      fields: cmv.acts.actsfields,
      listeners:{
        load: {
          fn: function(str,rec,opt){
            helpstore.load(opt);
          }
        }
      }
    });
    var helpstore= new Ext.data.JsonStore({
      // store configs
      autoDestroy: true,
      url: 'json/acthelpers.php?idx='+config.activityid,
      storeId: 'helpersact',
      root: 'data',
      totalProperty: 'total',
      fields: cmv.acts.helperfields,
      listeners:{
        load: {
          fn: function(str,rec,opt){
            routestore.load(opt);
          }
        }
      }
    });
    var routestore=new Ext.data.JsonStore({
      // store configs
      autoDestroy: true,
      url: 'json/actroutes.php?idx='+config.activityid,
      remoteSort: true,
      storeId: 'winroutesact',
      root: 'data',
      totalProperty: 'total',
      fields: cmv.acts.routesfields,
      listeners:{
        load: {
          fn: function(str,rec,opt){
            sponsorstore.load(opt);
          }
        }
      }
    });
    var sponsorstore = new Ext.data.JsonStore({
      // store configs
      autoDestroy: true,
      url: 'json/actsponsors.php?idx='+config.activityid,
      storeId: 'sponsorsact',
      root: 'data',
      totalProperty: 'total',
      fields: cmv.acts.sponsorfields,
      listeners:{
        load: {
          fn: function(str,rec,opt){
            opt.scope.add(new cmv.acts.Panel({
              record:actstore.getAt(0),
              helpersstore: helpstore,
              sponsorstore: sponsorstore,
              showmap: (routestore.findExact('idx',config.activityid)!=-1)
            }))
            opt.scope.doLayout();
          }
        }
      }
    })
    actstore.load({
      scope:this
    });
  }
})

Ext.reg('cmvmypageactivitywindow', cmv.mypage.activityWindow);

cmv.mypage.HelperGrid = Ext.extend(Ext.grid.GridPanel, {
  constructor: function(config) {
    config=Ext.apply({
      autoDestroy: true,
      frame:true,
      width: 660,
      colModel: new Ext.grid.ColumnModel({
        columns:[{
          xtype: 'actioncolumn',
          width: 60,
          items: [{
            icon   : 'images/information.png',
            tooltip: 'Se mere info',
            handler: function(grid, rowIndex, colIndex) {
              var rec = grid.store.getAt(rowIndex);
              var actwin = new cmv.mypage.activityWindow({
                activityid:rec.get('act_id')
              });
              actwin.show();
            }
          },{
            icon   : 'images/user.png',
            tooltip: 'Se de andre hjælpere',
            handler: function(grid, rowIndex, colIndex) {
              var rec = grid.store.getAt(rowIndex);
              var gridwin = new cmv.mypage.helperWindow({
                activityid:rec.get('act_id'),
                activityname:rec.get('overskrift')
              });
              gridwin.show();
            }
          }]
        },{
          header:'Dato',
          width:160,
          renderer: Ext.util.Format.signup,
          dataIndex:'dato'
        },{
          id:'overskrift',
          header: 'Aktivitet',
          width: 175,
          dataIndex: 'overskrift'
        }],
        defaults:{
          sortable:false
        }
      }),
      autoExpandColumn: 'overskrift',
      autoHeight: true,
      stripeRows: true,
      enableColumnMove:false,
      enableColumnResize: true,
      defaults: {
        sortable: false,
        filterable: false
      },
      store:new Ext.data.JsonStore({
        autoDestroy: true,
        autoLoad: true,
        url: 'json/getacthelpers.php',
        // reader configs
        root: 'data',
        totalProperty: 'total',
        idProperty: 'act_id',
        baseParams :{
        },
        fields: [{
          name:'act_id',
          type:'int'
        },{
          name: 'dato',
          type: 'date',
          dateFormat: Date.patterns.ISO8601Long
        },
        {
          name: 'artikel'
        },
        {
          name: 'overskrift'
        }]
      }),
      viewConfig:{
        headersDisabled:true
      },
      autoscroll: true,
      bbar:{
        hidden:true
      }
    },config);
    cmv.mypage.HelperGrid.superclass.constructor.call(this, config);
    this.getBottomToolbar().add([new Ext.Button({
      tooltip: 'Opfrisk',
      overflowText: 'Opfrisk',
      iconCls: 'x-tbar-loading',
      handler: function(){
        this.getStore().reload();
      },
      scope: this
    })])
    this.getBottomToolbar().setVisible(true);
  }
});

Ext.reg('cmvmypagehelpergrid', cmv.mypage.HelperGrid);
