function examens()
{

    var ExamenCreateForm;
    var ExamenCreateWindow;

    var NameField;
    var ImageField;
    var RangField;
    
    var store;
    var ExamenListingSelectedRow;
       
    NameField = new Ext.form.TextField(
    {
        id          : 'name',
        fieldLabel  : 'Nom',
        name        : 'name',
        maxLength   : 20,
        allowBlank  : false,
        anchor      : '95%'
    });

    ImageField = new Ext.form.TextField(
    {
        id          : 'image',
        fieldLabel  : 'Image',
        name        : 'image',
        allowBlank  : false,
        anchor      : '95%'
    });

    RangField = new Ext.form.TextField(
    {
        id          : 'rang',
        fieldLabel  : '#',
        name        : 'rang',
        maxLength   : 20,
        allowBlank  : true,
        anchor      : '95%'
    });

    store = new Ext.data.JsonStore({
        url     : baseUrl + '/admin/examen/json',
        root    : 'records',
        fields  : ['id', 'name', 'image', 'rang']
    });
    
    var cm = new Ext.grid.ColumnModel([
        {
            header      : "Nom",
            width       : 100,
            dataIndex   : 'name',
            editor      : NameField
        }, {
            header      : "Image",
            width       : 200,
            dataIndex   : 'image',
            editor      : ImageField
        }, {
            header      : "#",
            width       : 20,
            dataIndex   : 'rang',
            editor      : RangField
        }
    ]);
    cm.defaultSortable= true;


    ExamenListingEditorGrid =  new Ext.grid.EditorGridPanel(
    {
        id              : 'ExamenListingEditorGrid',
        store           : store,
        cm              : cm,
        enableRowHeightSync : true,
        trackMouseOver  : true,
        enableColLock   : true,
        selModel        : new Ext.grid.RowSelectionModel(
                        {
                            singleSelect: true
                        }),
        border          : false,
        collapsible     : false,
        titleCollapse   : true,
        tbar            : [{
            text    : 'Add a examen',
            iconCls : 'add',
            handler : displayFormWindow
        }, '-', {
            text    : 'Delete selection',
            handler : confirmDeleteExamens,
            iconCls : 'remove'
        }]
    });

    function onExamenListingEditorGridContextMenu(grid, rowIndex, e)
    {  
        e.stopEvent();
        var coords = e.getXY();
        ExamenListingContextMenu.rowRecord = grid.store.getAt(rowIndex);
        grid.selModel.selectRow(rowIndex);
        ExamenListingSelectedRow=rowIndex;
        ExamenListingContextMenu.showAt([coords[0], coords[1]]);
    }

    function modifyExamenContextMenu(){
        BrowseServer('image');
        ExamenListingEditorGrid.startEditing(ExamenListingSelectedRow,1);
    }

    function deleteExamenContextMenu(){
        confirmDeleteExamens();
    }

    ExamenListingContextMenu = new Ext.menu.Menu({
        id      : 'ExamenListingEditorGridContextMenu',
        items   : [
        {
            text    : 'Modify this image',
            handler : modifyExamenContextMenu
        },

        {
            text    : 'Delete this Examen',
            handler : deleteExamenContextMenu
        }
        ]
    });

    ExamenListingEditorGrid.addListener('rowcontextmenu', onExamenListingEditorGridContextMenu);

    var btnBrowser = new Ext.Button(
    {
        text: "Insert Image",
		handler: function()
            {
                BrowseServer('image');
            }
    });
    
    ExamenCreateForm = new Ext.FormPanel(
    {
        labelAlign  : 'top',
        bodyStyle   : 'padding:5px',
        width       : 600,
        items       : [RangField, NameField, ImageField, btnBrowser],
        buttons     : [{
            text    : 'Save and Close',
            handler : function()
            {
                createExamen();
            }
        },{
            text    : 'Cancel',
            handler : function()
            {
                ExamenCreateWindow.hide();
                var redirect = baseUrl + '/examen';
                window.location = redirect;
            }
        }]
    });

          
    ExamenCreateWindow= new Ext.Window(
    {
        id          : 'ExamenCreateWindow',
        title       : 'Creating a New Examen',
        closable    : true,
        width       : 610,
        height      : 350,
        plain       : true,
        listeners: {
          close: function() {
            var redirect = baseUrl + '/examen';
            window.location = redirect;
          }
        },
        layout      : 'fit',
        items       : ExamenCreateForm
    });
    
    // reset the Form before opening it
    function resetExamenForm()
    {
        ImageField.setValue('');
        NameField.setValue('');
        RangField.setValue('0');
    }

    // check if the form is valid
    function isExamenFormValid(){
        return(NameField.isValid() &&
        ImageField.isValid() &&
        RangField.isValid());
    }

    function displayFormWindow()
    {
        if(!ExamenCreateWindow.isVisible()){
            resetExamenForm();
            ExamenCreateWindow.show();
        } else {
            ExamenCreateWindow.toFront();
        }
    }

    function confirmDeleteExamens(){
        if(ExamenListingEditorGrid.selModel.getCount() == 1){
            Ext.MessageBox.confirm('Confirmation','Delete this examen?', deleteExamens);
        } else {
            Ext.MessageBox.alert('Erreur','Select one only !');
        }
    }


    function saveExamen(oGrid_event)
    {
        Ext.Ajax.request({
            waitMsg: 'Please wait...',
            url: baseUrl + '/admin/examen/edit',
            params: {
                task         : "UPDATEVC",
                id           : oGrid_event.record.data.id,
                name         : oGrid_event.record.data.name,
                image        : oGrid_event.record.data.image,
                rang         : oGrid_event.record.data.rang
            },
            success: function(response){
                var result=eval(response.responseText);
                switch(result){
                    case 1:
                        store.commitChanges();
                        Ext.MessageBox.alert('Success !', 'Examen saved.');
                        store.reload();
                        break;
                    default:
                        Ext.MessageBox.alert('Error !','We couldn\'t save him...');
                        break;
                }
            },
            failure: function(response){
                var result=response.responseText;
                Ext.MessageBox.alert('error','could not connect to the database. retry later');
            }
        });
    }

    function createExamen(){
        if(isExamenFormValid()){
            Ext.Ajax.request({
                waitMsg: 'Please wait...',
                url: baseUrl + '/admin/examen/add',
                params: {
                    task            : "CREATEVC",
                    name            : NameField.getValue(),
                    image           : ImageField.getValue(),
                    rang            : RangField.getValue()
                },
                success: function(response){
                    var result=eval(response.responseText);
                    switch(result){
                        case 1:
                            Ext.MessageBox.alert('Creation OK', 'The examen was created successfully.');
                            store.reload();
                            ExamenCreateWindow.hide();
                            break;
                        default:
                            Ext.MessageBox.alert('Warning', 'Could not create the examen.');
                            break;
                    }
                },
                failure: function(response){
                    var result=response.responseText;
                    Ext.MessageBox.alert('error', 'could not connect to the database. retry later');
                }
            });
        } else {
            Ext.MessageBox.alert('Warning', 'Your Form is not valid!');
        }
    }

    function deleteExamens(btn){
        if(btn=='yes'){
            var selections = ExamenListingEditorGrid.selModel.getSelections();
            var id = selections[0].json.id;
            
            Ext.Ajax.request({
                waitMsg: 'Please Wait',
                url: baseUrl + '/admin/examen/delete',
                params: {
                    task: "DELETEVCS",
                    id:  id
                },
                success: function(response){
                    var result=eval(response.responseText);
                    switch(result){
                        case 1:  // Success : simply reload
                            Ext.MessageBox.alert('Success !', 'Examen deleted.');
                            store.reload();
                            break;
                        default:
                            Ext.MessageBox.alert('Warning','Could not delete the entire selection.');
                            break;
                    }
                },
                failure: function(response){
                    var result=response.responseText;
                    Ext.MessageBox.alert('error','could not connect to the database. retry later');
                }
            });
        }
    }

    ExamenListingEditorGrid.on('afteredit', saveExamen);
    store.load();
        
    var win = new Ext.Window({
        title       : 'Examens',
        layout      : 'fit',
        width       : 600,
        height      : 400,
        closable    : true,
        resizable   : true,
        autoScroll  : true,
        plain       : true,
        listeners: {
          close: function() {
            var redirect = baseUrl + '/examen';
            window.location = redirect;
          }
        },
        border      : false,
        items       : [ExamenListingEditorGrid]
	});

    win.show();
    return;
};

