(function(a,b,c,d,e,f){varg=function(b,c){vard=f.storage(b,c,"base"),e={};e.username=b.username||"",e.applicationname=b.applicationname||"untitled";varg="jio/local_user_array",h="jio/local_file_name_array/"+e.username+"/"+e.applicationname,i=d.serialized;returnd.serialized=function(){vara=i();returna.applicationname=e.applicationname,a.username=e.username,a},d.validateState=function(){returne.username?"":'Need at least one parameter: "username".'},e.getUserArray=function(){returna.getItem(g)||[]},e.addUser=function(b){varc=e.getUserArray();c.push(b),a.setItem(g,c)},e.userExists=function(a){varb=e.getUserArray(),c,d;for(c=0,d=b.length;c<d;c+=1)if(b[c]===a)return!0;return!1},e.getFileNameArray=function(){returna.getItem(h)||[]},e.addFileName=function(b){varc=e.getFileNameArray();c.push(b),a.setItem(h,c)},e.removeFileName=function(b){varc,d,f=e.getFileNameArray(),g=[];for(c=0,d=f.length;c<d;c+=1)f[c]!==b&&g.push(f[c]);a.setItem(h,g)},d.saveDocument=function(b){setTimeout(function(){varc=null,f="jio/local/"+e.username+"/"+e.applicationname+"/"+b.getPath();c=a.getItem(f),c?(c.last_modified=Date.now(),c.content=b.getContent()):(c={name:b.getPath(),content:b.getContent(),creation_date:Date.now(),last_modified:Date.now()},e.userExists(e.username)||e.addUser(e.username),e.addFileName(b.getPath())),a.setItem(f,c),d.success()})},d.loadDocument=function(b){setTimeout(function(){varc=null;c=a.getItem("jio/local/"+e.username+"/"+e.applicationname+"/"+b.getPath()),c?(b.getOption("metadata_only")&&deletec.content,d.success(c)):d.error({status:404,statusText:"Not Found.",message:'Document "'+b.getPath()+'" not found in localStorage.'})})},d.getDocumentList=function(b){setTimeout(function(){varc=[],f=[],g,h,i="key",j="jio/local/"+e.username+"/"+e.applicationname,k={};f=e.getFileNameArray();for(g=0,h=f.length;g<h;g+=1)k=a.getItem(j+"/"+f[g]),k&&(b.getOption("metadata_only")?c.push({name:k.name,creation_date:k.creation_date,last_modified:k.last_modified}):c.push({name:k.name,content:k.content,creation_date:k.creation_date,last_modified:k.last_modified}));d.success(c)})},d.removeDocument=function(b){setTimeout(function(){varc="jio/local/"+e.username+"/"+e.applicationname+"/"+b.getPath();a.deleteItem(c),e.removeFileName(b.getPath()),d.success()})},d};f.addStorageType("local",g);varh=function(a,d){vare=f.storage(a,d,"base"),g={};g.username=a.username||"",g.applicationname=a.applicationname||"untitled",g.url=a.url||"",g.password=a.password||"";varh=e.serialized;returne.serialized=function(){vara=h();returna.username=g.username,a.applicationname=g.applicationname,a.url=g.url,a.password=g.password,a},e.validateState=function(){returng.username&&g.url?"":'Need at least 2 parameters: "username" and "url".'},g.newAsyncModule=function(){vara={};returna.call=function(a,b,c){returna._wait=a._wait||{},a._wait[b]?(a._wait[b]--,function(){}):(c=c||[],a[b].apply(a[b],c))},a.neverCall=function(a,b){a._wait=a._wait||{},a._wait[b]=-1},a.wait=function(a,b,c){a._wait=a._wait||{},a._wait[b]=c},a.end=function(){a.call=function(){}},a},e.saveDocument=function(a){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"PUT",data:a.getContent(),async:!0,dataType:"text",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(){e.success()},error:function(b){b.message='Cannot save "'+a.getPath()+'" into DAVStorage.',e.retry(b)}})},e.loadDocument=function(a){vard={},f=function(){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"GET",async:!0,dataType:"text",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(a){d.content=a,e.success(d)},error:function(b){b.status===404?(b.message='Document "'+a.getPath()+'" not found in localStorage.',e.error(b)):(b.message='Cannot load "'+a.getPath()+'" from DAVStorage.',e.retry(b))}})};d.name=a.getPath(),b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"PROPFIND",async:!0,dataType:"xml",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(c){b(c).find("lp1\\:getlastmodified, getlastmodified").each(function(){d.last_modified=b(this).text()}),b(c).find("lp1\\:creationdate, creationdate").each(function(){d.creation_date=b(this).text()}),a.getOption("metadata_only")?e.success(d):f()},error:function(b){b.message='Cannot load "'+a.getPath()+'" informations from DAVStorage.',b.status===404?e.error(b):e.retry(b)}})},e.getDocumentList=function(a){vard=[],f={},h=[],i=g.newAsyncModule(),j={};j.getContent=function(a){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.name,type:"GET",async:!0,dataType:"text",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(b){a.content=b,d.push(a),i.call(j,"success")},error:function(a){a.message="Cannot get a document content from DAVStorage.",i.call(j,"error",[a])}})},j.getDocumentList=function(){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/",async:!0,type:"PROPFIND",dataType:"xml",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password),Depth:"1"},success:function(c){vare=b(c).find("D\\:response, response"),g=e.length;i.wait(j,"success",g-2),e.each(function(c,e){if(c>0){f={},b(e).find("D\\:href, href").each(function(){h=b(this).text().split("/"),f.name=h[h.length-1]?h[h.length-1]:h[h.length-2]+"/"});if(f.name===".htaccess"||f.name===".htpasswd")return;b(e).find("lp1\\:getlastmodified, getlastmodified").each(function(){f.last_modified=b(this).text()}),b(e).find("lp1\\:creationdate, creationdate").each(function(){f.creation_date=b(this).text()}),a.getOption("metadata_only")?(d.push(f),i.call(j,"success")):i.call(j,"getContent",[f])}})},error:function(a){a.message="Cannot get a document list from DAVStorage.",a.status===404?i.call(j,"error",[a]):i.call(j,"retry",[a])}})},j.retry=function(a){i.neverCall(j,"retry"),i.neverCall(j,"success"),i.neverCall(j,"error"),e.retry(a)},j.error=function(a){i.neverCall(j,"retry"),i.neverCall(j,"success"),i.neverCall(j,"error"),e.error(a)},j.success=function(){i.neverCall(j,"retry"),i.neverCall(j,"success"),i.neverCall(j,"error"),e.success(d)},i.call(j,"getDocumentList")},e.removeDocument=function(a){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"DELETE",async:!0,headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(){e.success()},error:function(a){a.status===404?e.success():(a.message='Cannot remove "'+e.getFileName()+'" from DAVStorage.',e.retry(a))}})},e};f.addStorageType("dav",h);vari=function(a,b){varc=f.storage(a,b,"handler"),d={};d.return_value_array=[],d.storagelist=a.storagelist||[],d.nb_storage=d.storagelist.length;vare=c.serialized;returnc.serialized=function(){vara=e();returna.storagelist=d.storagelist,a},c.validateState=function(){returnd.storagelist.length===0?'Need at least one parameter: "storagelist" containing at least one storage.':""},d.isTheLast=function(){returnd.return_value_array.length===d.nb_storage},d.doJob=function(a,b){vare=!1,f=[],g,h=function(a){d.return_value_array.push(a),e||(f.push(a),d.isTheLast()&&c.error({status:207,statusText:"Multi-Status",message:b,array:f}))},i=function(a){d.return_value_array.push(a),e||(e=!0,c.success(a))};for(g=0;g<d.nb_storage;g+=1){varj=a.clone(),k=c.newStorage(d.storagelist[g]);j.onErrorDo(h),j.onSuccessDo(i),c.addJob(k,j)}},c.saveDocument=function(a){d.doJob(a,'All save "'+a.getPath()+'" requests have failed.'),c.end()},c.loadDocument=function(a){d.doJob(a,'All load "'+a.getPath()+'" requests have failed.'),c.end()},c.getDocumentList=function(a){d.doJob(a,"All get document list requests have failed."),c.end()},c.removeDocument=function(a){d.doJob(a,'All remove "'+a.getPath()+'" requests have failed.'),c.end()},c};f.addStorageType("replicate",i);varj=function(b,c){vard=f.storage(b,c,"handler"),e={},g=b.storage||!1;e.secondstorage_spec=b.storage||{type:"base"},e.secondstorage_string=JSON.stringify(e.secondstorage_spec);varh="jio/indexed_storage_array",i="jio/indexed_file_array/"+e.secondstorage_string,j=d.serialized;returnd.serialized=function(){vara=j();returna.storage=e.secondstorage_spec,a},d.validateState=function(){returng?"":'Need at least one parameter: "storage" containing storage specifications.'},e.isStorageArrayIndexed=function(){returna.getItem(h)?!0:!1},e.getIndexedStorageArray=function(){returna.getItem(h)||[]},e.indexStorage=function(b){varc=e.getIndexedStorageArray();c.push(typeofb=="string"?b:JSON.stringify(b)),a.setItem(h,c)},e.isAnIndexedStorage=function(a){varb=typeofa=="string"?a:JSON.stringify(a),c,d,f=e.getIndexedStorageArray();for(c=0,d=f.length;c<d;c+=1)if(JSON.stringify(f[c])===b)return!0;return!1},e.fileArrayExists=function(){returna.getItem(i)?!0:!1},e.getFileArray=function(){returna.getItem(i)||[]},e.setFileArray=function(b){returna.setItem(i,b)},e.isFileIndexed=function(a){varb,c,d=e.getFileArray();for(b=0,c=d.length;b<c;b+=1)if(d[b].name===a)return!0;return!1},e.addFile=function(b){varc=e.getFileArray();c.push(b),a.setItem(i,c)},e.removeFile=function(b){varc,d,f=e.getFileArray(),g=[];for(c=0,d=f.length;c<d;c+=1)f[c].name!==b&&g.push(f[c]);a.setItem(i,g)},e.update=function(){vara=function(a){e.isAnIndexedStorage(e.secondstorage_string)||e.indexStorage(e.secondstorage_string),e.setFileArray(a)};d.addJob(d.newStorage(e.secondstorage_spec),d.newCommand("getDocumentList",{path:".",option:{success:a,max_retry:3}}))},d.saveDocument=function(a){varb=a.clone();b.onSuccessDo(function(b){e.isFileIndexed(a.getPath())||e.addFile({name:a.getPath(),last_modified:0,creation_date:0}),e.update(),d.success()}),b.onErrorDo(function(a){d.error(a)}),d.addJob(d.newStorage(e.secondstorage_spec),b)},d.loadDocument=function(a){varb,c,f,g,h=function(a){d.success(a)},i=function(a){d.error(a)},j=function(){varb=a.clone();b.onErrorDo(i),b.onSuccessDo(h),d.addJob(d.newStorage(e.secondstorage_spec),b)};e.update(),a.getOption("metadata_only")?setTimeout(function(){if(e.fileArrayExists()){b=e.getFileArray();for(c=0,f=b.length;c<f;c+=1)if(b[c].name===a.getPath())returnd.success(b[c])}elsej()},100):j()},d.getDocumentList=function(a){varb,c,f=!1;e.update(),a.getOption("metadata_only")?(b=setInterval(function(){f&&(d.error({status:0,statusText:"Timeout",message:"The request has timed out."}),clearInterval(b)),e.fileArrayExists()&&(d.success(e.getFileArray()),clearInterval(b))},100),setTimeout(function(){f=!0},1e4)):(c=a.clone(),c.onSuccessDo(function(a){d.success(a)}),c.onErrorDo(function(a){d.error(a)}),d.addJob(d.newStorage(e.secondstorage_spec),c))},d.removeDocument=function(a){varb=a.clone();b.onSuccessDo(function(b){e.removeFile(a.getPath()),e.update(),d.success()}),b.onErrorDo(function(a){d.error(a)}),d.addJob(d.newStorage(e.secondstorage_spec),b)},d};f.addStorageType("indexed",j);vark=function(a,c){vare=f.storage(a,c,"handler"),g={},h=a.storage?!0:!1;g.username=a.username||"",g.password=a.password||"",g.secondstorage_spec=a.storage||{type:"base"},g.secondstorage_string=JSON.stringify(g.secondstorage_string);vari=e.serialized;returne.serialized=function(){vara=i();returna.username=g.username,a.password=g.password,a.storage=g.secondstorage_string,a},e.validateState=function(){returng.username&&h?"":'Need at least two parameters: "username" and "storage".'},g.encrypt_param_object={iv:"kaprWwY/Ucr7pumXoTHbpA",v:1,iter:1e3,ks:256,ts:128,mode:"ccm",adata:"",cipher:"aes",salt:"K4bmZG9d704"},g.decrypt_param_object={iv:"kaprWwY/Ucr7pumXoTHbpA",ks:256,ts:128,salt:"K4bmZG9d704"},g.encrypt=function(a,b){varc=d.encrypt(g.username+":"+g.password,a,g.encrypt_param_object);b(JSON.parse(c).ct)},g.decrypt=function(a,c){vare,f=b.extend(!0,{},g.decrypt_param_object);f.ct=a||"",f=JSON.stringify(f);try{e=d.decrypt(g.username+":"+g.password,f)}catch(h){c({status:0,statusText:"Decrypt Fail",message:"Unable to decrypt."});return}c(undefined,e)},g.newAsyncModule=function(){vara={};returna.call=function(a,b,c){returna._wait=a._wait||{},a._wait[b]?(a._wait[b]--,function(){}):(c=c||[],a[b].apply(a[b],c))},a.neverCall=function(a,b){a._wait=a._wait||{},a._wait[b]=-1},a.wait=function(a,b,c){a._wait=a._wait||{},a._wait[b]=c},a.end=function(){a.call=function(){}},a},e.saveDocument=function(a){varb,c,d=g.newAsyncModule(),f={};f.encryptFilePath=function(){g.encrypt(a.getPath(),function(a){b=a,d.call(f,"save")})},f.encryptFileContent=function(){g.encrypt(a.getContent(),function(a){c=a,d.call(f,"save")})},f.save=function(){vard=a.cloneOption(),f;d.success=function(){e.success()},d.error=function(a){e.error(a)},f=e.newCommand("saveDocument",{path:b,content:c,option:d}),e.addJob(e.newStorage(g.secondstorage_spec),f)},d.wait(f,"save",1),d.call(f,"encryptFilePath"),d.call(f,"encryptFileContent")},e.loadDocument=function(a){varb,c,d=g.newAsyncModule(),f={};f.encryptFilePath=function(){g.encrypt(a.getPath(),function(a){b=a,d.call(f,"loadDocument")})},f.loadDocument=function(){varc=a.cloneOption(),d;c.error=f.loadOnError,c.success=f.loadOnSuccess,d=e.newCommand("loadDocument",{path:b,option:c}),e.addJob(e.newStorage(g.secondstorage_spec),d)},f.loadOnSuccess=function(b){b.name=a.getPath(),a.getOption("metadata_only")?e.success(b):g.decrypt(b.content,function(a,c){a?e.error(a):(b.content=c,e.success(b))})},f.loadOnError=function(a){e.error(a)},d.call(f,"encryptFilePath")},e.getDocumentList=function(a){varb=[],c=g.newAsyncModule(),d={};d.getDocumentList=function(){varb=a.cloneOption();b.success=d.getListOnSuccess,b.error=d.getListOnError,e.addJob(e.newStorage(g.secondstorage_spec),e.newCommand("getDocumentList",{path:a.getPath(),option:b}))},d.getListOnSuccess=function(e){b=e;varf,h=function(e){g.decrypt(b[e].name,function(a,b){a?c.call(d,"error",[a]):c.call(d,"pushResult",[b,e,"name"])}),a.getOption("metadata_only")||g.decrypt(b[e].content,function(a,b){a?c.call(d,"error",[a]):c.call(d,"pushResult",[b,e,"content"])})};a.getOption("metadata_only")?c.wait(d,"success",e.length-1):c.wait(d,"success",e.length*2-1);for(f=0;f<b.length;f+=1)h(f)},d.getListOnError=function(a){c.call(d,"error",[a])},d.pushResult=function(a,e,f){b[e][f]=a,c.call(d,"success")},d.error=function(a){c.end(),e.error(a)},d.success=function(){c.end(),e.success(b)},c.call(d,"getDocumentList")},e.removeDocument=function(a){varb,c={};c.encryptFilePath=function(){g.encrypt(a.getPath(),function(a){b=a,c.removeDocument()})},c.removeDocument=function(){vard=a.cloneOption();d.error=c.removeOnError,d.success=c.removeOnSuccess,e.addJob(e.newStorage(g.secondstorage_spec),e.newCommand("removeDocument",{path:b,option:d}))},c.removeOnSuccess=function(a){e.success()},c.removeOnError=function(a){e.error(a)},c.encryptFilePath()},e};f.addStorageType("crypt",k);varl=function(b,c){vard=f.storage(b,c,"handler"),g={};b=b||{},c=c||{};varh=b.storage?!0:!1;g.secondstorage_spec=b.storage||{type:"base"},g.secondstorage_string=JSON.stringify(g.secondstorage_spec);vari="jio/conflictmanager/"+g.secondstorage_string+"/",j=function(){},k=d.serialized;returnd.serialized=function(){vara=k();returna.storage=g.secondstorage_spec,a},d.validateState=function(){returnh?"":'Need at least one parameter: "storage".'},g.getDistantMetadata=function(a,b,c,e){varf=a.cloneOption();f.metadata_only=!1,f.max_retry=a.getOption("max_retry")||3,f.error=e,f.success=c;varh=d.newCommand("loadDocument",{path:b,option:f});d.addJob(d.newStorage(g.secondstorage_spec),h)},g.saveMetadataToDistant=function(a,b,c,e,f){varh=a.cloneOption();h.error=f,h.success=e;vari=d.newCommand("saveDocument",{path:b,content:JSON.stringify(c),option:h});d.addJob(d.newStorage(g.secondstorage_spec),i)},g.saveNewRevision=function(a,b,c,e,f){varh=a.cloneOption();h.error=f,h.success=e;vari=d.newCommand("saveDocument",{path:b,content:c,option:h});d.addJob(d.newStorage(g.secondstorage_spec),i)},g.loadRevision=function(a,b,c,e){varf=a.cloneOption();f.error=e,f.success=c;varh=d.newCommand("loadDocument",{path:b,option:f});d.addJob(d.newStorage(g.secondstorage_spec),h)},g.deleteAFile=function(a,b,c,e){varf=a.cloneOption();f.max_retry=0,f.error=e,f.success=c;varh=d.newCommand("removeDocument",{path:b,option:f});d.addJob(d.newStorage(g.secondstorage_spec),h)},g.solveConflict=function(a,b,c){vard={},f=g.newAsyncModule(),h=c.command,i=a+".metadata",k="",l="",m=null,n=!1,o={},p=c.previous_revision,q=c.revision_remove_object||{},r=q[p]||{},s=newDate,t;d.getDistantMetadata=function(){console.log("c getDistantMetadata"),g.getDistantMetadata(h,i,function(c){varg=parseInt(p.split("-")[0],10);m=JSON.parse(c.content),k=g+1+"-"+e(""+b+p+JSON.stringify(m)),l=a+"."+k,f.wait(d,"saveMetadataOnDistant",1),f.call(d,"saveNewRevision"),f.call(d,"previousUpdateMetadata")},function(a){f.call(d,"error",[a])})},d.saveNewRevision=function(){console.log("c saveNewRevision "+k),g.saveNewRevision(h,l,b,function(a){f.call(d,"saveMetadataOnDistant")},function(a){f.call(d,"error",[a])})},d.previousUpdateMetadata=function(){console.log("c previousUpdateMetadata");for(varainq)deletem[a];f.call(d,"checkForConflicts")},d.checkForConflicts=function(){console.log("c checkForConflicts");for(varainm){varb;n=!0,o=g.createConflictObject(h,m,k),t={status:20,statusText:"Conflict",message:"There is one or more conflicts"};break}f.call(d,"updateMetadata")},d.updateMetadata=function(){console.log("c updateMetadata"),m[k]={creation_date:r.creation_date||s.getTime(),last_modified:s.getTime(),conflict:n,deleted:!1},f.call(d,"saveMetadataOnDistant")},d.saveMetadataOnDistant=function(){console.log("c saveMetadataOnDistant on_conflict "+n),g.saveMetadataToDistant(h,i,m,function(a){f.call(d,"deleteAllConflictingRevision"),n?f.call(d,"error"):f.call(d,"success")},function(a){f.call(d,"error",[a])})},d.deleteAllConflictingRevision=function(){console.log("c deleteAllConflictingRevision");for(varbinq)g.deleteAFile(h,a+"."+b,j,j)},d.success=function(){console.log("c success"),f.neverCall(d,"error"),f.neverCall(d,"success"),c.success&&c.success(k)},d.error=function(a){varb=a||t||{};console.log("c error "+JSON.stringify(b)),n&&(b.conflict_object=o),f.neverCall(d,"error"),f.neverCall(d,"success"),c.error&&c.error(b)},f.call(d,"getDistantMetadata")},g.createConflictObject=function(a,b,c){vard=a.clone(),e={path:a.getPath(),revision:c,revision_object:b,getConflictRevisionList:function(){returnthis.revision_object},solveConflict:function(a,b){returnb=b||{},b.previous_revision=this.revision,b.revision_remove_object=this.revision_object,b.command=d,g.solveConflict(this.path,a,b)}};returne},g.newAsyncModule=function(){vara={};returna.call=function(a,b,c){a._wait=a._wait||{};if(a._wait[b])returna._wait[b]--,j;c=c||[],setTimeout(function(){a[b].apply(a[b],c)})},a.neverCall=function(a,b){a._wait=a._wait||{},a._wait[b]=-1},a.wait=function(a,b,c){a._wait=a._wait||{},a._wait[b]=c},a.end=function(){a.call=j},a},d.saveDocument=function(a){varb={},c=g.newAsyncModule(),f=a.getPath()+".metadata",h="",i="",k=null,l=!1,m={},n=a.getOption("previous_revision"),o=a.getPath()+"."+n,p=newDate,q;if(!n)returnconsole.log("here"),setTimeout(function(){d.error({status:0,statusText:"Parameter missing",message:"Need a previous revision."})});b.getDistantMetadata=function(){console.log("s getDistantMetadata"),g.getDistantMetadata(a,f,function(d){varf=parseInt(n.split("-")[0],10);k=JSON.parse(d.content),h=f+1+"-"+e(""+a.getContent()+n+JSON.stringify(k)),i=a.getPath()+"."+h,c.wait(b,"saveMetadataOnDistant",1),c.call(b,"saveNewRevision"),c.call(b,"checkForConflicts")},function(d){d.status===404?(h="1-"+e(a.getContent()),i=a.getPath()+"."+h,c.wait(b,"saveMetadataOnDistant",1),c.call(b,"saveNewRevision"),c.call(b,"createMetadata")):c.call(b,"error",[d])})},b.saveNewRevision=function(){console.log("s saveNewRevision "+h),g.saveNewRevision(a,i,a.getContent(),function(a){c.call(b,"saveMetadataOnDistant")},function(a){c.call(b,"error",[a])})},b.checkForConflicts=function(){for(varaink)if(a!==n){l=!0,q={status:20,statusText:"Conflict",message:"There is one or more conflicts"};break}c.call(b,"updateMetadata")},b.createMetadata=function(){console.log("s createMetadata"),k={},k[h]={creation_date:p.getTime(),last_modified:p.getTime(),conflict:!1,deleted:!1},c.call(b,"saveMetadataOnDistant")},b.updateMetadata=function(){console.log("s updateMetadata");vard;k[n]&&(d=k[n].creation_date,deletek[n]),k[h]={creation_date:d||p.getTime(),last_modified:p.getTime(),conflict:l,deleted:!1},l&&(m=g.createConflictObject(a,k,h)),c.call(b,"saveMetadataOnDistant")},b.saveMetadataOnDistant=function(){console.log("s saveMetadataOnDistant on_conflict "+l),g.saveMetadataToDistant(a,f,k,function(a){c.call(b,"deletePreviousRevision"),l?c.call(b,"error"):c.call(b,"success")},function(a){c.call(b,"error",[a])})},b.deletePreviousRevision=function(){n!=="0"&&!l&&(console.log("s deletePreviousRevision "+n),g.deleteAFile(a,o,j,j))},b.success=function(){console.log("s success"),c.neverCall(b,"error"),c.neverCall(b,"success"),d.success(h)},b.error=function(a){vare=a||q||{status:0,statusText:"Unknown",message:"Unknown error."};console.log("s error "+JSON.stringify(e)),l&&(e.conflict_object=m),c.neverCall(b,"error"),c.neverCall(b,"success"),d.error(e)},c.call(b,"getDistantMetadata")},d.loadDocument=function(a){varb={},c=g.newAsyncModule(),e=a.getPath()+".metadata",f=a.getOption("revision")||"",h=null,i=a.getOption("metadata_only"),j=!1,k={},l=newDate,m={name:a.getPath()},n=function(a){c.call(b,"error",[{status:404,statusText:"Not Found",message:a}])};b.getDistantMetadata=function(){console.log("l getDistantMetadata"),g.getDistantMetadata(a,e,function(a){h=JSON.parse(a.content),i||c.wait(b,"success",1),c.call(b,"affectMetadata"),c.call(b,"checkForConflicts")},function(a){c.call(b,"error",[a])})},b.affectMetadata=function(){console.log("l affectMetadata");vara=0;if(f){if(!h[f])returnn("Document revision does not exists.")}elsefor(vardinh)a<h[d].last_modified&&(a=h[d].last_modified,f=d);m.last_modified=h[f].last_modified,m.creation_date=h[f].creation_date,m.revision=f,m.revision_object=h,i?c.call(b,"success"):c.call(b,"loadRevision")},b.loadRevision=function(){console.log("l loadRevision "+f);if(!f||h[f].deleted)returnn("Document has been removed.");g.loadRevision(a,m.name+"."+f,function(a){m.content=a.content,c.call(b,"success")},function(a){c.call(b,"error",[a])})},b.checkForConflicts=function(){console.log("l checkForConflicts"),h[f].conflict&&(j=!0,k=g.createConflictObject(a,h,f),m.conflict_object=k),c.call(b,"success")},b.success=function(){console.log("l success"),c.neverCall(b,"error"),c.neverCall(b,"success"),d.success(m)},b.error=function(a){vare=a||{status:0,statusText:"Unknown",message:"Unknown error."};console.log("l error "+JSON.stringify(e)),j&&(e.conflict_object=k),c.neverCall(b,"error"),c.neverCall(b,"success"),d.error(e)},c.call(b,"getDistantMetadata")},d.getDocumentList=function(b){varc={},e=g.newAsyncModule(),f=[],h=[],i=0;c.retreiveList=function(){vara=b.cloneOption();a.metadata_only=!0,a.error=function(a){e.call(c,"fail",[a])},a.success=function(a){};varf=d.newCommand("getDocumentList",{path:b.getPath(),option:a});d.addJob(d.newStorage(g.secondstorage_spec),f)},c.a=function(g){vari;for(i=0;i<g.length;i+=1){if(typeofg[i].content!="string")returne.call(c,"fail",[{status:0,statusText:"Invalid content",message:"Invalid file content, aborting job."}]);varj=g[i].name.split(".")||[],k,l={};if(j[j.length-1]==="metadata"){try{k=JSON.parse(g[i].content)}catch(m){continue}h.push(k),j.length--,l.name=j.join(".");try{l.creation_date=k.owner[k.winner.owner].creation_date,l.last_modified=k.owner[k.winner.owner].last_modified,f.push(l)}catch(m){continue}}}if(b.getOption("metadata_only"))e.call(c,"done",[f]);else{if(g.length===0)returnd.success([]);e.wait(c,"done",f.length-1);for(i=0;i<f.length;i+=1)a.setItem(f[i].name+".metadata",h[i]),e.call(c,"loadFile",[f[i],h[i].winner.revision,h[i].winner.owner]);d.end()}}},d.removeDocument=function(a){varb={},c=g.newAsyncModule(),f=a.getPath()+".metadata",h="",i="",k=null,l=!1,m={},n=a.getOption("revision"),o=a.getPath()+"."+n,p=newDate,q;if(!n)returnsetTimeout(function(){d.error({status:0,statusText:"Parameter missing",message:"Need a previous revision."})});b.getDistantMetadata=function(){console.log("r getDistantMetadata"),g.getDistantMetadata(a,f,function(d){varf=parseInt(n.split("-")[0],10);k=JSON.parse(d.content),h=f+1+"-"+e(""+n+JSON.stringify(k)),i=a.getPath()+"."+h,c.call(b,"checkForConflicts")},function(a){a.status===404?c.call(b,"success",["0"]):c.call(b,"error",[a])})},b.checkForConflicts=function(){for(varaink)if(a!==n){l=!0,q={status:20,statusText:"Conflict",message:"There is one or more conflicts"};break}c.call(b,"updateMetadata")},b.updateMetadata=function(){console.log("s updateMetadata");vard;k[n]&&(d=k[n].creation_date,deletek[n]),k[h]={creation_date:d||p.getTime(),last_modified:p.getTime(),conflict:l,deleted:!0},l&&(m=g.createConflictObject(a,k,h)),c.call(b,"saveMetadataOnDistant")},b.saveMetadataOnDistant=function(){console.log("s saveMetadataOnDistant on_conflict "+l),g.saveMetadataToDistant(a,f,k,function(a){c.call(b,"deletePreviousRevision"),l?c.call(b,"error"):c.call(b,"success")},function(a){c.call(b,"error",[a])})},b.deletePreviousRevision=function(){n!=="0"&&!l&&(console.log("s deletePreviousRevision "+n),g.deleteAFile(a,o,j,j))},b.success=function(){console.log("s success"),c.neverCall(b,"error"),c.neverCall(b,"success"),d.success(h)},b.error=function(a){vare=a||q||{status:0,statusText:"Unknown",message:"Unknown error."};console.log("s error "+JSON.stringify(e)),l&&(e.conflict_object=m),c.neverCall(b,"error"),c.neverCall(b,"success"),d.error(e)},c.call(b,"getDistantMetadata")},d};f.addStorageType("conflictmanager",l)})(LocalOrCookieStorage,jQuery,Base64,sjcl,hex_sha256,jio);
(function(a,b,c,d,e,f){varg=function(b,c){vard=f.storage(b,c,"base"),e={};e.username=b.username||"",e.applicationname=b.applicationname||"untitled";varg="jio/local_user_array",h="jio/local_file_name_array/"+e.username+"/"+e.applicationname,i=d.serialized;returnd.serialized=function(){vara=i();returna.applicationname=e.applicationname,a.username=e.username,a},d.validateState=function(){returne.username?"":'Need at least one parameter: "username".'},e.getUserArray=function(){returna.getItem(g)||[]},e.addUser=function(b){varc=e.getUserArray();c.push(b),a.setItem(g,c)},e.userExists=function(a){varb=e.getUserArray(),c,d;for(c=0,d=b.length;c<d;c+=1)if(b[c]===a)return!0;return!1},e.getFileNameArray=function(){returna.getItem(h)||[]},e.addFileName=function(b){varc=e.getFileNameArray();c.push(b),a.setItem(h,c)},e.removeFileName=function(b){varc,d,f=e.getFileNameArray(),g=[];for(c=0,d=f.length;c<d;c+=1)f[c]!==b&&g.push(f[c]);a.setItem(h,g)},d.saveDocument=function(b){setTimeout(function(){varc=null,f="jio/local/"+e.username+"/"+e.applicationname+"/"+b.getPath();c=a.getItem(f),c?(c.last_modified=Date.now(),c.content=b.getContent()):(c={name:b.getPath(),content:b.getContent(),creation_date:Date.now(),last_modified:Date.now()},e.userExists(e.username)||e.addUser(e.username),e.addFileName(b.getPath())),a.setItem(f,c),d.success()})},d.loadDocument=function(b){setTimeout(function(){varc=null;c=a.getItem("jio/local/"+e.username+"/"+e.applicationname+"/"+b.getPath()),c?(b.getOption("metadata_only")&&deletec.content,d.success(c)):d.error({status:404,statusText:"Not Found.",message:'Document "'+b.getPath()+'" not found in localStorage.'})})},d.getDocumentList=function(b){setTimeout(function(){varc=[],f=[],g,h,i="key",j="jio/local/"+e.username+"/"+e.applicationname,k={};f=e.getFileNameArray();for(g=0,h=f.length;g<h;g+=1)k=a.getItem(j+"/"+f[g]),k&&(b.getOption("metadata_only")?c.push({name:k.name,creation_date:k.creation_date,last_modified:k.last_modified}):c.push({name:k.name,content:k.content,creation_date:k.creation_date,last_modified:k.last_modified}));d.success(c)})},d.removeDocument=function(b){setTimeout(function(){varc="jio/local/"+e.username+"/"+e.applicationname+"/"+b.getPath();a.deleteItem(c),e.removeFileName(b.getPath()),d.success()})},d};f.addStorageType("local",g);varh=function(a,d){vare=f.storage(a,d,"base"),g={};g.username=a.username||"",g.applicationname=a.applicationname||"untitled",g.url=a.url||"",g.password=a.password||"";varh=e.serialized;returne.serialized=function(){vara=h();returna.username=g.username,a.applicationname=g.applicationname,a.url=g.url,a.password=g.password,a},e.validateState=function(){returng.username&&g.url?"":'Need at least 2 parameters: "username" and "url".'},g.newAsyncModule=function(){vara={};returna.call=function(a,b,c){returna._wait=a._wait||{},a._wait[b]?(a._wait[b]--,function(){}):(c=c||[],a[b].apply(a[b],c))},a.neverCall=function(a,b){a._wait=a._wait||{},a._wait[b]=-1},a.wait=function(a,b,c){a._wait=a._wait||{},a._wait[b]=c},a.end=function(){a.call=function(){}},a},e.saveDocument=function(a){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"PUT",data:a.getContent(),async:!0,dataType:"text",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(){e.success()},error:function(b){b.message='Cannot save "'+a.getPath()+'" into DAVStorage.',e.retry(b)}})},e.loadDocument=function(a){vard={},f=function(){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"GET",async:!0,dataType:"text",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(a){d.content=a,e.success(d)},error:function(b){b.status===404?(b.message='Document "'+a.getPath()+'" not found in localStorage.',e.error(b)):(b.message='Cannot load "'+a.getPath()+'" from DAVStorage.',e.retry(b))}})};d.name=a.getPath(),b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"PROPFIND",async:!0,dataType:"xml",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(c){b(c).find("lp1\\:getlastmodified, getlastmodified").each(function(){d.last_modified=b(this).text()}),b(c).find("lp1\\:creationdate, creationdate").each(function(){d.creation_date=b(this).text()}),a.getOption("metadata_only")?e.success(d):f()},error:function(b){b.message='Cannot load "'+a.getPath()+'" informations from DAVStorage.',b.status===404?e.error(b):e.retry(b)}})},e.getDocumentList=function(a){vard=[],f={},h=[],i=g.newAsyncModule(),j={};j.getContent=function(a){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.name,type:"GET",async:!0,dataType:"text",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(b){a.content=b,d.push(a),i.call(j,"success")},error:function(a){a.message="Cannot get a document content from DAVStorage.",i.call(j,"error",[a])}})},j.getDocumentList=function(){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/",async:!0,type:"PROPFIND",dataType:"xml",headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password),Depth:"1"},success:function(c){vare=b(c).find("D\\:response, response"),g=e.length;i.wait(j,"success",g-2),e.each(function(c,e){if(c>0){f={},b(e).find("D\\:href, href").each(function(){h=b(this).text().split("/"),f.name=h[h.length-1]?h[h.length-1]:h[h.length-2]+"/"});if(f.name===".htaccess"||f.name===".htpasswd")return;b(e).find("lp1\\:getlastmodified, getlastmodified").each(function(){f.last_modified=b(this).text()}),b(e).find("lp1\\:creationdate, creationdate").each(function(){f.creation_date=b(this).text()}),a.getOption("metadata_only")?(d.push(f),i.call(j,"success")):i.call(j,"getContent",[f])}})},error:function(a){a.message="Cannot get a document list from DAVStorage.",a.status===404?i.call(j,"error",[a]):i.call(j,"retry",[a])}})},j.retry=function(a){i.neverCall(j,"retry"),i.neverCall(j,"success"),i.neverCall(j,"error"),e.retry(a)},j.error=function(a){i.neverCall(j,"retry"),i.neverCall(j,"success"),i.neverCall(j,"error"),e.error(a)},j.success=function(){i.neverCall(j,"retry"),i.neverCall(j,"success"),i.neverCall(j,"error"),e.success(d)},i.call(j,"getDocumentList")},e.removeDocument=function(a){b.ajax({url:g.url+"/dav/"+g.username+"/"+g.applicationname+"/"+a.getPath(),type:"DELETE",async:!0,headers:{Authorization:"Basic "+c.encode(g.username+":"+g.password)},success:function(){e.success()},error:function(a){a.status===404?e.success():(a.message='Cannot remove "'+e.getFileName()+'" from DAVStorage.',e.retry(a))}})},e};f.addStorageType("dav",h);vari=function(a,b){varc=f.storage(a,b,"handler"),d={};d.return_value_array=[],d.storagelist=a.storagelist||[],d.nb_storage=d.storagelist.length;vare=c.serialized;returnc.serialized=function(){vara=e();returna.storagelist=d.storagelist,a},c.validateState=function(){returnd.storagelist.length===0?'Need at least one parameter: "storagelist" containing at least one storage.':""},d.isTheLast=function(){returnd.return_value_array.length===d.nb_storage},d.doJob=function(a,b){vare=!1,f=[],g,h=function(a){d.return_value_array.push(a),e||(f.push(a),d.isTheLast()&&c.error({status:207,statusText:"Multi-Status",message:b,array:f}))},i=function(a){d.return_value_array.push(a),e||(e=!0,c.success(a))};for(g=0;g<d.nb_storage;g+=1){varj=a.clone(),k=c.newStorage(d.storagelist[g]);j.onErrorDo(h),j.onSuccessDo(i),c.addJob(k,j)}},c.saveDocument=function(a){d.doJob(a,'All save "'+a.getPath()+'" requests have failed.'),c.end()},c.loadDocument=function(a){d.doJob(a,'All load "'+a.getPath()+'" requests have failed.'),c.end()},c.getDocumentList=function(a){d.doJob(a,"All get document list requests have failed."),c.end()},c.removeDocument=function(a){d.doJob(a,'All remove "'+a.getPath()+'" requests have failed.'),c.end()},c};f.addStorageType("replicate",i);varj=function(b,c){vard=f.storage(b,c,"handler"),e={},g=b.storage||!1;e.secondstorage_spec=b.storage||{type:"base"},e.secondstorage_string=JSON.stringify(e.secondstorage_spec);varh="jio/indexed_storage_array",i="jio/indexed_file_array/"+e.secondstorage_string,j=d.serialized;returnd.serialized=function(){vara=j();returna.storage=e.secondstorage_spec,a},d.validateState=function(){returng?"":'Need at least one parameter: "storage" containing storage specifications.'},e.isStorageArrayIndexed=function(){returna.getItem(h)?!0:!1},e.getIndexedStorageArray=function(){returna.getItem(h)||[]},e.indexStorage=function(b){varc=e.getIndexedStorageArray();c.push(typeofb=="string"?b:JSON.stringify(b)),a.setItem(h,c)},e.isAnIndexedStorage=function(a){varb=typeofa=="string"?a:JSON.stringify(a),c,d,f=e.getIndexedStorageArray();for(c=0,d=f.length;c<d;c+=1)if(JSON.stringify(f[c])===b)return!0;return!1},e.fileArrayExists=function(){returna.getItem(i)?!0:!1},e.getFileArray=function(){returna.getItem(i)||[]},e.setFileArray=function(b){returna.setItem(i,b)},e.isFileIndexed=function(a){varb,c,d=e.getFileArray();for(b=0,c=d.length;b<c;b+=1)if(d[b].name===a)return!0;return!1},e.addFile=function(b){varc=e.getFileArray();c.push(b),a.setItem(i,c)},e.removeFile=function(b){varc,d,f=e.getFileArray(),g=[];for(c=0,d=f.length;c<d;c+=1)f[c].name!==b&&g.push(f[c]);a.setItem(i,g)},e.update=function(){vara=function(a){e.isAnIndexedStorage(e.secondstorage_string)||e.indexStorage(e.secondstorage_string),e.setFileArray(a)};d.addJob(d.newStorage(e.secondstorage_spec),d.newCommand("getDocumentList",{path:".",option:{success:a,max_retry:3}}))},d.saveDocument=function(a){varb=a.clone();b.onSuccessDo(function(b){e.isFileIndexed(a.getPath())||e.addFile({name:a.getPath(),last_modified:0,creation_date:0}),e.update(),d.success()}),b.onErrorDo(function(a){d.error(a)}),d.addJob(d.newStorage(e.secondstorage_spec),b)},d.loadDocument=function(a){varb,c,f,g,h=function(a){d.success(a)},i=function(a){d.error(a)},j=function(){varb=a.clone();b.onErrorDo(i),b.onSuccessDo(h),d.addJob(d.newStorage(e.secondstorage_spec),b)};e.update(),a.getOption("metadata_only")?setTimeout(function(){if(e.fileArrayExists()){b=e.getFileArray();for(c=0,f=b.length;c<f;c+=1)if(b[c].name===a.getPath())returnd.success(b[c])}elsej()},100):j()},d.getDocumentList=function(a){varb,c,f=!1;e.update(),a.getOption("metadata_only")?(b=setInterval(function(){f&&(d.error({status:0,statusText:"Timeout",message:"The request has timed out."}),clearInterval(b)),e.fileArrayExists()&&(d.success(e.getFileArray()),clearInterval(b))},100),setTimeout(function(){f=!0},1e4)):(c=a.clone(),c.onSuccessDo(function(a){d.success(a)}),c.onErrorDo(function(a){d.error(a)}),d.addJob(d.newStorage(e.secondstorage_spec),c))},d.removeDocument=function(a){varb=a.clone();b.onSuccessDo(function(b){e.removeFile(a.getPath()),e.update(),d.success()}),b.onErrorDo(function(a){d.error(a)}),d.addJob(d.newStorage(e.secondstorage_spec),b)},d};f.addStorageType("indexed",j);vark=function(a,c){vare=f.storage(a,c,"handler"),g={},h=a.storage?!0:!1;g.username=a.username||"",g.password=a.password||"",g.secondstorage_spec=a.storage||{type:"base"},g.secondstorage_string=JSON.stringify(g.secondstorage_string);vari=e.serialized;returne.serialized=function(){vara=i();returna.username=g.username,a.password=g.password,a.storage=g.secondstorage_string,a},e.validateState=function(){returng.username&&h?"":'Need at least two parameters: "username" and "storage".'},g.encrypt_param_object={iv:"kaprWwY/Ucr7pumXoTHbpA",v:1,iter:1e3,ks:256,ts:128,mode:"ccm",adata:"",cipher:"aes",salt:"K4bmZG9d704"},g.decrypt_param_object={iv:"kaprWwY/Ucr7pumXoTHbpA",ks:256,ts:128,salt:"K4bmZG9d704"},g.encrypt=function(a,b){varc=d.encrypt(g.username+":"+g.password,a,g.encrypt_param_object);b(JSON.parse(c).ct)},g.decrypt=function(a,c){vare,f=b.extend(!0,{},g.decrypt_param_object);f.ct=a||"",f=JSON.stringify(f);try{e=d.decrypt(g.username+":"+g.password,f)}catch(h){c({status:0,statusText:"Decrypt Fail",message:"Unable to decrypt."});return}c(undefined,e)},g.newAsyncModule=function(){vara={};returna.call=function(a,b,c){a._wait=a._wait||{};if(a._wait[b])returna._wait[b]--,function(){};c=c||[],setTimeout(function(){a[b].apply(a[b],c)})},a.neverCall=function(a,b){a._wait=a._wait||{},a._wait[b]=-1},a.wait=function(a,b,c){a._wait=a._wait||{},a._wait[b]=c},a.end=function(){a.call=function(){}},a},e.saveDocument=function(a){varb,c,d=g.newAsyncModule(),f={};f.encryptFilePath=function(){g.encrypt(a.getPath(),function(a){b=a,d.call(f,"save")})},f.encryptFileContent=function(){g.encrypt(a.getContent(),function(a){c=a,d.call(f,"save")})},f.save=function(){vard=a.cloneOption(),f;d.success=function(){e.success()},d.error=function(a){e.error(a)},f=e.newCommand("saveDocument",{path:b,content:c,option:d}),e.addJob(e.newStorage(g.secondstorage_spec),f)},d.wait(f,"save",1),d.call(f,"encryptFilePath"),d.call(f,"encryptFileContent")},e.loadDocument=function(a){varb,c,d=g.newAsyncModule(),f={};f.encryptFilePath=function(){g.encrypt(a.getPath(),function(a){b=a,d.call(f,"loadDocument")})},f.loadDocument=function(){varc=a.cloneOption(),d;c.error=f.loadOnError,c.success=f.loadOnSuccess,d=e.newCommand("loadDocument",{path:b,option:c}),e.addJob(e.newStorage(g.secondstorage_spec),d)},f.loadOnSuccess=function(b){b.name=a.getPath(),a.getOption("metadata_only")?e.success(b):g.decrypt(b.content,function(a,c){a?e.error(a):(b.content=c,e.success(b))})},f.loadOnError=function(a){e.error(a)},d.call(f,"encryptFilePath")},e.getDocumentList=function(a){varb=[],c=g.newAsyncModule(),d={};d.getDocumentList=function(){varb=a.cloneOption();b.success=d.getListOnSuccess,b.error=d.getListOnError,e.addJob(e.newStorage(g.secondstorage_spec),e.newCommand("getDocumentList",{path:a.getPath(),option:b}))},d.getListOnSuccess=function(e){b=e;varf,h=function(e){g.decrypt(b[e].name,function(a,b){a?c.call(d,"error",[a]):c.call(d,"pushResult",[b,e,"name"])}),a.getOption("metadata_only")||g.decrypt(b[e].content,function(a,b){a?c.call(d,"error",[a]):c.call(d,"pushResult",[b,e,"content"])})};a.getOption("metadata_only")?c.wait(d,"success",e.length-1):c.wait(d,"success",e.length*2-1);for(f=0;f<b.length;f+=1)h(f)},d.getListOnError=function(a){c.call(d,"error",[a])},d.pushResult=function(a,e,f){b[e][f]=a,c.call(d,"success")},d.error=function(a){c.end(),e.error(a)},d.success=function(){c.end(),e.success(b)},c.call(d,"getDocumentList")},e.removeDocument=function(a){varb,c={};c.encryptFilePath=function(){g.encrypt(a.getPath(),function(a){b=a,c.removeDocument()})},c.removeDocument=function(){vard=a.cloneOption();d.error=c.removeOnError,d.success=c.removeOnSuccess,e.addJob(e.newStorage(g.secondstorage_spec),e.newCommand("removeDocument",{path:b,option:d}))},c.removeOnSuccess=function(a){e.success()},c.removeOnError=function(a){e.error(a)},c.encryptFilePath()},e};f.addStorageType("crypt",k);varl=function(a,b){varc=f.storage(a,b,"handler"),d={};a=a||{},b=b||{};varg=a.storage?!0:!1;d.secondstorage_spec=a.storage||{type:"base"},d.secondstorage_string=JSON.stringify(d.secondstorage_spec);varh="jio/conflictmanager/"+d.secondstorage_string+"/",i=function(){},j=c.serialized;returnc.serialized=function(){vara=j();returna.storage=d.secondstorage_spec,a},c.validateState=function(){returng?"":'Need at least one parameter: "storage".'},d.getDistantMetadata=function(a,b,e,f){varg=a.cloneOption();g.metadata_only=!1,g.max_retry=a.getOption("max_retry")||3,g.error=f,g.success=e;varh=c.newCommand("loadDocument",{path:b,option:g});c.addJob(c.newStorage(d.secondstorage_spec),h)},d.saveMetadataToDistant=function(a,b,e,f,g){varh=a.cloneOption();h.error=g,h.success=f;vari=c.newCommand("saveDocument",{path:b,content:JSON.stringify(e),option:h});c.addJob(c.newStorage(d.secondstorage_spec),i)},d.saveNewRevision=function(a,b,e,f,g){varh=a.cloneOption();h.error=g,h.success=f;vari=c.newCommand("saveDocument",{path:b,content:e,option:h});c.addJob(c.newStorage(d.secondstorage_spec),i)},d.loadRevision=function(a,b,e,f){varg=a.cloneOption();g.error=f,g.success=e;varh=c.newCommand("loadDocument",{path:b,option:g});c.addJob(c.newStorage(d.secondstorage_spec),h)},d.deleteAFile=function(a,b,e,f){varg=a.cloneOption();g.max_retry=0,g.error=f,g.success=e;varh=c.newCommand("removeDocument",{path:b,option:g});c.addJob(c.newStorage(d.secondstorage_spec),h)},d.chooseARevision=function(a){varb=0,c="";for(vardina)b<a[d].last_modified&&(b=a[d].last_modified,c=d);returnc},d.solveConflict=function(a,b,c){varf={},g=d.newAsyncModule(),h=c.command,j=a+".metadata",k="",l="",m=null,n=!1,o={},p=c.deleted,q=c.previous_revision,r=c.revision_remove_object||{},s=r[q]||{},t=newDate,u;f.getDistantMetadata=function(){d.getDistantMetadata(h,j,function(c){vard=parseInt(q.split("-")[0],10);m=JSON.parse(c.content),k=d+1+"-"+e(""+b+q+JSON.stringify(m)),l=a+"."+k,p||(g.wait(f,"saveMetadataOnDistant",1),g.call(f,"saveNewRevision")),g.call(f,"previousUpdateMetadata")},function(a){g.call(f,"error",[a])})},f.saveNewRevision=function(){d.saveNewRevision(h,l,b,function(a){g.call(f,"saveMetadataOnDistant")},function(a){g.call(f,"error",[a])})},f.previousUpdateMetadata=function(){for(varainr)deletem[a];g.call(f,"checkForConflicts")},f.checkForConflicts=function(){for(varainm){varb;n=!0,u={status:20,statusText:"Conflict",message:"There is one or more conflicts"};break}g.call(f,"updateMetadata")},f.updateMetadata=function(){m[k]={creation_date:s.creation_date||t.getTime(),last_modified:t.getTime(),conflict:n,deleted:p},o=d.createConflictObject(h,m,k),g.call(f,"saveMetadataOnDistant")},f.saveMetadataOnDistant=function(){d.saveMetadataToDistant(h,j,m,function(a){g.call(f,"deleteAllConflictingRevision"),n?g.call(f,"error"):g.call(f,"success")},function(a){g.call(f,"error",[a])})},f.deleteAllConflictingRevision=function(){for(varbinr)d.deleteAFile(h,a+"."+b,i,i)},f.success=function(){g.neverCall(f,"error"),g.neverCall(f,"success"),c.success&&c.success(k)},f.error=function(a){varb=a||u||{};n&&(b.conflict_object=o),g.neverCall(f,"error"),g.neverCall(f,"success"),c.error&&c.error(b)},g.call(f,"getDistantMetadata")},d.createConflictObject=function(a,b,c){vare=a.clone(),f={path:a.getPath(),revision:c,revision_object:b,getConflictRevisionList:function(){returnthis.revision_object},solveConflict:function(a,f){returnb[c].deleted?(f=f||a||{},f.deleted=!0):(f=f||{},f.deleted=!1,a=a||""),f.previous_revision=this.revision,f.revision_remove_object=this.revision_object,f.command=e,d.solveConflict(this.path,a,f)}};returnf},d.newAsyncModule=function(){vara={};returna.call=function(a,b,c){a._wait=a._wait||{};if(a._wait[b])returna._wait[b]--,i;c=c||[],setTimeout(function(){a[b].apply(a[b],c)})},a.neverCall=function(a,b){a._wait=a._wait||{},a._wait[b]=-1},a.wait=function(a,b,c){a._wait=a._wait||{},a._wait[b]=c},a.end=function(){a.call=i},a},c.saveDocument=function(a){varb={},f=d.newAsyncModule(),g=a.getPath()+".metadata",h="",j="",k=null,l=!1,m={},n=a.getOption("previous_revision"),o=a.getPath()+"."+n,p=newDate,q;if(!n)returnsetTimeout(function(){c.error({status:0,statusText:"Parameter missing",message:"Need a previous revision."})});b.getDistantMetadata=function(){d.getDistantMetadata(a,g,function(c){vard=parseInt(n.split("-")[0],10);k=JSON.parse(c.content),h=d+1+"-"+e(""+a.getContent()+n+JSON.stringify(k)),j=a.getPath()+"."+h,f.wait(b,"saveMetadataOnDistant",1),f.call(b,"saveNewRevision"),f.call(b,"checkForConflicts")},function(c){c.status===404?(h="1-"+e(a.getContent()),j=a.getPath()+"."+h,f.wait(b,"saveMetadataOnDistant",1),f.call(b,"saveNewRevision"),f.call(b,"createMetadata")):f.call(b,"error",[c])})},b.saveNewRevision=function(){d.saveNewRevision(a,j,a.getContent(),function(a){f.call(b,"saveMetadataOnDistant")},function(a){f.call(b,"error",[a])})},b.checkForConflicts=function(){for(varaink)if(a!==n){l=!0,q={status:20,statusText:"Conflict",message:"There is one or more conflicts"};break}f.call(b,"updateMetadata")},b.createMetadata=function(){k={},k[h]={creation_date:p.getTime(),last_modified:p.getTime(),conflict:!1,deleted:!1},f.call(b,"saveMetadataOnDistant")},b.updateMetadata=function(){varc;k[n]&&(c=k[n].creation_date,deletek[n]),k[h]={creation_date:c||p.getTime(),last_modified:p.getTime(),conflict:l,deleted:!1},l&&(m=d.createConflictObject(a,k,h)),f.call(b,"saveMetadataOnDistant")},b.saveMetadataOnDistant=function(){d.saveMetadataToDistant(a,g,k,function(a){f.call(b,"deletePreviousRevision"),l?f.call(b,"error"):f.call(b,"success")},function(a){f.call(b,"error",[a])})},b.deletePreviousRevision=function(){n!=="0"&&d.deleteAFile(a,o,i,i)},b.success=function(){f.neverCall(b,"error"),f.neverCall(b,"success"),c.success(h)},b.error=function(a){vard=a||q||{status:0,statusText:"Unknown",message:"Unknown error."};l&&(d.conflict_object=m),f.neverCall(b,"error"),f.neverCall(b,"success"),c.error(d)},f.call(b,"getDistantMetadata")},c.loadDocument=function(a){varb={},e=d.newAsyncModule(),f=a.getPath()+".metadata",g=a.getOption("revision")||"",h=null,i=a.getOption("metadata_only"),j=!1,k={},l=newDate,m={name:a.getPath()},n=function(a){e.call(b,"error",[{status:404,statusText:"Not Found",message:a}])};b.getDistantMetadata=function(){d.getDistantMetadata(a,f,function(a){h=JSON.parse(a.content),i||e.wait(b,"success",1),e.call(b,"affectMetadata"),e.call(b,"checkForConflicts")},function(a){e.call(b,"error",[a])})},b.affectMetadata=function(){if(g){if(!h[g])returnn("Document revision does not exists.")}elseg=d.chooseARevision(h);m.last_modified=h[g].last_modified,m.creation_date=h[g].creation_date,m.revision=g,m.revision_object=h,i?e.call(b,"success"):e.call(b,"loadRevision")},b.loadRevision=function(){if(!g||h[g].deleted)returnn("Document has been removed.");d.loadRevision(a,m.name+"."+g,function(a){m.content=a.content,e.call(b,"success")},function(a){e.call(b,"error",[a])})},b.checkForConflicts=function(){h[g].conflict&&(j=!0,k=d.createConflictObject(a,h,g),m.conflict_object=k),e.call(b,"success")},b.success=function(){e.neverCall(b,"error"),e.neverCall(b,"success"),c.success(m)},b.error=function(a){vard=a||{status:0,statusText:"Unknown",message:"Unknown error."};j&&(d.conflict_object=k),e.neverCall(b,"error"),e.neverCall(b,"success"),c.error(d)},e.call(b,"getDistantMetadata")},c.getDocumentList=function(a){varb={},e=d.newAsyncModule(),f=a.getOption("metadata_only"),g=[],h=0,i=0,j=0;b.retreiveList=function(){varf=a.cloneOption();f.metadata_only=!0,f.error=function(a){e.call(b,"fail",[a])},f.success=function(a){e.call(b,"filterTheList",[a])};varg=c.newCommand("getDocumentList",{path:a.getPath(),option:f});c.addJob(c.newStorage(d.secondstorage_spec),g)},b.filterTheList=function(a){varc;for(c=0;c<a.length;c+=1){vard=a[c].name.split(".")||[];d.length>0&&d[d.length-1]==="metadata"&&(j++,d.length--,e.call(b,"loadMetadataFile",[d.join(".")]))}},b.loadMetadataFile=function(c){d.getDistantMetadata(a,c+".metadata",function(a){a=JSON.parse(a.content),e.call(b,"loadFile",[c,d.chooseARevision(a),a])},function(a){e.call(b,"error",[a])})},b.loadFile=function(c,h,i){varj={name:c,last_modified:i[h].last_modified,creation_date:i[h].creation_date,revision:h,revision_object:i};i[h].conflict&&(j.conflict_object=d.createConflictObject(a,i,h)),f?(g.push(j),e.call(b,"success")):d.loadRevision(a,c+"."+h,function(a){j.content=a.content,g.push(j),e.call(b,"success")},function(a){e.call(b,"error",[a])})},b.success=function(){i++,i>=j&&(e.end(),c.success(g))},b.error=function(a){e.end(),c.error(a)},e.call(b,"retreiveList")},c.removeDocument=function(a){varb={},f=d.newAsyncModule(),g=a.getPath()+".metadata",h="",j="",k=null,l=!1,m={},n=a.getOption("revision"),o=a.getPath()+"."+n,p=newDate,q;if(!n)returnsetTimeout(function(){c.error({status:0,statusText:"Parameter missing",message:"Need a revision."})});b.getDistantMetadata=function(){d.getDistantMetadata(a,g,function(c){vard=parseInt(n.split("-")[0],10);k=JSON.parse(c.content),h=d+1+"-"+e(""+n+JSON.stringify(k)),j=a.getPath()+"."+h,f.call(b,"checkForConflicts")},function(a){a.status===404?f.call(b,"success",["0"]):f.call(b,"error",[a])})},b.checkForConflicts=function(){for(varaink)if(a!==n){l=!0,q={status:20,statusText:"Conflict",message:"There is one or more conflicts"};break}f.call(b,"updateMetadata")},b.updateMetadata=function(){varc;k[n]&&(c=k[n].creation_date,deletek[n]),k[h]={creation_date:c||p.getTime(),last_modified:p.getTime(),conflict:l,deleted:!0},l&&(m=d.createConflictObject(a,k,h)),f.call(b,"saveMetadataOnDistant")},b.saveMetadataOnDistant=function(){d.saveMetadataToDistant(a,g,k,function(a){f.call(b,"deletePreviousRevision"),l?f.call(b,"error"):f.call(b,"success")},function(a){f.call(b,"error",[a])})},b.deletePreviousRevision=function(){n!=="0"&&d.deleteAFile(a,o,i,i)},b.success=function(){f.neverCall(b,"error"),f.neverCall(b,"success"),c.success(h)},b.error=function(a){vard=a||q||{status:0,statusText:"Unknown",message:"Unknown error."};l&&(d.conflict_object=m),f.neverCall(b,"error"),f.neverCall(b,"success"),c.error(d)},f.call(b,"getDistantMetadata")},c};f.addStorageType("conflictmanager",l)})(LocalOrCookieStorage,jQuery,Base64,sjcl,hex_sha256,jio);