public long startTimer() {
		stop = false;
		startTime = System.currentTimeMillis();
		refresher = new Thread(new Runnable() {
			public void run() {
				long currentTime;
				double remainingTime;
				DecimalFormat df = new DecimalFormat(DigitalFormatPattern);

				while (!stop) {
					currentTime = System.currentTimeMillis();
					remainingTime = Constants.TimeoutMilliseconds - (currentTime - startTime);
					if (remainingTime <= 0) {
						if (endTimeListener != null) endTimeListener.run();
						break;
					}
					lblTime.setText(df.format(remainingTime/1000));
					try { Thread.sleep(100); } catch (InterruptedException e) { }
				}
				lblTime.setText(df.format(0));
			}
		});

		DecimalFormat df = new DecimalFormat(DigitalFormatPattern);
		lblTime.setText(df.format(Constants.TimeoutMilliseconds / 1000));
		refresher.start();
		return startTime;
	}