function Course(dbRequest){
	
    this.request=dbRequest;
    
	this.creer=function(){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('course', { keyPath:'id',autoIncrement: true });
					break;
				case 1:
					break;	
			};
		}

		this.request.onsuccess = function () {
			var baseActive = this.result;
            // Nous démarrons une transaction avec la base sur la table utilisateurs en lecture-écriture
			var transaction = baseActive.transaction('course','readwrite');
			// Puis nous insérons notre valeur avec add() sur l'ObjectStore, en ajoutant en second argument la clé de notre valeur
			var ajout = transaction.objectStore('course').add({debut:new Date(),fin:"runing",depense:"0"});
			// Et enfin, comme l'ajout est asynchrone, nous attendons son retour
			ajout.onsuccess = function(e) {
			// Notre valeur a bien été insérée
			// Elle aura en plus une propriété id automatiquement ajoutée
                console.log("course créer:"+e.target.result);
				console.log("ajout in course");
                var id=e.target.result;
                var d=new Date();
                var inVal=id+"#"+d+"#runing#0";
                $("#courseTime").val(inVal);
			};
		};

		this.request.onerror= function(e){
			alert("erreur. . . ");
		};
	};
    
    this.finir=function(id,depense){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('course', { keyPath:
					'id', autoIncrement: true });
					break;
				case 1:
					break;	
			};
		}

		this.request.onsuccess = function (event) {
			var baseActive = event.target.result;
			// Nous démarrons une transaction avec la base sur la table utilisateurs en lecture-écriture
			var trans = baseActive.transaction(['course'],'readwrite').objectStore('course');
            var quest = trans.get(parseInt(id));
            quest.onerror = function(event) {
              
            };
            quest.onsuccess = function(event) {
              var data = event.target.result;
                console.table(data);
                
                data.fin = new Date();
                data.depense = depense;

              // Put this updated object back into the database.
              var requestUpdate = trans.put(data);
               requestUpdate.onerror = function(event) {
                
               };
               requestUpdate.onsuccess = function(event) {
                    console.log("donnee maj");   
                    $(".modal").addClass("bounceIn");
                    $(".modal").addClass("animated");
                    $("#rapport").modal("show");

               };
            };
		};

		this.request.onerror= function(e){
			alert("erreur. . . ");
		};
	};
    
    this.courant=function(element){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('course', { keyPath:
					'id', autoIncrement: true });
					break;
				case 1:
					break;	
			};
		}

		this.request.onsuccess = function (event) {
            element.val("");
			var baseActive = event.target.result;
			// Nous démarrons une transaction avec la base sur la table utilisateurs en lecture-écriture
			var transactionLecture = baseActive.transaction('course','readonly');
			var recuperationPointeur =transactionLecture.objectStore('course').openCursor();
			recuperationPointeur.onsuccess = function (event) {
				// Nous récupérons le pointeur qui sait naviguer dans la table
				var pointeur = event.target.result;
                var resultat="--";
                //alert(pointeur.size);
                if(pointeur && pointeur.value){
                    if(pointeur.value.fin=="runing"){
                    resultat=pointeur.value.id+"#"+pointeur.value.debut+"#"+pointeur.value.fin+"#"+pointeur.value.depense;
                    element.val(resultat);
                    }
                    pointeur.continue();   
                }
                else{
                  var d = new Date();
                  var cTs = $("#courseTime").val().split("#");
                  var di = new Date(cTs[1]);
                  var ecoul= dateDiff(di,d);
                  var stime=d.toLocaleTimeString()+"";
                  var tmp=stime.split(":"); 

                    var centi=0;
                    var heure=ecoul.hour; 
                    var secon=ecoul.sec; 
                    var minu=ecoul.min;
                    chrono(centi,secon,minu,heure); 
                }
            }

		};

		this.request.onerror= function(e){
			alert("erreur. . . ");
		};
	};
    
    this.afficher=function(element){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('course', { keyPath:
					'id', autoIncrement: true });
					//course.createIndex('indexNom', 'nom', {unique: true});
					break;
				case 1:
					break;	
			};
		}

		this.request.onsuccess = function (event) {
            element.html("");
			var baseActive = event.target.result;
			// Nous démarrons une transaction avec la base sur la table utilisateurs en lecture-écriture
            console.log(baseActive);
			var transactionLecture = baseActive.transaction('course','readonly');
	       var dtmp,ftmp;
			var recuperationPointeur =transactionLecture.objectStore('course').openCursor();

			recuperationPointeur.onsuccess = function (event) {
				// Nous récupérons le pointeur qui sait naviguer dans la table
				var pointeur = event.target.result;
				//alert(pointeur.size);
                if(pointeur && pointeur.value){
                    console.log(pointeur.value.debut);
                    dtmp=pointeur.value.debut+"";
                    dtmp=dtmp.split(" ");
                    dtime=dtmp[4].split(":");
                    ftmp=pointeur.value.fin+"";
                    ftmp=ftmp.split(" ");
                    ftime=ftmp[4].split(":");
element.append('<a role="tab" data-toggle="tab" href="#detail_course" class="course-id list-group-item allow-badge widget" data-uib="twitter%20bootstrap/list_item" data-ver="1" value="'+pointeur.value.id+'"><h4 class="moy-font list-group-item-heading l-course">'+dtmp[2]+' '+dtmp[1]+' '+dtmp[3]+'</h4><p class="sm-font list-group-item-text">Faharetany : '+dtime[0]+'h'+dtime[1]+' - '+ftime[0]+'h'+ftime[1]+'</p><div class="check-style"></div></a>');
                    pointeur.continue();
                }
                else{
                	if(element.html()=="") element.html("<div class=\"cyan lighten-5 center-align\" style=\"width:100%;padding: 5px;\">Tsy mbola misy</div>");
                }
			}
            baseActive.close();
		};

		this.request.onerror= function(e){
			alert("erreur. . . ");
		};
	};
}