Ext.ux.grid.CheckColumn = function(config){
    Ext.apply(this, config);
    if(!this.id){
        this.id = Ext.id();
    }
    this.renderer = this.renderer.createDelegate(this);
};

Ext.ux.grid.CheckColumn.prototype ={
    init : function(grid){
        this.grid = grid;
        this.grid.on('render', function(){
            var view = this.grid.getView();
            view.mainBody.on('mousedown', this.onMouseDown, this);
        }, this);
    },
    onMouseDown : function(e, t) {  
            if (t.className && t.className.indexOf('x-grid3-cc-' + this.id) != -1) {  
                e.stopEvent();  
                var index = this.grid.getView().findRowIndex(t);  
                var cindex = this.grid.getView().findCellIndex(t);  
                var record = this.grid.store.getAt(index);  
                var field = this.grid.colModel.getDataIndex(cindex);  
                var e = {  
                    grid : this.grid,  
                    record : record,  
                    field : field,  
                    originalValue : record.data[this.dataIndex],  
                    value : !record.data[this.dataIndex],  
                    row : index,  
                    column : cindex,  
                    cancel : false  
                };  
                if (this.grid.fireEvent("validateedit", e) !== false && !e.cancel) {  
                    delete e.cancel;  
                    record.set(this.dataIndex, !record.data[this.dataIndex]);  
                    this.grid.fireEvent("afteredit", e);  
                }  
            }  
        },
    renderer : function(v, p, record){
        p.css += ' x-grid3-check-col-td'; 
        return '<div class="x-grid3-check-col'+(v?'-on':'')+' x-grid3-cc-'+this.id+'">&#160;</div>';
    }
};

// register ptype
Ext.preg('checkcolumn', Ext.ux.grid.CheckColumn);

// backwards compat
Ext.grid.CheckColumn = Ext.ux.grid.CheckColumn;

     
      function windowPermissionUsers(loadAsTab){

        var fm = Ext.form;

        var checkColumnView = new Ext.grid.CheckColumn({
           header: 'View',
           dataIndex: 'view',
           width: 55,
           listeners:{
           }
        });
        var checkColumnEdit = new Ext.grid.CheckColumn({
           header: 'Edit',
           dataIndex: 'edit',
           width: 55
        });
        var checkColumnAdmin = new Ext.grid.CheckColumn({
           header: 'Admin',
           dataIndex: 'admin',
           width: 55
        });

        var cm = new Ext.grid.ColumnModel({
            // specify any defaults for each column
            defaults: {
                sortable: true // columns are not sortable by default           
            },
            columns: [
                {
                    id: 'fullname',
                    header: 'Common Name',
                    dataIndex: 'fullname',
                    width: 220
                },
                checkColumnView,
                checkColumnEdit,
                checkColumnAdmin
            ]
        });

        var store = new Ext.data.Store({
            autoDestroy: true,
            url: '/ajax/permissions/getUsers.cfm?id=1',
            reader: new Ext.data.XmlReader({
                record: 'user',
                fields: [
                    {name: 'id', type: 'int'},
                    {name: 'fullname', type: 'string'},
                    {name: 'view', type: 'bool'},
                    {name: 'edit', type: 'bool'},
                    {name: 'admin', type: 'bool'}
                ]
            }),
            sortInfo: {field:'common', direction:'ASC'}
        });
      
        var userPerms = store.recordType;
        var uu = new userPerms({
            id: 1,
            fullname: 'Scott Steinbeck',
            view: true,
            edit: false,
            admin: false
        });
        store.insert(0, uu);
        var uu = new userPerms({
            id: 1,
            fullname: 'Charlie Jacquez',
            view: true,
            edit: true,
            admin: true
        });
        store.insert(0, uu);


        var permEditor = new Ext.grid.EditorGridPanel({
            region: 'center',
            store: store,
            cm: cm,
            autoExpandColumn: 'fullname',
            clicksToEdit: 1,
            plugins: [checkColumnView, checkColumnEdit, checkColumnAdmin]
        });
        permEditor.on('validateedit', function(e){
                switch (e.field){
                  case "edit":
                    if (e.value){
                      e.record.data['view']=true;
                    }else{
                      e.record.data['admin']=false;
                    };
                    break;
                  case "view":
                    if (!e.value){
                      e.record.data['edit']=false;
                      e.record.data['admin']=false;
                    };
                    break;
                  case "admin":
                    if (e.value){
                      e.record.data['edit']=true;
                      e.record.data['view']=true;
                    };
                    break;
                }
              });
              
        var permHolder = new Ext.Panel({
          title: 'Permissions',
          layout: 'border',
          items:[
                  {region: 'north', padding: 5, html: 'Notice: All widgets are public by default'},
                  permEditor
                ]
        
        });
      
        if (loadAsTab){
          return permHolder;
        }
      
        var winPermUsers = new Ext.Window({
              width:500,
              height:550,
              title: 'School Editor',
              layout:'fit',
              closeAction:'close',
              modal:true,
              closable:false,
              border:false,
              maximizable:true,
              items: permHolder,
              buttons: [{
                text: 'Save',
                handler: function(){
                  /*var tmpSerial = new Ext.tree.JsonTreeSerializer(tree, { nodeFilter: function(node) {
                      //node.Text = encodeURIComponent(node.Text);
                      //node.attributes.text = encodeURIComponent(node.attributes.text);
                      return true;
                    }});*/
                  var tmpSerial = "";
                  new Ajax.Request('/ajax/permissions/updatePermUsers.cfm', {
                    postBody: 'schoolData=' + tmpSerial,
                    onSuccess: function(transport){
                      winPermUsers.close();
                      //window.location.reload(true);
                      //Ext.Msg.wait('Saving your school configuration. This may take a few seconds.', 'Please wait...');
                    }
                  });
                }
              },{ text: 'Cancel', handler: function(){ winPermUsers.close(); } }]
          });
        //tree.getRootNode().expand(true);
        winPermUsers.show(this);
      }
