PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i5h-3LL

HOME


5h-3LL 1.0
DIR: /srv/http/adent.cz/old.5zsmb.cz/spisovka/isds
/srv/http/adent.cz/old.5zsmb.cz/spisovka/isds/
Upload File:
Current File : /srv/http/adent.cz/old.5zsmb.cz/spisovka/isds/ISDS.php
<?php

// Modul pro komunikaci s ISDS
//
// Verze 2.0
//
// (c) 2009 Software602 a.s.
//
// Pripadne dotazy a pripominky zasilejte na isds@602.cz

// veskere stringy jsou ocekavany v kodovani UTF-8

// vyzaduje PHP 5 >= 5.0.1

// v php.ini je treba mit povolene nasledujici extensions: php_curl.dll, php_openssl.dll, php_soap.dll


//-----------------------------------------------------
// Konfigurace pro komunikaci s ISDS
//-----------------------------------------------------

//----------------------------------------------------
// Uprava url a cesty k WSDL
//
if(!isset($isds_path)) {
    $isds_path = "";    
}
$isds_path_plus = "";

//-----------------------------------------------------
// typ portalu
// 0 = czebox (zkusebni prostredi)
// 1 = mojedatovaschranka (ostre prostredi)

$portaltype=1;
if(defined('ISDS_TEST')) {
    if(ISDS_TEST == 1) {
        $portaltype=0;        
    }
}

//-----------------------------------------------------
// debugovaci vypis
// 0 = ne
// 1 = ano

$debug=0;
if(defined('ISDS_DEBUG')) {
    if(ISDS_DEBUG == 1) {
        $debug=1;
    }
}

//-----------------------------------------------------
// vypina/zapina monitorovani fiddlerem
// 0 = vypnuto
// 1 = zapnuto

$fiddler=0;

//-----------------------------------------------------
// proxy adresa ve tvaru xxx.xxx.xxx.xxx
//

//$proxyaddress='192.168.1.33';

//-----------------------------------------------------
// proxy port
//

//$proxyport=80;

//-----------------------------------------------------
// proxy login name
//

//$proxylogin='supervisor';

//-----------------------------------------------------
// proxy heslo
//

//$proxypwd='';

//-----------------------------------------------------
// Urcuje, zda se i pro pripojeni jmenem a heslem pouziva 
// vyhradne curl knihovna
//
//$onlycurl=true;


function QX($s)
// debugovaci funkce
{
	global $debug;

	if ($debug == 0)
	{
		return;
	}

	echo($s."\r\n");
}

function QY($s)
// debugovaci funkce
{
	echo($s."\r\n");
}

function QV($s)
// debugovaci funkce
{
	global $debug;

	if ($debug == 0)
	{
		return;
	}
	var_dump($s);
}

// udaje o sluzbach. Shodna url musi byt vyplnena ve WSDL souborech

if ($portaltype == 0)
{
	$OperationsWSDL=$isds_path.$isds_path_plus."dm_operations.wsdl";
	$InfoWSDL=$isds_path.$isds_path_plus."dm_info.wsdl";
	$SearchWSDL=$isds_path.$isds_path_plus."db_search.wsdl";
	$SupplementaryWSDL=$isds_path.$isds_path_plus."db_supplementary.wsdl";
	$ManipulationsWSDL=$isds_path.$isds_path_plus."db_manipulations.wsdl";
	$OperationsURL="https://www.czebox.cz/DS/dz";
	$InfoURL="https://www.czebox.cz/DS/dx";
	$SearchURL="https://www.czebox.cz/DS/df";
	$SupplementaryURL="https://www.czebox.cz/DS/DsManage";
	$ManipulationsURL="https://www.czebox.cz/DS/DsManage";

	$OperationsCertWSDL=$isds_path.$isds_path_plus."dm_operations_cert.wsdl";
	$InfoCertWSDL=$isds_path.$isds_path_plus."dm_info_cert.wsdl";
	$SearchCertWSDL=$isds_path.$isds_path_plus."db_search_cert.wsdl";
	$SupplementaryCertWSDL=$isds_path.$isds_path_plus."db_supplementary_cert.wsdl";
	$ManipulationsCertWSDL=$isds_path.$isds_path_plus."db_manipulations_cert.wsdl";
	$OperationsCertURL="https://www.czebox.cz/cert/DS/dz";
	$InfoCertURL="https://www.czebox.cz/cert/DS/dx";
	$SearchCertURL="https://www.czebox.cz/cert/DS/df";
	$SupplementaryCertURL="https://www.czebox.cz/cert/DS/DsManage";
	$ManipulationsCertURL="https://www.czebox.cz/cert/DS/DsManage";

	$OperationshspisWSDL=$isds_path.$isds_path_plus."dm_operations_hspis.wsdl";
	$InfohspisWSDL=$isds_path.$isds_path_plus."dm_info_hspis.wsdl";
	$SearchhspisWSDL=$isds_path.$isds_path_plus."db_search_hspis.wsdl";
	$SupplementaryhspisWSDL=$isds_path.$isds_path_plus."db_supplementary_hspis.wsdl";
	$ManipulationshspisWSDL=$isds_path.$isds_path_plus."db_manipulations_hspis.wsdl";
	$OperationshspisURL="https://www.czebox.cz/hspis/DS/dz";
	$InfohspisURL="https://www.czebox.cz/hspis/DS/dx";
	$SearchhspisURL="https://www.czebox.cz/hspis/DS/df";
	$SupplementaryhspisURL="https://www.czebox.cz/hspis/DS/DsManage";
	$ManipulationshspisURL="https://www.czebox.cz/hspis/DS/DsManage";

	$LogoutURL="https://www.czebox.cz/nesp/app/plogout";
}
else
{
	$OperationsWSDL=$isds_path.$isds_path_plus."dm_operations_1.wsdl";
	$InfoWSDL=$isds_path.$isds_path_plus."dm_info_1.wsdl";
	$SearchWSDL=$isds_path.$isds_path_plus."db_search_1.wsdl";
	$SupplementaryWSDL=$isds_path.$isds_path_plus."db_supplementary_1.wsdl";
	$ManipulationsWSDL=$isds_path.$isds_path_plus."db_manipulations_1.wsdl";
	$OperationsURL="https://www.mojedatovaschranka.cz/DS/dz";
	$InfoURL="https://www.mojedatovaschranka.cz/DS/dx";
	$SearchURL="https://www.mojedatovaschranka.cz/DS/df";
	$SupplementaryURL="https://www.mojedatovaschranka.cz/DS/DsManage";
	$ManipulationsURL="https://www.mojedatovaschranka.cz/DS/DsManage";

	$OperationsCertWSDL=$isds_path.$isds_path_plus."dm_operations_cert_1.wsdl";
	$InfoCertWSDL=$isds_path.$isds_path_plus."dm_info_cert_1.wsdl";
	$SearchCertWSDL=$isds_path.$isds_path_plus."db_search_cert_1.wsdl";
	$SupplementaryCertWSDL=$isds_path.$isds_path_plus."db_supplementary_cert_1.wsdl";
	$ManipulationsCertWSDL=$isds_path.$isds_path_plus."db_manipulations_cert_1.wsdl";
	$OperationsCertURL=$isds_path.$isds_path_plus."https://www.mojedatovaschranka.cz/cert/DS/dz";
	$InfoCertURL="https://www.mojedatovaschranka.cz/cert/DS/dx";
	$SearchCertURL="https://www.mojedatovaschranka.cz/cert/DS/df";
	$SupplementaryCertURL="https://www.mojedatovaschranka.cz/cert/DS/DsManage";
	$ManipulationsCertURL="https://www.mojedatovaschranka.cz/cert/DS/DsManage";

	$OperationshspisWSDL=$isds_path.$isds_path_plus."dm_operations_hspis_1.wsdl";
	$InfohspisWSDL=$isds_path.$isds_path_plus."dm_info_hspis_1.wsdl";
	$SearchhspisWSDL=$isds_path.$isds_path_plus."db_search_hspis_1.wsdl";
	$SupplementaryhspisWSDL=$isds_path.$isds_path_plus."db_supplementary_hspis_1.wsdl";
	$ManipulationshspisWSDL=$isds_path.$isds_path_plus."db_manipulations_hspis_1.wsdl";
	$OperationshspisURL="https://www.mojedatovaschranka.cz/hspis/DS/dz";
	$InfohspisURL="https://www.mojedatovaschranka.cz/hspis/DS/dx";
	$SearchhspisURL="https://www.mojedatovaschranka.cz/hspis/DS/df";
	$SupplementaryhspisURL="https://www.mojedatovaschranka.cz/hspis/DS/DsManage";
	$ManipulationshspisURL="https://www.mojedatovaschranka.cz/hspis/DS/DsManage";

	$LogoutURL="https://www.mojedatovaschranka.cz/nesp/app/plogout";
}


class ISDSSentOutFiles
// Trida pouzita pro pridavani souboru do odesilane zpravy
{
	var $FileInfos = array();
	var $FullFileNames = array();

	function ISDSSentOutFiles()
	{
	}

	function AddFileSpecFromMemory(
	// Prida soubor
        	$file,		// bytove pole obsahujici soubor
		$MimeType,	// Typ souboru v MIME zapisu, napr. application/pdf nebo image/tiff
		$MetaType,	// Typ pisemnosti
		$Guid,		// Nepovinny interni identifikator tohoto dokumentu - pro vytvareni stromu zavislosti dokumentu
		$UpFileGuid,	// Nepovinny interni identifikator nadrizeneho dokumentu (napr. pro vztah soubor - podpis aj.)
		$FileDescr,	// Muze obsahovat jmeno souboru, prip. jiny popis. Objevi se v seznamu priloh na portale
		$Format)	// Nepovinny udaj - odkaz na definici formulare
	{
		QX("MimeType: ".$MimeType);
		QX("MetaType: ".$MetaType);
		QX("Guid: ".$Guid);
		QX("UpFileGuid: ".$UpFileGuid);
		QX("FileDescr: ".$FileDescr);
		QX("Format: ".$Format);
		$dmFile=array(
			'dmMimeType'=>$MimeType,
			'dmFileMetaType'=>$MetaType,
			'dmFileGuid'=>$Guid,
			'dmUpFileGuid'=>$UpFileGuid,
			'dmFileDescr'=>$FileDescr,
			'dmFormat'=>$Format,
			'dmEncodedContent'=>$file
			);
		if ($this->FileInfos == null)
		{
			$this->FileInfos[0] = $dmFile;
			$this->FullFileNames[0] = $FullFileName;
		}
		else
		{
			$this->FileInfos[count($this->FileInfos)]=$dmFile;
			$this->FullFileNames[count($this->FullFileNames)]=$FullFileName;
		}		
		QV($this->FullFileNames);
		return true;
	}

	function AddFileSpecFromFile(
	// Prida soubor
        	$FullFileName,	// Uplne jmeno souboru (vcetne cesty)
		$MimeType,	// Typ souboru v MIME zapisu, napr. application/pdf nebo image/tiff
		$MetaType,	// Typ pisemnosti
		$Guid,		// Nepovinny interni identifikator tohoto dokumentu - pro vytvareni stromu zavislosti dokumentu
		$UpFileGuid,	// Nepovinny interni identifikator nadrizeneho dokumentu (napr. pro vztah soubor - podpis aj.)
		$FileDescr,	// Muze obsahovat jmeno souboru, prip. jiny popis. Objevi se v seznamu priloh na portale
		$Format)	// Nepovinny udaj - odkaz na definici formulare
	{
		QX("Pridavan soubor: ".$FullFileName);
		if (!file_exists($FullFileName))
		{
			QX("Soubor nenalezen");
			return false;
		}
		$file=file_get_contents($FullFileName);
		if (!$file)
		{
			QX("Soubor se nepodarilo nacist");
			return false;
		}
		return $this->AddFileSpecFromMemory($file,$MimeType,$MetaType,$Guid,$UpFileGuid,$FileDescr,$Format);
	}

	function AddFile($FullFileName,$MimeType)
	// zjednodusena funkce pro pridani souboru
	{
		if ($this->FileInfos == null)
		{
			$MetaType="main";
		}
		else
		{
			$MetaType="enclosure";
		}		
		$path_parts = pathinfo($FullFileName);		
		return $this->AddFileSpecFromFile($FullFileName,
			$MimeType,
			$MetaType,"","",$path_parts['basename'],"");
	}

}

class ISDSSoapClient extends SoapClient 
{
	var $certfilename;
	var $passphrase;
	var $ch;
	var $logintype;
	var $loginname;
	var $password;
	var $cookiename;
	var $cookievalue;
	var $cookiefilename;

	function __doRequest($request, $location, $action, $version, $one_way = null)
	{
		global $debug,$proxyaddress,$proxyport,$proxylogin,$proxypwd,$onlycurl,$usenss;

		if ($debug > 1)
		{
			QX('#######################################################################');
			QX('__doRequest:');
			QX('certfilename: '.$this->certfilename);
			QX('passphrase: '.$this->passphrase);
			QX('Request: '.$request);
			QX('Location: '.$location);
			QX('Action: '.$action);
			QX('Version: '.$version);
			QX('LoginType: '.$logintype);
		}

		QX('logintype: '.$this->logintype);

		if (($this->logintype == 0)&&(!$onlycurl))
		{
			QX('STANDARD');
			$response=parent::__doRequest($request, $location, $action, $version);
			return $response;
		}
		else
		{
			QX('CURL');
            $curli = @curl_version();
            // OSS Spisovka v2.1 (i686-pc-linux-gnu) libcurl 7.7.3 (OpenSSL 0.9.6)
            $user_agent = "OSS Spisovka v2.1";
            if(isset($curli['host'])) $user_agent .= " (". $curli['host'] .")";
            if(isset($curli['version'])) $user_agent .= " libcurl ". $curli['version'] ."";
            if(isset($curli['ssl_version'])) $user_agent .= " (". $curli['ssl_version'] .")";
			
			$headers = array(
				'Method: POST',
				'Connection: Keep-Alive',
				'User-Agent: '.$user_agent,
				'Content-Type: text/xml; charset=utf-8',
				'SOAPAction: "'.$action.'"'
			);  
			$this->__last_request_headers = $headers;
			if ($this->ch == 0)
			{
				$this->ch = curl_init();
				curl_setopt($this->ch, CURLOPT_POST, true);
				curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
				curl_setopt($this->ch, CURLOPT_FAILONERROR, true);
				curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
				curl_setopt($this->ch, CURLINFO_HEADER_OUT, true);
				curl_setopt($this->ch, CURLOPT_UNRESTRICTED_AUTH,false);
				curl_setopt($this->ch, CURLOPT_NOBODY,false);
// na Linuxu nastavit verzi 3, na Windows ne !
				if (stristr(PHP_OS,'WIN') === false)
				{
					curl_setopt($this->ch, CURLOPT_SSLVERSION,3);
				}
				if ($this->logintype != 0)
				{
					if ($usenss == 1)
					{
						QX('usenss');
						QX('cert: '.$this->certfilename);
						QX('pwd: '.$this->passphrase);
						curl_setopt($this->ch, CURLOPT_SSLCERT,$this->certfilename);
						curl_setopt($this->ch, CURLOPT_SSLCERTPASSWD,$this->passphrase);
					}
					else
					{
						curl_setopt($this->ch, CURLOPT_SSLCERT,$this->certfilename);
						curl_setopt($this->ch, CURLOPT_SSLCERTPASSWD,$this->passphrase);
					}
				}
				curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, false); //kasle se na https certy  
				curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookiefilename);
				if ($proxylogin != '')
				{
					QX('######### PRISTUP PRES PROXY ############ '.$proxyaddress.':'.$proxyport);
					curl_setopt($this->ch, CURLOPT_PROXY, 'http://'.$proxyaddress.':'.$proxyport);
					curl_setopt($this->ch, CURLOPT_HTTPPROXYTUNNEL, true);				
					if ($proxyauth != '')
					{
						curl_setopt($this->ch, CURLOPT_PROXYUSERPWD, $proxylogin.':'.$proxypwd);
					}
				}
			}
			curl_setopt($this->ch, CURLOPT_URL, $location);
			curl_setopt($this->ch, CURLOPT_HTTPHEADER, $headers);
			curl_setopt($this->ch, CURLOPT_POSTFIELDS,$request);

			if (($this->logintype == 2)||($onlycurl))
			{
				QX($this->cookiename.'='.$this->cookievalue);
				curl_setopt($this->ch, CURLOPT_COOKIE,$this->cookiename.'='.$this->cookievalue);
			}

			$response = curl_exec($this->ch); 
			QX("------------------------------------------------------------------------");
			QX('CurlError: '.curl_errno($this->ch).' Message:'.curl_error($this->ch));
			QX("------------------------------------------------------------------------");
			QV($response);
			QX("------------------------------------------------------------------------");
			return $response;
		}
	}

}


// trida pro komunikaci s ISDS schrankou
class ISDSBox
{
	
	// sluzby pro pristup ke schrance
	var $OperationsWS;
	var $InfoWS;
	var $SearchWS;
	var $SupplementaryWS;
	var $ManipulationsWS;
	var $StatusCode;	// statuscode posledni akce
	var $StatusMessage;	// statusmessage posledni akce
	var $ErrorInfo;		// popis chyby vznikle pri volani sluzby posledni akce
	var $ValidLogin;	// true pokud probehlo uspesne prihlaseni
	var $cookiefilename;	// jmeno souboru ve kterem je ulozena cookie

	// konstruktor
	function ISDSBox(
		$logintype,	// zpusob prihlaseni. 0=jmeno heslo, 1=spisovka (certifikat), 2=hostovana spisovka (jmeno, heslo, certifikat)
		$loginname,	// prihlasovaci jmeno
		$password,	// prihlasovaci heslo
		$certfilename, 	// cesta k certifikatu
		$passphrase)	// heslo k soukromemu klici v certifikatu	
	{
		global $OperationsURL,$OperationsWSDL,
			$OperationsCertURL,$OperationsCertWSDL,
			$OperationshspisURL,$OperationshspisWSDL,
			$InfoURL,$InfoWSDL,
			$InfoCertURL,$InfoCertWSDL,
			$InfohspisURL,$InfohspisWSDL,
			$SearchURL,$SearchWSDL,
			$SearchCertURL,$SearchCertWSDL,
			$SearchhspisURL,$SearchhspisWSDL,
			$SupplementaryURL,$SupplementaryWSDL,
			$SupplementaryCertURL,$SupplementaryCertWSDL,
			$SupplementaryhspisURL,$SupplementaryhspisWSDL,
			$ManipulationsURL,$ManipulationsWSDL,
			$ManipulationsCertURL,$ManipulationsCertWSDL,
			$ManipulationshspisURL,$ManipulationshspisWSDL,
			$fiddler,$proxyaddress,$proxyport,$proxylogin,$proxypwd,$onlycurl;

		QX("Constructor");
		$this->ValidLogin=false;
		$this->NullRetInfo();

                //$this->cookiefilename = ini_get('upload_tmp_dir').'cookie'.time();
                $this->cookiefilename = tempnam('prilohy', 'cookie'.time());
                if(!file_exists($this->cookiefilename)) {
                    // cookie soubor nevytvoren
                    QX("Cookie nevytvoren !");
                    $this->ErrorInfo="Cookie nevytvoren";
                    return false;
                }

		QX("LoginType: ".$logintype);

		if (($logintype == 0)||($logintype == 2))
		{

			// posilame dummy pozadavek curlem

			$ch = curl_init();
			curl_setopt($ch, CURLOPT_COOKIESESSION, true);
			curl_setopt($ch, CURLOPT_POST, true);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($ch, CURLOPT_FAILONERROR, true);
			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
			curl_setopt($ch, CURLINFO_HEADER_OUT, true);
			curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH,true);

			if ($logintype == 0)
			{
				QX("Pripojujeme se jmenem a heslem na ".$OperationsURL);
				curl_setopt($ch, CURLOPT_URL, $OperationsURL);
			}
			else
			{
				QX("Pripojujeme se jmenem, heslem a certifikatem na ".$OperationshspisURL);
				curl_setopt($ch, CURLOPT_URL, $OperationshspisURL);
			}
			curl_setopt($ch, CURLOPT_USERPWD, $loginname.":".$password);
			if ($fiddler == 1)
			{
				curl_setopt($ch, CURLOPT_PROXY, 'http://127.0.0.1:8888');
				curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
			}

			if ($proxyaddress != '')
			{
				QX('######### PRISTUP PRES PROXY ############ '.$proxyaddress.':'.$proxyport);
				curl_setopt($ch, CURLOPT_PROXY, 'http://'.$proxyaddress.':'.$proxyport);
				curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);				
				if ($proxylogin != '')
				{
					curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxylogin.':'.$proxypwd);
				}
			}
			if (@$proxy != '')
			{
				curl_setopt($ch, CURLOPT_PROXY, @$proxy);
				curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);				
				if ($proxyauth != '')
				{
					curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
				}
			}

			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //kasle se na https certy  
			if ($logintype == 0 && stristr(PHP_OS,'WIN') === false)
			{
				// na Linuxu nastavit verzi 3, na Windows ne !
				curl_setopt($ch, CURLOPT_SSLVERSION,3);
			}
			QX('cookiefilename: '.$this->cookiefilename);
			curl_setopt($ch, CURLOPT_COOKIEJAR,$this->cookiefilename);
			curl_setopt($ch, CURLOPT_POSTFIELDS,
				"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
				"    <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n".
				"  <soap:Body>\n".
				"    <DummyOperation xmlns=\"http://isds.czechpoint.cz\">\n".
				"    </DummyOperation>\n".
				"  </soap:Body>\n".
				"</soap:Envelope>\n");

			QX("Call curl_exec");

			if ($logintype == 2)
			{
				curl_setopt($ch, CURLOPT_SSLCERT,$certfilename);
				curl_setopt($ch, CURLOPT_SSLCERTPASSWD,$passphrase);				
			}

			$result = curl_exec($ch); 

			QX("curl_exec: ".$result);
			QX("------------------------------------------------------------------------");
			QX('CurlError: '.curl_errno($ch).' Message:'.curl_error($ch));
			QX("------------------------------------------------------------------------");

			$header=curl_getinfo($ch, CURLINFO_HEADER_OUT);
	  		curl_close($ch);           

			QX($header);
			QX("\r\n"."------------------------------------------------------------------------");

			$x=strpos($header,"IPCZ",strpos($header,"Cookie:"));
			$y=strpos($header,"\n",$x);		
			$mycookie=substr($header,$x,$y-$x-1);
			//$cookie=split("=",substr($header,$x,$y-$x-1));
			$cookie=explode("=",substr($header,$x,$y-$x-1));
			if((count($cookie) != 2) or ($cookie[0] == "") or ($cookie[1] == ""))
			{
				QX("Nenalezena cookie !");
				$this->ErrorInfo="Nenalezena cookie";
				return false;
			}
	
			QX("Cookie - key: ".$cookie[0]);
			QX("Cookie - value: ".$cookie[1]);

			if ($logintype == 0)
			{
				if ($fiddler == 1)
				{
					$this->OperationsWS = new ISDSSoapClient($OperationsWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'trace'=>true,
						'exceptions'=>true));			}
				else
				{

					$this->OperationsWS = new ISDSSoapClient($OperationsWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
			}
			else
			{
				if ($fiddler == 1)
				{
					$this->OperationsWS = new ISDSSoapClient($OperationshspisWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));			}
				else
				{
					$this->OperationsWS = new ISDSSoapClient($OperationshspisWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
	
			}
			if ($logintype == 0)
			{
				$this->OperationsWS->__setCookie($cookie[0],$cookie[1]);
				if ($onlycurl)
				{
					$this->OperationsWS->cookiename=$cookie[0];
					$this->OperationsWS->cookievalue=$cookie[1];
				}
			}
			else
			{
				$this->OperationsWS->cookiename=$cookie[0];
				$this->OperationsWS->cookievalue=$cookie[1];
			}
		}
		else
		{
			if ($fiddler == 1)
			{
				$this->OperationsWS = new ISDSSoapClient($OperationsCertWSDL,array(
					'proxy_host'=>'127.0.0.1',
					'proxy_port'=>8888,
					'local_cert'=>$certfilename,
					'passphrase'=>$passphrase,
					'trace'=>true,
					'exceptions'=>true));
			}
			else
			{
				$this->OperationsWS = new ISDSSoapClient($OperationsCertWSDL,array(
					'local_cert'=>$certfilename,
					'passphrase'=>$passphrase,
					'trace'=>true,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
					'exceptions'=>true));
			}

		}

		$this->OperationsWS->certfilename=$certfilename;
		$this->OperationsWS->passphrase=$passphrase;
		$this->OperationsWS->ch=0;
		$this->OperationsWS->logintype=$logintype;
		$this->OperationsWS->loginname=$loginname;
		$this->OperationsWS->password=$password;
		$this->OperationsWS->cookiefilename=$this->cookiefilename;

		Sleep(2);

		QX("Call DummyOperation");
		try
		{
			$this->OperationsWS->DummyOperation();
		}
		catch (Exception $e)
		{
			QX("dummy except!");
			//var_dump($this->OperationsWS);
			$this->ErrorInfo=$e->getMessage();
			return false;
		}

		QX("After Dummy");


		switch ($logintype):
			case 0:
				if ($fiddler == 1)
				{
					$this->InfoWS = new ISDSSoapClient($InfoWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->InfoWS = new ISDSSoapClient($InfoWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->InfoWS->__setCookie($cookie[0],$cookie[1]);
				if ($onlycurl)
				{
					$this->InfoWS->cookiename=$cookie[0];
					$this->InfoWS->cookievalue=$cookie[1];
				}
				break;
			case 1:		
				if ($fiddler == 1)
				{
					$this->InfoWS = new ISDSSoapClient($InfoCertWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->InfoWS = new ISDSSoapClient($InfoCertWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				break;
			case 2:		
				if ($fiddler == 1)
				{
					$this->InfoWS = new ISDSSoapClient($InfohspisWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->InfoWS = new ISDSSoapClient($InfohspisWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->InfoWS->cookiename=$cookie[0];
				$this->InfoWS->cookievalue=$cookie[1];
				break;
		endswitch;

		$this->InfoWS->certfilename=$certfilename;
		$this->InfoWS->passphrase=$passphrase;
		$this->InfoWS->ch=$this->OperationsWS->ch;
		$this->InfoWS->logintype=$logintype;
		$this->InfoWS->cookiefilename=$this->cookiefilename;

		switch ($logintype):
			case 0:
				if ($fiddler == 1)
				{
					$this->SearchWS = new ISDSSoapClient($SearchWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->SearchWS = new ISDSSoapClient($SearchWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->SearchWS->__setCookie($cookie[0],$cookie[1]);
				if ($onlycurl)
				{
					$this->SearchWS->cookiename=$cookie[0];
					$this->SearchWS->cookievalue=$cookie[1];
				}
				break;
			case 1:
				if ($fiddler == 1)
				{
					$this->SearchWS = new ISDSSoapClient($SearchCertWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->SearchWS = new ISDSSoapClient($SearchCertWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				break;
			case 2:
				if ($fiddler == 1)
				{
					$this->SearchWS = new ISDSSoapClient($SearchhspisWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->SearchWS = new ISDSSoapClient($SearchhspisWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->SearchWS->cookiename=$cookie[0];
				$this->SearchWS->cookievalue=$cookie[1];
				break;
		endswitch;

		$this->SearchWS->certfilename=$certfilename;
		$this->SearchWS->passphrase=$passphrase;
		$this->SearchWS->ch=$this->OperationsWS->ch;
		$this->SearchWS->logintype=$logintype;
		$this->SearchWS->cookiefilename=$this->cookiefilename;

		switch ($logintype):
			case 0:
				if ($fiddler == 1)
				{
					$this->SupplementaryWS = new ISDSSoapClient($SupplementaryWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->SupplementaryWS = new ISDSSoapClient($SupplementaryWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->SupplementaryWS->__setCookie($cookie[0],$cookie[1]);
				if ($onlycurl)
				{
					$this->SupplementaryWS->cookiename=$cookie[0];
					$this->SupplementaryWS->cookievalue=$cookie[1];
				}
				break;
			case 1:
				if ($fiddler == 1)
				{
					$this->SupplementaryWS = new ISDSSoapClient($SupplementaryCertWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->SupplementaryWS = new ISDSSoapClient($SupplementaryCertWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				break;
			case 2:
				if ($fiddler == 1)
				{
					$this->SupplementaryWS = new ISDSSoapClient($SupplementaryhspisWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->SupplementaryWS = new ISDSSoapClient($SupplementaryhspisWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->SupplementaryWS->cookiename=$cookie[0];
				$this->SupplementaryWS->cookievalue=$cookie[1];
				break;
		endswitch;

		$this->SupplementaryWS->certfilename=$certfilename;
		$this->SupplementaryWS->passphrase=$passphrase;
		$this->SupplementaryWS->ch=$this->OperationsWS->ch;
		$this->SupplementaryWS->logintype=$logintype;
		$this->SupplementaryWS->cookiefilename=$this->cookiefilename;

		switch ($logintype):
			case 0:
				if ($fiddler == 1)
				{
					$this->ManipulationsWS = new ISDSSoapClient($ManipulationsWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->ManipulationsWS = new ISDSSoapClient($ManipulationsWSDL,array(
						'login'=>$loginname,
						'password'=>$password,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->ManipulationsWS->__setCookie($cookie[0],$cookie[1]);
				if ($onlycurl)
				{
					$this->ManipulationsWS->cookiename=$cookie[0];
					$this->ManipulationsWS->cookievalue=$cookie[1];
				}
				break;
			case 1:
				if ($fiddler == 1)
				{
					$this->ManipulationsWS = new ISDSSoapClient($ManipulationsCertWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->ManipulationsWS = new ISDSSoapClient($ManipulationsCertWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				break;
			case 2:
				if ($fiddler == 1)
				{
					$this->ManipulationsWS = new ISDSSoapClient($ManipulationshspisWSDL,array(
						'proxy_host'=>'127.0.0.1',
						'proxy_port'=>8888,
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'trace'=>true,
						'exceptions'=>true));
				}
				else
				{
					$this->ManipulationsWS = new ISDSSoapClient($ManipulationshspisWSDL,array(
						'local_cert'=>$certfilename,
						'passphrase'=>$passphrase,
						'proxy_host'=>$proxyaddress,
						'proxy_port'=>$proxyport,
						'proxy_login'=>$proxylogin,
						'proxy_password'=>$proxypwd,
						'trace'=>true,
						'exceptions'=>true));
				}
				$this->ManipulationsWS->cookiename=$cookie[0];
				$this->ManipulationsWS->cookievalue=$cookie[1];
				break;
		endswitch;

		$this->ManipulationsWS->certfilename=$certfilename;
		$this->ManipulationsWS->passphrase=$passphrase;
		$this->ManipulationsWS->ch=$this->OperationsWS->ch;
		$this->ManipulationsWS->logintype=$logintype;
		$this->ManipulationsWS->cookiefilename=$this->cookiefilename;


		$this->GetOwnerInfoFromLogin();
		if ($this->ErrorInfo != "")
		{
			return false;
		}
		$this->ValidLogin=true;

		return true;
	}

	function __destruct() 
	{
		global $LogoutURL;
		
		QX('volan destructor');

                if (isset($this->InfoWS)) {

                    if ($this->InfoWS->ch != 0)
                    {
			try
			{
                            curl_setopt($this->InfoWS->ch, CURLOPT_COOKIEJAR, $this->cookiefilename);
                            curl_setopt($this->InfoWS->ch, CURLOPT_URL, $LogoutURL);
                            curl_setopt($this->InfoWS->ch, CURLOPT_HTTPGETL, true);
                            $response = curl_exec($this->InfoWS->ch);
			}
			catch (Exception $e)
			{
			}
                    }
		}
                
		if (file_exists($this->cookiefilename))
		{
                    @unlink($this->cookiefilename);
		}
	}

	function NullRetInfo()
	// pomocna funkce
	{
		$this->ErrorInfo="";
		$this->StatusCode="";
		$this->StatusMessage="";
	}


	function CreateMessage(
	// Vytvori datovou zpravu a umisti ji do dane schranky. Vrati identifikaci vytvorene zpravy.
		$IDRecipient,		// Identifikace adresata
		$Annotation,		// Textova poznamka (vec, predmet, anotace)
		$AllowSubstDelivery,	// Nahradni doruceni povoleno/nepovoleno - pouze pro nektere subjekty (napr. soudy)
		$LegalTitleLaw,		// Zmocneni - cislo zakona
		$LegalTitlePar,		// Zmocneni - odstavec v paragrafu
		$LegalTitlePoint,	// Zmocneni - pismeno v odstavci
		$LegalTitleSect,	// Zmocneni - paragraf v zakone
		$LegalTitleYear,	// Zmocneni - rok vydani zakona
		$RecipientIdent,	// Spisova znacka ze strany prijemce, Nepovinne.
		$RecipientOrgUnit,	// Organizacni jednotka prijemce slovne, nepovinne, mozne upresneni prijemce pri podani z portalu
		$RecipientOrgUnitNum,	// Organizacni jednotka prijemce hodnotou z ciselniku, nepovinne, pokud nechcete urcit zadejte -1
		$RecipientRefNumber,	// Cislo jednaci ze strany prijemce, nepovinne
		$SenderIdent,		// Spisova znacka ze strany odesilatele
		$SenderOrgUnit,		// Organizacni jednotka odesilatele slovne. Nepovinne
		$SenderOrgUnitNum,	// Organizacni jednotka odesilatele hodnotou z ciselniku. Nepovinne.
		$SenderRefNumber,	// Cislo jednaci ze strany odesilatele. Nepovinne
		$ToHands,		// Popis komu je zasilka urcena
		$PersonalDelivery,	// Priznak "Do vlastnich rukou" znacici, ze zpravu muze cist pouze adresat nebo osoba s explicitne danym opravnenim
		$OVM,			// Priznak je-li DS odesilana v rezimu OVM
		$OutFiles)		// Pripojene soubory (pisemnosti)
	{
		QX("Call CreateMessage");
		$this->NullRetInfo();
		$Envelope = array(
			'dmSenderOrgUnit' => $SenderOrgUnit,
			'dmSenderOrgUnitNum' => $SenderOrgUnitNum,
			'dbIDRecipient' => $IDRecipient,
			'dmRecipientOrgUnit' => $RecipientOrgUnit,
			'dmRecipientOrgUnitNum' => $RecipientOrgUnitNum,
			'dmToHands' => $ToHands,
			'dmAnnotation' => $Annotation,
			'dmRecipientRefNumber' => $RecipientRefNumber,
			'dmSenderRefNumber' => $SenderRefNumber,
			'dmRecipientIdent' => $RecipientIdent,
			'dmSenderIdent' => $SenderIdent,
			'dmLegalTitleLaw' => $LegalTitleLaw,
			'dmLegalTitleYear' => $LegalTitleYear,
			'dmLegalTitleSect' => $LegalTitleSect,
			'dmLegalTitlePar' => $LegalTitlePar,
			'dmLegalTitlePoint' => $LegalTitlePoint,
			'dmPersonalDelivery' => $PersonalDelivery,
			'dmAllowSubstDelivery' => $AllowSubstDelivery,
			'dmOVM'=>$OVM);
		$MessageCreateInput = array(
			'dmEnvelope' => $Envelope,
			'dmFiles' => $OutFiles->FileInfos);	
		try
		{
			$MessageCreateOutput=$this->OperationsWS->CreateMessage($MessageCreateInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;
		}
		$MessageID=$MessageCreateOutput->dmID;
		$MessageStatus=$MessageCreateOutput->dmStatus;
		$this->StatusCode=$MessageStatus->dmStatusCode;
		$this->StatusMessage=$MessageStatus->dmStatusMessage;
		QX("MessageID: ".$MessageID);
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);
		return $MessageID;
	}

	// vytvori hromadnou datovou zpravu a umisti ji do danych schranek
	// vraci pole informujici o tom jak dopadlo odeslani zasilky jednotlivym adresatum
	// Jednotlive prvky vraceneho pole obsahuji tyto polozky:
	// dmID = identifikace vytvorene zpravy
	// dmStatus->dmStatusCode
	// dmStatus->dmStatusMessage	
	function CreateMultipleMessage(
		$Recipients,		// adresati zasilky. Pole poli obsahujici nasledujici polozky:
					// dbIDRecipient = ID adresata
					// dmRecipientOrgUnit = Organizacni jednotka adresata slovne
					// dmRecipientOrgUnitNum = Cislo organizacni jednotky adresata
					// dmToHands = popis komu je zasilka urcena
					// Pole adresatu muze obsahovat maximalne 50 prvku
		$Annotation,		// Textova poznamka (vec, predmet, anotace)
		$AllowSubstDelivery,	// Nahradni doruceni povoleno/nepovoleno - pouze pro nektere subjekty (napr. soudy)
		$LegalTitleLaw,		// Zmocneni - cislo zakona
		$LegalTitlePar,		// Zmocneni - odstavec v paragrafu
		$LegalTitlePoint,	// Zmocneni - pismeno v odstavci
		$LegalTitleSect,	// Zmocneni - paragraf v zakone
		$LegalTitleYear,	// Zmocneni - rok vydani zakona
		$RecipientIdent,	// Spisova znacka ze strany prijemce, Nepovinne.
		$RecipientRefNumber,	// Cislo jednaci ze strany prijemce, nepovinne
		$SenderIdent,		// Spisova znacka ze strany odesilatele
		$SenderOrgUnit,		// Organizacni jednotka odesilatele slovne. Nepovinne
		$SenderOrgUnitNum,	// Organizacni jednotka odesilatele hodnotou z ciselniku. Nepovinne.
		$SenderRefNumber,	// Cislo jednaci ze strany odesilatele. Nepovinne
		$PersonalDelivery,	// Priznak "Do vlastn�ch rukou" znacici, ze zpravu muze cist pouze adresat nebo osoba s explicitne danym opravnenim
		$OVM,			// Priznak je-li DS odesilana v rezimu OVM
		$OutFiles)		// Pripojene soubory (pisemnosti)
	{
		QX("Call CreateMultipleMessage");
		$this->NullRetInfo();
		$Envelope = array(
			'dmSenderOrgUnit' => $SenderOrgUnit,
			'dmSenderOrgUnitNum' => $SenderOrgUnitNum,
			'dmAnnotation' => $Annotation,
			'dmRecipientRefNumber' => $RecipientRefNumber,
			'dmSenderRefNumber' => $SenderRefNumber,
			'dmRecipientIdent' => $RecipientIdent,
			'dmSenderIdent' => $SenderIdent,
			'dmLegalTitleLaw' => $LegalTitleLaw,
			'dmLegalTitleYear' => $LegalTitleYear,
			'dmLegalTitleSect' => $LegalTitleSect,
			'dmLegalTitlePar' => $LegalTitlePar,
			'dmLegalTitlePoint' => $LegalTitlePoint,
			'dmPersonalDelivery' => $PersonalDelivery,
			'dmAllowSubstDelivery' => $AllowSubstDelivery,
			'dmOVM'=>$OVM);
		$MultipleMessageCreateInput = array(
			'dmRecipients' => $Recipients,
			'dmEnvelope' => $Envelope,
			'dmFiles' => $OutFiles->FileInfos);
		try
		{
			$MultipleMessageCreateOutput=$this->OperationsWS->CreateMultipleMessage($MultipleMessageCreateInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;
		}
		$MessageStatus=$MultipleMessageCreateOutput->dmStatus;
		$this->StatusCode=$MessageStatus->dmStatusCode;
		$this->StatusMessage=$MessageStatus->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);
		return $this->PrepareArray($MultipleMessageCreateOutput->dmMultipleStatus->dmSingleStatus);		
	}

	function MessageDownload(
	// Stazeni prijate zpravy z ISDS bez elektronickeho podpisu. Vrati stazenou zpravu.
		$MessageID)	// Identifikace zpravy
	{
		QX("Call MessageDownload MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$MessageDownloadOutput=$this->OperationsWS->MessageDownload($MessInput);

                        if( isset($MessageDownloadOutput->dmReturnedMessage) ) {
                            $ReturnedMessage=$MessageDownloadOutput->dmReturnedMessage;
                            $MessageStatus=$MessageDownloadOutput->dmStatus;
                            $this->StatusCode=$MessageStatus->dmStatusCode;
                            $this->StatusMessage=$MessageStatus->dmStatusMessage;
                            $ReturnedMessage->dmDm->dmFiles->dmFile=$this->PrepareArray($ReturnedMessage->dmDm->dmFiles->dmFile);
                            QX("StatusCode: ".$this->StatusCode);
                            QX("StatusMessage: ".$this->StatusMessage);
                            return $ReturnedMessage;
                        } else {
                            $this->ErrorInfo= "Zpráva neobsahuje data!";
                            return false;
                        }
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;
		}

	}

	function SignedMessageDownload(
	// Stazeni podepsane prijate zpravy. Vrati stazenou zpravu v binarnim formatu.
		$MessageID)	// Identifikace zpravy
	{
		QX("Call SignedMessageDownload MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$SignedMessDownOutput=$this->OperationsWS->SignedMessageDownload($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$ReturnedMessage=$SignedMessDownOutput->dmSignature;
		$MessageStatus=$SignedMessDownOutput->dmStatus;
		$this->StatusCode=$MessageStatus->dmStatusCode;
		$this->StatusMessage=$MessageStatus->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $ReturnedMessage;		
	}

	function SignedMessageDownloadToFile(
	// Stazeni podepsane prijate zpravy do souboru.
		$MessageID,	// Identifikace zpravy
		$FileName)	// Jmeno souboru, do ktereho bude zprava ulozena
	{
		$Message=$this->SignedMessageDownload($MessageID);
		if (($this->StatusCode == "0000") && ($this->ErrorInfo == ""))
		{
			if (file_put_contents($FileName,$Message))
			{
				return true;
			}
		}
		return false;
	}

	function SignedSentMessageDownload(
	// Stazeni podepsane odeslane zpravy. Vrati stazenou zpravu v binarnim formatu.
		$MessageID) // Identifikace zpravy
	{
		QX("Call SignedSentMessageDownload MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$SignedMessDownOutput=$this->OperationsWS->SignedSentMessageDownload($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$ReturnedMessage=$SignedMessDownOutput->dmSignature;
		$MessageStatus=$SignedMessDownOutput->dmStatus;
		$this->StatusCode=$MessageStatus->dmStatusCode;
		$this->StatusMessage=$MessageStatus->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $ReturnedMessage;		
	}

	function SignedSentMessageDownloadToFile(
	// Stazeni podepsane odeslane zpravy do souboru
		$MessageID,	// Identifikace zpravy
		$FileName)	// Jmeno souboru, do ktereho bude zprava ulozena
	{
		$Message=$this->SignedSentMessageDownload($MessageID);
		if (($this->StatusCode == "0000") && ($this->ErrorInfo == ""))
		{
			if (file_put_contents($FileName,$Message))
			{
				return true;
			}
		}
		return false;
	}

	function DummyOperation()
	{
		$this->OperationsWS->DummyOperation();
	}	

	function VerifyMessage(
	// Slouzi k porovnani hashe datove zpravy ulozene mimo ISDS s originalem. Vrati hash zpravy
		$MessageID)	// Identifikace zpravy
	{
		QX("Call VerifyMessage MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$MessageVerifyOutput=$this->InfoWS->VerifyMessage($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$Status=$MessageVerifyOutput->dmStatus;
		$this->StatusCode=$Status->dmStatusCode;
		$this->StatusMessage=$Status->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $MessageVerifyOutput->dmHash;
	}

	function MessageEnvelopeDownload(
	// Stazeni pouhe obalky prijate zpravy (bez pisemnosti). Vrati obalku zpravy.
		$MessageID)	// Identifikace zpravy
	{
		QX("Call MessageEnvelopeDownload MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$MessEnvelDownOutput=$this->InfoWS->MessageEnvelopeDownload($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$Status=$MessEnvelDownOutput->dmStatus;
		$this->StatusCode=$Status->dmStatusCode;
		$this->StatusMessage=$Status->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $MessEnvelDownOutput->dmReturnedMessageEnvelope;
	}

	function MarkMessageAsDownloaded(
	// Vybrana dorucena zprava bude oznacena jako prectena.
		$MessageID)	// Identifikace zpravy
	{
		QX("Call MarkMessageAsDownloaded MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$MarkMessOut=$this->InfoWS->MarkMessageAsDownloaded($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$MarkMessOut->dmStatus->dmStatusCode;
		$this->StatusMessage=$MarkMessOut->dmStatus->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return true;
	}

	function PrepareArray($A)
	{
		if (count($A) != 1)
		{
			return $A;
		}
		$B=array();
		$B[0]=$A;
		return $B;
	}

	function GetDeliveryInfo(
	// Stazeni informace o dodani, doruceni nebo nedoruceni zpravy. Vrati dorucenku.
		$MessageID)	// Identifikace zpravy
	{
		QX("Call GetDeliveryInfo MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$DeliveryMessageOutput=$this->InfoWS->GetDeliveryInfo($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$DeliveryMessageOutput->dmStatus->dmStatusCode;
		$this->StatusMessage=$DeliveryMessageOutput->dmStatus->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		$DeliveryMessageOutput->dmDelivery->dmEvents->dmEvent=$this->PrepareArray($DeliveryMessageOutput->dmDelivery->dmEvents->dmEvent);
		return $DeliveryMessageOutput->dmDelivery;
	}

	function GetSignedDeliveryInfo(
	// Stazeni podepsane informace o dodani, doruceni nebo nedoruceni zpravy
		$MessageID)	// Identifikace zpravy
	{
		QX("Call GetSignedDeliveryInfo MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$SignDeliveryMessOutput=$this->InfoWS->GetSignedDeliveryInfo($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$SignDeliveryMessOutput->dmStatus->dmStatusCode;
		$this->StatusMessage=$SignDeliveryMessOutput->dmStatus->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $SignDeliveryMessOutput->dmSignature;

	}

	function GetSignedDeliveryInfoToFile(
	// stazeni dorucenky v podepsanem tvaru do souboru
		$MessageID,	// Identifikace zpravy
		$FileName)	// jmeno souboru
	{
		$Delivery=$this->GetSignedDeliveryInfo($MessageID);
		if (($this->StatusCode == "0000") && ($this->ErrorInfo == ""))
		{
			if (file_put_contents($FileName,$Delivery))
			{
				return true;
			}
		}
		return false;
	}

	function GetListOfSentMessages(
		// Stazeni seznamu odeslanych zprav urceneho casovym intervalem, organizacni jednotkou odesilatele, 
		// filtrem na stav zprav a usekem poradovych cisel zaznamu. Vrati seznam zprav.
		$FromTime,	// Pocatek casoveho intervalu z nehoz maji byt zpravy nacteny
		$ToTime,	// Konec casoveho intervalu z nehoz maji byt zpravy nacteny
		$Offset,	// Cislo prvniho pozadovaneho zaznamu
		$Limit,		// Pocet pozadovanych zaznamu
		$StatusFilter,	// Filtr na stav zpravy. Je mozne specifikovat pozadovane 
			        // zpravy kombinaci nasledujicich hodnot (jde o bitove priznaky):
			        // 1 podana
				// 2 dostala razitko
				// 3 neprosla antivirem
				// 4 dodana
				// 5 dorucena fikci - tzn. uplynutim casu 10 dnu
				// 6 dorucena prihlasenim
				// 7 prectena
				// 8 nedorucitelna (znepristupnena schranka po odeslani)
				// 9 smazana
		$SenderOrgUnitNum) // Organizacni slozka odesilatele (z ciselniku)
	{
		QX("Call GetListOfSentMessages");
		$this->NullRetInfo();
		$ListOfSentInput=array(
			'dmFromTime'=>$FromTime,
			'dmToTime'=>$ToTime,
			'dmSenderOrgUnitNum'=>$SenderOrgUnitNum,
			'dmStatusFilter'=>$StatusFilter,
			'dmOffset'=>$Offset,
			'dmLimit'=>$Limit);
		try
		{
			$ListOfSentOutput=$this->InfoWS->GetListOfSentMessages($ListOfSentInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$ListOfSentOutput->dmStatus->dmStatusCode;
		$this->StatusMessage=$ListOfSentOutput->dmStatus->dmStatusMessage;
		$ListOfSentOutput->dmRecords->dmRecord=$this->PrepareArray($ListOfSentOutput->dmRecords->dmRecord);
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $ListOfSentOutput->dmRecords;
	}

	function GetListOfReceivedMessages(
		// Stazeni seznamu doslych zprav urceneho casovym intervalem, 
	        // zpresnenim organizacni jednotky adresata (pouze ESS), filtrem na stav zprav 
	        // a usekem poradovych cisel zaznamu
		$FromTime,	// Pocatek casoveho intervalu z nehoz maji byt zpravy nacteny
		$ToTime,	// Konec casoveho intervalu z nehoz maji byt zpravy nacteny
		$Offset,	// Cislo prvniho pozadovaneho zaznamu
		$Limit,		// Pocet pozadovanych zaznamu
		$StatusFilter,	// Filtr na stav zpravy. Je mozne specifikovat pozadovane 
			        // zpravy kombinaci nasledujicich hodnot (jde o bitove priznaky):
			        // 1 podana
				// 2 dostala razitko
				// 3 neprosla antivirem
				// 4 dodana
				// 5 dorucena fikci - tzn. uplynutim casu 10 dnu
				// 6 dorucena prihlasenim
				// 7 prectena
				// 8 nedorucitelna (znepristupnena schranka po odeslani)
				// 9 smazana
		$RecipientOrgUnitNum)	// Organizacni slozka adresata (z ciselniku)
	{
		QX("Call GetListOfReceivedMessages");
		$this->NullRetInfo();
		$ListOfReceivedInput=array(
			'dmFromTime'=>$FromTime,
			'dmToTime'=>$ToTime,
			'dmRecipientOrgUnitNum'=>$RecipientOrgUnitNum,
			'dmStatusFilter'=>$StatusFilter,
			'dmOffset'=>$Offset,
			'dmLimit'=>$Limit);
		try
		{
			$ListOfRecOutput=$this->InfoWS->GetListOfReceivedMessages($ListOfReceivedInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$ListOfRecOutput->dmStatus->dmStatusCode;
		$this->StatusMessage=$ListOfRecOutput->dmStatus->dmStatusMessage;
		$ListOfRecOutput->dmRecords->dmRecord=$this->PrepareArray($ListOfRecOutput->dmRecords->dmRecord);
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $ListOfRecOutput->dmRecords;
	}

	function FindDataBox(
		// vyhledani datove schranky
		$IdDb,
		$Type,	// typ datove schranky. Muze byt jedna z hodnot: FO,PFO,PFO_ADVOK,PFO_DANPOR,PFO_INSSPR,PO,PO_ZAK,PO_REQ,OVM,OVM_NOTAR,OVM_EXEKUT
		$dbState,  // stav schranky: 1 pristupna
		$ic,
		$FirstName,
		$MiddleName,
		$LastName,
		$LastNameAtBirth,
		$firmName,
		$biDate,
		$biCity,
		$biCounty,
		$biState,
		$adCity,
		$adStreet,
		$adNumberInStreet,
		$adNumberInMunicipality,
		$adZipCode,
		$adState,
		$nationality,
		$email,
		$telNumber)
		
	{
		QX("Call FindDataBox");
		$this->NullRetInfo();
		$OwnerInfo=array(
			'dbID'=>$IdDb,
			'dbType'=>$Type,
			'dbState'=>$dbState,
			'ic'=>$ic,
			'pnFirstName'=>$FirstName,
			'pnMiddleName'=>$MiddleName,
			'pnLastName'=>$LastName,
			'pnLastNameAtBirth'=>$LastNameAtBirth,
			'firmName'=>$firmName,
			'biDate'=>$biDate,
			'biCity'=>$biCity,
			'biCounty'=>$biCounty,
			'biState'=>$biState,
			'adCity'=>$adCity,
			'adStreet'=>$adStreet,
			'adNumberInStreet'=>$adNumberInStreet,
			'adNumberInMunicipality'=>$adNumberInMunicipality,
			'adZipCode'=>$adZipCode,
			'adState'=>$adState,
			'nationality'=>$nationality,
			'email'=>$email,
			'telNumber'=>$telNumber);
		$FindInput=array('dbOwnerInfo'=>$OwnerInfo);			
		try
		{
			$FindOutput=$this->SearchWS->FindDataBox($FindInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$FindOutput->dbStatus->dbStatusCode;
		$this->StatusMessage=$FindOutput->dbStatus->dbStatusMessage;
		$FindOutput->dbResults->dbOwnerInfo=$this->PrepareArray($FindOutput->dbResults->dbOwnerInfo);
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $FindOutput->dbResults;
	}

	function CheckDataBox(
		// overeni dostupnosti datove schranky
		// vrati:
		// 1 = schranka je pristupna
		// 2 = schranka je docasne znepristupnena a muze byt pozdeji opet zpristupnena
		// 3 = schranka je dosud neaktivni, existuje mene nez 15 dni a nikdo se do ni dosud neprihlasil
		// 4 = schranka je trvale znepristupnena a ceka 3 roky na smazani
		// 5 = schranka je smazana
		$DataBoxID) // ID schranky
	{
		QX("Call CheckDataBox");
		$this->NullRetInfo();
		$Inputdb=array('dbID'=>$DataBoxID);
		try
		{
			$Output=$this->SearchWS->CheckDataBox($Inputdb);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$Output->dbStatus->dbStatusCode;
		$this->StatusMessage=$Output->dbStatus->dbStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		

                if($this->StatusCode == "0000") {
                    return $Output->dbState;
                } else {
                    return 0;
                }
	}

	function GetNumOfMessages(
		// funkce vrati pole s pocty zasilek, indexovane stavem zasilek
	        // 1 podana
		// 2 dostala razitko
		// 3 neprosla antivirem
		// 4 dodana
		// 5 dorucena fikci - tzn. uplynutim casu 10 dnu
		// 6 dorucena prihlasenim
		// 7 prectena
		// 8 nedorucitelna (znepristupnena schranka po odeslani)
		// 9 smazana
		$received) // pokud true, ctou se prijate zasilky, pokud false, ctou se odeslane

	{
		QX("Call GetNumOfMessages");
		$Result=array();
		for ($i=1; $i<=9; $i++)
		{
			$Result[$i]=0;
		}
		$Step=512;
		$Start=1;
		do
		{	
			QX('Start: '.$Start);
			QX('Pocet: '.$Step);
			if ($received)
			{
				$Records=$this->GetListOfReceivedMessages('2000','3000',$Start,$Step,1023,null);
			}
			else
			{
				$Records=$this->GetListOfSentMessages('2000','3000',$Start,$Step,1023,null);
			}
			$Start=$Start+$Step;
			$NumOf=count($Records->dmRecord);
			QX('NumOf: '.$NumOf);
			for ($i=0;$i<$NumOf;$i++)
			{
				$Result[$Records->dmRecord[$i]->dmMessageStatus]++;
			}
		} while ($NumOf == $Step);
		return $Result;
	}

	function MarkAllReceivedMessagesAsDownloaded()
	// vsechny dorucene zpravy oznaci jako prectene
	{
		QX("Call MarkAllReceivedMessagesAsDownloaded");
		$Step=512;
		$Start=1;
		do
		{	
			QX('Start: '.$Start);
			QX('Pocet: '.$Step);
			$Records=$this->GetListOfReceivedMessages('2000','3000',$Start,$Step,1023,null);
			$Start=$Start+$Step;
			$NumOf=count($Records->dmRecord);
			QX('NumOf: '.$NumOf);
			for ($i=0;$i<$NumOf;$i++)
			{
				if ($Records->dmRecord[$i]->dmMessageStatus != 7)
				{
					$this->MarkMessageAsDownloaded($Records->dmRecord[$i]->dmID);
				}
			}
		} while ($NumOf == $Step);
		return true;		
	}

	function GetOwnerInfoFromLogin()
	// vrati udaje o majiteli schranky ke ktere jsme prihlaseni
	{
		QX("Call GetOwnerInfoFromLogin");
		$this->NullRetInfo();
		$Input=array('dbDummy'=>"");
		try
		{
			$Output=$this->SupplementaryWS->GetOwnerInfoFromLogin($Input);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$Output->dbStatus->dbStatusCode;
		$this->StatusMessage=$Output->dbStatus->dbStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return $Output->dbOwnerInfo;
	}

	function ConfirmDelivery($MessageID)
	// potvrzeni doruceni komercni zpravy
	{
		QX("Call ConfirmDelivery MessageID: ".$MessageID);
		$this->NullRetInfo();
		$MessInput=array(
			'dmID'=>$MessageID);
		try
		{
			$ConDerOut=$this->InfoWS->ConfirmDelivery($MessInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$ConDerOut->dmStatus->dmStatusCode;
		$this->StatusMessage=$ConDerOut->dmStatus->dmStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return true;
	}

	function SetOpenAddressing($BoxID)
	// povoli zadane schrance prijem komercnich zprav
	{
		QX("Call SetOpenAddressing BoxID: ".$BoxID);
		$this->NullRetInfo();
		$IDDBInput=array(
			'dbID'=>$BoxID);
		try
		{			
			$ReqStatusOut=$this->ManipulationsWS->SetOpenAddressing($IDDBInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$ReqStatusOut->dbStatus->dbStatusCode;
		$this->StatusMessage=$ReqStatusOut->dbStatus->dbStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return true;
	}

	function ClearOpenAddressing($BoxID)
	// zakaze zadane schrance prijem komercnich zprav
	{
		QX("Call ClearOpenAddressing BoxID: ".$BoxID);
		$this->NullRetInfo();
		$IDDBInput=array(
			'dbID'=>$BoxID);
		try
		{			
			$ReqStatusOut=$this->ManipulationsWS->ClearOpenAddressing($IDDBInput);
		}
		catch (Exception $e)
		{
			$this->ErrorInfo=$e->getMessage();
			return false;		
		}
		$this->StatusCode=$ReqStatusOut->dbStatus->dbStatusCode;
		$this->StatusMessage=$ReqStatusOut->dbStatus->dbStatusMessage;
		QX("StatusCode: ".$this->StatusCode);
		QX("StatusMessage: ".$this->StatusMessage);		
		return true;
	}


}

?>