function DbHelper(){var a=null,e="MobiFamily",d="MobiFamily",f=65536;that=this;this.createDb=function(){if(typeof openDatabase=="undefined")throw localDatabaseNotSupportedError;a=openDatabase(e,"0.0.3",d,f);a.transaction(function(a){a.executeSql("CREATE TABLE IF NOT EXISTS setting   (IdDSetting INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL UNIQUE, Value TEXT NOT NULL);")});this.check_tables_exist()};this.open_current_version_db=function(){a.transaction(function(a){a.executeSql("CREATE TABLE IF NOT EXISTS device   (IdDevice INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Login TEXT NOT NULL, IdUserServer TEXT NOT NULL,   IdentifierDevice TEXT NOT NULL, IsConnected INTEGER NOT NULL);")});a.transaction(function(a){a.executeSql("INSERT OR REPLACE INTO setting (Name, Value) VALUES (?, ?);",["version",mbdVersion])});a.transaction(function(a){a.executeSql("INSERT OR REPLACE INTO setting (Name, Value) VALUES (?, ?);",["version_db",version_db_current])});a.transaction(function(a){a.executeSql("CREATE TABLE IF NOT EXISTS requests   (IdRequest INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, GUID TEXT NOT NULL, IdDevice INTEGER NOT NULL, IdUserServer TEXT NOT NULL, Name TEXT NOT NULL, Type TEXT NOT NULL, ReferenceId Text,   DateStart TEXT NOT NULL, DurationSeconds INTEGER NOT NULL, AverageSpeed TEXT NOT NULL,    SpeedMax TEXT, SpeedMin TEXT, Distance TEXT NOT NULL,    AltitudeMax INTEGER, AltitudeMin INTEGER, PosDev TEXT NOT NULL, NegDev TEXT NOT NULL, SavedToWeb INTEGER NOT NULL);")});a.transaction(function(a){a.executeSql("CREATE TABLE IF NOT EXISTS positions   (IdPosition INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, IdRequest INTEGER NOT NULL, IsWaypoint INTEGER NOT NULL,   Timestamp TEXT NOT NULL, Longitude TEXT NOT NULL, Latitude TEXT NOT NULL, Altitude TEXT, Heading TEXT, Speed TEXT);")});a.transaction(function(a){a.executeSql("CREATE TABLE IF NOT EXISTS pois   (IdPoi INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, IdUserServer TEXT NOT NULL,   Longitude TEXT NOT NULL, Latitude TEXT NOT NULL, Type TEXT NOT NULL, Name TEXT NOT NULL);")})};this.update_version_db=function(){a.transaction(function(a){a.executeSql("ALTER TABLE requests ADD COLUMN IdUserServer;")});a.transaction(function(a){a.executeSql("ALTER TABLE pois ADD COLUMN IdUserServer;")});a.transaction(function(a){a.executeSql("ALTER TABLE positions ADD COLUMN Speed;")});a.transaction(function(a){a.executeSql("INSERT OR REPLACE INTO setting (Name, Value) VALUES (?, ?);",["version_db",version_db_current])})};this.update_version_db_002_003=function(){a.transaction(function(a){a.executeSql("ALTER TABLE positions ADD COLUMN Speed;")});a.transaction(function(a){a.executeSql("INSERT OR REPLACE INTO setting (Name, Value) VALUES (?, ?);",["version_db",version_db_current])})};this.addDevice=function(g,e,b,f,c,d){a.transaction(function(a){a.executeSql("INSERT INTO device (Login, IdUserServer, IdentifierDevice, IsConnected) VALUES (?, ?, ?, ?);",[g,e,b,f],function(b,a){c(a)},function(){d()})})};this.getDevice=function(c,d){a.transaction(function(a){a.executeSql("SELECT * FROM device WHERE IdUserServer = ?;",[c],function(b,a){d(a)},b)})};this.getDeviceByIdDevice=function(d,c){a.transaction(function(a){a.executeSql("SELECT * FROM device WHERE IdDevice = ?;",[d],function(b,a){c(a)},b)})};this.connectDevice=function(d,c){a.transaction(function(a){a.executeSql("INSERT OR REPLACE INTO setting (Name, Value) VALUES (?, ?);",["connectedDevice",d])});a.transaction(function(a){a.executeSql("UPDATE device SET IsConnected = 1 WHERE IdUserServer = ?;",[c],function(){},b)})};this.disconnectDevice=function(c){a.transaction(function(a){a.executeSql("INSERT OR REPLACE INTO setting (Name, Value) VALUES (?, ?);",["connectedDevice",""])});a.transaction(function(a){a.executeSql("UPDATE device SET IsConnected = 0 WHERE IdUserServer = ?;",[c],function(){},b)})};this.checkConnection=function(c){a.transaction(function(a){a.executeSql("SELECT * FROM setting WHERE Name = ?;",["connectedDevice"],function(b,a){c(a)},b)})};this.check_tables_exist=function(){a.transaction(function(a){a.executeSql("SELECT * FROM setting WHERE Name = ?;",["version"],function(b,a){if(a.rows.length>0)that.check_version_db();else that.open_current_version_db()},b)})};this.check_version_db=function(){a.transaction(function(a){a.executeSql("SELECT * FROM setting WHERE Name = ?;",["version_db"],function(c,a){if(a.rows.length>0){var b=a.rows.item(0);that.process_version_db(b)}else that.process_version_db(null)},b)})};this.process_version_db=function(a){if(a!=null&&a.Value==version_db_002)that.update_version_db_002_003();else if(a!=null&&a.Value==version_db_current)that.open_current_version_db();else this.update_version_db()};this.addRequest=function(c){var d=0;a.transaction(function(a){a.executeSql("INSERT INTO requests (IdDevice, IdUserServer, GUID, Name, Type, ReferenceId, DateStart, DurationSeconds, AverageSpeed, SpeedMax, SpeedMin, Distance, AltitudeMax, AltitudeMin, PosDev, NegDev, SavedToWeb) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",[gDeviceProtocol.idDevice,gDeviceProtocol.idUserServer,c.guid,c.getName(),c.getType(),c.getReferenceId(),c.getStartTime(),c.chrono.getTotalSecondes(),c.getAverageSpeedStu(),c.getMaxSpeed(),c.getMinSpeed(),c.getDistance(),c.getMaxAltitude(),c.getMinAltitude(),c.getPosDenivellation(),c.getNegDenivellation(),d],function(b,a){for(i in c.arrayPositions)if(c.arrayPositions[i].toSave){c.arrayPositions[i].isWaypoint?(isWpt=1):(isWpt=0);that.addPosition(a.insertId,isWpt,c.arrayPositions[i].timestamp,c.arrayPositions[i].coords.longitude,c.arrayPositions[i].coords.latitude,c.arrayPositions[i].coords.altitude,c.arrayPositions[i].coords.heading,c.arrayPositions[i].coords.speed)}},b)})};this.deleteRequest=function(c){a.transaction(function(a){a.executeSql("DELETE FROM requests WHERE IdRequest = ?;",[c],function(){that.deletePositions(c)},b)})};this.updateRequestDuration=function(d,e){a.transaction(function(a){a.executeSql("UPDATE requests set DurationSeconds=? where IdRequest=?;",[e,d],function(){c()},b)})};this.deleteAllRequests=function(){a.transaction(function(a){a.executeSql("DELETE FROM requests",[],function(){c()},b)})};this.deleteTableRequests=function(){a.transaction(function(a){a.executeSql("DROP TABLE requests",[],function(){c()},b)})};this.getRequestsByIdDevice=function(e,c,d){a.transaction(function(a){a.executeSql("SELECT * FROM requests WHERE IdDevice = ? ORDER BY IdRequest DESC;",[e],function(f,b){if(b.rows.length>0)for(var a=0;a<b.rows.length;a++){var e=b.rows.item(a);c(e,a)}else d()},b)})};this.getRequestsFromCurrentUser=function(c,d){a.transaction(function(a){a.executeSql("SELECT * FROM requests WHERE IdUserServer = ? ORDER BY IdRequest DESC;",[gDeviceProtocol.idUserServer],function(f,b){if(b.rows.length>0)for(var a=0;a<b.rows.length;a++){var e=b.rows.item(a);c(e,a)}else d()},b)})};this.getAllRequests=function(c,d){a.transaction(function(a){a.executeSql("SELECT * FROM requests ORDER BY IdRequest DESC;",[],function(f,b){if(b.rows.length>0)for(var a=0;a<b.rows.length;a++){var e=b.rows.item(a);c(e,a)}else d()},b)})};this.getRequest=function(d,c,b){a.transaction(function(a){a.executeSql("SELECT * FROM requests WHERE IdRequest = ?;",[d],function(e,a){if(a.rows.length==1){var d=a.rows.item(0);c(d)}else b()},b)})};this.setRequestUploaded=function(d,c){a.transaction(function(a){a.executeSql("UPDATE requests SET SavedToWeb = 0 WHERE IdRequest = ?;",[d],c,b)})};this.changeRequestName=function(d,c,e){a.transaction(function(a){a.executeSql("UPDATE requests SET Name = ? WHERE IdRequest = ?;",[c,d],function(){e(c)},b)})};this.addPosition=function(c,i,e,d,g,f,h,j){a.transaction(function(a){a.executeSql("INSERT INTO positions (IdRequest, IsWaypoint, Timestamp, Longitude, Latitude, Altitude, Heading, Speed) VALUES (?, ?, ?, ?, ?, ?, ?, ?);",[c,i,e,d,g,f,h,j],function(){},b)})};this.deletePositions=function(d){a.transaction(function(a){a.executeSql("DELETE FROM positions WHERE IdRequest = ?;",[d],function(){c()},b)})};this.deleteAllPositions=function(){a.transaction(function(a){a.executeSql("DELETE FROM positions",[],function(){c()},b)})};this.deleteTablePositions=function(){a.transaction(function(a){a.executeSql("DROP TABLE positions",[],function(){c()},b)})};this.getPositions=function(c,d){a.transaction(function(a){a.executeSql("SELECT * FROM positions WHERE IdRequest = ?;",[c],function(g,f){for(var e=[],c=0;c<f.rows.length;c++){var a=f.rows.item(c),b=new dbPosition(a.Timestamp,a.Latitude,a.Longitude,a.Altitude,a.Heading,a.Speed);if(a.IsWaypoint==1)b.isWaypoint=true;b.toSave=true;e.push(b)}d(e)},b)})};this.addPoi=function(c,d,f,e){a.transaction(function(a){a.executeSql("INSERT INTO pois (IdUserServer, Longitude, Latitude, Type, Name) VALUES (?, ?, ?, ?, ?);",[gDeviceProtocol.idUserServer,c,d,f,e],function(g,b){var a=new dbPoi(b.insertId,d,c,f,e);gPois.push(a);refresh_pois();addPoiMarker(a)},b)})};this.updatePoi=function(c,d,e,g,f){a.transaction(function(a){a.executeSql("UPDATE pois SET Longitude = ?, Latitude = ?, Type = ?, Name = ? WHERE IdPoi = ?;",[d,e,g,f,c],function(){var a=new dbPoi(c,e,d,g,f);for(i in gPois)if(gPois[i].id==c){removePoiMarker(gPois[i]);gPois.splice(i,1,a);refresh_pois();displayPoi(a);addPoiMarker(a);return}},b)})};this.getPoi=function(e,d){a.transaction(function(a){a.executeSql("SELECT * FROM pois WHERE IdPoi = ?;",[e],function(e,a){c();if(a.rows.length==1){var b=a.rows.item(0);d(b)}},b)})};this.getAllPois=function(){a.transaction(function(a){a.executeSql("SELECT * FROM pois WHERE IdUserServer = ?;",[gDeviceProtocol.idUserServer],function(e,c){gPois=[];if(c.rows.length>0)for(var b=0;b<c.rows.length;b++){var a=c.rows.item(b);addPoiLine(a,b);var d=new dbPoi(a.IdPoi,a.Latitude,a.Longitude,a.Type,a.Name);gPois.push(d)}else displayNoPoi()},b)})};this.deletePoi=function(c){a.transaction(function(a){a.executeSql("DELETE FROM pois WHERE IdPoi = ?;",[c],function(){for(i in gPois)if(gPois[i].id==c){removePoiMarker(gPois[i]);gPois.splice(i,1);refresh_pois();return}},b)})};this.deleteAllPois=function(){a.transaction(function(a){a.executeSql("DELETE FROM pois;",[],function(){c()},b)})};function c(){}function b(b,a){alert("Oops. Error was "+a.message+" (Code "+a.code+")");return true}}
