function Marche(dbRequest){
	this.request=dbRequest;

	this.valeurParDefaut=function(){
        console.log("valeur par defaut ajouter");
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('marche', { 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 transaction = baseActive.transaction('marche','readwrite');
			// Puis nous insérons notre valeur avec add() sur l'ObjectStore, en ajoutant en second argument la clé de notre valeur
			//transaction.objectStore('produit').add({nom: nom,categorie: categorie,fab:fab});
            transaction.objectStore('marche').add({nom:'Marché Andravoahangy',categorie:'locaux',apropos:'marché tous les mercredi',lieu:'Andravoahangy',cLat:'-18.896247450938944',cLong:'47.531510442495346',numero:''});
            
            baseActive.close();
		};

		this.request.onerror= function(e){
			console.log('error defaultValue');
		};
	};

	this.doublon=function(nom,categorie,apropos,lieu,cLat,cLong,numero){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('marche', { keyPath:
					'id', autoIncrement: true });
					break;
				case 1:
					break;	
			};
		}

		this.request.onsuccess = function (event) {
			var unique=true;
			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('marche','readonly');
	
			var recuperationPointeur =transactionLecture.objectStore('marche').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){
                    if(pointeur.value.categorie==categorie && pointeur.value.nom==nom 
                    	&& pointeur.value.lieu==lieu || (pointeur.value.cLat==cLat &&
                    	pointeur.value.cLong==cLong)){
                    	unique=false;
                    }
                    pointeur.continue();
                }
                else{
                	if(unique){
                		var action=new Marche(db_manager.open("smarkhelp0",2));
                    	action.ajouter(nom,categorie,apropos,lieu,cLat,cLong,numero);
                	}
                	else Materialize.toast("Efa misy ao @ lisitra io toerana io");
                }
			}
            baseActive.close();
		};

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

	this.ajouter=function(nom,categorie,apropos,lieu,cLat,cLong,numero){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('marche', { 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('marche',
			'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('marche').add({nom:nom,categorie:categorie,apropos:apropos,lieu:lieu,cLat:cLat,cLong:cLong,numero:numero});
			// Et enfin, comme l'ajout est asynchrone, nous attendons son retour
			ajout.onsuccess = function() {
			// Notre valeur a bien été insérée
			// Elle aura en plus une propriété id automatiquement ajoutée
                Materialize.toast('Toera-pivarotana voatahiry!', 4000);
                var db_manager=new Database();
                db_manager.configure();
                var marche = new Marche(db_manager.open("smarkhelp0",2));
                marche.afficher($("#marche_list"),"marche");
                var locaux = new Marche(db_manager.open("smarkhelp0",2));
                locaux.afficher($("#locaux_list"),"locaux");
                var spm = new Marche(db_manager.open("smarkhelp0",2));
                spm.afficher($("#supermarche_list"),"supermarche");
                var sta = new Marche(db_manager.open("smarkhelp0",2));
                sta.afficher($("#station_list"),"station");
                var q = new Marche(db_manager.open("smarkhelp0",2));
                q.afficher($("#quincaillerie_list"),"quincaillerie");
                var a = new Marche(db_manager.open("smarkhelp0",2));
                a.afficher($("#autre_list"),"autre");
                var mag = new Marche(db_manager.open("smarkhelp0",2));
                mag.afficher($("#magasin_list"),"magasin");
			};
            baseActive.close();
		};

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

    this.modifier=function(id,nom,categorie,apropos,lieu,cLat,cLong,numero){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('marche', { 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(['marche'],'readwrite').objectStore('marche');
            var quest = trans.get(parseInt(id));
            quest.onerror = function(event) {
              
            };
            quest.onsuccess = function(event) {
              var data = event.target.result;
                console.table(data);
              //nouveau prix                
              data.numero = numero;
                data.nom = nom;
                data.categorie = categorie;
                data.apropos = apropos;
                data.lieu = lieu;
                data.cLat = cLat;
                data.cLong = cLong;

              // 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");
                };
            };
		};

		this.request.onerror= function(e){
			alert("erreur. . . ");
		};
	};
    
    this.afficher=function(element,type){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('marche', { keyPath:
					'id', autoIncrement: 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
			var transactionLecture = baseActive.transaction('marche','readonly');
	
			var recuperationPointeur =transactionLecture.objectStore('marche').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){
                    if(pointeur.value.categorie==type){
element.append('<a class="list-group-item allow-badge widget" data-uib="twitter%20bootstrap/list_item" data-ver="1"><span class="badge see_detail" value="'+pointeur.value.id+"#"+pointeur.value.nom+"#"+pointeur.value.apropos+"#"+pointeur.value.lieu+"#"+pointeur.value.numero+"#"+pointeur.value.cLat+"#"+pointeur.value.cLong+'"><i class="fa fa-location-arrow"></i></span><h4 class="moy-font list-group-item-heading l-produit" value="'+pointeur.value.id+'">'+pointeur.value.nom+'</h4><p class="sm-font list-group-item-text">'+pointeur.value.lieu+'</p></a>');
                    }
                    pointeur.continue();
                }
                else{
                	if(element.html()=="") element.html("<div class=\"cyan lighten-5 center-align\" style=\"width:100%;padding: 5px;\">Tsy mbola misy toera-pivarotana</div>");
                }
			}
            baseActive.close();
		};

		this.request.onerror= function(e){
			alert("erreur. . . ");
		};
	};
    
    this.rechercher=function(key,element){
        var reg=new RegExp(key, "i");
        element.html('<img src="../img/spinner2-greenie.gif" width="30" style="left: 44%;position: relative;">');
        this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('marche', { keyPath:
					'id', autoIncrement: true });
					break;
				case 1:
					break;	
			};
		}

		this.request.onsuccess = function (event) {
            var aucunResultat=true;
			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('marche','readonly');
	
			var recuperationPointeur =transactionLecture.objectStore('marche').openCursor();
            element.html("");
			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){
                        if(reg.exec(pointeur.value.nom) || reg.exec(pointeur.value.lieu)){
                            aucunResultat=false;
                        element.append('<a class="list-group-item allow-badge widget" data-uib="twitter%20bootstrap/list_item" data-ver="1"><span class="badge see_detail" value="'+pointeur.value.id+"#"+pointeur.value.nom+"#"+pointeur.value.apropos+"#"+pointeur.value.lieu+"#"+pointeur.value.numero+"#"+pointeur.value.cLat+"#"+pointeur.value.cLong+'"><i class="fa fa-location-arrow"></i></span><h4 class="moy-font list-group-item-heading l-produit" value="'+pointeur.value.id+'">'+pointeur.value.nom+'</h4><p class="sm-font list-group-item-text">'+pointeur.value.lieu+'</p></a>');
                        }
                    pointeur.continue();
                }
                else{
                    if(aucunResultat) element.html("<mark>Aucun resultat trouvé</mark>");
                }
			}
            baseActive.close();
		};

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

    this.surCarte=function(carte,type){
		this.request.onupgradeneeded = function (event) {
			var baseAMettreAjour = event.target.result;
			var ancienneVersion = event.oldVersion;
			var nouvelleVersion = event.newVersion;
			switch (ancienneVersion) {
				case 0:
					baseAMettreAjour.createObjectStore('marche', { 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
            console.log(baseActive);
			var transactionLecture = baseActive.transaction('marche','readonly');
	
			var recuperationPointeur =transactionLecture.objectStore('marche').openCursor();

			recuperationPointeur.onsuccess = function (event) {
                $("#loader").hide("linear");
				// 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("marker ajouté");
                    if(type=="tout" || pointeur.value.categorie==type){
                        addLocationMark(carte,pointeur.value.cLat,pointeur.value.cLong,pointeur.value.categorie+"#"+pointeur.value.nom+"#"+pointeur.value.lieu);
                    }
                    pointeur.continue();
                }
			}
            baseActive.close();
		};

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