http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/8367ea49/sdks/html5-javascript/usergrid.min.js
----------------------------------------------------------------------
diff --git a/sdks/html5-javascript/usergrid.min.js 
b/sdks/html5-javascript/usergrid.min.js
index edcdb4a..c701528 100644
--- a/sdks/html5-javascript/usergrid.min.js
+++ b/sdks/html5-javascript/usergrid.min.js
@@ -1 +1,2 @@
-window.console=window.console||{};window.console.log=window.console.log||function(){};window.Usergrid=window.Usergrid||{};Usergrid=Usergrid||{};Usergrid.SDK_VERSION="0.10.07";Usergrid.Client=function(a){this.URI=a.URI||"https://api.usergrid.com";if(a.orgName){this.set("orgName",a.orgName)}if(a.appName){this.set("appName",a.appName)}this.buildCurl=a.buildCurl||false;this.logging=a.logging||false;this._callTimeout=a.callTimeout||30000;this._callTimeoutCallback=a.callTimeoutCallback||null;this.logoutCallback=a.logoutCallback||null};Usergrid.Client.prototype.request=function(p,j){var
 o=this;var a=p.method||"GET";var n=p.endpoint;var c=p.body||{};var 
f=p.qs||{};var k=p.mQuery||false;var e=this.get("orgName");var 
d=this.get("appName");if(!k&&!e&&!d){if(typeof(this.logoutCallback)==="function"){return
 this.logoutCallback(true,"no_org_or_app_name_specified")}}if(k){var 
b=this.URI+"/"+n}else{var 
b=this.URI+"/"+e+"/"+d+"/"+n}if(o.getToken()){f.access_token=o.getToken()}var 
m=encodeParams(f);i
 f(m){b+="?"+m}c=JSON.stringify(c);var l=new 
XMLHttpRequest();l.open(a,b,true);if(c){l.setRequestHeader("Content-Type","application/json");l.setRequestHeader("Accept","application/json")}l.onerror=function(q){o._end=new
 Date().getTime();if(o.logging){console.log("success (time: 
"+o.calcTimeDiff()+"): "+a+" "+b)}if(o.logging){console.log("Error: API call 
failed at the network level.")}clearTimeout(h);var 
r=true;if(typeof(j)==="function"){j(r,q)}};l.onload=function(q){o._end=new 
Date().getTime();if(o.logging){console.log("success (time: 
"+o.calcTimeDiff()+"): "+a+" 
"+b)}clearTimeout(h);q=JSON.parse(l.responseText);if(l.status!=200){var 
r=q.error;var s=q.error_description;if(o.logging){console.log("Error 
("+l.status+")("+r+"): 
"+s)}if((r=="auth_expired_session_token")||(r=="auth_missing_credentials")||(r=="auth_unverified_oath")||(r=="expired_token")||(r=="unauthorized")||(r=="auth_invalid")){if(typeof(o.logoutCallback)==="function"){return
 o.logoutCallback(true,q)}}if(typeof(j)==="func
 tion"){j(true,q)}}else{if(typeof(j)==="function"){j(false,q)}}};var 
h=setTimeout(function(){l.abort();if(o._callTimeoutCallback==="function"){o._callTimeoutCallback("API
 CALL TIMEOUT")}else{o.callback("API CALL 
TIMEOUT")}},o._callTimeout);if(this.logging){console.log("calling: "+a+" 
"+b)}if(this.buildCurl){var 
g={uri:b,body:c,method:a};this.buildCurlCall(g)}this._start=new 
Date().getTime();l.send(c)};Usergrid.Client.prototype.createGroup=function(a,d){var
 c=a.getOnExist||false;var a={path:a.path,client:this,data:a};var b=new 
Usergrid.Group(a);b.fetch(function(f,g){var 
e=(f&&"service_resource_not_found"===g.error||"no_name_specified"===g.error||"null_pointer"===g.error)||(!f&&c);if(e){b.save(function(h,j){if(typeof(d)==="function"){d(h,b)}})}else{if(typeof(d)==="function"){d(f,b)}}})};Usergrid.Client.prototype.createEntity=function(b,d){var
 c=b.getOnExist||false;var b={client:this,data:b};var a=new 
Usergrid.Entity(b);a.fetch(function(f,g){var 
e=(f&&"service_resource_not_found"===g.er
 
ror||"no_name_specified"===g.error||"null_pointer"===g.error)||(!f&&c);if(e){a.set(b.data);a.save(function(h,j){if(typeof(d)==="function"){d(h,a,j)}})}else{if(typeof(d)==="function"){d(f,a,g)}}})};Usergrid.Client.prototype.getEntity=function(b,c){var
 b={client:this,data:b};var a=new 
Usergrid.Entity(b);a.fetch(function(d,e){if(typeof(c)==="function"){c(d,a,e)}})};Usergrid.Client.prototype.restoreEntity=function(c){var
 d=JSON.parse(c);var b={client:this,data:d};var a=new Usergrid.Entity(b);return 
a};Usergrid.Client.prototype.createCollection=function(a,c){a.client=this;var 
b=new 
Usergrid.Collection(a,function(d,e){if(typeof(c)==="function"){c(d,b,e)}})};Usergrid.Client.prototype.restoreCollection=function(a){var
 b=JSON.parse(a);b.client=this;var c=new Usergrid.Collection(b);return 
c};Usergrid.Client.prototype.getFeedForUser=function(c,b){var 
a={method:"GET",endpoint:"users/"+c+"/feed"};this.request(a,function(d,e){if(typeof(b)==="function"){if(d){b(d)}else{b(d,e,e.entities)}}})};Userg
 
rid.Client.prototype.createUserActivity=function(b,c,d){c.type="users/"+b+"/activities";var
 c={client:this,data:c};var a=new 
Usergrid.Entity(c);a.save(function(e,f){if(typeof(d)==="function"){d(e,a)}})};Usergrid.Client.prototype.createUserActivityWithEntity=function(a,c,e){var
 d=a.get("username");var 
b={actor:{displayName:d,uuid:a.get("uuid"),username:d,email:a.get("email"),picture:a.get("picture"),image:{duration:0,height:80,url:a.get("picture"),width:80},},verb:"post",content:c};this.createUserActivity(d,b,e)};Usergrid.Client.prototype.calcTimeDiff=function(){var
 c=0;var b=this._end-this._start;try{c=((b/10)/60).toFixed(2)}catch(a){return 
0}return 
c};Usergrid.Client.prototype.setToken=function(a){this.set("token",a)};Usergrid.Client.prototype.getToken=function(){return
 
this.get("token")};Usergrid.Client.prototype.setObject=function(a,b){if(b){b=JSON.stringify(b)}this.set(a,b)};Usergrid.Client.prototype.set=function(b,c){var
 a="apigee_"+b;this[b]=c;if(typeof(Storage)!=="undefined")
 
{if(c){localStorage.setItem(a,c)}else{localStorage.removeItem(a)}}};Usergrid.Client.prototype.getObject=function(a){return
 JSON.parse(this.get(a))};Usergrid.Client.prototype.get=function(b){var 
a="apigee_"+b;if(this[b]){return 
this[b]}else{if(typeof(Storage)!=="undefined"){return 
localStorage.getItem(a)}}return 
null};Usergrid.Client.prototype.signup=function(g,e,d,c,f){var a=this;var 
b={type:"users",username:g,password:e,email:d,name:c};this.createEntity(b,f)};Usergrid.Client.prototype.login=function(e,c,d){var
 a=this;var 
b={method:"POST",endpoint:"token",body:{username:e,password:c,grant_type:"password"}};this.request(b,function(h,j){var
 f={};if(h&&a.logging){console.log("error trying to log user in")}else{var 
g={client:a,data:j.user};f=new 
Usergrid.Entity(g);a.setToken(j.access_token)}if(typeof(d)==="function"){d(h,j,f)}})};Usergrid.Client.prototype.reAuthenticateLite=function(c){var
 a=this;var 
b={method:"GET",endpoint:"management/me",mQuery:true};this.request(b,function(e,d){if(e
 &&a.logging){console.log("error trying to re-authenticate 
user")}else{a.setToken(d.access_token)}if(typeof(c)==="function"){c(e)}})};Usergrid.Client.prototype.reAuthenticate=function(c,d){var
 a=this;var 
b={method:"GET",endpoint:"management/users/"+c,mQuery:true};this.request(b,function(k,l){var
 f={};var j={};var m={};if(k&&a.logging){console.log("error trying to full 
authenticate user")}else{var 
n=l.data;a.setToken(n.token);a.set("email",n.email);localStorage.setItem("accessToken",n.token);localStorage.setItem("userUUID",n.uuid);localStorage.setItem("userEmail",n.email);var
 g={username:n.username,email:n.email,name:n.name,uuid:n.uuid};var 
q={client:a,data:g};m=new Usergrid.Entity(q);f=n.organizations;var p="";try{var 
h=a.get("orgName");p=(f[h])?f[h]:f[Object.keys(f)[0]];a.set("orgName",p.name)}catch(o){k=true;if(a.logging){console.log("error
 selecting 
org")}}j=a.parseApplicationsArray(p);a.selectFirstApp(j);a.setObject("organizations",f);a.setObject("applications",j)}if(typeof(d)===
 
"function"){d(k,n,m,f,j)}})};Usergrid.Client.prototype.loginFacebook=function(a,d){var
 b=this;var 
c={method:"GET",endpoint:"auth/facebook",qs:{fb_access_token:a}};this.request(c,function(g,h){var
 e={};if(g&&b.logging){console.log("error trying to log user in")}else{var 
f={client:b,data:h.user};e=new 
Usergrid.Entity(f);b.setToken(h.access_token)}if(typeof(d)==="function"){d(g,h,e)}})};Usergrid.Client.prototype.getLoggedInUser=function(c){if(!this.getToken()){c(true,null,null)}else{var
 a=this;var 
b={method:"GET",endpoint:"users/me"};this.request(b,function(f,g){if(f){if(a.logging){console.log("error
 trying to log user in")}if(typeof(c)==="function"){c(f,g,null)}}else{var 
e={client:a,data:g.entities[0]};var d=new 
Usergrid.Entity(e);if(typeof(c)==="function"){c(f,g,d)}}})}};Usergrid.Client.prototype.isLoggedIn=function(){if(this.getToken()){return
 true}return 
false};Usergrid.Client.prototype.logout=function(){this.setToken(null)};Usergrid.Client.prototype.buildCurlCall=function(c){var
 b
 ="curl";var e=(c.method||"GET").toUpperCase();var a=c.body||{};var 
d=c.uri;if(e==="POST"){b+=" -X POST"}else{if(e==="PUT"){b+=" -X 
PUT"}else{if(e==="DELETE"){b+=" -X DELETE"}else{b+=" -X GET"}}}b+=" 
"+d;if(a!=='"{}"'&&e!=="GET"&&e!=="DELETE"){b+=" -d 
'"+a+"'"}console.log(b);return 
b};Usergrid.Client.prototype.getDisplayImage=function(a,c,b){try{if(c){return 
c}var 
b=b||50;if(a.length){return"https://secure.gravatar.com/avatar/"+MD5(a)+"?s="+b+encodeURI("&d=https://apigee.com/usergrid/images/user_profile.png";)}else{return"https://apigee.com/usergrid/images/user_profile.png"}}catch(d){return"https://apigee.com/usergrid/images/user_profile.png"}};Usergrid.Entity=function(a){if(a){this._data=a.data||{};this._client=a.client||{}}};Usergrid.Entity.prototype.serialize=function(){return
 
JSON.stringify(this._data)};Usergrid.Entity.prototype.get=function(a){if(a){return
 this._data[a]}else{return 
this._data}};Usergrid.Entity.prototype.set=function(a,b){if(typeof 
a==="object"){for(var c in a){th
 is._data[c]=a[c]}}else{if(typeof a==="string"){if(b===null){delete 
this._data[a]}else{this._data[a]=b}}else{this._data={}}}};Usergrid.Entity.prototype.save=function(h){var
 c=this.get("type");var 
g="POST";if(isUUID(this.get("uuid"))){g="PUT";c+="/"+this.get("uuid")}var 
a=this;var e={};var f=this.get();for(var d in 
f){if(d==="metadata"||d==="created"||d==="modified"||d==="type"||d==="activated"||d==="uuid"){continue}e[d]=f[d]}var
 
b={method:g,endpoint:c,body:e};this._client.request(b,function(n,k){if(n&&a._client.logging){console.log("could
 not save entity");if(typeof(h)==="function"){return 
h(n,k,a)}}else{if(k.entities){if(k.entities.length){var 
j=k.entities[0];a.set(j);var 
p=k.path;while(p.substring(0,1)==="/"){p=p.substring(1)}a.set("type",p)}}var 
o=((a.get("type")==="user"||a.get("type")==="users")&&f.oldpassword&&f.newpassword);if(o){var
 m={};m.oldpassword=f.oldpassword;m.newpassword=f.newpassword;var 
l={method:"PUT",endpoint:c+"/password",body:m};a._client.request(l,function(q,r)
 {if(q&&a._client.logging){console.log("could not update 
user")}a.set("oldpassword",null);a.set("newpassword",null);if(typeof(h)==="function"){h(q,r,a)}})}else{if(typeof(h)==="function"){h(n,k,a)}}}})};Usergrid.Entity.prototype.fetch=function(e){var
 d=this.get("type");var 
a=this;if(this.get("uuid")){d+="/"+this.get("uuid")}else{if(d==="users"){if(this.get("username")){d+="/"+this.get("username")}else{if(typeof(e)==="function"){var
 c="no_name_specified";if(a._client.logging){console.log(c)}return 
e(true,{error:c},a)}}}else{if(d==="a 
path"){if(this.get("path")){d+="/"+encodeURIComponent(this.get("name"))}else{if(typeof(e)==="function"){var
 c="no_name_specified";if(a._client.logging){console.log(c)}return 
e(true,{error:c},a)}}}else{if(this.get("name")){d+="/"+encodeURIComponent(this.get("name"))}else{if(typeof(e)==="function"){var
 c="no_name_specified";if(a._client.logging){console.log(c)}return 
e(true,{error:c},a)}}}}}var 
b={method:"GET",endpoint:d};this._client.request(b,function(g,h)
 {if(g&&a._client.logging){console.log("could not get 
entity")}else{if(h.user){a.set(h.user);a._json=JSON.stringify(h.user,null,2)}else{if(h.entities){if(h.entities.length){var
 
f=h.entities[0];a.set(f)}}}}if(typeof(e)==="function"){e(g,h,a)}})};Usergrid.Entity.prototype.destroy=function(e){var
 
d=this.get("type");if(isUUID(this.get("uuid"))){d+="/"+this.get("uuid")}else{if(typeof(e)==="function"){var
 c="Error trying to delete object - no uuid 
specified.";if(a._client.logging){console.log(c)}e(true,c)}}var a=this;var 
b={method:"DELETE",endpoint:d};this._client.request(b,function(f,g){if(f&&a._client.logging){console.log("entity
 could not be 
deleted")}else{a.set(null)}if(typeof(e)==="function"){e(f,g)}})};Usergrid.Entity.prototype.connect=function(a,d,h){var
 k=this;var f=d.get("type");var 
c=this.getEntityId(d);if(!c){if(typeof(h)==="function"){var g="Error trying to 
delete object - no uuid 
specified.";if(k._client.logging){console.log(g)}h(true,g)}return}var 
e=this.get("type");var b=thi
 s.getEntityId(this);if(!b){if(typeof(h)==="function"){var g="Error in connect 
- no uuid specified.";if(k._client.logging){console.log(g)}h(true,g)}return}var 
j=e+"/"+b+"/"+a+"/"+f+"/"+c;var 
l={method:"POST",endpoint:j};this._client.request(l,function(m,n){if(m&&k._client.logging){console.log("entity
 could not be 
connected")}if(typeof(h)==="function"){h(m,n)}})};Usergrid.Entity.prototype.getEntityId=function(a){var
 
b=false;if(isUUID(a.get("uuid"))){b=a.get("uuid")}else{if(type==="users"){b=a.get("username")}else{if(a.get("name")){b=a.get("name")}}}return
 b};Usergrid.Entity.prototype.getConnections=function(d,h){var c=this;var 
b=this.get("type");var 
a=this.getEntityId(this);if(!a){if(typeof(h)==="function"){var f="Error in 
getConnections - no uuid 
specified.";if(c._client.logging){console.log(f)}h(true,f)}return}var 
g=b+"/"+a+"/"+d+"/";var 
e={method:"GET",endpoint:g};this._client.request(e,function(l,m){if(l&&c._client.logging){console.log("entity
 could not be connected")}c[d]={};var 
 k=m.entities.length;for(var 
j=0;j<k;j++){if(m.entities[j].type==="user"){c[d][m.entities[j].username]=m.entities[j]}else{c[d][m.entities[j].name]=m.entities[j]}}if(typeof(h)==="function"){h(l,m,m.entities)}})};Usergrid.Entity.prototype.getGroups=function(d){var
 a=this;var c="users/"+this.get("uuid")+"/groups";var 
b={method:"GET",endpoint:c};this._client.request(b,function(e,f){if(e&&a._client.logging){console.log("entity
 could not be 
connected")}a.groups=f.entities;if(typeof(d)==="function"){d(e,f,f.entities)}})};Usergrid.Entity.prototype.getActivities=function(d){var
 a=this;var c=this.get("type")+"/"+this.get("uuid")+"/activities";var 
b={method:"GET",endpoint:c};this._client.request(b,function(e,f){if(e&&a._client.logging){console.log("entity
 could not be connected")}for(entity in 
f.entities){f.entities[entity].createdDate=(new 
Date(f.entities[entity].created)).toUTCString()}a.activities=f.entities;if(typeof(d)==="function"){d(e,f,f.entities)}})};Usergrid.Entity.prototype.getFollow
 ing=function(d){var a=this;var c="users/"+this.get("uuid")+"/following";var 
b={method:"GET",endpoint:c};this._client.request(b,function(e,f){if(e&&a._client.logging){console.log("could
 not get user following")}for(entity in 
f.entities){f.entities[entity].createdDate=(new 
Date(f.entities[entity].created)).toUTCString();var 
g=a._client.getDisplayImage(f.entities[entity].email,f.entities[entity].picture);f.entities[entity]._portal_image_icon=g}a.following=f.entities;if(typeof(d)==="function"){d(e,f,f.entities)}})};Usergrid.Entity.prototype.getFollowers=function(d){var
 a=this;var c="users/"+this.get("uuid")+"/followers";var 
b={method:"GET",endpoint:c};this._client.request(b,function(e,f){if(e&&a._client.logging){console.log("could
 not get user followers")}for(entity in 
f.entities){f.entities[entity].createdDate=(new 
Date(f.entities[entity].created)).toUTCString();var 
g=a._client.getDisplayImage(f.entities[entity].email,f.entities[entity].picture);f.entities[entity]._portal_image_icon=g}
 
a.followers=f.entities;if(typeof(d)==="function"){d(e,f,f.entities)}})};Usergrid.Entity.prototype.getRoles=function(d){var
 a=this;var c=this.get("type")+"/"+this.get("uuid")+"/roles";var 
b={method:"GET",endpoint:c};this._client.request(b,function(e,f){if(e&&a._client.logging){console.log("could
 not get user 
roles")}a.roles=f.entities;if(typeof(d)==="function"){d(e,f,f.entities)}})};Usergrid.Entity.prototype.getPermissions=function(d){var
 a=this;var c=this.get("type")+"/"+this.get("uuid")+"/permissions";var 
b={method:"GET",endpoint:c};this._client.request(b,function(g,m){if(g&&a._client.logging){console.log("could
 not get user permissions")}var p=[];if(m.data){var r=m.data;var o=0;for(var n 
in r){o++;var h=r[n];var l=h.split(":");var s="";var 
q=l[0];if(l.length>1){s=l[0];q=l[1]}s.replace("*","get,post,put,delete");var 
e=s.split(",");var 
f={};f.get="no";f.post="no";f.put="no";f["delete"]="no";for(var k in 
e){f[e[k]]="yes"}p.push({operations:f,path:q,perm:h})}}a.permissions=p;if(typeof
 
(d)==="function"){d(g,m,m.entities)}})};Usergrid.Entity.prototype.disconnect=function(a,d,h){var
 k=this;var f=d.get("type");var 
c=this.getEntityId(d);if(!c){if(typeof(h)==="function"){var g="Error trying to 
delete object - no uuid 
specified.";if(k._client.logging){console.log(g)}h(true,g)}return}var 
e=this.get("type");var 
b=this.getEntityId(this);if(!b){if(typeof(h)==="function"){var g="Error in 
connect - no uuid 
specified.";if(k._client.logging){console.log(g)}h(true,g)}return}var 
j=e+"/"+b+"/"+a+"/"+f+"/"+c;var 
l={method:"DELETE",endpoint:j};this._client.request(l,function(m,n){if(m&&k._client.logging){console.log("entity
 could not be 
disconnected")}if(typeof(h)==="function"){h(m,n)}})};Usergrid.Collection=function(b,e){if(b){this._client=b.client;this._type=b.type;this.qs=b.qs||{};this._list=b.list||[];this._iterator=b.iterator||-1;this._previous=b.previous||[];this._next=b.next||null;this._cursor=b.cursor||null;if(b.list){var
 d=b.list.length;for(var c=0;c<d;c++){var a=this._clie
 
nt.restoreEntity(b.list[c]);this._list[c]=a}}}if(e){this.fetch(e)}};Usergrid.Collection.prototype.serialize=function(){var
 
c={};c.type=this._type;c.qs=this.qs;c.iterator=this._iterator;c.previous=this._previous;c.next=this._next;c.cursor=this._cursor;this.resetEntityPointer();var
 b=0;c.list=[];while(this.hasNextEntity()){var 
a=this.getNextEntity();c.list[b]=a.serialize();b++}c=JSON.stringify(c);return 
c};Usergrid.Collection.prototype.addCollection=function(b,a,d){self=this;a.client=this._client;var
 c=new 
Usergrid.Collection(a,function(g,h){if(typeof(d)==="function"){c.resetEntityPointer();while(c.hasNextEntity()){var
 e=c.getNextEntity();var f=e.get("email");var 
j=self._client.getDisplayImage(e.get("email"),e.get("picture"));e._portal_image_icon=j}self[b]=c;d(g,c)}})};Usergrid.Collection.prototype.fetch=function(d){var
 b=this;var a=this.qs;if(this._cursor){a.cursor=this._cursor}else{delete 
a.cursor}var 
c={method:"GET",endpoint:this._type,qs:this.qs};this._client.request(c,function(g,
 h){if(g&&b._client.logging){console.log("error getting collection")}else{var 
o=h.cursor||null;b.saveCursor(o);if(h.entities){b.resetEntityPointer();var 
l=h.entities.length;b._list=[];for(var j=0;j<l;j++){var 
e=h.entities[j].uuid;if(e){var 
f=h.entities[j]||{};b._baseType=h.entities[j].type;f.type=b._type;var 
n={type:b._type,client:b._client,uuid:e,data:f};var m=new 
Usergrid.Entity(n);m._json=JSON.stringify(f,null,2);var 
k=b._list.length;b._list[k]=m}}}}if(typeof(d)==="function"){d(g,h)}})};Usergrid.Collection.prototype.addEntity=function(b,c){var
 a=this;b.type=this._type;this._client.createEntity(b,function(f,d){if(!f){var 
e=a._list.length;a._list[e]=d}if(typeof(c)==="function"){c(f,d)}})};Usergrid.Collection.prototype.addExistingEntity=function(a){var
 
b=this._list.length;this._list[b]=a};Usergrid.Collection.prototype.destroyEntity=function(b,c){var
 a=this;b.destroy(function(d,e){if(d){if(a._client.logging){console.log("could 
not destroy entity")}if(typeof(c)==="function"){c(d,e)}}el
 
se{a.fetch(c)}});this.removeEntity(b)};Usergrid.Collection.prototype.removeEntity=function(a){var
 b=a.get("uuid");for(key in this._list){var 
c=this._list[key];if(c.get("uuid")===b){return this._list.splice(key,1)}}return 
false};Usergrid.Collection.prototype.getEntityByUUID=function(c,e){for(key in 
this._list){var d=this._list[key];if(d.get("uuid")===c){return d}}var 
b={data:{type:this._type,uuid:c},client:this._client};var a=new 
Usergrid.Entity(b);a.fetch(e)};Usergrid.Collection.prototype.getFirstEntity=function(){var
 a=this._list.length;if(a>0){return this._list[0]}return 
null};Usergrid.Collection.prototype.getLastEntity=function(){var 
a=this._list.length;if(a>0){return this._list[a-1]}return 
null};Usergrid.Collection.prototype.hasNextEntity=function(){var 
a=this._iterator+1;var b=(a>=0&&a<this._list.length);if(b){return true}return 
false};Usergrid.Collection.prototype.getNextEntity=function(){this._iterator++;var
 a=(this._iterator>=0&&this._iterator<=this._list.length);if(a){retur
 n this._list[this._iterator]}return 
false};Usergrid.Collection.prototype.hasPrevEntity=function(){var 
b=this._iterator-1;var a=(b>=0&&b<this._list.length);if(a){return true}return 
false};Usergrid.Collection.prototype.getPrevEntity=function(){this._iterator--;var
 a=(this._iterator>=0&&this._iterator<=this._list.length);if(a){return 
this.list[this._iterator]}return 
false};Usergrid.Collection.prototype.resetEntityPointer=function(){this._iterator=-1};Usergrid.Collection.prototype.saveCursor=function(a){if(this._next!==a){this._next=a}};Usergrid.Collection.prototype.resetPaging=function(){this._previous=[];this._next=null;this._cursor=null};Usergrid.Collection.prototype.hasNextPage=function(){return(this._next)};Usergrid.Collection.prototype.getNextPage=function(a){if(this.hasNextPage()){this._previous.push(this._cursor);this._cursor=this._next;this._list=[];this.fetch(a)}};Usergrid.Collection.prototype.hasPreviousPage=function(){return(this._previous.length>0)};Usergrid.Collection.prot
 
otype.getPreviousPage=function(a){if(this.hasPreviousPage()){this._next=null;this._cursor=this._previous.pop();this._list=[];this.fetch(a)}};Usergrid.Group=function(a,b){this._path=a.path;this._list=[];this._client=a.client;this._data=a.data||{};this._data.type="groups"};Usergrid.Group.prototype=new
 Usergrid.Entity();Usergrid.Group.prototype.fetch=function(f){var a=this;var 
e="groups/"+this._path;var d="groups/"+this._path+"/users";var 
b={method:"GET",endpoint:e};var 
c={method:"GET",endpoint:d};this._client.request(b,function(h,j){if(h){if(a._client.logging){console.log("error
 getting group")}if(typeof(f)==="function"){f(h,j)}}else{if(j.entities){var 
g=j.entities[0];a._data=g||{};a._client.request(c,function(p,q){if(p&&a._client.logging){console.log("error
 getting group users")}else{if(q.entities){var 
o=q.entities.length;a._list=[];for(var l=0;l<o;l++){var 
n=q.entities[l].uuid;if(n){var r=q.entities[l]||{};var 
m={type:r.type,client:a._client,uuid:n,data:r};var k=new Usergrid.Entity(
 
m);a._list.push(k)}}}}if(typeof(f)==="function"){f(p,q,a._list)}})}}})};Usergrid.Group.prototype.members=function(a){if(typeof(a)==="function"){a(null,this._list)}};Usergrid.Group.prototype.add=function(b,c){var
 a=this;var 
b={method:"POST",endpoint:"groups/"+this._path+"/users/"+b.user.get("username")};this._client.request(b,function(d,e){if(d){if(typeof(c)==="function"){c(d,e,e.entities)}}else{a.fetch(c)}})};Usergrid.Group.prototype.remove=function(b,c){var
 a=this;var 
b={method:"DELETE",endpoint:"groups/"+this._path+"/users/"+b.user.get("username")};this._client.request(b,function(d,e){if(d){if(typeof(c)==="function"){c(d,e)}}else{a.fetch(c)}})};Usergrid.Group.prototype.feed=function(d){var
 a=this;var c="groups/"+this._path+"/feed";var 
b={method:"GET",endpoint:c};this._client.request(b,function(e,f){if(e&&a.logging){console.log("error
 trying to log user 
in")}if(typeof(d)==="function"){d(e,f,f.entities)}})};Usergrid.Group.prototype.createGroupActivity=function(c,d){var
 b=c.user;var 
 
c={actor:{displayName:b.get("username"),uuid:b.get("uuid"),username:b.get("username"),email:b.get("email"),picture:b.get("picture"),image:{duration:0,height:80,url:b.get("picture"),width:80},},verb:"post",content:c.content};c.type="groups/"+this._path+"/activities";var
 c={client:this._client,data:c};var a=new 
Usergrid.Entity(c);a.save(function(e,f){if(typeof(d)==="function"){d(e,a)}})};function
 isUUID(a){var 
b=/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;if(!a){return
 false}return b.test(a)}function encodeParams(d){tail=[];var b=[];if(d 
instanceof Array){for(i in d){b=d[i];if((b instanceof 
Array)&&(b.length>1)){tail.push(b[0]+"="+encodeURIComponent(b[1]))}}}else{for(var
 a in d){if(d.hasOwnProperty(a)){var c=d[a];if(c instanceof Array){for(i in 
c){b=c[i];tail.push(a+"="+encodeURIComponent(b))}}else{tail.push(a+"="+encodeURIComponent(c))}}}}return
 tail.join("&")};
\ No newline at end of file
+/*! [email protected] 2014-01-16 */
+function isUUID(uuid){var 
uuidValueRegex=/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;return
 uuid?uuidValueRegex.test(uuid):!1}function encodeParams(params){var 
i,tail=[],item=[];if(params instanceof Array)for(i in 
params)item=params[i],item instanceof 
Array&&item.length>1&&tail.push(item[0]+"="+encodeURIComponent(item[1]));else 
for(var key in params)if(params.hasOwnProperty(key)){var 
value=params[key];if(value instanceof Array)for(i in 
value)item=value[i],tail.push(key+"="+encodeURIComponent(item));else 
tail.push(key+"="+encodeURIComponent(value))}return 
tail.join("&")}window.console=window.console||{},window.console.log=window.console.log||function(){},window.Usergrid=window.Usergrid||{},Usergrid=Usergrid||{},Usergrid.USERGRID_SDK_VERSION="0.10.07",Usergrid.Client=function(options){this.URI=options.URI||"https://api.usergrid.com",options.orgName&&this.set("orgName",options.orgName),options.appName&&this.set("appName",options.appName),this.buildCu
 
rl=options.buildCurl||!1,this.logging=options.logging||!1,this._callTimeout=options.callTimeout||3e4,this._callTimeoutCallback=options.callTimeoutCallback||null,this.logoutCallback=options.logoutCallback||null},Usergrid.Client.prototype.request=function(options,callback){var
 
self=this,method=options.method||"GET",endpoint=options.endpoint,body=options.body||{},qs=options.qs||{},mQuery=options.mQuery||!1,orgName=this.get("orgName"),appName=this.get("appName");if(!mQuery&&!orgName&&!appName&&"function"==typeof
 this.logoutCallback)return 
this.logoutCallback(!0,"no_org_or_app_name_specified");uri=mQuery?this.URI+"/"+endpoint:this.URI+"/"+orgName+"/"+appName+"/"+endpoint,self.getToken()&&(qs.access_token=self.getToken());var
 
encoded_params=encodeParams(qs);encoded_params&&(uri+="?"+encoded_params),body=JSON.stringify(body);var
 xhr=new 
XMLHttpRequest;xhr.open(method,uri,!0),body&&(xhr.setRequestHeader("Content-Type","application/json"),xhr.setRequestHeader("Accept","application/json")),xh
 r.onerror=function(response){self._end=(new 
Date).getTime(),self.logging&&console.log("success (time: 
"+self.calcTimeDiff()+"): "+method+" "+uri),self.logging&&console.log("Error: 
API call failed at the network level."),clearTimeout(timeout);var 
err=!0;"function"==typeof 
callback&&callback(err,response)},xhr.onload=function(response){self._end=(new 
Date).getTime(),self.logging&&console.log("success (time: 
"+self.calcTimeDiff()+"): "+method+" 
"+uri),clearTimeout(timeout);try{response=JSON.parse(xhr.responseText)}catch(e){response={error:"unhandled_error",error_description:xhr.responseText},xhr.status=200===xhr.status?400:xhr.status,console.error(e)}if(200!=xhr.status){var
 
error=response.error,error_description=response.error_description;if(self.logging&&console.log("Error
 ("+xhr.status+")("+error+"): 
"+error_description),("auth_expired_session_token"==error||"auth_missing_credentials"==error||"auth_unverified_oath"==error||"expired_token"==error||"unauthorized"==error||"auth_invalid"
 ==error)&&"function"==typeof self.logoutCallback)return 
self.logoutCallback(!0,response);"function"==typeof 
callback&&callback(!0,response)}else"function"==typeof 
callback&&callback(!1,response)};var 
timeout=setTimeout(function(){xhr.abort(),"function"===self._callTimeoutCallback?self._callTimeoutCallback("API
 CALL TIMEOUT"):self.callback("API CALL 
TIMEOUT")},self._callTimeout);if(this.logging&&console.log("calling: "+method+" 
"+uri),this.buildCurl){var 
curlOptions={uri:uri,body:body,method:method};this.buildCurlCall(curlOptions)}this._start=(new
 
Date).getTime(),xhr.send(body)},Usergrid.Client.prototype.buildAssetURL=function(uuid){var
 
self=this,qs={},assetURL=this.URI+"/"+this.orgName+"/"+this.appName+"/assets/"+uuid+"/data";self.getToken()&&(qs.access_token=self.getToken());var
 encoded_params=encodeParams(qs);return 
encoded_params&&(assetURL+="?"+encoded_params),assetURL},Usergrid.Client.prototype.createGroup=function(options,callback){var
 getOnExist=options.getOnExist||!1;options
 ={path:options.path,client:this,data:options};var group=new 
Usergrid.Group(options);group.fetch(function(err,data){var 
okToSave=err&&"service_resource_not_found"===data.error||"no_name_specified"===data.error||"null_pointer"===data.error||!err&&getOnExist;okToSave?group.save(function(err){"function"==typeof
 callback&&callback(err,group)}):"function"==typeof 
callback&&callback(err,group)})},Usergrid.Client.prototype.createEntity=function(options,callback){var
 
getOnExist=options.getOnExist||!1,options={client:this,data:options},entity=new 
Usergrid.Entity(options);entity.fetch(function(err,data){var 
okToSave=err&&"service_resource_not_found"===data.error||"no_name_specified"===data.error||"null_pointer"===data.error||!err&&getOnExist;okToSave?(entity.set(options.data),entity.save(function(err,data){"function"==typeof
 callback&&callback(err,entity,data)})):"function"==typeof 
callback&&callback(err,entity,data)})},Usergrid.Client.prototype.getEntity=function(options,callback){var
 options
 ={client:this,data:options},entity=new 
Usergrid.Entity(options);entity.fetch(function(err,data){"function"==typeof 
callback&&callback(err,entity,data)})},Usergrid.Client.prototype.restoreEntity=function(serializedObject){var
 data=JSON.parse(serializedObject),options={client:this,data:data},entity=new 
Usergrid.Entity(options);return 
entity},Usergrid.Client.prototype.createCollection=function(options,callback){options.client=this;var
 collection=new 
Usergrid.Collection(options,function(err,data){"function"==typeof 
callback&&callback(err,collection,data)})},Usergrid.Client.prototype.restoreCollection=function(serializedObject){var
 data=JSON.parse(serializedObject);data.client=this;var collection=new 
Usergrid.Collection(data);return 
collection},Usergrid.Client.prototype.getFeedForUser=function(username,callback){var
 
options={method:"GET",endpoint:"users/"+username+"/feed"};this.request(options,function(err,data){"function"==typeof
 callback&&(err?callback(err):callback(err,data,data.entit
 
ies))})},Usergrid.Client.prototype.createUserActivity=function(user,options,callback){options.type="users/"+user+"/activities";var
 options={client:this,data:options},entity=new 
Usergrid.Entity(options);entity.save(function(err){"function"==typeof 
callback&&callback(err,entity)})},Usergrid.Client.prototype.createUserActivityWithEntity=function(user,content,callback){var
 
username=user.get("username"),options={actor:{displayName:username,uuid:user.get("uuid"),username:username,email:user.get("email"),picture:user.get("picture"),image:{duration:0,height:80,url:user.get("picture"),width:80}},verb:"post",content:content};this.createUserActivity(username,options,callback)},Usergrid.Client.prototype.calcTimeDiff=function(){var
 
seconds=0,time=this._end-this._start;try{seconds=(time/10/60).toFixed(2)}catch(e){return
 0}return 
seconds},Usergrid.Client.prototype.setToken=function(token){this.set("token",token)},Usergrid.Client.prototype.getToken=function(){return
 this.get("token")},Usergrid.Clie
 
nt.prototype.setObject=function(key,value){value&&(value=JSON.stringify(value)),this.set(key,value)},Usergrid.Client.prototype.set=function(key,value){var
 keyStore="apigee_"+key;this[key]=value,"undefined"!=typeof 
Storage&&(value?localStorage.setItem(keyStore,value):localStorage.removeItem(keyStore))},Usergrid.Client.prototype.getObject=function(key){return
 JSON.parse(this.get(key))},Usergrid.Client.prototype.get=function(key){var 
keyStore="apigee_"+key;return this[key]?this[key]:"undefined"!=typeof 
Storage?localStorage.getItem(keyStore):null},Usergrid.Client.prototype.signup=function(username,password,email,name,callback){var
 
options={type:"users",username:username,password:password,email:email,name:name};this.createEntity(options,callback)},Usergrid.Client.prototype.login=function(username,password,callback){var
 
self=this,options={method:"POST",endpoint:"token",body:{username:username,password:password,grant_type:"password"}};this.request(options,function(err,data){var
 user={};if(
 err&&self.logging)console.log("error trying to log user in");else{var 
options={client:self,data:data.user};user=new 
Usergrid.Entity(options),self.setToken(data.access_token)}"function"==typeof 
callback&&callback(err,data,user)})},Usergrid.Client.prototype.reAuthenticateLite=function(callback){var
 
self=this,options={method:"GET",endpoint:"management/me",mQuery:!0};this.request(options,function(err,response){err&&self.logging?console.log("error
 trying to re-authenticate 
user"):self.setToken(response.access_token),"function"==typeof 
callback&&callback(err)})},Usergrid.Client.prototype.reAuthenticate=function(email,callback){var
 
self=this,options={method:"GET",endpoint:"management/users/"+email,mQuery:!0};this.request(options,function(err,response){var
 
data,organizations={},applications={},user={};if(err&&self.logging)console.log("error
 trying to full authenticate 
user");else{data=response.data,self.setToken(data.token),self.set("email",data.email),localStorage.setItem("accessToken",dat
 
a.token),localStorage.setItem("userUUID",data.uuid),localStorage.setItem("userEmail",data.email);var
 
userData={username:data.username,email:data.email,name:data.name,uuid:data.uuid},options={client:self,data:userData};user=new
 Usergrid.Entity(options),organizations=data.organizations;var org="";try{var 
existingOrg=self.get("orgName");org=organizations[existingOrg]?organizations[existingOrg]:organizations[Object.keys(organizations)[0]],self.set("orgName",org.name)}catch(e){err=!0,self.logging&&console.log("error
 selecting 
org")}applications=self.parseApplicationsArray(org),self.selectFirstApp(applications),self.setObject("organizations",organizations),self.setObject("applications",applications)}"function"==typeof
 
callback&&callback(err,data,user,organizations,applications)})},Usergrid.Client.prototype.loginFacebook=function(facebookToken,callback){var
 
self=this,options={method:"GET",endpoint:"auth/facebook",qs:{fb_access_token:facebookToken}};this.request(options,function(err,data){v
 ar user={};if(err&&self.logging)console.log("error trying to log user 
in");else{var options={client:self,data:data.user};user=new 
Usergrid.Entity(options),self.setToken(data.access_token)}"function"==typeof 
callback&&callback(err,data,user)})},Usergrid.Client.prototype.getLoggedInUser=function(callback){if(this.getToken()){var
 
self=this,options={method:"GET",endpoint:"users/me"};this.request(options,function(err,data){if(err)self.logging&&console.log("error
 trying to log user in"),"function"==typeof 
callback&&callback(err,data,null);else{var 
options={client:self,data:data.entities[0]},user=new 
Usergrid.Entity(options);"function"==typeof 
callback&&callback(err,data,user)}})}else 
callback(!0,null,null)},Usergrid.Client.prototype.isLoggedIn=function(){return 
this.getToken()&&"null"!=this.getToken()?!0:!1},Usergrid.Client.prototype.logout=function(){this.setToken(null)},Usergrid.Client.prototype.buildCurlCall=function(options){var
 curl="curl",method=(options.method||"GET").toUpperCase()
 ,body=options.body||{},uri=options.uri;return curl+="POST"===method?" -X 
POST":"PUT"===method?" -X PUT":"DELETE"===method?" -X DELETE":" -X GET",curl+=" 
"+uri,"undefined"!=typeof 
window&&(body=JSON.stringify(body)),'"{}"'!==body&&"GET"!==method&&"DELETE"!==method&&(curl+="
 -d 
'"+body+"'"),console.log(curl),curl},Usergrid.Client.prototype.getDisplayImage=function(email,picture,size){try{if(picture)return
 picture;var size=size||50;return 
email.length?"https://secure.gravatar.com/avatar/"+MD5(email)+"?s="+size+encodeURI("&d=https://apigee.com/usergrid/images/user_profile.png";):"https://apigee.com/usergrid/images/user_profile.png"}catch(e){return"https://apigee.com/usergrid/images/user_profile.png"}},Usergrid.Entity=function(options){options&&(this._data=options.data||{},this._client=options.client||{})},Usergrid.Entity.prototype.serialize=function(){return
 
JSON.stringify(this._data)},Usergrid.Entity.prototype.get=function(field){return
 field?this._data[field]:this._data},Usergrid.Entit
 y.prototype.set=function(key,value){if("object"==typeof key)for(var field in 
key)this._data[field]=key[field];else"string"==typeof key?null===value?delete 
this._data[key]:this._data[key]=value:this._data={}},Usergrid.Entity.prototype.save=function(callback){var
 
type=this.get("type"),method="POST";isUUID(this.get("uuid"))&&(method="PUT",type+="/"+this.get("uuid"));var
 
self=this,data={},entityData=this.get(),oldpassword=(this.get("password"),this.get("oldpassword")),newpassword=this.get("newpassword");for(var
 item in 
entityData)"metadata"!==item&&"created"!==item&&"modified"!==item&&"oldpassword"!==item&&"newpassword"!==item&&"type"!==item&&"activated"!==item&&"uuid"!==item&&(data[item]=entityData[item]);var
 
options={method:method,endpoint:type,body:data};this._client.request(options,function(err,retdata){if(self.set("password",null),self.set("oldpassword",null),self.set("newpassword",null),err&&self._client.logging){if(console.log("could
 not save entity"),"function"==typeof callback)
 return 
callback(err,retdata,self)}else{if(retdata.entities&&retdata.entities.length){var
 entity=retdata.entities[0];self.set(entity);for(var 
path=retdata.path;"/"===path.substring(0,1);)path=path.substring(1);self.set("type",path)}var
 
needPasswordChange=("user"===self.get("type")||"users"===self.get("type"))&&oldpassword&&newpassword;if(needPasswordChange){var
 pwdata={};pwdata.oldpassword=oldpassword,pwdata.newpassword=newpassword;var 
options={method:"PUT",endpoint:type+"/password",body:pwdata};self._client.request(options,function(err,data){err&&self._client.logging&&console.log("could
 not update 
user"),self.set("oldpassword",null),self.set("newpassword",null),"function"==typeof
 callback&&callback(err,data,self)})}else"function"==typeof 
callback&&callback(err,retdata,self)}})},Usergrid.Entity.prototype.fetch=function(callback){var
 type=this.get("type"),self=this;try{if(void 0===type)throw"cannot fetch 
entity, no entity type 
specified";if(this.get("uuid"))type+="/"+this.get("uuid");
 else 
if("users"===type&&this.get("username"))type+="/"+this.get("username");else 
if(this.get("name"))type+="/"+encodeURIComponent(this.get("name"));else 
if("function"==typeof callback)throw"no_name_specified"}catch(e){return 
self._client.logging&&console.log(e),callback(!0,{error:e},self)}var 
options={method:"GET",endpoint:type};this._client.request(options,function(err,data){if(err&&self._client.logging)console.log("could
 not get entity");else 
if(data.user)self.set(data.user),self._json=JSON.stringify(data.user,null,2);else
 if(data.entities&&data.entities.length){var 
entity=data.entities[0];self.set(entity)}"function"==typeof 
callback&&callback(err,data,self)})},Usergrid.Entity.prototype.destroy=function(callback){var
 
self=this,type=this.get("type");if(isUUID(this.get("uuid")))type+="/"+this.get("uuid");else
 if("function"==typeof callback){var error="Error trying to delete object - no 
uuid 
specified.";self._client.logging&&console.log(error),callback(!0,error)}var 
options={method:"
 
DELETE",endpoint:type};this._client.request(options,function(err,data){err&&self._client.logging?console.log("entity
 could not be deleted"):self.set(null),"function"==typeof 
callback&&callback(err,data)})},Usergrid.Entity.prototype.connect=function(connection,entity,callback){var
 
error,self=this,connecteeType=entity.get("type"),connectee=this.getEntityId(entity);if(!connectee)return
 void("function"==typeof callback&&(error="Error trying to delete object - no 
uuid 
specified.",self._client.logging&&console.log(error),callback(!0,error)));var 
connectorType=this.get("type"),connector=this.getEntityId(this);if(!connector)return
 void("function"==typeof callback&&(error="Error in connect - no uuid 
specified.",self._client.logging&&console.log(error),callback(!0,error)));var 
endpoint=connectorType+"/"+connector+"/"+connection+"/"+connecteeType+"/"+connectee,options={method:"POST",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("entit
 y could not be connected"),"function"==typeof 
callback&&callback(err,data)})},Usergrid.Entity.prototype.getEntityId=function(entity){var
 id=!1;return 
isUUID(entity.get("uuid"))?id=entity.get("uuid"):"users"===type?id=entity.get("username"):entity.get("name")&&(id=entity.get("name")),id},Usergrid.Entity.prototype.getConnections=function(connection,callback){var
 
self=this,connectorType=this.get("type"),connector=this.getEntityId(this);if(connector){var
 
endpoint=connectorType+"/"+connector+"/"+connection+"/",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("entity
 could not be connected"),self[connection]={};for(var 
length=data.entities.length,i=0;length>i;i++)"user"===data.entities[i].type?self[connection][data.entities[i].username]=data.entities[i]:self[connection][data.entities[i].name]=data.entities[i];"function"==typeof
 callback&&callback(err,data,data.entities)})}else if("function"==typeof 
callback){va
 r error="Error in getConnections - no uuid 
specified.";self._client.logging&&console.log(error),callback(!0,error)}},Usergrid.Entity.prototype.getGroups=function(callback){var
 
self=this,endpoint="users/"+this.get("uuid")+"/groups",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("entity
 could not be connected"),self.groups=data.entities,"function"==typeof 
callback&&callback(err,data,data.entities)})},Usergrid.Entity.prototype.getActivities=function(callback){var
 
self=this,endpoint=this.get("type")+"/"+this.get("uuid")+"/activities",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("entity
 could not be connected");for(var entity in 
data.entities)data.entities[entity].createdDate=new 
Date(data.entities[entity].created).toUTCString();self.activities=data.entities,"function"==typeof
 callback&&callback(err,data,data.entities)})},User
 grid.Entity.prototype.getFollowing=function(callback){var 
self=this,endpoint="users/"+this.get("uuid")+"/following",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("could
 not get user following");for(var entity in 
data.entities){data.entities[entity].createdDate=new 
Date(data.entities[entity].created).toUTCString();var 
image=self._client.getDisplayImage(data.entities[entity].email,data.entities[entity].picture);data.entities[entity]._portal_image_icon=image}self.following=data.entities,"function"==typeof
 
callback&&callback(err,data,data.entities)})},Usergrid.Entity.prototype.getFollowers=function(callback){var
 
self=this,endpoint="users/"+this.get("uuid")+"/followers",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("could
 not get user followers");for(var entity in 
data.entities){data.entities[entity].createdDate=new Date(data.
 entities[entity].created).toUTCString();var 
image=self._client.getDisplayImage(data.entities[entity].email,data.entities[entity].picture);data.entities[entity]._portal_image_icon=image}self.followers=data.entities,"function"==typeof
 
callback&&callback(err,data,data.entities)})},Usergrid.Entity.prototype.getRoles=function(callback){var
 
self=this,endpoint=this.get("type")+"/"+this.get("uuid")+"/roles",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("could
 not get user roles"),self.roles=data.entities,"function"==typeof 
callback&&callback(err,data,data.entities)})},Usergrid.Entity.prototype.getPermissions=function(callback){var
 
self=this,endpoint=this.get("type")+"/"+this.get("uuid")+"/permissions",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("could
 not get user permissions");var permissions=[];if(data.data){var perms=data.da
 ta,count=0;for(var i in perms){count++;var 
perm=perms[i],parts=perm.split(":"),ops_part="",path_part=parts[0];parts.length>1&&(ops_part=parts[0],path_part=parts[1]),ops_part.replace("*","get,post,put,delete");var
 
ops=ops_part.split(","),ops_object={};ops_object.get="no",ops_object.post="no",ops_object.put="no",ops_object.delete="no";for(var
 j in 
ops)ops_object[ops[j]]="yes";permissions.push({operations:ops_object,path:path_part,perm:perm})}}self.permissions=permissions,"function"==typeof
 
callback&&callback(err,data,data.entities)})},Usergrid.Entity.prototype.disconnect=function(connection,entity,callback){var
 
error,self=this,connecteeType=entity.get("type"),connectee=this.getEntityId(entity);if(!connectee)return
 void("function"==typeof callback&&(error="Error trying to delete object - no 
uuid 
specified.",self._client.logging&&console.log(error),callback(!0,error)));var 
connectorType=this.get("type"),connector=this.getEntityId(this);if(!connector)return
 void("function"==typeof callba
 ck&&(error="Error in connect - no uuid 
specified.",self._client.logging&&console.log(error),callback(!0,error)));var 
endpoint=connectorType+"/"+connector+"/"+connection+"/"+connecteeType+"/"+connectee,options={method:"DELETE",endpoint:endpoint};this._client.request(options,function(err,data){err&&self._client.logging&&console.log("entity
 could not be disconnected"),"function"==typeof 
callback&&callback(err,data)})},Usergrid.Collection=function(options,callback){if(options&&(this._client=options.client,this._type=options.type,this.qs=options.qs||{},this._list=options.list||[],this._iterator=options.iterator||-1,this._previous=options.previous||[],this._next=options.next||null,this._cursor=options.cursor||null,options.list))for(var
 count=options.list.length,i=0;count>i;i++){var 
entity=this._client.restoreEntity(options.list[i]);this._list[i]=entity}callback&&this.fetch(callback)},Usergrid.Collection.prototype.serialize=function(){var
 data={};data.type=this._type,data.qs=this.qs,data.i
 
terator=this._iterator,data.previous=this._previous,data.next=this._next,data.cursor=this._cursor,this.resetEntityPointer();var
 i=0;for(data.list=[];this.hasNextEntity();){var 
entity=this.getNextEntity();data.list[i]=entity.serialize(),i++}return 
data=JSON.stringify(data)},Usergrid.Collection.prototype.addCollection=function(collectionName,options,callback){self=this,options.client=this._client;var
 collection=new Usergrid.Collection(options,function(err){if("function"==typeof 
callback){for(collection.resetEntityPointer();collection.hasNextEntity();){var 
user=collection.getNextEntity(),image=(user.get("email"),self._client.getDisplayImage(user.get("email"),user.get("picture")));user._portal_image_icon=image}self[collectionName]=collection,callback(err,collection)}})},Usergrid.Collection.prototype.fetch=function(callback){var
 self=this,qs=this.qs;this._cursor?qs.cursor=this._cursor:delete qs.cursor;var 
options={method:"GET",endpoint:this._type,qs:this.qs};this._client.request(options,
 function(err,data){if(err&&self._client.logging)console.log("error getting 
collection");else{var 
cursor=data.cursor||null;if(self.saveCursor(cursor),data.entities){self.resetEntityPointer();var
 count=data.entities.length;self._list=[];for(var i=0;count>i;i++){var 
uuid=data.entities[i].uuid;if(uuid){var 
entityData=data.entities[i]||{};self._baseType=data.entities[i].type,entityData.type=self._type;var
 
entityOptions={type:self._type,client:self._client,uuid:uuid,data:entityData},ent=new
 Usergrid.Entity(entityOptions);ent._json=JSON.stringify(entityData,null,2);var 
ct=self._list.length;self._list[ct]=ent}}}}"function"==typeof 
callback&&callback(err,data)})},Usergrid.Collection.prototype.addEntity=function(options,callback){var
 
self=this;options.type=this._type,this._client.createEntity(options,function(err,entity){if(!err){var
 count=self._list.length;self._list[count]=entity}"function"==typeof 
callback&&callback(err,entity)})},Usergrid.Collection.prototype.addExistingEntity=function(en
 tity){var 
count=this._list.length;this._list[count]=entity},Usergrid.Collection.prototype.destroyEntity=function(entity,callback){var
 
self=this;entity.destroy(function(err,data){err?(self._client.logging&&console.log("could
 not destroy entity"),"function"==typeof 
callback&&callback(err,data)):self.fetch(callback)}),this.removeEntity(entity)},Usergrid.Collection.prototype.removeEntity=function(entity){var
 uuid=entity.get("uuid");for(var key in this._list){var 
listItem=this._list[key];if(listItem.get("uuid")===uuid)return 
this._list.splice(key,1)}return!1},Usergrid.Collection.prototype.getEntityByUUID=function(uuid,callback){for(var
 key in this._list){var 
listItem=this._list[key];if(listItem.get("uuid")===uuid)return listItem}var 
options={data:{type:this._type,uuid:uuid},client:this._client},entity=new 
Usergrid.Entity(options);entity.fetch(callback)},Usergrid.Collection.prototype.getFirstEntity=function(){var
 count=this._list.length;return count>0?this._list[0]:null},Usergrid.Collecti
 on.prototype.getLastEntity=function(){var count=this._list.length;return 
count>0?this._list[count-1]:null},Usergrid.Collection.prototype.hasNextEntity=function(){var
 next=this._iterator+1,hasNextElement=next>=0&&next<this._list.length;return 
hasNextElement?!0:!1},Usergrid.Collection.prototype.getNextEntity=function(){this._iterator++;var
 hasNextElement=this._iterator>=0&&this._iterator<=this._list.length;return 
hasNextElement?this._list[this._iterator]:!1},Usergrid.Collection.prototype.hasPrevEntity=function(){var
 
previous=this._iterator-1,hasPreviousElement=previous>=0&&previous<this._list.length;return
 
hasPreviousElement?!0:!1},Usergrid.Collection.prototype.getPrevEntity=function(){this._iterator--;var
 hasPreviousElement=this._iterator>=0&&this._iterator<=this._list.length;return 
hasPreviousElement?this._list[this._iterator]:!1},Usergrid.Collection.prototype.resetEntityPointer=function(){this._iterator=-1},Usergrid.Collection.prototype.saveCursor=function(cursor){this._next!==curs
 
or&&(this._next=cursor)},Usergrid.Collection.prototype.resetPaging=function(){this._previous=[],this._next=null,this._cursor=null},Usergrid.Collection.prototype.hasNextPage=function(){return
 
this._next},Usergrid.Collection.prototype.getNextPage=function(callback){this.hasNextPage()&&(this._previous.push(this._cursor),this._cursor=this._next,this._list=[],this.fetch(callback))},Usergrid.Collection.prototype.hasPreviousPage=function(){return
 
this._previous.length>0},Usergrid.Collection.prototype.getPreviousPage=function(callback){this.hasPreviousPage()&&(this._next=null,this._cursor=this._previous.pop(),this._list=[],this.fetch(callback))},Usergrid.Group=function(options){this._path=options.path,this._list=[],this._client=options.client,this._data=options.data||{},this._data.type="groups"},Usergrid.Group.prototype=new
 Usergrid.Entity,Usergrid.Group.prototype.fetch=function(callback){var 
self=this,groupEndpoint="groups/"+this._path,memberEndpoint="groups/"+this._path+"/users",groupOpti
 
ons={method:"GET",endpoint:groupEndpoint},memberOptions={method:"GET",endpoint:memberEndpoint};this._client.request(groupOptions,function(err,data){if(err)self._client.logging&&console.log("error
 getting group"),"function"==typeof callback&&callback(err,data);else 
if(data.entities){var 
groupData=data.entities[0];self._data=groupData||{},self._client.request(memberOptions,function(err,data){if(err&&self._client.logging)console.log("error
 getting group users");else if(data.entities){var 
count=data.entities.length;self._list=[];for(var i=0;count>i;i++){var 
uuid=data.entities[i].uuid;if(uuid){var 
entityData=data.entities[i]||{},entityOptions={type:entityData.type,client:self._client,uuid:uuid,data:entityData},entity=new
 Usergrid.Entity(entityOptions);self._list.push(entity)}}}"function"==typeof 
callback&&callback(err,data,self._list)})}})},Usergrid.Group.prototype.members=function(callback){"function"==typeof
 callback&&callback(null,this._list)},Usergrid.Group.prototype.add=function(opt
 ions,callback){var 
self=this,options={method:"POST",endpoint:"groups/"+this._path+"/users/"+options.user.get("username")};this._client.request(options,function(error,data){error?"function"==typeof
 
callback&&callback(error,data,data.entities):self.fetch(callback)})},Usergrid.Group.prototype.remove=function(options,callback){var
 
self=this,options={method:"DELETE",endpoint:"groups/"+this._path+"/users/"+options.user.get("username")};this._client.request(options,function(error,data){error?"function"==typeof
 
callback&&callback(error,data):self.fetch(callback)})},Usergrid.Group.prototype.feed=function(callback){var
 
self=this,endpoint="groups/"+this._path+"/feed",options={method:"GET",endpoint:endpoint};this._client.request(options,function(err,data){err&&self.logging&&console.log("error
 trying to log user in"),"function"==typeof 
callback&&callback(err,data,data.entities)})},Usergrid.Group.prototype.createGroupActivity=function(options,callback){var
 user=options.user;options={client:this._
 
client,data:{actor:{displayName:user.get("username"),uuid:user.get("uuid"),username:user.get("username"),email:user.get("email"),picture:user.get("picture"),image:{duration:0,height:80,url:user.get("picture"),width:80}},verb:"post",content:options.content,type:"groups/"+this._path+"/activities"}};var
 entity=new 
Usergrid.Entity(options);entity.save(function(err){"function"==typeof 
callback&&callback(err,entity)})};var 
COUNTER_RESOLUTIONS={ALL:"all",MINUTE:"minute",FIVE_MINUTES:"five_minutes",HALF_HOUR:"half_hour",HOUR:"hour",SIX_DAY:"six_day",DAY:"day",WEEK:"week",MONTH:"month"};COUNTER_RESOLUTIONS.valueOf=function(str){return
 Object.keys(COUNTER_RESOLUTIONS).forEach(function(res){return 
COUNTER_RESOLUTIONS[res]===str?COUNTER_RESOLUTIONS[res]:void 
0}),COUNTER_RESOLUTIONS.ALL},Usergrid.Event=function(options,callback){var 
self=this;this._client=options.client,this._data=options.data||{},this._data.category=options.category||"UNKNOWN",this._data.timestamp=options.timestamp||0,this._dat
 a.type="events",this._data.counters=options.counters||{},"function"==typeof 
callback&&callback.call(self,!1,self)},Usergrid.Event.prototype=new 
Usergrid.Entity,Usergrid.Event.prototype.fetch=function(callback){this.getData(null,null,null,null,callback)},Usergrid.Event.prototype.increment=function(name,value,callback){var
 self=this;return isNaN(value)&&"function"==typeof 
callback?callback.call(self,!0,"'value' for increment, decrement must be a 
number"):(self._data.counters[name]=parseInt(value),self.save(callback))},Usergrid.Event.prototype.decrement=function(name,value,callback){this.increment(name,-value,callback)},Usergrid.Event.prototype.reset=function(name,callback){this.increment(name,0,callback)},Usergrid.Event.prototype.getData=function(start,end,resolution,counters,callback){var
 
start_time,end_time,res=COUNTER_RESOLUTIONS.valueOf(resolution);if(start)switch(typeof
 
start){case"undefined":start_time=0;break;case"number":start_time=start;break;case"string":start_time=isNaN(sta
 
rt)?Date.parse(start):parseInt(start);break;default:start_time=Date.parse(start.toString())}if(end)switch(typeof
 
end){case"undefined":end_time=Date.now();break;case"number":end_time=end;break;case"string":end_time=isNaN(end)?Date.parse(end):parseInt(end);break;default:end_time=Date.parse(end.toString())}var
 self=this;(null===counters||"undefined"==typeof 
counters)&&(counters=Object.keys(this._data.counters));var 
params=Object.keys(counters).map(function(counter){return["counter",encodeURIComponent(counters[counter])].join("=")});params.push("resolution="+res),params.push("start_time="+String(start_time)),params.push("end_time="+String(end_time));var
 
endpoint="counters?"+params.join("&"),options={endpoint:endpoint};this._client.request(options,function(err,data){data.counters&&data.counters.length&&data.counters.forEach(function(counter){self._data.counters[counter.name]=counter.value||counter.values}),"function"==typeof
 callback&&callback.call(self,err,data)})};
\ No newline at end of file

Reply via email to