PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB` sh-3ll

HOME


sh-3ll 1.0
DIR:/home/korminas/dms.korminas.id/seeddms60x/seeddms-6.0.25/views/bootstrap4/styles/
Upload File :
Current File : /home/korminas/dms.korminas.id/seeddms60x/seeddms-6.0.25/views/bootstrap4/styles/application.js
/* Template function which outputs an option in a chzn-select
 * The replace() call is required to prevent xss attacks (see CVE-2019-12745)
 * Using htmlspecialchars() in php isn't sufficient because, chzn_template_func
 * will receive an unescaped string
 * (see https://forums.select2.org/t/propperly-escape-option-value-to-prevent-xss/788)
 */
chzn_template_func =  function (state) {
	var subtitle = '';
	if($(state.element).data('subtitle'))
		subtitle = $(state.element).data('subtitle')+''; /* make sure it is a string */
	var warning = '';
	if($(state.element).data('warning'))
		warning = $(state.element).data('warning')+''; /* make sure it is a string */
	var html = '<span>';
	if($(state.element).data('before-title'))
		html += $(state.element).data('before-title')+'';
	if($(state.element).data('icon-before'))
		html += '<i class="fa fa-'+$(state.element).data('icon-before')+'"></i> ';
	html += state.text.replace(/</g, '&lt;')+'';
	if(subtitle)
		html += '<br /><i>'+subtitle.replace(/</g, '&lt;')+'</i>';
	if(warning)
		html += '<br /><span class="label label-warning"><i class="fa fa-warning"></i></span> '+warning+'';
	html += '</span>';
	var $newstate = $(html);
	return $newstate;
};

function escapeHtml(text) {
  var map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  };

  return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}

function treeFolderSelected(formid, nodeid, nodename) {
	$('#'+formid).val(nodeid);
	$('#choosefoldersearch'+formid).val(nodename);
	$('#folderChooser'+formid).modal('hide');
}

function treeDocumentSelected(formid, nodeid, nodename) {
	$('#'+formid).val(nodeid);
	$('#choosedocsearch'+formid).val(nodename);
	$('#docChooser'+formid).modal('hide');
}

function initMost() {
	$('.datepicker, #expirationdate, #createstartdate, #createenddate, #expirationstartdate, #expirationenddate')
		.datepicker({todayHighlight: true, toggleActive: true, autoclose: "true", zIndexOffset: "1040"})
	/*
		.on('changeDate', function(ev){
			if(ev.date && $(ev.target).data('selectmenu')) {
				$("#"+$(ev.target).data('selectmenu')).val('date');
			}
			$(ev.currentTarget).datepicker('hide');
		});
*/

	$(".chzn-select").select2({
		theme: "bootstrap4",
		width: 'resolve',
		templateResult: chzn_template_func//,
		//templateSelection: chzn_template_func
	});

	/* change the color and length of the bar graph showing the password
	 * strength on each change to the passwod field.
	 */
	$(".pwd").passStrength({ /* {{{ */
		url: seeddms_webroot+"op/op.Ajax.php",
		onChange: function(data, target) {
			pwsp = 100*data.score;
			$('#'+target+' div.bar').width(pwsp+'%');
			if(data.ok) {
				$('#'+target+' div.bar').removeClass('bg-danger');
				$('#'+target+' div.bar').addClass('bg-success');
			} else {
				$('#'+target+' div.bar').removeClass('bg-success');
				$('#'+target+' div.bar').addClass('bg-danger');
			}
		}
	}); /* }}} */

	/* The typeahead functionality useѕ the modified version of
	 * bootstrap-typeahead, which is able to set the render function.
	 * This was needed because the search function return json objects
	 * for each hit and render could only process strings.
	 * */
	$("#searchfield").typeahead({ /* {{{ */
		menu: '<div class="typeahead dropdown-menu"></div>',
		item: '<li><a class="dropdown-item" href="#"></a></li>',
		minLength: 3,
		items: 100, /* the query will limit the number of hits */
		source: function(query, process) {
			var d = new Date();
			var pastYear = d.getFullYear() - 1;
			d.setFullYear(pastYear);
//			console.log(d.toISOString().split('T')[0]);

			var data = {
				query: query,
				limit: 15,
				action: 'typeahead'
			};
			/* Return a list of json objects, each containing
			 * type: type of object (D=doc, F=folder, S=searchterm)
			 * name: name of object
			 */
			$.get(seeddms_webroot+'out/out.Search.php', data, function(data) {
				process(data);
			});
		},
		/* updater is called when the item in the list is clicked. It is
		 * actually provided to update the input field, but here we use
		 * it to set the document location. The passed value is the string
		 * set in data-value of the list items.
		 * This method relies on some changes in bootstrap-typeahead.js
		 * Originally, update was passed only the data-value of the li item
		 * which is set in the render fuction below,
		 * but the modified version passes all data fields. which also
		 * contain the 'id' and 'type' (also set in render function).
		 **/
		updater: function (item) {
			if(item.id) {
				if(item.type == 'D')
					document.location = seeddms_webroot+"out/out.ViewDocument.php?documentid=" + item.id;
				else
					document.location = seeddms_webroot+"out/out.ViewFolder.php?folderid=" + item.id;
			} else
				document.location = seeddms_webroot+"out/out.Search.php?query=" + encodeURIComponent(item.value);
			return item.value;
		},
		sorter: function(items) {
			return items;
		},
		/* matcher will always return true, because the initial search returns
		 * matches only
  	 */
		matcher : function (item) {
			return true;
		},
		/* highlighter is for modifying the 'a' tag text. It places an icon
		 * in front of the name and replaces a '<' within the name with an
		 * entity.
		 **/
		highlighter : function (item) {
			if(item.type.charAt(0) == 'D')
				return '<i class="fa fa-file"></i> ' + item.name.replace(/</g, '&lt;') + '<br /><span class="path">' + item.path + '</span>';
			else if(item.type.charAt(0) == 'F')
				return '<i class="fa fa-folder-o"></i> ' + item.name.replace(/</g, '&lt;') + '<br /><span class="path">' + item.path + '</span>';
			else
				return '<i class="fa fa-search"></i> ' + item.name.replace(/</g, '&lt;') + (item.occurences > 0 ? ' (' + item.occurences + ')' : '') + (typeof(item.column) != 'undefined' ? '<br /><span class="path">' + item.column + '</span>' : '');
		},
		/* This only works with a modified version of bootstrap typeahead located
		 * in boostrap-typeahead.js Search for 'render'
		 * The line
		 * this.render = this.options.render || this.render
		 * was added to bootstrap-typeahead.js
		 * The following function is a copy of the original render function but
		 * access item.name instead of item
		 */
		render : function (items) {
      var that = this

      items = $(items).map(function (i, item) {
        i = $(that.options.item).attr('data-value', item.name).attr('data-id', item.id).attr('data-type', item.type);
        i.find('a').html(that.highlighter(item))
        return i[0]
      })

      items.first().addClass('active')
      this.$menu.html(items)
      return this
    }

	}); /* }}} */

	/* Document chooser */
	$("[id^=choosedocsearch]").typeahead({ /* {{{ */
		menu: '<div class="typeahead dropdown-menu"></div>',
		item: '<li><a class="dropdown-item" href="#"></a></li>',
		minLength: 3,
		source: function(query, process) {
//		console.log(this.options);
			$.get(seeddms_webroot+'op/op.Ajax.php', { command: 'searchdocument', query: query, limit: 8 }, function(data) {
					process(data);
			});
		},
		/* updater is called when the item in the list is clicked. It is
		 * actually provided to update the input field where you type, but here
		 * we use it to update a second input field with the doc id. */
		updater: function (item) {
			strarr = item.value.split("#");
			target = this.$element.data('target');
			$('#'+target).attr('value', strarr[0]);
			return strarr[1];
		},
		/* Set a matcher that allows any returned value */
		matcher : function (item) {
			return true;
		},
		highlighter : function (item) {
			strarr = item.split("#");
			return '<i class="fa fa-file"></i> ' + strarr[1].replace(/</g, '&lt;');
		}
	}); /* }}} */

	/* Folder chooser */
	$("[id^=choosefoldersearch]").typeahead({ /* {{{ */
		menu: '<div class="typeahead dropdown-menu"></div>',
		item: '<li><a class="dropdown-item" href="#"></a></li>',
		minLength: 3,
		source: function(query, process) {
//		console.log(this.options);
			$.get(seeddms_webroot+'op/op.Ajax.php', { command: 'searchfolder', query: query, limit: 8 }, function(data) {
					process(data);
			});
		},
		/* updater is called when the item in the list is clicked. It is
		 * actually provided to update the input field, but here we use
		 * it to set the document location. */
		updater: function (item) {
			strarr = item.value.split("#");
			//console.log(this.$element.data('target'));
			target = this.$element.data('target');
			$('#'+target).attr('value', strarr[0]);
			return strarr[1];
		},
		/* Set a matcher that allows any returned value */
		matcher : function (item) {
			return true;
		},
		highlighter : function (item) {
			strarr = item.split("#");
			return '<i class="fa fa-folder-o"></i> ' + strarr[1].replace(/</g, '&lt;');
		}
	}); /* }}} */
}

$(document).ready( function() {
	$('body').on('click', '.dropdown-menu a.dropdown-toggle', function (e) {
		if (!$(this).next().hasClass('show')) {
			$(this).parents('.dropdown-menu').first().find('.show').removeClass("show");
		}
		var $subMenu = $(this).next(".dropdown-menu");
		$subMenu.toggleClass('show');


		$(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
			$('.dropdown-submenu .show').removeClass("show");
		});


		return false;
	});

	/* close popovers when clicking somewhere except in the popover or the
	 * remove icon
	 */
	$('html').on('click', function(e) {
		if (typeof $(e.target).data('original-title') == 'undefined' && !$(e.target).parents().is('.popover.in') && !$(e.target).is('.fa fa-remove')) {
			$('[data-original-title]').popover('hide');
		}
	});

	$('body').on('hidden', '.modal', function () {
		$(this).removeData('modal');
	});

	/* Bootstrap 4 does not support to the remote loading of the modal content
	 * anymore. This adds it by using jquery.
	 */
	$('body').on('click', '[data-toggle="modal"]', function(ev){
		ev.preventDefault();
		$($(this).data("target")+' .modal-body').load($(this).data("remote"));
		/* Also set the title */
		if($(this).data("modal-title"))
			$($(this).data("target")+' .modal-header h3').html($(this).data("modal-title"));
	});

//	$('body').on('touchstart.dropdown', '.dropdown-menu', function (e) { e.stopPropagation(); });

	initMost();

	$('body').on('click', '[id^=clearfolder]', function(ev) { /* {{{ */
		ev.preventDefault();
		ev.stopPropagation();
		target = $(this).data('target');
		$('#choosefoldersearch'+target).val('');
		$('#'+target).val('');
	}); /* }}} */

	$('body').on('click', '[id^=cleardocument]', function(ev) { /* {{{ */
		ev.preventDefault();
		ev.stopPropagation();
		target = $(this).data('target');
		$('#choosedocsearch'+target).val('');
		$('#'+target).val('');
	}); /* }}} */

	$('body').on('click', '#clipboard-float', function(ev) { /* {{{ */
		ev.preventDefault();
		ev.stopPropagation();
		$('#clipboard-container').toggleClass('clipboard-container');
	}); /* }}} */

	$('body').on('click', 'a.addtoclipboard', function(ev) { /* {{{ */
		ev.preventDefault();
		ev.stopPropagation();
		attr_rel = $(ev.currentTarget).attr('rel');
		attr_msg = $(ev.currentTarget).attr('msg');
		type = attr_rel.substring(0, 1) == 'F' ? 'folder' : 'document';
		id = attr_rel.substring(1);
		$.get(seeddms_webroot+'op/op.Ajax.php',
			{ command: 'addtoclipboard', type: type, id: id },
			function(data) {
				if(data.success) {
					$("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard')
					$("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard')
					noty({
						text: attr_msg,
						type: 'success',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
				} else {
					noty({
						text: data.message,
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 3500
					});
				}
			},
			'json'
		);
	}); /* }}} */

	$('body').on('click', 'a.removefromclipboard', function(ev){ /* {{{ */
		ev.preventDefault();
		attr_rel = $(ev.currentTarget).attr('rel');
		attr_msg = $(ev.currentTarget).attr('msg');
		type = attr_rel.substring(0, 1) == 'F' ? 'folder' : 'document';
		id = attr_rel.substring(1);
		$.get(seeddms_webroot+'op/op.Ajax.php',
			{ command: 'removefromclipboard', type: type, id: id },
			function(data) {
				if(data.success) {
					$("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard')
					$("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard')
					noty({
						text: attr_msg,
						type: 'success',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
				} else {
					noty({
						text: data.message,
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 3500
					});
				}
			},
			'json'
		);
	}); /* }}} */

	$('body').on('click', 'a.lock-document-btn', function(ev){ /* {{{ */
		ev.preventDefault();
		attr_rel = $(ev.currentTarget).attr('rel');
		attr_msg = $(ev.currentTarget).attr('msg');
		id = attr_rel;
		$.get(seeddms_webroot+'op/op.Ajax.php',
			{ command: 'tooglelockdocument', formtoken: $(ev.currentTarget).data('formtoken'), id: id },
			function(data) {
				if(data.success) {
					//$("#table-row-document-"+id).html('Loading').load('../op/op.Ajax.php?command=view&view=documentlistrow&id='+id)
					$("#table-row-document-"+id).html('Loading').load(seeddms_webroot+'out/out.ViewDocument.php?action=documentlistitem&documentid='+id)
					noty({
						text: attr_msg,
						type: 'success',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
				} else {
					noty({
						text: data.message,
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 3500
					});
				}
			},
			'json'
		);
	}); /* }}} */

	$('a.movefolder').click(function(ev){ /* {{{ */
		ev.preventDefault();
		attr_source = $(ev.currentTarget).attr('source');
		attr_dest = $(ev.currentTarget).attr('dest');
		attr_msg = $(ev.currentTarget).attr('msg');
		attr_formtoken = $(ev.currentTarget).attr('formtoken');
		$.get(seeddms_webroot+'op/op.Ajax.php',
			{ command: 'movefolder', folderid: attr_source, targetfolderid: attr_dest, formtoken: attr_formtoken },
			function(data) {
				if(data.success) {
					$('#table-row-folder-'+attr_source).hide('slow');
					noty({
						text: data.msg,
						type: data.success ? 'success' : 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
				}
			},
			'json'
		);
	}); /* }}} */

	$('a.movedocument').click(function(ev){ /* {{{ */
		ev.preventDefault();
		attr_source = $(ev.currentTarget).attr('source');
		attr_dest = $(ev.currentTarget).attr('dest');
		attr_msg = $(ev.currentTarget).attr('msg');
		attr_formtoken = $(ev.currentTarget).attr('formtoken');
		$.get(seeddms_webroot+'op/op.Ajax.php',
			{ command: 'movedocument', docid: attr_source, targetfolderid: attr_dest, formtoken: attr_formtoken },
			function(data) {
				if(data.success) {
					$('#table-row-document-'+attr_source).hide('slow');
					noty({
						text: data.msg,
						type: data.success ? 'success' : 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
				}
			},
			'json'
		);
	}); /* }}} */

	$('.send-missing-translation a').click(function(ev){ /* {{{ */
//		console.log($(ev.target).parent().children('[name=missing-lang-key]').val());
//		console.log($(ev.target).parent().children('[name=missing-lang-lang]').val());
//		console.log($(ev.target).parent().children('[name=missing-lang-translation]').val());
		$.ajax(seeddms_webroot+'op/op.Ajax.php', {
			type:"POST",
			async:true,
			dataType:"json",
			data: {
				command: 'submittranslation',
				key: $(ev.target).parent().children('[name=missing-lang-key]').val(),
				lang: $(ev.target).parent().children('[name=missing-lang-lang]').val(),
				phrase: $(ev.target).parent().children('[name=missing-lang-translation]').val()
			},
			success: function(data, textStatus) {
				noty({
					text: data.message,
					type: data.success ? 'success' : 'error',
					dismissQueue: true,
					layout: 'topRight',
					theme: 'defaultTheme',
					timeout: 1500
				});
			}
		});
	}); /* }}} */

	$('div.ajax').each(function(index) { /* {{{ */
		var element = $(this);
		var url = '';
		var href = element.data('href');
		var base = element.data('base');
		if(typeof base == 'undefined')
			base = '';
		var view = element.data('view');
		var action = element.data('action');
		var query = element.data('query');
		var afterload = $(this).data('afterload');
		var waitmsg = element.data('wait-msg');
		if(typeof waitmsg == 'undefined')
			waitmsg = '';
		if(view && action) {
			url = seeddms_webroot+base+"out/out."+view+".php?action="+action;
			if(query) {
				url += "&"+query;
			}
		} else
			url = href;
		if(!element.data('no-spinner'))
			element.prepend('<div style="position: _absolute; overflow: hidden; background: #f7f7f7; z-index: 1000; height: 200px; width: '+element.width()+'px; opacity: 0.7; display: table;"><div style="display: table-cell;text-align: center; vertical-align: middle; "><img src="../views/bootstrap/images/ajax-loader.gif"><div>'+waitmsg+'</div></div>');
		$.get(url, function(data) {
			element.html(data);
			if(afterload) {
				var func = eval(afterload);
				if(typeof func === "function"){
					func();
				}
			}
			initMost();
			SeedDMSAjax.run(view, action);
		});
	}); /* }}} */

	$('div.ajax').on('update', function(event, param1, callback) { /* {{{ */
		var element = $(this);
		var url = '';
		var href = element.data('href');
		var base = element.data('base');
		if(typeof base == 'undefined')
			base = '';
		var view = element.data('view');
		var action = element.data('action');
		var query = element.data('query');
		var afterload = $(this).data('afterload');
		var updatemsg = element.data('update-msg');
		if(view && action) {
			url = seeddms_webroot+base+"out/out."+view+".php?action="+action;
			if(query) {
				url += "&"+query;
			}
		} else
			url = href;
		if(typeof param1 === 'object') {
			for(var key in param1) {
				if(key == 'callback')
					callback = param1[key];
				else {
					if($.isArray(param1[key])) {
						if(param1[key].length > 0)
							url += "&"+key+"[]="+param1[key].join("&"+key+"[]=");
					} else
						url += "&"+key+"="+param1[key];
				}
			}
		} else {
			url += "&"+param1;
		}
		//console.log(url);
		if(typeof updatemsg != 'undefined')
			element.html(updatemsg);
		if(!element.data('no-spinner'))
			element.prepend('<div style="position: absolute; overflow: hidden; background: #f7f7f7; z-index: 1000; height: '+element.height()+'px; width: '+element.width()+'px; opacity: 0.7; display: table;"><div style="display: table-cell;text-align: center; vertical-align: middle; "><img src="../views/bootstrap/images/ajax-loader.gif"></div>');
		$.get(url, function(data) {
			element.html(data);
			if(callback)
				callback.call();
			if(afterload) {
				var func = eval(afterload);
				if(typeof func === "function"){
					func();
				}
			}
			initMost();
			SeedDMSAjax.run(view, action);
		});
	}); /* }}} */

	$("body").on("click", ".ajax-click", function() { /* {{{ */
		var element = $(this);
		var url = seeddms_webroot+"op/op.Ajax.php"+"?"+element.data('param1');
		var param2 = element.data('param2');
		var param3 = element.data('param3');
		if(typeof param2 !== 'undefined')
			url += "&"+param2;
		if(typeof param3 !== 'undefined')
			url += "&"+param3;
		$.ajax({
			type: 'GET',
			url: url,
			dataType: 'json',
			success: function(data){
				if(data.success) {
					if(element.data('param1') == 'command=clearclipboard') {
						$("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard')
						$("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard')
					}
					noty({
						text: data.message,
						type: 'success',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
				} else {
					noty({
						text: data.message,
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 3500
					});
				}
			}
		});
	}); /* }}} */

	$('button.history-back').on('click', function(event) { /* {{{ */
		window.history.back();
	}); /* }}} */

	$("body").on("blur", "span.editable", function(e) { /* {{{ */
		console.log($(this).data('document'));
		e.preventDefault();
		$.post(seeddms_webroot+"op/op.Ajax.php", { command: "setdocumentname", id: $(this).data('document'), formtoken: $(this).data('formtoken'), name: $(this).text() })
			.done(function( data ) {
				noty({
					text: data.message,
					type: data.success ? 'success' : 'error',
					dismissQueue: true,
					layout: 'topRight',
					theme: 'defaultTheme',
					timeout: 1500
				});
		});
	}); /* }}} */

	$("body").on("keypress", "span.editable", function(e) { /* {{{ */
		if(e.which == 13) {
			$(this).blur();
		}
		return e.which != 13;
	}); /* }}} */
});

function onAddClipboard(ev) { /* {{{ */
	ev.preventDefault();
	var source_info = JSON.parse(ev.originalEvent.dataTransfer.getData("text"));
	source_type = source_info.type;
	source_id = source_info.id;
	formtoken = source_info.formtoken;
	if(source_type == 'document' || source_type == 'folder') {
		$.get(seeddms_webroot+'op/op.Ajax.php',
			{ command: 'addtoclipboard', type: source_type, id: source_id },
			function(data) {
				if(data.success) {
					$("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard')
					$("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard')
					noty({
						text: data.message,
						type: 'success',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
				} else {
					noty({
						text: data.message,
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 3500
					});
				}
			},
			'json'
		);
		//url = "../op/op.AddToClipboard.php?id="+source_id+"&type="+source_type;
		//document.location = url;
	}
} /* }}} */

(function( SeedDMSUpload, $, undefined ) { /* {{{ */
	var ajaxurl = seeddms_webroot+"op/op.Ajax.php";
	var editBtnLabel = "Edit";
	var abortBtnLabel = "Abort";
	var maxFileSize = 100000;
	var maxFileSizeMsg = 'File too large';
	var rowCount=0;

	SeedDMSUpload.setUrl = function(url)  {
		ajaxurl = url;
	}

	SeedDMSUpload.setAbortBtnLabel = function(label)  {
		abortBtnLabel = label;
	}

	SeedDMSUpload.setEditBtnLabel = function(label)  {
		editBtnLabel = label;
	}

	SeedDMSUpload.setMaxFileSize = function(size)  {
		maxFileSize = size;
	}

	SeedDMSUpload.getMaxFileSize = function()  {
		return maxFileSize;
	}

	SeedDMSUpload.setMaxFileSizeMsg = function(msg)  {
		maxFileSizeMsg = msg;
	}

	SeedDMSUpload.getMaxFileSizeMsg = function()  {
		return maxFileSizeMsg;
	}

//	function sendFileToServer(formData,status,callback) {
	SeedDMSUpload.sendFileToServer = function(formData,status,callback) {
		var uploadURL = ajaxurl; //Upload URL
		var extraData ={}; //Extra Data.
		var jqXHR=$.ajax({
			xhr: function() {
			var xhrobj = $.ajaxSettings.xhr();
			if (xhrobj.upload) {
				xhrobj.upload.addEventListener('progress', function(event) {
						var percent = 0;
						var position = event.loaded || event.position;
						var total = event.total;
						if (event.lengthComputable) {
								percent = Math.ceil(position / total * 100);
						}
						//Set progress
						status.setProgress(percent);
					}, false);
				}
				return xhrobj;
			},
			url: uploadURL,
			type: "POST",
			contentType: false,
			dataType:"json",
			processData: false,
			cache: false,
			data: formData,
			success: function(data, textStatus) {
				status.setProgress(100);
				if(data.success) {
					noty({
						text: data.message,
						type: 'success',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 1500
					});
					if(editBtnLabel)
						status.statusbar.after($('<a href="'+seeddms_webroot+'out/out.EditDocument.php?documentid=' + data.data + '" class="btn btn-mini btn-sm btn-primary">' + editBtnLabel + '</a>'));
					if(callback) {
						callback();
					}
				} else {
					noty({
						text: data.message,
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 3500
					});
				}
			}
		});

		status.setAbort(jqXHR);
	}

	//function createStatusbar(obj) {
	SeedDMSUpload.createStatusbar = function(obj)  {
		rowCount++;
		var row="odd";
		this.obj = obj;
		if(rowCount %2 ==0) row ="even";
		this.statusbar = $("<div class='statusbar "+row+"'></div>");
		this.filename = $("<div class='filename'></div>").appendTo(this.statusbar);
		this.size = $("<div class='filesize'></div>").appendTo(this.statusbar);
		this.progressBar = $("<div class='progress'><div class='bar bg-success'></div></div>").appendTo(this.statusbar);
		this.abort = $("<div class='btn btn-mini btn-sm btn-danger'>" + abortBtnLabel + "</div>").appendTo(this.statusbar);
//		$('.statusbar').empty();
		obj.after(this.statusbar);
		this.setFileNameSize = function(name,size) {
			var sizeStr="";
			var sizeKB = size/1024;
			if(parseInt(sizeKB) > 1024) {
				var sizeMB = sizeKB/1024;
				sizeStr = sizeMB.toFixed(2)+" MB";
			} else {
				sizeStr = sizeKB.toFixed(2)+" KB";
			}

			this.filename.html(name);
			this.size.html(sizeStr);
		}
		this.setProgress = function(progress) {
//			var progressBarWidth =progress*this.progressBar.width()/ 100;
			this.progressBar.find('div').animate({ width: progress+"%" }, 10).html(progress + "% ");
			if(parseInt(progress) >= 100) {
				this.abort.hide();
			}
		}
		this.setAbort = function(jqxhr) {
			var sb = this.statusbar;
			this.abort.click(function() {
				jqxhr.abort();
				sb.hide();
			});
		}
	}

	// formData - instance of FormData object
	// data - object to post
	SeedDMSUpload.getFormData = function(formData, data, previousKey) {
		if (data instanceof Object) {
			Object.keys(data).forEach(key => {
				const value = data[key];
				if (value instanceof Object && !Array.isArray(value)) {
					return this.getFormData(formData, value, key);
				}
				if (previousKey) {
					key = `${previousKey}[${key}]`;
				}
				if (Array.isArray(value)) {
					value.forEach(val => {
						formData.append(`${key}[]`, val);
					});
				} else {
					formData.append(key, value);
				}
			});
		} else if(typeof data !== 'undefined') {
			formData.append(previousKey, data);
		}
	}

	SeedDMSUpload.handleFileUpload = function(items,obj,statusbar) {
		/* target is set for the quick upload area */
		var target_id = obj.data('target');
		var target_type = 'folder';
		/* droptarget is set for folders and documents in lists */
		var droptarget = obj.data('droptarget');
		if(droptarget) {
			target_type = droptarget.split("_")[0];
			target_id = droptarget.split("_")[1];
		}
		var afterupload = obj.data('afterupload');
		if(afterupload) {
			afteruploadfunc = eval(afterupload);
		} else {
			afteruploadfunc = function() {
				if(target_id == seeddms_folder)
					$("div.ajax[data-action='folderList']").trigger('update', {folderid: seeddms_folder});
				}
		}
		if(target_type == 'folder' && target_id) {
			for (var i = 0; i < items.length; i++) {
				var item = items[i]; //.webkitGetAsEntry();
				if (item.isFile) {
					item.file(function(file) {
						if(file.size <= maxFileSize) {
							var fd = new FormData();
							fd.append('targettype', target_type);
							fd.append('folderid', target_id);
							fd.append('formtoken', obj.data('uploadformtoken'));
							if (typeof obj.data('comment') !== 'undefined') {
								fd.append('comment', obj.data('comment'));
							}
							if (typeof obj.data('keywords') !== 'undefined') {
								fd.append('keywords', obj.data('keywords'));
							}
							fd.append('userfile', file);
							fd.append('command', 'uploaddocument');
							SeedDMSUpload.getFormData(fd, obj.data('attributes'), 'attributes');
							SeedDMSUpload.getFormData(fd, obj.data('categories'), 'categories');
		//					fd.append('path', file.webkitRelativePath);

							statusbar.parent().show();
							var status = new SeedDMSUpload.createStatusbar(statusbar);
							status.setFileNameSize(file.name,file.size);
							SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
						} else {
							noty({
								text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
								type: 'error',
								dismissQueue: true,
								layout: 'topRight',
								theme: 'defaultTheme',
								timeout: 5000
							});
						}
					});
				} else if(item.isDirectory) {
					var dirReader = item.createReader();
					dirReader.readEntries(function(entries) {
						SeedDMSUpload.handleFileUpload(entries, obj, statusbar);
					});
/*
					noty({
						text: 'Folders currently not supported',
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 5000
					});
					*/
				}
			}
		} else if(target_type == 'document' && target_id) {
			/*
			for (var i = 0; i < items.length; i++) {
				var item = items[i]; //.webkitGetAsEntry();
				if (item.isFile) {
					item.file(function(file) {
						if(file.size <= maxFileSize) {
							var fd = new FormData();
							fd.append('targettype', target_type);
							fd.append('documentid', target_id);
							fd.append('formtoken', obj.data('uploadformtoken'));
							fd.append('userfile', files[i]);
							fd.append('command', 'uploaddocument');

							var status = new SeedDMSUpload.createStatusbar(statusbar);
							status.setFileNameSize(files[i].name,files[i].size);
							SeedDMSUpload.sendFileToServer(fd,status);
						} else {
							noty({
								text: maxFileSizeMsg + '<br /><em>' + files[i].name + ' (' + files[i].size + ' Bytes)</em>',
								type: 'error',
								dismissQueue: true,
								layout: 'topRight',
								theme: 'defaultTheme',
								timeout: 5000
							});
						}
					});
				}
			}
			*/
		} else if(target_type == 'attachment' && target_id) {
			for (var i = 0; i < items.length; i++) {
				var item = items[i]; //.webkitGetAsEntry();
				if (item.isFile) {
					item.file(function(file) {
						if(file.size <= maxFileSize) {
							var fd = new FormData();
							fd.append('targettype', target_type);
							fd.append('documentid', target_id);
							fd.append('formtoken', obj.data('uploadformtoken'));
							fd.append('userfile', file);
							fd.append('command', 'addfile');

							var status = new SeedDMSUpload.createStatusbar(statusbar);
							status.setFileNameSize(file.name,file.size);
							SeedDMSUpload.sendFileToServer(fd,status, function(){
								$("div.ajax[data-action='documentFiles']").trigger('update', {documentid: target_id});
							});
						} else {
							noty({
								text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
								type: 'error',
								dismissQueue: true,
								layout: 'topRight',
								theme: 'defaultTheme',
								timeout: 5000
							});
						}
					});
				}
			}
		}
	}
}( window.SeedDMSUpload = window.SeedDMSUpload || {}, jQuery )); /* }}} */

$(document).ready(function() { /* {{{ */
	$(document).on('dragenter', "#draganddrophandler", function (e) {
		e.stopPropagation();
		e.preventDefault();
		$(this).css('border', '2px dashed #0B85A1');
	});
	$(document).on('dragleave', "#draganddrophandler", function (e) {
		$(this).css('border', '0px solid white');
	});
	$(document).on('dragover', "#draganddrophandler", function (e) {
		e.stopPropagation();
		e.preventDefault();
	});
	$(document).on('drop', "#draganddrophandler", function (e) {
		$(this).css('border', '0px dotted #0B85A1');
		e.preventDefault();
		var files = e.originalEvent.dataTransfer.files;
		var items = e.originalEvent.dataTransfer.items;

		//We need to send dropped files to Server
		newitems = [];
		if(items.length > 0) {
			for (var i=0; i<items.length; i++) {
				newitems.push(items[i].webkitGetAsEntry());
			}
			SeedDMSUpload.handleFileUpload(newitems, $(this), $(this));
		}
	});

	$(document).on('dragenter', '.droptarget', function (e) {
		e.stopPropagation();
		e.preventDefault();
		$(e.currentTarget).css('border', '2px dashed #0B85A1');
	});
	$(document).on('dragleave', '.droptarget', function (e) {
		e.stopPropagation();
		e.preventDefault();
		$(e.currentTarget).css('border', '0px solid white');
	});
	$(document).on('dragover', '.droptarget', function (e) {
		e.stopPropagation();
		e.preventDefault();
	});
	$(document).on('drop', '.droptarget', function (e) {
		e.preventDefault();
		e.stopPropagation();
		$(e.currentTarget).css('border', '0px solid white');
		attr_rel = $(e.currentTarget).data('droptarget');
		target_type = attr_rel.split("_")[0];
		target_id = attr_rel.split("_")[1];
		target_name = $(e.currentTarget).data('name')+''; // Force this to be a string
		if(target_type == 'folder') {
			var files = e.originalEvent.dataTransfer.files;
			var items = e.originalEvent.dataTransfer.items;
			/* check for files, because items has an entry if no file was dropped */
			if(files.length > 0) {
//				console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
				newitems = [];
				for (var i=0; i<items.length; i++) {
					newitems.push(items[i].webkitGetAsEntry());
				}
				SeedDMSUpload.handleFileUpload(newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
			} else {
				/* The data is passed in dataTransfer. The items are meaning less. */
				var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
				source_type = source_info.type;
				source_id = source_info.id;
				formtoken = source_info.formtoken;
//				console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id);
				if(source_type == 'document') {
					var bootbox_message = trans.confirm_move_document;
					if(source_info.name)
						bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
					bootbox.dialog({
						"message" : bootbox_message,
						"buttons" : {
							"cancel" : {
								"label" : trans.cancel,
								"className" : "btn-secondary",
								"callback": function() {
								}
							},
							"move" : {
								"label" : "<i class='fa fa-remove'></i> "+trans.move_document,
								"className" : "btn-danger",
								"callback": function() {
									$.get(seeddms_webroot+'op/op.Ajax.php',
										{ command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken },
										function(data) {
											if(data.success) {
												$('#table-row-document-'+source_id).hide('slow');
												noty({
													text: data.message,
													type: 'success',
													dismissQueue: true,
													layout: 'topRight',
													theme: 'defaultTheme',
													timeout: 1500
												});
											} else {
												noty({
													text: data.message,
													type: 'error',
													dismissQueue: true,
													layout: 'topRight',
													theme: 'defaultTheme',
													timeout: 3500
												});
											}
										},
										'json'
									);
								}
							}
						}
					});

					url = seeddms_webroot+"out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id;
		//			document.location = url;
				} else if(source_type == 'folder' && source_id != target_id) {
					var bootbox_message = trans.confirm_move_folder;
					if(source_info.name)
						bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
					bootbox.dialog({
						"message" : bootbox_message,
						"buttons" : {
							"cancel" : {
								"label" : trans.cancel,
								"className" : "btn-secondary",
								"callback": function() {
								}
							},
							"move" : {
								"label" : "<i class='fa fa-arrow-right'></i> "+trans.move_folder,
								"className" : "btn-danger",
								"callback": function() {
									$.get(seeddms_webroot+'op/op.Ajax.php',
										{ command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken },
										function(data) {
											if(data.success) {
												$('#table-row-folder-'+source_id).hide('slow');
												noty({
													text: data.message,
													type: 'success',
													dismissQueue: true,
													layout: 'topRight',
													theme: 'defaultTheme',
													timeout: 1500
												});
											} else {
												noty({
													text: data.message,
													type: 'error',
													dismissQueue: true,
													layout: 'topRight',
													theme: 'defaultTheme',
													timeout: 3500
												});
											}
										},
										'json'
									);
								}
							}
						}
					});

					url = seeddms_webroot+"out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id;
		//			document.location = url;
				}
			}
		} else if(target_type == 'document') {
			var files = e.originalEvent.dataTransfer.files;
			var items = e.originalEvent.dataTransfer.items;
			/* check for files, because items has an entry if no file was dropped */
			if(files.length > 0) {
//				console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
				if(files.length > 1) {
					noty({
						text: trans.must_drop_one_file,
						type: 'error',
						dismissQueue: true,
						layout: 'topRight',
						theme: 'defaultTheme',
						timeout: 5000
					});
				} else if(0) {
					bootbox.dialog({
						"message" : trans.confirm_upload_new_version,
						"buttons" : {
							"cancel" : {
								"label" : trans.cancel,
								"className" : "btn-secondary",
								"callback": function() {
								}
							},
							"newversion" : {
								"label" : "<i class='fa fa-link'></i> "+trans.upload_new_version,
								"className" : "btn-danger",
								"callback": function() {
									console.log('Hallo');
									/*
									newitems = [];
									for (var i=0; i<items.length; i++) {
										newitems.push(items[i].webkitGetAsEntry());
									}
									SeedDMSUpload.handleFileUpload(newitems,$(e.currentTarget),$('div.statusbar-container h1'));
					*/
								}
							}
						}
					});
					newitems = [];
					for (var i=0; i<items.length; i++) {
						newitems.push(items[i].webkitGetAsEntry());
					}
					SeedDMSUpload.handleFileUpload(newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
				}
			} else {
				var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
				source_type = source_info.type;
				source_id = source_info.id;
				formtoken = source_info.formtoken;
//				console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id);
				if(source_type == 'document') {
					if(source_id != target_id) {
						bootbox.dialog({
							"message" : trans.confirm_transfer_link_document,
							"buttons" : {
								"cancel" : {
									"label" : trans.cancel,
									"className" : "btn-secondary",
									"callback": function() {
									}
								},
								"transfer": {
									"label" : "<i class='fa fa-arrow-right'></i> "+trans.transfer_content,
									"className" : "btn-danger",
									"callback": function() {
										$.get(seeddms_webroot+'op/op.Ajax.php',
											{ command: 'transfercontent', docid: source_id, targetdocumentid: target_id, formtoken: formtoken },
											function(data) {
												if(data.success) {
													$('#table-row-document-'+source_id).hide('slow');
													noty({
														text: data.message,
														type: 'success',
														dismissQueue: true,
														layout: 'topRight',
														theme: 'defaultTheme',
														timeout: 1500
													});
												} else {
													noty({
														text: data.message,
														type: 'error',
														dismissQueue: true,
														layout: 'topRight',
														theme: 'defaultTheme',
														timeout: 3500
													});
												}
											},
											'json'
										);
									}
								},
								"link" : {
									"label" : "<i class='fa fa-link'></i> "+trans.link_document,
									"className" : "btn-danger",
									"callback": function() {
										$.get(seeddms_webroot+'op/op.Ajax.php',
											{ command: 'linkdocument', docid: source_id, targetdocumentid: target_id, formtoken: formtoken },
											function(data) {
												if(data.success) {
													noty({
														text: data.message,
														type: 'success',
														dismissQueue: true,
														layout: 'topRight',
														theme: 'defaultTheme',
														timeout: 1500
													});
												} else {
													noty({
														text: data.message,
														type: 'error',
														dismissQueue: true,
														layout: 'topRight',
														theme: 'defaultTheme',
														timeout: 3500
													});
												}
											},
											'json'
										);
									}
								}
							}
						});
					}
					url = seeddms_webroot+"out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id;
		//			document.location = url;
				}
			}
		} else if(target_type == 'attachment') {
			var files = e.originalEvent.dataTransfer.files;
			var items = e.originalEvent.dataTransfer.items;
			if(files.length > 0) {
				newitems = [];
				for (var i=0; i<items.length; i++) {
					newitems.push(items[i].webkitGetAsEntry());
				}
				SeedDMSUpload.handleFileUpload(newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
			}
		}
	});
	$(document).on('dragstart', '.table-row-folder', function (e) {
		attr_rel = $(e.target).attr('rel');
		if(typeof attr_rel == 'undefined')
			return;
		var dragStartInfo = {
			id : attr_rel.split("_")[1],
			type : "folder",
			formtoken : $(e.target).attr('formtoken'),
			name: $(e.target).data('name')+''
		};
		/* Currently not used
		$.ajax({url: '../out/out.ViewFolder.php',
			type: 'GET',
			dataType: "json",
			data: {action: 'data', folderid: attr_rel.split("_")[1]},
			success: function(data) {
				if(data) {
					dragStartInfo.source = data;
				}
			},
			timeout: 3000
		});
		*/
		e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo));
	});

	$(document).on('dragstart', '.table-row-document', function (e) {
		attr_rel = $(e.target).attr('rel');
		if(typeof attr_rel == 'undefined')
			return;
		var dragStartInfo = {
			id : attr_rel.split("_")[1],
			type : "document",
			formtoken : $(e.target).attr('formtoken'),
			name: $(e.target).data('name')+''
		};
		e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo));
	});

	/* Dropping item on alert below clipboard */
	$(document).on('dragenter', '.add-clipboard-area', function (e) {
		e.stopPropagation();
		e.preventDefault();
		$(this).css('border', '2px dashed #0B85A1');
	});
	$(document).on('dragleave', '.add-clipboard-area', function (e) {
		$(this).css('border', '0px solid white');
	});
	$(document).on('dragover', '.add-clipboard-area', function (e) {
		e.preventDefault();
	});
	$(document).on('drop', '.add-clipboard-area', function (e) {
		$(this).css('border', '0px dotted #0B85A1');
		onAddClipboard(e);
	});

	$("#jqtree").on('dragenter', function (e) {
		attr_rel = $(e.srcElement).attr('rel');
		if(typeof attr_rel == 'undefined')
			return;
		$(e.target).parent().css('border', '1px dashed #0B85A1');
		e.stopPropagation();
		e.preventDefault();
	});
	$("#jqtree").on('dragleave', function (e) {
		attr_rel = $(e.srcElement).attr('rel');
		if(typeof attr_rel == 'undefined')
			return;
		$(e.target).parent().css('border', '0px solid white');
		e.stopPropagation();
		e.preventDefault();
	});
	$("#jqtree").on('dragover', function (e) {
		e.stopPropagation();
		e.preventDefault();
	});
	$("#jqtree").on('drop', function (e) {
		e.stopPropagation();
		e.preventDefault();
		attr_rel = $(e.target).attr('rel');
		if(typeof attr_rel == 'undefined')
			return;
		$(e.target).parent().css('border', '1px solid white');
		target_type = attr_rel.split("_")[0];
		target_id = attr_rel.split("_")[1];
		var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
		source_type = source_info.type;
		source_id = source_info.id;
		formtoken = source_info.formtoken;
		if(source_type == 'document') {
			bootbox.dialog(trans.confirm_move_document, [{
				"label" : "<i class='fa fa-remove'></i> "+trans.move_document,
				"class" : "btn-danger",
				"callback": function() {
					$.get(seeddms_webroot+'op/op.Ajax.php',
						{ command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken },
						function(data) {
							if(data.success) {
								$('#table-row-document-'+source_id).hide('slow');
								noty({
									text: data.message,
									type: 'success',
									dismissQueue: true,
									layout: 'topRight',
									theme: 'defaultTheme',
									timeout: 1500
								});
							} else {
								noty({
									text: data.message,
									type: 'error',
									dismissQueue: true,
									layout: 'topRight',
									theme: 'defaultTheme',
									timeout: 3500
								});
							}
						},
						'json'
					);
				}
			}, {
				"label" : trans.cancel,
				"class" : "btn-cancel",
				"callback": function() {
				}
			}]);

			url = seeddms_webroot+"out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id;
//			document.location = url;
		} else if(source_type == 'folder' && source_id != target_id) {
			bootbox.dialog(trans.confirm_move_folder, [{
				"label" : "<i class='fa fa-arrow-right'></i> "+trans.move_folder,
				"class" : "btn-danger",
				"callback": function() {
					$.get(seeddms_webroot+'op/op.Ajax.php',
						{ command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken },
						function(data) {
							if(data.success) {
								$('#table-row-folder-'+source_id).hide('slow');
								noty({
									text: data.message,
									type: 'success',
									dismissQueue: true,
									layout: 'topRight',
									theme: 'defaultTheme',
									timeout: 1500
								});
							} else {
								noty({
									text: data.message,
									type: 'error',
									dismissQueue: true,
									layout: 'topRight',
									theme: 'defaultTheme',
									timeout: 3500
								});
							}
						},
						'json'
					);
				}
			}, {
				"label" : trans.cancel,
				"class" : "btn-cancel",
				"callback": function() {
				}
			}]);

			url = seeddms_webroot+"out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id;
//			document.location = url;
		}
	});

	$('div.splash').each(function(index) {
		var element = $(this);
		var msgtype = element.data('type');
		var timeout = element.data('timeout');
		var msg = element.text();
		noty({
			text: msg,
			type: msgtype,
			dismissQueue: true,
			layout: 'topRight',
			theme: 'defaultTheme',
			timeout: (typeof timeout == 'undefined' ? 1500 : timeout)
		});
	});

	$("body").on("click", "span.openpopupbox", function(e) {
		$(""+$(e.target).data("href")).toggle();
		e.stopPropagation();
	});
	$("body").on("click", "span.openpopupbox i", function(e) {
		$(e.target).parent().click();
	});
	$("body").on("click", "span.openpopupbox span", function(e) {
		$(e.target).parent().click();
	});
	$("body").on("click", "span.closepopupbox", function(e) {
		$(this).parent().hide();
		e.stopPropagation();
	});

	$("body").on("mouseenter", "#main-menu-dropfolderlist div.dropdown-menu  a", function(e) {
		$(e.currentTarget).find('.dropfolder-menu-img').css('display', 'inline');
	});
	$("body").on("mouseleave", "#main-menu-dropfolderlist div.dropdown-menu  a", function(e) {
		$(e.currentTarget).find('.dropfolder-menu-img').hide();
	});

}); /* }}} */

$(document).ready(function() { /* {{{ */
	$('body').on('click.modal.data-api', '[data-toggle="modal"]', function(){
		$($(this).data("target")+' .modal-body').load($(this).attr('href'));
	});
}); /* }}} */

(function( SeedDMSTask, $, undefined ) { /* {{{ */
	var approval_count, review_count, workflow_count;
	var timeout = 1000;
	var counter = 0;
	var tasks = Array(
		{name: 'checktasks', interval: 15, func: 
			checkTasks = function() {
				$.ajax({url: seeddms_webroot+'out/out.Tasks.php',
					type: 'GET',
					dataType: "json",
					data: {action: 'mytasks'},
					success: function(data) {
						if(data) {
							if((typeof data.data.approval != 'undefined' && approval_count != data.data.approval.length) ||
								 (typeof data.data.review != 'undefined' && review_count != data.data.review.length) ||
								 (typeof data.data.workflow != 'undefined' && workflow_count != data.data.workflow.length)) {
		//						$("#menu-tasks").html('Loading').hide().load('../out/out.Tasks.php?action=menutasks').fadeIn('500')
								$('#menu-tasks > div.ajax').trigger('update', {folderid: seeddms_folder});
								approval_count = typeof data.data.approval != 'undefined' ? data.data.approval.length : 0;
								review_count = typeof data.data.review != 'undefined' ? data.data.review.length : 0;
								workflow_count = typeof data.data.workflow != 'undefined' ? data.data.workflow.length : 0;
							}
						}
					},
					timeout: 3000
				}); 
			}
		}
	);

	SeedDMSTask.add = function(task) {
		return tasks.push(task);
	}

	SeedDMSTask.run = function() {
		for(let task of tasks) {
			if(counter % task.interval == 0) {
//			console.log("Running task '" + task.name + "'");
				task.func(task);
			}
		}
		//console.log(counter);
		counter++;
		timeOutId = setTimeout(SeedDMSTask.run, timeout);
	}
}( window.SeedDMSTask = window.SeedDMSTask || {}, jQuery )); /* }}} */

(function( SeedDMSAjax, $, undefined ) { /* {{{ */
	var tasks = Array(
		{name: 'test', view: 'null', action: null, func: 
			test = function() {
				console.log('Run in SeedDMSAjax');
			}
		}
	);

	SeedDMSAjax.add = function(task) {
		tasks.push(task);
	}

	SeedDMSAjax.run = function(view, action) {
		for(let task of tasks) {
			//console.log('Checking for '+view+':'+action);
			if(task.view == null || (task.view == view && task.action == null) || (task.view == view && task.action == action)) {
				//console.log('Running '+task.name+' after update for '+view+':'+action);
				task.func();
			}
		}
	}
}( window.SeedDMSAjax = window.SeedDMSAjax || {}, jQuery )); /* }}} */