{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/agility/src/Agility.js","webpack:///./node_modules/agility-ugc/src/agility-ugc-api.js"],"names":["enumerable","get","getter","value","key","bind","module","Object","prototype","hasOwnProperty","call","object","property","Agility","A","this","RegisterNamespace","space","spaces","split","root","window","i","length","_sessionLevelCacheKey","SessionLevelCacheKey","Date","toString","_unique","_uniqueIndex","UniqueID","prePend","undefined","CloneObject","what","JSON","parse","stringify","ResolveUrl","url","baseUrl","Agility_BaseUrl","replace","QueryString","name","location","href","index","indexOf","substring","ary1","retValue","ary2","unescape","toLowerCase","SetCookie","expires","path","domain","secure","expires_date","document","cookie","escape","toGMTString","GetCookie","cookieName","a_all_cookies","a_temp_cookie","cookie_value","b_cookie_found","DeleteCookie","exports","API","checkApiIntialized","callback","_AgilityUGCSettings","APIAccessKey","AccessKey","APISeconds","Seconds","APIRandomNumber","RandomNumber","APIProfileRecordID","ProfileRecordID","APIHash","AccessHash","APIUrl","Url","Initialized","ResponseType","Error","Message","ResponseData","_enforceRegex","fieldType","fieldValue","fieldLabel","ValidationRegEx","rEx","RegExp","ignoreCase","search","ValidationMessage","FieldType","Label","_isFunction","functionToCheck","_logError","message","console","log","DataType","String","TextBlob","Int","Double","DateTime","File","GUID","Encrypted","Hashed","Boolean","Dropdown","HTML","Email","Custom","RecordState","New","Published","Deleted","Processing","Declined","Escalated","AwaitingReview","Draft","All","Permission","Read","Create","Edit","Delete","Moderate","Administer","FileStorage","RelativeURL","BaseURL","EdgeURL","SortDirection","ASC","DESC","OK","FileService","AmazonS3","YouTube","Flickr","Image","Video","Ooyala","Brightcove","FileServiceState","Unprocessed","Processed","RecordFlag","Spam","Flagged","Illegal","Abuse","AggregateTypes","Count","Sum","Average","FeedbackContentType","WCM","UGC","FeedbackSubmissionType","Like","Rating","Vote","ApproveDisapprove","SubmissionInterval","None","Day","Hour","Week","Month","Minute","SingleSubmissionOnly","FileServiceMetaDataTypeName","YouTubeMetaField","OriginalFilePath","VideoID","Description","Category","Title","Keywords","Private","YouTubeState","Duration","FlickrMetaField","title","description","tags","is_public","is_friend","is_family","safety_level","hidden","photo_id","OoyalaMetaField","embedCode","status","SearchArg","self","PageSize","RecordOffset","IncludeSpam","IncludeFlagged","IncludeIllegal","State","SortedField","RecordTypeName","Search","CacheKey","Columns","IncludeStatistics","OtherStates","CommentSearchArg","IgnoreAbuse","FeedbackSearchArg","ReferenceName","ContentType","SubmissionType","RelatedContentIDs","Array","StartDate","EndDate","IsPositive","Action","BooleanFeedback","BooleanFeedbackID","FeedbackTypeID","RelatedContentID","ExternalProfileID","CreatedOn","RequiresAuthentication","SubmissionIntervalUnit","SubmissionIntervalValue","RatingFeedback","RatingFeedbackID","RatingValue","Record","StatInsertArg","itemType","statTypeName","itemTypeName","languageCode","itemID","statCount","StatSearchArg","startDate","endDate","OnInit","API_Url","API_AccessKey","API_Seconds","API_RandomNumber","API_ProfileRecordID","API_Hash","GetAllRecordTypes","_performPost","GetRecordType","recordTypeID","GetRecordTypeByName","recordTypeName","SaveRecordType","recordType","postData","DeleteRecordType","GetRecord","recordID","fileStorage","sanitize","GetRecordHistory","DeleteRecord","SetRecordFlag","flag","reason","flagStr","InsertRecordHistory","comment","SetRecordState","recordState","SetRecordFileState","fieldName","fileServiceState","UpdateRecordTypeAlert","moderatorID","otherNotificationType","recordStateID","DeleteRecordTypeAlert","GetRecordTypeAlerts","InsertStat","statArg","GetStats","statSearchArg","startDateStr","endDateStr","ClearCache","cacheKey","SaveRecord","record","performSave","lstFieldErrors","FieldTypes","Name","AllowNull","m","moment","dt","isValid","toDate","isNaN","parseFloat","parseInt","MaxLength","Length","o1","o2","msg","x","ValidationErrors","response","SearchRecords","searchArg","SearchComments","commentSearchArg","SearchCommentParentIDs","GetFeedbackAggregate","feedbackSearchArg","SaveRating","ratingFeedback","rating","SaveRatingFeedback","SaveLike","booleanFeedback","like","SaveBooleanFeedback","SaveVote","vote","SaveApproveDisapprove","IsApproved","ap","_settingsCache","GetSettings","ignoreCache","data","SaveSettings","settings","GetAllSyndicationServices","DeleteSyndicationService","syndicationServiceID","SaveSyndicationService","syndicationService","GetAllSystemAccess","GetGUID","GetAmazonS3Signature","policy","GetOoyalaSignature","queryString","parameters","DeleteFile","_fileSizeCache","methodName","lastIndexOf","postDataStr","accessKey","seconds","randomNumber","hash","profileRecordID","contentType","contentToSend","_json_to_URLEncoded","element","list","idx","push","encodeURIComponent","join","xhr","XMLHttpRequest","open","setRequestHeader","withCredentials","onload","readyState","DONE","result","responseText","errorMessage","send","GetFileSize","Number","TestBrightcoveAuthenticationSettings","readToken","writeToken","TestYouTubeAuthenticationSettings","applicationName","apiKey","username","password","TestAmazonS3AuthenticationSettings","bucket","secretKey","GenerateTwitterOauthRequestToken","secret","GetAmazonS3Form","options","GetUGCUploadForm","UploadFile","file","errorCallback","alwaysCallback","progressCallback","maxSizeBytes","size","filepath","validExp","fileTypes","ary","selectedExt","ext","trim","validateFileType","ex3","AmazonS3Bucket","_uploadFileToUGC","_uploadFileToAmazonS3","_liveAttachmentRemoveHandlerBound","_authCookieName","GetAuthCookieName","SetAuthCookieName","Logout","websiteUserTypeName","cookieDate","today","addMonths","Authenticate","login","persistCookie","loginFieldName","profileTypeName","token","cookieValue","IsAuthenticated","authenticationToken","ChangePassword","currentPassword","newPassword","RetrievePassword","GetODataMetaData","GetODataFeed","GetODataRecord","ExecCustomProcedure","proc","paramArgs","GetMIMEtype","filename","fn","fn1","match"],"mappings":"aACA,SAGA,cAGA,QACA,oBAGA,YACA,IACA,KACA,YAUA,OANA,mCAGA,OAGA,UAKA,MAGA,MAGA,oBACA,UACA,2BAA2CA,YAAY,EAAMC,IAAKC,KAKlE,gBACA,gDACA,4CAAyDC,MAAO,WAEhE,sCAAkDA,OAAO,KAQzD,kBAEA,GADA,cACA,aACA,qDACA,0BAGA,GAFA,OACA,mCAA0CH,YAAY,EAAMG,MAAOA,IACnE,2DAAiH,OAAOA,EAAMC,IAAQC,KAAK,KAAMD,IACjJ,UAIA,gBACA,sBACA,WAA4B,OAAOE,EAAgB,SACnD,WAAkC,OAAOA,GAEzC,OADA,aACA,GAIA,kBAAuD,OAAOC,OAAOC,UAAUC,eAAeC,KAAKC,EAAQC,IAG3G,aAIA,S;;EC7EA,IAAIC,EAAU,IAAI,WACjB,IAAIC,EAAIC,KAERD,EAAEE,kBAAoB,SAASC,GAU9B,IAHA,IAAIC,EAASD,EAAME,MAAM,KACxBC,EAAOC,OAECC,EAAI,EAAGA,EAAIJ,EAAOK,OAAQD,IAEjCF,OAD+B,IAApBA,EAAKF,EAAOI,IAChBF,EAAKF,EAAOI,IAAM,GAElBF,EAAKF,EAAOI,IAIrB,OAAOF,GAGR,IAAII,EAAwB,KAC5BV,EAAEW,qBAAuB,WAQxB,OAH6B,MAAzBD,IACHA,GAAwB,IAAKE,MAAQC,SAAS,mBAExCH,GAIL,IAAII,EAAU,GACbC,EAAe,EACnBf,EAAEgB,SAAW,SAASC,GAMrB,OAAeC,MAAXD,GAAmC,MAAXA,GAA8B,IAAXA,EACvCF,KAEiBG,MAApBJ,EAAQG,KAAuBH,EAAQG,GAAW,GAC/CA,EAAUH,EAAQG,OAIxBjB,EAAEmB,YAAc,SAAUC,GAI5B,OAAOC,KAAKC,MAAMD,KAAKE,UAAUH,KAGlCpB,EAAEwB,WAAa,SAASC,GAOvB,IAAIC,EAAUnB,OAAOoB,iBAAmB,IACxC,OAAOF,EAAIG,QAAQ,OAAQF,IAG5B1B,EAAE6B,YAAc,SAASC,EAAML,GAOnBP,MAAPO,GAA2B,MAAPA,GAAsB,IAAPA,IACtCA,EAAMM,SAASC,MAGhB,IAAIC,EAAQR,EAAIS,QAAQ,KACxB,GAAID,EAAQ,GAAKA,GAASR,EAAIhB,OAAS,EAAG,OAAO,MACxB,GAArBgB,EAAIS,QAAQ,OACfT,EAAMA,EAAIU,UAAU,EAAGV,EAAIS,QAAQ,OAGpC,IAEIE,EAFOX,EAAIU,UAAUF,EAAQ,EAAGR,EAAIhB,QAExBJ,MAAM,KAClBgC,EAAW,KAEf,IAAI,IAAI7B,KAAK4B,EAAM,CAClB,IACIE,EADIF,EAAK5B,GACAH,MAAM,KACnB,GAAmB,GAAfiC,EAAK7B,QACJ8B,SAASD,EAAK,IAAIE,eAAiBV,EAAKU,cAK3C,OAFAH,GADAA,EAAWC,EAAK,IACIV,QAAQ,MAAO,OACnCS,EAAWE,SAASF,IACb,EAKV,OAAOA,GAIRrC,EAAEyC,UAAY,SAASX,EAAMzC,EAAOqD,EAASC,EAAMC,EAAQC,GAS1D,IAAIC,EAAeJ,EAEnBK,SAASC,OAASlB,EAAO,IAAKmB,OAAQ5D,IACpC,EAAc,YAAcyD,EAAaI,cAAgB,KACzD,EAAW,SAAWP,EAAO,KAC7B,EAAa,WAAaC,EAAS,KACnC,EAAa,UAAY,KAG5B5C,EAAEmD,UAAY,SAAWC,GAMxB,IAAIC,EAAgBN,SAASC,OAAO3C,MAAO,KACvCiD,EAAgB,GAEhBC,EAAe,GACfC,GAAiB,EAErB,IAAMhD,EAAI,EAAGA,EAAI6C,EAAc5C,OAAQD,IACvC,CASC,IAPA8C,EAAgBD,EAAc7C,GAAGH,MAAO,MAIZ,GAAGuB,QAAQ,aAAc,KAGjCwB,EASnB,OAPAI,GAAiB,EAEZF,EAAc7C,OAAS,IAE3B8C,EAAehB,SAAUe,EAAc,GAAG1B,QAAQ,aAAc,MAG1D2B,EAERD,EAAgB,KACF,GAEf,IAAME,EAEL,OAAO,MAINxD,EAAEyD,aAAe,SAAS3B,EAAMa,EAAMC,EAAQC,GAOtC7C,EAAEmD,UAAUrB,KACZiB,SAASC,OAASlB,EAAO,KAAOa,EAAO,SAAWA,EAAO,KACpDC,EAAS,WAAaA,EAAS,KAAQC,EAAS,UAAY,IAC7D,4CAMhBrD,EAAOkE,QAAU3D,G,+EC7LG,IAAI,WAEpB,IAAI4D,EAAM1D,KA0Yb,SAAS2D,EAAmBC,GAa3B,OAVStD,OAAOuD,sBACNH,EAAII,aAAexD,OAAOuD,oBAAoBE,UAC9CL,EAAIM,WAAa1D,OAAOuD,oBAAoBI,QAC5CP,EAAIQ,gBAAkB5D,OAAOuD,oBAAoBM,aACjDT,EAAIU,mBAAqB9D,OAAOuD,oBAAoBQ,gBACpDX,EAAIY,QAAUhE,OAAOuD,oBAAoBU,WACzCb,EAAIc,OAASlE,OAAOuD,oBAAoBY,IACxCf,EAAIgB,aAAc,GAGV,MAAdhB,EAAIc,QAAgC,IAAdd,EAAIc,QAAoCvD,MAApByC,EAAII,eACjDF,EAAS,CACRe,aAAcjB,EAAIiB,aAAaC,MAC/BC,QAAS,8NACTC,aAAc,QAGR,GAkhBT,SAASC,EAAcC,EAAWC,EAAYC,GAC7C,GAAkBjE,MAAdgE,GAAyC,MAAdA,GAAoC,IAAdA,GAAyC,iBAAdA,EAAwB,OAAO,KAG/G,GAAiC,MAA7BD,EAAUG,iBAAwD,IAA7BH,EAAUG,iBAAsD,uDAA7BH,EAAUG,gBACrF,IACC,IAAIC,EAAM,IAAIC,OAAOL,EAAUG,iBAG/B,GAFAC,EAAIE,YAAa,GAEc,GAA3BL,EAAWM,OAAOH,GAGrB,OAAmC,MAA/BJ,EAAUQ,mBAA4D,IAA/BR,EAAUQ,mBAA0D,yCAA/BR,EAAUQ,kBAClF,CACNC,UAAWT,EACXH,QAASG,EAAUQ,mBAIb,CACNC,UAAWT,EACXH,QAAS,wBAA0BG,EAAUU,MAAQ,0DAIvD,MAAOd,KAMR,SAASe,EAAYC,GACjB,OAAOA,GAAyD,sBAAtC,GAAGhF,SAASjB,KAAKiG,GAG/C,SAASC,EAAUC,GACZC,SACCA,QAAQC,IAAIF,GAl9BvBpC,EAAIuC,SAAW,CACdC,OAAQ,EACRC,SAAU,EACVC,IAAK,EACLC,OAAQ,EACRC,SAAU,EACVC,KAAM,EACNC,KAAM,EACNC,UAAW,EACXC,OAAQ,EACRC,QAAS,EACTC,SAAU,GACVC,KAAM,GACNC,MAAO,GACDC,OAAQ,IAGfrD,EAAIsD,YAAc,CACjBC,IAAK,EACLC,UAAW,EACXC,QAAS,EACTC,WAAY,EACZC,SAAU,EACVzC,MAAO,EACP0C,UAAW,EACXC,eAAgB,EAChBC,MAAO,EACPC,KAAM,GAGP/D,EAAIgE,WAAa,CAChBC,KAAM,EACNC,OAAQ,EACRC,KAAM,EACNC,OAAQ,EACRC,SAAU,EACVC,WAAY,GAGbtE,EAAIuE,YAAc,CACjBC,YAAa,EACbC,QAAS,EACTC,QAAS,GAGV1E,EAAI2E,cAAgB,CACnBC,IAAK,MACLC,KAAM,QAGP7E,EAAIiB,aAAe,CAClB6D,GAAI,EACJ5D,MAAO,GAGRlB,EAAI+E,YAAc,CACjBC,SAAU,EACVC,QAAS,EACTC,OAAQ,EACRC,MAAO,EACPC,MAAO,EACPC,OAAQ,EACRC,WAAY,GAGbtF,EAAIuF,iBAAmB,CACtBhC,IAAK,EACLiC,YAAa,EACbC,UAAW,EACXvE,MAAO,GAGRlB,EAAI0F,WAAa,CAChBC,KAAM,OACNC,QAAS,UACTC,QAAS,UACTC,MAAO,SAGR9F,EAAI+F,eAAiB,CACpBC,MAAO,EACPC,IAAK,EACLC,QAAS,GAGVlG,EAAImG,oBAAsB,CACzBC,IAAK,EACLC,IAAK,EACLhD,OAAQ,GAGTrD,EAAIsG,uBAAyB,CAC5BC,KAAM,EACNC,OAAQ,EACRC,KAAM,EACNC,kBAAmB,EACnBrD,OAAQ,GAGTrD,EAAI2G,mBAAqB,CACxBC,MAAO,EACPC,IAAK,EACLC,KAAM,EACNC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,qBAAsB,GAIvBlH,EAAImH,4BAA8B,2DAElCnH,EAAIoH,iBAAmB,CACtBC,iBAAkB,mBAClBC,QAAS,UACTC,YAAa,cACbC,SAAU,WACVC,MAAO,QACPC,SAAU,WACVC,QAAS,UACTC,aAAc,eACdC,SAAU,YAKX7H,EAAI8H,gBAAkB,CACrBT,iBAAkB,mBAClBU,MAAO,QACPC,YAAa,cACbC,KAAM,OACNC,UAAW,YACXC,UAAW,YACXC,UAAW,YACXC,aAAc,eACdC,OAAQ,SACRC,SAAU,YAcXvI,EAAIwI,gBAAkB,CACrBC,UAAW,YACXV,MAAO,QACPC,YAAa,cACbU,OAAQ,UAiBT1I,EAAI2I,UAAY,WACf,IAAIC,EAAOtM,KAiBXsM,EAAKC,SAAW,GAChBD,EAAKE,aAAe,EACpBF,EAAKG,aAAc,EACnBH,EAAKI,gBAAiB,EACtBJ,EAAKK,gBAAiB,EACtBL,EAAKM,MAAQlJ,EAAIsD,YAAYE,UAC7BoF,EAAKO,YAAc,GACnBP,EAAKjE,cAAgB,GACrBiE,EAAKQ,eAAiB,KACtBR,EAAKS,OAAS,GACdT,EAAKU,SAAW,KAChBV,EAAKW,QAAU,GACfX,EAAKrE,YAAcvE,EAAIuE,YAAYC,YACnCoE,EAAKY,mBAAoB,EACzBZ,EAAKa,YAAc,KAGnBnN,KAAKY,SAAW,WAEf,OAAO0L,EAAKC,SAAW,IAAMD,EAAKE,aAAe,IAAMF,EAAKG,YAAc,IAAMH,EAAKI,eAAiB,IAAMJ,EAAKK,eAC9G,IAAML,EAAKM,MAAQ,IAAMN,EAAKO,YAC9B,IAAMP,EAAKjE,cAAgB,IAAMiE,EAAKQ,eAAiB,IAAMR,EAAKS,OAClE,IAAMT,EAAKU,SAAW,IAAMV,EAAKW,QAAU,IAAMX,EAAKrE,YAAc,IAAMqE,EAAKY,kBAAoB,IAAMZ,EAAKa,cAKnHzJ,EAAI0J,iBAAmB,WAuBtBJ,SAAW,KACXG,YAAc,GACdP,MAAQlJ,EAAIsD,YAAYE,UACxBe,YAAcvE,EAAIuE,YAAYC,YAC9B+E,QAAU,GACVI,aAAc,EACdX,gBAAiB,EACjBC,gBAAiB,GAIlBjJ,EAAI4J,kBAAoB,WAavBC,cAAgB,KAChBC,aAAe,EACfC,gBAAkB,EAClBC,kBAAoB,IAAIC,MACxBC,UAAY,KACZC,QAAU,KACVC,WAAa,KACbC,OAAS,MAKVrK,EAAIsK,gBAAkB,WACrBC,mBAAqB,EACrBC,gBAAkB,EAClBC,kBAAoB,EACpB9J,iBAAmB,EACnB+J,kBAAoB,KACpBC,UAAY,KACZP,WAAa,KAEbP,cAAgB,KAChBC,aAAe,EACfC,gBAAkB,EAGlBa,wBAAyB,EACzBC,uBAAyB7K,EAAI2G,mBAAmBC,KAChDkE,wBAA0B,GAG3B9K,EAAI+K,eAAiB,WACpBC,kBAAoB,EACpBR,gBAAkB,EAClBC,kBAAoB,EACpB9J,iBAAmB,EACnB+J,kBAAoB,KACpBC,UAAY,KACZP,WAAa,KACba,YAAc,EAEdpB,cAAgB,KAChBC,aAAe,EACfC,gBAAkB,EAGlBa,wBAAyB,EACzBC,uBAAyB7K,EAAI2G,mBAAmBC,KAChDkE,wBAA0B,GAG3B9K,EAAIkL,OAAS,aAOblL,EAAImL,cAAgB,WAUR7O,KACN8O,SAAW,MADL9O,KAEN+O,aAAe,KAFT/O,KAGNgP,aAAe,KAHThP,KAINiP,aAAe,KAJTjP,KAKNkP,OAAS,EALHlP,KAMNmP,UAAY,GAGlBzL,EAAI0L,cAAgB,WAWRpP,KACN8O,SAAW,MADL9O,KAEN+O,aAAe,KAFT/O,KAGNgP,aAAe,KAHThP,KAINiP,aAAe,KAJTjP,KAKNkP,OAAS,KALHlP,KAMNqP,UAAY,KANNrP,KAONsP,QAAU,MAKhB5L,EAAIgB,aAAc,EAElBhB,EAAIc,OAAS,GAEbd,EAAI6L,OAAS,SAAUC,EAASC,EAAeC,EAAaC,EAAkBC,EAAqBC,GAWnF5O,MAAXuO,GAAmC,MAAXA,IAC3B9L,EAAIc,OAASgL,GAEd9L,EAAII,aAAe2L,EACnB/L,EAAIM,WAAa0L,EACjBhM,EAAIQ,gBAAkByL,EACtBjM,EAAIU,mBAAqBwL,EACzBlM,EAAIY,QAAUuL,EACdnM,EAAIgB,aAAc,GAiCnBhB,EAAIoM,kBAAoB,SAAUlM,GAMjC,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,oBAAqB,KAAMnM,IAIhDF,EAAIsM,cAAgB,SAAUC,EAAcrM,GAM3C,GAAKD,EAAmBC,GACxB,OAAOmM,EAAa,gBAAiB,CAAEE,aAAcA,GAAgBrM,IAItEF,EAAIwM,oBAAsB,SAAUC,EAAgBvM,GAMnD,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,sBAAuB,CAAEI,eAAgBA,GAAkBvM,IAGhFF,EAAI0M,eAAiB,SAAUC,EAAYzM,GAO1C,GAAKD,EAAmBC,GAGxB,OAAOmM,EAAa,iBAAkB,CAACO,SAFxBlP,KAAKE,UAAU+O,IAE8BzM,IAI7DF,EAAI6M,iBAAmB,SAAUN,EAAcrM,GAO9C,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,mBAAoB,CAAEE,aAAcA,GAAgBrM,IAIzEF,EAAI8M,UAAY,SAAUC,EAAUC,EAAa9M,GAchD,GANI+B,EAAY+K,KACf9M,EAAW8M,EACXA,EAAc,MAIV/M,EAAmBC,GAQxB,OAAOmM,EAAa,YANL,CACdU,SAAUA,EACVC,YAAaA,EACbC,UAAU,GAGgC/M,IAI5CF,EAAIkN,iBAAmB,SAAUH,EAAU7M,GAO1C,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,mBAAoB,CAAEU,SAAUA,GAAY7M,IAIjEF,EAAImN,aAAe,SAAUJ,EAAU7M,GAOtC,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,eAAgB,CAAEU,SAAUA,GAAY7M,IAI7DF,EAAIoN,cAAgB,SAAUL,EAAUM,EAAMC,EAAQpN,GASrD,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,gBAAiB,CAAEU,SAAUA,EAAUQ,QAASF,EAAMC,OAAQA,GAAUpN,IAK7FF,EAAIwN,oBAAsB,SAAUT,EAAUU,EAASvN,GAQtD,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,sBAAuB,CAAEU,SAAUA,EAAUU,QAASA,GAAWvN,IAItFF,EAAI0N,eAAiB,SAAUX,EAAUY,EAAaL,EAAQG,EAASvN,GAetE,GALI+B,EAAYwL,KACfvN,EAAWuN,EACXA,EAAU,IAGNxN,EAAmBC,GAaxB,OAVc3C,MAAV+P,GAAiC,MAAVA,IAAgBA,EAAS,IACrC/P,MAAXkQ,GAAmC,MAAXA,IAAiBA,EAAU,IAShDpB,EAAa,iBAPL,CACdU,SAAUA,EACVY,YAAaA,EACbL,OAAQA,EACRG,QAASA,GAGsCvN,IAIjDF,EAAI4N,mBAAqB,SAAUb,EAAUc,EAAWC,EAAkB5N,GASzE,GAAKD,EAAmBC,GAOxB,OAAOmM,EAAa,qBANL,CACdU,SAAUA,EACVc,UAAWA,EACXC,iBAAkBA,GAGiC5N,IAIrDF,EAAI+N,sBAAwB,SAAUxB,EAAcoB,EAAaK,EAAaC,EAAuB/N,GAUpG,GAAKD,EAAmBC,GAcxB,OAZgB3C,MAAZ2C,GAAyB+B,EAAYgM,KACxC/N,EAAW+N,EACXA,EAAwB,MAUlB5B,EAAa,wBAPL,CACdE,aAAcA,EACd2B,cAAeP,EACfK,YAAaA,EACbC,sBAAuBA,GAG+B/N,IAGxDF,EAAImO,sBAAwB,SAAU5B,EAAcoB,EAAaK,EAAaC,EAAuB/N,GASpG,GAAKD,EAAmBC,GAcxB,OAZgB3C,MAAZ2C,GAAyB+B,EAAYgM,KACxC/N,EAAW+N,EACXA,EAAwB,MAUlB5B,EAAa,wBAPL,CACdE,aAAcA,EACd2B,cAAeP,EACfK,YAAaA,EACbC,sBAAuBA,GAG+B/N,IAGxDF,EAAIoO,oBAAsB,SAAU7B,EAAcrM,GAOjD,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,sBAAuB,CAAEE,aAAcA,GAAgBrM,IAM5EF,EAAIqO,WAAa,SAAUC,EAASpO,GAMnC,GAAKD,EAAmBC,GAWxB,OAAOmM,EAAa,aATL,CACdjB,SAAUkD,EAAQlD,SAClBC,aAAciD,EAAQjD,aACtBC,aAAcgD,EAAQhD,aACtBC,aAAc+C,EAAQ/C,aACtBC,OAAQ8C,EAAQ9C,OAChBC,UAAW6C,EAAQ7C,WAGwBvL,IAI7CF,EAAIuO,SAAW,SAAUC,EAAetO,GAMvC,GAAKD,EAAmBC,GAAxB,CAEA,IAAIuO,EAAe,KACfC,EAAa,KAmBjB,OAlBIF,EAAc7C,YACjB8C,EAAeD,EAAc7C,UAAUzO,SAAS,eAG7CsR,EAAc5C,UACjB8C,EAAaF,EAAc5C,QAAQ1O,SAAS,eAatCmP,EAAa,WAVL,CACdjB,SAAUoD,EAAcpD,SACxBC,aAAcmD,EAAcnD,aAC5BC,aAAckD,EAAclD,aAC5BC,aAAciD,EAAcjD,aAC5BC,OAAQgD,EAAchD,OACtBG,UAAW8C,EACX7C,QAAS8C,GAG+BxO,KAK1CF,EAAI2O,WAAa,SAAUC,EAAU1O,GAOpC,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,aAAc,CAAEuC,SAAUA,GAAY1O,IAK3DF,EAAI6O,WAAa,SAAUC,EAAQ5O,EAAU0O,EAAUjC,GAQtD,GAAK1M,EAAmBC,GAAxB,CAGA,GADc,MAAV4O,GAAgB5O,EAASF,EAAIiB,aAAaC,MAAO,qCACxB3D,MAAzBuR,EAAO1F,gBAAwD,MAAzB0F,EAAO1F,gBAAmD,IAAzB0F,EAAO1F,eAKjF,OAJAlJ,EAAS,CACRe,aAAcjB,EAAIiB,aAAaC,MAC/BC,QAAS,gDAEH,KAGR,IAAI4N,EAAc,WAGjB,GAAkBxR,MAAdoP,GAAyC,MAAdA,EAK9B,OAJAzM,EAAS,CACRe,aAAcjB,EAAIiB,aAAaC,MAC/BC,QAAS,mBAAqB2N,EAAO1F,eAAiB,yBAEhD,KAMR,IADA,IAAI4F,EAAiB,GACZnS,EAAI,EAAGA,EAAI8P,EAAWsC,WAAWnS,OAAQD,IAAK,CACtD,IAAIyE,EAAYqL,EAAWsC,WAAWpS,GAClC0E,EAAauN,EAAOxN,EAAU4N,MAEhB3R,MAAdgE,GAAyC,MAAdA,GAEKhE,MAA/BgE,EAAW8F,mBAA+B9F,EAAaA,EAAW8F,kBAIvE,IAAI7F,EAAamL,EAAWsC,WAAWpS,GAAGmF,MAe1C,GAX2B,GAAvBV,EAAU6N,YAEK5R,MAAdgE,GAAyC,MAAdA,GAAuD,GAAjC,IAAIiB,OAAOjB,GAAYzE,SAE3EkS,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,OAASG,EAAUU,MAAQ,yBAKrBzE,MAAdgE,GAAyC,MAAdA,GAAoC,IAAdA,EAMrD,OAAQD,EAAUiB,UAEjB,KAAKvC,EAAIuC,SAASU,QAC2B,QAAxC,IAAIT,OAAOjB,GAAY1C,eACiB,SAAxC,IAAI2D,OAAOjB,GAAY1C,gBAC1BmQ,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,2BAA6BI,EAAa,eAAiBD,EAAUU,MAAQ,mBAGxF,MACD,KAAKhC,EAAIuC,SAASK,SAEjB,IAAIwM,EAAIC,OAAO9N,EAAY,sBACvB+N,EAAK,KACLF,EAAEG,YAAWD,EAAKF,EAAEI,UAEd,MAANF,IACHN,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,2BAA6BI,EAAa,eAAiBD,EAAUU,MAAQ,qBAGxF,MACD,KAAKhC,EAAIuC,SAASI,OAEb8M,MAAMC,WAAWnO,MACpByN,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,2BAA6BI,EAAa,eAAiBD,EAAUU,MAAQ,kBAGxF,MACD,KAAKhC,EAAIuC,SAASG,IACb+M,MAAME,SAASpO,MAClByN,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,2BAA6BI,EAAa,eAAiBD,EAAUU,MAAQ,kBAGxF,MACD,KAAKhC,EAAIuC,SAASC,OAEU,GAAvBlB,EAAUsO,WAAkBrO,EAAWsO,OAAS,IACnDb,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,wBAA0BG,EAAUU,MAAQ,oCAI9CV,EAAUsO,UAAY,GAAKrO,EAAWsO,OAASvO,EAAUsO,YACjEZ,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,wBAA0BG,EAAUU,MAAQ,YAAcV,EAAUsO,UAAY,yBAI3F,IAAIE,EAAKzO,EAAcC,EAAWC,EAAYC,GACpC,MAANsO,IACHd,EAAeA,EAAelS,QAAUgT,GAGzC,MAED,QAGKxO,EAAUsO,UAAY,GAAKrO,EAAWsO,OAASvO,EAAUsO,YAC5DZ,EAAeA,EAAelS,QAAU,CACvCiF,UAAWT,EACXH,QAAS,wBAA0BG,EAAUU,MAAQ,YAAcV,EAAUsO,UAAY,yBAI3F,IAAIG,EAAK1O,EAAcC,EAAWC,EAAYC,GACpC,MAANuO,IACHf,EAAeA,EAAelS,QAAUiT,IAQ5C,KAAIf,EAAelS,OAAS,GAA5B,CAkBA,IAAI8P,EAAWlP,KAAKE,UAAUkR,GAG9B,OAFgBvR,MAAZqR,GAAqC,MAAZA,IAAkBA,EAAW,IAEnDvC,EAAa,aAAc,CAAEuC,SAAUA,EAAUhC,SAAUA,GAAW1M,GAnB5E,IADA,IAAI8P,EAAM,GACDC,EAAI,EAAGA,EAAIjB,EAAelS,OAAQmT,IAC1CD,GAAO,MAAQhB,EAAeiB,GAAG9O,QAAU,KAG5CjB,EAAS,CACRe,aAAcjB,EAAIiB,aAAaC,MAC/BC,QAAS6O,EACTE,iBAAkBlB,KAgBrB,GAAIrC,EACH,OAAOoC,IAIR/O,EAAIwM,oBAAoBsC,EAAO1F,gBAAgB,SAAU+G,GAExD,OAAIA,EAASlP,cAAgBjB,EAAIiB,aAAaC,WAC7ChB,EAASiQ,IAGTxD,EAAawD,EAAS/O,aACf2N,UA+CV/O,EAAIoQ,cAAgB,SAAUC,EAAWnQ,GAOxC,GAAKD,EAAmBC,GAGxB,OAAOmM,EAAa,gBAAiB,CAAExK,OAD1BnE,KAAKE,UAAUyS,GAC2BpD,UAAU,GAAQ/M,IAI1EF,EAAIsQ,eAAiB,SAAUC,EAAkBrQ,GAOhD,GAAKD,EAAmBC,GAIxB,OAAOmM,EAAa,iBAAkB,CAAExK,OAF3BnE,KAAKE,UAAU2S,GAE4BtD,UAAU,GAAQ/M,IAK3EF,EAAIwQ,uBAAyB,SAAUD,EAAkBrQ,GAOxD,GAAKD,EAAmBC,GAGxB,OAAOmM,EAAa,yBAA0B,CAAExK,OADnCnE,KAAKE,UAAU2S,IACsCrQ,IAKnEF,EAAIyQ,qBAAuB,SAAUJ,EAAWnQ,GAO/C,GAAKD,EAAmBC,GAGxB,OAAOmM,EAAa,uBAAwB,CAAEqE,kBADjChT,KAAKE,UAAUyS,IAC+CnQ,IAI5EF,EAAI2Q,WAAa,SAAUC,EAAgB1Q,GAC1C,IAAI2Q,EAASD,EACbC,EAAO9G,eAAiB/J,EAAIsG,uBAAuBE,OACnDxG,EAAI8Q,mBAAmBD,EAAQ3Q,IAGhCF,EAAI+Q,SAAW,SAAUC,EAAiB9Q,GACzC,IAAI+Q,EAAOD,EACXC,EAAKlH,eAAiB/J,EAAIsG,uBAAuBC,KACjD0K,EAAK7G,YAAa,EAElBpK,EAAIkR,oBAAoBD,EAAM/Q,IAG/BF,EAAImR,SAAW,SAAUH,EAAiB9Q,GACzC,IAAIkR,EAAOJ,EACXI,EAAKhH,YAAa,EAClBgH,EAAKrH,eAAiB/J,EAAIsG,uBAAuBG,KAEjDzG,EAAIkR,oBAAoBE,EAAMlR,IAG/BF,EAAIqR,sBAAwB,SAAUL,EAAiBM,EAAYpR,GAClE,IAAIqR,EAAKP,EACTO,EAAGnH,WAAakH,EAChBC,EAAGxH,eAAiB/J,EAAIsG,uBAAuBI,kBAE/C1G,EAAIkR,oBAAoBK,EAAIrR,IAI7BF,EAAI8Q,mBAAqB,SAAUF,EAAgB1Q,GAOlD,GAAKD,EAAmBC,GAQxB,OANIF,EAAIU,mBAAqB,IAC5BkQ,EAAejQ,gBAAkBX,EAAIU,oBAK/B2L,EAAa,qBAAsB,CAAEO,SAF7BlP,KAAKE,UAAUgT,IAEoC1Q,IAKnEF,EAAIkR,oBAAsB,SAAUF,EAAiB9Q,GAOpD,GAAKD,EAAmBC,GAUxB,OARIF,EAAIU,mBAAqB,IAC5BsQ,EAAgBrQ,gBAAkBX,EAAIU,oBAOhC2L,EAAa,sBAAuB,CAAEO,SAF9BlP,KAAKE,UAAUoT,IAEqC9Q,IAIpE,IAAIsR,EAAiB,KAErBxR,EAAIyR,YAAc,SAAUvR,EAAUwR,GAOrC,GAAKzR,EAAmBC,GAExB,OAAsB,MAAlBsR,GAAyC,GAAfE,EAEtBrF,EAAa,cAAe,MAAM,SAAUsF,GAC9CA,EAAK1Q,cAAgBjB,EAAIiB,aAAa6D,KAGzC0M,EAAiBG,EAAKvQ,cAFtBlB,EAASyR,OASXzR,EAAS,CACRe,aAAcjB,EAAIiB,aAAa6D,GAC/B1D,aAAcoQ,IAER,OAKTxR,EAAI4R,aAAe,SAAUC,EAAU3R,GAOtC,GAAKD,EAAmBC,GAQxB,OANAsR,EAAiB,KAMVnF,EAAa,eAAgB,CAAEO,SAJvBlP,KAAKE,UAAUiU,IAI8B3R,IAK7DF,EAAI8R,0BAA4B,SAAU5R,GAMzC,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,4BAA6B,KAAMnM,IAIxDF,EAAI+R,yBAA2B,SAAUC,EAAsB9R,GAO9D,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,2BAA4B,CAAE2F,qBAAsBA,GAAwB9R,IAKjGF,EAAIiS,uBAAyB,SAAUC,EAAoBhS,GAO1D,GAAKD,EAAmBC,GAIxB,OAAOmM,EAAa,yBAA0B,CAAEO,SAFjClP,KAAKE,UAAUsU,IAEwChS,IAKvEF,EAAImS,mBAAqB,SAAUjS,GAMlC,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,qBAAsB,KAAMnM,IAIjDF,EAAIoS,QAAU,SAAUlS,GAMvB,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,UAAW,KAAMnM,IAKtCF,EAAIqS,qBAAuB,SAAUC,EAAQpS,GAO5C,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,uBAAwB,CAAEiG,OAAQA,GAAUpS,IAIjEF,EAAIuS,mBAAqB,SAAUC,EAAatS,GAO/C,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,qBAAsB,CAAEoG,WAAYD,GAAetS,IAIxEF,EAAI0S,WAAa,SAAU/W,EAAKuE,GAO/B,GAAKD,EAAmBC,GAExB,OAAOmM,EAAa,aAAc,CAAE1Q,IAAKA,GAAOuE,IAKjD,IAAIyS,EAAiB,GAyLrB,SAAStG,EAAauG,EAAYhG,EAAU1M,GAGtC0M,IAAUA,EAAW,IAE1B,IAAI9O,EAAMkC,EAAIc,OACd,GAAW,IAAPhD,GAAoB,MAAPA,EAAa,OAAO,KAarC,IARAA,GADAA,GAFAA,EAAMA,EAAIe,eAEAZ,QAAQ,UAAW,aACnBA,QAAQ,6BAA8B,aAExC4U,YAAY,MAAQ/U,EAAIhB,OAAS,IAAGgB,GAAO,KAGnDA,GAAO8U,EAGHhG,EAASA,SAAU,CACtB,IAAIkG,EAAclG,EAASA,SAE3BA,EAASA,SAAW,gBAAkBkG,EAC3B7U,QAAQ,KAAM,SACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QAK1B2O,EAASmG,UAAY/S,EAAII,aACzBwM,EAASoG,QAAUhT,EAAIM,WACvBsM,EAASqG,aAAejT,EAAIQ,gBAC5BoM,EAASsG,KAAOlT,EAAIY,QACpBgM,EAASuG,gBAAkBnT,EAAIU,mBAE/B,IAAIuM,EAAWL,EAASK,SACR,GAAZA,IAAkBA,GAAW,GAE3B,IAAImG,EAAcnG,EAAW,oCAAsC,mBAC/DoG,EAAgBpG,EAsCxB,SAASqG,EAAoBC,EAAQ5X,EAAI6X,GACjCA,EAAOA,GAAQ,GACnB,GAAoB,iBAAX,EACP,IAAK,IAAIC,KAAOF,EACdD,EAAoBC,EAAQE,GAAK9X,EAAIA,EAAI,IAAI8X,EAAI,IAAIA,EAAID,QAE3DA,EAAKE,KAAK/X,EAAI,IAAIgY,mBAAmBJ,IAEvC,OAAOC,EAAKI,KAAK,KA9CcN,CAAoB1G,GAAYlP,KAAKE,UAAUgP,GAE1EiH,EAAM,IAAIC,eACdD,EAAIE,KAAK,OAAQjW,GAAK,GACtB+V,EAAIG,iBAAiB,eAAgBZ,EAAY,kBACjDS,EAAII,iBAAkB,EACtBJ,EAAIK,OAAS,WACT,GAAIL,EAAIM,aAAeN,EAAIO,KACvB,GAAmB,MAAfP,EAAInL,OAAgB,CAEpB,IACI2L,EAASR,EAAIS,aAEbrH,GAAYoH,GAAUA,EAAO9V,SAAsC,GAA3B8V,EAAO9V,QAHrC,mBAMV8V,EAASA,EAAO7V,UANN,gBAMwB1B,QACTmB,QAAQ,UAAW,KACnBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KACjBA,QAAQ,SAAU,KAC3CoW,EAAS3W,KAAKC,MAAM0W,IAGxBnU,EAASmU,OAEN,CACCA,EAASR,EAAIS,aACjBpU,EAAS,CACLe,aAAcjB,EAAIiB,aAAaC,MAC/BC,QAASoT,iBAKzBV,EAAIW,KAAKnB,GAnQhBrT,EAAIyU,YAAc,SAAU9Y,EAAKuE,GAO3BD,EAAmBC,KAEG3C,MAAvBoV,EAAehX,GAClB0Q,EAAa,cAAe,CAAE1Q,IAAKA,IAAO,SAAUgW,GAC/CA,EAAK1Q,cAAgBjB,EAAIiB,aAAa6D,KACzC6N,EAAehX,GAAO,IAAI+Y,OAAO/C,EAAKvQ,eAEvClB,EAASyR,MAGVzR,EAAS,CACRe,aAAcjB,EAAIiB,aAAa6D,GAC/B1D,aAAc,IAAIsT,OAAO/B,EAAehX,QAM3CqE,EAAI2U,qCAAuC,SAAUC,EAAWC,EAAY3U,GAE3EiC,EAAU,kDAGXnC,EAAI8U,kCAAoC,SAAUC,EAAiBC,EAAQC,EAAUC,EAAUhV,GAE9FiC,EAAU,+CAGXnC,EAAImV,mCAAqC,SAAUC,EAAQJ,EAAQK,EAAWnV,GAC7EiC,EAAU,iDAIXnC,EAAIsV,iCAAmC,SAAU3Z,EAAK4Z,EAAQrV,GAE7DiC,EAAU,+CAIXnC,EAAIwV,gBAAkB,SAAUC,GAOzBtT,EAAU,6GAoCjBnC,EAAI0V,iBAAmB,SAAUD,GAO1BtT,EAAU,6GAKjBnC,EAAI2V,WAAa,SAAUC,EAAMtU,EAAWpB,EAAU2V,EAAeC,EAAgBC,GAGpF,GAAiB,MAAbzU,EACH,IAGC,GAAIA,EAAUsO,UAAY,EAAG,CAE5B,IAAIoG,EAAqC,KAAtB1U,EAAUsO,UAC7B,GAAIgG,EAAKK,KAAOD,EAKf,YAJA9V,EAAS,CACRe,aAAcjB,EAAIiB,aAAaC,MAC/BC,QAAS,iBAAmBG,EAAUsO,UAAY,OAOrD,IAhEH,SAA0BsG,EAAUC,GAEnC,GAAgB,MAAZA,GAAgC,IAAZA,EAAgB,OAAO,EAK/C,IAFAA,GADAA,EAAWA,EAASlY,QAAQ,SAAU,KAClBA,QAAQ,KAAM,KAEG,GAA9BkY,EAAS5X,QAAQ,UACvB4X,EAAWA,EAASlY,QAAQ,QAAS,KAEtCmY,UAAYD,EAASlY,QAAQ,MAAO,MAEpC,IAAIoY,EAAMD,UAAU1Z,MAAM,KAEtB4Z,EAAcJ,EAAS1X,UAAU0X,EAASrD,YAAY,MAAMhU,cAKhE,IAAK,IAAIhC,KAJwB,GAA7ByZ,EAAY/X,QAAQ,OACvB+X,EAAcA,EAAY9X,UAAU8X,EAAYzD,YAAY,MAAMhU,eAGrDwX,EAAK,CAClB,IAAIE,EAAMF,EAAIxZ,GAAG2Z,OACjB,KAAW,IAAPD,GAAaA,EAAIzZ,OAAS,GAAyB,GAApByZ,EAAIhY,QAAQ,QAC/CgY,EAAMA,EAAI/X,UAAU,GAAGK,gBACZyX,EACV,OAAO,EAIT,OAAO,EAoCAG,CAAiBb,EAAKzX,KAAMmD,EAAUG,iBAAkB,CAE5D,IAAI0U,EAAW7U,EAAUG,gBAEzB,IADA0U,EAAWA,EAASlY,QAAQ,SAAU,IAAIA,QAAQ,KAAM,KACnB,GAA9BkY,EAAS5X,QAAQ,UACtB4X,EAAWA,EAASlY,QAAQ,QAAS,KAEvCmY,UAAYD,EAASlY,QAAQ,MAAO,MAEpC,IAAI+R,EAAM,oCAAsCoG,UAAY,KAS5D,OARI9U,EAAUQ,oBACbkO,EAAM1O,EAAUQ,kBAAoB,KAAOsU,UAAY,UAGxDlW,EAAS,CACRe,aAAcjB,EAAIiB,aAAaC,MAC/BC,QAAS6O,KAKV,MAAO0G,GACR,OAKF1W,EAAIyR,aAAY,SAAUE,GAEzB,GAAIA,EAAK1Q,cAAgBjB,EAAIiB,aAAa6D,GAA1C,CAKC,IAAI+M,EAAWF,EAAKvQ,aAGW,MAA3ByQ,EAAS8E,gBAAqD,IAA3B9E,EAAS8E,eAM/CxU,EAAU,2CAJVnC,EAAI4W,iBAAiBhB,EAAM/D,EAAU3R,EAAU2V,EAAeC,EAAgBC,QAT/E7V,EAASyR,OAmBZ3R,EAAI4W,iBAAmB,SAAUhB,EAAM/D,EAAU3R,EAAU2V,EAAeC,EAAgBC,GAEzF5T,EAAU,8DAGXnC,EAAI6W,sBAAwB,SAAUjB,EAAM/D,EAAU3R,EAAU2V,EAAeC,EAAgBC,GAC9F5T,EAAU,oCAIXnC,EAAI8W,mCAAoC,EA6HxC,IAAIC,EAAkB,KAEtB/W,EAAIgX,kBAAoB,WAGvB,OADuB,MAAnBD,IAAyBA,EAAkB,YAAc/W,EAAII,cAC1D2W,GAGR/W,EAAIiX,kBAAoB,SAAUxX,GAEjC,OAAOsX,EAAkBtX,GAI1BO,EAAIkX,OAAS,SAAUC,GAKtB,IAAI1X,EAAaO,EAAIgX,oBACM,MAAvBG,IAA6B1X,GAAc0X,GAC/C,IAAIC,EAAana,KAAKoa,QAAQC,WAAW,GAEzC,IAAQxY,UAAUW,EADA,KACyB2X,EAAY,IAAK,MAAM,IAInEpX,EAAIuX,aAAe,SAAUJ,EAAqBK,EAAOtC,EAAUuC,EAAeC,EAAgBxX,GAwBjG,GAhBgB3C,MAAZ2C,GACmB3C,MAAlBma,GAA+BzV,EAAYyV,KAC9CxX,EAAWwX,EACXA,EAAiB,IAIHna,MAAZ2C,GACkB3C,MAAjBka,GAA8BxV,EAAYwV,KAC7CvX,EAAWuX,EACXA,GAAgB,GAIIla,MAAlBma,IAA6BA,EAAiB,IAE7CzX,EAAmBC,GASxB,OAAOmM,EAAa,eAPL,CACdsL,gBAAiBR,EACjBK,MAAOA,EACPtC,SAAUA,EACVwC,eAAgBA,IAG6B,SAAU/F,GAEvD,GAAYpU,MAARoU,EAAmB,CAEtB,IAAIiG,EAAQjG,EAAKvQ,aAEjB,GAAa7D,MAATqa,GAA+B,MAATA,GAA0B,IAATA,EAAa,CAEvD,IAAInY,EAAaO,EAAIgX,oBACM,MAAvBG,IAA6B1X,GAAc0X,GAE/C,IAAIU,EAAc,IAAIrV,OAAOoV,GACzBR,EAAa,KACbK,IACHL,EAAana,KAAKoa,QAAQC,UAAU,IAErC,IAAQxY,UAAUW,EAAYoY,EAAaT,EAAY,IAAK,MAAM,GAGnElX,EAAS,CACRe,aAAcjB,EAAIiB,aAAa6D,GAC/B1D,aAAcwW,EACdzW,QAAS,YAObnB,EAAI8X,gBAAkB,SAAUX,EAAqBjX,GAMpD,IAAIT,EAAaO,EAAIgX,oBACM,MAAvBG,IAA6B1X,GAAc0X,GAE/C,IAAIS,EAAQ,IAAQpY,UAAUC,GAG9B,GAAa,MAATmY,GAA0B,IAATA,GASrB,GAAK3X,EAAmBC,GAOxB,OAAOmM,EAAa,kBALL,CACd0L,oBAAqBH,EACrBD,gBAAiBR,IAG+B,SAAUxF,GAC1D,GAAYpU,MAARoU,GAA0CpU,MAArBoU,EAAKvQ,cAAkD,MAArBuQ,EAAKvQ,aAAsB,CAGrF,IAAI+R,EAAkBxB,EAAKvQ,aAAaT,gBACpCqS,EAAUrB,EAAKvQ,aAAab,QAC5B0S,EAAetB,EAAKvQ,aAAaX,aACjCyS,EAAOvB,EAAKvQ,aAAaP,WACzBkS,EAAYpB,EAAKvQ,aAAaf,UAGlCL,EAAII,aAAe2S,EACnB/S,EAAIM,WAAa0S,EACjBhT,EAAIQ,gBAAkByS,EACtBjT,EAAIU,mBAAqByS,EACzBnT,EAAIY,QAAUsS,EAGdhT,EAAS,CACRe,aAAcjB,EAAIiB,aAAa6D,GAC/B1D,aAAc+R,EACdhS,QAAS,gBApCXjB,EAAS,CACRe,aAAcjB,EAAIiB,aAAa6D,GAC/B1D,cAAc,EACdD,QAAS,QAuCZnB,EAAIgY,eAAiB,SAAUC,EAAiBC,EAAahY,GAO5D,GAAIF,EAAIU,mBAAqB,EAC5BR,EAAS,CACRe,aAAcjB,EAAIiB,aAAaC,MAC/BE,cAAc,EACdD,QAAS,8CAKX,GAAKlB,EAAmBC,GAOxB,OAAOmM,EAAa,iBALL,CACd4L,gBAAiBA,EACjBC,YAAaA,IAGkC,SAAUvG,GACzDzR,EAASyR,OAIX3R,EAAImY,iBAAmB,SAAUhB,EAAqBK,EAAOtX,GAO5D,GAAKD,EAAmBC,GASxB,OARW,IAAI+J,OACVyJ,KAAKyD,GAOH9K,EAAa,mBALL,CACdsL,gBAAiBR,EACjBK,MAAOA,IAG0C,SAAU7F,GAC/CpU,MAARoU,GAA0CpU,MAArBoU,EAAKvQ,cAAkD,MAArBuQ,EAAKvQ,cAG/DlB,EAAS,CACRe,aAAcjB,EAAIiB,aAAa6D,GAC/B1D,aAAcuQ,EAAKvQ,aACnBD,QAAS,WAMbnB,EAAIoY,iBAAmB,SAAUlY,GAC1BiC,EAAU,2CAGjBnC,EAAIqY,aAAe,SAAU5L,EAAgBgJ,EAASvV,GACrDiC,EAAU,2CAGXnC,EAAIsY,eAAiB,SAAU7L,EAAgBM,EAAU7M,GACxDiC,EAAU,2CAGXnC,EAAIuY,oBAAsB,SAAUC,EAAMC,EAAWvY,GACpDiC,EAAU,6FAGXnC,EAAI0Y,YAAc,SAAUC,GAO3B,IAAIC,EAAK,IAAIpW,OAAOmW,GAChBE,EAAM,IAAIrW,OAMd,OAJW,OADXqW,EAAMD,EAAGE,MAAM,qBACID,EAAI/b,OAAS,IAAG8b,EAAKC,EAAM,KAE9CD,EAAKA,EAAG/Z,eAEDgD,OAAO,aAAe,EACrB,0BAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,2BAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,kBAEJ+W,EAAG/W,OAAO,aAAe,EACrB,yBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,kBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,sBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,4BAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,2BAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EALtB,gCAQJ+W,EAAG/W,OAAO,cAAgB,EACtB,iCAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,qBAEJ+W,EAAG/W,OAAO,aAAe,EACrB,8BAEJ+W,EAAG/W,OAAO,kBAAoB,EAC1B,2BAEJ+W,EAAG/W,OAAO,kBAAoB,GAG9B+W,EAAG/W,OAAO,cAAgB,EAFtB,+BAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,yBAEJ+W,EAAG/W,OAAO,aAAe,EACrB,qBAEJ+W,EAAG/W,OAAO,kBAAoB,EAC1B,sBAEJ+W,EAAG/W,OAAO,iBAAmB,EACzB,6BAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,6BAEJ+W,EAAG/W,OAAO,aAAe,EACrB,yBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,oBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,mBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,kCAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAFtB,kBAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,qBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,mBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,oBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,gBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,qBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,kBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,qCAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,oBAEJ+W,EAAG/W,OAAO,gBAAkB,EACxB,sBAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,EAXtB,6BAcJ+W,EAAG/W,OAAO,gBAAkB,EACxB,wBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,kBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,EALvB,eAQJ+W,EAAG/W,OAAO,eAAiB,EACvB,eAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,EALtB,aAQJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAFtB,YAKJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAFtB,YAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,EALtB,aAQJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,EAFvB,aAKJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAFtB,kBAKJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EARtB,iBAWJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,iBAEJ+W,EAAG/W,OAAO,aAAe,GAGzB+W,EAAG/W,OAAO,cAAgB,EAFtB,yBAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,kBAEJ+W,EAAG/W,OAAO,aAAe,GAGzB+W,EAAG/W,OAAO,cAAgB,EAFtB,yBAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,eAAiB,EACvB,qBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EALtB,aAQJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,YAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,gBAEJ+W,EAAG/W,OAAO,eAAiB,EACvB,2BAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,EAFvB,aAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAFtB,gBAKJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,EAFvB,WAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,gBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,sBAEJ+W,EAAG/W,OAAO,eAAiB,EACvB,uBAEJ+W,EAAG/W,OAAO,eAAiB,EACvB,kBAEJ+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,EAFtB,YAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,aAEJ+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,EAFtB,YAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,aAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,gBAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAFtB,aAKJ+W,EAAG/W,OAAO,aAAe,GAGzB+W,EAAG/W,OAAO,gBAAkB,EAFxB,eAKJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,EARtB,kBAWJ+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAdtB,aAiBJ+W,EAAG/W,OAAO,aAAe,GAGzB+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,eAAiB,EARvB,kBAWJ+W,EAAG/W,OAAO,eAAiB,GAG3B+W,EAAG/W,OAAO,cAAgB,EAFtB,oBAKJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,EAFvB,aAKJ+W,EAAG/W,OAAO,qBAAuB,EAC7B,eAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,cAAgB,EAFtB,eAKJ+W,EAAG/W,OAAO,cAAgB,EACtB,oBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,oBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,cAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,iBAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,gCAEJ+W,EAAG/W,OAAO,cAAgB,EACtB,iBAEJ+W,EAAG/W,OAAO,cAAgB,GAG1B+W,EAAG/W,OAAO,eAAiB,EAFvB,kBAKD","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","/*! Agility\r\n*/\r\n\r\n'use strict';\r\n\r\nvar Agility = new function() {\r\n\tvar A = this;\r\n\r\n\tA.RegisterNamespace = function(space) {\r\n\t\t/// \r\n\t\t/// Register a javascript namespace.\r\n\t\t/// \r\n\t\t/// The namespace (dot-separated) to register.\r\n\t\t/// Object representing the created namespace.\r\n\r\n\t\tvar spaces = space.split(\".\"),\r\n\t\t\troot = window;\r\n\r\n\t\tfor (var i = 0; i < spaces.length; i++) {\r\n\t\t\tif (typeof (root[spaces[i]]) == \"undefined\") {\r\n\t\t\t\troot = root[spaces[i]] = {};\r\n\t\t\t} else {\r\n\t\t\t\troot = root[spaces[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn root;\r\n\t};\r\n\t\r\n\tvar _sessionLevelCacheKey = null;\r\n\tA.SessionLevelCacheKey = function() {\r\n\t\t/// \r\n\t\t/// gets a string that is based on the date and time that this page was loaded. Use this for Client Templating with urls.\r\n\t\t/// \r\n\t\t\r\n\t\tif (_sessionLevelCacheKey == null) {\r\n\t\t\t_sessionLevelCacheKey = (new Date()).toString(\"yyyyMMddHHmmss\");\r\n\t\t}\r\n\t\treturn _sessionLevelCacheKey;\r\n\t\t\r\n\t};\r\n \r\n var _unique = {};\r\n\tvar _uniqueIndex = 0;\r\n\tA.UniqueID = function(prePend){\r\n\t\t/// \r\n\t\t/// Build a Unique ID (unique to this instance).\r\n\t\t/// \r\n\t\t/// The value to prepend to the Unique portion.\r\n\t\t\t\t\t\t\r\n\t\tif (prePend == undefined || prePend == null || prePend == \"\") {\r\n\t\t\treturn _uniqueIndex++;\r\n\t\t} else {\r\n\t\t\tif (_unique[prePend] == undefined) _unique[prePend] = 0;\r\n\t\t\treturn prePend + _unique[prePend]++;\r\n\t\t}\t\t\t\t\r\n\t};\r\n\r\n A.CloneObject = function (what) {\r\n\t\t/// \r\n\t\t/// Clones an object to preserve the original value.\r\n\t\t/// \r\n\t\treturn JSON.parse(JSON.stringify(what));\r\n\t};\r\n\r\n\tA.ResolveUrl = function(url) {\r\n\t\t/// \r\n\t\t/// Resolve \"~/\" to the application's base url. *Requires that global var \"Edentity_BaseUrl\" has been set.\r\n\t\t/// \r\n\t\t/// The URL whose path to resolve.\r\n\t\t/// String representing the resolved URL.\r\n\r\n\t\tvar baseUrl = window.Agility_BaseUrl || \"/\";\r\n\t\treturn url.replace(/^~\\//, baseUrl);\r\n\t};\r\n\t\r\n\tA.QueryString = function(name, url) {\r\n\t\t/// \r\n\t\t/// Gets a variable from the query string. \r\n\t\t/// \r\n\t\t/// QueryString variable to retrieve.\r\n\t\t/// (Optional) the url to take the querystring from. If this is not present, the current url is used.\r\n\t\t\r\n\t\tif (url == undefined || url == null || url == \"\") {\r\n\t\t\turl = location.href;\r\n\t\t}\r\n\t\t\r\n\t\tvar index = url.indexOf(\"?\");\r\n\t\tif (index < 1 && index == url.length - 2) return null;\r\n\t\tif (url.indexOf(\"#\") != -1) {\r\n\t\t\turl = url.substring(0, url.indexOf(\"#\"));\r\n\t\t}\r\n\t\t\r\n\t\tvar qstr = url.substring(index + 1, url.length);\r\n\t\t\r\n\t\tvar ary1 = qstr.split(\"&\");\r\n\t\tvar retValue = null;\r\n\t\t\r\n\t\tfor(var i in ary1) {\r\n\t\t\tvar q = ary1[i];\r\n\t\t\tvar ary2 = q.split(\"=\");\r\n\t\t\tif (ary2.length == 2) {\r\n\t\t\t\tif (unescape(ary2[0]).toLowerCase() == name.toLowerCase()) {\r\n\t\t\t\t\r\n\t\t\t\t\tretValue = ary2[1];\t\t\t\t\t\r\n\t\t\t\t\tretValue = retValue.replace(/\\+/g, \"%20\");\r\n\t\t\t\t\tretValue = unescape(retValue);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn retValue;\r\n\t\t\r\n\t};\r\n\t\r\n\tA.SetCookie = function(name, value, expires, path, domain, secure ) {\r\n /// Sets a cookie based on the name and value provided.\r\n /// The name of the cookie to set the value of.\r\n /// The value of the cookie to set.\r\n /// (Optional) The date that the cookie should expire.\r\n /// (Optional) The path of the cookie.\r\n /// (Optional) The domain of the cookie.\r\n /// (Optional) Whether the cookie is secure or not.\r\n\r\n\t\tvar expires_date = expires;\r\n\r\n\t\tdocument.cookie = name + \"=\" +escape( value ) +\r\n\t\t( ( expires ) ? \";expires=\" + expires_date.toGMTString() : \"\" ) +\r\n\t\t( ( path ) ? \";path=\" + path : \"\" ) +\r\n\t\t( ( domain ) ? \";domain=\" + domain : \"\" ) +\r\n\t\t( ( secure ) ? \";secure\" : \"\" );\r\n\t};\r\n\t\r\n\tA.GetCookie = function ( cookieName ) {\r\n /// Gets the value of the given cookieName from the current cookies collection.\r\n /// The name of the cookie to return.\r\n\r\n\t\t// first we'll split this cookie up into name/value pairs\r\n\t\t// note: document.cookie only returns name=value, not the other components\r\n\t\tvar a_all_cookies = document.cookie.split( ';' );\r\n\t\tvar a_temp_cookie = '';\r\n\t\tvar cookie_name = '';\r\n\t\tvar cookie_value = '';\r\n\t\tvar b_cookie_found = false; // set boolean t/f default f\r\n\r\n\t\tfor ( i = 0; i < a_all_cookies.length; i++ )\r\n\t\t{\r\n\t\t\t// now we'll split apart each name=value pair\r\n\t\t\ta_temp_cookie = a_all_cookies[i].split( '=' );\r\n\r\n\r\n\t\t\t// and trim left/right whitespace while we're at it\r\n\t\t\tcookie_name = a_temp_cookie[0].replace(/^\\s+|\\s+$/g, '');\r\n\r\n\t\t\t// if the extracted name matches passed cookieName\r\n\t\t\tif ( cookie_name == cookieName )\r\n\t\t\t{\r\n\t\t\t\tb_cookie_found = true;\r\n\t\t\t\t// we need to handle case where cookie has no value but exists (no = sign, that is):\r\n\t\t\t\tif ( a_temp_cookie.length > 1 )\r\n\t\t\t\t{\r\n\t\t\t\t\tcookie_value = unescape( a_temp_cookie[1].replace(/^\\s+|\\s+$/g, '') );\r\n\t\t\t\t}\r\n\t\t\t\t// note that in cases where cookie is initialized but no value, null is returned\r\n\t\t\t\treturn cookie_value;\r\n\t\t\t}\r\n\t\t\ta_temp_cookie = null;\r\n\t\t\tcookie_name = '';\r\n\t\t}\r\n\t\tif ( !b_cookie_found )\r\n\t\t{\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\t\r\n A.DeleteCookie = function(name, path, domain, secure) {\r\n /// Delete a cookie based on the name provided.\r\n /// The name of the cookie to set the value of.\r\n /// (Optional) The path of the cookie.\r\n /// (Optional) The domain of the cookie.\r\n /// (Optional) Whether the cookie is secure or not.\r\n\r\n if (A.GetCookie(name)) {\r\n document.cookie = name + \"=\" + (path ? \";path=\" + path : \"\") +\r\n (domain ? \";domain=\" + domain : \"\" ) + (secure ? \";secure\" : \"\") +\r\n \";expires=Thu, 01-Jan-1970 00:00:01 GMT\";\r\n }\r\n };\r\n\r\n}\r\n\r\nmodule.exports = Agility;\r\n","import Agility from 'agility'\r\n\r\n\r\nvar AgilityUGCAPI = new function() {\r\n\r\n var API = this;\r\n\r\n\t//ENUMS\r\n\tAPI.DataType = {\r\n\t\tString: 0,\r\n\t\tTextBlob: 1,\r\n\t\tInt: 2,\r\n\t\tDouble: 3,\r\n\t\tDateTime: 4,\r\n\t\tFile: 5,\r\n\t\tGUID: 6,\r\n\t\tEncrypted: 7,\r\n\t\tHashed: 8,\r\n\t\tBoolean: 9,\r\n\t\tDropdown: 10,\r\n\t\tHTML: 11,\r\n\t\tEmail: 12,\r\n Custom: 13\r\n\t}\r\n\r\n\tAPI.RecordState = {\r\n\t\tNew: 0,\r\n\t\tPublished: 1,\r\n\t\tDeleted: 2,\r\n\t\tProcessing: 3,\r\n\t\tDeclined: 4,\r\n\t\tError: 5,\r\n\t\tEscalated: 6,\r\n\t\tAwaitingReview: 7,\r\n\t\tDraft: 8,\r\n\t\tAll: -1\r\n\t}\r\n\r\n\tAPI.Permission = {\r\n\t\tRead: 0,\r\n\t\tCreate: 1,\r\n\t\tEdit: 2,\r\n\t\tDelete: 3,\r\n\t\tModerate: 4,\r\n\t\tAdminister: 5\r\n\t}\r\n\r\n\tAPI.FileStorage = {\r\n\t\tRelativeURL: 0,\r\n\t\tBaseURL: 1,\r\n\t\tEdgeURL: 2\r\n\t}\r\n\r\n\tAPI.SortDirection = {\r\n\t\tASC: \"ASC\",\r\n\t\tDESC: \"DESC\"\r\n\t}\r\n\r\n\tAPI.ResponseType = {\r\n\t\tOK: 0,\r\n\t\tError: 1\r\n\t}\r\n\r\n\tAPI.FileService = {\r\n\t\tAmazonS3: 0,\r\n\t\tYouTube: 1,\r\n\t\tFlickr: 2,\r\n\t\tImage: 3,\r\n\t\tVideo: 4,\r\n\t\tOoyala: 5,\r\n\t\tBrightcove: 6\r\n\t}\r\n\r\n\tAPI.FileServiceState = {\r\n\t\tNew: 0,\r\n\t\tUnprocessed: 1,\r\n\t\tProcessed: 2,\r\n\t\tError: 3\r\n\t}\r\n\r\n\tAPI.RecordFlag = {\r\n\t\tSpam: \"Spam\",\r\n\t\tFlagged: \"Flagged\",\r\n\t\tIllegal: \"Illegal\",\r\n\t\tAbuse: \"Abuse\"\r\n\t}\r\n\r\n\tAPI.AggregateTypes = {\r\n\t\tCount: 0,\r\n\t\tSum: 1,\r\n\t\tAverage: 2\r\n\t}\r\n\r\n\tAPI.FeedbackContentType = {\r\n\t\tWCM: 0,\r\n\t\tUGC: 1,\r\n\t\tCustom: 2\r\n\t}\r\n\r\n\tAPI.FeedbackSubmissionType = {\r\n\t\tLike: 0,\r\n\t\tRating: 1,\r\n\t\tVote: 2,\r\n\t\tApproveDisapprove: 3,\r\n\t\tCustom: 4\r\n\t}\r\n\r\n\tAPI.SubmissionInterval = {\r\n\t\tNone: -1,\r\n\t\tDay: 0,\r\n\t\tHour: 1,\r\n\t\tWeek: 2,\r\n\t\tMonth: 3,\r\n\t\tMinute: 4,\r\n\t\tSingleSubmissionOnly: 5\r\n\t}\r\n\r\n\r\n\tAPI.FileServiceMetaDataTypeName = \"JSONPFileServiceMetaData:#Agility.UGC.API.ServiceObjects\";\r\n\r\n\tAPI.YouTubeMetaField = {\r\n\t\tOriginalFilePath: \"OriginalFilePath\",\r\n\t\tVideoID: \"VideoID\",\r\n\t\tDescription: \"Description\",\r\n\t\tCategory: \"Category\",\r\n\t\tTitle: \"Title\",\r\n\t\tKeywords: \"Keywords\",\r\n\t\tPrivate: \"Private\",\r\n\t\tYouTubeState: \"YouTubeState\",\r\n\t\tDuration: \"Duration\"\r\n\t};\r\n\r\n\t//from here: http://www.flickr.com/services/api/upload.api.html\r\n\r\n\tAPI.FlickrMetaField = {\r\n\t\tOriginalFilePath: \"OriginalFilePath\",\r\n\t\ttitle: \"title\",\r\n\t\tdescription: \"description\",\r\n\t\ttags: \"tags\",\r\n\t\tis_public: \"is_public\",\r\n\t\tis_friend: \"is_friend\",\r\n\t\tis_family: \"is_family\",\r\n\t\tsafety_level: \"safety_level\",\r\n\t\thidden: \"hidden\",\r\n\t\tphoto_id: \"photo_id\"\r\n\r\n\t\t//other values are also appended as they are made available \r\n\t\t/*\r\n\t\tsecret\r\n\t\tphotopage\r\n\t\tSquareImageUrl\r\n\t\tThumbnailImageUrl\r\n\t\tSmallImageUrl\r\n\t\tMediumImageUrl\r\n\t\tLargeImageUrl\r\n\t\t*/\r\n\t};\r\n\r\n\tAPI.OoyalaMetaField = {\r\n\t\tembedCode: \"embedCode\",\r\n\t\ttitle: \"title\",\r\n\t\tdescription: \"description\",\r\n\t\tstatus: \"status\"\r\n\r\n\t\t//http://www.ooyala.com/support/docs/backlot_api#query\r\n\t\t//other metadata (plus any \"generic\" metadata) values are also appended as they are made available \r\n\t\t/*\r\n\t\tthumbnailUrl\r\n\t\thostedAt\r\n\t\tcontent_type\r\n\t\tuploadedAt\r\n\t\tlength\r\n\t\tsize\r\n\t\tupdatedAt\r\n\t\twidth\r\n\t\theight\r\n\t\t*/\r\n\t};\r\n\r\n\tAPI.SearchArg = function () {\r\n\t\tvar self = this;\r\n\t\t///\t\r\n\t\t///\tThe search object for the SearchRecords method.\r\n\t\t///\t\r\n\t\t///The number of records per page.\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///The search string.\r\n\t\t///A custom cache key that will be used instead of the record type id to cache the results with.\r\n\t\t///A list of the field names that you want to be returned.\r\n\r\n\t\tself.PageSize = 20;\r\n\t\tself.RecordOffset = 0;\r\n\t\tself.IncludeSpam = false;\r\n\t\tself.IncludeFlagged = false;\r\n\t\tself.IncludeIllegal = false;\r\n\t\tself.State = API.RecordState.Published;\r\n\t\tself.SortedField = \"\";\r\n\t\tself.SortDirection = \"\";\r\n\t\tself.RecordTypeName = null;\r\n\t\tself.Search = \"\";\r\n\t\tself.CacheKey = null;\r\n\t\tself.Columns = [];\r\n\t\tself.FileStorage = API.FileStorage.RelativeURL;\r\n\t\tself.IncludeStatistics = false;\r\n\t\tself.OtherStates = null;\r\n\t\r\n\r\n\t\tthis.toString = function () {\r\n\r\n\t\t\treturn self.PageSize + \".\" + self.RecordOffset + \".\" + self.IncludeSpam + \".\" + self.IncludeFlagged + \".\" + self.IncludeIllegal\r\n\t\t\t\t+ \".\" + self.State + \".\" + self.SortedField\r\n\t\t\t\t+ \".\" + self.SortDirection + \".\" + self.RecordTypeName + \".\" + self.Search\r\n\t\t\t\t+ \".\" + self.CacheKey + \".\" + self.Columns + \".\" + self.FileStorage + \".\" + self.IncludeStatistics + \".\" + self.OtherStates;\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tAPI.CommentSearchArg = function () {\r\n\t\t///\t\r\n\t\t///\tThe search object for the SearchComments method.\r\n\t\t///\t\r\n\t\t///The ID of the Related Content Item\r\n\t\t///The number of records per page.\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///A custom cache key that will be used instead of the record type id to cache the results with.\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///A list of the field names that you want to be returned.\r\n\r\n\r\n\t\tRelatedContentID: -1;\r\n\t\tPageSize: 20;\r\n\t\tRecordOffset: 0;\r\n\t\tSortedField: \"CreatedOn\";\r\n\t\tSortDirection: \"DESC\";\r\n\t\tRecordTypeName: \"\";\r\n\t\tCacheKey = null;\r\n\t\tOtherStates = [];\r\n\t\tState = API.RecordState.Published;\r\n\t\tFileStorage = API.FileStorage.RelativeURL;\r\n\t\tColumns = [];\r\n\t\tIgnoreAbuse = true;\r\n\t\tIncludeFlagged = false;\r\n\t\tIncludeIllegal = false;\r\n\r\n\t}\r\n\r\n\tAPI.FeedbackSearchArg = function () {\r\n\t\t///\t\r\n\t\t///\tThe search object for the GetFeedbackAggregate method.\r\n\t\t///\t\r\n\t\t///The Reference name of the list the feedback refers to\r\n\t\t///The content type the reference name refers to (WCM/UGC/Custom)\r\n\t\t///The submission type the reference name refers to (Like/Vote/Rating/ApproveDisaprove/Custom)\r\n\t\t///The ID the item is related to\r\n\t\t///\r\n\t\t///\r\n\t\t///\r\n\t\t///The action to perform (Count/Sum/Average)\r\n\r\n\t\tReferenceName = null;\r\n\t\tContentType = -1;\r\n\t\tSubmissionType = -1;\r\n\t\tRelatedContentIDs = new Array();\r\n\t\tStartDate = null;\r\n\t\tEndDate = null;\r\n\t\tIsPositive = null;\r\n\t\tAction = null;\r\n\r\n\t}\r\n\r\n\r\n\tAPI.BooleanFeedback = function () {\r\n\t\tBooleanFeedbackID = -1;\r\n\t\tFeedbackTypeID = -1;\r\n\t\tRelatedContentID = -1;\r\n\t\tProfileRecordID = -1;\r\n\t\tExternalProfileID = null;\r\n\t\tCreatedOn = null;\r\n\t\tIsPositive = null;\r\n\r\n\t\tReferenceName = null;\r\n\t\tContentType = -1;\r\n\t\tSubmissionType = -1;\r\n\r\n\t\t//Submission Rules\r\n\t\tRequiresAuthentication = false;\r\n\t\tSubmissionIntervalUnit = API.SubmissionInterval.None;\r\n\t\tSubmissionIntervalValue = 1;\r\n\t}\r\n\r\n\tAPI.RatingFeedback = function () {\r\n\t\tRatingFeedbackID = -1;\r\n\t\tFeedbackTypeID = -1;\r\n\t\tRelatedContentID = -1;\r\n\t\tProfileRecordID = -1;\r\n\t\tExternalProfileID = null;\r\n\t\tCreatedOn = null;\r\n\t\tIsPositive = null;\r\n\t\tRatingValue = 0;\r\n\r\n\t\tReferenceName = null;\r\n\t\tContentType = -1;\r\n\t\tSubmissionType = -1;\r\n\r\n\t\t//Submission Rules\r\n\t\tRequiresAuthentication = false;\r\n\t\tSubmissionIntervalUnit = API.SubmissionInterval.None;\r\n\t\tSubmissionIntervalValue = 1;\r\n\t}\r\n\r\n\tAPI.Record = function () {\r\n\t\tvar ID = -1;\r\n\t\tvar RecordTypeName;\r\n\t\tvar CreatedOn;\r\n\t\tvar ModifiedOn;\r\n\t}\r\n\r\n\tAPI.StatInsertArg = function () {\r\n\r\n\t\t/// The stat object to insert into the system.\r\n\t\t/// The type of item (WCM, UGC).\r\n\t\t/// The type of item being tracked, eg: Article Views.\r\n\t\t/// The name item being tracked, eg: Article: My Article.\r\n\t\t/// The language of the item being tracked. eg: en-us.\r\n\t\t/// The ID of the item.\r\n\t\t/// The number to associate with this state. Eg: 1, to indicate 1 view.\r\n\r\n\t\tvar self = this;\r\n\t\tself.itemType = \"WCM\";\r\n\t\tself.statTypeName = null;\r\n\t\tself.itemTypeName = null;\r\n\t\tself.languageCode = null;\r\n\t\tself.itemID = 0;\r\n\t\tself.statCount = 0;\r\n\t}\r\n\r\n\tAPI.StatSearchArg = function () {\r\n\t\t/// The search arg object to use to search for stats in the system. Most arguments are nullable.\r\n\t\t/// The type of item (WCM, UGC).\r\n\t\t/// The type of item being tracked, eg: Article Views.\r\n\t\t/// The name item being tracked, eg: Article: My Article.\r\n\t\t/// The language of the item being tracked. eg: en-us.\r\n\t\t/// The ID of the item to search for. Can be null.\r\n\t\t/// The date to start search from, in string format.\r\n\t\t/// The date to start search from, in string format.\r\n\r\n\r\n\t\tvar self = this;\r\n\t\tself.itemType = \"WCM\";\r\n\t\tself.statTypeName = null;\r\n\t\tself.itemTypeName = null;\r\n\t\tself.languageCode = null;\r\n\t\tself.itemID = null;\r\n\t\tself.startDate = null;\r\n\t\tself.endDate = null;\r\n\r\n\t}\r\n\r\n\r\n\tAPI.Initialized = false;\r\n\r\n\tAPI.APIUrl = \"\";\r\n\r\n\tAPI.OnInit = function (API_Url, API_AccessKey, API_Seconds, API_RandomNumber, API_ProfileRecordID, API_Hash) {\r\n\t\t/// \r\n\t\t/// Initialize the Agility DataService API\r\n\t\t/// \r\n\t\t/// The URL to the Agility DataService REST API. \r\n\t\t/// The API Key.\r\n\t\t/// The # of Seconds.\r\n\t\t/// A Random number. \r\n\t\t/// The current user ID. \r\n\t\t/// The API Hash. \r\n\t \r\n\t\tif (API_Url != undefined && API_Url != null) {\r\n\t\t\tAPI.APIUrl = API_Url;\r\n\t\t}\r\n\t\tAPI.APIAccessKey = API_AccessKey;\r\n\t\tAPI.APISeconds = API_Seconds;\r\n\t\tAPI.APIRandomNumber = API_RandomNumber;\r\n\t\tAPI.APIProfileRecordID = API_ProfileRecordID;\r\n\t\tAPI.APIHash = API_Hash;\r\n\t\tAPI.Initialized = true;\r\n\r\n\t}\r\n\r\n\r\n\tfunction checkApiIntialized(callback) {\r\n \r\n //check if we have a global object with these values already...\r\n if(window._AgilityUGCSettings) {\r\n API.APIAccessKey = window._AgilityUGCSettings.AccessKey;\r\n API.APISeconds = window._AgilityUGCSettings.Seconds;\r\n API.APIRandomNumber = window._AgilityUGCSettings.RandomNumber;\r\n API.APIProfileRecordID = window._AgilityUGCSettings.ProfileRecordID;\r\n API.APIHash = window._AgilityUGCSettings.AccessHash;\r\n API.APIUrl = window._AgilityUGCSettings.Url;\r\n API.Initialized = true;\r\n }\r\n\r\n\t\tif (API.APIUrl == null || API.APIUrl == \"\" || API.APIAccessKey == undefined) {\r\n\t\t\tcallback({\r\n\t\t\t\tResponseType: API.ResponseType.Error,\r\n\t\t\t\tMessage: \"The Agility UGC API has not been initialized. Inititialize the API by calling OnInit or add a global variable named window._AgilityUGCSettings with AccessHash, AccessKey, ProfileRecordID, RandumNumber, Seconds, and Url.\",\r\n\t\t\t\tResponseData: null\r\n\t\t\t});\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\r\n\tAPI.GetAllRecordTypes = function (callback) {\r\n\t\t/// \r\n\t\t/// Get All Record Types.\r\n\t\t/// \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetAllRecordTypes\", null, callback);\r\n\r\n\t}\r\n\r\n\tAPI.GetRecordType = function (recordTypeID, callback) {\r\n\t\t/// \r\n\t\t/// Get a record based on the record type id.\r\n\t\t/// \r\n\t\t/// The ID of the record type to return. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\t\treturn _performPost(\"GetRecordType\", { recordTypeID: recordTypeID }, callback);\r\n\r\n\t}\r\n\r\n\tAPI.GetRecordTypeByName = function (recordTypeName, callback) {\r\n\t\t/// \r\n\t\t/// Get a record based on the record type name.\r\n\t\t/// \r\n\t\t/// The name of the record type to return. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetRecordTypeByName\", { recordTypeName: recordTypeName }, callback);\r\n\t}\r\n\r\n\tAPI.SaveRecordType = function (recordType, callback) {\r\n\t\t/// \r\n\t\t/// Saves a record type.\r\n\t\t/// \r\n\t\t/// The record type to save. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\t\tvar postData = JSON.stringify(recordType);\r\n\r\n\t\treturn _performPost(\"SaveRecordType\", {postData: postData}, callback);\r\n\r\n\t}\r\n\r\n\tAPI.DeleteRecordType = function (recordTypeID, callback) {\r\n\t\t/// \r\n\t\t/// Get All Record Types.\r\n\t\t/// \r\n\t\t/// The ID of the record type to return. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"DeleteRecordType\", { recordTypeID: recordTypeID }, callback);\r\n\r\n\t}\r\n\r\n\tAPI.GetRecord = function (recordID, fileStorage, callback) {\r\n\t\t/// \r\n\t\t/// Gets a Record.\r\n\t\t/// \r\n\t\t/// The ID of the record to return. \r\n\t\t/// (optional) The method to be used for building file field URLs that may be on this document. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (_isFunction(fileStorage)) {\r\n\t\t\tcallback = fileStorage;\r\n\t\t\tfileStorage = null;\r\n\r\n\t\t}\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar postData = {\r\n\t\t\trecordID: recordID,\r\n\t\t\tfileStorage: fileStorage,\r\n\t\t\tsanitize: true\r\n\t\t};\r\n\t\t\r\n\t\treturn _performPost(\"GetRecord\", postData, callback);\r\n\r\n\t}\r\n\r\n\tAPI.GetRecordHistory = function (recordID, callback) {\r\n\t\t/// \r\n\t\t/// Gets a the Version Histor for a Record. This method requires admin access.\r\n\t\t/// \r\n\t\t/// The ID of the record to return. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetRecordHistory\", { recordID: recordID }, callback);\r\n\r\n\t}\r\n\r\n\tAPI.DeleteRecord = function (recordID, callback) {\r\n\t\t/// \r\n\t\t/// Deletes a Record.\r\n\t\t/// \r\n\t\t/// The ID of the record to return. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"DeleteRecord\", { recordID: recordID }, callback);\r\n\r\n\t}\r\n\r\n\tAPI.SetRecordFlag = function (recordID, flag, reason, callback) {\r\n\t\t/// \r\n\t\t/// Sets whether a record is flagged or not.\r\n\t\t/// \r\n\t\t/// The ID of the record to return. \r\n\t\t/// Whether the record is flagged or not. \r\n\t\t/// Whether the record is flagged or not. \t\t \t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"SetRecordFlag\", { recordID: recordID, flagStr: flag, reason: reason }, callback);\r\n\r\n\r\n\t}\r\n\r\n\tAPI.InsertRecordHistory = function (recordID, comment, callback) {\r\n\t\t/// \r\n\t\t/// Adds a comment to the record history.\r\n\t\t/// \r\n\t\t/// The ID of the record to return.\t\t\r\n\t\t/// The comment. \t\t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"InsertRecordHistory\", { recordID: recordID, comment: comment }, callback);\r\n\r\n\t}\r\n\r\n\tAPI.SetRecordState = function (recordID, recordState, reason, comment, callback) {\r\n\t\t/// \r\n\t\t/// Sets a record state. Used for publish/decline, etc.\r\n\t\t/// \r\n\t\t/// The ID of the record to return. \r\n\t\t/// The State of the record (from enum) \r\n\t\t/// The reason that the record is in this state. May be null if not an Error state. \t\t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\t\t/// The comment to send to the user with any notification, if any. \t\t\t\r\n\r\n\t\tif (_isFunction(comment)) {\r\n\t\t\tcallback = comment;\r\n\t\t\tcomment = \"\";\r\n\t\t}\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\t//note - this method has been changed to a POST so that the reason can be as long as needed.\r\n\t\tif (reason == undefined || reason == null) reason = \"\";\r\n\t\tif (comment == undefined || comment == null) comment = \"\";\r\n\r\n\t\tvar postData = {\r\n\t\t\trecordID: recordID,\r\n\t\t\trecordState: recordState,\r\n\t\t\treason: reason,\r\n\t\t\tcomment: comment\r\n\t\t};\r\n\r\n\t\treturn _performPost(\"SetRecordState\", postData, callback);\r\n\r\n\t}\r\n\r\n\tAPI.SetRecordFileState = function (recordID, fieldName, fileServiceState, callback) {\r\n\t\t/// \r\n\t\t/// Sets the file service state on a given file service field.\r\n\t\t/// \r\n\t\t/// The ID of the record to return. \r\n\t\t/// The name of the field the file is associated with on the record. \r\n\t\t/// The fileServiceState to set the field to. Normally this will be FileServiceState.Unprocessed. \t\t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\t\tvar postData = {\r\n\t\t\trecordID: recordID,\r\n\t\t\tfieldName: fieldName,\r\n\t\t\tfileServiceState: fileServiceState\r\n\t\t};\r\n\r\n\t\treturn _performPost(\"SetRecordFileState\", postData, callback);\r\n\r\n\t}\r\n\r\n\tAPI.UpdateRecordTypeAlert = function (recordTypeID, recordState, moderatorID, otherNotificationType, callback) {\r\n\t\t/// \r\n\t\t/// Inserts or updates a RecordTypeAlert.\r\n\t\t/// \r\n\t\t/// \r\n\t\t/// \r\n\t\t/// \t\r\n\t\t/// \t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tif (callback == undefined && _isFunction(otherNotificationType)) {\r\n\t\t\tcallback = otherNotificationType;\r\n\t\t\totherNotificationType = null;\r\n\t\t}\r\n\r\n\t\tvar postData = {\r\n\t\t\trecordTypeID: recordTypeID,\r\n\t\t\trecordStateID: recordState,\r\n\t\t\tmoderatorID: moderatorID,\r\n\t\t\totherNotificationType: otherNotificationType\r\n\t\t}\r\n\r\n\t\treturn _performPost(\"UpdateRecordTypeAlert\", postData, callback);\r\n\t}\r\n\r\n\tAPI.DeleteRecordTypeAlert = function (recordTypeID, recordState, moderatorID, otherNotificationType, callback) {\r\n\t\t/// \r\n\t\t/// Deletes a RecordTypeAlert.\r\n\t\t/// \r\n\t\t/// \r\n\t\t/// \r\n\t\t/// \t\t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tif (callback == undefined && _isFunction(otherNotificationType)) {\r\n\t\t\tcallback = otherNotificationType;\r\n\t\t\totherNotificationType = null;\r\n\t\t}\r\n\r\n\t\tvar postData = {\r\n\t\t\trecordTypeID: recordTypeID,\r\n\t\t\trecordStateID: recordState,\r\n\t\t\tmoderatorID: moderatorID,\r\n\t\t\totherNotificationType: otherNotificationType\r\n\t\t};\r\n\r\n\t\treturn _performPost(\"DeleteRecordTypeAlert\", postData, callback);\r\n\t}\r\n\r\n\tAPI.GetRecordTypeAlerts = function (recordTypeID, callback) {\r\n\t\t/// \r\n\t\t/// Gets the RecordTypeAlerts from a specific recordTypeID\r\n\t\t/// \r\n\t\t/// \t\t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetRecordTypeAlerts\", { recordTypeID: recordTypeID }, callback);\r\n\r\n\t}\r\n\r\n\t\r\n\r\n\tAPI.InsertStat = function (statArg, callback) {\r\n\t\t/// \r\n\t\t/// Inserts an analytics stat into the system.\r\n\t\t/// \r\n\t\t/// The stat to insert.\r\n\t\t\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar postData = {\r\n\t\t\titemType: statArg.itemType,\r\n\t\t\tstatTypeName: statArg.statTypeName,\r\n\t\t\titemTypeName: statArg.itemTypeName,\r\n\t\t\tlanguageCode: statArg.languageCode,\r\n\t\t\titemID: statArg.itemID,\r\n\t\t\tstatCount: statArg.statCount\r\n\t\t};\r\n\r\n\t\treturn _performPost(\"InsertStat\", postData, callback);\r\n\r\n\t}\r\n\r\n\tAPI.GetStats = function (statSearchArg, callback) {\r\n\t\t/// \r\n\t\t/// Gets a set of analytics stats from the system.\r\n\t\t/// \r\n\t\t/// The stat criteria to search for.\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar startDateStr = null;\r\n\t\tvar endDateStr = null;\r\n\t\tif (statSearchArg.startDate) {\r\n\t\t\tstartDateStr = statSearchArg.startDate.toString(\"yyyy-MM-dd\")\r\n\t\t}\r\n\r\n\t\tif (statSearchArg.endDate) {\r\n\t\t\tendDateStr = statSearchArg.endDate.toString(\"yyyy-MM-dd\")\r\n\t\t}\r\n\r\n\t\tvar postData = {\r\n\t\t\titemType: statSearchArg.itemType,\r\n\t\t\tstatTypeName: statSearchArg.statTypeName,\r\n\t\t\titemTypeName: statSearchArg.itemTypeName,\r\n\t\t\tlanguageCode: statSearchArg.languageCode,\r\n\t\t\titemID: statSearchArg.itemID,\r\n\t\t\tstartDate: startDateStr,\r\n\t\t\tendDate: endDateStr\r\n\t\t};\r\n\t\r\n\t\treturn _performPost(\"GetStats\",postData, callback);\r\n\r\n\t}\r\n\t\r\n\r\n\tAPI.ClearCache = function (cacheKey, callback) {\r\n\t\t/// \r\n\t\t/// Clears the cache for a given cache key that was previously passed into the SearchRecords call in the SearchArg parameter.\r\n\t\t/// \r\n\t\t/// A cache key that was previously passed into the SearchRecords call in the SearchArg parameter. \t\t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"ClearCache\", { cacheKey: cacheKey }, callback);\r\n\r\n\t}\r\n\r\n\r\n\tAPI.SaveRecord = function (record, callback, cacheKey, recordType) {\r\n\t\t/// \r\n\t\t/// Saves a record.\r\n\t\t/// \r\n\t\t/// The record to save. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message, ValidationErrors}. \r\n\t\t/// Optional - the cacheKey to clear the cache for. Use this in conjunction with the same cacheKey on calls to SearchRecords to control the cache. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tif (record == null) callback(API.ResponseType.Error, \"The record object cannot be null.\");\r\n\t\tif (record.RecordTypeName == undefined || record.RecordTypeName == null || record.RecordTypeName == \"\") {\r\n\t\t\tcallback({\r\n\t\t\t\tResponseType: API.ResponseType.Error,\r\n\t\t\t\tMessage: \"The RecordTypeName property cannot be null.\"\r\n\t\t\t});\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar performSave = function () {\r\n\r\n\t\t\t//check the record type\t\t\t\r\n\t\t\tif (recordType == undefined || recordType == null) {\r\n\t\t\t\tcallback({\r\n\t\t\t\t\tResponseType: API.ResponseType.Error,\r\n\t\t\t\t\tMessage: \"The Record Type \" + record.RecordTypeName + \" could not be found.\"\r\n\t\t\t\t});\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//validate the field types...\r\n\t\t\tvar lstFieldErrors = [];\r\n\t\t\tfor (var i = 0; i < recordType.FieldTypes.length; i++) {\r\n\t\t\t\tvar fieldType = recordType.FieldTypes[i];\r\n\t\t\t\tvar fieldValue = record[fieldType.Name];\r\n\r\n\t\t\t\tif (fieldValue != undefined && fieldValue != null) {\r\n\t\t\t\t\t//check for a file value..\r\n\t\t\t\t\tif (fieldValue.OriginalFilePath != undefined) fieldValue = fieldValue.OriginalFilePath;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tvar fieldLabel = recordType.FieldTypes[i].Label;\r\n\r\n\r\n\r\n\t\t\t\tif (fieldType.AllowNull == false) {\r\n\t\t\t\t\t//req field\r\n\t\t\t\t\tif (fieldValue == undefined || fieldValue == null || new String(fieldValue).length == 0) {\r\n\r\n\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\tMessage: \"The \" + fieldType.Label + \" field is required.\"\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (fieldValue == undefined || fieldValue == null || fieldValue == \"\") {\r\n\t\t\t\t\t//skip null vals if they are allowed...\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tswitch (fieldType.DataType) {\r\n\r\n\t\t\t\t\tcase API.DataType.Boolean:\r\n\t\t\t\t\t\tif (new String(fieldValue).toLowerCase() != \"true\"\r\n\t\t\t\t\t\t\t&& new String(fieldValue).toLowerCase() != \"false\") {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\t\tMessage: \"Could not convert value \" + fieldValue + \" from field \" + fieldType.Label + \" to a boolean.\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase API.DataType.DateTime:\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar m = moment(fieldValue, \"YYYY-MM-DD hh:mm a\")\r\n\t\t\t\t\t\tvar dt = null;\r\n\t\t\t\t\t\tif (m.isValid()) dt = m.toDate();\r\n\t\t\t\t\t\t//var dt = new Date(fieldValue);\r\n\t\t\t\t\t\tif (dt == null) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\t\tMessage: \"Could not convert value \" + fieldValue + \" from field \" + fieldType.Label + \" to a date/time.\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase API.DataType.Double:\r\n\r\n\t\t\t\t\t\tif (isNaN(parseFloat(fieldValue))) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\t\tMessage: \"Could not convert value \" + fieldValue + \" from field \" + fieldType.Label + \" to a number.\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase API.DataType.Int:\r\n\t\t\t\t\t\tif (isNaN(parseInt(fieldValue))) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\t\tMessage: \"Could not convert value \" + fieldValue + \" from field \" + fieldType.Label + \" to a number.\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase API.DataType.String:\r\n\t\t\t\t\t\t//enforce max length...\t\t\t\t\r\n\t\t\t\t\t\tif (fieldType.MaxLength == 0 && fieldValue.Length > 400) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\t\tMessage: \"The value from field \" + fieldType.Label + \" must be 400 characters or less.\"\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (fieldType.MaxLength > 0 && fieldValue.Length > fieldType.MaxLength) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\t\tMessage: \"The value from field \" + fieldType.Label + \" must be \" + fieldType.MaxLength + \" characters or less.\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar o1 = _enforceRegex(fieldType, fieldValue, fieldLabel);\r\n\t\t\t\t\t\tif (o1 != null) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = o1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t//textblob - enforce max length\r\n\r\n\t\t\t\t\t\tif (fieldType.MaxLength > 0 && fieldValue.Length > fieldType.MaxLength) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = {\r\n\t\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\t\tMessage: \"The value from field \" + fieldType.Label + \" must be \" + fieldType.MaxLength + \" characters or less.\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar o2 = _enforceRegex(fieldType, fieldValue, fieldLabel);\r\n\t\t\t\t\t\tif (o2 != null) {\r\n\t\t\t\t\t\t\tlstFieldErrors[lstFieldErrors.length] = o2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//check for validation errors\r\n\t\t\tif (lstFieldErrors.length > 0) {\r\n\t\t\t\tvar msg = \"\";\r\n\t\t\t\tfor (var x = 0; x < lstFieldErrors.length; x++) {\r\n\t\t\t\t\tmsg += \" - \" + lstFieldErrors[x].Message + \"\\n\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcallback({\r\n\t\t\t\t\tResponseType: API.ResponseType.Error,\r\n\t\t\t\t\tMessage: msg,\r\n\t\t\t\t\tValidationErrors: lstFieldErrors\r\n\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\r\n\r\n\t\t\t//do the deed\r\n\t\t\tvar postData = JSON.stringify(record);\r\n\t\t\tif (cacheKey == undefined || cacheKey == null) cacheKey = \"\";\r\n\r\n\t\t\treturn _performPost(\"SaveRecord\", { cacheKey: cacheKey, postData: postData}, callback);\r\n\r\n\t\t}\r\n\r\n\t\tif (recordType) {\r\n\t\t\treturn performSave();\r\n\t\t}\r\n\r\n\t\t//get the record type\r\n\t\tAPI.GetRecordTypeByName(record.RecordTypeName, function (response) {\r\n\r\n\t\t\tif (response.ResponseType == API.ResponseType.Error) {\r\n\t\t\t\tcallback(response);\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\trecordType = response.ResponseData;\r\n\t\t\t\treturn performSave();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tfunction _enforceRegex(fieldType, fieldValue, fieldLabel) {\r\n\t\tif (fieldValue == undefined || fieldValue == null || fieldValue == \"\" || typeof fieldValue != \"string\") return null;\r\n\r\n\t\t//enfore regex\r\n\t\tif (fieldType.ValidationRegEx != null && fieldType.ValidationRegEx != \"\" && fieldType.ValidationRegEx != \"Add comma separated file extensions. Eg: .pdf, .gif\") {\r\n\t\t\ttry {\r\n\t\t\t\tvar rEx = new RegExp(fieldType.ValidationRegEx);\r\n\t\t\t\trEx.ignoreCase = true;\r\n\r\n\t\t\t\tif (fieldValue.search(rEx) == -1) {\r\n\r\n\r\n\t\t\t\t\tif (fieldType.ValidationMessage != null && fieldType.ValidationMessage != \"\" && fieldType.ValidationMessage != \"Add the file type validation message.\") {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\tMessage: fieldType.ValidationMessage\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tFieldType: fieldType,\r\n\t\t\t\t\t\t\tMessage: \"The value from field \" + fieldType.Label + \" did not match the validation expression requirements.\"\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch (Error) {\r\n\t\t\t\t//ignore regex errors...\r\n\t\t\t}\r\n\t\t}\r\n }\r\n \r\n function _isFunction(functionToCheck) {\r\n return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';\r\n }\r\n\r\n function _logError(message) {\r\n if(console) {\r\n console.log(message);\r\n }\r\n }\r\n\r\n\tAPI.SearchRecords = function (searchArg, callback) {\r\n\t\t/// \r\n\t\t/// Searches for records based on a SearchArg object.\r\n\t\t/// \r\n\t\t/// The search arg object. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar argStr = JSON.stringify(searchArg);\r\n\t\treturn _performPost(\"SearchRecords\", { search: argStr, sanitize: true }, callback);\r\n\t\t\r\n\t}\r\n\r\n\tAPI.SearchComments = function (commentSearchArg, callback) {\r\n\t\t/// \r\n\t\t/// Searches for records based on a SearchArg object.\r\n\t\t/// \r\n\t\t/// The search arg object. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar argStr = JSON.stringify(commentSearchArg);\r\n\t\t\r\n\t\treturn _performPost(\"SearchComments\", { search: argStr, sanitize: true }, callback);\r\n\r\n\r\n\t}\r\n\r\n\tAPI.SearchCommentParentIDs = function (commentSearchArg, callback) {\r\n\t\t/// \r\n\t\t/// Searches for parent record ids for comments based on a SearchArg object.\r\n\t\t/// \r\n\t\t/// The search arg object. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar argStr = JSON.stringify(commentSearchArg);\r\n\t\treturn _performPost(\"SearchCommentParentIDs\", { search: argStr }, callback);\r\n\t\t\r\n\r\n\t}\r\n\r\n\tAPI.GetFeedbackAggregate = function (searchArg, callback) {\r\n\t\t/// \r\n\t\t/// Searches for records based on a SearchArg object.\r\n\t\t/// \r\n\t\t/// The search arg object. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar argStr = JSON.stringify(searchArg);\r\n\t\treturn _performPost(\"GetFeedbackAggregate\", { feedbackSearchArg: argStr }, callback);\r\n\t\t\r\n\t}\r\n\r\n\tAPI.SaveRating = function (ratingFeedback, callback) {\r\n\t\tvar rating = ratingFeedback;\r\n\t\trating.SubmissionType = API.FeedbackSubmissionType.Rating;\r\n\t\tAPI.SaveRatingFeedback(rating, callback);\r\n\t}\r\n\r\n\tAPI.SaveLike = function (booleanFeedback, callback) {\r\n\t\tvar like = booleanFeedback;\r\n\t\tlike.SubmissionType = API.FeedbackSubmissionType.Like;\r\n\t\tlike.IsPositive = true;\r\n\r\n\t\tAPI.SaveBooleanFeedback(like, callback);\r\n\t}\r\n\r\n\tAPI.SaveVote = function (booleanFeedback, callback) {\r\n\t\tvar vote = booleanFeedback;\r\n\t\tvote.IsPositive = true;\r\n\t\tvote.SubmissionType = API.FeedbackSubmissionType.Vote;\r\n\r\n\t\tAPI.SaveBooleanFeedback(vote, callback);\r\n\t}\r\n\r\n\tAPI.SaveApproveDisapprove = function (booleanFeedback, IsApproved, callback) {\r\n\t\tvar ap = booleanFeedback;\r\n\t\tap.IsPositive = IsApproved;\r\n\t\tap.SubmissionType = API.FeedbackSubmissionType.ApproveDisapprove;\r\n\r\n\t\tAPI.SaveBooleanFeedback(ap, callback);\r\n\t}\r\n\r\n\r\n\tAPI.SaveRatingFeedback = function (ratingFeedback, callback) {\r\n\t\t/// \r\n\t\t/// Saves a Rating Feedback Object\r\n\t\t/// \r\n\t\t/// The rating feedback to save. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tif (API.APIProfileRecordID > 0) {\r\n\t\t\tratingFeedback.ProfileRecordID = API.APIProfileRecordID;\r\n\t\t}\r\n\r\n\t\tvar postData = JSON.stringify(ratingFeedback);\r\n\r\n\t\treturn _performPost(\"SaveRatingFeedback\", { postData: postData }, callback);\r\n\r\n\r\n\t}\r\n\r\n\tAPI.SaveBooleanFeedback = function (booleanFeedback, callback) {\r\n\t\t/// \r\n\t\t/// Saves a boolean feedback object\r\n\t\t/// \r\n\t\t/// The boolean feedback to save. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tif (API.APIProfileRecordID > 0) {\r\n\t\t\tbooleanFeedback.ProfileRecordID = API.APIProfileRecordID;\r\n\t\t}\r\n\r\n\r\n\r\n\t\tvar postData = JSON.stringify(booleanFeedback);\r\n\r\n\t\treturn _performPost(\"SaveBooleanFeedback\", { postData: postData }, callback);\r\n\r\n\t}\r\n\r\n\tvar _settingsCache = null;\r\n\r\n\tAPI.GetSettings = function (callback, ignoreCache) {\r\n\t\t/// \r\n\t\t/// Get the Settings.\r\n\t\t/// \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\t\t/// Whether to ignore the cached value and get the settings from the server every time.\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tif (_settingsCache == null || ignoreCache == true) {\r\n\r\n\t\t\treturn _performPost(\"GetSettings\", null, function (data) {\r\n\t\t\t\tif (data.ResponseType != API.ResponseType.OK) {\r\n\t\t\t\t\tcallback(data);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_settingsCache = data.ResponseData;\r\n\t\t\t\t\tcallback(data);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\r\n\t\t\t//use the cached value...\r\n\t\t\tcallback({\r\n\t\t\t\tResponseType: API.ResponseType.OK,\r\n\t\t\t\tResponseData: _settingsCache\r\n\t\t\t});\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tAPI.SaveSettings = function (settings, callback) {\r\n\t\t/// \r\n\t\t/// Saves the Settings\r\n\t\t/// \r\n\t\t/// The settings to save. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\t_settingsCache = null;\r\n\r\n\t\tvar postData = JSON.stringify(settings);\r\n\r\n\t\t\r\n\r\n\t\treturn _performPost(\"SaveSettings\", { postData: postData }, callback);\r\n\r\n\r\n\t}\r\n\r\n\tAPI.GetAllSyndicationServices = function (callback) {\r\n\t\t/// \r\n\t\t/// Gets all of the syndication services that have been configured.\r\n\t\t/// \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetAllSyndicationServices\", null, callback);\r\n\r\n\t}\r\n\r\n\tAPI.DeleteSyndicationService = function (syndicationServiceID, callback) {\r\n\t\t/// \r\n\t\t/// Deletes a syndication service.\r\n\t\t/// \r\n\t\t/// The ID of the syndication service\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"DeleteSyndicationService\", { syndicationServiceID: syndicationServiceID }, callback);\r\n\r\n\t}\r\n\r\n\r\n\tAPI.SaveSyndicationService = function (syndicationService, callback) {\r\n\t\t/// \r\n\t\t/// Saves the Settings\r\n\t\t/// \r\n\t\t/// The settings to save. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar postData = JSON.stringify(syndicationService);\r\n\r\n\t\treturn _performPost(\"SaveSyndicationService\", { postData: postData }, callback);\r\n\r\n\t}\r\n\r\n\r\n\tAPI.GetAllSystemAccess = function (callback) {\r\n\t\t/// \r\n\t\t/// Gets all of the System Access names in the system/\r\n\t\t/// \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetAllSystemAccess\", null, callback);\r\n\r\n\t}\r\n\r\n\tAPI.GetGUID = function (callback) {\r\n\t\t/// \r\n\t\t/// Get a GUID.\r\n\t\t/// \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}. \r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetGUID\", null, callback);\r\n\t}\r\n\r\n\r\n\r\n\tAPI.GetAmazonS3Signature = function (policy, callback) {\r\n\t\t/// \r\n\t\t/// Gets a signature for an Amazon S3 call.\r\n\t\t/// \r\n\t\t/// \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetAmazonS3Signature\", { policy: policy }, callback);\r\n\r\n\t}\r\n\r\n\tAPI.GetOoyalaSignature = function (queryString, callback) {\r\n\t\t/// \r\n\t\t/// Gets a signature for an Ooyala upload.\r\n\t\t/// \r\n\t\t/// \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"GetOoyalaSignature\", { parameters: queryString }, callback);\r\n\r\n\t}\r\n\r\n\tAPI.DeleteFile = function (key, callback) {\r\n\t\t/// \r\n\t\t/// Deletes a file from the Amazon S3 bucket\r\n\t\t/// \r\n\t\t/// The full key that points to the file in S3. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\treturn _performPost(\"DeleteFile\", { key: key }, callback);\r\n\r\n\r\n\t}\r\n\r\n\tvar _fileSizeCache = {};\r\n\r\n\tAPI.GetFileSize = function (key, callback) {\r\n\t\t/// \r\n\t\t/// Get the file size from a file in the Amazon S3 bucket.\r\n\t\t/// \r\n\t\t/// The full key that points to the file in S3. \r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tif (_fileSizeCache[key] == undefined) {\r\n\t\t\t_performPost(\"GetFileSize\", { key: key }, function (data) {\r\n\t\t\t\tif (data.ResponseType == API.ResponseType.OK) {\r\n\t\t\t\t\t_fileSizeCache[key] = new Number(data.ResponseData);\r\n\t\t\t\t}\r\n\t\t\t\tcallback(data);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tcallback({\r\n\t\t\t\tResponseType: API.ResponseType.OK,\r\n\t\t\t\tResponseData: new Number(_fileSizeCache[key])\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tAPI.TestBrightcoveAuthenticationSettings = function (readToken, writeToken, callback) {\r\n\r\n\t\t_logError(\"Brightcove support has been removed from UGC.\")\r\n\t};\r\n\r\n\tAPI.TestYouTubeAuthenticationSettings = function (applicationName, apiKey, username, password, callback) {\r\n\r\n\t\t_logError(\"YouTube support has been removed from UGC.\")\r\n\t};\r\n\r\n\tAPI.TestAmazonS3AuthenticationSettings = function (bucket, apiKey, secretKey, callback) {\r\n\t\t_logError(\"Amazon S3 support has been removed from UGC.\")\r\n\r\n\t}\r\n\r\n\tAPI.GenerateTwitterOauthRequestToken = function (key, secret, callback) {\r\n\r\n\t\t_logError(\"Twitter support has been removed from UGC.\");\r\n\r\n\t}\r\n\r\n\tAPI.GetAmazonS3Form = function (options) {\r\n\r\n\t\t/// \r\n\t\t/// Builds the SWF form uploader that will upload data to Amazon S3. The HTML will be appended to the jQuery element that is passed into the options argument (options.fieldPanel)\r\n\t\t/// \r\n\t\t/// The options for this input. Has the following properties: fieldName, inputID, fieldType fieldPanel, swfUploadUrl, beforeUpload, uploadComplete, uploadError, uploadProgress, uploadButtonImageUrl, uploadButtonImageHeight, uploadButtonImageWidth, \r\n\r\n _logError(\"The GetAmazonS3Form method has been deprecated and removed from this and future versions of the UGC sdk.\")\r\n return;\r\n\t}\r\n\r\n\tfunction validateFileType(filepath, validExp) {\r\n\r\n\t\tif (validExp == null || validExp == \"\") return true;\r\n\r\n\t\tvalidExp = validExp.replace(\".*([\\\\\", \"\");\r\n\t\tvalidExp = validExp.replace(\"])\", \"\");\r\n\r\n\t\twhile (validExp.indexOf(\"]|[\\\\\") != -1) {\r\n\t\t\tvalidExp = validExp.replace(\"]|[\\\\\", \";\");\r\n\t\t}\r\n\t\tfileTypes = validExp.replace(/\\./g, \"*.\");\r\n\r\n\t\tvar ary = fileTypes.split(\";\");\r\n\r\n\t\tvar selectedExt = filepath.substring(filepath.lastIndexOf(\".\")).toLowerCase();\r\n\t\tif (selectedExt.indexOf(\".\") != -1) {\r\n\t\t\tselectedExt = selectedExt.substring(selectedExt.lastIndexOf(\".\")).toLowerCase();\r\n\t\t}\r\n\r\n\t\tfor (var i in ary) {\r\n\t\t\tvar ext = ary[i].trim();\r\n\t\t\tif (ext == \"\" || ext.length < 2 || ext.indexOf(\"*\") != 0) continue;\r\n\t\t\text = ext.substring(1).toLowerCase();\r\n\t\t\tif (ext == selectedExt) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\tAPI.GetUGCUploadForm = function (options) {\r\n\r\n\t\t/// \r\n\t\t/// Builds the SWF form uploader that will upload data to UGC. The HTML will be appended to the jQuery element that is passed into the options argument (options.fieldPanel)\r\n\t\t/// \r\n\t\t/// The options for this input. Has the following properties: fieldName, inputID, fieldType fieldPanel, swfUploadUrl, beforeUpload, uploadComplete, uploadError, uploadProgress, uploadButtonImageUrl, uploadButtonImageHeight, uploadButtonImageWidth, \r\n\r\n _logError(\"The GetAmazonS3Form method has been deprecated and removed from this and future versions of the UGC sdk.\")\r\n return;\r\n\r\n\t}\r\n\r\n\tAPI.UploadFile = function (file, fieldType, callback, errorCallback, alwaysCallback, progressCallback) {\r\n\r\n\t\t//validate the file...\r\n\t\tif (fieldType != null) {\r\n\t\t\ttry {\r\n\r\n\t\t\t\t//file size\r\n\t\t\t\tif (fieldType.MaxLength > 0) {\r\n\t\t\t\t\t//convert from kb to bytes...\r\n\t\t\t\t\tvar maxSizeBytes = fieldType.MaxLength * 1024;\r\n\t\t\t\t\tif (file.size > maxSizeBytes) {\r\n\t\t\t\t\t\tcallback({\r\n\t\t\t\t\t\t\tResponseType: API.ResponseType.Error,\r\n\t\t\t\t\t\t\tMessage: \"Max file size \" + fieldType.MaxLength + \"kb\"\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//file type\r\n\t\t\t\tif (!validateFileType(file.name, fieldType.ValidationRegEx)) {\r\n\r\n\t\t\t\t\tvar validExp = fieldType.ValidationRegEx;\r\n\t\t\t\t\tvalidExp = validExp.replace(\".*([\\\\\", \"\").replace(\"])\", \"\");\r\n\t\t\t\t\twhile (validExp.indexOf(\"]|[\\\\\") != -1) {\r\n\t\t\t\t\t\t\tvalidExp = validExp.replace(\"]|[\\\\\", \";\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfileTypes = validExp.replace(/\\./g, \"*.\");\r\n\r\n\t\t\t\t\tvar msg = \"Please choose a valid file type (\" + fileTypes + \").\"\r\n\t\t\t\t\tif (fieldType.ValidationMessage) {\r\n\t\t\t\t\t\tmsg = fieldType.ValidationMessage + \" (\" + fileTypes + \")\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcallback({\r\n\t\t\t\t\t\tResponseType: API.ResponseType.Error,\r\n\t\t\t\t\t\tMessage: msg\r\n\t\t\t\t\t})\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t} catch (ex3) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//get the settings... \r\n\t\tAPI.GetSettings(function (data) {\r\n\r\n\t\t\tif (data.ResponseType != API.ResponseType.OK) {\r\n\t\t\t\tcallback(data);\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar settings = data.ResponseData;\r\n\r\n\t\t\t\t//if Amazon S3 is NOT enabled, just upload to UGC\r\n\t\t\t\tif (settings.AmazonS3Bucket == null || settings.AmazonS3Bucket == \"\") {\r\n\t\t\t\t\t//regular upload...\r\n\t\t\t\t\tAPI._uploadFileToUGC(file, settings, callback, errorCallback, alwaysCallback, progressCallback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//UPLOAD to Amazon S3\r\n\t\t\t\t\t_logError(\"Uploading to S3 is no longer supported.\")\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tAPI._uploadFileToUGC = function (file, settings, callback, errorCallback, alwaysCallback, progressCallback) {\r\n //TODO: update this to support file uploads - exactly like they are handled within the Form Builder\r\n\t\t_logError(\"This method has not been implemented yet in this version.\")\r\n\t}\r\n\r\n\tAPI._uploadFileToAmazonS3 = function (file, settings, callback, errorCallback, alwaysCallback, progressCallback) {\r\n\t\t_logError(\"The method _uploadFileToAmazonS\")\r\n\t}\r\n\r\n\t//global variable used to track whether the live attachment remove randler event has been bound\r\n\tAPI._liveAttachmentRemoveHandlerBound = false;\r\n\r\n\r\n\tfunction _performPost(methodName, postData, callback) {\r\n\r\n\r\n\t\tif (!postData) postData = {};\r\n\r\n\t\tvar url = API.APIUrl;\r\n\t\tif (url == \"\" || url == null) return null;\r\n\r\n\t\turl = url.toLowerCase();\r\n\r\n\t\turl = url.replace(\"http://\", \"https://\");\r\n\t\turl = url.replace(\"/agility-ugc-api-jsonp.svc\", \"/ugc-api\");\r\n\r\n\t\tif (url.lastIndexOf(\"/\") != url.length - 1) url += \"/\";\r\n\r\n\t\t//create the base url for the call\r\n\t\turl += methodName;\r\n\r\n\t\t//sanitize the post data\r\n\t\tif (postData.postData) {\r\n\t\t\tvar postDataStr = postData.postData;\r\n\r\n\t\t\tpostData.postData = \"__SANITIZED__\" + postDataStr\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/&/g, '&')\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(/'/g, ''')\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(//g, '>');\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t}\r\n\r\n\r\n\t\t//add the auth stuff into the postData\r\n\t\tpostData.accessKey = API.APIAccessKey;\r\n\t\tpostData.seconds = API.APISeconds;\r\n\t\tpostData.randomNumber = API.APIRandomNumber;\r\n\t\tpostData.hash = API.APIHash;\r\n\t\tpostData.profileRecordID = API.APIProfileRecordID;\r\n\r\n\t\tvar sanitize = postData.sanitize;\r\n\t\tif (sanitize != true) sanitize = false;\r\n \r\n var contentType = sanitize ? \"application/x-www-form-urlencoded\" : \"application/json\";\r\n var contentToSend = sanitize ? _json_to_URLEncoded(postData) : JSON.stringify(postData);\r\n\r\n var xhr = new XMLHttpRequest(); \r\n xhr.open(\"POST\", url, true);\r\n xhr.setRequestHeader(\"Content-Type\", contentType+\";charset=UTF-8\");\r\n xhr.withCredentials = true;\r\n xhr.onload = function () { \r\n if (xhr.readyState === xhr.DONE) {\r\n if (xhr.status === 200) {\r\n //success\r\n var saniKey = \"__SANITIZED__\";\r\n var result = xhr.responseText;\r\n\r\n if (sanitize && result && result.indexOf && result.indexOf(saniKey) == 0) {\r\n //the result has been sanitized - we need to desanitize it...\r\n \r\n result = result.substring(saniKey.length)\r\n .replace(/'/g, '\\'')\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/&/g, '&');\r\n result = JSON.parse(result);\r\n }\r\n\r\n callback(result);\r\n\r\n } else {\r\n var result = xhr.responseText;\r\n callback({\r\n ResponseType: API.ResponseType.Error,\r\n Message: errorMessage\r\n });\r\n }\r\n }\r\n };\r\n xhr.send(contentToSend);\r\n\t}\r\n\r\n function _json_to_URLEncoded(element,key,list){\r\n var list = list || [];\r\n if(typeof(element)=='object'){\r\n for (var idx in element)\r\n _json_to_URLEncoded(element[idx],key?key+'['+idx+']':idx,list);\r\n } else {\r\n list.push(key+'='+encodeURIComponent(element));\r\n }\r\n return list.join('&');\r\n }\r\n\r\n\tfunction _buildAPIUrl(methodName, args, query) {\r\n\t\tvar url = API.APIUrl;\r\n\t\tif (url == \"\" || url == null) return null;\r\n\t\t//query should be in the form \"q1=q1val&s2=s2val\r\n\r\n\t\turl = url.toLowerCase();\r\n\t\turl = url.replace(\"http://\", \"https://\");\r\n\t\t\r\n\t\t//ensure the url ends with /\r\n\t\tif (url.lastIndexOf(\"/\") != url.length - 1) url += \"/\";\r\n\r\n\t\t//create the base url for the call\r\n\t\turl += methodName + \"/\" + API.APIAccessKey + \"/\" + API.APISeconds + \"/\" + API.APIRandomNumber + \"/\" + API.APIHash + \"/\" + API.APIProfileRecordID;\r\n\r\n\t\t//add the arguments for call\r\n\t\tif (args != undefined && Array.isArray(args) && args.length > 0) {\r\n for(var i in args) {\r\n url += \"/\" + escape(arg[i]);\r\n }\r\n\t\t}\r\n\r\n\t\t//add the \"method\" param\r\n\t\turl += \"?method=?\";\r\n\r\n\t\t//add the query strings\r\n\t\tif (query != undefined && query != \"\") {\r\n\t\t\turl += \"&\" + query;\r\n\t\t}\r\n\r\n\t\treturn url;\r\n\t}\r\n\r\n\tvar _authCookieName = null;\r\n\r\n\tAPI.GetAuthCookieName = function () {\r\n\t\t/// Gets the name of the cookie that will be used for authentication.\r\n\t\tif (_authCookieName == null) _authCookieName = \"UGC_AUTH_\" + API.APIAccessKey;\r\n\t\treturn _authCookieName;\r\n\t}\r\n\r\n\tAPI.SetAuthCookieName = function (cookieName) {\r\n\t\t/// Gets the name of the cookie that will be used for authentication.\r\n\t\treturn _authCookieName = cookieName;\r\n\t}\r\n\r\n\r\n\tAPI.Logout = function (websiteUserTypeName) {\r\n\t\t/// Logs a user out of the UGC system and removes their login cookie.\r\n\t\t/// The website user type reference name.\r\n\r\n\t\t//set the cookie based on the API Access Key\r\n\t\tvar cookieName = API.GetAuthCookieName();\r\n\t\tif (websiteUserTypeName != null) cookieName += websiteUserTypeName;\r\n\t\tvar cookieDate = Date.today().addMonths(-1);\r\n\t\tvar cookieValue = null;\r\n\t\tAgility.SetCookie(cookieName, cookieValue, cookieDate, \"/\", null, true);\r\n\r\n\t}\r\n\r\n\tAPI.Authenticate = function (websiteUserTypeName, login, password, persistCookie, loginFieldName, callback) {\r\n\t\t/// Authenticates a user based on their login and password and their website user type reference name. Returns the authentication token on success, empty string on failure. This will also set a cookie that will keep the user logged in for this session, or persist the cookie if desired.\r\n\t\t/// The website user type reference name.\r\n\t\t/// The login, usually a username or email address.\r\n\t\t/// The password.\r\n\t\t/// (Optional) Whether or not to persist the authentication token in a cookie.\t\t\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\t\tif (callback == undefined) {\r\n\t\t\tif (loginFieldName != undefined && _isFunction(loginFieldName)) {\r\n\t\t\t\tcallback = loginFieldName;\r\n\t\t\t\tloginFieldName = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (callback == undefined) {\r\n\t\t\tif (persistCookie != undefined && _isFunction(persistCookie)) {\r\n\t\t\t\tcallback = persistCookie;\r\n\t\t\t\tpersistCookie = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (loginFieldName == undefined) loginFieldName = \"\";\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar postData = {\r\n\t\t\tprofileTypeName: websiteUserTypeName,\r\n\t\t\tlogin: login,\r\n\t\t\tpassword: password,\r\n\t\t\tloginFieldName: loginFieldName\r\n\t\t}\r\n\r\n\t\treturn _performPost(\"Authenticate\", postData, function (data) {\r\n\t\t\t\r\n\t\t\tif (data != undefined) {\r\n\r\n\t\t\t\tvar token = data.ResponseData;\r\n\r\n\t\t\t\tif (token != undefined && token != null && token != \"\") {\r\n\t\t\t\t\t//set the cookie based on the API Access Key\r\n\t\t\t\t\tvar cookieName = API.GetAuthCookieName();\r\n\t\t\t\t\tif (websiteUserTypeName != null) cookieName += websiteUserTypeName;\r\n\r\n\t\t\t\t\tvar cookieValue = new String(token);\r\n\t\t\t\t\tvar cookieDate = null;\r\n\t\t\t\t\tif (persistCookie) {\r\n\t\t\t\t\t\tcookieDate = Date.today().addMonths(1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tAgility.SetCookie(cookieName, cookieValue, cookieDate, \"/\", null, false);\r\n\t\t\t\t}\r\n\t\t\t\t//return the OK response and the authentication token\r\n\t\t\t\tcallback({\r\n\t\t\t\t\tResponseType: API.ResponseType.OK,\r\n\t\t\t\t\tResponseData: token,\r\n\t\t\t\t\tMessage: null\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tAPI.IsAuthenticated = function (websiteUserTypeName, callback) {\r\n\t\t/// Determines if the current user is authenticated and returns the user ID if so. If the profileRecordID returned is less than zero, the user is NOT authenticated.\r\n\t\t/// The website user type reference name to validate the current used based on.\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\t\t//grab the token the from the cookie\r\n\t\tvar cookieName = API.GetAuthCookieName();\r\n\t\tif (websiteUserTypeName != null) cookieName += websiteUserTypeName;\r\n\r\n\t\tvar token = Agility.GetCookie(cookieName);\r\n\r\n\r\n\t\tif (token == null || token == \"\") {\r\n\t\t\tcallback({\r\n\t\t\t\tResponseType: API.ResponseType.OK,\r\n\t\t\t\tResponseData: false,\r\n\t\t\t\tMessage: null\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\r\n\t\tvar postData = {\r\n\t\t\tauthenticationToken: token,\r\n\t\t\tprofileTypeName: websiteUserTypeName\r\n\t\t};\r\n\r\n\t\treturn _performPost(\"IsAuthenticated\", postData, function (data) {\r\n\t\t\tif (data != undefined && data.ResponseData != undefined && data.ResponseData != null) {\r\n\r\n\r\n\t\t\t\tvar profileRecordID = data.ResponseData.ProfileRecordID;\r\n\t\t\t\tvar seconds = data.ResponseData.Seconds;\r\n\t\t\t\tvar randomNumber = data.ResponseData.RandomNumber;\r\n\t\t\t\tvar hash = data.ResponseData.AccessHash;\r\n\t\t\t\tvar accessKey = data.ResponseData.AccessKey;\r\n\r\n\t\t\t\t//reset the API data for this session\r\n\t\t\t\tAPI.APIAccessKey = accessKey;\r\n\t\t\t\tAPI.APISeconds = seconds;\r\n\t\t\t\tAPI.APIRandomNumber = randomNumber;\r\n\t\t\t\tAPI.APIProfileRecordID = profileRecordID;\r\n\t\t\t\tAPI.APIHash = hash;\r\n\r\n\t\t\t\t//send results to the user...\r\n\t\t\t\tcallback({\r\n\t\t\t\t\tResponseType: API.ResponseType.OK,\r\n\t\t\t\t\tResponseData: profileRecordID,\r\n\t\t\t\t\tMessage: null\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tAPI.ChangePassword = function (currentPassword, newPassword, callback) {\r\n\t\t/// Change the password for the current website user. The ResponseData parameter of the callback will be a true/false if the password change was successful.\r\n\t\t/// The user's current password.\r\n\t\t/// The user's new password.\r\n\t\t/// The user's new password.\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\t\tif (API.APIProfileRecordID < 1) {\r\n\t\t\tcallback({\r\n\t\t\t\tResponseType: API.ResponseType.Error,\r\n\t\t\t\tResponseData: false,\r\n\t\t\t\tMessage: \"The user is not currently logged in.\"\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\t\t\r\n\t\tvar postData = {\r\n\t\t\tcurrentPassword: currentPassword,\r\n\t\t\tnewPassword: newPassword\r\n\t\t}\r\n\r\n\t\treturn _performPost(\"ChangePassword\", postData, function (data) {\r\n\t\t\tcallback(data);\r\n\t\t});\r\n\t}\r\n\r\n\tAPI.RetrievePassword = function (websiteUserTypeName, login, callback) {\r\n\t\t/// Retrieve the password for the profile login name and type. The ResponseData parameter of the callback will be a true/false if the password change was successful.\r\n\t\t/// The website user type reference name.\r\n\t\t/// The user's login (usually username or email address).\r\n\t\t/// The method to callback to. Has 1 parameter with the following object: {ResponseType, ResponseData, Message}.\r\n\r\n\r\n\t\tif (!checkApiIntialized(callback)) return;\r\n\t\tvar args = new Array();\r\n\t\targs.push(websiteUserTypeName);\r\n\r\n\t\tvar postData = {\r\n\t\t\tprofileTypeName: websiteUserTypeName,\r\n\t\t\tlogin: login\r\n\t\t}\r\n\r\n\t\treturn _performPost(\"RetrievePassword\", postData, function (data) {\r\n\t\t\tif (data != undefined && data.ResponseData != undefined && data.ResponseData != null) {\r\n\r\n\t\t\t\t//send results to the user...\r\n\t\t\t\tcallback({\r\n\t\t\t\t\tResponseType: API.ResponseType.OK,\r\n\t\t\t\t\tResponseData: data.ResponseData,\r\n\t\t\t\t\tMessage: null\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tAPI.GetODataMetaData = function (callback) {\t\t\r\n _logError('OData support has been removed in UGC.');\r\n\t}\r\n\r\n\tAPI.GetODataFeed = function (recordTypeName, options, callback) {\r\n\t\t_logError('OData support has been removed in UGC.');\r\n\t}\r\n\r\n\tAPI.GetODataRecord = function (recordTypeName, recordID, callback) {\r\n\t\t_logError('OData support has been removed in UGC.')\r\n\t}\r\n\r\n\tAPI.ExecCustomProcedure = function (proc, paramArgs, callback) {\r\n\t\t_logError('Executing custom store procedures in JS has been removed in UGC and no longer supported.')\r\n\t}\r\n\r\n\tAPI.GetMIMEtype = function (filename) {\r\n\t\t/// \r\n\t\t/// Gets the mime-type of a file based on a filename.\r\n\t\t/// \r\n\t\t/// The file name (from a file upload...)\r\n\r\n\r\n\t\tvar fn = new String(filename);\r\n\t\tvar fn1 = new String();\r\n\t\tfn1 = fn.match(/[\\/\\\\][^\\/\\\\]*$/);\r\n\t\tif (fn1 != null && fn1.length > 0) fn = fn1 + \"\";\r\n\r\n\t\tfn = fn.toLowerCase();\r\n\r\n\t\tif (fn.search(/^.*\\.ai$/) >= 0) {\r\n\t\t\treturn (\"application/illustrator\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.bin$/) >= 0) {\r\n\t\t\treturn (\"application/octet-stream\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.pdf$/) >= 0) {\r\n\t\t\treturn (\"application/pdf\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ps$/) >= 0) {\r\n\t\t\treturn (\"application/postscript\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.rtf$/) >= 0) {\r\n\t\t\treturn (\"application/rtf\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.sit$/) >= 0) {\r\n\t\t\treturn (\"application/stuffit\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.flv$/) >= 0) {\r\n\t\t\treturn (\"video/x-flv\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mdb$/) >= 0) {\r\n\t\t\treturn (\"application/vnd.ms-access\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xls$/) >= 0) {\r\n\t\t\treturn (\"application/vnd.ms-excel\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ppt$/) >= 0) {\r\n\t\t\treturn (\"application/vnd.ms-powerpoint\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.pps$/) >= 0) {\r\n\t\t\treturn (\"application/vnd.ms-powerpoint\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.pot$/) >= 0) {\r\n\t\t\treturn (\"application/vnd.ms-powerpoint\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xps$/) >= 0) {\r\n\t\t\treturn (\"application/vnd.ms-xpsdocument\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.doc$/) >= 0) {\r\n\t\t\treturn (\"application/msword\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.7z$/) >= 0) {\r\n\t\t\treturn (\"application/x-7z-compressed\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.torrent$/) >= 0) {\r\n\t\t\treturn (\"application/x-bittorrent\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.tar\\.gz$/) >= 0) {\r\n\t\t\treturn (\"application/x-compressed-tar\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.tgz$/) >= 0) {\r\n\t\t\treturn (\"application/x-compressed-tar\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ttf$/) >= 0) {\r\n\t\t\treturn (\"application/x-font-ttf\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.gz$/) >= 0) {\r\n\t\t\treturn (\"application/x-gzip\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.pdf\\.gz$/) >= 0) {\r\n\t\t\treturn (\"application/x-gzpdf\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ps\\.gz$/) >= 0) {\r\n\t\t\treturn (\"application/x-gzpostscript\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.jar$/) >= 0) {\r\n\t\t\treturn (\"application/x-java-archive\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.js$/) >= 0) {\r\n\t\t\treturn (\"application/javascript\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.lzh$/) >= 0) {\r\n\t\t\treturn (\"application/x-lha\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mkv$/) >= 0) {\r\n\t\t\treturn (\"video/x-matroska\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.exe$/) >= 0) {\r\n\t\t\treturn (\"application/x-ms-dos-executable\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogg$/) >= 0) {\r\n\t\t\treturn (\"application/ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogx$/) >= 0) {\r\n\t\t\treturn (\"application/ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.oga$/) >= 0) {\r\n\t\t\treturn (\"audio/ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogv$/) >= 0) {\r\n\t\t\treturn (\"video/ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogg$/) >= 0) {\r\n\t\t\treturn (\"audio/x-vorbis+ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogg$/) >= 0) {\r\n\t\t\treturn (\"audio/x-flac+ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogg$/) >= 0) {\r\n\t\t\treturn (\"audio/x-speex+ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.spx$/) >= 0) {\r\n\t\t\treturn (\"audio/x-speex\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogg$/) >= 0) {\r\n\t\t\treturn (\"video/x-theora+ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ogm$/) >= 0) {\r\n\t\t\treturn (\"video/x-ogm+ogg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.qtl$/) >= 0) {\r\n\t\t\treturn (\"application/x-quicktime-media-link\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.tar$/) >= 0) {\r\n\t\t\treturn (\"application/x-tar\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.theme$/) >= 0) {\r\n\t\t\treturn (\"application/x-theme\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.der$/) >= 0) {\r\n\t\t\treturn (\"application/x-x509-ca-cert\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.cer$/) >= 0) {\r\n\t\t\treturn (\"application/x-x509-ca-cert\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.crt$/) >= 0) {\r\n\t\t\treturn (\"application/x-x509-ca-cert\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.cert$/) >= 0) {\r\n\t\t\treturn (\"application/x-x509-ca-cert\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.pem$/) >= 0) {\r\n\t\t\treturn (\"application/x-x509-ca-cert\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xhtml$/) >= 0) {\r\n\t\t\treturn (\"application/xhtml+xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.zip$/) >= 0) {\r\n\t\t\treturn (\"application/zip\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ac3$/) >= 0) {\r\n\t\t\treturn (\"audio/ac3\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.aiff$/) >= 0) {\r\n\t\t\treturn (\"audio/x-aiff\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.aif$/) >= 0) {\r\n\t\t\treturn (\"audio/x-aiff\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.aifc$/) >= 0) {\r\n\t\t\treturn (\"audio/x-aiff\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.flac$/) >= 0) {\r\n\t\t\treturn (\"audio/x-flac\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mid$/) >= 0) {\r\n\t\t\treturn (\"audio/midi\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.midi$/) >= 0) {\r\n\t\t\treturn (\"audio/midi\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.kar$/) >= 0) {\r\n\t\t\treturn (\"audio/midi\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.m4a$/) >= 0) {\r\n\t\t\treturn (\"audio/mp4\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.aac$/) >= 0) {\r\n\t\t\treturn (\"audio/mp4\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mp4$/) >= 0) {\r\n\t\t\treturn (\"video/mp4\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.m4v$/) >= 0) {\r\n\t\t\treturn (\"video/mp4\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.m4b$/) >= 0) {\r\n\t\t\treturn (\"audio/x-m4b\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.3gp$/) >= 0) {\r\n\t\t\treturn (\"video/3gpp\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.3gpp$/) >= 0) {\r\n\t\t\treturn (\"video/3gpp\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.amr$/) >= 0) {\r\n\t\t\treturn (\"video/3gpp\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mp2$/) >= 0) {\r\n\t\t\treturn (\"audio/mp2\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mp3$/) >= 0) {\r\n\t\t\treturn (\"audio/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mpga$/) >= 0) {\r\n\t\t\treturn (\"audio/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.m3u$/) >= 0) {\r\n\t\t\treturn (\"audio/x-mpegurl\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.vlc$/) >= 0) {\r\n\t\t\treturn (\"audio/x-mpegurl\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.asx$/) >= 0) {\r\n\t\t\treturn (\"audio/x-ms-asx\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.wax$/) >= 0) {\r\n\t\t\treturn (\"audio/x-ms-asx\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.wvx$/) >= 0) {\r\n\t\t\treturn (\"audio/x-ms-asx\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.wmx$/) >= 0) {\r\n\t\t\treturn (\"audio/x-ms-asx\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.psf$/) >= 0) {\r\n\t\t\treturn (\"audio/x-psf\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.wma$/) >= 0) {\r\n\t\t\treturn (\"audio/x-ms-wma\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ra$/) >= 0) {\r\n\t\t\treturn (\"audio/vnd.rn-realaudio\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.rax$/) >= 0) {\r\n\t\t\treturn (\"audio/vnd.rn-realaudio\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ram$/) >= 0) {\r\n\t\t\treturn (\"application/ram\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.rv$/) >= 0) {\r\n\t\t\treturn (\"video/vnd.rn-realvideo\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.rvx$/) >= 0) {\r\n\t\t\treturn (\"video/vnd.rn-realvideo\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.wav$/) >= 0) {\r\n\t\t\treturn (\"audio/x-wav\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.bmp$/) >= 0) {\r\n\t\t\treturn (\"image/bmp\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.wbmp$/) >= 0) {\r\n\t\t\treturn (\"image/vnd.wap.wbmp\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.gif$/) >= 0) {\r\n\t\t\treturn (\"image/gif\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.jpeg$/) >= 0) {\r\n\t\t\treturn (\"image/jpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.jpg$/) >= 0) {\r\n\t\t\treturn (\"image/jpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.jpe$/) >= 0) {\r\n\t\t\treturn (\"image/jpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.png$/) >= 0) {\r\n\t\t\treturn (\"image/png\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.rle$/) >= 0) {\r\n\t\t\treturn (\"image/rle\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.svg$/) >= 0) {\r\n\t\t\treturn (\"image/svg+xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.svgz$/) >= 0) {\r\n\t\t\treturn (\"image/svg+xml-compressed\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.tif$/) >= 0) {\r\n\t\t\treturn (\"image/tiff\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.tiff$/) >= 0) {\r\n\t\t\treturn (\"image/tiff\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.eps$/) >= 0) {\r\n\t\t\treturn (\"image/x-eps\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ico$/) >= 0) {\r\n\t\t\treturn (\"image/x-ico\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.psd$/) >= 0) {\r\n\t\t\treturn (\"image/x-psd\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.vcs$/) >= 0) {\r\n\t\t\treturn (\"text/calendar\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.ics$/) >= 0) {\r\n\t\t\treturn (\"text/calendar\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.css$/) >= 0) {\r\n\t\t\treturn (\"text/css\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.CSSL$/) >= 0) {\r\n\t\t\treturn (\"text/css\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.rtx$/) >= 0) {\r\n\t\t\treturn (\"text/richtext\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.rss$/) >= 0) {\r\n\t\t\treturn (\"application/rss+xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.atom$/) >= 0) {\r\n\t\t\treturn (\"application/atom+xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.opml$/) >= 0) {\r\n\t\t\treturn (\"text/x-opml+xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.sgml$/) >= 0) {\r\n\t\t\treturn (\"text/sgml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.sgm$/) >= 0) {\r\n\t\t\treturn (\"text/sgml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.dtd$/) >= 0) {\r\n\t\t\treturn (\"text/x-dtd\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.html$/) >= 0) {\r\n\t\t\treturn (\"text/html\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.htm$/) >= 0) {\r\n\t\t\treturn (\"text/html\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.log$/) >= 0) {\r\n\t\t\treturn (\"text/x-log\");\r\n\t\t}\r\n\t\tif (fn.search(/^README*$/) >= 0) {\r\n\t\t\treturn (\"text/x-readme\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.uri$/) >= 0) {\r\n\t\t\treturn (\"text/x-uri\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.url$/) >= 0) {\r\n\t\t\treturn (\"text/x-uri\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.fo$/) >= 0) {\r\n\t\t\treturn (\"text/x-xslfo\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xslfo$/) >= 0) {\r\n\t\t\treturn (\"text/x-xslfo\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xml$/) >= 0) {\r\n\t\t\treturn (\"application/xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xsl$/) >= 0) {\r\n\t\t\treturn (\"application/xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xslt$/) >= 0) {\r\n\t\t\treturn (\"application/xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.xbl$/) >= 0) {\r\n\t\t\treturn (\"application/xml\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mpeg$/) >= 0) {\r\n\t\t\treturn (\"video/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mpg$/) >= 0) {\r\n\t\t\treturn (\"video/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mp2$/) >= 0) {\r\n\t\t\treturn (\"video/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mpe$/) >= 0) {\r\n\t\t\treturn (\"video/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.vob$/) >= 0) {\r\n\t\t\treturn (\"video/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.m2t$/) >= 0) {\r\n\t\t\treturn (\"video/mpeg\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.qt$/) >= 0) {\r\n\t\t\treturn (\"video/quicktime\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mov$/) >= 0) {\r\n\t\t\treturn (\"video/quicktime\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.moov$/) >= 0) {\r\n\t\t\treturn (\"video/quicktime\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.qtvr$/) >= 0) {\r\n\t\t\treturn (\"video/quicktime\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.qtif$/) >= 0) {\r\n\t\t\treturn (\"image/x-quicktime\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.qif$/) >= 0) {\r\n\t\t\treturn (\"image/x-quicktime\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.viv$/) >= 0) {\r\n\t\t\treturn (\"video/vivo\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.vivo$/) >= 0) {\r\n\t\t\treturn (\"video/vivo\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.anim[1-9j]$/) >= 0) {\r\n\t\t\treturn (\"video/x-anim\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.fli$/) >= 0) {\r\n\t\t\treturn (\"video/x-flic\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.flc$/) >= 0) {\r\n\t\t\treturn (\"video/x-flic\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.hwp$/) >= 0) {\r\n\t\t\treturn (\"application/x-hwp\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.hwt$/) >= 0) {\r\n\t\t\treturn (\"application/x-hwt\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.mng$/) >= 0) {\r\n\t\t\treturn (\"video/x-mng\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.asf$/) >= 0) {\r\n\t\t\treturn (\"video/x-ms-asf\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.nsc$/) >= 0) {\r\n\t\t\treturn (\"application/x-netshow-channel\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.wmv$/) >= 0) {\r\n\t\t\treturn (\"video/x-ms-wmv\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.avi$/) >= 0) {\r\n\t\t\treturn (\"video/x-msvideo\");\r\n\t\t}\r\n\t\tif (fn.search(/^.*\\.divx$/) >= 0) {\r\n\t\t\treturn (\"video/x-msvideo\");\r\n\t\t}\r\n\t\treturn (\"binary/octet-stream\");\r\n\t}\r\n}\r\n\r\nexport default AgilityUGCAPI;"],"sourceRoot":""}