diff --git a/framework/assets/js/geolocation.js b/framework/assets/js/geolocation.js
index df942251..741730c8 100644
--- a/framework/assets/js/geolocation.js
+++ b/framework/assets/js/geolocation.js
@@ -8,12 +8,11 @@ function Geolocation() {
      */
     this.lastPosition = null;
     this.lastError = null;
-    this.callbacks = {
-        onLocationChanged: [],
-        onError:           []
-    };
+    this.listeners = null;
 };
 
+var geoListeners = [];
+
 Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options)
 {
   var position = Geo.getCurrentLocation();
@@ -21,63 +20,6 @@ Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallba
   this.fail = errorCallback;
 }
 
-/**
- * Asynchronously aquires the position repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the position
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the position data.
- * @param {PositionOptions} options The options for getting the position data
- * such as timeout and the frequency of the watch.
- */
-Geolocation.prototype.watchPosition = function(successCallback, errorCallback, options) {
-	// Invoke the appropriate callback with a new Position object every time the implementation 
-	// determines that the position of the hosting device has changed. 
-	
-	this.getCurrentPosition(successCallback, errorCallback, options);
-	var frequency = 10000;
-        if (typeof(options) == 'object' && options.frequency)
-            frequency = options.frequency;
-	
-	var that = this;
-	return setInterval(function() {
-		that.getCurrentPosition(successCallback, errorCallback, options);
-	}, frequency);
-};
-
-
-/**
- * Clears the specified position watch.
- * @param {String} watchId The ID of the watch returned from #watchPosition.
- */
-Geolocation.prototype.clearWatch = function(watchId) {
-	clearInterval(watchId);
-};
-
-/**
- * Called by the geolocation framework when the current location is found.
- * @param {PositionOptions} position The current position.
- */
-Geolocation.prototype.setLocation = function(position) {
-    this.lastPosition = position;
-    for (var i = 0; i < this.callbacks.onLocationChanged.length; i++) {
-        var f = this.callbacks.onLocationChanged.shift();
-        f(position);
-    }
-};
-
-/**
- * Called by the geolocation framework when an error occurs while looking up the current position.
- * @param {String} message The text of the error message.
- */
-Geolocation.prototype.setError = function(message) {
-    this.lastError = message;
-    for (var i = 0; i < this.callbacks.onError.length; i++) {
-        var f = this.callbacks.onError.shift();
-        f(message);
-    }
-};
- 
 // Run the global callback
 Geolocation.prototype.gotCurrentPosition = function(lat, lng, alt, altacc, head, vel, stamp)
 {
@@ -103,16 +45,11 @@ Geolocation.prototype.gotCurrentPosition = function(lat, lng, alt, altacc, head,
 Geolocation.prototype.watchPosition = function(successCallback, errorCallback, options)
 {
   var frequency = (options != undefined)? options.frequency : 10000;
- 
-  if (!this.listeners)
-  {
-      this.listeners = [];
-  }
- 
-  var key = this.listeners.push( {"success" : successCallback, "fail" : failCallback }) - 1;
+   
+  var key = geoListeners.push( {"success" : successCallback, "fail" : errorCallback }) - 1;
  
   // TO-DO: Get the names of the method and pass them as strings to the Java.
-  return Geolocation.start(frequency, key);
+  return Geo.start(frequency, key);
 }
  
 /*
@@ -123,18 +60,19 @@ Geolocation.prototype.success = function(key, lat, lng, alt, altacc, head, vel,
 {
   var coords = new Coordinates(lat, lng, alt, altacc, head, vel);
   var loc = new Position(coords, stamp);
-  this.listeners[key].success(loc);
+  geoListeners[key].success(loc);
 }
 
 Geolocation.prototype.fail = function(key)
 {
-  this.listeners[key].fail();
+  geoListeners[key].fail();
 }
  
 Geolocation.prototype.clearWatch = function(watchId)
 {
   Geo.stop(watchId);
 }
+
 // Taken from Jesse's geo fix (similar problem) in PhoneGap iPhone. Go figure, same browser!
 function __proxyObj(origObj, proxyObj, funkList) {
 	for (var v in funkList) {
diff --git a/framework/default.properties b/framework/default.properties
index d4b59de7..694331ea 100644
--- a/framework/default.properties
+++ b/framework/default.properties
@@ -7,8 +7,8 @@
 # "build.properties", and override values to adapt the script to your
 # project structure.
 
-apk-configurations=
-# Project target.
-target=android-5
 # Indicates whether an apk should be generated for each density.
 split.density=false
+# Project target.
+target=android-7
+apk-configurations=
diff --git a/framework/src/com/phonegap/GeoBroker.java b/framework/src/com/phonegap/GeoBroker.java
index d7cb5473..049bb2cc 100644
--- a/framework/src/com/phonegap/GeoBroker.java
+++ b/framework/src/com/phonegap/GeoBroker.java
@@ -21,6 +21,7 @@ public class GeoBroker {
 	{
 		mCtx = ctx;
 		mAppView = view;
+		geoListeners = new HashMap<String, GeoListener>();
 	}
 	
 	public void getCurrentLocation()
diff --git a/framework/src/com/phonegap/GeoListener.java b/framework/src/com/phonegap/GeoListener.java
index c9c8f3b0..613cbc15 100644
--- a/framework/src/com/phonegap/GeoListener.java
+++ b/framework/src/com/phonegap/GeoListener.java
@@ -47,7 +47,7 @@ public class GeoListener {
 		params += "," + loc.getSpeed() + "," + loc.getTime();
 		if(id != "global")
 		{
-			mAppView.loadUrl("javascript:navigator.geolocation.success(" + id + "," +  params + ")");
+			mAppView.loadUrl("javascript:navigator._geo.success(" + id + "," +  params + ")");
 		}		
 	}
 	
@@ -55,11 +55,11 @@ public class GeoListener {
 	{
 		// Do we need to know why?  How would we handle this?
 		if (id != "global") {
-			mAppView.loadUrl("javascript:navigator.geolocation.fail(" + id + ")");
+			mAppView.loadUrl("javascript:navigator._geo.fail(" + id + ")");
 		}
 		else
 		{
-			mAppView.loadUrl("javascript:navigator.geolocation.fail()");
+			mAppView.loadUrl("javascript:navigator._geo.fail()");
 		}
 	}
 	
diff --git a/framework/src/com/phonegap/PhoneGap.java b/framework/src/com/phonegap/PhoneGap.java
index f03a9dc2..262380b4 100644
--- a/framework/src/com/phonegap/PhoneGap.java
+++ b/framework/src/com/phonegap/PhoneGap.java
@@ -42,7 +42,7 @@ public class PhoneGap{
 	 * UUID, version and availability	
 	 */
 	public boolean droid = true;
-	public static String version = "0.8.0";
+	public static String version = "0.9.99999";
 	public static String platform = "Android";
 	public static String uuid;
 	private Context mCtx;
diff --git a/framework/src/com/phonegap/WebViewReflect.java b/framework/src/com/phonegap/WebViewReflect.java
index 2d747234..ed611a2b 100644
--- a/framework/src/com/phonegap/WebViewReflect.java
+++ b/framework/src/com/phonegap/WebViewReflect.java
@@ -70,11 +70,9 @@ public class WebViewReflect {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
-	    	   //setting.setDatabaseEnabled(enable);
-	           //setting.setDatabasePath(path);
 	       } else {
 	           /* feature not supported, do something else */
-	           System.out.println("dump not supported");
+	           System.out.println("Database not supported");
 	       }
 	   }
 	   
@@ -95,11 +93,9 @@ public class WebViewReflect {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
-	    	   //setting.setDatabaseEnabled(enable);
-	           //setting.setDatabasePath(path);
 	       } else {
 	           /* feature not supported, do something else */
-	           System.out.println("dump not supported");
+	           System.out.println("DOM Storage not supported");
 	       }
 			   
 	   }
diff --git a/tutorial/accelerometer.html b/tutorial/accelerometer.html
deleted file mode 100755
index 84441968..00000000
--- a/tutorial/accelerometer.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <meta name="viewport" content="width=320; user-scalable=no" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>PhoneGap</title>
-    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-	<style>
-	
-	#playField 
-	{
-		width: 295px;
-		height:295px;
-		background:rgba(64,64,64,0.5);
-		border: 1px solid rgba(128,128,128,0.5);
-		-webkit-border-radius: 5px;
-		border-radius: 5px;
-		clear:both;
-		margin:15px 6px 0;
-		padding:4px 0px 2px 10px;
-	}
-
-	#ball 
-	{
-		-webkit-border-radius: 26px;
-		width: 52px;
-		height: 52px;
-		background:rgba(128,128,128,0.5);
-		border: 1px solid rgba(32,32,32,0.5);
-		position:absolute;
-	}
-	
-	.btn 
-	{
-		text-decoration: none;
-		padding: 8px 24px;
-		background:#fff;
-		color: #aaa;
-		font-weight: bold;
-	    -webkit-border-radius: 10px;
-	}
-	
-	.btn:hover 
-	{
-		background: #6fd9f4;	
-		color: #fff;
-	}
-	
-
-	</style>
-	
-    <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-    <script type="text/javascript" charset="utf-8">
-
-
-    function preventBehavior(e) { e.preventDefault(); };
-	
-	var ballSize = 52;
-	
-	var fieldSize = 295;
-	
-	var top = 150;
-	var bottom = 445;
-
-	var x = fieldSize / 2;
-	var y = fieldSize / 2;
-	
-	var accelInputX = 0.01;
-	var accelInputY = 0.01;
-	
-	var vx = 0;
-	var vy = 0;
-	
-	var vLimit = 200;
-	
-	var xMin = 6;
-	var xMax = xMin + fieldSize - ballSize;
-	
-	var yMin = 32;
-	var yMax = yMin + fieldSize - ballSize;
-	
-	var multiplier = 1.5;
-	
-	var ball;
-	
-	var timer = null;
-	
-	var frameTimer = null;
-	
-	var lastFrameTime = 0;
-	
-	
-	
-  	
-  	function watchAccel() 
-	{
-		if(timer == null)
-		{
-			timer = navigator.accelerometer.watchAcceleration(onAccellUpdate,onAccelError,{frequency:50});
-		}
-  	}
-	
-	function onAccelError(e)
-	{
-		alert("fail: " + e );
-	}
-	
-	function onAccellUpdate(accel)
-	{
-		accelInputX = accel.x;
-		accelInputY = accel.y;
-	}
-	
-	function onFrameUpdate()
-	{
-		vx += accelInputX;
-		vy -= accelInputY;
-		
-		if (vx > vLimit) 
-			vx = vLimit;
-			
-		if (vy > vLimit) 
-			vy = vLimit;
-			
-		//var now = new Date().getTime();
-		//var elapsed = now - lastFrameTime;
-		//lastFrameTime = now;
-		
-		x += vx;
-		y += vy;
-			
-		if (y > yMax) 
-		{
-			y = yMax; 
-			vy = -vy / 2;
-		}
-		else if (y < yMin) 
-		{
-			y = yMin; 
-			vy = -vy / 2;
-		}
-		
-		if (x > xMax) 
-		{
-			x = xMax; 
-			vx = -vx / 2;
-		}
-		else if (x < xMin) 
-		{
-			x = xMin; 
-			vx = -vx / 2;
-		}
-			
-		updateBallCordinates();
-
-	}
-		
-	function updateBallCordinates() 
-	{
-		ball.style.left = ( xMin + x ).toString() + 'px';
-		ball.style.top =  ( yMin  + y ).toString() + 'px';
-	}
-
-	function onWinLoad()
-	{
-		document.addEventListener("touchmove", preventBehavior, false);
-		document.addEventListener("deviceready",onDeviceReady,false);
-	}
-	
-	function onStartButton()
-	{
-		if(frameTimer != null)
-		{
-			navigator.accelerometer.clearWatch(timer);
-			timer = null;
-			
-			clearInterval(frameTimer);
-			frameTimer = null;
-		}
-		else
-		{
-			watchAccel();
-			frameTimer = setInterval(onFrameUpdate,20);
-			//lastFrameTime = new Date().getTime();
-		}
-		
-		document.getElementById("btnText").innerHTML = ( frameTimer != null ) ? "Pause" : "Start";
-	}
-	
-	function onDeviceReady()
-	{
-		ball = document.getElementById("ball");
-		updateBallCordinates();
-		updateBallCordinates(); // hack for the shadow
-		ball.style.display = "block";
-		
-		document.getElementById("startBtn").addEventListener("touchstart",onStartButton,false);
-		
-	}
-    
-    </script>
-	
-
-  </head>
-  
-  <body id="stage" class="theme" onload="onWinLoad()">
-  
-	<div class="topBar">
-		<a href="index.html">
-			<span class="back_button">Back</span>
-		</a>
-		<span class="pageTitle">Accelerometer</span>	
-	</div>
-	
-
-	<div id="playField" style="width:295px">
-		<div id="ball" style="display:none"></div>
-	</div>
-	
-	<a href="#" id="startBtn">
-	<div class="item">
-		<h2 id="btnText">Start</h2>
-	</div></a>
-	
-	
-  </body>
-</html>
-
-
-
-
diff --git a/tutorial/beep.wav b/tutorial/beep.wav
deleted file mode 100755
index 05f5997f..00000000
Binary files a/tutorial/beep.wav and /dev/null differ
diff --git a/tutorial/contacts.html b/tutorial/contacts.html
deleted file mode 100644
index 09cc137c..00000000
--- a/tutorial/contacts.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <meta name="viewport" content="width=320; user-scalable=no" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>PhoneGap</title>
-    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-	<style>
-	.contact
-	{
-		padding: 8px;
-		background:rgba(64,64,64,0.5);
-		border: 1px solid rgba(128,128,128,0.5);
-		opacity: 0.8;
-		-moz-border-radius: 8px;
-		-webkit-border-radius: 8px;
-		margin-bottom: .5em;
-	}
-
-
-	</style>
-    <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-    <script type="text/javascript" charset="utf-8">
-	
-	var defaultContactTemplate = "<div class='item' onclick='onContactClick(CONTACTID);'><div>First Name : <strong>FNAME</strong></div><div>Last Name : <strong>LNAME</strong></div><div>Email : EMAIL</div><div>Tel : TELNO</div></div>";
-
-var _anomFunkMap = {};
-var _anomFunkMapNextId = 0; 
-
-function anomToNameFunk(fun)
-{
-	var funkId = "f" + _anomFunkMapNextId++;
-	var funk = function()
-	{
-		fun.apply(this,arguments);
-		_anomFunkMap[funkId] = null;
-	};
-	_anomFunkMap[funkId] = funk;
-	
-	return "_anomFunkMap." + funkId;
-}
-
-function GetFunctionName(fn)
-{
-  if (fn) 
-  {
-      var m = fn.toString().match(/^\s*function\s+([^\s\(]+)/);
-      return m ? m[1] : anomToNameFunk(fn);
-  } else {
-    return null;
-  }
-}
-
-	function onGetTenBtn()
-	{
-
-		navigator.contacts.getAllContacts(onGetAllContacts,null,{pageSize:10});
-	}
-	
-	function onGetAllContacts(res)
-	{
-		var child = document.getElementById('contactList'); 
-		var listMarkup = "";
-		for(var n = 0; n < res.length; n++)
-		{
-			listMarkup += getContactMarkup(res[n]);
-		}
-		child.innerHTML = listMarkup;
-		child.style.display = "block";
-	}
-
-
-	function onPickBtn()
-	{
-		navigator.contacts.chooseContact(onPickContactCallback);
-	}
-	
-	function onPickContactCallback(contactObj)
-	{
-	   var child = document.getElementById('contactPicked'); 
-
-	   child.innerHTML =  getContactMarkup(contactObj);
-	   child.style.display = "block";
-
-	}
-	
-	function getContactMarkup(contact)
-	{
-		var contactTemplate = defaultContactTemplate;
-		contactTemplate = contactTemplate.replace(/FNAME/g,contact.firstName);
-		contactTemplate = contactTemplate.replace(/LNAME/g,contact.lastName);
-		contactTemplate = contactTemplate.replace(/CONTACTID/g,contact.recordID);
-		
-		if(contact.emails[0].value != null)
-		{
-			contactTemplate = contactTemplate.replace(/EMAIL/g,contact.emails[0].value);
-		}
-		else
-		{
-			contactTemplate = contactTemplate.replace(/EMAIL/g,"");
-		}
-		
-		if(contact.phoneNumbers[0].value != null)
-		{
-			contactTemplate = contactTemplate.replace(/TELNO/g,contact.phoneNumbers[0].value);
-		}
-		else
-		{
-			contactTemplate = contactTemplate.replace(/TELNO/g,"");
-		}
-		
-		return contactTemplate;
-	}
-	
-	function onContactClick(id)
-	{
-		navigator.contacts.displayContact(id);
-	}
-	
-	function onGotContactCount(num)
-	{
-		document.getElementById("contactCountDiv").innerHTML = "Contact Count : " + num;
-	}
-	
-	function onGotContactCountError(err)
-	{
-		alert("error getting contacts :: " + err);
-	}
-
-
-	
-	function onWinLoad()
-	{
-		document.addEventListener("deviceready",onDeviceReady,false);
-	}
-	
-	function onDeviceReady()
-	{
-		navigator.contacts.contactsCount(onGotContactCount,onGotContactCountError);
-	}
-    
-    </script>
-  </head>
-  
-  <body id="stage" class="theme" onload="onWinLoad()">
-  
-  	<div class="topBar">
-		<a href="index.html">
-			<span class="back_button">Back</span>
-		</a>
-		<span class="pageTitle">Contacts</span>	
-	</div>
-	
-	
-	<h2 id="contactCountDiv">Getting contact count ...</h2>
-	
-	<a href="#" onclick="onPickBtn();">
-		<div class="item">
-			<h2>Pick a Contact</h2>
-		</div>
-	</a>
-	
-	<div id="contactPicked" style="display:none"></div>
-	
-	<a href="#" onclick="onGetTenBtn();">
-		<div class="item">
-			<h2>Get first 10 contacts</h2>
-		</div>
-	</a>
-	
-	<div id="contactList" style="display:none"></div>
-  
-  
-  </body>
-</html>
diff --git a/tutorial/geolocation.html b/tutorial/geolocation.html
deleted file mode 100755
index 4e6c5d15..00000000
--- a/tutorial/geolocation.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <meta name="viewport" content="width=320; user-scalable=no" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>PhoneGap</title>
-    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-	<style>
-	
-
-img {
-	border: 0;
-}
-#container {
-
-}
-#tweetList {
-	color: #ddd;
-}
-#tweetList .tweet {
-	padding: 8px;
-	background:rgba(64,64,64,0.5);
-	border: 1px solid rgba(128,128,128,0.5);
-	opacity: 0.8;
-	-moz-border-radius: 8px;
-	-webkit-border-radius: 8px;
-	margin-bottom: .5em;
-}
-
-#tweetList a {
-	color: #f30;
-	text-decoration: underline;
-}
-#tweetList .avatar {
-	float: left;
-}
-#tweetList .content {
-	padding-left: 55px;
-}
-#tweetList .extra {
-	color: #666;
-	font-size: 85%
-}
-	</style>
-    <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-    <script type="text/javascript" charset="utf-8">
-	
-	
-
-
-
-	var url = "http://search.twitter.com/search.json?callback=getTweets";
-    
-	var intervalID;
-	
-
-    function preventBehavior(e) { e.preventDefault(); };
-
-	
-	function onWinLoad()
-	{
-		document.addEventListener("deviceready",onDeviceReady,false);
-	}
-	
-	function onDeviceReady()
-	{
-		
-		var funk = function(position)
-		{
-			callback(position.coords.latitude, position.coords.longitude); 
-		};
-		
-		var fail = function(error)
-		{
-			alert("error :: "  + error);
-		}
-
-		intervalID = navigator.geolocation.watchPosition(funk,fail);
-		
-		
-	
-		window.addEventListener("unload",onWindowUnload,false);
-	}
-	
-	function onBackBtn()
-	{
-		navigator.geolocation.clearWatch(intervalID);
-	}
-	
-
-
-	
-	function onWindowUnload()
-	{
-		
-	}
-	
-	function getCurrentLocation()
-	{
-		document.getElementById("location2").innerHTML = "Getting current location ...";
-		var funk = function(position)
-		{
-			document.getElementById("location2").innerHTML = "Lat: "+position.coords.latitude+ " Lon: " +position.coords.longitude;
-		};
-		
-		var fail = function(error)
-		{
-			alert("error :: "  + error);
-		}
-		navigator.geolocation.getCurrentPosition(funk,fail);
-	}
-	
-
-	
-	function callback(lat, lon) 
-	{ 
-		//navigator.geolocation.stop();
-		//alert("Callback :: " + lat + "," + lon);
-		print(lat,lon);
-		
-	var geocode = "&geocode=" + lat + "%2C" + lon + "%2C1mi"; 
-	var fullUrl = url + geocode; 
-	var head = document.getElementsByTagName('head'); 
-	var script = document.createElement('script'); 
-	script.src = fullUrl; 
-	head[0].appendChild(script); 
-}
-
-function getTweets(json) { 
-	var q; 
-	var parent = document.getElementById('tweetList'); 
-	parent.innerHTML = ''; 
-	var child; 
-
-	for (var i = 0; i < json.results.length; i++) { 
-	   q = json.results[i]; 
-	   child = document.createElement("div"); 
-	   child.setAttribute("class","tweet");
-	   child.innerHTML = '<div class="avatar"><img src="'+q.profile_image_url+'" alt="avatar" width="48" height="48" /></div>';
-	   child.innerHTML += '<div class="content"><a href="http://m.twitter.com/'+q.from_user+'">'+q.from_user+'</a> '+q.text+'<div class="extra">'+q.location+' ('+q.created_at+')</div></div>';
-	   parent.appendChild(child); 
-	} 
-}
-
-function print(lat,lon)
-{
-	document.getElementById("location1").innerHTML = "Lat: "+lat+ " Lon: " +lon;// + " TS: " + (new Date().getTime());
-}
-
-    
-    </script>
-  </head>
-  
-  <body id="stage" class="theme" onload="onWinLoad()">
-  	<div class="topBar">
-		<a href="index.html" onclick="onBackBtn()">
-			<span class="back_button">Back</span>
-		</a>
-		<span class="pageTitle">GeoLocation</span>	
-	</div>
-		<div id="container"> 
-		
-		<div class="item" style="text-align:center;" id="location1">Getting your current location ...</div>
-		
-		<p>Find who are tweeting within 1 mile radius of where you are!</p>
-
-
-
-		<div id="tweetList"> 
- 
-		</div> 
- 
-	</div> 
-  </body>
-</html>
diff --git a/tutorial/images/FoggyRocks.png b/tutorial/images/FoggyRocks.png
deleted file mode 100644
index 25975562..00000000
Binary files a/tutorial/images/FoggyRocks.png and /dev/null differ
diff --git a/tutorial/images/TutBG.png b/tutorial/images/TutBG.png
deleted file mode 100644
index db3a2069..00000000
Binary files a/tutorial/images/TutBG.png and /dev/null differ
diff --git a/tutorial/images/back_button.png b/tutorial/images/back_button.png
deleted file mode 100644
index ca0a70a6..00000000
Binary files a/tutorial/images/back_button.png and /dev/null differ
diff --git a/tutorial/images/back_button_clicked.png b/tutorial/images/back_button_clicked.png
deleted file mode 100644
index ca68ce2e..00000000
Binary files a/tutorial/images/back_button_clicked.png and /dev/null differ
diff --git a/tutorial/images/backgroundStripes.png b/tutorial/images/backgroundStripes.png
deleted file mode 100755
index cab0e983..00000000
Binary files a/tutorial/images/backgroundStripes.png and /dev/null differ
diff --git a/tutorial/images/bar_large.png b/tutorial/images/bar_large.png
deleted file mode 100644
index 354c722f..00000000
Binary files a/tutorial/images/bar_large.png and /dev/null differ
diff --git a/tutorial/images/bar_media.png b/tutorial/images/bar_media.png
deleted file mode 100644
index 5d7f9c34..00000000
Binary files a/tutorial/images/bar_media.png and /dev/null differ
diff --git a/tutorial/images/header.png b/tutorial/images/header.png
deleted file mode 100644
index f78a44be..00000000
Binary files a/tutorial/images/header.png and /dev/null differ
diff --git a/tutorial/images/header2.png b/tutorial/images/header2.png
deleted file mode 100644
index 8ad80e5f..00000000
Binary files a/tutorial/images/header2.png and /dev/null differ
diff --git a/tutorial/images/header3.png b/tutorial/images/header3.png
deleted file mode 100644
index 07d45c8f..00000000
Binary files a/tutorial/images/header3.png and /dev/null differ
diff --git a/tutorial/images/list_arrow.png b/tutorial/images/list_arrow.png
deleted file mode 100644
index 9f68c719..00000000
Binary files a/tutorial/images/list_arrow.png and /dev/null differ
diff --git a/tutorial/images/list_item_selected_bg.png b/tutorial/images/list_item_selected_bg.png
deleted file mode 100644
index 6bb0ad05..00000000
Binary files a/tutorial/images/list_item_selected_bg.png and /dev/null differ
diff --git a/tutorial/images/on_off_bg.png b/tutorial/images/on_off_bg.png
deleted file mode 100644
index 36b2eac9..00000000
Binary files a/tutorial/images/on_off_bg.png and /dev/null differ
diff --git a/tutorial/images/selection.png b/tutorial/images/selection.png
deleted file mode 100644
index 537e3f0b..00000000
Binary files a/tutorial/images/selection.png and /dev/null differ
diff --git a/tutorial/index.html b/tutorial/index.html
deleted file mode 100755
index 7db14d67..00000000
--- a/tutorial/index.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <meta name="viewport" content="width=320; user-scalable=no" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>PhoneGap</title>
-    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-    <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-    <script type="text/javascript" charset="utf-8">
-
-	
-	function onWinLoad()
-	{
-		document.addEventListener("deviceready",onDeviceReady,false);
-	}
-	
-	function onDeviceReady()
-	{
-		
-		// do your thing!
-	}
-    
-    </script>
-  </head>
-  
-  <body id="stage" class="theme" onload="onWinLoad()">
-  	<div class="topBar">
-		<span class="pageTitle">PhoneGap Tutorial</span>	
-	</div>
-		
-	
-  
-  <a href="accelerometer.html">
-  <div class="item">
-	<h2>Accelerometer</h2>
-  </div></a>
-  
-  <a href="notification.html">
-  <div class="item">
-	<h2>Notification</h2>
-  </div>
-  </a>
-  
-  <a href="contacts.html">
-  <div class="item">
-	<h2>Contacts</h2>
-  </div>
-  </a>
-  
-  <a href="geolocation.html">
-  <div class="item">
-	<h2>GeoLocation</h2>
-  </div>
-  </a>
-  
-  <a href="inputs.html">
-	<div class="item"
-  <h2>Form Inputs</h2>
-	</div>
-  </a>
-  
-  
-  <a href="media.html">
-  <div class="item">
-	<h2>Media</h2>
-  </div>
-  </a>
-  
-
-  </body>
-</html>
diff --git a/tutorial/inputs.html b/tutorial/inputs.html
deleted file mode 100755
index 67a80eef..00000000
--- a/tutorial/inputs.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <meta name="viewport" content="width=320; user-scalable=no" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>PhoneGap</title>
-    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-	
-	<style>
-	
-	input 
-	{
-		width: 180px;
-		margin-bottom: 18px;
-		margin-top: 4px;
-		-webkit-border-radius: 5px;
-		left:100px;
-		position:absolute;
-	}
-	
-	input.disabled 
-	{
-		opacity: 0.5;
-	}
-	
-	label 
-	{
-		margin-bottom: 18px;
-		line-height:36px;
-	}
-	
-	</style>
-    <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-    <script type="text/javascript" charset="utf-8">
-
-
-	
-	function onWinLoad()
-	{
-		document.addEventListener("deviceready",onDeviceReady,false);
-	}
-	
-	function onDeviceReady()
-	{
-
-	}
-    
-    </script>
-  </head>
-  
-  <body id="stage" class="theme" onload="onWinLoad()">
-	<div class="topBar">
-		<a href="index.html">
-			<span class="back_button">Back</span>
-		</a>
-		<span class="pageTitle">Form Inputs</span>	
-	</div>
-	
-	<form action="/">
-	<br/>
-	
-	<!-- display a standard keyboard -->
-	<label for="tiText">Text:</label>
-	<input type="text" id="tiText"/>
-	<br/>
-	
-	<!-- display a telephone keypad -->
-	<label for="tiTel">Telephone:</label>
-	<input type="tel" id="tiTel"/> 
-	<br/>
-	
-	<!-- display a URL keyboard -->
-	<label for="tiUrl">URL:</label>
-	<input type="url" id="tiUrl"/>
-	<br/>
-	
-	<!-- display an email keyboard -->
-	<label for="tiEmail">Email:</label> 
-	<input type="email" id="tiEmail"/>
-	<br/>
-	
-	<!-- display a numeric keyboard -->
-	<label for="tiZip">Zip Code:</label>
-	<input type="text" pattern="[0-9]*" id="tiZip"/>
-	<br/>
-
-    <label for="tiSearch">Search:</label> 
-	<input type="search" id="tiSearch" style="width:192px;"/>
-	<br/>
-	
-	</form>
-  
-
-  
-  </a>
-  </body>
-</html>
diff --git a/tutorial/master.css b/tutorial/master.css
deleted file mode 100755
index dddb7cdb..00000000
--- a/tutorial/master.css
+++ /dev/null
@@ -1,304 +0,0 @@
-
-body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6 
-{
-	margin: 0pt;
-	padding: 0pt;
-}
-
-
-
-body 
-{
-  background:#000 url(images/TutBG.png) repeat-y fixed 0 0;
-  color:#666;
-  font-family:Helvetica,'Lucida Grande',sans-serif;
-  line-height:1.5em;
-  margin:0px;
-  margin-bottom:20px;
-  
-}
-
-#header{
-    position: relative;
-    left: 0px;
-    top: 0px;
-    height: 44px;
-    font-size: 16pt;
-    border-top-width: 0px;
-    border-right-width: 1px;
-    border-bottom-width: 0px;
-    border-left-width: 1px;
-    width: auto;
-    margin-right: 0px;
-    margin-left: 0px;        
-    background: url( header.png );
-}
-
-.header_title{
-    text-align: center;
-    position: relative;
-    font-weight: bold;
-    color: rgb(255, 255, 255);
-    text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0px;
-}
-
-.view{
-    background: url( images/backgroundStripes.png );
-    background-repeat: repeat;
-    min-height: 406px;
-}
-
-.topBar
-{
-  color:#eee;
-  font-size:1.2em;
-  text-align:center;
-  margin:0;
-  margin-top:0px;
-  padding:0;
-  background-image: url( 'images/header.png' );
-  background-repeat: repeat-x;
-  height:44px;
-  text-height:44px;
-}
-
-
-.pageTitle
-{
-	text-align: center;
-	color:#FFF;
-	line-height:44px;
-}
-
-.back_button
-{
-    font-weight: bold;
-    font-size: 12px;
-    color: rgb(255, 255, 255);
-    text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0px;
-    text-align: center;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    white-space: nowrap;
-    height: 22px;
-    padding-top: 4px;
-	padding-bottom: 4px;
-    width: 60px;
-	line-height:22px;
-    right: auto;
-    bottom: auto;
-    margin-top: 0px;
-    position:absolute;
-	left:4px;
-	top:11px;
-    -webkit-border-image: url(images/back_button.png) 0 5 0 16 / 1px 5px 1px 16px stretch stretch;
-}
-
-.list
-{
-    margin-top: 5px;
-}
-
-.list li{
-    width: 290px;
-    height: 20px;
-	background-color: #FFF;
-	border-left:  1px solid #AAA;
-	border-right: 1px solid #AAA;
-	border-bottom: 1px solid #AAA;
-
-	list-style-type: none;
-	padding: 12px 5px 10px 5px;
-	margin-left: -36px;
-}
-
-.list li.active{
-    background-image: url( 'selection.png' );
-    background-repeat: repeat-x;
-    background-color: #194fdb !important;
-}
-
-.list li:first-of-type{
-	border-top: 1px solid #AAA;
-	-webkit-border-top-right-radius:    8px 8px;
-    -webkit-border-top-left-radius:     8px 8px;	
-}
-
-.list li:last-of-type{
-    border-top: none;
-	border-bottom: 1px solid #AAA;
-
-	-webkit-border-bottom-left-radius:  8px 8px;
-	-webkit-border-bottom-right-radius: 8px 8px;
-}
-
-.list li:only-of-type{
-	border-top: 1px solid #AAA;
-	border-bottom: 1px solid #AAA;
-	
-	-webkit-border-top-right-radius:    8px 8px;
-    -webkit-border-top-left-radius:     8px 8px;	
-	-webkit-border-bottom-left-radius:  8px 8px;
-	-webkit-border-bottom-right-radius: 8px 8px;
-	
-}
-
-.list .list_label{
-    font-weight: bold;
-    color: #000;
-    text-align: left;
-    width: 145px;
-    float: left;
-}
-
-.list .list_value{
-    color: #6e82a8;
-    text-align: right;
-    width: 140px;
-    float: right;
-}
-
-.list .selected_item{
-    color: #4c566c;
-}
-
-.list_section_label{
-    font-size: 16px;
-    font-weight: bold;
-    margin-left: 15px;
-    text-shadow: rgba(255, 255, 255, 1) 0px 1px 0px;
-    color: #4c566c;
-}
-
-.list_section_note{
-    font-size: 14px;
-    margin-left: 15px;
-    text-shadow: rgba(255, 255, 255, 1) 0px 1px 0px;
-    color: #4c566c;
-    text-align: center;
-    margin-bottom: 15px;
-    margin-top: -5px;
-}
-
-
-
-.item 
-{
-  background:rgba(64,64,64,0.5);
-  border: 1px solid rgba(128,128,128,0.5);
-  -webkit-border-radius: 5px;
-  border-radius: 5px;
-  clear:both;
-  margin:15px 6px 0;
-  width:295px;
-  padding:4px 0px 2px 10px;
-}
-
-a
-{
-	color:#FFF;
-	text-decoration:none;
-}
-
-
-#info{
-  background:#ffa;
-  border: 1px solid #ffd324;
-  -webkit-border-radius: 5px;
-  border-radius: 5px;
-  clear:both;
-  margin:15px 6px 0;
-  width:295px;
-  padding:4px 0px 2px 10px;
-}
-
-#info h4{
-  font-size:.95em;
-  margin:0;
-  padding:0;
-}
-
-#stage.theme{
-  padding-top:3px;
-}
-
-/* Definition List */
-#Page1 > dl{
-	padding-top:10px;
-	clear:both;
-	margin:0;
-	list-style-type:none;
-	padding-left:10px;
-	overflow:auto;
-}
-
-#Page1 > dl > dt{
-	font-weight:bold;
-	float:left;
-	margin-left:5px;
-}
-
-#Page1 > dl > dd{
-	width:45px;
-	float:left;
-	color:#a87;
-	font-weight:bold;
-}
-
-/* Content Styling */
-h1, h2, p{
-  margin:1em 0 .5em 13px;
-}
-
-h1{
-  color:#eee;
-  font-size:1.6em;
-  text-align:center;
-  margin:0;
-  margin-top:15px;
-  padding:0;
-}
-
-h2{
-	clear:both;
-  margin:0;
-  padding:3px;
-  font-size:1em;
-  text-align:center;
-}
-
-
-
-/* Stage Buttons */
-#stage.theme a.btn
-{
-	border: 1px solid #555;
-	-webkit-border-radius: 5px;
-	border-radius: 5px;
-	text-align:center;
-	display:block;
-	float:left;
-	background:#444;
-	width:150px;
-	color:#9ab;
-	font-size:1.1em;
-	text-decoration:none;
-	padding:1.2em 0;
-	margin:3px 0px 3px 5px;
-}
-
-a.btn.large
-{
-	width:64px;
-	height:32px;
-	padding:1.2em 0;
-}
-
-
-
-
-
-
-
-
-
diff --git a/tutorial/media.html b/tutorial/media.html
deleted file mode 100755
index b00cdd6e..00000000
--- a/tutorial/media.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <meta name="viewport" content="width=320; user-scalable=no" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>PhoneGap</title>
-    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-	
-	<style>
-	
-	.mediaBtn
-	{
-		clear:none;
-		float:left;
-  background:rgba(64,64,64,0.5);
-  border: 1px solid rgba(128,128,128,0.5);
-  -webkit-border-radius: 5px;
-  border-radius: 5px;
-  margin:20px;
-  width:64px;
-  padding:4px;
-
-	}
-	
-	</style>
-    <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-    <script type="text/javascript" charset="utf-8">
-
-	var PS_STOPPED = 0;
-	var PS_PLAYING = 1;
-	var PS_PAUSED = 2;
-	var PS_RECORDING = 3;
-	
-	var currentState;
-	
-	var mediaFile = null;
-
-	function onPlayStopBtn()
-	{
-		if(currentState != PS_PLAYING)
-		{
-			mediaFile.play({numberOfLoops:0});
-			currentState = PS_PLAYING;
-			document.getElementById("playText").innerHTML = "Stop";
-		}
-		else
-		{
-			mediaFile.stop();
-			currentState = PS_STOPPED;
-			document.getElementById("playText").innerHTML = "Play";
-		}
-			
-		
-	}
-    
-	
-	function onMediaCreatedSuccess(obj)
-	{
-		alert("successfully created media");
-	}
-	
-	function onMediaCreatedError(err)
-	{
-		alert("error creating media");
-	}
-	
-	
-
-	
-	function onWinLoad()
-	{
-		document.addEventListener("deviceready",onDeviceReady,false);
-	}
-	
-	function onDeviceReady()
-	{
-		mediaFile = new Media('percBass.wav',onMediaCreatedSuccess,onMediaCreatedError);
-		updateButtonStates();
-	}
-    
-    </script>
-  </head>
-  
-  <body id="stage" class="theme" onload="onWinLoad()">
-	<div class="topBar">
-		<a href="index.html">
-			<span class="back_button">Back</span>
-		</a>
-		<span class="pageTitle">Media</span>	
-	</div>
-	
-	<h2>percBass.wav</h2>
-   <a href="#" onclick="onPlayStopBtn();">
-	<div class="mediaBtn">
-	<h2 id="playText">Play</h2>
-  </div>
-  </a>
-  
-  
-  
-  <!--
-  <a href="#" onclick="onRecordBtn();">
-	<div class="mediaBtn">
-	<h2>Record</h2>
-  </div>
-  
-  </a>
-  -->
-  </body>
-</html>
diff --git a/tutorial/notification.html b/tutorial/notification.html
deleted file mode 100755
index 42afaef8..00000000
--- a/tutorial/notification.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-  "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <meta name="viewport" content="width=320; user-scalable=no" />
-    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-    <title>PhoneGap</title>
-    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
-    <script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
-    <script type="text/javascript" charset="utf-8">
-
-
-	var isActivityShowing = false;
-	
-	function onAlertBtn()
-	{
-		navigator.notification.alert("Custom Message","Custom Title", "Custom Label");
-	}
-	
-	function onActivityBtn()
-	{
-		
-		if(isActivityShowing)
-		{
-			navigator.notification.activityStop();
-		}
-		else
-		{
-			navigator.notification.activityStart();
-		}
-		
-		isActivityShowing = !isActivityShowing;
-		
-		document.getElementById("activityText").innerHTML = isActivityShowing ? "Hide Activity Indicator" : "Show Activity Indicator";
-		
-	}
-	
-	function onLoadingBtn()
-	{
-		navigator.notification.loadingStart({duration:2});
-	}
-	
-	function onVibrateBtn()
-	{
-		navigator.notification.vibrate(100); // note, iPhone ignores the ms param
-	}
-	
-	function onBeepBtn()
-	{
-		navigator.notification.beep();
-	}
-
-	function onWinLoad()
-	{
-	
-		document.addEventListener("deviceready",onDeviceReady,false);
-	}
-	
-	function onDeviceReady()
-	{
-		
-	}
-    
-    </script>
-  </head>
-  
-  <body id="stage" class="theme" onload="onWinLoad()">
-	<div class="topBar">
-		<a href="index.html">
-			<span class="back_button">Back</span>
-		</a>
-		<span class="pageTitle">Notification</span>	
-	</div>
-	
-  <a href="#" onclick="onAlertBtn();">
-	<div class="item">
-	<h2>Show Custom Alert</h2>
-  </div></a>
-  
-  <a href="#" onclick="onActivityBtn();">
-	<div class="item">
-	<h2 id="activityText">Show Activity Indicator</h2>
-  </div>
-  </a>
-  
-  <a href="#" onclick="onVibrateBtn();">
-	<div class="item">
-	<h2>Vibrate</h2>
-  </div>
-  </a>
-  
-  <a href="#" onclick="onLoadingBtn();">
-	<div class="item">
-	<h2>Show Loading ( 2 Seconds )</h2>
-  </div>
-  </a>
-  
-  <a href="#" onclick="onBeepBtn();">
-	<div class="item">
-	<h2>Beep</h2>
-  </div>
-  </a>
-  
-  </body>
-</html>
diff --git a/tutorial/percBass.wav b/tutorial/percBass.wav
deleted file mode 100755
index e63dcc4a..00000000
Binary files a/tutorial/percBass.wav and /dev/null differ
diff --git a/tutorial/phonegap.js b/tutorial/phonegap.js
deleted file mode 100644
index d569266a..00000000
--- a/tutorial/phonegap.js
+++ /dev/null
@@ -1,1272 +0,0 @@
-if (typeof(DeviceInfo) != 'object')
-    DeviceInfo = {};
-
-/**
- * This represents the PhoneGap API itself, and provides a global namespace for accessing
- * information about the state of PhoneGap.
- * @class
- */
-PhoneGap = {
-    queue: {
-        ready: true,
-        commands: [],
-        timer: null
-    },
-    _constructors: []
-};
-
-/**
- * Boolean flag indicating if the PhoneGap API is available and initialized.
- */ // TODO: Remove this, it is unused here ... -jm
-PhoneGap.available = DeviceInfo.uuid != undefined;
-
-/**
- * Add an initialization function to a queue that ensures it will run and initialize
- * application constructors only once PhoneGap has been initialized.
- * @param {Function} func The function callback you want run once PhoneGap is initialized
- */
-PhoneGap.addConstructor = function(func) {
-    var state = document.readyState;
-    if ( state == 'loaded' || state == 'complete' )
-	  {
-		  func();
-	  }
-    else
-	  {
-        PhoneGap._constructors.push(func);
-	  }
-};
-
-(function() 
- {
-    var timer = setInterval(function()
-	{
-							
-		var state = document.readyState;
-							
-    if ( state == 'loaded' || state == 'complete' )
-		{
-			clearInterval(timer); // stop looking
-			// run our constructors list
-			while (PhoneGap._constructors.length > 0) 
-			{
-				var constructor = PhoneGap._constructors.shift();
-				try 
-				{
-					constructor();
-				} 
-				catch(e) 
-				{
-					if (typeof(debug['log']) == 'function')
-					{
-						debug.log("Failed to run constructor: " + debug.processMessage(e));
-					}
-					else
-					{
-						alert("Failed to run constructor: " + e.message);
-					}
-				}
-            }
-			// all constructors run, now fire the deviceready event
-			var e = document.createEvent('Events'); 
-			e.initEvent('deviceready');
-			document.dispatchEvent(e);
-		}
-    }, 5);
-})();
-
-
-/**
- * Execute a PhoneGap command in a queued fashion, to ensure commands do not
- * execute with any race conditions, and only run when PhoneGap is ready to
- * recieve them.
- * @param {String} command Command to be run in PhoneGap, e.g. "ClassName.method"
- * @param {String[]} [args] Zero or more arguments to pass to the method
- */
-PhoneGap.exec = function() {
-    PhoneGap.queue.commands.push(arguments);
-    if (PhoneGap.queue.timer == null)
-        PhoneGap.queue.timer = setInterval(PhoneGap.run_command, 10);
-};
-
-/**
- * Internal function used to dispatch the request to PhoneGap.  It processes the
- * command queue and executes the next command on the list.  If one of the
- * arguments is a JavaScript object, it will be passed on the QueryString of the
- * url, which will be turned into a dictionary on the other end.
- * @private
- */
-PhoneGap.run_command = function() {
-    if (!PhoneGap.available || !PhoneGap.queue.ready)
-        return;
-
-    PhoneGap.queue.ready = false;
-
-    var args = PhoneGap.queue.commands.shift();
-    if (PhoneGap.queue.commands.length == 0) {
-        clearInterval(PhoneGap.queue.timer);
-        PhoneGap.queue.timer = null;
-    }
-
-    var uri = [];
-    var dict = null;
-    for (var i = 1; i < args.length; i++) {
-        var arg = args[i];
-        if (arg == undefined || arg == null)
-            arg = '';
-        if (typeof(arg) == 'object')
-            dict = arg;
-        else
-            uri.push(encodeURIComponent(arg));
-    }
-    var url = "gap://" + args[0] + "/" + uri.join("/");
-    if (dict != null) {
-        var query_args = [];
-        for (var name in dict) {
-            if (typeof(name) != 'string')
-                continue;
-            query_args.push(encodeURIComponent(name) + "=" + encodeURIComponent(dict[name]));
-        }
-        if (query_args.length > 0)
-            url += "?" + query_args.join("&");
-    }
-    document.location = url;
-
-};
-function Acceleration(x, y, z)
-{
-  this.x = x;
-  this.y = y;
-  this.z = z;
-  this.timestamp = new Date().getTime();
-}
-
-// Need to define these for android
-_accel = {};
-_accel.x = 0;
-_accel.y = 0;
-_accel.z = 0;
-
-function gotAccel(x, y, z)
-{
-	_accel.x = x;
-	_accel.y = y;
-	_accel.z = z;
-}
-
-/**
- * This class provides access to device accelerometer data.
- * @constructor
- */
-function Accelerometer() {
-	/**
-	 * The last known acceleration.
-	 */
-	this.lastAcceleration = null;
-}
-
-/**
- * Asynchronously aquires the current acceleration.
- * @param {Function} successCallback The function to call when the acceleration
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the acceleration data.
- * @param {AccelerationOptions} options The options for getting the accelerometer data
- * such as timeout.
- */
-Accelerometer.prototype.getCurrentAcceleration = function(successCallback, errorCallback, options) {
-	// If the acceleration is available then call success
-	// If the acceleration is not available then call error
-
-	// Created for iPhone, Iphone passes back _accel obj litteral
-	if (typeof successCallback == "function") {
-		var accel = new Acceleration(_accel.x,_accel.y,_accel.z);
-		Accelerometer.lastAcceleration = accel;
-		successCallback(accel);
-	}
-}
-
-/**
- * Asynchronously aquires the acceleration repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the acceleration
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the acceleration data.
- * @param {AccelerationOptions} options The options for getting the accelerometer data
- * such as timeout.
- */
-
-Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) {
-	// TODO: add the interval id to a list so we can clear all watches
- 	var frequency = (options != undefined)? options.frequency : 10000;
-	
-	Accel.start(frequency);
-	return setInterval(function() {
-		navigator.accelerometer.getCurrentAcceleration(successCallback, errorCallback, options);
-	}, frequency);
-}
-
-/**
- * Clears the specified accelerometer watch.
- * @param {String} watchId The ID of the watch returned from #watchAcceleration.
- */
-Accelerometer.prototype.clearWatch = function(watchId) {
-	Accel.stop();
-	clearInterval(watchId);
-}
-
-PhoneGap.addConstructor(function() {
-    if (typeof navigator.accelerometer == "undefined") navigator.accelerometer = new Accelerometer();
-});
-/**
- * This class provides access to the device camera.
- * @constructor
- */
-function Camera() {
-	
-}
-
-/**
- * 
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options
- */
-Camera.prototype.getPicture = function(successCallback, errorCallback, options) {
-
-  this.winCallback = successCallback;
-  this.failCallback = errorCallback;
-  if (options.quality)
-  {
-    GapCam.takePicture(options.quality);
-  }
-  else 
-  {
-    GapCam.takePicture(80);
-  }
-}
-
-Camera.prototype.win = function(picture)
-{
-  this.winCallback(picture);
-}
-
-Camera.prototype.fail = function(err)
-{
-  this.failCallback(err);
-}
-
-PhoneGap.addConstructor(function() {
-    if (typeof navigator.camera == "undefined") navigator.camera = new Camera();
-});
-/**
- * This class provides access to device Compass data.
- * @constructor
- */
-function Compass() {
-    /**
-     * The last known Compass position.
-     */
-	this.lastHeading = null;
-    this.lastError = null;
-	this.callbacks = {
-		onHeadingChanged: [],
-        onError:           []
-    };
-};
-
-/**
- * Asynchronously aquires the current heading.
- * @param {Function} successCallback The function to call when the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the heading data.
- * @param {PositionOptions} options The options for getting the heading data
- * such as timeout.
- */
-Compass.prototype.getCurrentHeading = function(successCallback, errorCallback, options) {
-	if (this.lastHeading == null) {
-		this.start(options);
-	}
-	else 
-	if (typeof successCallback == "function") {
-		successCallback(this.lastHeading);
-	}
-};
-
-/**
- * Asynchronously aquires the heading repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the heading data.
- * @param {HeadingOptions} options The options for getting the heading data
- * such as timeout and the frequency of the watch.
- */
-Compass.prototype.watchHeading= function(successCallback, errorCallback, options) {
-	// Invoke the appropriate callback with a new Position object every time the implementation 
-	// determines that the position of the hosting device has changed. 
-	
-	this.getCurrentHeading(successCallback, errorCallback, options);
-	var frequency = 100;
-    if (typeof(options) == 'object' && options.frequency)
-        frequency = options.frequency;
-
-	var self = this;
-	return setInterval(function() {
-		self.getCurrentHeading(successCallback, errorCallback, options);
-	}, frequency);
-};
-
-
-/**
- * Clears the specified heading watch.
- * @param {String} watchId The ID of the watch returned from #watchHeading.
- */
-Compass.prototype.clearWatch = function(watchId) {
-	clearInterval(watchId);
-};
-
-
-/**
- * Called by the geolocation framework when the current heading is found.
- * @param {HeadingOptions} position The current heading.
- */
-Compass.prototype.setHeading = function(heading) {
-    this.lastHeading = heading;
-    for (var i = 0; i < this.callbacks.onHeadingChanged.length; i++) {
-        var f = this.callbacks.onHeadingChanged.shift();
-        f(heading);
-    }
-};
-
-/**
- * Called by the geolocation framework when an error occurs while looking up the current position.
- * @param {String} message The text of the error message.
- */
-Compass.prototype.setError = function(message) {
-    this.lastError = message;
-    for (var i = 0; i < this.callbacks.onError.length; i++) {
-        var f = this.callbacks.onError.shift();
-        f(message);
-    }
-};
-
-PhoneGap.addConstructor(function() {
-    if (typeof navigator.compass == "undefined") navigator.compass = new Compass();
-});
-var Contact = function(){
-  this.name = new ContactName();
-  this.emails = [];
-  this.phones = [];
-}
-
-var ContactName = function()
-{
-  this.formatted = "";
-  this.familyName = "";
-  this.givenName = "";
-  this.additionalNames = [];
-  this.prefixes = [];
-  this.suffixes = [];
-}
-
-
-var ContactEmail = function()
-{
-  this.types = [];
-  this.address = "";
-}
-
-var ContactPhoneNumber = function()
-{
-  this.types = [];
-  this.number = "";
-}
-
-
-var Contacts = function()
-{
-  this.records = [];  
-}
-
-Contacts.prototype.find = function(obj, win, fail)
-{
-  if(obj.name != null)
-  {
-	// Build up the search term that we'll use in SQL, based on the structure/contents of the contact object passed into find.
-	   var searchTerm = '';
-	   if (obj.name.givenName && obj.name.givenName.length > 0) {
-			searchTerm = obj.name.givenName.split(' ').join('%');
-	   }
-	   if (obj.name.familyName && obj.name.familyName.length > 0) {
-			searchTerm += obj.name.familyName.split(' ').join('%');
-	   }
-	   if (!obj.name.familyName && !obj.name.givenName && obj.name.formatted) {
-			searchTerm = obj.name.formatted;
-	   }
-	   ContactHook.search(searchTerm, "", ""); 
-  }
-  this.win = win;
-  this.fail = fail;
-}
-
-Contacts.prototype.droidFoundContact = function(name, npa, email)
-{
-  var contact = new Contact();
-  contact.name = new ContactName();
-  contact.name.formatted = name;
-  contact.name.givenName = name;
-  var mail = new ContactEmail();
-  mail.types.push("home");
-  mail.address = email;
-  contact.emails.push(mail);
-  phone = new ContactPhoneNumber();
-  phone.types.push("home");
-  phone.number = npa;
-  contact.phones.push(phone);
-  this.records.push(contact);
-}
-
-Contacts.prototype.droidDone = function()
-{
-  this.win(this.records);
-}
-
-PhoneGap.addConstructor(function() {
-  if(typeof navigator.contacts == "undefined") navigator.contacts = new Contacts();
-});
-var Crypto = function()
-{
-}
-
-Crypto.prototype.encrypt = function(seed, string, callback)
-{
-	GapCrypto.encrypt(seed, string);
-	this.encryptWin = callback;
-}
-
-Crypto.prototype.decrypt = function(seed, string, callback)
-{
-	GapCrypto.decrypt(seed, string);
-	this.decryptWin = callback;
-}
-
-Crypto.prototype.gotCryptedString = function(string)
-{
-	this.encryptWin(string);
-}
-
-Crypto.prototype.getPlainString = function(string)
-{
-	this.decryptWin(string);
-}
-
-PhoneGap.addConstructor(function() {
-  if (typeof navigator.Crypto == "undefined")
-  {
-    navigator.Crypto = new Crypto();
-  }
-});
-
-/**
- * this represents the mobile device, and provides properties for inspecting the model, version, UUID of the
- * phone, etc.
- * @constructor
- */
-function Device() {
-    this.available = PhoneGap.available;
-    this.platform = null;
-    this.version  = null;
-    this.name     = null;
-    this.gap      = null;
-    this.uuid     = null;
-    try {
-        if (window.DroidGap) {
-            this.available = true;
-            this.uuid = window.DroidGap.getUuid();
-            this.version = window.DroidGap.getOSVersion();
-            this.gapVersion = window.DroidGap.getVersion();
-            this.platform = window.DroidGap.getPlatform();
-            this.name = window.DroidGap.getProductName();  
-        } 
-    } catch(e) {
-        this.available = false;
-    }
-}
-
-PhoneGap.addConstructor(function() {
-    navigator.device = window.device = new Device();
-});
-
-
-
-PhoneGap.addConstructor(function() { if (typeof navigator.fileMgr == "undefined") navigator.fileMgr = new FileMgr();});
-
-
-/**
- * This class provides iPhone read and write access to the mobile device file system.
- * Based loosely on http://www.w3.org/TR/2009/WD-FileAPI-20091117/#dfn-empty
- */
-function FileMgr() 
-{
-	this.fileWriters = {}; // empty maps
-	this.fileReaders = {};
-
-	this.docsFolderPath = "../../Documents";
-	this.tempFolderPath = "../../tmp";
-	this.freeDiskSpace = -1;
-	this.getFileBasePaths();
-	this.getFreeDiskSpace();
-}
-
-// private, called from Native Code
-FileMgr.prototype._setPaths = function(docs,temp)
-{
-	this.docsFolderPath = docs;
-	this.tempFolderPath = temp;
-}
-
-// private, called from Native Code
-FileMgr.prototype._setFreeDiskSpace = function(val)
-{
-	this.freeDiskSpace = val;
-}
-
-
-// FileWriters add/remove
-// called internally by writers
-FileMgr.prototype.addFileWriter = function(filePath,fileWriter)
-{
-	this.fileWriters[filePath] = fileWriter;
-}
-
-FileMgr.prototype.removeFileWriter = function(filePath)
-{
-	this.fileWriters[filePath] = null;
-}
-
-// File readers add/remove
-// called internally by readers
-FileMgr.prototype.addFileReader = function(filePath,fileReader)
-{
-	this.fileReaders[filePath] = fileReader;
-}
-
-FileMgr.prototype.removeFileReader = function(filePath)
-{
-	this.fileReaders[filePath] = null;
-}
-
-/*******************************************
- *
- *	private reader callback delegation
- *	called from native code
- */
-FileMgr.prototype.reader_onloadstart = function(filePath,result)
-{
-	this.fileReaders[filePath].onloadstart(result);
-}
-
-FileMgr.prototype.reader_onprogress = function(filePath,result)
-{
-	this.fileReaders[filePath].onprogress(result);
-}
-
-FileMgr.prototype.reader_onload = function(filePath,result)
-{
-	this.fileReaders[filePath].result = unescape(result);
-	this.fileReaders[filePath].onload(this.fileReaders[filePath].result);
-}
-
-FileMgr.prototype.reader_onerror = function(filePath,err)
-{
-	this.fileReaders[filePath].result = err;
-	this.fileReaders[filePath].onerror(err);
-}
-
-FileMgr.prototype.reader_onloadend = function(filePath,result)
-{
-	this.fileReaders[filePath].onloadend(result);
-}
-
-/*******************************************
- *
- *	private writer callback delegation
- *	called from native code
-*/
-FileMgr.prototype.writer_onerror = function(filePath,err)
-{
-	this.fileWriters[filePath].onerror(err);
-}
-
-FileMgr.prototype.writer_oncomplete = function(filePath,result)
-{
-	this.fileWriters[filePath].oncomplete(result); // result contains bytes written
-}
-
-
-FileMgr.prototype.getFileBasePaths = function()
-{
-	//PhoneGap.exec("File.getFileBasePaths");
-}
-
-FileMgr.prototype.testFileExists = function(fileName, successCallback, errorCallback)
-{
-	var test = FileUtil.testFileExists(fileName);
-	test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.testDirectoryExists = function(dirName, successCallback, errorCallback)
-{
-	this.successCallback = successCallback;
-	this.errorCallback = errorCallback;
-	var test = FileUtil.testDirectoryExists(dirName);
-	test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.createDirectory = function(dirName, successCallback, errorCallback)
-{
-	this.successCallback = successCallback;
-	this.errorCallback = errorCallback;
-	var test = FileUtils.createDirectory(dirName);
-	test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.deleteDirectory = function(dirName, successCallback, errorCallback)
-{
-	this.successCallback = successCallback;
-	this.errorCallback = errorCallback;
-	var test = FileUtils.deleteDirectory(dirName);
-	test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.deleteFile = function(fileName, successCallback, errorCallback)
-{
-	this.successCallback = successCallback;
-	this.errorCallback = errorCallback;
-	FileUtils.deleteFile(fileName);
-	test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.getFreeDiskSpace = function(successCallback, errorCallback)
-{
-	if(this.freeDiskSpace > 0)
-	{
-		return this.freeDiskSpace;
-	}
-	else
-	{
-		this.successCallback = successCallback;
-		this.errorCallback = errorCallback;
-		this.freeDiskSpace = FileUtils.getFreeDiskSpace();
-  		(this.freeDiskSpace > 0) ? successCallback() : errorCallback();
-	}
-}
-
-
-// File Reader
-
-
-function FileReader()
-{
-	this.fileName = "";
-	this.result = null;
-	this.onloadstart = null;
-	this.onprogress = null;
-	this.onload = null;
-	this.onerror = null;
-	this.onloadend = null;
-}
-
-
-FileReader.prototype.abort = function()
-{
-	// Not Implemented
-}
-
-FileReader.prototype.readAsText = function(file)
-{
-	if(this.fileName && this.fileName.length > 0)
-	{
-		navigator.fileMgr.removeFileReader(this.fileName,this);
-	}
-	this.fileName = file;
-	navigator.fileMgr.addFileReader(this.fileName,this);
-	//alert("Calling File.read : " + this.fileName);
-	//window.location = "gap://File.readFile/"+ file;
-	this.onerror = errorCallback;
-  	this.oncomplete = successCallback;
-
-  	return FileUtil.read(fileName);
-}
-
-FileReader.prototype.hasRead(data)
-{
-
-}
-
-// File Writer
-
-function FileWriter()
-{
-	this.fileName = "";
-	this.result = null;
-	this.readyState = 0; // EMPTY
-	this.result = null;
-	this.onerror = null;
-	this.oncomplete = null;
-}
-
-FileWriter.prototype.writeAsText = function(file,text,bAppend)
-{
-	if(this.fileName && this.fileName.length > 0)
-	{
-		navigator.fileMgr.removeFileWriter(this.fileName,this);
-	}
-	this.fileName = file;
-	if(bAppend != true)
-	{
-		bAppend = false; // for null values
-	}
-	navigator.fileMgr.addFileWriter(file,this);
-	this.readyState = 0; // EMPTY
-  	var call = FileUtil.write(file, text, bAppend);
-	this.result = null;
-}
-
-
-
-
-
-/**
- * This class provides access to device GPS data.
- * @constructor
- */
-function Geolocation() {
-    /**
-     * The last known GPS position.
-     */
-    this.lastPosition = null;
-    this.lastError = null;
-    this.callbacks = {
-        onLocationChanged: [],
-        onError:           []
-    };
-};
-
-Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options)
-{
-  var position = Geo.getCurrentLocation();
-  this.global_success = successCallback;
-  this.fail = errorCallback;
-}
-
-/**
- * Asynchronously aquires the position repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the position
- * data is available
- * @param {Function} errorCallback The function to call when there is an error 
- * getting the position data.
- * @param {PositionOptions} options The options for getting the position data
- * such as timeout and the frequency of the watch.
- */
-Geolocation.prototype.watchPosition = function(successCallback, errorCallback, options) {
-	// Invoke the appropriate callback with a new Position object every time the implementation 
-	// determines that the position of the hosting device has changed. 
-	
-	this.getCurrentPosition(successCallback, errorCallback, options);
-	var frequency = 10000;
-        if (typeof(options) == 'object' && options.frequency)
-            frequency = options.frequency;
-	
-	var that = this;
-	return setInterval(function() {
-		that.getCurrentPosition(successCallback, errorCallback, options);
-	}, frequency);
-};
-
-
-/**
- * Clears the specified position watch.
- * @param {String} watchId The ID of the watch returned from #watchPosition.
- */
-Geolocation.prototype.clearWatch = function(watchId) {
-	clearInterval(watchId);
-};
-
-/**
- * Called by the geolocation framework when the current location is found.
- * @param {PositionOptions} position The current position.
- */
-Geolocation.prototype.setLocation = function(position) {
-    this.lastPosition = position;
-    for (var i = 0; i < this.callbacks.onLocationChanged.length; i++) {
-        var f = this.callbacks.onLocationChanged.shift();
-        f(position);
-    }
-};
-
-/**
- * Called by the geolocation framework when an error occurs while looking up the current position.
- * @param {String} message The text of the error message.
- */
-Geolocation.prototype.setError = function(message) {
-    this.lastError = message;
-    for (var i = 0; i < this.callbacks.onError.length; i++) {
-        var f = this.callbacks.onError.shift();
-        f(message);
-    }
-};
- 
-// Run the global callback
-Geolocation.prototype.gotCurrentPosition = function(lat, lng, alt, altacc, head, vel, stamp)
-{
-  if (lat == "undefined" || lng == "undefined")
-  {
-    this.fail();
-  }
-  else
-  {
-    coords = new Coordinates(lat, lng, alt, altacc, head, vel);
-    loc = new Position(coords, stamp);
-	this.lastPosition = loc;
-    this.global_success(loc);
-  }
-}
-
-/*
-* This turns on the GeoLocator class, which has two listeners.
-* The listeners have their own timeouts, and run independently of this process
-* In this case, we return the key to the watch hash
-*/
- 
-Geolocation.prototype.watchPosition = function(successCallback, errorCallback, options)
-{
-  var frequency = (options != undefined)? options.frequency : 10000;
- 
-  if (!this.listeners)
-  {
-      this.listeners = [];
-  }
- 
-  var key = this.listeners.push( {"success" : successCallback, "fail" : failCallback }) - 1;
- 
-  // TO-DO: Get the names of the method and pass them as strings to the Java.
-  return Geolocation.start(frequency, key);
-}
- 
-/*
- * Retrieve and stop this listener from listening to the GPS
- *
- */
-Geolocation.prototype.success = function(key, lat, lng, alt, altacc, head, vel, stamp)
-{
-  var coords = new Coordinates(lat, lng, alt, altacc, head, vel);
-  var loc = new Position(coords, stamp);
-  this.listeners[key].success(loc);
-}
-
-Geolocation.prototype.fail = function(key)
-{
-  this.listeners[key].fail();
-}
- 
-Geolocation.prototype.clearWatch = function(watchId)
-{
-  Geo.stop(watchId);
-}
-// Taken from Jesse's geo fix (similar problem) in PhoneGap iPhone. Go figure, same browser!
-function __proxyObj(origObj, proxyObj, funkList) {
-	for (var v in funkList) {
-		origObj[funkList[v]] = proxyObj[funkList[v]];
-	}
-}
-PhoneGap.addConstructor(function() {
-	navigator._geo = new Geolocation();
-	__proxyObj(navigator.geolocation, navigator._geo,
-		["setLocation", "getCurrentPosition", "watchPosition",
-		 "clearWatch", "setError", "start", "stop", "gotCurrentPosition"]
-	);
-});function KeyEvent() 
-{
-}
-
-KeyEvent.prototype.menuTrigger = function()
-{
-  var e = document.createEvent('Events');
-  e.initEvent('menuKeyDown');
-  document.dispatchEvent(e);
-}
-
-KeyEvent.prototype.searchTrigger= function()
-{
-  var e = document.createEvent('Events');
-  e.initEvent('searchKeyDown');
-  document.dispatchEvent(e);
-}
-
-if (document.keyEvent == null || typeof document.keyEvent == 'undefined')
-{
-  window.keyEvent = document.keyEvent = new KeyEvent();
-}
-/**
- * This class provides access to the device media, interfaces to both sound and video
- * @constructor
- */
-function Media(src, successCallback, errorCallback) {
-	this.src = src;
-	this.successCallback = successCallback;
-	this.errorCallback = errorCallback;												
-}
-
-Media.prototype.record = function() {
-}
-
-Media.prototype.play = function() {
-}
-
-Media.prototype.pause = function() {
-}
-
-Media.prototype.stop = function() {
-}
-
-
-/**
- * This class contains information about any Media errors.
- * @constructor
- */
-function MediaError() {
-	this.code = null,
-	this.message = "";
-}
-
-MediaError.MEDIA_ERR_ABORTED 		= 1;
-MediaError.MEDIA_ERR_NETWORK 		= 2;
-MediaError.MEDIA_ERR_DECODE 		= 3;
-MediaError.MEDIA_ERR_NONE_SUPPORTED = 4;
-
-
-//if (typeof navigator.audio == "undefined") navigator.audio = new Media(src);
-
-/**
- * This class provides access to the device media, interfaces to both sound and video
- * @constructor
- */
-
-Media.prototype.play = function() {
-  DroidGap.startPlayingAudio(this.src);  
-}
-
-Media.prototype.stop = function() {
-  DroidGap.stopPlayingAudio();
-}
-
-Media.prototype.startRecord = function() {
-  DroidGap.startRecordingAudio(this.src);
-}
-
-Media.prototype.stopRecordingAudio = function() {
-  DroidGap.stopRecordingAudio();
-}
-
-
-/**
- * This class contains information about any NetworkStatus.
- * @constructor
- */
-function NetworkStatus() {
-	this.code = null;
-	this.message = "";
-}
-
-NetworkStatus.NOT_REACHABLE = 0;
-NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK = 1;
-NetworkStatus.REACHABLE_VIA_WIFI_NETWORK = 2;
-
-/**
- * This class provides access to device Network data (reachability).
- * @constructor
- */
-function Network() {
-    /**
-     * The last known Network status.
-	 * { hostName: string, ipAddress: string, 
-		remoteHostStatus: int(0/1/2), internetConnectionStatus: int(0/1/2), localWiFiConnectionStatus: int (0/2) }
-     */
-	this.lastReachability = null;
-};
-
-/**
- * 
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options  (isIpAddress:boolean)
- */
-Network.prototype.isReachable = function(hostName, successCallback, options) {
-}
-
-/**
- * Called by the geolocation framework when the reachability status has changed.
- * @param {Reachibility} reachability The current reachability status.
- */
-Network.prototype.updateReachability = function(reachability) {
-    this.lastReachability = reachability;
-};
-
-PhoneGap.addConstructor(function() {
-    if (typeof navigator.network == "undefined") navigator.network = new Network();
-});
-Network.prototype.isReachable = function(uri, win, options)
-{
-  var status = new NetworkStatus();
-  if(NetworkManager.isReachable(uri))
-  {
-    if (NetworkManager.isWifiActive)
-      status.code = 2;
-    else
-      status.code = 1;
-  }
-  else
-      status.code = 0;
-  win(status);
-}
-/**
- * This class provides access to notifications on the device.
- */
-function Notification() {
-	
-}
-
-/**
- * Open a native alert dialog, with a customizable title and button text.
- * @param {String} message Message to print in the body of the alert
- * @param {String} [title="Alert"] Title of the alert dialog (default: Alert)
- * @param {String} [buttonLabel="OK"] Label of the close button (default: OK)
- */
-Notification.prototype.alert = function(message, title, buttonLabel) {
-    // Default is to use a browser alert; this will use "index.html" as the title though
-    alert(message);
-};
-
-/**
- * Start spinning the activity indicator on the statusbar
- */
-Notification.prototype.activityStart = function() {
-};
-
-/**
- * Stop spinning the activity indicator on the statusbar, if it's currently spinning
- */
-Notification.prototype.activityStop = function() {
-};
-
-/**
- * Causes the device to blink a status LED.
- * @param {Integer} count The number of blinks.
- * @param {String} colour The colour of the light.
- */
-Notification.prototype.blink = function(count, colour) {
-	
-};
-
-/**
- * Causes the device to vibrate.
- * @param {Integer} mills The number of milliseconds to vibrate for.
- */
-Notification.prototype.vibrate = function(mills) {
-	
-};
-
-/**
- * Causes the device to beep.
- * @param {Integer} count The number of beeps.
- * @param {Integer} volume The volume of the beep.
- */
-Notification.prototype.beep = function(count, volume) {
-	
-};
-
-// TODO: of course on Blackberry and Android there notifications in the UI as well
-
-PhoneGap.addConstructor(function() {
-    if (typeof navigator.notification == "undefined") navigator.notification = new Notification();
-});
-
-Notification.prototype.vibrate = function(mills)
-{
-  DroidGap.vibrate(mills);
-}
-
-/*
- * On the Android, we don't beep, we notify you with your 
- * notification!  We shouldn't keep hammering on this, and should
- * review what we want beep to do.
- */
-
-Notification.prototype.beep = function(count, volume)
-{
-  DroidGap.beep(count);
-}
-/**
- * This class contains position information.
- * @param {Object} lat
- * @param {Object} lng
- * @param {Object} acc
- * @param {Object} alt
- * @param {Object} altacc
- * @param {Object} head
- * @param {Object} vel
- * @constructor
- */
-function Position(coords, timestamp) {
-	this.coords = coords;
-        this.timestamp = new Date().getTime();
-}
-
-function Coordinates(lat, lng, alt, acc, head, vel) {
-	/**
-	 * The latitude of the position.
-	 */
-	this.latitude = lat;
-	/**
-	 * The longitude of the position,
-	 */
-	this.longitude = lng;
-	/**
-	 * The accuracy of the position.
-	 */
-	this.accuracy = acc;
-	/**
-	 * The altitude of the position.
-	 */
-	this.altitude = alt;
-	/**
-	 * The direction the device is moving at the position.
-	 */
-	this.heading = head;
-	/**
-	 * The velocity with which the device is moving at the position.
-	 */
-	this.speed = vel;
-}
-
-/**
- * This class specifies the options for requesting position data.
- * @constructor
- */
-function PositionOptions() {
-	/**
-	 * Specifies the desired position accuracy.
-	 */
-	this.enableHighAccuracy = true;
-	/**
-	 * The timeout after which if position data cannot be obtained the errorCallback
-	 * is called.
-	 */
-	this.timeout = 10000;
-}
-
-/**
- * This class contains information about any GSP errors.
- * @constructor
- */
-function PositionError() {
-	this.code = null;
-	this.message = "";
-}
-
-PositionError.UNKNOWN_ERROR = 0;
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
-/*
- * This is purely for the Android 1.5/1.6 HTML 5 Storage
- * I was hoping that Android 2.0 would deprecate this, but given the fact that 
- * most manufacturers ship with Android 1.5 and do not do OTA Updates, this is required
- */
-
-var DroidDB = function()
-{
-  this.txQueue = [];
-}
-
-DroidDB.prototype.addResult = function(rawdata, tx_id)
-{
-  eval("var data = " + rawdata);
-  var tx = this.txQueue[tx_id];
-  tx.resultSet.push(data);
-}
-
-DroidDB.prototype.completeQuery = function(tx_id)
-{
-  var tx = this.txQueue[tx_id];
-  var r = new result();
-  r.rows.resultSet = tx.resultSet;
-  r.rows.length = tx.resultSet.length;
-  tx.win(r);
-}
-
-DroidDB.prototype.fail = function(reason, tx_id)
-{
-  var tx = this.txQueue[tx_id];
-  tx.fail(reason);
-}
-
-var DatabaseShell = function()
-{
-  
-}
-
-DatabaseShell.prototype.transaction = function(process)
-{
-  tx = new Tx();
-  process(tx);
-}
-
-var Tx = function()
-{
-  droiddb.txQueue.push(this);
-  this.id = droiddb.txQueue.length - 1;
-  this.resultSet = [];
-}
-
-Tx.prototype.executeSql = function(query, params, win, fail)
-{
-  droidStorage.executeSql(query, params, this.id);
-  tx.win = win;
-  tx.fail = fail;
-}
-
-var result = function()
-{
-  this.rows = new Rows();
-}
-
-var Rows = function()
-{
-  this.resultSet = [];
-  this.length = 0;
-}
-
-Rows.prototype.item = function(row_id)
-{
-  return this.resultSet[id];
-}
-
-var dbSetup = function(name, version, display_name, size)
-{
-    droidStorage.openDatabase(name, version, display_name, size)
-    db_object = new DatabaseShell();
-    return db_object;
-}
-
-PhoneGap.addConstructor(function() {
-  if (typeof navigator.openDatabase == "undefined") 
-  {
-    navigator.openDatabase = window.openDatabase = dbSetup;
-  window.droiddb = new DroidDB();
-  }
-});
-