changeset 30:c0a6f7c66719

Josh M test "in house" version 0.1
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Wed, 27 Feb 2013 11:39:07 +0000
parents fabb3a5cdfc9
children 23ef179c3748
files HelpViewController.xib IntroViewController.xib PresetAlertViewController.mm ServerComms.h ServerComms.mm TimedSessionController.h TimedSessionController.mm eventLogger.h eventLogger.mm presetManager.h presetManager.mm testApp.mm
diffstat 12 files changed, 447 insertions(+), 285 deletions(-) [+]
line wrap: on
line diff
--- a/HelpViewController.xib	Fri Feb 22 17:41:38 2013 +0000
+++ b/HelpViewController.xib	Wed Feb 27 11:39:07 2013 +0000
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
 	<data>
-		<int key="IBDocument.SystemTarget">1536</int>
+		<int key="IBDocument.SystemTarget">1552</int>
 		<string key="IBDocument.SystemVersion">11G63</string>
-		<string key="IBDocument.InterfaceBuilderVersion">2844</string>
+		<string key="IBDocument.InterfaceBuilderVersion">3084</string>
 		<string key="IBDocument.AppKitVersion">1138.51</string>
 		<string key="IBDocument.HIToolboxVersion">569.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">1930</string>
+			<string key="NS.object.0">2083</string>
 		</object>
 		<array key="IBDocument.IntegratedClassDependencies">
 			<string>IBProxyObject</string>
@@ -55,35 +55,38 @@
 						<bool key="IBUIUsesAttributedText">YES</bool>
 						<object class="NSAttributedString" key="IBUIAttributedText">
 							<string type="base64-UTF8" key="NSString">SU5TVFJVQ1RJT05TDQ1QcmVzcyB0aGUgcGxheSBidXR0b24gYXQgdGhlIHRvcCB0byBzdGFydCB0aGUg
-c2VxdWVuY2VyLiBQcmVzcyBwYXVzZSB0byBzdG9wLg1QbGVhc2UgdXNlIGFsbCB0aHJlZSBtb2Rlczog
-Zmlyc3QgdGhlIFNMSURFUlMsIHRoZW4gdGhlIFpPT01FUiBhbmQgdGhlbiBCT1RIIGZvciBhYm91dCA4
-IG1pbnV0ZXMgZWFjaC4gWW91IGNhbiBhY2Nlc3MgdGhlc2UgdXNpbmcgdGhlIHRhYnMgYXQgdGhlIGJv
-dHRvbSBvZiB0aGUgc2NyZWVuLiANDU9QRVJBVElORyBUSEUgWk9PTUVS4oCoDVRoZSByZWQgY3Jvc3No
-YWlycyBpbiB0aGUgY2VudHJlIG9mIHRoZSBzY3JlZW4gcmVwcmVzZW50IHRoZSBwb2ludCBvbiB0aGUg
-c3VyZmFjZSB0aGF0IHlvdSBhcmUgbGlzdGVuaW5nIHRvLiBTY3JvbGwgdGhlIHN1cmZhY2UgdW5kZXIg
-dGhpcyBwb2ludCB0byBtb3ZlIHRvIGEgZGlmZmVyZW50IHNvdW5kLiBJbiBCT1RIIG1vZGUgeW91IHdp
-bGwgYmUgYWJsZSB0byBzZWUgdGhlIGVmZmVjdCBvZiB0aGlzIG9uIHRoZSBzbGlkZXJzLiBMaWtld2lz
-ZSBpZiB5b3UgbW92ZSBhIHNsaWRlciB5b3Ugd2lsbCBob3AgdG8gYSBkaWZmZXJlbnQgcG9pbnQgb24g
-dGhlIHN1cmZhY2Uu4oCoDVNhdmUgYW55IHNvdW5kcy9zZXF1ZW5jZXMgdGhhdCB5b3UgbGlrZSB1c2lu
-ZyB0aGUg4oCcc2F2ZSBwcmVzZXTigJ0gYnV0dG9uLiBBIG1hcmtlciB3aWxsIGFwcGVhciBvbiB0aGUg
-em9vbSBzdXJmYWNlLiBJZiB5b3UgbW92ZSB0byB0aGUgdmljaW5pdHkgb2YgYSBwcmVzZXQgbWFya2Vy
-LCB0aGUgY3Jvc3NoYWlycyB3aWxsIHNuYXAgdG8gdGhlIHByZXNldCwgaXRzIGRldGFpbHMgd2lsbCBh
-cHBlYXIgYW5kIHRoZSBzb3VuZCB3aWxsIHBsYXkuDeKAqFVzaW5nIHR3byBmaW5nZXIgcGluY2ggbW92
-ZW1lbnQgem9vbXMgdGhlIHN1cmZhY2UganVzdCBhcyBpbiBhIG1hcHMgYXBwLiBUaGUgZnVydGhlciB5
-b3Ugem9vbSBpbiwgdGhlIGxlc3MgdGhlIHNvdW5kIHdpbGwgY2hhbmdlIGFzIHlvdSBzY3JvbGwgYXJv
-dW5kLiBGb3IgZXhhbXBsZSB0aGUgeWVsbG93IGxpbmVzIHRoYXQgYXBwZWFyIGF0IHRoZSBsYXJnZXN0
-IHNjYWxlIGNvcnJlc3BvbmQgdG8gdGhlIHNsaWRlcnMganVtcGluZyA2NCB1bml0cy4gVGhlIHdoaXRl
-IGxpbmVzIGF0IHRoZSBzbWFsbGVzdCBzY2FsZSBjb3JyZXNwb25kIHRvIGp1bXBzIG9mIG9uZSB1bml0
-LiBUaGVyZSBhcmUgNyBsZXZlbHM64oCo4oCoWWVsbG93ID0gNjTigKhUZWFsID0gMzLigKhQdXJwbGUg
-PSAxNuKAqEdyZWVuID0gOOKAqERhcmsgQmx1ZSA9IDTigKhSZWQgPSAy4oCoV2hpdGUgPSAx4oCo4oCo
-TE9DS+KAqOKAqElmIHlvdSBmaW5kIGEgc2VxdWVuY2UgeW91IGxpa2UgYnV0IHdhbnQgdG8gY2hhbmdl
-IHRoZSBzeW50aCBzb3VuZCB1c2UgdGhlICJMb2NrIFNlcXVlbmNlIChYKSIgYnV0dG9uLiBUaGlzIHdp
-bGwgcHJldmVudCB5b3UgYWNjaWRlbnRhbGx5IG1vdmluZyBpbiBmcm9tIGxlZnQgdG8gcmlnaHQgYW5k
-IG1lc3NpbmcgdXAgeW91ciBub3RlIHBhdHRlcm4uIFNpbWlsYXJseSBpZiB5b3UgZmluZCBhIHN5bnRo
-IHNvdW5kIHRoYXQgeW91IGxpa2UsIGJ1dCB3YW50IHRvIGNoYW5nZSB0aGUgbm90ZSBzZXF1ZW5jZSwg
-dXNlIHRoZSAiTG9jayBTeW50aCAoWSkiIGJ1dHRvbi4g4oCo4oCoUkFORE9NSVNF4oCo4oCoVXNlIHRo
-ZSByYW5kb21pc2UgdG8ganVtcCB0byBhIHJhbmRvbSBwb2ludCBvbiB0aGUgZ3JpZC4g4oCoVEhFIFFV
-RVNUSU9OTkFJUkXigKjigKgNDQ</string>
+c2VxdWVuY2VyLiBQcmVzcyBwYXVzZSB0byBzdG9wLg1Zb3Ugd2lsbCBiZSB1c2luZyBhbGwgdGhyZWUg
+bW9kZXM6IGZpcnN0IHRoZSBTTElERVJTLCB0aGVuIHRoZSBaT09NRVIgYW5kIHRoZW4gQk9USCBmb3Ig
+YWJvdXQgNiBtaW51dGVzIGVhY2guIEFmdGVyIHlvdSBjb21wbGV0ZSB0aGUgdGltZWQgc2Vzc2lvbnMg
+YW5kIHRoZSBxdWVzdGlvbm5haXJlLCB5b3UgY2FuIGFjY2VzcyB0aGVzZSB1c2luZyB0aGUgdGFicyBh
+dCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uIA0NT1BFUkFUSU5HIFRIRSBaT09NRVLigKgNVGhlIHJl
+ZCBjcm9zc2hhaXJzIGluIHRoZSBjZW50cmUgb2YgdGhlIHNjcmVlbiByZXByZXNlbnQgdGhlIHBvaW50
+IG9uIHRoZSBzdXJmYWNlIHRoYXQgeW91IGFyZSBsaXN0ZW5pbmcgdG8uIFNjcm9sbCB0aGUgc3VyZmFj
+ZSB1bmRlciB0aGlzIHBvaW50IHRvIG1vdmUgdG8gYSBkaWZmZXJlbnQgc291bmQuIEluIEJPVEggbW9k
+ZSB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNlZSB0aGUgZWZmZWN0IG9mIHRoaXMgb24gdGhlIHNsaWRlcnMu
+IExpa2V3aXNlIGlmIHlvdSBtb3ZlIGEgc2xpZGVyIHlvdSB3aWxsIGhvcCB0byBhIGRpZmZlcmVudCBw
+b2ludCBvbiB0aGUgc3VyZmFjZS7igKgNU2F2ZSBhbnkgc291bmRzL3NlcXVlbmNlcyB0aGF0IHlvdSBs
+aWtlIHVzaW5nIHRoZSDigJxzYXZlIHByZXNldOKAnSBidXR0b24uIEEgbWFya2VyIHdpbGwgYXBwZWFy
+IG9uIHRoZSB6b29tIHN1cmZhY2UuIElmIHlvdSBtb3ZlIHRvIHRoZSB2aWNpbml0eSBvZiBhIHByZXNl
+dCBtYXJrZXIsIHRoZSBjcm9zc2hhaXJzIHdpbGwgc25hcCB0byB0aGUgcHJlc2V0LCBpdHMgZGV0YWls
+cyB3aWxsIGFwcGVhciBhbmQgdGhlIHNvdW5kIHdpbGwgcGxheS4N4oCoVXNpbmcgdHdvIGZpbmdlciBw
+aW5jaCBtb3ZlbWVudCB6b29tcyB0aGUgc3VyZmFjZSBqdXN0IGFzIGluIGEgbWFwcyBhcHAuIFRoZSBm
+dXJ0aGVyIHlvdSB6b29tIGluLCB0aGUgbGVzcyB0aGUgc291bmQgd2lsbCBjaGFuZ2UgYXMgeW91IHNj
+cm9sbCBhcm91bmQuIEZvciBleGFtcGxlIHRoZSB5ZWxsb3cgbGluZXMgdGhhdCBhcHBlYXIgYXQgdGhl
+IGxhcmdlc3Qgc2NhbGUgY29ycmVzcG9uZCB0byB0aGUgc2xpZGVycyBqdW1waW5nIDY0IHVuaXRzLiBU
+aGUgd2hpdGUgbGluZXMgYXQgdGhlIHNtYWxsZXN0IHNjYWxlIGNvcnJlc3BvbmQgdG8ganVtcHMgb2Yg
+b25lIHVuaXQuIFRoZXJlIGFyZSA3IGxldmVsczrigKjigKhZZWxsb3cgPSA2NOKAqFRlYWwgPSAzMuKA
+qFB1cnBsZSA9IDE24oCoR3JlZW4gPSA44oCoRGFyayBCbHVlID0gNOKAqFJlZCA9IDLigKhXaGl0ZSA9
+IDHigKjigKhMT0NL4oCo4oCoSWYgeW91IGZpbmQgYSBzZXF1ZW5jZSB5b3UgbGlrZSBidXQgd2FudCB0
+byBjaGFuZ2UgdGhlIHN5bnRoIHNvdW5kIHVzZSB0aGUgIkxvY2sgU2VxdWVuY2UgKFgpIiBidXR0b24u
+IFRoaXMgd2lsbCBwcmV2ZW50IHlvdSBhY2NpZGVudGFsbHkgbW92aW5nIGluIGZyb20gbGVmdCB0byBy
+aWdodCBhbmQgbWVzc2luZyB1cCB5b3VyIG5vdGUgcGF0dGVybi4gU2ltaWxhcmx5IGlmIHlvdSBmaW5k
+IGEgc3ludGggc291bmQgdGhhdCB5b3UgbGlrZSwgYnV0IHdhbnQgdG8gY2hhbmdlIHRoZSBub3RlIHNl
+cXVlbmNlLCB1c2UgdGhlICJMb2NrIFN5bnRoIChZKSIgYnV0dG9uLiDigKjigKhSQU5ET01JU0XigKji
+gKhVc2UgdGhlIHJhbmRvbWlzZSB0byBqdW1wIHRvIGEgcmFuZG9tIHBvaW50IG9uIHRoZSBncmlkLiDi
+gKjigKhUSEUgUVVFU1RJT05OQUlSReKAqOKAqFRoZXJlIGFyZSBhcm91bmQgMTcgc2ltcGxlIG11bHRp
+cGxlIGNob2ljZSBxdWVzdGlvbnMgdG8gYW5zd2VyLCBhbmQgYSB0ZXh0IGZlZWRiYWNrIGJveC4gWW91
+ciBmZWVkYmFjayBpcyBhcHByZWNpYXRlZCENDQ</string>
 							<dictionary key="NSAttributes">
 								<object class="NSColor" key="NSColor">
 									<int key="NSColorSpace">1</int>
@@ -275,6 +278,6 @@
 		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">1930</string>
+		<string key="IBCocoaTouchPluginVersion">2083</string>
 	</data>
 </archive>
--- a/IntroViewController.xib	Fri Feb 22 17:41:38 2013 +0000
+++ b/IntroViewController.xib	Wed Feb 27 11:39:07 2013 +0000
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
 	<data>
-		<int key="IBDocument.SystemTarget">1536</int>
+		<int key="IBDocument.SystemTarget">1552</int>
 		<string key="IBDocument.SystemVersion">11G63</string>
-		<string key="IBDocument.InterfaceBuilderVersion">2844</string>
+		<string key="IBDocument.InterfaceBuilderVersion">3084</string>
 		<string key="IBDocument.AppKitVersion">1138.51</string>
 		<string key="IBDocument.HIToolboxVersion">569.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">1930</string>
+			<string key="NS.object.0">2083</string>
 		</object>
 		<array key="IBDocument.IntegratedClassDependencies">
 			<string>IBProxyObject</string>
@@ -42,6 +42,7 @@
 						<string key="NSFrame">{{326, 881}, {116, 44}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
 						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
@@ -85,37 +86,34 @@
 						<bool key="IBUIUserInteractionEnabled">NO</bool>
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 						<object class="NSMutableString" key="IBUIText">
-							<bytes key="NS.bytes">V2VsY29tZSB0byB0aGUgIlNvbmljIFpvb20iLiBUaGlzIGlzIGEgcmVzZWFyY2ggcHJvamVjdCBhaW1l
-ZCBhdCBmaW5kaW5nIG91dCBob3cgcGVvcGxlIGV4cGxvcmUgdGhlIHNwYWNlIG9mIHNvdW5kIHN5bnRo
-ZXNpcyBwYXJhbWV0ZXJzLiANDUluIHRoaXMgYXBwIHRoZXJlIGFyZSBqdXN0IDEwIHBhcmFtZXRlcnMg
-4oCTIDUgZm9yIHRoZSBzZXF1ZW5jZXIgcGF0dGVybiBnZW5lcmF0b3IgYW5kIDUgZm9yIGEgYmFzaWMg
-Rk0vc3VidHJhY3RpdmUgc3ludGhlc2l6ZXIuIEhvd2V2ZXIsIGV2ZW4gd2l0aCBvbmx5IDEwIHBhcmFt
-ZXRlcnMgdGhlIGFtb3VudCBvZiBkaWZmZXJlbnQgc291bmRzIHRvIGV4cGxvcmUgaXMgdmFzdDogaW4g
-ZmFjdCB0aGVyZSBhcmUganVzdCBvdmVyIGEgYmlsbGlvbiB0cmlsbGlvbiBkaXN0aW5jdCBzZXR0aW5n
-cyEgV2UgYWltIHRvIGxvb2sgYXQgd2hhdCBwYXRocyBwZW9wbGUgdGFrZSBpbiB0aGlzIGh1Z2Ugc3Bh
-Y2UsIHdoYXQgcG9pbnRzIHRoZXkgbGlrZSBhbmQgZGlzbGlrZSwgYW5kIHVzZSB0aGUgZGF0YSB0byBj
-cmVhdGUgc3ludGhzIHRoYXQgYXJlIGVhc2llciB0byBuYXZpZ2F0ZSwgYW5kIGhvcGVmdWxseSBlbmNv
-dXJhZ2UgY3JlYXRpdml0eS4NDVRoZXJlIGFyZSB0d28gaW50ZXJmYWNlcyBwcmVzZW50ZWQgaGVyZS4g
-VGhlIGZpcnN0IGlzIG9uZSB5b3Ugd2lsbCBwcm9iYWJseSBiZSB1c2VkIHRvIGlmIHlvdSBhcmUgYSBt
-dXNpY2lhbjogMTAgc2xpZGVycyBmb3IgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy4gVGhlIHNlY29uZCBp
-cyBzb21ld2hhdCBuZXc6IGV2ZXJ5IG9uZSBvZiB0aGUgYmlsbGlvbiB0cmlsbGlvbiBwb2ludHMgaGFz
-IGJlZW4gbWFwcGVkIHRvIGEgMkQgc3VyZmFjZSAoaWYgeW91IHJlYWxseSB3YW50IHRvIGtub3cgLSBl
-YWNoIHNxdWFyZSB5b3Ugc2VlIGlzIGEgc3F1YXNoZWQgb3V0IDEwRCBoeXBlcmN1YmUsIGFuZCBhbGwg
-b2YgdGhlIDEwMjQgc3ViLXNxdWFyZXMgYXJlIHRoZSDigJxjb3JuZXJz4oCdIG9mIHRoaXMgMTAtY3Vi
-ZSwgd2hpY2ggdGhlbXNlbHZlcyBhcmUgYnVpbHQgZnJvbSBzbWFsbGVyIGh5cGVyY3ViZXMgYW5kIHNv
-IG9u4oCmKS4gQXMgZmFyIGFzIHBvc3NpYmxlLCB0aGUgZnVydGhlciB5b3UgdHJhdmVsIGFsb25nIHRo
-aXMgMkQgc3VyZmFjZSwgdGhlIG1vcmUgZGlmZmVyZW50IHRoZSBzb3VuZCB3aWxsIGJlY29tZS4NDVVw
-IGRvd24gbW92ZW1lbnQgY29udHJvbHMgdGhlIHN5bnRoIHRpbWJyZSwgbGVmdCByaWdodCBjb250cm9s
-cyB0aGUgc2VxdWVuY2VyLiBXaGVuIHlvdSBjbGljayDigJxzYXZlIHByZXNldOKAnSB5b3Ugd2lsbCBk
-cm9wIGEgcGluIG9udG8gdGhlIHN1cmZhY2UsIGFuZCB5b3UgY2FuIHJldmlzaXQgdGhpcyBwb2ludCBh
-dCBhbnl0aW1lIGJ5IHNjcm9sbGluZyB0byBpdC4gVGhpbmsgb2YgaXQgbGlrZSBhICJHb29nbGUgTWFw
-cyIgZm9yIHN5bnRoIHNvdW5kcy4uLg0NWW91IGNhbiB1c2UgYSBwaW5jaCBnZXN0dXJlIHRvIHpvb20g
-aW4gYW5kIG91dCBvZiB0aGUgc3VyZmFjZS4gWm9vbWluZyBpbiB3aWxsIGVuYWJsZSB5b3UgdG8gZXhw
-bG9yZSBzbWFsbGVyIGxvY2FsaXRpZXMgb2YgdGhlIHNvdW5kIHNwYWNlLiBab29taW5nIG91dCB3aWxs
-IGdpdmUgeW91IGEgYmlnZ2VyIHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSBzb3VuZCB3aWxs
-IGJlY29tZSBmYXIgbW9yZSByYW5kb20gYW5kIHVuY29udHJvbGxhYmxlIGFzIHlvdSBtb3ZlIGJpZ2dl
-ciBkaXN0YW5jZXMuDQ1XaGF0IHdlIGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRv
-IGlzIHVzZSBib3RoIHRoZSB6b29tZXIgYW5kIHRoZSBzbGlkZXJzIGZvciA2IG1pbnV0ZXMgZWFjaCwg
+							<bytes key="NS.bytes">V2VsY29tZSB0byB0aGUgIlNvbmljIFpvb20iLiBUaGlzIGlzIGEgUXVlZW4gTWFyeSBVbml2ZXJzaXR5
+IFBoRCByZXNlYXJjaCBwcm9qZWN0IGFpbWVkIGF0IGZpbmRpbmcgb3V0IGhvdyBwZW9wbGUgZXhwbG9y
+ZSB0aGUgc3BhY2Ugb2Ygc291bmQgc3ludGhlc2lzIHBhcmFtZXRlcnMuIA0NSW4gdGhpcyBhcHAgdGhl
+cmUgYXJlIGp1c3QgMTAgcGFyYW1ldGVycyDigJMgNSBmb3IgdGhlIHNlcXVlbmNlciBwYXR0ZXJuIGdl
+bmVyYXRvciBhbmQgNSBmb3IgYSBiYXNpYyBGTS9zdWJ0cmFjdGl2ZSBzeW50aGVzaXplci4gSG93ZXZl
+ciwgZXZlbiB3aXRoIG9ubHkgMTAgcGFyYW1ldGVycyB0aGUgYW1vdW50IG9mIGRpZmZlcmVudCBzb3Vu
+ZHMgdG8gZXhwbG9yZSBpcyB2YXN0OiBpbiBmYWN0IHRoZXJlIGFyZSBqdXN0IG92ZXIgYSBiaWxsaW9u
+IHRyaWxsaW9uIGRpc3RpbmN0IHNldHRpbmdzISBXZSBhaW0gdG8gbG9vayBhdCB3aGF0IHBhdGhzIHBl
+b3BsZSB0YWtlIGluIHRoaXMgaHVnZSBzcGFjZSwgd2hhdCBwb2ludHMgdGhleSBsaWtlIGFuZCBkaXNs
+aWtlLCBhbmQgdXNlIHRoZSBkYXRhIHRvIGNyZWF0ZSBzeW50aHMgdGhhdCBhcmUgZWFzaWVyIHRvIG5h
+dmlnYXRlLCBhbmQgaG9wZWZ1bGx5IGVuY291cmFnZSBjcmVhdGl2aXR5Lg0NVGhlcmUgYXJlIHR3byBp
+bnRlcmZhY2VzIHByZXNlbnRlZCBoZXJlLiBUaGUgZmlyc3QgaXMgb25lIHlvdSB3aWxsIHByb2JhYmx5
+IGJlIHVzZWQgdG8gaWYgeW91IGFyZSBhIG11c2ljaWFuOiAxMCBzbGlkZXJzIGZvciBlYWNoIG9mIHRo
+ZSBwYXJhbWV0ZXJzLiBUaGUgc2Vjb25kIGlzIHNvbWV3aGF0IG5ldzogZXZlcnkgb25lIG9mIHRoZSBi
+aWxsaW9uIHRyaWxsaW9uIHBvaW50cyBoYXMgYmVlbiBtYXBwZWQgdG8gYSAyRCBzdXJmYWNlLiBCdXQg
+YmFzaWNhbGx5LCB0aGUgZnVydGhlciB5b3UgdHJhdmVsIGFsb25nIHRoaXMgMkQgc3VyZmFjZSwgdGhl
+IG1vcmUgZGlmZmVyZW50IHRoZSBzb3VuZCB3aWxsIGJlY29tZS4NDVVwIGRvd24gbW92ZW1lbnQgY29u
+dHJvbHMgdGhlIHN5bnRoIHRpbWJyZSwgbGVmdCByaWdodCBjb250cm9scyB0aGUgc2VxdWVuY2VyLiBX
+aGVuIHlvdSBjbGljayDigJxzYXZlIHByZXNldOKAnSB5b3Ugd2lsbCBkcm9wIGEgcGluIG9udG8gdGhl
+IHN1cmZhY2UsIGFuZCB5b3UgY2FuIHJldmlzaXQgdGhpcyBwb2ludCBhdCBhbnl0aW1lIGJ5IHNjcm9s
+bGluZyB0byBpdC4gVGhpbmsgb2YgaXQgbGlrZSBhICJHb29nbGUgTWFwcyIgZm9yIHN5bnRoIHNvdW5k
+cy4uLg0NWW91IGNhbiB1c2UgYSBwaW5jaCBnZXN0dXJlIHRvIHpvb20gaW4gYW5kIG91dCBvZiB0aGUg
+c3VyZmFjZS4gWm9vbWluZyBpbiB3aWxsIGVuYWJsZSB5b3UgdG8gZXhwbG9yZSBzbWFsbGVyIGxvY2Fs
+aXRpZXMgb2YgdGhlIHNvdW5kIHNwYWNlLiBab29taW5nIG91dCB3aWxsIGdpdmUgeW91IGEgYmlnZ2Vy
+IHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSBzb3VuZCB3aWxsIGJlY29tZSBmYXIgbW9yZSBy
+YW5kb20gYW5kIHVuY29udHJvbGxhYmxlIGFzIHlvdSBtb3ZlIGJpZ2dlciBkaXN0YW5jZXMuDQ1XaGF0
+IHdlIGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRvIGlzIHVzZSB0aGUgem9vbWVy
+LCB0aGUgc2xpZGVycyBhbmQgYSBjb21iaW5hdGlvbiBvZiBib3RoIGZvciA2IG1pbnV0ZXMgZWFjaCwg
 YW5kIHNhdmUgYW55IHNvdW5kcyB0aGF0IHlvdSBsaWtlLiBBbHNvIGNoZWNrIG91dCB0aGUgInJhbmRv
 bWlzZSIgYW5kICJsb2NrIiBidXR0b25zLiBBZnRlciB0aGlzIGEgc2hvcnQgcXVlc3Rpb25uYWlyZSB3
 aWxsIGFwcGVhciB0aGF0IHdpbGwgaGVscCB1cyBhc3Nlc3MgdGhlIGludGVyZmFjZSBmdXJ0aGVyLiBB
@@ -344,6 +342,6 @@
 		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">1930</string>
+		<string key="IBCocoaTouchPluginVersion">2083</string>
 	</data>
 </archive>
--- a/PresetAlertViewController.mm	Fri Feb 22 17:41:38 2013 +0000
+++ b/PresetAlertViewController.mm	Wed Feb 27 11:39:07 2013 +0000
@@ -53,6 +53,9 @@
         if([[[alertView textFieldAtIndex:0] text] isEqualToString:@"newuser"]){
             // call new user stufff
             eventLogger.newUser();
+        }else if([[[alertView textFieldAtIndex:0] text] isEqualToString:@"printall"]){
+            presetManager.printAll();
+            eventLogger.printAll();
         }else{
             presetManager.addPreset([[[alertView textFieldAtIndex:0] text] cStringUsingEncoding:NSASCIIStringEncoding]);
         }
--- a/ServerComms.h	Fri Feb 22 17:41:38 2013 +0000
+++ b/ServerComms.h	Wed Feb 27 11:39:07 2013 +0000
@@ -1,18 +1,36 @@
 //
 //  ServerComms.h
-//  sonicZoom
+//  httpPost
 //
-//  Created by Robert Tubb on 21/02/2013.
-//
+//  Created by Robert Tubb on 24/02/2013.
+//  Copyright (c) 2013 Robert Tubb. All rights reserved.
 //
 
 #import <Foundation/Foundation.h>
 
-@interface ServerComms : NSObject  <NSURLConnectionDelegate>
--(void)test;
--(void)postRequest:(NSString *)msgbody;
+@interface ServerComms : NSObject <NSURLConnectionDataDelegate>
+{
+NSURL *serverURL;
+NSString *filePath;
+id delegate;
+SEL doneSelector;
+SEL errorSelector;
 
-- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
-- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
-- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse;
+BOOL uploadDidSucceed;
+}
+
+-   (id)initWithURL: (NSURL *)serverURL
+           filePath: (NSString *)filePath
+           delegate: (id)delegate
+       doneSelector: (SEL)doneSelector
+      errorSelector: (SEL)errorSelector;
+
+-   (NSString *)filePath;
+
+-(BOOL)doSyncPostRequest:(NSString *)type withData:(NSString *)data;
+-(BOOL)doPostRequest:(NSString *)type withData:(NSString *)data;
+@property (strong,nonatomic) NSMutableData * data;
+@property  BOOL requestInProgress;
+@property (strong, nonatomic) NSString * currentRequestType;
+
 @end
--- a/ServerComms.mm	Fri Feb 22 17:41:38 2013 +0000
+++ b/ServerComms.mm	Wed Feb 27 11:39:07 2013 +0000
@@ -1,55 +1,184 @@
 //
 //  ServerComms.m
-//  sonicZoom
+//  httpPost
 //
-//  Created by Robert Tubb on 21/02/2013.
-//
+//  Created by Robert Tubb on 24/02/2013.
+//  Copyright (c) 2013 Robert Tubb. All rights reserved.
 //
 
 #import "ServerComms.h"
+#import "eventLogger.h"
+
+extern EventLogger eventLogger;
 
 @implementation ServerComms
--(void)test{
-    NSLog(@"hi");
+//
+
+
+//  asynchronous one
+-(BOOL)doPostRequest:(NSString *)type withData:(NSString *)data{
+    
+    if(self.requestInProgress){
+        return NO;
+    }
+    self.currentRequestType = type;
+    NSString *localServerURL = @"http://127.0.0.1:8080/testservice/";
+    NSString *webServerURL = @"http://www.isophonics.net/datacollector/";
+
+    NSString *urls = [webServerURL stringByAppendingString:type];
+    NSURL *url = [NSURL URLWithString:urls];
+
+
+    // request object
+    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
+    
+    // the data
+    NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]];
+    NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
+    // length of data
+    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
+    
+    // request properties/header fields
+    [request setHTTPMethod:@"POST"];
+    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
+    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
+    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
+    [request setHTTPBody:postData ];
+
+    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
+    self.requestInProgress = YES;
+    return YES;
+    //  asynchronous one??
 }
--(void)postRequest:(NSString *)msgbody{
-    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
-                                    initWithURL:[NSURL
-                                                 URLWithString:msgbody]];
+//--------------------------------------------------------------------
+
+// schncronous
+-(BOOL)doSyncPostRequest:(NSString *)type withData:(NSString *)data{
+    BOOL success;
     
+    NSString *localServerURL = @"http://127.0.0.1:8080/testservice/";
+    NSString *webServerURL = @"http://www.isophonics.net/datacollector/";
+    
+    NSString *urls = [webServerURL stringByAppendingString:type];
+    NSURL *url = [NSURL URLWithString:urls];
+    
+    
+    // request object
+    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
+    
+    // the data
+    NSString *post = [@"jsontext=" stringByAppendingString:[NSString stringWithFormat:data]];
+    NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
+    // length of data
+    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
+    
+    // request properties/header fields
     [request setHTTPMethod:@"POST"];
-    [request setValue:@"text/xml"
-   forHTTPHeaderField:@"Content-type"];
+    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
+    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
+    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
+    [request setHTTPBody:postData ];
     
-    NSString *xmlString = @"<data><item>Item 1</item><item>Item 2</item></data>";
+    NSURLResponse* response;
+    NSError* error = nil;
+    NSData* result = [NSURLConnection sendSynchronousRequest:request  returningResponse:&response error:&error];
+ 
+    NSString *responseDataString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
     
-    [request setValue:[NSString stringWithFormat:@"%d",
-                       [xmlString length]]
-   forHTTPHeaderField:@"Content-length"];
+    //NSString* responseDataString = [NSString stringWithUTF8String: ];
+    NSLog(@"didRecieveDta %@", responseDataString);
+    [self.data appendData:result];
     
-    [request setHTTPBody:[xmlString
-                          dataUsingEncoding:NSUTF8StringEncoding]];
+    if([responseDataString isEqualToString:@"testConnection:OK"]){
+        
+        eventLogger.testConnectionOK();
+        success = true;
+    }else if([responseDataString isEqualToString:@"questionnaire:OK"]){
+        eventLogger.questionnaireOK();
+        success = true;
+    }else    if([responseDataString isEqualToString:@"eventlog:OK"]){
+        // call eventLogger eventlogUploadOK
+        eventLogger.eventlogOK();
+        success = true;
+    }else{
+        success = false;
+    }
     
-    [[NSURLConnection alloc] 
-     initWithRequest:request 
-     delegate:self];
+    // else check error??
+    
+    // check result
+    self.requestInProgress = NO;
+    return success;
+}
+//-------------------------------------------------------------------------------------------------
+
+- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
+    [self.data setLength:0];
+    NSLog(@"didReceiveResponse : %@",response);
 }
 
+- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
+    NSString *responseDataString = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
+    
+    //NSString* responseDataString = [NSString stringWithUTF8String: ];
+    NSLog(@"didRecieveDta %@", responseDataString);
+    [self.data appendData:d];
+    
+    if([responseDataString isEqualToString:@"testConnection:OK"]){
 
-- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
-    NSLog(@"!!!!!!!!!!!!!!!!!!!!connection error");
+        eventLogger.testConnectionOK();
+    }else if([responseDataString isEqualToString:@"questionnaire:OK"]){
+        eventLogger.questionnaireOK();
+    }else    if([responseDataString isEqualToString:@"eventlog:OK"]){
+        // call eventLogger eventlogUploadOK
+        eventLogger.eventlogOK();
+    }
+    // or?
+    /*
+    if([self.currentRequestType isEqualToString:@"testConnection"){
+        
+    }
+     */
 }
 
-- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
-    NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveResponse");
+- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
+    UIAlertView * av = [ [UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"")
+                                 message:[error localizedDescription]
+                                delegate:nil
+                       cancelButtonTitle:NSLocalizedString(@"OK", @"")
+                       otherButtonTitles:nil ];
+    [av show];
+    NSLog(@"fail with error");
+    self.requestInProgress = NO;
+    // we won't know what kind of request method this was...
 }
 
-- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
-    NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveData");
+- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
+    NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];
+    
+    // Do anything you want with it
+    NSLog(@"response text: %@",responseText);
+    self.requestInProgress = NO;
+
 }
 
+// Handle basic authentication challenge if needed
+- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
+    NSString *username = @"username";
+    NSString *password = @"password";
+    
+    NSURLCredential *credential = [NSURLCredential credentialWithUser:username
+                                                             password:password
+                                                          persistence:NSURLCredentialPersistenceForSession];
+    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
+}
+/*
+- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse{
+    
+}
 - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse{
     
 }
+*/
 
 @end
--- a/TimedSessionController.h	Fri Feb 22 17:41:38 2013 +0000
+++ b/TimedSessionController.h	Wed Feb 27 11:39:07 2013 +0000
@@ -5,7 +5,7 @@
 //  Created by Robert Tubb on 18/02/2013.
 //
 //
-#define SECONDS_PER_INTERFACE 10
+#define SECONDS_PER_INTERFACE 300
 #import <Foundation/Foundation.h>
 
 
--- a/TimedSessionController.mm	Fri Feb 22 17:41:38 2013 +0000
+++ b/TimedSessionController.mm	Wed Feb 27 11:39:07 2013 +0000
@@ -9,7 +9,6 @@
 #import "TimedSessionController.h"
 @interface TimedSessionController()
     // private stuff
-
 @end
 
 @implementation TimedSessionController
@@ -56,6 +55,7 @@
 -(void)showNextPrompt{
     NSString *themessage;
     scount++;
+    ((testApp *)self.theOFAppRef)->moveVel = TwoVector(); // stops movement
     if(scount < 3){
         themessage = [alertMessages objectAtIndex:orders[theOrder][scount] ];
     }else{
@@ -85,6 +85,7 @@
     
     if(scount < 3){
         NSInteger next = orders[theOrder][scount];
+        
         ((testApp *)self.theOFAppRef)->interfaceSelected(next);
         
         self.theCurrentTimer = [NSTimer scheduledTimerWithTimeInterval:SECONDS_PER_INTERFACE target:self selector:@selector(showNextPrompt) userInfo:nil repeats:NO];
--- a/eventLogger.h	Fri Feb 22 17:41:38 2013 +0000
+++ b/eventLogger.h	Wed Feb 27 11:39:07 2013 +0000
@@ -31,7 +31,7 @@
 #define EVENT_LOG_FILENAME "log.json"
 //#define LOGGING_SERVER_URL "http://www.isophonics.net/datacollector/"
 #define LOGGING_SERVER_URL "http://127.0.0.1:8080/testservice/"
-#define UPLOAD_CHUNK_SIZE 100
+#define UPLOAD_CHUNK_SIZE 20
 
 #define QUESTIONNAIRE_ENABLE_TIME 100000 // milliseconds
 #define APP_CREATION_TIME 381429000000   // milliseconds to the time i wrote this wee blighter saves digits
@@ -159,6 +159,15 @@
     void logEvent(const leventType& evtType,const TwoVector& centre = TwoVector(), const double& scale = 1.0, const int& sliderID = -1, const double& sliderVal = 0.0);
     void questionnaireAnswersObtained(vector<int> answers, const char* userComments);
     void urlResponse(ofHttpResponse & response);
+    
+    void questionnaireOK();
+    void eventlogOK();
+    void testConnectionOK();
+    void questionnaireNotOK();
+    void eventlogNotOK();
+    void testConnectionNotOK();
+    
+    void printAll();
 private:
 
     int currentHTTPRequestID;
@@ -182,19 +191,16 @@
     void deleteLogs(); // new user
     bool uploadEventLog(bool async);
     void firstEverAppOpen();
-    void readJsonToLog(const string &jsonFile);
+    void checkExistingLogFile(const string &jsonFile);
     void uploadQuestionnaire();
     bool sendToServer(string functionName, Json::Value jsonData, bool async);
+    
+
+
+        
     Json::Value logsToJson();
     Json::Value questionnaireToJson();
-    void printAll(){
-        cout << "ALL LOGGED EVENTS!: \n";
-        vector<lEvent>::iterator evIter;
-        for(evIter = theEvents.begin(); evIter < theEvents.end(); evIter++){
-            cout << *evIter;
-            
-        }
-    };
+
     
     //
     ServerComms *serverComms;
--- a/eventLogger.mm	Fri Feb 22 17:41:38 2013 +0000
+++ b/eventLogger.mm	Wed Feb 27 11:39:07 2013 +0000
@@ -35,26 +35,129 @@
 
 void EventLogger::init(){
     
-    readJsonToLog(ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME);
+    checkExistingLogFile(ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME);
     sessionStartTime = ofGetSystemTime();
     
     testConnection();
 
     logEvent(APP_STARTED);
 
-    stringstream r;
-    r << LOGGING_SERVER_URL << "testConnection?jsontext=" << "{\"test\":\"test\"}&Content-Length=456";
+    NSString *jsondata;
+    jsondata=@"{\"test\":\"test\"";
+    serverComms = [[ServerComms alloc] init];
 
-    NSString *urlstring;
-    urlstring = @"http://127.0.0.1:8080/testservice/testConnection?jsontext={\"objc post\":\"obj c post\"}";
-    serverComms = [[ServerComms alloc] init];
-    [serverComms postRequest:urlstring];
+}
+//---------------------------------------------------------------------------
+// this reads the persistent log file , checks if we've used the app before and
+// if we've answered questionnaire or not
+void EventLogger::checkExistingLogFile(const string &jsonFile){
+    Json::Value root;
+    Json::Reader reader;
+    
+    /////////////
+    // read file
+    
+    ifstream theFile(jsonFile.c_str());
+    stringstream fileText;
+    string line;
+    if(!theFile){
+        
+        firstEverAppOpen();
+        return;
+    }else{
+        while(theFile){
+            theFile >> line;
+            // cout << line;  // lots!!!!
+            fileText << line;
+        }
+        theFile.close();
+    }
+    
+    // otherwise, we've been in here before
+    
+    /////////////
+    // Parse json
+    cout << "size of log JSON string:" << fileText.str().length() << "BYTES \n";
+    
+    bool parsingSuccessful = reader.parse( fileText.str(), root );
+    
+    if ( !parsingSuccessful )
+    {
+        // report to the user the failure and their locations in the document.
+        std::cout  << "Failed to parse event log JSON: \n"
+        << reader.getFormattedErrorMessages();
+        return;
+    }
+    
+    /////////////////
+    // now put user deets into variables
+    
+    userName = root["userName"].asString();
+    deviceID = root["deviceID"].asLargestInt();
+    nextUploadNumber = root["uploadNumber"].asInt();
+    savedInteractionTime = root["savedInteractionTime"].asLargestInt();
+    questionnaireCompleted = root["questionnaireCompleted"].asBool();
+    questionnaireUploaded = root["questionnaireUploaded"].asBool();
+    interfaceOrder = root["interfaceOrder"].asInt();
+    
 
+    // check for unuploaded evts
+    const Json::Value jlogs = root["events"];
     
-    urlstring = nil;
+    for ( int index = 0; index < jlogs.size(); ++index ) theEvents.push_back(lEvent(jlogs[index]));
+    if(theEvents.size() > nextUploadQty && ! logUploadInProgress){
+        //try to upload
+        uploadEventLog(true);
+    }
+    
+    //////////////
+    // what stage is the experiment at??
+    
+    if(questionnaireCompleted && !questionnaireUploaded){
+        // then read it in and upload it
+        Json::Value JQ = root["questionnaire"];
+        Json::Value JArray = JQ["qAnswers"];
+        if(JArray.size() < 2){
+            cout << "Error - status of questionnaire is wierd\n";
+        }
+        for ( unsigned int i = 0; i < JArray.size(); i++ )
+        {
+            questionnaireAnswers.push_back(JArray[i].asInt());
+        }
+        questionnaireComments = JQ["comments"].toStyledString();
+        uploadQuestionnaire();
+    }
+    //TODO if questionnaire wasn't reached but still opened then set the timer to something sensible
+    
+    if(!questionnaireCompleted){
+        // for now sod it, start from scratch
+        firstEverAppOpen();
+        return;
+    }
+    cout << "Total interaction time: " << savedInteractionTime << '\n';
+    
+    //timer.setInteractionTime(savedInteractionTime);
+    //timer.setOrderFromPrevious(interfaceOrder);
+    
 }
 
 //---------------------------------------------------------------------------
+
+void EventLogger::firstEverAppOpen(){
+    cout<<"no event log file - first APP open\n";
+    nextUploadNumber = 0;
+    deviceID = ofGetSystemTimeMicros();
+    savedInteractionTime = 0;
+    questionnaireCompleted = false;
+    questionnaireUploaded = false;
+    
+    ((testApp *)ofGetAppPtr())->showIntro();
+    consentGiven = false;
+    
+}
+
+
+//---------------------------------------------------------------------------
 void EventLogger::questionnaireAnswersObtained(vector<int> answers, const char* userComments){
     
     questionnaireCompleted = true;
@@ -73,19 +176,7 @@
 }
 //---------------------------------------------------------------------------
 bool EventLogger::sendToServer(string functionName, Json::Value jsonData, bool async = false){
-    bool sent;
-    stringstream request;
 
-    request << LOGGING_SERVER_URL << functionName << "?jsontext=";
-    /*
-    if(functionName == "testConnection"){
-         request = "http://127.0.0.1:8080/testservice/testConnection?jsontext=";
-    }else if(functionName == "questionnaire"){
-         request = "http://127.0.0.1:8080/testservice/questionnaire?jsontext=";
-    }else if(functionName == "eventlog"){
-         request = "http://127.0.0.1:8080/testservice/eventlog?jsontext=";
-    }
-     */
     Json::FastWriter writer;
     string jsontext = writer.write( jsonData );
     
@@ -93,48 +184,53 @@
     if (!jsontext.empty() && jsontext[jsontext.length()-1] == '\n') {
         jsontext.erase(jsontext.length()-1);
     }
+    ostringstream jd;
+    jd << jsontext;
+    NSString *theData = [NSString stringWithUTF8String:jd.str().c_str()];
+    NSString *theType = [NSString stringWithUTF8String:functionName.c_str()];
 
-    request << jsontext;
+    if(async){
+        [serverComms doPostRequest:theType withData:theData];
+    }else{
+        bool success = [serverComms doSyncPostRequest:theType withData:theData];
+        return success;
+    }
     
-    cout << request.str();
-    
-    if(!async){
-        ofURLFileLoader fileLoader;
-        ofHttpResponse resp;
-        resp = fileLoader.get(request.str());
-
-        cout << "HTTP STATUS  " << resp.status << "\n";
-        cout << "HTTP ERROR  " << resp.error << "\n";
-        cout << "HTTP DATA  " << resp.data << "\n"; // ofBuffer
-        
-        stringstream response;
-        response << resp.data;
-        
-        if (resp.status == 200){
-            if(response.str() == "OK"){
-                
-                sent = true;
-            }else{
-                // not ok
-                // problem serverside
-                sent = false;
-            }
-        }else{
-            
-            sent = false;
-            // SHOW AN ALERT TO USER?
-        }
-        
-        return sent;
-    }else{ // async
-        ofURLFileLoader fileLoader;
-        currentHTTPRequestID = ofLoadURLAsync(request.str(), functionName);
-        ofRegisterURLNotification(this);
-        
-        return true; // ???
-    }
 }
 //-----------------------------
+void EventLogger::questionnaireOK(){
+    questionnaireUploaded = true;
+}
+//-----------------------------
+void EventLogger::eventlogOK(){
+    //theEvents.clear();
+    cout << "EVENT LOG UPLOAD SUCCESS\n";
+    nextUploadNumber++;
+    logUploadInProgress = false;
+}
+//-----------------------------
+void EventLogger::testConnectionOK(){
+    cout << "^^^^^^^^ server connection OK ^^^^^^^^ \n";
+    serverConnectionOK = true;
+}
+//-----------------------------
+void EventLogger::questionnaireNotOK(){
+    questionnaireUploaded = false;
+}
+//-----------------------------
+void EventLogger::eventlogNotOK(){
+    // try later
+    nextUploadQty += UPLOAD_CHUNK_SIZE;
+    logUploadInProgress = false;
+}
+//-----------------------------
+void EventLogger::testConnectionNotOK(){
+    cout << "^^^^^^^^ server connection NOT OK ^^^^^^^^ \n";
+    serverConnectionOK = false;
+    // alert?
+    
+}
+/*
 void EventLogger::urlResponse(ofHttpResponse & response){
     cout << "gotHTTPRequestStatus\n";
     cout << "HTTP REQUEST NAME  " << response.request.name << "\n";
@@ -192,94 +288,15 @@
     }
 
 }
+ */
 //---------------------------------------------------------------------------
 bool EventLogger::testConnection(){
     Json::Value root;
-    root["x"] = "y";
-    
-    
+    root["test"] = "test";
     sendToServer("testConnection", root, true);
 
 }
 //---------------------------------------------------------------------------
-// this reads the persistent log file , checks if we've used the app before and
-// if we've answered questionnaire or not
-void EventLogger::readJsonToLog(const string &jsonFile){
-    Json::Value root;
-    Json::Reader reader;
-    
-    
-    ifstream theFile(jsonFile.c_str());
-    stringstream fileText;
-    string line;
-    if(!theFile){
-        
-        firstEverAppOpen();
-        
-        return;
-    }else{
-        while(theFile){
-            theFile >> line;
-            // cout << line;  // lots!!!!
-            fileText << line;
-        }
-        theFile.close();
-    }
-    
-    cout << "size of log JSON string:" << fileText.str().length() << "BYTES \n";
-    
-    bool parsingSuccessful = reader.parse( fileText.str(), root );
-    
-    if ( !parsingSuccessful )
-    {
-        // report to the user the failure and their locations in the document.
-        std::cout  << "Failed to parse event log JSON: \n"
-        << reader.getFormattedErrorMessages();
-        return;
-    }
-    
-    // now put user deets into variables
-    userName = root["userName"].asString();
-    deviceID = root["deviceID"].asLargestInt();
-    nextUploadNumber = root["uploadNumber"].asInt();
-    savedInteractionTime = root["savedInteractionTime"].asLargestInt();
-    questionnaireCompleted = root["questionnaireCompleted"].asBool();
-    questionnaireUploaded = root["questionnaireUploaded"].asBool();
-    interfaceOrder = root["interfaceOrder"].asInt();
-    
-    if(questionnaireCompleted && !questionnaireUploaded){
-        // then read it in and upload it
-        Json::Value JQ = root["questionnaire"];
-        Json::Value JArray = JQ["qAnswers"];
-        if(JArray.size() < 2){
-            cout << "Error - status of questionnaire is wierd\n";
-        }
-        for ( unsigned int i = 0; i < JArray.size(); i++ )
-        {
-            questionnaireAnswers.push_back(JArray[i].asInt());
-        }
-        questionnaireComments = JQ["comments"].toStyledString();
-        uploadQuestionnaire();
-    }
-    
-    // check for unuploaded evts
-    const Json::Value jlogs = root["events"];
-    
-    for ( int index = 0; index < jlogs.size(); ++index ) theEvents.push_back(lEvent(jlogs[index]));
-    if(theEvents.size() > nextUploadQty && ! logUploadInProgress){
-        //try to upload
-        uploadEventLog(true);
-    }
-    // TODO if the total interaction time is greater than a certain amount && no questions answered - questionnaire time!
-    cout << "Total interaction time: " << savedInteractionTime << '\n';
-    
-    //timer.setInteractionTime(savedInteractionTime);
-    //timer.setOrderFromPrevious(interfaceOrder);
-    
-}
-
-
-//---------------------------------------------------------------------------
 
 bool EventLogger::uploadEventLog(bool async){
 
@@ -294,7 +311,7 @@
         }else{
             
             // if success - clear memory
-            theEvents.clear();
+            //theEvents.clear();
             cout << "UPLOAD SUCCESS\n";
             nextUploadNumber++;
         }
@@ -309,20 +326,7 @@
 //----------------------------------------------------------------------------
 //void EventLogger::deleteLogFile(){
 
-//---------------------------------------------------------------------------
 
-void EventLogger::firstEverAppOpen(){
-    cout<<"no event log file - first APP open\n";
-    nextUploadNumber = 0;
-    deviceID = ofGetSystemTimeMicros();
-    savedInteractionTime = 0;
-    questionnaireCompleted = false;
-    questionnaireUploaded = false;
-    
-    ((testApp *)ofGetAppPtr())->showIntro();
-    consentGiven = false;
-    
-}
 //---------------------------------------------------------------------------
 // only called when doing supervised tests
 void EventLogger::newUser(){
@@ -492,9 +496,8 @@
     root["savedInteractionTime"] = savedInteractionTime;
     root["questionnaireCompleted"] = questionnaireCompleted;
     root["questionnaireUploaded"] = questionnaireUploaded;
-    if(questionnaireCompleted && !questionnaireUploaded){
-        root["questionnaire"] = questionnaireToJson();
-    }
+    root["questionnaire"] = questionnaireToJson();
+
     
     int i = 0;
     for(eventIter = theEvents.begin(); eventIter < theEvents.end(); eventIter++){
@@ -520,7 +523,6 @@
         questionnaire[i] = (*aIter);
         i++;
     }
-    cout << questionnaireComments << "\n";
 
     root["qAnswers"] = questionnaire;
     root["comments"] = questionnaireComments;
@@ -531,6 +533,13 @@
     
     return root;
 }
+
 //---------------------------------------------------------------------------
+void EventLogger::printAll(){
+    cout << "-----------------ALL LOGGED EVENTS----------------- \n";
+    vector<lEvent>::iterator evIter;
+    cout << logsToJson() << "\n";
+    cout << "---------------------QUESTIONNAIRE---------------- \n";
+    cout << questionnaireToJson() << "\n";
+};
 //---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
--- a/presetManager.h	Fri Feb 22 17:41:38 2013 +0000
+++ b/presetManager.h	Wed Feb 27 11:39:07 2013 +0000
@@ -114,7 +114,7 @@
     void drawPresetsInRange(const TwoVector min, const TwoVector max);
     void printAll();
     
-    void startupLoadAll();  // get stuff from XML
+    void startLoadAll();  // get stuff from XML
     void exitAndSaveAll();  // save to XML, delete presets array (?)
     void clearAll();
     Json::Value  allPresetsToJson();
--- a/presetManager.mm	Fri Feb 22 17:41:38 2013 +0000
+++ b/presetManager.mm	Wed Feb 27 11:39:07 2013 +0000
@@ -157,12 +157,8 @@
 }
 //---------------------------------------------------------------------------
 void PresetManager::printAll(){
-    cout << "ALL PRESETS: \n";
-    vector<Preset *>::iterator presetIter;
-    for(presetIter = thePresets.begin(); presetIter < thePresets.end(); presetIter++){
-        cout << **presetIter;
-        
-    }
+    cout << "----------------ALL PRESETS-------------: \n";
+    cout << allPresetsToJson() << "\n";
 }
 //---------------------------------------------------------------------------
 void PresetManager::showNameDialog(){
@@ -243,7 +239,7 @@
  
 }
 //----------------------------------------------cu-----------------------------
-void PresetManager::startupLoadAll(){
+void PresetManager::startLoadAll(){
     // get stuff from file
     // load file
 
--- a/testApp.mm	Fri Feb 22 17:41:38 2013 +0000
+++ b/testApp.mm	Wed Feb 27 11:39:07 2013 +0000
@@ -112,7 +112,7 @@
     */
 
     // initialise user logging stuff
-    presetManager.startupLoadAll();
+    presetManager.startLoadAll();
     tsc = [[TimedSessionController alloc] init];
     [tsc setAppRef:(id)this];
     eventLogger.init();
@@ -301,9 +301,8 @@
     int width = 320;
     float dim = (height-10.0*OFX_UI_GLOBAL_WIDGET_SPACING)/10.0;
     // LEFT GUI
-    sliderGUI = new ofxUICanvas(0,100,SLIDER_GUI_WIDTH,getHeight());
-
-    
+    sliderGUI = new ofxUICanvas(0,160,SLIDER_GUI_WIDTH,getHeight());
+  
     // Uh.. loop this
     for(int i = 1; i<=10;i++){